RGB-LED-Matrix

Die RGB-LED-Matrix ist eines unserer zeitintensivsten Projekten und hat einige Rückschläge erfordert.

Das Konzept stand recht schnell: Ein Dekoelement mit im 8×8-Raster angeordneten LEDs, welche per Mikrocontroller angesteuert werden sollen. Das ganze dann noch im (fast) gesamten sichtbaren Farbspektrum. Natürlich sollen dabei SMD-Bauteile verwendet werden, sprich 64 kleine Chips mit einer Seitenlänge von etwa 5mm mit je 6 Pins wollen verdrahtet werden. Wenn man den Gedanken auf der Zwischenverdrahtungsebene weiterspinnt, resultiert daraus eine Lötpunktzahl von mindestens 512 (je 1 Bezugspotential für die 3 LEDs + das entsprechende PWM-Signal).
So weit so gut, dachten wir uns und ebenso dass es machbar ist, eine so große Menge von Hand zu löten. Zuerst musste aber mal das Schaltungsdesign überlegt werden. Wir hatten uns zunächst für den TCL5940 von Texas Instruments entschieden, welcher eine 12-Bit-PWM auf 16 Kanälen bietet. Summa summarum kommen wir auf 12 Chips, die uns die Hauptarbeit abnehmen sollten. Der erste Chip lief tadellos, angesteuert von einem ATmega8535. Das Timingdiagramm der PWM-Chips ist ein wenig komplizierter als eine gewöhnliche SPI, war aber dennoch gut zu realisieren. Die nächste Ausbaustufe der Platine enthielt bereits 4 der schönen Chips, die ebenfalls tadellos funktionierten. Daher entschlossen wir uns, die fehlenden 8 zu ersetzen und die Matrix fertig zu stellen. Gesagt getan, war alles verdrahtet und schon trat das erste Problem auf. Die Daisy-Chain der Chips hatte irgendwo eine Unterbrechung…

Nach langem Suchen konnten wir den Übeltäter ausfindig machen, es war nämlich ein TLC5940, welcher durchgebrannt war und kein serielles Signal mehr an die folgenden Chips sendete. Weshalb dies passiert ist konnten wir nicht feststellen, da eine Überlast durch die LEDs ausgeschlossen werden kann. Wir ersetzten den kaputten Chip und durften immer noch keine Besserung erleben. Die Matrix tat was sie wollte und sorgte bei uns noch mehr für Verwirrung. Der nächste Gedanke war der Signalweg. Keiner der Eingänge war impedanzangepasst worden und es waren sogar einige Pins der TLCs direkt miteinander verbunden. Ein einzelner AVR konnte das beim besten Willen nicht bewerkstelligen. Daher ging unser nächster Designentwurf in Richtung Porttreiber. Jedes Signal würde nach jedem TLC5940 zwischengepuffert werden und somit bis zum letzten Chip laufen. Hier verließ uns das Glück sogar schon beim Prototypen, als wir zufällig auf einen neuen Chip, den WS2803 aufmerksam wurden.

Da der WS2803 recht günstig ist und seine Ansteuerung wirklich einfach von statten geht, haben wir ein paar dieser Chips bestellt und ausprobiert. Der WS2803 besitzt einen internen Oszillator und ebenso einen Porttreiber für die Ausgänge. Somit ist man im Stande, theoretisch beliebig viele der Chips aneinander zu hängen, ohne Probleme mit den Signalformen oder -laufzeiten. Mit 18 Kanälen pro Bauteil kann man also 6 RGB-LEDs ansteuern, und das bis zu einem Takt auf 25MHz. Das einzige Manko hierbei ist die nur relativ geringe Dynamik von nur 8 Bit. Dies ist für Farbenspiele und Animationen ausreichend, bietet für die Darstellung von detailgetreuer Grafik (auf 8×8 Pixel 😉 ) nach einer Gammakorrektur aber doch zu wenig Spielraum.

Nun musste also alles noch einmal ab gelötet und an die neuen Platinen dran gelötet werden, was einige Schmerzen im Rücken kostete, da die LEDs ja mittlerweile auf der Grundplatte angebracht waren. Und so stand nach vielen Handgriffen die erste funktionsfähige Version der RGB-LED-Matrix.

Dem war jedoch nicht genug. Da wir veränderbare Animationen ermöglichen wollen, haben wir noch kurzerhand ein Bluetoothmodul angebracht, das für die erforderliche Kommunikation zur Steuerung der Animationen sorgt. Das Bluetoothmodul läuft als Slave, zu dem sich eine serielle Verbindung von einem anderen Bluetoothgerät aus herstellen lässt. Standardmäßig arbeitet es mit einer Baud Rate von 9600 bps, 8 Datenbits, einem Stoppbit, weist sich als „lenvor“ aus und hat als Standardpaarungsschlüssel die Ziffernfolge „1234“. Diese Daten kann man vom angeschlossenen AVR durch einfache Befehle ändern, die man als Zeichenketten über den UART zum BT-Modul schickt. Dies funktioniert aber nur so lange keine BT-Verbindung aufgebaut ist, denn ab diesem Zeitpunkt werden alle ein- und ausgehenden Daten zum entsprechenden Empfänger gesendet bzw. vom AVR empfangen.

Problematisch wird es, wenn man meint die Baudrate zu hoch zu setzen. Als Faustregel gilt: Je höher der Takt des AVR, desto höher kann man die Baudrate setzen, ohne dass sie zu stark von ihrem Idealtakt abweicht. Und auch wenn die tatsächliche Baudrate nur 1% vom Idealtakt abweicht, kann es schon Probleme geben, wie es mir passiert ist. Dann kommen entweder gar keine Daten mehr irgendwo an oder sie enthalten Unmengen von Fehlern. Ab diesem Zeitpunkt kann man also auch nicht mehr so einfach die Baudrate zurücksetzen, schließlich kommt der Steuerstring dann auch falsch an. Wir mussten dann das BT-Modul komplett resetten, wofür allerdings erst ein paar Pins freilegen mussten.

Hat man die Geschwindigkeitsprobleme und Fehlerraten im Griff, geht es natürlich weiter damit ein Protokoll zum Datenaustausch zwischen Computer (Handy, usw.) und der Matrix zu entwickeln. Bisher fehlen in diesem Protokoll noch sämtliche Prüfsummen zur Fehlererkennung, aber es ist bereits möglich ein komplettes bewegtes Bild unkomprimiert mit ausreichender Framerate zu übertragen. Am anderen Ende nutze ich bisher meinen Laptop, auf dem Ubuntu läuft und den ich so konfiguriert habe, dass mein BT-Adapter auf einen virtuellen COM-Port gemapt wird, den ich anschließend mit PureBasic öffne um darüber Daten zu senden. In einem unserer Videos seht ihr auch wie ich am Laptop Pixel male, die dann direkt auf der Matrix angezeigt werden. In dem Fall habe ich auch Komplettbilder übertragen und nicht nur die einzelnen geänderten Pixel.

Update (14.1.2013):Fertiger Aufbau in der Rückansicht

Die Matrix Final Version 1 wurde fertig gestellt. Allerdings noch ohne Bluetooth. Es gab einfach noch keine Zeit Software für ein Smartphone zu erstellen um die Matrix komfortabel über Funk zu bedienen. Deswegen haben wir uns zunächst anders beholfen und einfach sechs verschiedene kleine Demos programmiert, die immer dann wechseln, wenn man die Matrix vom Strom trennt und wieder dran hängt. Und es funktioniert seitdem tadellos und wie gewünscht.

Das Äußere wurde natürlich ebenfalls stark überarbeitet. So hat sie jetzt einen ansprechenden Holzlook mit Kanten aus Alu bekommen und vor dem 8×8-Raster sitzt eine halb durchlässige Plexiglasscheibe, die das Licht jeder RGB-LED sehr gleichmäßig pro Quadrat verteilt.

Ein letztes Video der RGB-LED-Matrix aus dem Bastelkeller könnt ihr euch hier anschauen:

Vergisst auch nicht euch die beiden Unterkategorien anzuschauen:

7 Gedanken zu „RGB-LED-Matrix“

  1. Jungs, ihr seid n Knaller! Woher wisst ihr das eigentlich alles? Studiert ihr E-Technik? Ich hab zwar in meiner Jugend ein bisschen Elektronik gebastelt, aber „gefressen“ hab ichs nie. Eher so Mathe und Informatik. Heute interessiert mich der Arduino und ich will auch ein LED-Matrix-Projekt angehen. Aber keine Wand, sondern einen Tisch. Unser rechteckiger Tisch hier im Wohnzimmer hat ne trübe Glasplatte und ich stelle mir darunter eine RGB LED Matrix vor, die man einerseits für schöne Ambient-Beleuchtung nutzen kann (dezente Farbverlaufsspiele), aber auch für Tetris Spielen, eMail/Twitter News Benachrichtigungen etc. Vielleicht kann man auch eine kapazitive Folie aufbringen und so einen (grob aufgelösten) Touch Tisch draus machen?!
    Aber ich weiß gar nicht, wo anfangen. Welche Art von mechanischer Konstruktion für die LEDs? Aus Holz? Welche RGB-LEDs taugen? Für jede LED eine (matt?) schwarze oder weiße „Box“? Wann hört eigentlich so eine 5V Spannung eines Arduino Boards auf zu funktionieren bei wie vielen LEDs? Fragen über Fragen. Hab ja gerade erstmal etwas über Shift-Register, Multiplexing, Charlieplexing gelernt … 😉
    Hoffentlich macht ihr noch viele schöne Bastel-Projekte! Sehr erfrischend natürlich, eure Videos! 🙂

    1. Wir werden die Tage mal eine detaillierte Beschreibung unserer Matrix einstellen. Kannst auch gerne im Facebook Kontakt zu uns aufnehmen, da lässt sich auch gut diskutieren.

  2. Hallo,

    habt ihr irgendwo eine Anleitung zum nachbauen? würde mir nämlich super kommen bei meinem couchtisch, der mit einem touchscreen versehen ist.

    gruß

    michi

  3. Leider nicht selbst entwickelt, sondern von Bascom-forum.de gemopst.

    Sorry Leute, aber Nachbauen ist zwar eine Leistung, aber keine große. Zumal ein bisschen Schieberegistergeklimpere ist Zweitsemester 😉

    1. Schön, dass du so sicher weißt, dass wir irgendwo was geklaut haben sollen. Ich war noch nie im Bascom-Forum. Ist da zufällig ein vergleichbares Projekt von dir und jetzt fühlst du dich hintergangen? Irgendwo klauen brauchen wir nicht, uns reichen Datenblätter der einzelnen Bauteile. Den Rest machen wir selbst. Vom Schaltungsaufbau, über das Platinenlayout inkl. Ätzen und Verkabeln und bis zur Programmierung und dem endgültigen Gehäuse.
      Und zu deinem letzten Satz möchte ich auch noch was sagen. Natürlich ist Schieberegistergeklimpere kein großes Ding. In welchem Semester das kommt, weiß ich jetzt zwar nicht, aber ich habe das schließlich auch nicht studiert. Und das klingt bei dir dann noch so wie ein Vorwurf. Ist es jetzt schlimm, wenn man grundlegende Protokolle nutzt?
      Und jetzt zeig mal bitte den Nachbau aus dem Bascom-Forum. Bin schon gespannt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*