środa, 19 czerwca 2013

Programowanie AVR cz. ostatnia: Wyświetlacz 3D (LED Cube) 4x4x4 - ciekawy wizualnie, modny gadżet z ogromnymi możliwościami.

Pora kończyć cykl wpisów dydaktyczno-eksperymentalnych na temat programowania AVR-ów. Koniec jednak powinien być mocny. No to będzie.

Przed Wami oto:
Wyświetlacz 3D, czyli LED Cube, o rozmiarach 4 x 4 x 4.


000. Pomysł


Kostką diod LED, sterowaną dowolnym mikrokontrolerem, zainteresował mnie parę lat temu jeden z absolwentów. Było to jeszcze w czasie, gdy mój powrót do lutownicy nie był praktycznie brany pod uwagę - zajmowałem się wyłącznie softwarem, a programowania mikrokontrolerów uczyłem z wykorzystaniem gotowych, zamkniętych zestawów (DSM-51 - fajnie pomyślana i zrobiona rzecz, niestety bazująca na lekko przestarzałej i przez wielu krytykowanej technologii). Gdy w zeszłym roku zająłem się AVR-ami pomyślałem sobie - czemu nie? Przejrzałem kilka rozwiązań, przyglądnąłem się możliwościom różnych mikrokontrolerów i... znalazłem coś odpowiedniego dla siebie.
Czym właściwie jest popularny LED Cube, lub też wyświetlacz LED 3D? Otóż jest to eleganckie i efekciarskie urządzonko pozwalające na prezentację kształtów geometrycznych oraz - co najważniejsze - animacji w rzeczywistym 3D. Taką kostkę możemy obejść dookoła i za każdym razem zobaczymy obraz z innej perspektywy. Gdyby zbudować taką kostkę z 8*10^9 diod LED RGB, to mielibyśmy wtedy dopiero prawdziwy obraz trójwymiarowy - i to w dodatku w HD! Problem w tym, że gabaryty byłyby nieco większe, niż w przypadku klasycznego telewizora LCD/OLED/Plasma z czterdziestocalową przekątną ekranu. Ale za to obraz byłby prawdziwie trójwymiarowy, a nie prezentowany w rzucie, jak to ma miejsce w przypadku gier komputerowych czy filmów. W grach, owszem, grafika tworzona jest tak, jakby miała być prezentowana za pomocą prawdziwego ekranu 3D, ale potem wykonywany jest szereg operacji przygotowujących obraz do pokazania na... płaskim ekranie...
Do czego może taki LED-owy wyświetlacz 3D służyć, czy też gdzie znajdzie zastosowanie? Pomijając jego gadżetowość, póki co - choćby ze względu na koszta i gabaryty tych dużych wyświetlaczy (prezentowany tutaj to zabawka w porównaniu z niektórymi super-projektami) - w reklamie, rozrywce, nowoczesnej dekoracji...
Dla mnie osobiście jest to wyłącznie zabawka - ot na przykład do wymyślania kolejnych ciekawych (?) animacji.

wtorek, 11 czerwca 2013

Programowanie AVR cz. 10: Modyfikacja mikroprocesorowego sterownika wyświetlacza alfanumerycznego LCD (układ HD44780 lub odpowiednik) z dostępem przez łącze szeregowe (i błędy!)

Błędy zdarzają się nawet w najprostszym kodzie, niestety. Program sterownika do wyświetlacza szeregowego, o którym pisałem jakiś czas temu, też się błędów nie ustrzegł. Przy okazji zmodyfikowałem ten program w celu poprawnej obsługi wyświetlacza 16*2. Dotychczas wykorzystywałem dwa odzyskane ze złomu wyświetlacze jednowierszowe o fizycznej organizacji 16*1, ale logicznie każdy z nich składał się z dwóch wierszy po osiem znaków - stąd konieczność wprowadzenia udziwnionego polecenia mapowanego na bascomowskiego Locate'a i stąd błędy, które się przemknęły podczas testów. Być może wzięło się to z rzadko wykorzystywanego w jednowierszowym wyświetlaczu pozycjonowania tekstu.
W każdym razie, po zmianie wyświetlacza na model o bardziej popularnym formacie prezentacji tekstu, program wymagał kilku przeróbek, dlatego też i błędy zostały wyłapane i poprawione.

Oto poprawiony i zmodyfikowany program (BASCOM):

Warto przetestować ten zmodyfikowany wyświetlacz - szczególnie funkcjonalność, która dotychczas sprawiała problemy, czyli Locate. Poniżej prezentuję listing "latającej małpy" w implementacji na Arduino Leonardo (opis podłączeń w komentarzach). Warto zwrócić uwagę na prostą funkcję locate_xy, która ukrywa przed nami wyliczanie formatu odpowiedniej komendy wysyłanej do sterownika wyświetlacza (opis formatu w prezentowanym wcześniej listingu).

Myślę, że nie od rzeczy będzie, gdy napiszę jakąś prostą bibliotekę (dla Arduino i BASCOM-a) do obsługi wyświetlacza, żeby nie zmuszać użytkownika do niskopoziomowych operacji na łączu szeregowym. Najpierw zadbam o Arduino :-)


(nalepka pochodzi z zestawu dostarczonego w oryginalnym pudełku razem z moim Arduino, nie została tu umieszczona w żadnym konkretnym celu oprócz ozdobnego - zresztą jest to mój prywatny elektroniczny klocek, nie na sprzedaż ;-))

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

Szczegóły na temat projektu szeregowego sterownika wyświetlacza alfanumerycznego dostępne w artykule:

Programowanie AVR cz. 7: Mikroprocesorowy sterownik wyświetlacza alfanumerycznego LCD (układ HD44780 lub odpowiednik) z dostępem przez łącze szeregowe.