Beruflich Dokumente
Kultur Dokumente
• 1000 mv = 100ºC
• 240 mv = 24ºC
• -300 mv = -30ºC
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
'*******************************************************************************
main:
ADCON1 = %10001110 ' Configuracion Vref y AN0
TRISA = %00000001 ' PORTA.0 como entrada
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
main:
OPTION_REG = 0
INTCON = 0
ANSEL = %00000001
CMCON = %00000111
TRISA = %00000001
TRISB = %00000000
PORTB = 0
PORTA = 0
while true
valor = ADC_read(0)
aux = valor * 61
aux = aux / 125
valor = aux
conv = Dec2Bcd16(valor)
aux = conv and $000F
PORTB = numero[aux]
PORTA.1 = 1
delay_ms(1)
PORTA.1 = 0
Programa optimizado:
program Termómetro2.1
dim valor, conv, aux as word
dim i as byte
const numero as byte[10] = (63, 6, 91, 79, 102, 109, 125, 7, 127, 111)
main:
OPTION_REG = 0
INTCON = 0
ANSEL = %00000001
CMCON = %00000111
TRISA = %00000001
TRISB = %00000000
PORTB = 0
PORTA = 0
while true
valor = ADC_read(0)
valor = valor * 61
valor = valor / 125
conv = Dec2Bcd16(valor)
for i = 1 to 3
aux = conv and $000F
PORTB = numero[aux]
PORTA.i = 1
delay_ms(1)
PORTA.i = 0
conv = word(conv >> 4)
next i
wend
end.