Hola amigos.
Tengo un problema con este proyecto que muestra la temperatura en un display lcd de 16x2, usando un pic 16f877 y un sensor lm35.
Como podrán apreciar el programa lee el conversor a/d, convierte el valor a temperatura en grados centígrados, y lo envía al display lcd.
He simulado el programa en proteus y funciona perfectamente.
Es por eso que lo implemente físicamente, pero no funciona como esperaba, ya que el valor que de temperatura que muestra el lcd varia constantemente siendo que la tensión que entrega el lm35 es muy estable. Por ejemplo en estos momentos el sensor arroja 277 milivoltios y en el lcd muestra 28,29,30 grados y va cambiando muy rápidamente, por lo que tuve que poner un delay de 500 milisegundos para que se alcance a leer.
He probado el programa con dos pic diferentes, cambie el cristal, y siempre ocurre lo mismo.
El programa es el siguiente:
#include <16f877a.h>
#device adc=10
#fuses xt, nowdt
#use delay (clock=4M)
#include <lcd.c>
void main ()
{
INT16 q;
FLOAT p;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
lcd_init();
FOR (;
{
set_adc_channel(1);
delay_us(20);
q=read_adc();
p=(5.0*q/1024.0)*100;
lcd_gotoxy(1,1);
printf(lcd_putc,"Temperatura %01.2fC",p);
delay_ms(500);
if(p>20){output_high(pin_b0);}
else {output_low(pin_b0);}
}
}