No me gusta nada este tema xD seguro que algun dia lo toque pero ya ni recuerdo
El LM35 varia 10mV/ºC, para 25ºC tenes 250mV
Tu ADC con una Vref de 1.5V tenes que para 10 bits. los pasos mas pequeños estan dados en 1.5 / 1024 = 1.465mV
Pero como solo tomas los primeros 8 bits de los 10, tendrias una resolucion de 5.8mV, es lo minimo que podrias diferenciar ( 0.58ºC/bit )
Para tus 250mV/25ºC leerias en el ADC = 170 ( AAh - 00 1010 1010 ) pero estar recortando tus 2 ultimos bits asi que quedaria 2Ah a mostrar.
Esta es la parte mas dificil por el resultado da con coma, si fuera una Vref de 4.096V seria feliz, hay que representar ese valor A8h en un numero legible. ( Pienso lo facil que seria hacerlo en C xD )
Lo que se me ocurre es lo siguiente:
Comenzar de 0 y sumar 58 por cada bit de resultado del ADC, luego restar de a 100 para obtener la cantidad de grados y podes mostrarlos (A ese resultado pasarlo a BCD mientras se va sumando o hacerlo luego con el resultado general), esto teniendo en cuenta que el error es acumulativo, ya que no es exacto 0.58ºC sino que es 0.5859375ºC/bit
Si mostraras solo los grados y no sus decimales, a partir de 168 - A8h ( que te de el resultado el ADC) deberias sumar 1ºC , 336 deberias sumar 2ºC , 505 sumar 3ºC , y continuamos sumando de lo que obtenes en el primer paso.
La otra es hacer lo mismo PERO tomando como comienzo los 25ºC o donde tu sensor va a estar casi siempre.
Para tener menos error cerca de esa temperatura.
Lo ideal seria usar coma flotante (?), o una referencia de tension que sea multiplo de 2, Asi es mas facil de representar. y disminuye el error. Otra no se me ocurre. Sino que alguno explique como, la verdad que ya ni recuerdo.
*******EDIT:
Mirando por inet vi este ejemplo, aunque hace multiplicaciones de 16bits.
http://www.avr-asm-tutorial.net/avr_en/calc/FP_CONV10_EN.htmlLo que hace basicamente para no trabajar con numeros con coma, es multiplicarlo por un valor grande... yo hice 1.5/ 1024, pero si lo multiplico por 65536 (2^16) podria hacer primero la multiplicacion y luego dividirlo:
mi caso: 1.5 / 1024
Ese caso : ((1.5 * 65536) / 1024 ) * Valor ADC / 65536, entonces no trabajas con comas xD y el error se reduce. Esto te da el valor en voltios e.e me olvide decirlo xD