Wpis z mikrobloga

Walczę z ADC już dwa dni, więc szukam pomocy u was.
Pacjent: ATmega8
Problem: ADC zawsze zwraca wartość maksymalną 1023 (0x3FF)
Załączam kod inicjalizujący ADC, przerwanie i schemat. Wykluczylem już że MCU jest rypnięte, bo druga ATmega zachowuje się tak samo. ADC fruwa w trybie Free Running, przerwanie odpala się prawidłowo, ale odczyt ADCW zawsze zwraca max wartość, tak jakby na pinie było napięcie z poza zakresu.
Pin jest sterowany z zasilacza i ADC nie reaguje na zmiany, ale gdy zamiast odczytu z ADC robiłem odczyt poprzez pin (val = PINC & 1<<PC0, czyli traktowałem sygnał analogowy jako cyfrowy), to potrafiłęm poprawnie rozróżnić stan wysoki i niski.
Zmiana kanału, prescalera, wyłączenie Free Running i przerwań nie zmienia nic. Jeżeli komuś coś przychodzi do głowy to proszę o wsparcie :)
#atmega #mikrokontrolery #embedded
Pobierz mirkogreg - Walczę z ADC już dwa dni, więc szukam pomocy u was. 
Pacjent: ATmega8
P...
źródło: comment_1612439497G9is1UAoA3mWaQq2QgYYFE.jpg
  • 14
@porcupineG: Właśnie już nie wiem, bo na jednym z forów wyczytałem, że to może upalić uC :/ Obecne ustawienie odpowiada zapisowi z datasheeta: AVCC with external capacitor at AREF pin
Ja to rozumiem, że to podpięcie do AVCC jest realizowane wewnątrz uC i trzeba dodać tylko kondensator
@porcupineG: Poprzez port szeregowy, robię właśnie modyfikację. Możliwe że nie trzeba będzie podpinać tego do AVCC, bo jak robiłem tą przeróbkę z kondensatorem miedzy AREF i GND, to pomyliłem piny i pin GND odciąłem od całej reszty GND, a AREF zostawiłem na GND xD
Jak nie pomoże, to zmienię ustawienia REFS0/REFS1 na zero i podepnę do AVCC.