Sonntag, 28. März 2010

LEDMatrix - Neue Videos

Ein paar Tage sind nun vergangen und nachdem die Matrix auf anhieb funktionierte, habe ich ein paar Optimierungen in der Firmware und bei den Tools mit der sie zu bedienen ist durchgeführt. Aber zunächst kurz zum ersten Test der beiden Komponenten, den LED's und der Steuerplatine. Die 64 Kabel der Reihen waren recht schnell an den 8 Steckern befestigt, was an der sehr guten Vorarbeit von Mike lag, der alle Kabel bereits sortiert hatte. So war nach dem alle Kabel eingesteckt und die Steuerplatine mit einem 9V-Block verbunden wurde, direkt die erste Startanimation zu sehen. Allerdings schien etwas nicht zu stimmen, im Ablauf dieser ersten Animation wurde ein Pixel nicht dort angezeigt wo er eigentlich sollte.
Auf so einen Fall bereits vorbereitet, starteten wir vom Notebook aus einen Testzyklus, mit dem jede einzelne LED auf Funktion getestet wird. Das dafür verwendete Perl-Script liegt dem Archiv bei schon länger bei. Es stellte sich schlussendlich heraus, dass uns in einer Reihe (aber damit für alle Ebenen) ein Kabeldreher untergekommen ist. Mehr Probleme gab es keine. Und das bei 441 LED's, 441 Querverbindungen unter den LED-Reihen der einzelnen Ebenen, den 8 Masseleitungen der und dann noch die ganzen Drähte für die Kathoden der LED's meiner Meinung nach keine schlechte Leistung! Insgesamt wurden etwa 100 Meter Kabel, 10 Meter Draht, einiges an Lötzinn verbraucht. Ganz zu schweigen von der von uns beiden hinein investierten Zeit, der Geduld und den Nerven.

Aber nur mit dem Zusammenbau war es nicht getan. Wie oben bereits erwähnt musste das eine oder andere optimiert werden. Die USB-Verbindung zum Beispiel war anfangs, bei höhreren Frameraten, recht instabil. Mit ein paar Änderungen in dem einen oder anderen Timer in der Firmware war dieses Problem aber auch schnell behoben.

Aus diesem Optimierungsprozess der Firmware ergab sich auch eine Erweiterung des USB-Clients. Dieser ist nun mit einer Art interaktiven "Shell" ausgestattet auf der nacheinander Befehle abgesetzt und Frames übertragen werden können, ohne dabei ständig eine neue Verbindung zum Gerät aufbauen zu müssen. Neben dieser großen Änderung gibt es noch 2 andere neue Scripte. Mit dem einen ist es Animationen oder einzelne Frames, aus Mike's shinyLED, in C-Funktionen umwandeln. Diese können dann mit in die Firmware hinein compilieret werden. Das andere kann die Animationen auf der Matrix von der Kommandozeile aus "abspielen".

Wie ich in einem früheren Post schon beschrieben habe kann der Mikrocontroller auch Animationen intern speichern, die per USB aktiviert werden können. Das nächste Video zeigt einen Equalizer. Die einzelnen "Ringe" sind dabei einzelne im Microkontroller gespeicherte Teilframes, die einzeln oder gruppiert aktiviert und deaktivert werden können. Mit aktiviert und deaktiviert ist gemeint, dass diese Teilframes zu dem aktuell angezeigten Frame hinzugefügt oder davon abgezogen werden. Hierfür werden jeweils nur 2 Bytes per USB übertragen., wie für das gruppierte ansteuern. Gruppieren bedeutet, dass mehrere Ringe gleichzeitig aktiviert werden. Zu sehen ist dies in der Mitte des ersten Videos, an der Stelle wo sich die Matrix von innen nach außen füllt und von außen nach innen wieder leert. Am Anfang und am Ende werden die Ringe einzeln aufgerufen.


Im nächsten Video wird per USB jede auf der Matrix sichtbare Veränderung übertragen. Hierzu wird das Script zum testen der Animationen verwendet. Trotz der mit 21x21 Pixel geringen Auflösung könnte ich mir, zu Demozwecken, doch das eine oder andere einfache Spiel darauf vorstellen...


Nach Ostern ist dann die Deadline für das Projekt und dann wird der Sprichwörtliche Hammer fallen gelassen. Es gibt zwar noch das eine oder andere das man machen könnte aber das steht erstmal auf der Wunschliste. Bis Ostern muss also noch Mikes MP3-Player die Matrix als Equalizer ansprechen können, was aber sogut wie fertig ist und dann muss das ganze wieder an seinen vorgesehenen Platz in der Halterung eingespannt werden. Eingespannt?! War da was? - Ja, das Blech wird in einen Rahmen eingesetzt und erfährt damit eine Biegung. Hoffen wir mal das wir alles richtig ausgemessen und geplant haben und es keine größeren Schäden und vor allem Kurzschlüsse gibt... ;)

Sobald das ganze das erste mal komplett da steht, werde ich wieder das eine oder andere Video und Foto online stellen.

Das neue Archiv mit allen Änderungen kann wieder hier heruntergeladen werden.

Mittwoch, 17. März 2010

LEDMatrix - Fertig!

Ohne Worte...

Donnerstag, 11. März 2010

LEDMatrix - Update

Aus der letzten Arbeit an der Platine für die LEDMatrix sind zwei "neue" Dinge entstanden.
Zum einen die neue Firmware für den AVR-Controller und zum anderen eine angepasste Version des USBaspLoaders, um diesen auf dem ATMega32 lauffähig zu machen. Zudem besitzt die Platine nun einen Reset-Button und einen Jumper, siehe Bild.

Der Reset-Button kann dazu verwendet werden, den Mikrocontroller neu zu starten (wozu auch sonst). Ist dabei jedoch der Jumper auf die im Bild gezeigte Stellung gesetzt, wird in den USBaspLoaders gesprungen, der sich im Bootloader befindet. Dadurch ist der AVR-Controller nun direkt per USB programmierbar.
Der USBaspLoader startet nur per Reset-Taster. Um wieder in die Firmware für die Matrix zu springen, muss der Jumper umgesteckt und erneut Reset gedrückt werden werden. Alternativ kann die Platine auch aus- und wieder eingesteckt werden. Durch den Verlust der Versorgungsspannung wird kein Reset des Controllers registriert, so das der Bootloader dazu veranlasst wird, direkt in die Matrix-Firmware zu springen.

Bei Gelegenheit werde ich den, im Vergleich zum LEDCube, geänderten Schaltplan des Mikrokontrollers fertig und online stellen.

Das Update für den USBaspLoader kann hier heruntergeladen werden. Die neue Firmware der LEDMatrix kann wie üblich hier geladen werden. Für Details siehe Changelog...

In den nächsten Tagen werden LED's und die Platine vereint. Dabei wird sicher das eine oder andere Video und Bild entstehen. Es ist und bleibt also spannend... mal ganz abgesehen von der stetig wachsenden Verkabelung auf der Platine und unter den LED's ;)