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:
Wykonuję ją na początku programu, przed uruchomieniem przerwań.
Wywołuję za każdym razem jednorazowy pomiar:
Obsługa przerwania z gotowym wynikiem:
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.
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.
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:
Kod: C / C++
Wykonuję ją na początku programu, przed uruchomieniem przerwań.
Wywołuję za każdym razem jednorazowy pomiar:
Kod: C / C++
Obsługa przerwania z gotowym wynikiem:
Kod: C / C++
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.
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.
