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.

ATMEGA8 - Efekt w stylu Knight Rider

lyczewskiand 16 Kwi 2013 00:27 2190 13
  • #1 16 Kwi 2013 00:27
    lyczewskiand
    Poziom 15  

    Witam wszystkich. Chcę stworzyć na Atmedze8 efekt LED podobny do tego jak z filmu Knight Rider.
    Projekt ten traktuję bardziej edukacyjnie aby poznać zasady działania uC.
    Z racji że jest to dział Mikrokontrolery Początkujący a ja jestem bardzo bardzo początkującym to czasami potrzebuję skorzystać z porad innych.

    Pewnie ogromnym błędem jest brak posiadania jakiejkolwiek książki do nauki C pod mikrokontrolery AVR. Cóż. Brak środków finansowych na taki zakup. Postaram sie w przyszlym miesiącu coś zakupić.

    Wracając do tematu. Nie chodzi mi o efekt możliwy do uzyskania poprzez PWM. Chodzi mi o prostą wędrującą diodę tam i z powrotem.

    Własnymi siłami napisałem taki kod

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Czyli jak widać. Moim zamierzeniem jest sprawienie aby świecąca dioda "wędrowała" tam i z powrotem.

    0 13
  • Pomocny post
    #2 16 Kwi 2013 08:04
    michalko12
    Specjalista - Mikrokontrolery

    Zastanów się co takiego robi operator |= i jakie skutki niesie umieszczenie zera po jego prawej stronie.

    Ponieważ człowiek się uczy proszę o nie umieszczenie przez innych gotowców, bo go to nic nie nauczy.

    -1
  • Pomocny post
    #3 16 Kwi 2013 10:11
    xamrex
    Poziom 28  

    Polecam zapoznać się z :
    http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html

    Ale w skrócie
    |= ustala PIN
    PORTB |=(1<<PB1); //ustala stan wysoki na pinie PB1

    &=~ kasuje pin
    PORTB &=~(1<<PB1); //ustala stan niski na pinie PB1

    ^ zmienia stan
    PORTB ^=(1<<PB1); //zmienia stan na pinie PB1 (czyli jeśli był stan niski, po tej operacji będzie wysoki; i na odwrót jeśli był wysoki, po tej operacji będzie stan niski)

    0
  • Pomocny post
    #4 16 Kwi 2013 11:13
    GanzConrad
    Poziom 21  

    poczytaj o pętlach, powtarzasz w 100% podobne operacje, które można zastąpić jedną - iteracyjną.
    poza tym "knight rider" rozjaśnia diody i przyciemnia - jedna po drugiej. Dla każdej powinien być osobny PWM, przy tej ilości, niestety programowy - do poczytania:
    http://mikrokontrolery.blogspot.com/2011/04/pwm-co-to-takiego.html
    przeczytaj sobie poniższe kursy, wiele wyjaśnią:
    http://kursc.forbot.pl/
    http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html

    0
  • Pomocny post
    #6 17 Kwi 2013 21:42
    pbuhne
    Poziom 14  

    A gdybyś wszystkie ledy podłączył pod jeden port, a masz ledów 8.... I zamiast tych wszystkich linii kodu użył tablicy... ? Wtedy port to jedna wartość, np 0x01 0x07 (zamien sobie hex na bit i zobacz o co chodzi) wtedy zrobilbyś pętelkę, która by zmieniała wartości na porcie co jakiś czas... Pomyśl nad tym :)

    0
  • Pomocny post
    #7 17 Kwi 2013 22:27
    michalko12
    Specjalista - Mikrokontrolery

    pbuhne napisał:
    Pomyśl nad tym :)


    A po co ma nad tym myśleć? Cel zamierzony osiągnął. Równie dobrze może napisać funkcję która będzie sterowała pinami wymieszanymi w chińskie Z i przyjmowała w argumencie dane z Twojej tablicy. Prawda?

    0
  • Pomocny post
    #8 18 Kwi 2013 12:13
    BlueDraco
    Specjalista - Mikrokontrolery

    Wiesz, michałko12, niektórzy ludzie uważają, że pewne rzeczy trzeba robić DOBRZE, a nie byle jak. ;)

    0
  • Pomocny post
    #9 18 Kwi 2013 20:36
    pbuhne
    Poziom 14  

    Chodziło mi o samo pisanie, te dziasiąt linii kodu można zastapić kilkoma, wg mnie bardziej przejrzystymi i przyjemniejszymi w edycji... Ale fakt cel został osiągnięty. Pozdrawiam :)

    0
  • Pomocny post
    #10 18 Kwi 2013 22:59
    michalko12
    Specjalista - Mikrokontrolery

    BlueDraco napisał:
    Wiesz, michałko12, niektórzy ludzie uważają, że pewne rzeczy trzeba robić DOBRZE, a nie byle jak. ;)


    W tym przypadku pojęcie "DOBRZE" jest pojęciem względnym i to bardzo. Człowiek zrobił coś co działa zgodnie z oczekiwaniami, w jego opinii jest DOBRZE. Następnym razem zrobi lepiej i też będzie DOBRZE itd. Ty byś to zrobił inaczej, ja bym to zrobił inaczej, a jeszcze kto inny nie zrobiłby tego na procesorze i też byłoby DOBRZE.

    BlueDraco napisał:
    a nie byle jak

    Czemu uważasz, że to jest zrobione byle jak?

    0
  • Pomocny post
    #11 19 Kwi 2013 00:14
    BlueDraco
    Specjalista - Mikrokontrolery

    Uważam, że kod, który bez większego wysiłku ani wyrafinowania daje się skrócić 30-krotnie, znacznie podnosząc przy tym jego czytelność, jest napisany byle jak.

    0
  • #12 19 Kwi 2013 07:16
    lyczewskiand
    Poziom 15  

    Chcąc realizować pomysł pbuhne bez tranzystora sie chyba nie obejdzie prawda?

    0
  • Pomocny post
    #13 19 Kwi 2013 10:49
    GanzConrad
    Poziom 21  

    obejdzie, nie o to chodzi. W ATmega8A to masz tylko 1 opcję: podłączyć wszystkie diody do portu PD0 - PD7, a następnie podstawiać jedną wartość (bajt) pod cały port.
    aby zaświecić pierwszą diodę podstawiasz 1, druga 2, trzecią 4, ...8, 16, 32, 64, 128. Wartości wrzucasz do tablicy i w pętli ładujesz wartości z tablicy do portu.
    Zamień wartości na bity i będziesz wiedział o co chodzi.

    0
  • #14 29 Paź 2014 11:46
    lyczewskiand
    Poziom 15  

    Zamykam ;) Dzięki wszystkim za pomoc.

    0