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.

[asm][ATmega8] - Prośba o sprawdzenie poprawności projektu

zabadeusz 22 Lut 2014 23:30 882 1
  • #1 22 Lut 2014 23:30
    zabadeusz
    Poziom 6  

    Witam. Z racji tego iż jest to mój pierwszy post na tym forum chciałbym wszystkich powitać. :)

    Zwracam się do was z prośbą o sprawdzenie czy kod ( oraz płytka ) są w miarę poprawne. Buduję "to" dla swojej dziewczyny i chciałbym żeby działało bez zarzutu.
    Może po krótce wyjaśnię, co to za twór.

    Chciałem zbudować urządzenie, które na martycy RGB będzie wyświetlało wzory, które zależą od użytkownika. Poprzez naciskanie strzałek (czterech klawiszy) oraz dwóch pomocniczych istnieje możliwość "malowania" matrycy.
    Klawisze kursora odpowiadają za przemieszczenie się "wskaźnika" po matrycy natomiast jeden przycisk służy do zmiany koloru ( NIC/R/G/B), a drugi do zapamiętywania wyboru.

    Może omówię po krótce kod tak, aby nie zastanawiać się "co autor miał na myśli"

    Pierwsze linijki to ustalenie kierunku transmisji danych, ustawienie stosu oraz przerywań.

    Pierwsze przerwanie (LICZNIK_PRZEPELNIENIE) kieruje do podprogramu sprawdzającego czy przyciski zostały wciśnięte (PLZNE_KRSR). Gdy tak się stanie, to odpowiednie rejestry są przesuwane. "1" w każdym rejestrze symbolizuje położenie x(R21) oraz y(R22)

    Następne przerwanie wywołuje podprogram "ZMIANA_KOLORU". W nim następuje zmiana koloru kursora.

    Następnym (najdłuzszym) podprogramem do następnego przerwania jest "POTWIERDZENIE"
    Zadaniem jego jest "wpisać" do pamięci kolor oraz miejsce diody, która ma swiecić.
    (Najpierw sprawdza położenie x, potem sprawdza, który kolor jest wybrany, a następnie wykonuje OR na danie z pamięci i położeniem Y w rejestrze pomocniczym ,a następnie zwraca wartość z powrotem do pamięci.
    Ze względu na dużą ilość potrzebnej pamięci zapisałem ją w SRAMe
    I tak:
    0x60 - 0x67 - kolor czerwony
    0x68 - 0x6F - kolor zielony
    0x70 - 0x77 - kolor niebieski

    Następnym podprogramem w kodzie jest "KURSOR". Odpowiada on za "chwilowe" wyswietlanie wskaźnika. Najpierw sprawdza, który kolor jest załączony, a następnie wykonuje OR z rejestrem.

    Procedura "Wyświetl" to zwykły podprogram służący do multipleksowania. Najpierw pobiera wartość RGB dla danej kolumny, potem sprawdza czy kursor jest na niej (procedura "kursor"), włącza procedurę,

    która kolejno przekazuje wartości do przerzutników i czeka 1,25ms.
    Potem przeskakuje do następnej i następnej aż do końca po czym skacze do począdku "wyswietl"

    Uff... To było długie. :)

    W załączniku kod oraz projekt płytki.

    Prosiłbym o sprawdzenie czy to w ogółe może zadziałać, co trzeba poprawić, czy też inaczej napisać. (wiem, że należy ustawić fusebity tak, żeby uC taktował na 8MHz, tylko nie wiem jak).
    Dołączam także projekt i schemat płytki, może popełniłem jakieś rażące błędy. Do matrycy led niestety nie mam schematu, ale myślę, że ona w tym całym kontekście jest najmniej ważna.

    Z góry dziękuję za poświęcony czas.

    ---------------------------------------------------

    Zmieniłem zgodnie z zaleceniami podłączenie przycisków.

    0 1
  • Pomocny post
    #2 23 Lut 2014 14:11
    kicajbas
    Poziom 25  

    Witam
    Nie twierdzę że jest to rażący błąd, ale "naciskaczki" podłączył bym do masy z programowym podciągnięciem do Vcc. Bardziej odporne na zakłócenia.

    Pozdr.

    0