https://www.sparkfun.com/datasheets/IC/AD595.pdfNo se cuales son las temperaturas que vos queres llegar, pero segun la tabla del datasheet es un aproximado de 10mV/ºC la salida del AD594 para temperaturas desde 0 a 200ºC.
Y vos tenes que con 10 bits (1024 divisiones) y supongo que 5V de referencia positiva, tendrias algo de 4.88mV/bit
De arriba tenemos que 10mV/ºC es lo mismo que 0,1 ºC/mV, juntando con el valor que obtuvimos de la division del ADC nos queda 0,1 ºC/mV * 4.88 mV / bit = 0.488 ºC/bit
Entonces:
Temperatura medida = Lectura del ADC * 0.488
temp = read_adc() * 0.488;
Por lo que tu formula esta BIEN, lo que tiene malo la formula es la ganas de complicarse de mas.
Por ejemplo Una lectura del ADC de 20,en ambas formulas es: 9.76
En esta formula ese extra de restarle 0.0030944 a un numero que es GRANDE, por que leer en el ADC 20 y multiplicarlo por 5000/1024 es casi 100. Restarle eso no tienen sentido.. Y luego dividirlo por 10, te deja exactamente con la formula que te pase. En fin... Es lo mismo.
Si cambiando esto comienza a funcionar, entonces es un tema de no haber casteado algun (float) en (5000/1024). Pero sigo pensando que es excesivo la formula.
Y otras cosas mas,
- la maxima resolucion es de casi 0.5ºC que obtenes de esta forma. Por ahi es mejor reducir la referencia de voltaje positiva a un valor que permita mejor resolucion.
- tal ves ni siquiera se necesite que sea un float temp. que sea un int, te perdes unicamente los valores con coma, de todas formas no vas a ver incrementos de 0.1
- Podes hacer oversampling para aumentar en 1 bit la resolucion.
- No se que temperaturas pensas mejor, pero superando los valores de 200ºC, en la tabla ya no respeta los valores de 10mV/ºC y podria hacerse por tramos o buscar alguna funcion polinomica.