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.

Jak napisać program sterownika oświetlenia AVR.

adrianekl18 21 Lip 2015 23:52 768 4
  • #1 21 Lip 2015 23:52
    adrianekl18
    Poziom 2  

    Witam, potrzebuję pomocy w napisaniu programu do sterownika oświetlenia schodów na Atmegę8 . Potrzebuję oświetlić 16 schodów efekt miałby przypominać pas startowy, po naciśnięciu 1 włącznika mają się po kolei zapalać od dołu do góry i po 5s mają w tą samą stronę gasnąć, po naciśnięciu 2 włącznika ma być tak samo tylko od góry w dół. Starałem się napisać ale zawsze coś nie wychodziło np pętla była w nieskończoności, diody zamiast być zgaszone i się zapalać to było odwrotnie. :| Szukałem w internecie ale nic nie znalazłem użytecznego choćby wzoru żebym mógł się wzorować.

    Z góry dziękuję za każdą pomoc.
    Pozdrawiam Adrian.

    0 4
  • #2 22 Lip 2015 00:18
    Krawiec91
    Poziom 12  

    Kod źródłowy programu wrzuć, to zobaczy się co jest w nim nie tak.

    0
  • #3 22 Lip 2015 21:51
    adrianekl18
    Poziom 2  

    Nie mam, po nie udanej próbie skasowałem kod i napisałem ten post z nadzieją że coś uda się stworzyć.

    0
  • Pomocny post
    #4 23 Lip 2015 11:23
    Krawiec91
    Poziom 12  

    Witam
    Rozpisz sobie, jak masz podłączone diody i przyciski do Atmegi (pod który pin podpięta jest dana dioda, pod który podpięty pin podpięty jest dany przycisk).
    Co do samego programu. Za wielkiego znawcę tematu się uważam, bo też się uczę programowania mikrokontrolerów. Coś takiego bym zaproponował, możesz tego użyć, możesz też zmodyfikować.
    Napisz sobie 2 funkcje. Jedna będzie odpowiadać za zapalanie diod od góry do dołu, a druga za zapalanie diod od dołu do góry. Zasada działania obu funkcji jest identyczna, tj. wysyłanie na porty mikrokontrolera odpowiednich wartości, które powodują zapalenie/zgaszenie odpowiednich diod w odpowiedniej sekwencji czasowej, coś takiego:
    *zapalenie diody (schodek1)
    *opóźnienie, załóżmy 0.5 sekundy, czy ile tam chcesz. Najprościej użyć funkcję _delay().
    *zapalenie diody (schodek2), nie gasząc diody (schodek1) - czyli nie zmieniając stanu bitu na porcie powiązanym z diodą (schodek1).
    *opóźnienie
    *.........
    *zapalenie diody(schodek16)
    *opóźnienie (5 sekund)
    *zgaszenie diody (schodek 16)
    *opóźnienie
    i tak aż do ostatniej diody na dole.
    Druga funkcja na tej samej zasadzie, tylko inaczej mają się diody zapalać.

    W programie głównym, sprawdź stan wejść, np. czy wciśniety przycisk 1, zapisz do zmiennej. Potem za pomocą if...else if wykonujesz albo jedną funkcję albo drugą albo nic nie wykonujesz i wracasz do momentu sprawdzenia stanu wejść. Mam nadzieję, że sytuację rozjaśniłem.

    1
  • #5 23 Lip 2015 22:48
    adrianekl18
    Poziom 2  

    Dziękuje :D rozpisanie tego pomogło ! :) Miałem jeszcze problem ze świeceniem na początku ale jakoś dałem sobie rade :) Dziękuje jeszcze raz ! :)

    0