logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega8a][C] ADC-przekłamania pomiarów, przy zmianie napięcia doniesienia.

INTEII 21 Sie 2013 11:40 1548 7
  • #1 12650896
    INTEII
    Poziom 14  
    Witam,

    Mam problem polegający na tym, że podczas zmiany napięcia odniesienia z AVCC na wewnętrzne 2,56 V i z powrotem, wyniki pomiarów są przekłamywanie.
    Próbowałem różnych rozwiązań m. in. po zmianie źródła odniesienia dokonania kilku pomiarów wstępnych, a dopiero później tego właściwego - zero efektów.

    Częściowo udało mi się rozwiązać problem w następujący sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Czyli odczekanie pewnego czasu (jak się domyślam) na ustabilizowanie się napięcia odniesienia. Czy jest jakaś metoda usprawniająca ten proces? A może coś robię nie tak?

    Problem dotyczy ATmegi8A.

    Dziękuję i pozdrawiam

    Poprawiłem tytuł
    [zumek]
  • #2 12650956
    dondu
    Moderator na urlopie...
    Witaj,

    Atmega8A datasheet napisał:
    The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to discard this result.

    Po prostu po zmianie źródła napięcia odniesienia wykonaj co najmniej jeden pomiar, który odrzucisz.
  • #3 12650966
    INTEII
    Poziom 14  
    Wykonałem nawet kilka (np. 5 i 6 ten właściwy) - wszystkie błędne.
  • #5 12650995
    INTEII
    Poziom 14  
    Schematu nie mogę udostępnić, ale AVCC jest filtrowane zgodnie z notą katalogową (dławik i kondensator), do AREF podłączony jest tylko kondensator 100 nF.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeżeli nie zmieniam napięcia odniesienia wszystko jest ok. Podobnie w przypadku, gdy:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 12651018
    dondu
    Moderator na urlopie...
    Podłączenie AVcc oraz AREF, to tylko malutki wycinek problemów ze schematem i PCB dla pomiarów ADC. Ale rozumiem, nie możesz i tyle.

    Z załączonego pierwszego fragmentu programu nie widać, abyś odrzucał pomiary po zmianie napięcia referencyjnego. Założyć więc muszę, że wywołujesz tę funkcję z nowym źródłem odniesienia co najmniej jeden raz przed każdym właściwym pomiarem i wynik odrzucasz. Czy tak robisz?


    EDIT:

    Zamiast sprawdzać flagę przerwania:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    sprawdzaj bit startu konwersji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ponieważ:

    Cytat:
    ADSC will read as one as long as a conversion is in progress.
    When the conversion is complete, it returns to zero.
  • #7 12651222
    INTEII
    Poziom 14  
    Cytat:

    Z załączonego pierwszego fragmentu programu nie widać, abyś odrzucał pomiary po zmianie napięcia referencyjnego. Założyć więc muszę, że wywołujesz tę funkcję z nowym źródłem odniesienia co najmniej jeden raz przed każdym właściwym pomiarem i wynik odrzucasz. Czy tak robisz?

    Dokładnie tak to robię:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Zmiana na "ADSC" nie pomogła niestety.
    Jeżeli chodzi o same pomiary, to jeżeli wykonam je w odniesieniu tylko do AVCC lub wew. 2,56 V wszystko jest ok.
  • #8 12652138
    michalko12
    Specjalista - Mikrokontrolery
    Zmień kondensator na AREF na 10n, spróbuj też mniejsze wartości czy wpływają na stabilność pomiaru.
REKLAMA