gru 202010
 

*** 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
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/ebiwptr/silent/home/filedb.php on line 99

Zapraszam do komentowania i zadawania pytań!

  15 komentarzy to “LEDy na święta!”

  1. i can’t find download file for the software, plz help

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

  3. 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?

  4. 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

  5. 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

  6. i want this circuit and software

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

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

  9. 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.

  10. 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..

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

  12. 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!

  13. ś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?

  14. Buka rządzi!

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

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>