Estoy haciendo un controlador de temperatura leía por un LM35 (y otros dispositivos) que manda datos por bluetooth. Hace meses programé la conversión A/D para leer la temperatura con una ecuación lineal que tenía en cuenta el rango de temperatura (de 2 a 150º) y los bits de conversión, pero no la temperatura de referencia:
...
while(adgo); //Bucle mientras dura la conversión.
ad_value=ADRESH;
ad_value=(ad_value<<
|ADRESL;
//temp_value= (ad_value*((150-2)/1023))+2;
temp_value= ((ad_value-1)*0.1446725)+ 2;
printf(" Temperatura es: %3.2g, %Lx ", temp_value,ad_value);
...
Como en proteus, usando un resistor variable todo parecía ir bien, pensé que no había problemas y seguí con otras cosas. Pero ahora al montar en circuito en una placa, veo que la temperatura que muestra es demasiado baja y al consultar en el foro veo que usáis otras ecuaciones teniendo en cuenta la tensión de referencia, como en un post de Redpic:
T=24 significa que tengo 24ºC en el LM35A,
lo que corresponde a un valor AD adc=62.
Lo que es compatible con VREF - > 1000 mv / 256 = 3,90625 mV por cada Ud AD.
Luego 62 * 3,90625 mV = 242,1875 mV en RA1 y como tenemos 10 mv por grado
Entonces 242,1875 mV / 10 mVº = 24,21875.
Mi fórmula no es correcta, verdad?
0