• Sábado 21 de Diciembre de 2024, 10:57

Autor Tema:  Termometro Con Lm35  (Leído 4190 veces)

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Termometro Con Lm35
« en: Lunes 6 de Febrero de 2006, 17:28 »
0
Gente:

   Estoy teniendo problemas para visualizar la temperatura en un LCD tomando como referencia un LM35 en Ra0. El display funciona perfectamente pero no se realmente la rutina read_adc() que me tira ( binario, hex, ? ).
Yo estoy implementando estas lineas que les paso a continuacion pero me muestra en el display cualquier cosa. Ya chequee el LM35 con un tester y varia perfectamente como dice el datasheet 10 mV/C. Les paso el codigo.

#include <16F877.h>

#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#include <LCD2.h>

 int medicion;
 float temper, paco;
 int i, value, min, max;



main() {

   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );

 
   lcd_init(); //Inicia LCD

   while (1)
 
      {
 
        setup_adc( ADC_CLOCK_INTERNAL );

      delay_us (20);
      medicion=read_adc (); //Hace conversión AD
      setup_adc (adc_off); //Apaga ADC      
     
      temper=(medicion*5)256;
     
      lcd_gotoxy(1,1);
   
      printf(lcd_putc,"%03.1f",temper);
   
      delay_ms (1000);
   }

}

Desde ya muchas gracias.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Termometro Con Lm35
« Respuesta #1 en: Lunes 6 de Febrero de 2006, 20:53 »
0
Hola Farmada! En primer lugar, prueba declarar la variable medición como "long"; las variables int son de 8 bits, mientras que el ADC es de 10 bits.
No creo que haga falta la linea donde configuras el AD dentro del while, ya lo haces al principio.
Tampoco veo que inicies la conversión... Debes poner a 1 el bit 2 de ADCON0, y esperar a que este bit vuelva a 0. Entonces se completó la conversión. No se exactamente como trabaja la función read_adc()...
Bueno, prueba y nos cuentas!

Saludos

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Termometro Con Lm35
« Respuesta #2 en: Viernes 17 de Febrero de 2006, 19:32 »
0
Huquen:

    Muchas gracias por el aporte que has dado. Mira ya cambie totalmente el programa
y mide bastante bien, el problema es que tengo que medir temperaturas negativas y si bien estoy definiendo las variables como "signed int" y "signed long" las cuales manejan signo. Por el lado del LM35 lo subi de masa unos 1,25 V por lo que si mido con el tester pueo ver  perfectament las temperaturas negativas lo cual no es asi con el programa. No se si el problema esta en la funcion Read_Adc().
Les paso el programa por si a alguno se le ocurre algo. Tendia que poder medir de -20ª a -7" C.

#include<16F877.h>
#device   ADC=10
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C4,rcv=PIN_C5)//,ERRORS,stream = PORT1)
#include<stdio.h>
#include<STDLIB.h>
#include <LCD2.h>
#zero_ram


signed int value;
signed long Value1;


void main()
{
    lcd_init();
   set_tris_d(0x00);
   output_d(0x00);
   pepe = 30;


   setup_adc(ADC_CLOCK_INTERNAL);
       setup_adc_ports(ALL_ANALOG);
       set_adc_channel(2);

   while(1)
   {
      value = read_adc();
      delay_us(10);
      value1 = (5 * value * (100/1023));  // Convierto la medicion a ºC.
      lcd_gotoxy(1,1);
      printf(lcd_putc,"Temperatura: %3.0Ld", value1);
      delay_ms(1000);
   }
}

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Termometro Con Lm35
« Respuesta #3 en: Sábado 18 de Febrero de 2006, 00:04 »
0
Hola Farmada! Bien, al levantar la masa en 1.25V tendrás 1.25V (a la salida del LM35) para 0ªC. Es decir el display, para 0 Celsius, te mostrará 125 con monedas; según la formula que usas.
Entonces, al valor que calcules tendrás que restarle 125 y obtienes la temperatura.
Como puedes ver, estas sin problemas dentro del rango que quieres medir :)
Concejo: trata que los 1.25V sean lo mas estable posible, y (lógico) no dependiente de la temperatura...
Es más, si tu aplicación es delicada, puedes corregir cualquier desviación midiendo con el micro entre masa y la pata común del sensor ;)

Saludos :hola: