Groß ist schön, größer ist schöner. Ganz einfach.
Nachdem ich die Videowand bei einer Veranstaltung und auf der Maker Faire aufgebaut hatte, bekam ich vor Ort Anfragen, ob das nicht auch größer ginge. Das Publikum zeigte Interesse und für mich wurde eine neue Herausforderung geschaffen. 86×48 Pixel – okay, man kann was erkennen, aber viel ist es auch nicht. Beim Durchforsten des WWW stieß ich dann auf LEDscape, eine Ansteuerung ursprünglich für die WS2812 mit einem BeagleBone („Knochen“). Die Entwicklung des Projektes wurde jedoch ausgeweitet – auch LED Matrizen werden inzwischen unterstützt.
WS2812 | LEDMatrix |
+ Helligkeit | + Preis pro Pixel beträgt nur knapp ein Viertel des der WS2812 |
+ Individuell verlegbar | + Fertig als 32×16 oder 32×32 aufgebaut und leicht zu montieren |
+ Flexibel | + Sehr hohe Pixeldichte (bis zu 4mm Pixelabstand) |
+ Eigene PWM-Modulation/Speicherung der Farbwerte | + Nur ein Achtel der LEDs gleichzeitig an, proportional geringere Stromaufnahme |
– Protokoll extrem zeitkritisch | – zum Dimmen müssen die LEDs manuell schnell an und aus geschaltet werden |
Alles hat seine Vor- und Nachteile, aber für Videowände sind eindeutig die Matrizen die erste Wahl. Der BeagleBone kann maximal 64 Panels ansteuern, ich benutze 32×16 P10 Matrizen. Jedes Panel hat eine maximale Stromaufnahme von etwa 3,5A@5V, also 17,5W. Durchschnittlich liegt die Leistung bei 8-10W. Die Farbtiefe mit meinem aktuellen Code liegt bei 8 Bit, die Videos wirken also wie GIF-Animationen.
Angesteuert wird der Koloss jetzt nicht mehr über USB, sondern über das Netzwerk. Wenn die Verbindung stabil und die Bildrate gering genug ist, ist auch WLAN möglich.
Der Knochen empfängt die Bilder als UDP Nachrichten. Jeder Pixel wird in 3 Bytes (RGB) aufgeteilt und in die Nachricht eingefügt. Allerdings können UDP Pakete nur 64kB (abzüglich Overhead) groß sein.
Da meine Videowand 32.768 Pixel zu je 3 Byte zählt, also 98.304 Bytes bedarf (96kB), muss die Nachricht in zwei Pakete gesplittet werden.
Die Pakete beinhalten jeweils den UDP Header, den Index, welcher Teil übertragen wird und die jeweilige Hälfte des Bildes. Die wieder zusammengesetzte Nachricht wird in den Speicher geschrieben, wo sie vom Assembler Code in den 2x 200MHz Controllern ausgelesen und verarbeitet wird. Da es mit einem gut klappte, folgten gleich 80 weitere.
Da die Matrizen größtenteils passiv laufen und keine eigene PWM Modulation haben, muss das Bild mehrfach aktualisiert werden, um die Graustufen darzustellen. Je Reihe befinden sich bei mir 8 Panels á 512 LEDs, also 4096 LEDs, die mehrere hundert Mal die Sekunde neue Daten bekommen. Die Transistoren in den einfachen Shift-Registern haben entsprechend viel zu arbeiten, was man in ruhiger Umgebung dann auch deutlich akustisch wahrnehmen kann (vorausgesetzt man kann in dem hohen Frequenzbereich noch hören).
Zusammengebaut werden kann das Teil dann in allen möglichen Variationen, vorausgesetzt man verkabelt alles richtig. Der aktuelle U-Aufbau hat sich bisher bewährt.