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

[Rozwiązano] Jak podłączyć potencjometr i diodę do ATmega8 z użyciem ADC?

DGM.exe 20 Sty 2019 12:13 378 4
  • #1 17715053
    DGM.exe
    Poziom 6  
    Jak w temacie. Po prostu nie mam pojęcia co zrobić żeby to dziadostwo działało. Próbowałem wielu rzeczy, nic nie dało skutku. Chcę na początek po prostu podpiąć potencjometr do PC5(ADC5) i diodę do PB1 no i zaświecić ją jak będzie powyżej połowy(około) albo zgasić. Tak najzwyczajniej w świecie. Nie wiem, dlaczego nie działa, zamieszczam kod. Na płytce mam kwarc 12MHz.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #2 17715168
    tzok
    Moderator Samochody
    Skoro zmienna ACDC jest typu uint8_t to jakim cudem kiedykolwiek miała by przyjąć wartość większą lub równą 500 :/
  • #3 17715267
    DGM.exe
    Poziom 6  
    tzok napisał:
    Skoro zmienna ACDC jest typu uint8_t to jakim cudem kiedykolwiek miała by przyjąć wartość większą lub równą 500 :/

    heh jakbym wiedział czym tak naprawdę jest ta zmienna :) użyłem gotowca - będę szczery. Coś tam ogarniam C++, C się wiele nie różni (szkoda, że klas nie ma) ale pisałem w konsoli. Takie zmienne nie były mi potrzebne i szczerze to nie mam pojęcia po co się jej używa. Wpisałem sobie - pierwsze słowa jakie przeczytałem to "unsigned char" i stwierdziłem, że to mi wystarczy, jakiś tam typ napisu OK. Widzę, że to nie do końca prawda :). Powiedziałbyś, jak to zamienić? Bo zmienienie na int mało dało.

    EDIT: doczytałem i widzę, że obsługuje wartości do 255 haha! Działa, tyle że chciałbym odczyt pełny - do 1023. To ja się tutaj nad rejestrami głowiłem czytałem tego PDF'a szukałem co tam można poustawiać żeby działało a problem był wręcz prozaiczny. Taki już mój urok, nic nie poradzę :D.
    EDIT2: Pomyślałem, żeby zrobić zmienną int, która będzie 4-krotnością tamtej ACDC. Działa, ale pewnie da się to inaczej rozstrzygnąć.
  • Pomocny post
    #4 17715851
    tzok
    Moderator Samochody
    Twoja funkcja adc_read() zwraca wartość typu uint16_t, którą następnie przypisujesz do zmiennej ACDC typu uint8_t, czyli efektywnie obcinasz 8 bardziej znaczących bitów. To są klasyczne typy z C, nie ma w nich nic specyficznego dla AVRów. Zapis jest bardzo czytelny - uint - Unsigned Integer, czyli liczba całkowita bez znaku, 8 - długość zmiennej w bitach. 2^8 = 256.

    P. S.
    Kompilator którego najprawdopodobniej używasz (avr-gcc) jest kompilatorem C++ ale przy tej ilości dostępnej pamięci używanie modelu obiektowego to słaby pomysł.

    P. P. S.
    Polecam Ci lekturę http://mikrokontrolery.blogspot.com/2011/03/adc-wstep-i-uruchomienie.html
    ... oraz całej reszty tego kursu: http://mikrokontrolery.blogspot.com/2011/03/drzaskowy-pamietnik-wstep.html
  • #5 17754469
    DGM.exe
    Poziom 6  
    Problem rozwiązany. Dzięki @tzok .
REKLAMA