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

[ATMega16] [ATMega16][C] - Jak poprawnie odczytać ADC z dwóch kanałów?

Altarir 14 Gru 2012 13:45 1329 2
REKLAMA
  • #1 11650354
    Altarir
    Poziom 11  
    Mam następujący problem z odczytaniem wartości z dwóch kanałów ADC.

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


    Z jednego kanału (w pętli while tylko odczyt1 albo tylko odczyt2) działa pięknie - napięcie 2.5V na odpowiednio PA1 lub PA2 i na LCD widze 512 itd.
    Z dwóch kanałów (tak jak jest w podanym kodzie) obie zmienne na LCD wyswietlają się najpierw coś ponad 600 i bardzo szybko spadają do około 80 (ich wartści są identyczne). Zmiana napięcia którymś z potencjometrów zmienia obie wartości (ale według jakiej prawidłowości to nie mogę zgadnąć)

    Ponieważ odczytywanie tylko z kanału 1 albo tylko z kanału 2 działa poprawnie, wnioskuję, że wszystko podłączone jest poprawnie, a przetwornik dobrze zainicjowany. Z samym odczytem powinno być wszystko w porządku. Problem zapewne jest w wyborze kanału, ale nijak nie mogę dojść jaki. Poszukałem w necie jakichś przykładów, no i znalazłem jeden w którym ADC_read jest napisane identycznie. A u mnie dalej nie dziala poprawnie :P

    Z góry dziękuję za pomoc.
  • REKLAMA
  • Pomocny post
    #2 11650505
    szulat
    Poziom 23  
    twoje ustawianie ADMUX robi OR, więc ustawiając 1 a potem 2 tak naprawdę ustawiasz 3

    a przy okazji, zamiast czekać na ADIF lepiej czekać na wyzerowanie ADSC, odpadnie ci dodatkowa operacja zerowania ADIF
  • #3 11650715
    Altarir
    Poziom 11  
    Aj, ale błąd. Faktycznie, po poprawieniu zaczęło działać bardzo fajnie :) Dzięki bardzo za podpowiedzi

    Poprawne ADC_read:

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