Witam,
Nie wiem co robię źle, ale za nic nie potrafię skalibrować wewnętrznego przetwornika A/C w mikrokontrolerze ADuC841. (PDF:
Na wejście kanału 0 poprzez bufor na LM358 podaje napięcie z potencjometru, wszystko to zasilane z AVDD. Porównuje napięcie mierzone multimetrem na wejściu kanału 0 (wyjście wzm. oper.) z napięciem obiczonym przez uC na podstawie odczytu z rejestrów przetwornika.
Bez kalibracji błąd jest niewielki, natomiast po kalibracji tylko błędu offsetu (zera), lub tylko błędu wzmocnienia, lub obu błędów naraz pojawia się znaczny błąd (błąd 120mV przy Uwe = 500mV).
Dokonałem kilkunastu pomiarów (na szybko) i uzyskałem takie ch-yki:
----- MOV ADCCON1, #8Ch ; podzial przez 32 i 4 okresy akwizycji
MOV ADCCON2, #0Bh ; odczyt z kanalu AGND MOV ADCCON3, #25h ; uruchom kal. offsetu (31 odczytow) kal_1: MOV A, ADCCON3 ; sprawdzaj czy kalibracja juz sie JB ACC.7, kal_1 ; zakonczyla
MOV ADCCON2, #0Ch ; odczyt z kanalu Vref MOV ADCCON3, #27h ; uruchom kal. wzmocnienia (31 odczytow) kal_2: MOV A, ADCCON3 JB ACC.7, kal_2
MOV ADCCON2, #00h ; odczyt z kanalu 0 MOV IE, #0C0h ; przerwania od przetwornika ADC
pomiar: SETB SCONV ; uruchom pojedynczy pomiar CALL Delay_100ms ; co 100ms JMP pomiar
-----
Podobne jest, jeśli np. kanał 1 połączę z masą analogową i użyję go do kalibracji błędu zera (nie próbowałem tego robić z Vref). Wg pomiarów (nóżka Cref) Vref = 2.48V (powinno być 2.5V z dokładnością +/-10mV).
Próbowałem zmieniać ilość pomiarów przy kalibracji (średnia), kolejność kalibracji, ale ten duży błąd nadal występuje.
Mikrokontroler zasilam pojedyńczym napięciem DVDD=5V (część analogowa jest zasilana wg dokumentacji - przez diody, rezystor i dławik), masy (AGND i DGND) połączone w jednym miejscu blisko uC, wyświetlacz LCD zasilam od strony masy cyfrowej (z DVDD), zaś wzm. oper. i potencjometr od strony masy analogowej (z AVDD), przy każdym układzie kondesatory odsprzęgające (na płytce z uC w SMD), kabel z przetwornika ekranowany. Odczyt jest dość stabilny, tyle, że ze sporym błędem.
Czy ktoś ma jakieś pomysły, co może być nie tak?