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

Atmega 328p - Odczyt z ADC - wartości o dużym rozrzucie.

Dymek_117 26 Lut 2016 23:59 1527 2
REKLAMA
  • #1 15474725
    Dymek_117
    Poziom 8  
    Witam,
    Napotykam problem z odczytem wartości z przetwornika.
    ADC ma mierzyć spadek napięcia na fototranzystorze, czego jednak nie robi.
    ADC rejestruje losowe wartości z przedziału ośmiobitowego.
    Co ciekawe, kiedy mierzę spadek napięcia na pinie multimetrem jest on jak najbardziej poprawny, problem leży więc po stronie ADC.

    Błąd sprzętowy odrzucam, nie wstawiam schematu zasilania części analogowej, sprawdzałem ją wielokrotnie i porównywałem z wieloma wzorcami. Jest wszystko co potrzeba - kondensatory, dławik, itp. Połączenia również sprawdzone.

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


    Dioda miga jak szalona, bez znaczenia czy fototranzystor istotnie dostaje wiązke podczerwieni, czy nie.
    Podkreślę, że pomiar multimetrem daje zadowalające wyniki z zakresu 1.5-5V
    Poniżej jeszcze używane funkcje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 15474811
    l0ud
    Poziom 14  
    Cytat:
    ADMUX &= (wejscie);


    W ten sposób nie zapalisz odpowiednich bitów MUX, a zgasisz te co nie pasują do maski "wejście". Czyli najpewniej wyzerujesz ten rejestr. Chyba nie o to chodziło?
  • #3 15474820
    Dymek_117
    Poziom 8  
    Zmienne "tranzystor_x" mają wartości np. na 0b11110001 :)
    Cztery pierwsze to bity konfiguracyjne, cztery ostatnie to adres kanału, dlatego poprzez ten iloczyn modyfikowany są jedynie MUXy do wyboru kanału ADC.

    Dodano po 1 [godziny] 41 [minuty]:

    Problem rozwiązany :)
    Poprawienie ścieżek, oraz lutów kondensatorków rozwiązało problem zakłóceń.
    Brak odczytu lub trwała wartość maksymalna (255) brały się stąd, że ustawiłem bit ADLAR, wyrównując wynik i nie uwzględniając tego w programie. Wystarczyło wyzerować bit :)

    Pozdrawiam!

    P.S. l0ud, jednak miałeś rację xD ta operacja nie działała jak trzeba,z wracam honor, działająca wersja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA