*** Aktualizacja: 20-12-2010 23:17***

Dziś ku mojemu zdziwieniu projekt matrycy pojawił się na popularnych portalach, co mnie bardzo ucieszyło. Matryca jest już gotowa. Składa się z dwóch paneli, które można ułożyć w kwadrat 32×32 lub prostokąt 64×16. Końcowy efekt można zobaczyć na filmiku poniżej.

Jeśli podoba Ci się ten projekt, zagłosuj na mnie w konkursie na portalu elektroda.pl klikając „fajne” (wymaga zalogowania się):

http://www.elektroda.pl/rtvforum/topic1851303.html

Aktualizacja: 20-12-2010 23:17

Oprócz wyświetlania świątecznych grafik wyświetlacz świetnie nadaje się również do innych rzeczy. Oto kolejne dwa filmiki prezentujące jego możliwości tekst\grafika i analizator widma (plugin do WinAmpa; działa również z FooBarem 2000 i pluginem foo_vis_schpeck) – konfiguracja 64×16 i 32×32. Niestety z powodu kiepskiego aparatu widać smużenie – w rzeczywistości tego nie ma i obraz wygląda o wiele lepiej a przy analizatorze widma uzyskałem całkiem niezły framerate.

Jak to jest zrobione?

Pomysł na wyświetlacz powstał już jakiś czas temu, lecz zabrałem się za to gdy kolega przypadkowo znalazł tanie matryce 8×8 5mm na Allegro ;-) . Zakupione 16 sztuk czekało w pudełku aż znajdę dla nich trochę czasu.

Układ

Mój wyświetlacz to standardowa konstrukcja – 8 logicznych multipleksowanych wierszy. Każdy wiersz to długi rejestr przesuwny z zatrzaskiem (74HC595). Zaprojektowałem płytki tak, aby można było dołączyć kolejne panele szeregowo wydłużając rejestr. Obecnie zbudowałem 2 takie matryce. Matrycami obecnie steruje ATMega32 z 32kB pamięci flash i 2kB RAMu na mojej płytce testowej. Taki sam układ będzie docelowo na płytce sterownika – jeśli kiedyś dobuduję dodatkowe panele to przyda się więcej RAMu (obecnie wykorzystuję niecałe 0,5kB). Sterownik komunikuje się z komputerem za pomocą sprzętowego UARTa z konwerterem napięć TTL<->COM (MAX232) przy prędkości 115,2k baud i w celu jak najmniejszego błędu w transmisji mikrokontroler jest taktowany zewnętrznym kwarcem 11,0592MHz. Obecnie to wystarcza bez problemu. W przypadku większej ilości matryc w szeregu można będzie zwiększyć częstotliwość do 14Mhz lub przetaktować układ do 18\22MHz.

Płytki zaprojektowałem w Eagle’u i wykonałem metodą termotransferu –  wyszły całkiem nieźle, zwłaszcza jak na swój rozmiar.


W chwili obecnej została mi do zaprojektowania płytka sterownika. Na pewno znajdą się na niej 2 lub więcej gniazd na szeregi paneli na przyszłość. Zastanawiam się nad złączem kart SD – można by wtedy wyświetlać obraz bez użycia komputera. Myślę również nad osobną płytką podłączaną do sterownika wyświetlacza z kilkoma przyciskami i mikrokontrolerem z zaimplementowanymi prostymi gierkami.

Software

Program dla mikrokontrolera napisałem w C (środowisko AVR Studio). Aktualnie zajmuje około 4kB i na chwilę obecną używa 485B RAMu (2 „strony” w pamięci obrazu plus 128-bajtowy bufor na dane od PCta).

Obecnie protokół komunikacji z PCtem to zaledwie kilka komend takich jak czyszczenie ekranu, ramka 64B (dla 32×16) lub 128B (dla 2 paneli) czy przesunięcie zawartości ekranu w lewo\prawo\górę\dół. Każdą komendę rozpoczyna się przez wysłanie bajtu oznaczającego jej numer a następnie wysłaniu liczby bajtów odpowiadającej danej komendzie. W celu uniknięcia problemów z synchronizacją przed każdą komendą komputer wystawia impuls na lini DTR, na co sterownik reaguje powrotem do odczytu numeru komendy (jeśli jest np. w stanie odbierania ramki z orbazem).

Program do wysyłania grafiki napisałem w środowisku Delphi. Posiada możliwość wyświetlania przewijającego się tekstu oraz wyświetlania grafik BMP jako obraz statyczny\przewijany lub animację. Aplikacja ma również możliwość wyboru układu paneli i podgląd na żywo.

Programy udostępnię w niedalekiej przyszłości i przy okazji dopiszę więcej szczegółów odnośnie jego działania. Muszę jeszcze zrobić kilka poprawek i trochę uporządkować\udokumentować kod – na pewno nikt nie chciałby przeglądać tego bałaganu ;-) .

PLIKI:

  Pobierz plik: ledmatrix/lm_layout_v_0_1.png
  Rozmiar: 732.37 KB, pobrany 1343 razy.

Zapraszam do komentowania i zadawania pytań!

14 Responses to “LEDy na święta!”

  1. Hello,
    Very excellent blog post from you
    Thanks.

  2. art pisze:

    Witam….
    Wykonałem podobny projekt.. i mam problem z transmisja: przy predkosci 9600 -14400 wszystko jest ok.. ale jak zwiekszam predkosc 38400-115200 zauwazam ze ramka jest przesunieta albo wartosci sa pomieszane.
    Mógłbyś udostępnić kawałek kodu odpowiedzialny za odbieranie danych z pc?

  3. art pisze:

    witam..
    1. jakim napieciem wysterowywane sa matryce 5V czy 12V?
    2. jaki pobor pradu biora matryce przy pelnym swieceniu?
    3. jakie tranzystory PNP stosujesz do multipleksowania (tzn jaki model i jak ustawiony punkt pracy, jaki rezystor na baze)?
    pozdrawiam Art

  4. tomitoxy pisze:

    witam, czy jest możliwość ściągnięcia tego softu, a może także to co siedzi w procku. Raczej pisze w baskomie niz w C ale to mi dużo pomoże. mam takie płytki zrobione jako mnatrycę 8×32 z możliwością przedłożania czyli jeden długi wiersz do 120 znaków.

    dzieki za pomoc

  5. ttun pisze:

    i want this circuit and software

  6. zvyagaaa pisze:

    Good day! It’s really cool project! Can you send me source codes of this project? I want to make it! Please!

  7. Daniel pisze:

    A programów jak nie było tak nie ma.

  8. SileNT pisze:

    1) Wykorzystałem sprzętowy timer i przerwania. Przy każdym kolejnym przerwaniu przesyłam wiersz, zatrzaskuję rejestr i przełączam linię – muszę tylko zdążyć przesłać 8 lub 16 bajtów (w zależności od rozmiaru panelu) do rejestrów w czasie pomiędzy przerwaniami. Jeśli nie widać mrugania a obraz jest słaby, to może diody są zgaszone przez zbyt długi czas? W moim przypadku kiedy świeci się jeden wiersz mogę zapisywać do rejestrów kolejny i zatrzasnąć dopiero wtedy, jak już będzie gotowy.

    2) 115,2k baud/s (57,6 kbit/s), kwarc 11,0592MHz. Ramka obrazu 64×16 (32×32) ma 128B, więc mogę przesłać około 50 klatek/sek. Jeśli u Ciebie przy 9600b trwa 1s, to wychodzi na to, że ramka ma aż 600B – ponad 4x więcej niż powinna.

    3) W przypadku C, string to nic innego jak tablica bajtów (charów) – odbieram dane po bajcie i zapisuje je do bufora. Dla większej wydajności bufor ma podwójny rozmiar (2 strony). W momencie wyświetlania strony 1 zapisuję stronę 2, jeśli jest już gotowa to przełączam wyświetlanie na stronę 2 a zapis na stronę 1 itd.

  9. kowal pisze:

    Witam.
    Zbudowałem matryce 32×32 w trochę inny sposób.. wykorzystałem 8bitowe bufory.. jednak natknąłem się na problem z kontrastem.. wyszło mi że czas przejścia na kolejną kolumnę wynosi 200us (przy tym czasie nic nie mruga) i mój problem polega na tym ze przy takim czasie multipleksowania obraz na matrycy jest bardzo blady… w świetle dziennym nic nie widać.. kolejnym moim problemem jest odświeżanie całej matrycy.. wysyłając rs232 ramki w stringu odebranie ramki przy prędkości 9600 trwa ok 1s, co uniemożliwia wyświetlanie dynamicznej grafiki.. zastosowałem atmege16 na zegarze 12MHz…
    pytania:
    1. jak rozwiązałeś problem kontrastu i czasu multipleksowania?
    2. jaka prędkość transmisji wykorzystałeś?
    3. w jaki sposób wysyłasz dane uartem z pc do uc (string, byte)?

    liczę na wskazówki z twojej strony..

  10. Radek pisze:

    Ja także czekam na jakieś dane i schemaciki do ściągnięcie Pozdrawiam Radek. ps. świetna robota.

  11. Maly pisze:

    Super projekt, mam nadzieję że kolega udostępni dane, aby móc samemu sobie coś takiego złożyć. Jeżeli będzie dokumentacja, to szukać jej tutaj czy gdzie? No i podpinam się pod pytanie ‘ma16′ – czy będzie możliwość zapisania kilku animacji do uC do pracy bez komputera? Często przydatna rzecz.
    A ja miałem taki pomysł żeby wyświetlacze skleić na sztywno (powinny mieć takie wypustki i wcięcia) i podłączyć później tylko do sterownika przewodami taśmowymi. Fakt że jest tego nie mało ale być może uda się w ten sposób sprawić tak, aby przerwy między wyświetlaczami były jeszcze mniejsze (no i płytka mniejsza, łatwiej wytrawić).

    Pozdrawiam i życzę dalszych sukcesów!

  12. ma16 pisze:

    świetna matryca. Mam kilka pytań do autora. Potrzebuje zrobić taką matryce za pomocą portu rs chciałbym wprowadzać tekst żeby uc zapamietal je i po odlaczeniu od komputera nadal wyswietlalo ten tekst czy ta matryca nadaje sie do tego? kiedy autor udostepni kod zrodlowy ? i czy bedzie udostepniony także schemat bo jednak nie znalazłem go na blogu?

  13. buka-ke? pisze:

    Buka rządzi!

  14. kamil pisze:

    Hey!
    A ja tak liczyłem że w Święta popatrze sobię na kod. :-(
    Pozdr.

Leave a Reply

(required)

(required)

*
© 2010 Silent's Homepage Administracja Suffusion WordPress theme by Sayontan Sinha