Você está na página 1de 8

Termostato electrnico con PIC y LCD

Gracias a la sonda de temperatura LM35 hemos podido realizar este pequeo pero muy verstil termostato que sirve tanto para calentar como para enfriar.

El circuito centra su funcionamiento en el micro controlador PIC16F870 el cual dispone en su interior de convertidor AD de 10 bits de resolucin. Cuatro pulsadores permiten establecer el punto de activacin y desactivacin del rel. Estos parmetros se almacenan automticamente en la EEPROM interna del PIC por lo que no deben ser recargados al quitar la corriente. El LCD, una pantalla de 2 lneas x 16 caracteres indica en su parte superior la temperatura actual medida y en su parte inferior los parmetros inferior y superior. Un buzzer (del tipo con oscilador) pita por 100ms cada vez que se presiona un pulsador. El principio de funcionamiento es muy simple. Si la temperatura cae por debajo del lmite inferior se activa el rel. Si la temperatura sobrepasa el lmite superior se desactiva el rel. Dado que ambos puntos son seteables podemos lograr el punto de histresis (estado intermedio) que queramos. Si vamos a emplear este equipo para controlar, por ejemplo, una heladera deberemos conectar el compresor entre los contactos Comn y Normal cerrado del rel. De esta forma cuando la temperatura alcance el tope superior del seteo se encender el compresor y, cuando de tanto enfriar, alcance el tope inferior lo apagar. Si, en cambio, vamos a usar esto para calefaccionar, deberemos conectar el elemento calefactor entre los contactos Comn y Normal Abierto del rel. De esta forma, cuando la temperatura caiga bajo el seteo inferior el calefactor arrancar y, cuando de tanto calentar, supere el tope el calefactor ser desconectado. A primera vista el cdigo fuente parece algo complicado por lo extenso, pero es muy simple de entender. Primeramente se definen las posiciones de memoria a utilizar y los bits a emplear. Luego se inicializan las posiciones que as lo requieran y se lee de la EEPROM interna los seteos. Seguidamente se inicializa el LCD y se completan los caracteres fijos. Tras la primera conversin se coloca la temperatura en pantalla as como los seteos. Estos tres parmetros (Temp. actual, seteo inferior y seteo superior) son los nicos datos que se modifican en el LCD. Se compara si la temperatura esta por debajo de la mnima para conectar el rel o por sobre la mxima para desconectarlos. Luego se controlan las teclas de mando, si alguna es accionada se acta en consecuencia y por ltimo cicla al principio donde se toma una nueva muestra de la temperatura. Disponible tambin el cdigo compilado listo para cargar en el micro.

; Control de temperatura con LM35 y pantalla de LCD ; Una salida se activa ante una temp. baja y se desactiva ante una alta ambas seteables ; Guarda los parmetros en la EEPROM ; Micro: PIC16F870 a 4MHz XT pcl equ 0x02 ;Contador de programa (Parte baja)

estado ptoa ptob ptoc intcon eedata eeaddr adres LOW) adcon uni display dec cen tiempo1 tiempo2 letra el LCD menor mayor buffer

equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ

0x03 0x05 0x06 0x07 0x0B 0x0C 0x0D 0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28

;Registro de estados ;Puertos de E/S ;Controlador de interrupciones ;Registro de datos de la EEPROM ;Registro de direccion de la EEPROM ;Resultado de la conversin A/D (HIGH / ;Configuracin del conversor A/D ;Usados para manejar los datos a mostrar en

;Usados para temporizar ;Usado para apuntar la letra a colocar en ;Temperatura de activacin ;Temperatura de desactivacin ;Usado como registro temporal ;Bit de acarreo ;Flag indicador ;Bit 0 selector ;Bit 1 selector ;Bit que inicia de de de la resultado cero pgina de memoria pgina de memoria conversin (1) / Indica

#define CARRY estado, 0 #define CERO estado, 2 #define RP0 estado, 5 #define RP1 estado, 6 #define ADGO adcon, 2 finalizacin (0) #define EEREAD eedata, 0 #define EEWRITE eedata, 1 Indica finalizacin #define EEWREN eedata, 2 #define EEAREA eedata, 7 utilizar (0=AREA DE DATOS) #define MINS ptoa, 1 #define MINB ptoa, 2 #define MAXS ptoa, 3 #define MAXB ptoa, 4 #define BUZZER ptoc, 3 #define RELE ptoc, 4 enfriador) #define LCDE ptoc, 6 #define LCDRS ptoc, 7 bsf bcf movlw movwf clrf LCD) clrf movlw movwf bsf bcf bcf bcf ptoc b'10001110' adcon RP1 EEAREA RP1 RP0 RP0 RP1 b'00011111' ptoa ptob

;Bit que inicia la lectura de la EEPROM ;Bit que inicia la escritura de la EEPROM ;Bit que habilita la escritura en la EEPROM ;Bit que selecciona el rea de EEPROM a ;Sube el punto mnimo ;Baja el punto mnimo ;Sube el punto mximo ;Baja el punto mximo ;Salida al aviso acstico ;Rel que maneja la carga (calefactor / ;Habilitacin del LCD ;Seleccin de modo del LCD ;Pasa a pgina 1 ;Configura puerto A ;Puerto B completo como salidas (bus del ;Puerto B completo como salidas ;Configura los pines del Puerto A ;AN0 como nica entrada anloga ;Pasa a pgina 3 ;Selecciona el banco de EEPROM de datos ;Pasa a pgina 0

movlw b'01000001' Selecciona AN0 como entrada movwf adcon clrf clrf clrf bsf clrf EEPROM ptoa ptob ptoc RP1 eeaddr

;Enciende y configura el convertidor A/D -

;Apaga todo

;Pasa a la pgina 2 de memoria ;Direcciona la primera posicin de la

bsf RP0 ;Pasa a la pgina 3 de memoria bsf EEREAD ;Inicia la lectura de la EEPROM bcf RP0 ;Vuelve a la pgina 3 de memoria movf eedata, 0 ;Dato Ledo de la EEPROM -> W movwf menor ;Guarda el dato ledo de la EEPROM en MENOR (punto de activacin del rel) incf eeaddr ;Direcciona a la segunda posicin de la EEPROM bsf RP0 ;Pasa a la pgina 3 de memoria bsf EEREAD ;Inicia la lectura de la EEPROM bcf RP0 ;Vuelve a la pgina 3 de memoria movf eedata, 0 ;Dato Ledo de la EEPROM -> W movwf mayor ;Guarda el dato ledo de la EEPROM en MAYOR (punto de desactivacin del rel) bcf RP1 ;Pasa a la pgina 0 de memoria movlw b'00111000' lneas de texto call CONTROL movlw d'2' call DEMORA movlw b'00000110' hacia la derecha call CONTROL movlw d'2' call DEMORA movlw b'00001100' Caracter fijo call CONTROL movlw d'2' call DEMORA movlw b'00000001' posicin inicial call CONTROL movlw d'2' call DEMORA OTRA tabla call incf movf del ttulo DATO letra, 1 letra, 0 ;Enva el caracter al LCD ;Comprueba si ya envi los 16 caracteres clrf movf call letra letra, 0 LINEA1 ;Comunicacin con el LCD a ocho bits - Dos

;Demora 2ms ;Mensaje esttico, se desplaza el cursor

;Demora 2ms ;Enciende el display - Oculta el cursor -

;Demora 2ms ;Limpia la pantalla y pone cursor en

;Demora 2ms ;Coloca el ttulo en el LCD ;Letra actual -> W ;Obtiene el caracter a colocar desde la

sublw btfss goto movlw call movlw call OTRA2 tabla call incf movf del ttulo sublw btfss goto clrf movf call

d'16' CERO OTRA 0xC0 CONTROL d'1' DEMORA letra letra, 0 LINEA2 DATO letra, 1 letra, 0 d'16' CERO OTRA2

;Si no llego a la letra 16 sigue enviando ;Posiciona el cursor en la 2da. linea ;Demora 1ms ;Coloca el ttulo en el LCD ;Letra actual -> W ;Obtiene el caracter a colocar desde la ;Enva el caracter al LCD ;Comprueba si ya envi los 16 caracteres

;Si no llego a la letra 16 sigue enviando ;Coloca en el LCD la temp. inferior (de ;Coloca en el LCD la temp. superior (de ;Inicia la conversin A/D ;Espera que termine de convertir ;Pasa a pgina 1 (para acceder a los ocho ;Resultado de conversin -> W ;Pasa a pgina 1 ;Guarda el dato obtenido de ADRESL en el ;Limpia el CARRY ;Mira el bit menos significativo de ADRESH ;Si est en 1 pone en uno el carry ;Hace desaparecer el bit 0 de ADRESL, mete ADRESL

call VERINF activacin) call VERSUP desactivacin) CICLO bsf btfsc goto ADGO ADGO $ -1 RP0 resultado) adres, 0 RP0

bsf bits bajos del movf bcf

movwf buffer buffer temporal bcf CARRY btfsc adres, 0 (Bit 8) bsf CARRY rrf buffer, 1 el bit 0 de ADRESH por el 7 de

movf menor, 0 ;Punto de activacin -> W addlw d'1' ;Suma 1 a W subwf buffer, 0 ;W = Temp. Actual - (Menor + 1) btfss CARRY ;Si dio negativo es porque la temp. medida es igual o menor al punto de activacin bsf RELE ;Si dio negativo (si carry = 0) acciona el rel movf mayor, 0 subwf buffer, 0 btfsc CARRY la temp. de desactivacin ;Punto de desactivacin -> W ;W = Temp. Actual - (Mayor) ;Si dio negativo es porque an no alcanz

bcf el rel

RELE

;Si dio positivo (si carry = 1) desactiva ;Dato digitalizado -> W ;Obtiene UNI, DEC y CEN con el agregado de ;Coloca el cursor en la posicin 0Dh de la

movf buffer, 0 call DECIMAL 30h para la tabla ASCII movlw pantalla. call movf call movf call movf call btfss activacin call btfss activacin call btfss desactivacin call btfss desactivacin call goto LINEA1 addwf programa (para retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw LINEA2 addwf programa (para retlw retlw retlw 0x8D CONTROL cen, 0 DATO dec, 0 DATO uni, 0 DATO MINS SUBEMIN MINB BAJAMIN MAXS SUBEMAX MAXB BAJAMAX CICLO

;Coloca en el LCD las centenas ;Coloca las decenas ;Coloca las unidades ;Mira el pulsador de incremento en temp. de ;Mira el pulsador de decremento en temp. de ;Mira el pulsador de incremento en temp. de ;Mira el pulsador de decremento en temp. de

;Vuelve a medir y mostrar

pcl, 1 ;Suma el contenido de W al contador de explorar la tabla) "T" "E" "M" "P" "E" "R" "A" "T" "U" "R" "A" ":" " " " " " " " " pcl, 1 ;Suma el contenido de W al contador de explorar la tabla) " " " " " "

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw SUBEMIN incf call btfss goto goto el parmetro BAJAMIN decf call btfss goto SAVEMIN bsf clrf movf movwf call bcf goto SUBEMAX incf call btfss goto goto el parmetro BAJAMAX decf call btfss goto SAVEMAX bsf movlw movwf movf movwf call bcf goto EESAVE bsf bsf

" " " " " " b'01111111' "-" "-" b'01111110' " " " " " " " " " " " " menor, 1 VERINF MINS $ -1 SAVEMIN menor, 1 VERINF MINB $ -1 RP1 eeaddr menor, 0 eedata EESAVE RP1 TIC mayor, 1 VERSUP MAXS $ -1 SAVEMAX mayor, 1 VERSUP MAXB $ -1 RP1 d'1' eeaddr mayor, 0 eedata EESAVE RP1 TIC RP0 EEWREN

;Flecha izquierda ;Flecha derecha

;Suma 1 a la temp. de activacin ;Actualiza la informacin en el LCD ;Espera que suelte el pulsador ;Una vez que suelta la tecla va a guardar ;Resta 1 a la temp. de activacin ;Actualiza la informacin en el LCD ;Espera que suelte el pulsador ;Pasa a pgina 2 ;Direcciona el primer byte de la EEPROM ;Temp. Activacin -> EEPROM ;Ejecuta la rutina de grabacin ;Pasa a pgina 0 ;Va a hacer el TIC de teclado ;Suma 1 a la temp. de desactivacin ;Actualiza la informacin en el LCD ;Espera que suelte el pulsador ;Una vez que suelta la tecla va a guardar ;Resta 1 a la temp. de desactivacin ;Actualiza la informacin en el LCD ;Espera que suelte el pulsador ;Pasa a pgina 2 ;Direcciona el 2do. byte de la EEPROM ;Temp. Activacin -> EEPROM ;Ejecuta la rutina de grabacin ;Pasa a pgina 0 ;Va a hacer el TIC de teclado ;Pasa a pgina 3 ;Habilita la escritura en la EEPROM

movlw movwf movlw movwf bsf bcf btfsc goto bcf return TIC bsf movlw call bcf return

0x55 eeaddr 0xAA eeaddr EEWRITE EEWREN EEWRITE $ -1 RP0 BUZZER d'100' DEMORA BUZZER LCDRS ENVIAR LCDRS ptob d'1' DEMORA LCDE d'1' DEMORA LCDE d'1' DEMORA

;Secuencia de seguridad

;Inicia la grabacin ;Deshabilita la escritura ;Espera que termine de grabar ;Pasa a pgina 2 ;Acciona el buzzer ;Deja sonar el buzzer durante 100ms

CONTROL bcf (Control) goto DATO bsf (Dato) ENVIAR movwf bus del LCD movlw call bsf movlw call bcf movlw call return

;Pone en bajo la lnea de modo del LCD ;Se saltea la sig. lnea ;Pone en alto la lnea de modo del LCD ;Coloca el dato o control a enviar en el ;Demora 1ms ;Habilita el LCD ;Demora 1ms ;Deshabilita el LCD ;Demora 1ms ;Convierte el dato presente en W en UNI,

DECIMAL movwf uni DEC y CEN clrf dec clrf cen movlw d'100' CENTENA subwf uni, 1 btfss CARRY goto CIEN incf cen, 1 goto CENTENA CIEN addwf uni, 1 movlw d'10' DECENA subwf uni, 1 btfss CARRY goto DIEZ incf dec, 1 goto DECENA DIEZ addwf uni, 1 decenas ni centenas) movlw 0x30 CEN para que queden en ASCII addwf uni, 1

;Determina la cant. de centenas

;Determina la cant. de decenas

;Uni queda con la cant. de unidades (sin ;Le suma 30h a los valores de UNI, DEC y

addwf dec, 1 addwf cen, 1 return DEMORA movwf TOP2 movlw movwf TOP1 nop nop nop nop nop nop decfsz goto decfsz goto return tiempo2 d'110' tiempo1 ;Demora tantos milisegundos como valor en w

tiempo1, 1 TOP1 tiempo2, 1 TOP2 ;Temperatura de activacin -> W ;Obtiene UNI, DEC y CEN en formato ASCII ;Posiciona el cursor en el tercer caracter ;para escribir el punto de activacin ;Demora 1ms ;Coloca en el LCD las centenas ;Coloca las decenas ;Coloca las unidades

VERINF movf menor, 0 call DECIMAL movlw 0xC2 de la 2da. lnea call CONTROL movlw d'1' call DEMORA movf cen, 0 call DATO movf dec, 0 call DATO movf uni, 0 call DATO return VERSUP movf call movlw la 2da. lnea call movlw call movf call movf call movf call return org EEPROM data data end 0x28 0x32 mayor, 0 DECIMAL 0xCB CONTROL d'1' DEMORA cen, 0 DATO dec, 0 DATO uni, 0 DATO 0x2100

;Temperatura de desactivacin -> W ;Obtiene UNI, DEC y CEN en formato ASCII ;Posiciona el cursor en el caracter 12 de ;para escribir el punto de desactivacin ;Demora 1ms ;Coloca en el LCD las centenas ;Coloca las decenas ;Coloca las unidades

;Guarda los parmetros por default en la ;Punto de activacin: 40 grados ;Punto de desactivacin: 50 grados

Você também pode gostar