TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: IsaHarvar en 11 de Enero de 2011, 09:38:58
-
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<<8)|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
-
Mi tensión de ref+ es 2.5v y utilizo los 10 bits de adc:
La fórmula sería algo como (dígito* (2500mv/1023))/10mv/ºC ?
P.D.: En el simulador pongo 1022 en las fórmulas porque a 0V el dígito que me aparece en ADRES es 00 0000 0001 y como el máximo es 11 1111 1111, me salen 1022 bits en total. Es normal?