Posts mit dem Label LED Matrix werden angezeigt. Alle Posts anzeigen
Posts mit dem Label LED Matrix werden angezeigt. Alle Posts anzeigen

Montag, 27. September 2010

LEDMatrix - aktualisierte Firmware

Es ist nun schon einige Zeit vergangen seitdem Mike und ich das Projekt abgeschlossen haben. Leider war der letzte Stand der Firmware noch nicht ganz zufriedenstellend.

Das Problem war zum einen, die Stabilität der USB-Verbindung des Microcontrollers zum Linux-Rechner. Genauer gesagt wurde die USB-Verbindung regelmäßig vom PC aus,resettet wenn zu schnell Daten an den AVR gesendet wurden.

Nach mehreren Tests konnte ich jedoch einen neuen Release der Firmware erstellen, welche zum einen die aktuelle Version des V-USB Projektes beinhaltet und zum anderen einige (kleine aber wichtige) Änderungen die das Timing- und Kommunikations-Verhalten verändern.
Die Verbindung ist nun stabil und die USB-Verbindung wird nicht mehr resettet.
Das zweite, größere Problem war, dass der Microcontroller nur per dazwischen geschaltetem USB-Hub an dem Rechner erkannt wurde, der die Matrix steuern sollte. Jeder andere Linux-PC jedoch hatte mit dem direkten Anschließen des Controllers keine Probleme.
Nachdem wir das Problem mit einem weiteren PC, der auch einen Nvidia Chipsatz besitzt, verifizieren konnten, war das Problem also lokalisiert. Auch diverse Forenbeiträge im OBDEV-Forum ergaben ähnliche Erfahrungen mit Nvidia. Genauer gesagt liegt das Problem beim Timing des Modules im V-USB Treiber für die Verwendung von 16 MHz Quarzen. Manche Chipsätze und deren Treiber kommen damit einfach nicht zurecht. Und da das Debugging in dem Fall (jedenfalls für uns) zu aufwendig werden würde, ersetzen wir demnächst das 16MHz Quarz durch eines mit 12MHz.
Dadurch sollten, laut den Foren, alle Probleme mit der Erkennung  auf Nvidia-Chipsätzen endgültig beseitigt worden sein.

Die neue Firmware kann wie immer hier heruntergeladen werden.
Dem Archiv habe ich auch den aktuellen Schaltplan als PDF beigefügt.

Mittwoch, 7. April 2010

LEDMatrix - Projektabschluss...

So, zum Projektabschluss gibt es nun noch ein paar Videos zum Equalizer in Aktion.
Das Erste Video zeigt die, in den Rahmen des MP3-Player, eingebaute Matrix, welche über ein Notebook angesteuert wird. Auf dem Notebook läuft ein aktuelles Ubuntu Linux mit einer von Mike geschriebenen Testsoftware für den Equalizer.



Das zweite Video zeigt den komplett fertigen Player. Es wird Musik abgespielt und die Matrix als Equalizer angesteuert.


Wie immer kann an der einen oder anderen Stelle noch etwas optimiert und geändert werden. Im großen und ganzen jedoch bleibt es nun wie es ist.
Eine neue Sache ist jedoch aufgetaucht, die USB-Verbindung (per V-USB) macht ausschließlich auf dem verwendeten ASRock miniPC Probleme. So sind wesentlich geringere Übertragungsraten und doch sehr häufige Abbrüche der Verbindung zu verzeichnen, sofern das USB-Gerät überhaupt erkannt wird.
Da die Elektronik der Matrix ja aber dem V-USB "standard" entspricht, der verwendete Linux-Kernel bzw. das Kernelmodul auf allen getesteten Systemen identisch  ist bzw. sind und weitere Geschwindigkeitsunterschiede der getesteten Rechner letztendlich keine Rolle spielen, scheint das Problem doch an einer anderen Stelle zu liegen.
Sobald ich hierfür eine Lösung gefunden habe werde ich wie üblich davon berichten und ein neues Update der Software bereit stellen. Hier gibt es jedoch wie immer die letzten Änderungen der Firmware...

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.

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 ;)

Mittwoch, 17. Februar 2010

Erste Firmware für die LEDMatrix

Die Arbeiten an der Steuerplatine für Mike's LEDMatrix sind, wie ich in meinem letzten Post zu diesem Projekt bereits berichtet hatte, abgeschlossen und so musste die Firmware des LEDCube in den letzten Tagen daran glauben. Das Ziel war die Kommunikation mit dem Mikrocontroller per USB, zum Übertragen einzelner Frames, Ansteuern von Animationen/internen Funktionen und gemeinsames Dimmen aller LED's. Zudem sollte beim Start Mikes Start-Animation mit seinem Logo angezeigt werden.

Soweit fertig ist aus dieser Liste alles bis auf das Dimmen der LED's. Dazu müsste jedoch noch das eine oder andere geändert werden, was aber erstmal noch Zeit hat bis die LED's fertig verlötet sind.

Die erste alpha Version gibt es hier. Im Moment ist das ganze allerdings noch etwas experimentell und muss noch ausgiebig getestet werden.
Enthalten ist in dem Archiv die angepasste Firmware, der USBClient zum Testen der Verbindung, Mike's QT Oberfläche shinyLED zum klicken von Animationen. Weiterhin noch die Sourcen des USBaspLoader welcher später als Bootloader eingesetzt werden soll und noch ein paar Scripte und Tools zum konvertieren und übertragen von Animationen.

Das Bild oben zeigt übrigens die Matrix in Aktion. Das ganze ist allerdings direkt an ein Netzteil angeschlossen.

Dienstag, 9. Februar 2010

Mike's LED Matrix - 1000'de Lötstellen später...

Das Projekt schreitet voran und nach einer mehr als 13 stündigen Löt-Session sind nun zumindest die Masseleitungen der LED's (Mikes Aufgabe) und die Steuerplatine (meine Aufgabe) fertig. Rechts ein Bild der unverbundenen LED's.
Besonders aufgefallen ist bei den LED's, dass wohl nur 2 Stück von den 441 (500 wurden bestellt) defekt waren oder eher defekt gemacht wurden... ;)

Sobald die Steuerplatine und die LED Matrix in ein paar Tagen verheiratet wurden, werden wir ein Video drehen das die ersten Animationen und Bilder der ersten Tests zeigt. Die originale Firmware des LED Cube's ist ohne Anpassungen auf unserer Platine bereits am laufen und muss nur noch auf unsere Anforderungen (USB Datenübertragung und Regelung der Leuchtintensität der LED's) angepasst werden.

Hier im Voraus ein Bild der fertigen Steuerplatine.


  • links oben der Spannungsregler mit Power-LED, an dem ein 9V Block angeschlossen ist
  • links der AVR-Mikrokontroller (ATMega32)
  • links unten der USB-Anschluss
  • rechts vom Microkontroller sind die 8 N-MOSFET's zu sehen
  • die 8 IC's (D-type Latches) steuern die LED's und sind mit den Steckverbindern verbunden
Der 9V Block wird nur zum Testen der Schaltung verwendet. Später wird das Netzteil des Rechners, der die Daten per USB an den Microkontroller übergibt, diese Aufgabe übernehmen.

Dieser Marathon wird Mike und mir sicher ewig ins Gehirn gebrannt bleiben und die Anzahl der zu verarbeitenden Bauteile wird sich in Zukunft auch sicher in kleineren Dimensionen bewegen.

Mehr dazu in Kürze hier...

Donnerstag, 4. Februar 2010

Mike's LED Matrix

Seit längerem haben Mike und ich das vorhaben, in die Frontblende dieses MP3-Player's eine LED Matrix ein zu bauen. Diese Matrix soll dann per Microkontroller gesteuert werden, der wiederum seine anzuzeigenden Daten per USB von dem ThinClient aus dem MP3-Player erhält. Es geht bei diesem Projekt übrigens um 441 blaue, ultrahelle 3mm LED's die mit 441 Halterungen in die 5mm Löcher der Blende befestigt werden .

Als Referenzprojekt verwenden wir die LED-Cube und den Borg3d Würfel.

Da die Liste der Bauteile aber bei beiden Projekten teils unvollständig oder nicht zufriedenstellend war gibt es unsere Liste hier online bei Reichelt. Die LED's und die Halterungen wurden jeweils bei 2 anderen Shops online bestellt.

Jetzt könnte man sich fragen wieso man als Referenz eine 3D Anordnung für eine 2D Matrix verwendet. Ganz einfach, bei einem 8x8x8 Würfel gibt es 512 LED's zum ansteuern. Unsere Matrix besitzt nur 21 x 21 = 441 LED's, was übrigens an der Optik in der Frontblende liegt. Es fällt also eine gesamte 8x8 Ebene aus der Würfeldarstellung weg. Zudem wird die 7te Ebene nicht vollständig ausgenutzt, was aber keinen Nachteil ergibt. Die überschüssige 8te Ebene wird dann vor der Inbetriebnahme aus der Software entsprechend heraus gepatcht. Die Ebenen werden einfach Schachbrett-Artig nebeneinander angeordnet. Bei dem rechten und unteren Rand muss jedoch ein wenig getrickst werden.

Als Firmware wird die des LED-Cube's verwendet, da diese gut strukturiert ist, und vor allem einfacher zu verstehen war da der Code extrem kurz, gut dokumentiert und anpassungsfähig ist.

Nun zum ansteuern der Matrix. Sie wird per Multiplexing angesteuert, wie das ganze funktioniert ist sehr gut auf diesen beiden Videos dargestellt. [#1] [#2]
Kurz: Damit wird ermöglicht jede einzelne LED auch einzeln leuchten zu lassen.

Mike arbeitet bereits an einer auf QT basierenden Software mit der man die einzelnen Frames für die Matrix "klicken" kann.
Jetzt fehlt nur noch die Hardware. Bestellt ist alles, aber noch nicht ausgeliefert...

Sobald das Projekt komplett aufgebaut und die Software fertig ist gibt es hier dazu mehr.

PowerMgr in der Praxis: PV, Batterie, Kühlung und Hauszustand steuern

PowerMgr in der Praxis: PV, Batterie, Kühlung und Hauszustand steuern PowerMgr geht über eine Sammlung von Gerätetreibern hinaus. Der inte...