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

[Rozwiązano] Inicjacja ADC w Xmega 128A3U: zaczytywanie wartości analogowej na porcie B

Dejwuch 02 Gru 2020 19:29 453 2
REKLAMA
  • #1 19085264
    Dejwuch
    Poziom 6  
    Witajcie,

    Walczę już któryś dzień z inicjacją ADC w Xmega 128A3U. Przeglądnąłem obecne wątki ale nie udało mi się za ich radą tego ustawić, dlatego postanowiłem napisać nowy post.

    Mianowicie, chciałbym zaczytywać wartość analogową na porcie B na pinach PB4(ADC4), PB5(ADC5), PB6(ADC6), PB7(ADC7). Wartości mierzone będą od 0 do +3 V. Z tego względu zdecydowałem się na tryb z pojedynczemu wejściem ze znakiem, aby ujemne wejście było GND. Jako napięcie referencyjne jest pin PB0 (AREFB), czyli podane +3,3V.

    Problem jest, że program nie chce wyjść z funkcji while. Poniżej wrzucam inicjację oraz funkcję odczytu (póki co tylko na pinu PB4). Przypuszczam, że jest to jakieś błahe niedopatrzenie, ale już nie mam sił do tego...

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


    Tak informacyjnie jeszcze. Używam w programie ASF dla emulacji szeregowej portu USB. A tak wygląda proces inicjacji.

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


    Z góry dziękuję za pomoc.

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 19085501
    tmf
    VIP Zasłużony dla elektroda
    Dejwuch napisał:
    ak informacyjnie jeszcze. Używam w programie ASF dla emulacji szeregowej portu USB.

    Sprawdź, czy kod iniicjalizacji USB nie wyłącza czasem ADC - rejestry PR.
    Kolejna sprawa - unikaj zapisów |= - raczej wiesz co ma się znaleźć w rejestrze, a zapis |= może prowadzić do dziwnych błędów, jeśli zawartość modyfikowanego rejestru jest inna niż oczekujesz.
  • #3 19089608
    Dejwuch
    Poziom 6  
    Problem rozwiązany - musiałem wcześniej nie dopatrzeć tego fragmentu kodu..
    Dziękuję @tmf za naprowadzenie.

    Rozwiązanie:
    Wystarczyło, że zanegowałem fragment kodu w sysclk_init(), który wyłączał zegary peryferii:

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