Página principal
Termometro basado en 16f876 y LM35
xsetaseta@gmail.com

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

fuente_asm       código_hex
Termometro -30ºC a +160ºC  Saltos de 0,25ºC





La prueba se hizo metiendo el detector en el frigo.

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