*** 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