A continuación les demostrare como hacer un sistema de riego con el microcontrolador 16f873a controlando la hora de riego y el tiempo de riego por medio de un reloj digital y además tendrá un termómetro digital. Demostrando las variables en una lcd .
Bueno a continuación demostrare el programa en ccs le recomendaría que simularan este circuito en proteus 7 profesional. Para que se den una idea del funcionamiento del programa.
Programa en ccs y además les dejare el archivo .hex para cargarlo al microcontrolador solo que no tengo un espacio donde subir mis archivos para descargar pero les dejo el código maquina solo tienen que copiarlo en el bloc de notas y guardarlo con la extensión .hex y listo tienen su programa para cargarlo al microcontrolador suerte.
#include <16F873a.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>
int segundos,minutos,horas,temperatura;
int seg=0;
int n_horas=24;
int n_minutos =60;
int prende= 0;
int ehoras,eminutos;
int ahoras,aminutos;
//INTERRUPCION//
#int_rtcc //Habilita interrupción timer0
void interrupt_timer(void){
seg++;
if(seg==59){ //Condición de cambio
segundos++; // cuenta 1 segundo
seg=0;
delay_ms(300);
}}
void main(void){
setup_adc_ports(RA0_ANALOG);// configura RA0 como entrada analogica
set_tris_a(0xff);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64); //Configura timer0 y prescaler
set_timer0(131); //Inicializa timer0
enable_interrupts(INT_RTCC); //Habilita interrupción timer0
enable_interrupts(GLOBAL); //Habilita Interrupciones
lcd_init(); // inicializa el LCD
set_adc_channel(0);
delay_us(1000);
while(true){
temperatura=read_adc(); //lee valor analogico
if (input (PIN_A1) == 0){
horas++;
delay_ms(100);}
if (input (PIN_A2) == 0){
minutos ++;
delay_ms(100);}
if (horas > (n_horas-1)){
horas = 0;}
if (minutos > (n_minutos-1)){
minutos = 0;}
if (input (PIN_A3) == 0){
ehoras++;
delay_ms(100);}
if (input (PIN_A4) == 0){
eminutos ++;
delay_ms(100);}
if (ehoras > (n_horas-1)){
ehoras = 0;}
if (eminutos > (n_minutos-1)){
eminutos = 0;}
if (input (PIN_A5) == 0){
ahoras++;
delay_ms(100);}
if (input (PIN_C0) == 0){
aminutos ++;
delay_ms(100);}
if (ahoras > (n_horas-1)){
ahoras = 0;}
if (aminutos > (n_minutos-1)){
aminutos = 0;}
if(segundos>59){
segundos=0;
minutos++;
if(minutos>59)
{
minutos=0;
horas++;
if(horas>24)
horas=0;
} } {
if ((horas == ehoras)&& (minutos == eminutos))
((output_high(PIN_C2))&& (output_high(PIN_C3)));
if ((horas == ahoras)&& (minutos == aminutos))
((output_low(PIN_C2))&& (output_low(PIN_C3)));
}
printf (lcd_putc,"\fH:%02u:%02u Temp:%d%cC" ,horas,minutos,temperatura*2,0xdf);
printf (lcd_putc,"\nE:%02u:%02u A:%02u:%02u" ,ehoras,eminutos,ahoras,aminutos);
delay_ms(500);
}}}
//fin del programa ccs
Aquí tienen todos los archivos de la simulación en proteus y ademas el programa en ccs .
No hay comentarios:
Los comentarios nuevos no están permitidos.