przede wszystkim to zmień tą linię
Cytuj:
ADMUX |= (ADMUX & 0xF8) | kanal;
na prawidłową - bo jest tu mały błąd i gdy zachce ci się mierzyć napięcie na więcej niż 1 kanale to będziesz miał ZONK'a , zaglądaj proszę na stronę z uaktualnieniami do książki
http://atnel.pl/uaktualnienia-programow-do-dvd.htmlmasz tam w tabelce:
Cytuj:
Błąd pomiaru napięcia za pomocą kilku kanałów w funkcji pomiar(), omawianej w książce, rozdział n/t ADC
poza tym skoro sumujesz 100 razy wynik z zakresu 0 -1024 to przecież może ci zabraknąć zakresu w zmiennej pm bo masz ją zdefiniowaną jako 16-bitową (uint16_t)
![Smutny :(](https://forum.atnel.pl/images/smilies/icon_e_sad.gif)
... więc od razu zwiększ typ dla pm na uint32_t
i np też zamiast robić jawne rzutowanie (chociaż to nie jest akurat błąd):
Kod:
pm=(uint32_t)pom/100;
to rób to tak:
Kod:
pm = pom / 100UL;
wygodniej
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]