El LM35 es un sensor analógico que devuelve la temperatura en forma de tensión, esta tensión devuelta es proporcional a la temperatura. Su rango comprende desde -55º hasta 150ºC y el valor devuelto es el equivalente a la temperatura dividida por 10, entonces en su salida se obtienen valores como estos.
|
|
|
En el MCU hay que implementar una regla de tres con el valor analógico leído, de forma que podamos trabajar con el valor devuelto en formato de temperatura real, ya sea para hacer un termómetro con avisador o simplemente para mostrar la lectura en un LCD.
Los ADC en el PIC18F452 devuelven valores con 10bits de resolución, se entiende que este valor comprende de 0 a 5v, por lo tanto su valor máximo es 1023 y equivale a los 5v. Para el ejemplo que mostramos mas abajo utilizaremos el sensor LM35 sin realimentacion negativa, con lo cual solo podemos obtener lecturas de temperatura mayores de 0º.
Para esto utilizaremos esta expresión:
Resolución por paso = Voltaje / Resolución ADC
Donde:
5v/1024 (10 bits) = 0,00488 * 1000 = 4,88
Ahora se multiplica por 10 el valor devuelto para obtener un segundo decimal del resultado de la conversion ADC/Temperatura, con esto tenemos un valor que hemos redondeado a 48.
A continuación mostramos un esquema de conexionado de un lector de temperatura con un LM35 un PIC18F452. La temperatura se muestra en un LCD Standard de 2x16 caracteres.
Esquema del circuito:

Codigo fuente:
program Adc_LM35
'*******************************************************************************
'Creado y verificado por: Julio Montagut
'Web: http://www.jvmbots.es
'
'Mikrobasic Version 7.0.3 (beta)
'
'-HARDWARE:
' MCU: PIC18F452 - HS - 8Mhz
' 1- LM35 conectado a PORTA.0 (AN0)
' 1- LCD 2x16 conectado en PORTD
'*******************************************************************************
dim temp_res as word
Resultado as word
OutTxt as byte[5]
main:
ADCON1 = %10001110 ' Configuracion Vref y AN0
TRISA = %00000001 ' PORTA.0 como entrada
Lcd_Init(PORTD) ' Inicializamos el LCD en PORTD
Lcd_Cmd(Lcd_CURSOR_OFF) ' Eliminamos el cursor
Lcd_Cmd(Lcd_Clear) ' Limpiamos el LCD
Lcd_Out(1, 1, "Temp:") ' Mostramos "Temp:" en el LCD
while TRUE
temp_res = Adc_Read(0) ' Lectura de la entrada analogica
Resultado=temp_res*48 ' Conversion ADC/Temperatura
wordtostr(Resultado,OutTxt) ' Convertimos la variable Resultado a texto
Lcd_Chr(1, 6, OutTxt[0]) ' Presentamos cada caracter en el LCD
Lcd_Chr(1, 7, OutTxt[1])
Lcd_Chr(1, 8, OutTxt[2])
Lcd_Chr(1, 9, ".")
Lcd_Chr(1, 10, OutTxt[3])
Lcd_Chr(1, 11, OutTxt[4])
delay_ms(1000) ' Delay de un segundo
wend
end.






