Szanowni Forumowicze,
po przeczytaniu kilku artykułów i dokumentu od Atmela chciałem uruchomić ADC celem zmierzenia napięcia baterii na dzielniku rezystorowym.
Konfiguracja:
- dzielnik rezystorowy, w szeregu 3 oporniki 1k;
- wtórnik napięciowy na WO;
- wyjście wtórnika podłączone do pinu PB2;
- procesor taktowany wewnętrznym zegarem 32MHz;
- adc w trybie signed i single-ended;
Funkcja inicjalizująca ADC:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wykonuję ją na początku programu, przed uruchomieniem przerwań.
Wywołuję za każdym razem jednorazowy pomiar:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Obsługa przerwania z gotowym wynikiem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie potrzebuję dużej dokładności, stąd wybór 8bit rozdzielczości, oraz nie potrzebuję trybu free-run, gdyż to ma być jedynie wskaźnik napięcia na baterii pokazujący stan naładowania. Kilka procent błędu względem wyniku normalnego mi w zupełności wystarczy.
Dzielnik, jak wspominałem, to 3 rezystory szeregowo, napięcie mierzę na ostatnim (za nim GND). I jakie wyniki? Dla napięcia 1,28V na rezystorze otrzymuję ADC = 112. Po przeliczeniu na napięcie, wg wzoru: V_in = ADC*V_ref/256 otrzymuję wynik ok. 0.89V. Wynik jest skandaliczny. Nie wiem jednak, gdzie popełniam błąd. ADC powinno wynosić ok. 160.
Co więcej, jak podłączę pin PB2 do masy, to wynikiem ADC jest 254. Wygląda, jakby wyniki były na odwrót (255 dla 0V) jednak przecież w trybie signed minus ADC mam podłączony do masy.
Proszę uprzejmie o wskazówki i pozdrawiam.