Este es el primer proyecto con el PIC16f876, se basa en el detector
de temperatura LM35.
El LM35 es un detector de temperatura que varia 10mV cada ºC y su
rango de medidas va de -55ºC a +150ºC.
Las tensiones según su temperatura son: 1500mV a 150ºC,
250mV a 25ºC, -550mV a -55ºC.
Empecé con el circuito
más
básico, sin ningún tipo de componente
externo y pero solo ofrecía temperaturas positivas y saltos de
0,5ºC.
Continué probando con componentes
mínimos una resistencia ajustable para VREF+, y
ofrecía saltos de 0,25ºC pero solo temperaturas positivas.
El siguiente paso era detectar temperaturas bajo cero. Para conseguir
tensiones negativas se recurre a elevar la masa del LM35 mediante un
diodo, alrededor de 600mV. Después de varios ensayos me di
cuenta que la tensión umbral del diodo variaba con la
temperatura ambiente, introduciendo un error en la medida de
temperatura, mínima pero se notaba.
Pensando en como corregir la variación de la tensión
umbral del diodo, decidí emplear la lectura de la tensión
umbral del diodo y restársela de la total.
El PIC16f876 se transforma en un voltímetro mostrando la salida
por un LCD.
Existen otros proyectos que se basan en un detector de temperatura que
mandan los datos de los grados mediante línea serie, pero mi
idea era practicar con el 16f876 y el convertidor A/D.
Para terminar recomiendo a los que utilicen el código para sus
proyectos que lo depuren y lo hagan mas legible y si encuentran
algún error me lo remitan.
xsetaseta@gmail.com
Termometro 0-160ºC Saltos de 0,25ºC
Esta
versión
solo utiliza un potenciometro para poner el voltaje de
referencia a 2,55V.
principioX
MOVLW B'00010000' ;PUERTA AN0, FRECUENCIA F/2, xxxFFCCC, FF=FRECUENCIA CCC=PUERTA
CALL ADCON
BCF STATUS,5 ; BANCO 0
MOVLW 0xc5
CALL AT_LCD
movfw numero
andlw 3
movwf temp
addlw 0
skpz
goto salto01
movlw D'48' ;0
CALL SENDCHAR
movlw D'48'
CALL SENDCHAR
goto inicio2
salto01
movlw 0xff
addwf temp,w
skpz
goto salto02
movlw D'50' ;0
CALL SENDCHAR
movlw D'53'
CALL SENDCHAR
goto inicio2
salto02
movlw 0xfe
addwf temp,w
skpz
goto salto03
movlw D'53' ;0
CALL SENDCHAR
movlw D'48'
CALL SENDCHAR
goto inicio2
salto03
movlw 0xfd
addwf temp,w
skpz
goto inicio2
movlw D'55' ;0
CALL SENDCHAR
movlw D'53'
CALL SENDCHAR
inicio2
MOVLW B'11011111'
CALL SENDCHAR
MOVLW D'67' ;C
CALL SENDCHAR
bcf STATUS,0
rrf numero2,1
rrf numero,1
bcf STATUS,0
rrf numero2,1
rrf numero,1
CALL BINTODEC
MOVLW 0xc0
CALL PRINTVOL2
MOVLW 0x2E ;.punto
CALL SENDCHAR
MOVLW B'00010000' ;PUERTA AN0, FRECUENCIA F/2, xxxFFCCC, FF=FRECUENCIA CCC=PUERTA
CALL ADCON
BCF STATUS,5 ; BANCO 0
CALL BINTODEC
MOVLW 0x80
CALL PRINTVOL2
;GOTO principioX
bsf PORTC,2
call DEMORA ;500ms
bcf PORTC,2
call DEMORA ;500ms
GOTO principioX
FIN
GOTO FIN
ADCON ;lectura desde 0.00 a 2.50 SELECCION DE ENTRADA EN W --- DEVUELVE LOS VOLTIOS EN W
BCF STATUS,0 ;BORRA CARRY
MOVWF temp
RLF temp,1
RLF temp,1
RLF temp,1
MOVFW temp
BCF STATUS,5 ; BANCO 0
;MOVLW B'10000001' ;10=f/32, 000=CANAL0(RA0/AN0),1=CONVERSIÓN EN MARCHA,0=x,1=cONVERSOR On
MOVWF ADCON0
BSF ADCON0,0 ;conversor ON
BSF STATUS,5 ; BANCO 1
MOVLW B'10000001' ;1=ALINEACIÓN A LA DERECHA,000=x,1110=AN0-A.Y VDD-VSS,
MOVWF ADCON1
call WAIT750
BCF STATUS,5 ; BANCO 0
bsf ADCON0,2 ;comienza la conversión
ESPERAADD255
BTFSC ADCON0,2
GOTO ESPERAADD255
BSF STATUS,5 ; BANCO 1
MOVFW ARDESL
BCF STATUS,5 ; BANCO 0
MOVWF numero
BCF ADCON0,0 ;conversor OFF
MOVFW ARDESH
MOVWF numero2
CLRF numero3
RETURN
Termometro 0-160ºC error de 2,3% Saltos de 0,5ºC
Esta
es
la versión mas sencilla de todas , se conecta directamente el
LM35 sin ningún tipo de componente adicional.
MOVLW B'00010000' ;PUERTA AN0, FRECUENCIA F/2, xxxFFCCC, FF=FRECUENCIA CCC=PUERTA
CALL ADCON
BCF STATUS,5 ; BANCO 0
MOVLW 0xc5
CALL AT_LCD
BTFSS numero,0
GOTO inicio1
movlw D'53'
CALL SENDCHAR
goto inicio2
inicio1
movlw D'48'
CALL SENDCHAR
inicio2
MOVLW B'11011111'
CALL SENDCHAR
MOVLW D'67' ;C
CALL SENDCHAR
bcf STATUS,0
rrf numero2
rrf numero
CALL BINTODEC
MOVLW 0xc0
CALL PRINTVOL2
MOVLW 0x2E ;.punto
CALL SENDCHAR
__________________________________
ADCON ;lectura desde 0.00 a 2.50 SELECCION DE ENTRADA EN W --- DEVUELVE LOS VOLTIOS EN W
BCF STATUS,0 ;BORRA CARRY
MOVWF temp
RLF temp,1
RLF temp,1
RLF temp,1
MOVFW temp
BCF STATUS,5 ; BANCO 0
;MOVLW B'10000001' ;10=f/32, 000=CANAL0(RA0/AN0),1=CONVERSIÓN EN MARCHA,0=x,1=cONVERSOR On
MOVWF ADCON0
BSF ADCON0,0 ;conversor ON
BSF STATUS,5 ; BANCO 1
MOVLW B'10000000' ;1=ALINEACIÓN A LA DERECHA,000=x,1110=AN0-A.Y VDD-VSS,
MOVWF ADCON1
call WAIT750
BCF STATUS,5 ; BANCO 0
bsf ADCON0,2 ;comienza la conversión
ESPERAADD255
BTFSC ADCON0,2
GOTO ESPERAADD255
BSF STATUS,5 ; BANCO 1
MOVFW ARDESL
BCF STATUS,5 ; BANCO 0
MOVWF numero
BCF ADCON0,0 ;conversor OFF
MOVFW ARDESH
MOVWF numero2
CLRF numero3
RETURN