Převodník: Čtení teplotního čidla LM35DZ a zobrazení na LCD

  1. Gratukuju :
ADCSRA|=ADSC;
     změnít na 
ADCSRA |=(1<<ADSC);//na toto jako jsou ostatní

Jak nepoužívám C, tak mi tohle uniklo.

  1. Načítá se hodnota v přerušení. Povolit přerušení, když ho používáš jsem považoval za naprosto automatické, ale to je asi dané zkušenostmi - pak člověk některé věci bere za tak samozřejmé, že mu uniknou. Nicméně, není nutné jej používat a můžeš hodnotu z AD převodníku číst přímo v programu. Pak bys navíc nepovoloval přerušení od ADC (bit ADIE). Fungovalo by to stejně. Důvod, proč jsem použil přerušení už jsem Ti psal posledně.

  2. Proč nepotřebuješ přepočet :

Hodnota napětí se vypočítá jako U=ADCUref/1024 pro 10-bitový převod.
Čtením pouze ADCH čteš jen horních 8 (z deseti) bitů AD převodníku.
Tudíž přepočet je U=ADCH
Uref/256.
Uref je nastavené na interní referenci 2,56V.
Po dosazení je U=ADCH*2,56/256=ADCH/100 [V].
1 bit tudíž odpovídá 1/100V.
Čidlo používá rozlišení 10mV/1 stupeň C => 1 stupeň = 1/100V.
Pokud tedy platí, že 1 stupeň C = 1/100 V, pak platí, že Teplota = ADCH.

Ještě doplním :
Pokud bys četl převodník celý (tedy 10 bitů), dostaneš výpočet
U=ADC*2,56/1024=ADC/400. Při stejné maximální hodnotě dostáváš, rozlišení 1/4 stupně C. S určitou chybou danou přesostí převodníku a čidla. Lépe tedy můžeš zaokrouhlit teplotu na celé číslo :
Teplota=celá část z (ADC/4+0,5) nebo jak to napsat …