Termometro Digital
hmartin29 de Abril de 2013
14.145 Palabras (57 Páginas)390 Visitas
Termómetro digital
OBJETIVO.
El fin perseguido por este montaje es usar el ADC del PIC. El ADC es un módulo que convierte un voltaje analógico en una cifra digital. A su vez nosotros mediante otro artificio de software convertiremos la cifra hexadecimal en decimal. El convertidor analógico digital lo graduaremos para que mida de 5 milivoltios en 5 milivoltios.
La cifra obtenida será un número hexadecimal equivalente al nº de saltos dados. Así, si tengo 24(h) saltos y cada salto es de 5 milivoltios tendré un valor de B4(h) voltios. Como los humanos contamos con el código decimal, está cifra nos resulta muy difícil de cuantificar. Mediante un pequeño artificio matemático la convertimos al código decimal, obteniendo el nº 180(10), 180 milivoltios.
El sensor nos dice el fabricante que da 10 milivoltios por cada grado centígrado. Esos 180 milivoltios los dividimos entre diez y obtenemos 18,0 ºC
Esquema
Circuito electrónico: LCD + PIC + LM35D.
Fuente de alimentación: Regulada a 5,115 voltios
Patillaje del PIC 16F876.
Conexionado del PIC 16 F876.
Conexionado de la pantalla LCD 2 x 16.
Buzzer o chicharra.
Patillaje del LM35D.
Conexionado del sensor de temperatura LM35D.
PROGRAMA: termolm35.asm
El programa empezará titulando el montaje con la siguiente pantalla:
A continuación saldrá una carátula en la pantalla con los lugares
donde saldrán las temperaturas en formato hexadecimal ( nº directo
del ADC), formato hexadecimal del nº anterior pero multiplicado por
cinco ( cada salto del ADC es de 5 milivoltios) y por último en formato decimal.
Y por fin la temperatura en los tres formatos. Por ejemplo:
Nº hexadecimal del ADC = 0021h
Nº hexadecimal del ADC x 5 = 00A5h
Nº decimal = 016.5 ºC
;---------------------------------------------------------
;OSCILLATOR = XTAL/4 MHz.
;CODE PROTECT = CP OFF
;FUSES:
;WDT = NO
;PWRT = SI
;BODEN = SI
;LVP = NO
;CPD = NO
;WRT = SI
;DEBURGGER = NO
;-----------------------------------------------------
;-----------------------------------------------------
;Proyecto: termómetro LM35D
;-----------------------------------------------------
LIST p=16f876
INCLUDE "p16f876.inc"
pagina0 macro
bcf PCLATH,4
bcf PCLATH,3
endm
pagina1 macro
bcf PCLATH,4
bsf PCLATH,3
endm
pagina2 macro
bsf PCLATH,4
bcf PCLATH,3
endm
pagina3 macro
bsf PCLATH,4
bsf PCLATH,3
endm
;--------------------------
ORG 00h
goto inicio
ORG 04h
goto int
int
nop
retfie
ORG 10h
;----------------------------
; I N I C I O
;----------------------------
inicio
;Configuraciones de hard-soft.
;Configurar PA0-5 (A/D.); configurar puerto A para los convertidores ADC.
call banco1
movlw 84h
movwf ADCON1
call banco0
call paconfig
;Configurar PB1-7 salidas.; configurar puerto B para la LCD.
pagina3
call pbconfig
;Configuración inicial LCD.
call lconfigI
;Configuración de trabajo LCD.
call lconfigW
call lcdtm; TERMO
pagina0
;Activar/desactivar buzzer.
call bz1
call sg1
call bz1
;---------------------------------
;Termómetro LM35.
;---------------------------------
pagina3
call lcdtmc; TERMÓMETRO A/D,x5 y decimal.
pagina0
call sg1
call sg1
call bz300
convs
call banco1
movlw 84h
movwf ADCON1
call banco0
call paconfig
movlw 0c1h; CANAL0 y Fosc interno.
movwf ADCON0
call usg150
bsf ADCON0,GO
conv
btfsc ADCON0,GO
goto conv
call banco1
movf ADRESL,0
call banco0
movwf 61h
movf ADRESH,0
movwf 60h
pagina1
call multx5; multiplicar por 5 el nº del ADC en hexadecimal.
pagina0
pagina2
call hexdecT; convertir el nº hexadecimal en decimal.
pagina0
pagina3
call lcdbase2; ver el nº hex ADC.
call lcdbase3; ver el nº anterior mult x 5.
call lcdbase4; ver el nº en decimal.
pagina0
goto convs
;------------------------------------------
;------------------------------------------
;------------------------------------------
;-----------------------------------
;Configurar el Puerto A.
;-----------------------------------
paconfig
call banco1
movlw 1bh
movwf TRISA
call banco0
return
;------------------------------------------
;Subrutinas del BUZZER
;------------------------------------------
bz100
bsf PORTA,5
call msg100
bcf PORTA,5
return
bz300
bsf PORTA,5
call msg300
bcf PORTA,5
return
bz1
bsf PORTA,5
call sg1
bcf PORTA,5
return
;--------------------------------------------------------------
;SUBRUTINAS DE CAMBIO DE BANCOS.
;--------------------------------------------------------------
banco0
bcf STATUS,IRP
bcf STATUS,RP1
bcf STATUS,RP0
return
banco1
bcf STATUS,IRP
bcf STATUS,RP1
bsf STATUS,RP0
return
banco2
bsf STATUS,IRP
bsf STATUS,RP1
bcf STATUS,RP0
return
banco3
bsf STATUS,IRP
bsf STATUS,RP1
bsf STATUS,RP0
return
;--------------------------------------
;Subrutinas de retardos.
;-------------------------------------
;0c1h=193 goto= 2 useg
;decfsz= 1 useg o 2 useg si el PC es modificado o
;la condición es verdadera
;(decfsz= 1 useg) + (goto= 2 useg)= 3 useg.
; 3 x 193 = 579
; 579 x 579 = 335241 useg.
; 335241 x 3 = 1005723 useg.
sg1
call banco0
movlw 0c1h
movwf 30h
movwf 31h
movlw 03h
movwf 32h
salto1
decfsz 30h,1
goto salto1
goto recarga1
salto2
decfsz 31h,1
goto salto1
goto recarga2
salto3
decfsz 32h,1
goto salto1
return
recarga1
movlw 0c1h
movwf 30h
goto salto2
recarga2
movlw 0c1h
movwf 31h
goto salto3
;-------------------------------------
;Retardo de 300 mseg.
;------------------------------------
msg300
call banco0
movlw 0c1h
movwf 30h
movwf 31h
movlw 01h
movwf 32h
sato1
...