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

sekwencyjne sterowanie led za pomocą mikrokontrolera

koniulukasz_1984 13 Sty 2014 22:11 2193 23
  • #1 13174471
    koniulukasz_1984
    Poziom 9  
    witam
    Jestem poczatkujacy i mam problem z timerem ogolnie wyglada to tak
    mam 5 led i 2 przyciski jak jak wciskam przycisk 1 zapala sie pierwsza dioda kolejne nacisniecie zapala druga itp do pięciu drugi przycisk kolejno je gasi i chodzi o to zeby dodac do tego najprostsza metodo timer zeby zapalajace ledy zapalaly sie kolejno ale na okreslony czas i gasly. Jeśli ktoś mi to w prosty sposob wyjasni jak to zrobic bede wdzieczny.
    Pozdrawiam
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 13175231
    dondu
    Moderator na urlopie...
    Witaj.

    Kod programu wklejej za pomocą znacznika SYNTAX a nie CODE.

    Co do timera, to potrzebne Ci będą przerwania.
    Czy wiesz do czego służą i czy potrafisz w ogóle jakiś timer włączyć i odmierzyć określony odcinek czasu?

    Jeżeli nie, to: http://mikrokontrolery.blogspot.com/2011/03/led-sterowany-przez-timer.html
  • #3 13177490
    koniulukasz_1984
    Poziom 9  
    jakos polaczylem to co mi pokazales z moim kodem ale wzskakuje mi jakis blad

    ../main.c:26: error: static declaration of '__vector_9' follows non-static declaration
    ../main.c:26: error: previous declaration of '__vector_9' was here
    ../main.c:46: error: expected declaration or statement at end of input

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 13177531
    BlueDraco
    Specjalista - Mikrokontrolery
    Wrzuciłeś deklaracje procedur obsługi przerwań do ciała funkcji main(). Procedury obsługi przerwań muszą być na poziomie zewnętrznym, czyli przed albo po main(). Poza tym nie zbilansowały Ci się nawiasy bloków { i }.
  • #5 13177538
    dondu
    Moderator na urlopie...
    1. Funkcję obsługi przerwania umieściłeś w funkcji main(). Powinieneś ją umieścić poza funkcją main().

    2. Jeśli wklejając nie zjadłeś zamykającego nawiasu klamrowych to je dodaj w odpowiednich miejscach by mai() i while(1) były odpowiednio zakończone.

    EDIT.
    BlueDraco mnie wyprzedził o parę sekund :)
  • #6 13177599
    koniulukasz_1984
    Poziom 9  
    Nie mówi mi to zbyt wiele...
  • #8 13177632
    koniulukasz_1984
    Poziom 9  
    no jest w glownej petli za while (1)
  • #10 13177651
    koniulukasz_1984
    Poziom 9  
    eclipse o ktore linijki dokladnie chodzi bo ja nie widze za bardzo roznicy
  • #12 13177731
    koniulukasz_1984
    Poziom 9  
    Nawias { otwiera sie za main } zamyka za while(1) nastepnie {otwiera za ISR
    }zamyka na koncu kodu moze jest jeszcze cos o czym nie wiem ?
  • #14 13177810
    koniulukasz_1984
    Poziom 9  
    Ale tak samo jest w linku ktory mi podales otwiera sie za main i zamyka za while (1).
  • #15 13177821
    dondu
    Moderator na urlopie...
    koniulukasz_1984 napisał:
    Ale tak samo jest w linku ktory mi podales otwiera sie za main i zamyka za while (1).

    Pokaż na swoim powyższym kodzie (który wkleiłeś w poście nr #3), który nawias to według Ciebie nawias zamykający funkcję main() za pętlą while().
  • #16 13177845
    koniulukasz_1984
    Poziom 9  
    aha zly nawias ale nadal mam problem teraz

    ../main.c:26: error: expected expression before '}' token
    make: *** [main.o] Error 1.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #17 13177859
    dondu
    Moderator na urlopie...
    No wreszcie :-)
    bo już traciłem nadzieję, że czytasz cokolwiek piszę:

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



    koniulukasz_1984 napisał:
    ale nadal mam problem teraz

    ../main.c:26: error: expected expression before '}' token
    make: *** [main.o] Error 1.

    Bo brak średnika na końcu pętli while.
  • #18 13177860
    koniulukasz_1984
    Poziom 9  
    OK udalo sie skompilowac wielkie dzieki za pomoc potestuje czy to dziala tak jak bym chcial.
    Pozdrawiam

    Dodano po 9 [minuty]:

    Wlasciwie to nic sie nie zmienilo jak wciskam przycisk dioda sie zapala i ciagle swieci nie gasnie po czasie.Co tu jeszcze trzeba dodac ?
  • #19 13177900
    dondu
    Moderator na urlopie...
    Wstaw aktualny program w całości.
    Dobrze byłoby byś dopisał w nim komentarze, by było wiadomo co chcesz w danej linii osiągnąć.
    Wtedy łatwiej sprawdzić Twoje intencje z faktycznym kodem.

    Schemat także by się przydał.

    Czy ustawiasz F_CPU w opcjach projektu? Jakie?
  • #20 13177919
    koniulukasz_1984
    Poziom 9  
    Dopisalem reszte polecen z linku i mam blad

    ./main.c: In function 'main':
    ../main.c:22: error: 'timer_start' undeclared (first use in this function)
    ../main.c:22: error: (Each undeclared identifier is reported only once
    ../main.c:22: error: for each function it appears in.)
    ../main.c: In function '__vector_9':
    ../main.c:34: error: 'timer_start' undeclared (first use in this function)
    make: *** [main.o] Error 1

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


    Dodano po 2 [minuty]:

    Chodzi o to glownie zeby led po wcisnieciu przycisku zaswiecil sie i po np. 3 sek zgasl i tak kolejno przez 5 ledow
  • #21 13178072
    BlueDraco
    Specjalista - Mikrokontrolery
    A co jest dla Ciebie niejasnego w komunikatach kompilatora?
  • #22 13178105
    koniulukasz_1984
    Poziom 9  
    Jedynie moge je jedynie przetlumaczyc poza tym nie wiem w czym problem nie mam za duzego doswiadczenia w avr dopiero zaczynam .
  • #23 13178145
    BlueDraco
    Specjalista - Mikrokontrolery
    No to przetłumacz, bo to dość podstawowy błąd w programie w dowolnym języku i nie ma on nic wspólnego z mikrokontrolerami.
  • #24 13178196
    Tom1988p
    Poziom 16  
    "undeclared" oznacza że kompilator nie widzi tej zmiennej, brakuje np. takiej linijki.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    lub w tym wypadku może chodzić o definicje preprocesora
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W przerwaniach nie należy stosować opóźnień _delay.
REKLAMA