You are on page 1of 8

Funcionamiento

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.

Cdigo fuente
; 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
estado
ptoa
ptob
ptoc
intcon
eedata
eeaddr
adres
adcon
uni
dec
cen
tiempo1
tiempo2
letra
menor
mayor
buffer

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

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

;Contador de programa (Parte baja)


;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 / LOW)
;Configuracin del conversor A/D
;Usados para manejar los datos a mostrar en display
;Usados para temporizar
;Usado para apuntar la letra a colocar en el LCD
;Temperatura de activacin
;Temperatura de desactivacin
;Usado como registro temporal

#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
finalizacin
#define EEWREN eedata, 2
#define EEAREA eedata, 7
(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
#define LCDE
ptoc, 6
#define LCDRS
ptoc, 7

;Bit de acarreo
;Flag indicador
;Bit 0 selector
;Bit 1 selector
;Bit que inicia

bsf
bcf
movlw
movwf
clrf
clrf
movlw
movwf
bsf
bcf
bcf
bcf
movlw
Selecciona AN0
movwf

;Pasa a pgina 1

RP0
RP1
b'00011111'
ptoa
ptob
ptoc
b'10001110'
adcon
RP1
EEAREA
RP1
RP0
b'01000001'
como entrada
adcon

de
de
de
la

resultado cero
pgina de memoria
pgina de memoria
conversin (1) / Indica

;Bit que inicia la lectura de la EEPROM


;Bit que inicia la escritura de la EEPROM - Indica
;Bit que habilita la escritura en la EEPROM
;Bit que selecciona el rea de EEPROM a utilizar
;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 / enfriador)
;Habilitacin del LCD
;Seleccin de modo del LCD

;Configura puerto A
;Puerto B completo como salidas (bus del LCD)
;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
;Enciende y configura el convertidor A/D -

clrf
clrf
clrf

ptoa
ptob
ptoc

bsf
RP1
clrf
eeaddr
bsf
RP0
bsf
EEREAD
bcf
RP0
movf
eedata, 0
movwf
menor
de activacin del rel)
incf
eeaddr
bsf
RP0
bsf
EEREAD
bcf
RP0
movf
eedata, 0
movwf
mayor
de desactivacin del rel)
bcf
RP1
texto

derecha

fijo

inicial

OTRA

;Apaga todo

;Pasa a la pgina 2 de memoria


;Direcciona la primera posicin de la EEPROM
;Pasa a la pgina 3 de memoria
;Inicia la lectura de la EEPROM
;Vuelve a la pgina 3 de memoria
;Dato Ledo de la EEPROM -> W
;Guarda el dato ledo de la EEPROM en MENOR (punto
;Direcciona a la segunda posicin de la EEPROM
;Pasa a la pgina 3 de memoria
;Inicia la lectura de la EEPROM
;Vuelve a la pgina 3 de memoria
;Dato Ledo de la EEPROM -> W
;Guarda el dato ledo de la EEPROM en MAYOR (punto
;Pasa a la pgina 0 de memoria

movlw

b'00111000'

;Comunicacin con el LCD a ocho bits - Dos lneas de

call
movlw
call
movlw

CONTROL
d'2'
DEMORA
b'00000110'

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

call
movlw
call
movlw

CONTROL
d'2'
DEMORA
b'00001100'

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

call
movlw
call
movlw

CONTROL
d'2'
DEMORA
b'00000001'

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

call
movlw
call

CONTROL
d'2'
DEMORA

;Demora 2ms

clrf
movf
call
call
incf

letra
letra, 0
LINEA1
DATO
letra, 1

;Coloca el ttulo en el LCD


;Letra actual -> W
;Obtiene el caracter a colocar desde la tabla
;Enva el caracter al LCD

movf
sublw
btfss
goto

letra, 0
d'16'
CERO
OTRA

;Comprueba si ya envi los 16 caracteres del ttulo

movlw
call
movlw
call

0xC0
CONTROL
d'1'
DEMORA

;Posiciona el cursor en la 2da. linea

;Si no llego a la letra 16 sigue enviando

;Demora 1ms

OTRA2

clrf
movf
call
call
incf

letra
letra, 0
LINEA2
DATO
letra, 1

;Coloca el ttulo en el LCD


;Letra actual -> W
;Obtiene el caracter a colocar desde la tabla
;Enva el caracter al LCD

movf
sublw
btfss
goto

letra, 0
d'16'
CERO
OTRA2

;Comprueba si ya envi los 16 caracteres del ttulo


;Si no llego a la letra 16 sigue enviando

call
VERINF
call
VERSUP
desactivacin)

;Coloca en el LCD la temp. inferior (de activacin)


;Coloca en el LCD la temp. superior (de

CICLO

;Inicia la conversin A/D


;Espera que termine de convertir

bsf
btfsc
goto

ADGO
ADGO
$ -1

bsf
RP0
del resultado)
movf
adres, 0
bcf
RP0

;Pasa a pgina 1 (para acceder a los ocho bits bajos

movwf
buffer
temporal
bcf
CARRY
btfsc
adres, 0
bsf
CARRY
rrf
buffer, 1
de ADRESH por el 7 de ADRESL

;Guarda el dato obtenido de ADRESL en el buffer

movf
menor, 0
addlw
d'1'
subwf
buffer, 0
btfss
CARRY
o menor al punto de activacin
bsf
RELE

;Punto de activacin -> W


;Suma 1 a W
;W = Temp. Actual - (Menor + 1)
;Si dio negativo es porque la temp. medida es igual

movf
mayor, 0
subwf
buffer, 0
btfsc
CARRY
de desactivacin
bcf
RELE

;Punto de desactivacin -> W


;W = Temp. Actual - (Mayor)
;Si dio negativo es porque an no alcanz la temp.

movf
buffer, 0
call
DECIMAL
la tabla ASCII

;Dato digitalizado -> W


;Obtiene UNI, DEC y CEN con el agregado de 30h para

;Resultado de conversin -> W


;Pasa a pgina 1

;Limpia el CARRY
;Mira el bit menos significativo de ADRESH (Bit 8)
;Si est en 1 pone en uno el carry
;Hace desaparecer el bit 0 de ADRESL, mete el bit 0

;Si dio negativo (si carry = 0) acciona el rel

;Si dio positivo (si carry = 1) desactiva el rel

movlw
call

0x8D
CONTROL

;Coloca el cursor en la posicin 0Dh de la pantalla.

movf
call
movf
call
movf
call

cen, 0
DATO
dec, 0
DATO
uni, 0
DATO

;Coloca en el LCD las centenas


;Coloca las decenas
;Coloca las unidades

btfss
activacin
call
btfss
activacin
call
btfss
desactivacin
call
btfss
desactivacin
call
goto

MINS

;Mira el pulsador de incremento en temp. de

SUBEMIN
MINB

;Mira el pulsador de decremento en temp. de

BAJAMIN
MAXS

;Mira el pulsador de incremento en temp. de

SUBEMAX
MAXB

;Mira el pulsador de decremento en temp. de

BAJAMAX
CICLO

;Vuelve a medir y mostrar

LINEA1 addwf
(para explorar
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

pcl, 1
la tabla)
"T"
"E"
"M"
"P"
"E"
"R"
"A"
"T"
"U"
"R"
"A"
":"
" "
" "
" "
" "

;Suma el contenido de W al contador de programa

LINEA2 addwf
(para explorar
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

pcl, 1
la tabla)
" "
" "
" "
" "
" "
" "
b'01111111'
"-"
"-"
b'01111110'
" "
" "
" "
" "
" "
" "

;Suma el contenido de W al contador de programa

SUBEMIN incf
call
btfss
goto
goto
parmetro

menor, 1
VERINF
MINS
$ -1
SAVEMIN

;Suma 1 a la temp. de activacin


;Actualiza la informacin en el LCD
;Espera que suelte el pulsador

;Flecha izquierda
;Flecha derecha

;Una vez que suelta la tecla va a guardar el

BAJAMIN decf
call
btfss
goto

menor, 1
VERINF
MINB
$ -1

;Resta 1 a la temp. de activacin


;Actualiza la informacin en el LCD
;Espera que suelte el pulsador

SAVEMIN bsf
clrf
movf
movwf
call
bcf
goto

RP1
eeaddr
menor, 0
eedata
EESAVE
RP1
TIC

;Pasa a pgina 2
;Direcciona el primer byte de la EEPROM

SUBEMAX incf
call
btfss
goto
goto
parmetro

mayor, 1
VERSUP
MAXS
$ -1
SAVEMAX

;Suma 1 a la temp. de desactivacin


;Actualiza la informacin en el LCD
;Espera que suelte el pulsador

BAJAMAX decf
call
btfss
goto

mayor, 1
VERSUP
MAXB
$ -1

;Resta 1 a la temp. de desactivacin


;Actualiza la informacin en el LCD
;Espera que suelte el pulsador

SAVEMAX bsf
movlw
movwf
movf
movwf
call
bcf
goto

RP1
d'1'
eeaddr
mayor, 0
eedata
EESAVE
RP1
TIC

;Pasa a pgina 2

EESAVE bsf
bsf
movlw
movwf
movlw
movwf
bsf
bcf
btfsc
goto
bcf
return

RP0
EEWREN
0x55
eeaddr
0xAA
eeaddr
EEWRITE
EEWREN
EEWRITE
$ -1
RP0

;Pasa a pgina 3
;Habilita la escritura en la EEPROM
;Secuencia de seguridad

TIC

BUZZER
d'100'
DEMORA
BUZZER

;Acciona el buzzer

LCDRS
ENVIAR
LCDRS
ptob

;Pone en bajo la lnea de modo del LCD (Control)


;Se saltea la sig. lnea
;Pone en alto la lnea de modo del LCD (Dato)
;Coloca el dato o control a enviar en el bus del LCD

bsf
movlw
call
bcf
return

CONTROL bcf
goto
DATO
bsf
ENVIAR movwf

;Temp. Activacin -> EEPROM


;Ejecuta la rutina de grabacin
;Pasa a pgina 0
;Va a hacer el TIC de teclado

;Una vez que suelta la tecla va a guardar el

;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

;Inicia la grabacin
;Deshabilita la escritura
;Espera que termine de grabar
;Pasa a pgina 2

;Deja sonar el buzzer durante 100ms

movlw
call
bsf
movlw
call
bcf
movlw
call
return
DECIMAL movwf
clrf
clrf
movlw
CENTENA subwf
btfss
goto
incf
goto
CIEN
addwf
movlw
DECENA subwf
btfss
goto
incf
goto
DIEZ
addwf
centenas)

d'1'
DEMORA
LCDE
d'1'
DEMORA
LCDE
d'1'
DEMORA
uni
dec
cen
d'100'
uni, 1
CARRY
CIEN
cen, 1
CENTENA
uni, 1
d'10'
uni, 1
CARRY
DIEZ
dec, 1
DECENA
uni, 1

;Demora 1ms
;Habilita el LCD
;Demora 1ms
;Deshabilita el LCD
;Demora 1ms
;Convierte el dato presente en W en UNI, DEC y CEN
;Determina la cant. de centenas

;Determina la cant. de decenas

;Uni queda con la cant. de unidades (sin decenas ni

movlw
0x30
que queden en ASCII
addwf
uni, 1
addwf
dec, 1
addwf
cen, 1
return

;Le suma 30h a los valores de UNI, DEC y CEN para

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

VERINF movf
call
movlw
2da. lnea
call
movlw
call
movf

menor, 0
DECIMAL
0xC2

;Temperatura de activacin -> W


;Obtiene UNI, DEC y CEN en formato ASCII
;Posiciona el cursor en el tercer caracter de la

CONTROL
d'1'
DEMORA
cen, 0

;para escribir el punto de activacin

tiempo1, 1
TOP1
tiempo2, 1
TOP2

;Demora 1ms
;Coloca en el LCD las centenas

call
movf
call
movf
call
return
VERSUP movf
call
movlw
lnea
call
movlw
call
movf
call
movf
call
movf
call
return
org
data
data
end

DATO
dec, 0
DATO
uni, 0
DATO

;Coloca las decenas


;Coloca las unidades

mayor, 0
DECIMAL
0xCB

;Temperatura de desactivacin -> W


;Obtiene UNI, DEC y CEN en formato ASCII
;Posiciona el cursor en el caracter 12 de la 2da.

CONTROL
d'1'
DEMORA
cen, 0
DATO
dec, 0
DATO
uni, 0
DATO

;para escribir el punto de desactivacin

0x2100
0x28
0x32

;Guarda los parmetros por default en la EEPROM


;Punto de activacin: 40 grados
;Punto de desactivacin: 50 grados

;Demora 1ms
;Coloca en el LCD las centenas
;Coloca las decenas
;Coloca las unidades