el lm35+pic

7
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. 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:

Upload: mario-rafael-escoto-maldonado

Post on 02-Jul-2015

1.534 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: El LM35+PIC

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.

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 ADCDonde:5v/1024 (10 bits) = 0,00488 * 1000 = 4,88Ahora 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:

Page 2: El LM35+PIC

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 wendend.

Page 3: El LM35+PIC

Este montaje permite obtener la temperatura en grados Celsius con un rango de 0 a 150, visualizados en 3 displays de 7 segmentos de cátodo común. El valor de la señal del sensor LM35 se manipula algebraícamente para adaptarla al rango de 0 a 150 con el ADC de 10bits. El método de visualización es el de multiplexión o conmutación, en donde los displays se encienden de forma alternada uno a la vez. Si la velocidad de conmutación es elevada, se observan los 3 displays como si estuviesen encendidos al mismo tiempo. (para este caso 1ms)program Termómetro2 'Programa Termómetro con displays de 7 segmentos ************************************* 'Rutina que permite medir y visualizar con tres displays de 7 segmentos un rango de 'temperatura entre 0 y 150 grados(C) empleando el conversor ADC del PIC + sensor LM35. 'Mikrobasic 7.2 ' 'Creado y verificado por: Alejandro De Nóbrega 'Web: http://www.jvmbots.es ' '-HARDWARE: ' MCU: PIC 16F88 ' Cristal o resonador: 4Mhz ' 3- Displays cátodo común. (RB0) --> SegA, (RB1) --> SegB, ..... (RB6) --> SegG. ' 1- Sensor de temperatura LM35 (RA0) ' 7- Resistencias de 220R ' 3- Resistencias de 1K ' 3- Transistores NPN de uso general (2N2222) ' El cátodo del display de la derecha (menos significativo) se conecta a través ' del transistor, cuya base se conecta en RA1, el segundo display en RA2 y el ' tercer display en RA3. '************************************************************************************dim valor, conv, aux as wordconst 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

Page 4: El LM35+PIC

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

conv = word(conv >> 4) aux = conv and $000F PORTB = numero[aux] PORTA.2 = 1 delay_ms(1) PORTA.2 = 0

conv = word(conv >> 4) aux = conv and $000F PORTB = numero[aux] PORTA.3 = 1 delay_ms(1) PORTA.3 = 0wendend.

Page 5: El LM35+PIC

Programa optimizado: program Termómetro2.1dim valor, conv, aux as worddim i as byteconst 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

Page 6: El LM35+PIC

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

wendend.