Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega - pomiar ADC nie działa

15 Sie 2014 19:22 1494 17
  • #1 15 Sie 2014 19:22
    2443453
    Użytkownik usunął konto  
  • #2 15 Sie 2014 20:06
    Gunslinger
    Poziom 28  

    Właśnie przechodziłem obsługę ADC, ale w Bascom. Pytanie może banalne, ale czy zasiliłeś część analogową? Najlepiej podaj schemat.

    0
  • #3 15 Sie 2014 21:13
    kaka0204
    Poziom 28  

    Co to za czujnik? Rozumiem, że atmega8?
    Poza tym:

    w pętli while(1) dodaj


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zobacz czy to zadziała. Zmienna ADC jest zmienną typu uint16_t

    0
  • #4 15 Sie 2014 21:23
    tmf
    Moderator Mikrokontrolery Projektowanie

    goldcap napisał:
    Witam!
    Na wstępie napisze ,że napisałem tu ten temat ,bo nie są kasowane za to żadne punkty.
    Napisałem taki prosty program:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Na PB1 i PB0 są 2 diody.
    PC5 podłączone jest do analogowego czujnika temeratury. Dla 0 stopni jest 0.5 V
    a dla 30 stopni jest 0.8 V. Czemu ten kod nie działa? Może free styler prescaler jest źle ustawiony?


    Po pierwsze nie rozpoczynasz nigdzie konwersji. Drugi problem jest subtelniejszy - wynik ADC/1023 praktycznie zawsze jest równy 0, tylko jeśli ADC jest równe 1023 jest równy jeden. Co innego, gdybyś zrobił ADC/1023.0.

    0
  • #5 15 Sie 2014 23:02
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeżeli Vref jest równe 2.56 V, to wartość odczytana z ADC odpowiada napięciu wyrażonym w jednostkach 2,5 mV, Napięciu 0.8 V odpowiada więc wartość ADC 800 / 2.5, czyli 320.

    No i przypadkiem nie wpadnij na pomysł stosowania jakichkolwiek obliczeń na liczbach zmiennopozycyjnych.,,

    0
  • #6 20 Sie 2014 16:25
    2443453
    Użytkownik usunął konto  
  • #7 20 Sie 2014 16:30
    atom1477
    Poziom 43  

    goldcap napisał:
    Te 2 Diody LED świecą równocześnie. Jak zrobić aby prawidłowo świeciły?

    A czy to się wyklucza? Tzn. świecenie na raz i jednocześnie prawidłowo?
    No bo jak dla mnie to teraz tak jest.
    Świecą prawidłowo (tzn. zgodne z kodem programu) i jednocześnie obie na raz.
    Jeżeli nie o to Ci chodziło to zastanów się co chcesz zrobić tymi diodami. Bo żeby napisać poprawny kod to poza umiejętnością programowania trzeba jeszcze najnormalniej w świecie wiedzieć co się chce danym kodem programu osiągnąć :D

    0
  • #9 20 Sie 2014 17:29
    kaka0204
    Poziom 28  

    Dodatkowo zastanów się nad tymi linijkami:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #10 20 Sie 2014 18:07
    2443453
    Użytkownik usunął konto  
  • #11 20 Sie 2014 20:26
    BlueDraco
    Specjalista - Mikrokontrolery

    DDRB jest po to, aby diody mogły świecić. żeby je następnie zaświecić lub zgasić - zapisujesz odpowiednią daną do PORTB.

    0
  • #12 20 Sie 2014 20:44
    2443453
    Użytkownik usunął konto  
  • #14 20 Sie 2014 21:07
    kaka0204
    Poziom 28  

    No dobrze, widzę, że w dalszym ciągu nie możesz wyłapać błędu. Podpowiem ci:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    A dlaczego tak? Zapytaj wujka google :)


    Dodatkowo. Nie pisz tak

    Kod: c
    Zaloguj się, aby zobaczyć kod


    bo to jakiś bełkot. Prawidłowy zapis powinien wyglądać tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Poza tym. Nie mogę zrozumieć, dlaczego czasami piszesz:

    |= a czasami tylko = ?

    Wytłumaczysz to jakoś :)

    Jeszcze jeden błąd...

    Funkcja initADC nie może zwracać wyniku.

    EDIT

    Kolega wyżej mnie uprzedził :D

    0
  • #15 20 Sie 2014 21:21
    2443453
    Użytkownik usunął konto  
  • #16 20 Sie 2014 22:07
    kaka0204
    Poziom 28  

    goldcap napisał:
    A po co ma zwracać jak np . z if(ADC > x) biorę wynik?


    Na końcu tej funkcji masz return...

    0
  • #17 20 Sie 2014 22:45
    2443453
    Użytkownik usunął konto  
  • #18 20 Sie 2014 23:08
    kaka0204
    Poziom 28  

    goldcap napisał:
    żeby funkcja ładnie wyglądała.


    WTF?! W funkcji nie zwracającej rezultatu ten return jest w ogóle nie potrzebny i następnym razem nie musisz "upiększać" takich funkcji :D

    0