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

atmega8+WinAvr+C+ADC+diody LED

mianiek13 20 Kwi 2011 19:41 3904 14
REKLAMA
  • #1 9422465
    mianiek13
    Poziom 12  
    Napisałem prosty program do przetwornika 8 bitowego ADC(zasilanie atmegi z USB), żeby w zależności od zmiany napięcia przez potencjometr zaświecały sie diody. Jednak program nie działa poprawnie, prosze o wytknięcie błędów lub złego rozumowania.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Diody działają w jakiś chaotyczny sposób i nie reagują na płynną regulacje.
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #3 9422584
    Andrzej__S
    Poziom 28  
    mianiek13 napisał:

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


    To polecenie wybiera pin ADC1 a nie ADC0. Dla ADC0 wszystkie bity MUX3..0 muszą być równe 0. Jeśli pin ADC1 nie jest podłączony do jakiegoś potencjału, to wyniki pomiaru będą raczej trudne do przewidzenia.
  • REKLAMA
  • Pomocny post
    #5 9422635
    Andrzej__S
    Poziom 28  
    mianiek13 napisał:

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


    Tutaj po spełnieniu warunków ustawiasz odpowiednie bity portu B jako zera, ale już później nigdzie ich nie ustawiasz jako 1. Jak już się dioda zapali (zakładam, ze zapala się przy stanie niskim), to już raczej nie zgaśnie. Domyślam się, że raczej powinna świecić tylko jedna dioda sygnalizująca określony poziom napięcia.
  • #7 9422666
    mianiek13
    Poziom 12  
    dostałem gotową płytke od kolegi myśląc, że wszystko jest ok ale po przeczytaniu Twojego posta dokładnie sprawdziłem multimetrem i chyba mam źle połączony potencjometr bo mam jedną nóżke przez rezystor 5,5k oraz kondensator 100uF podpięty do Vcc, środkową nóżke pod PC0, a trzecią do masy. Czy jest to poprawnie zrobione?
  • REKLAMA
  • Pomocny post
    #8 9422673
    dondu
    Moderator na urlopie...
    Jeżeli jednak PCO to błąd opisał kolega Andrzej_S
    wywal tę linię i spróbuj:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przez rezystor i kondensator?
    narysuj w PAINTcie albo na kartce i wrzuć zdjęcie.
  • #9 9422949
    mianiek13
    Poziom 12  
    Stosując sie do rad usunąłem
    Cytat:
    ADMUX |= _BV(MUX0);
    i dodałem do while'a
    Cytat:
    PORTB|=(1<<PB1)|(1<<PB2)|(1<<PB3);
    i niby działa poprawnie tylko diody nie świecą w pełni tylko tak jakby nie był zadeklarowany DDRB. Nawet jak dodam deklaracje do pętli to nadal to samo.
  • #11 9423005
    mianiek13
    Poziom 12  
    diody są w porządku bo już sporo programów na nich zrobiłem w tej konfiduracji
    a oto kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #12 9423014
    dondu
    Moderator na urlopie...
    Diody nie świecą pełnym światłem ponieważ gasisz je na okres czasu równy pomiarowi przez ADC. Musisz robić to tam gdzie je zapalasz.

    dodatkowo znowu masz dziury w przedziałach więc zrób tak:

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

    Tutaj teoria: http://www.java2s.com/Tutorial/C/0120__Statement/Theifelseifstatement.htm
  • #13 9423055
    mianiek13
    Poziom 12  
    próbowałem tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    i tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    i nadal to samo.

    Dodano po 10 [minuty]:

    zmieniłem te IF'y według tego co mi pokazałeś oraz zlikwidowałem dziury lecz nadal nie moge uzyskać pełni świecenia.
  • Pomocny post
    #14 9423121
    Andrzej__S
    Poziom 28  
    Cytat:

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


    Przed zapaleniem jednej diody powinieneś zgasić te dwie pozostałe:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #15 9423132
    mianiek13
    Poziom 12  
    Udało sie już wszystko działa tak jak chciałem wystarczyło
    Cytat:
    PORTB|=(1<<PB1)|(1<<PB2)|(1<<PB3);
    przenieść za
    Cytat:
    pomiar=ADCH;
    Taki mały błąd a tak trudny do wykrycia;) teraz śmiga jak chciałem:D
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jeszcze raz dziękuje za pomoc i cierpliwość:D wielki plus dla Ciebie dondu:)
REKLAMA