8x8x8 RGB-LED-Cube
Die Herausforderung dieses Projektes bestand darin, die Funktionsweise eines LED-Cubes nachzuvollziehen und aus dem erlangten Wissen eigenständig einen 8x8x8 RGB-LED-Cube zu entwerfen und aufzubauen.
Multiplexing in einer 3D-LED-Matrix
Als Multiplexing wird in einer LED-Matrix eine Art der Verschaltung von LEDs bezeichnet, durch die die LEDs wie in einem Koordinatensystem angesteuert werden können. Dies wird erreicht, indem die Kathoden aller LEDs in einer Ebene und die Anoden aller LEDs der selben Farbe senkrecht verbunden werden.
So können die verbundenen Anoden und Kathoden nummeriert werden und durch Anschluss einer Versorgungsspannung an eine der Anoden und Masse an eine der Kathoden leuchtet die LED an der Stelle, an der sich die beiden Drähte mit der Versorgung kreuzen.
Für eine dreidimensionale Matrix werden nun mehrere dieser Flächen nebeneinander aufgestellt, so dass sich ein Würfel ergibt. Die Kathoden jeder dieser Flächen werden jeweils auf einer Ebene verbunden. So ergeben sich an der Grundfläche (der untersten Ebene) 3*8*8=192 "Anoden-Pins" und an der Seite acht "Kathoden-Pins".
Durch Anlegen der Versorgung an jeweils einen "Anoden-Pin" und einen "Kathoden-Pin" leuchtet genau eine LED. Der Nachteil an dieser Verschaltung ist, dass, sobald zwei LEDs gleichzeitig in unterschiedlichen Lagen leuchten sollen, unbeabsichtigt zwei weitere LEDs, also insgesamt vier LEDs aufleuchten. Um dennoch jede beliebige Figur in diesem Würfel darstellen zu können, werden die Lagen nie gleichzeitig sondern immer nacheinander angesteuert. Dies geschieht so schnell, dass das menschliche Auge nur das Gesamtbild wahrnimmt.
Ansteuerschaltung des Würfels
Der 8x8x8 RGB-LED-Cube mit 512 LEDs wird von einem Mikrocontroller angesteuert. In diesem Fall wird ein Arduino Uno Board verwendet. Da dieser jedoch keine 200 Ausgangs-Pins besitzt, werden die Daten in Bit-Zahlen verschlüsselt ausgegeben.
Um die Ausgangssignale des Arduino zu entschlüsseln und die LEDs anzusteuern wird eine Digitalschaltung entworfen. Vorlage für die Ansteuerschaltung dieses Projekts war eine Schaltung zu einem einfarbigen LED-Cube aus dem Internet. Diese wurde leicht verändert und modifiziert, um einen dreifarbigen LED-Cube ansteuern zu können. So wurden die Line-Decoder hinzugefügt, um eine größere Menge Flip-Flops mit der selben Anzahl an Ausgangspins des Arduino ansteuern zu können. Dazu wurden statt zustandsgesteuerten Flip-Flops flankengesteuerte verwendet. Die 192 "Anoden-Pins" an der Grundfläche werden, um die Menge der Eingangspins, welche die Schaltung besitzt, gering zu halten, durch 8-Bit D-Type Flipflops angesteuert.
Dafür werden die in einer Fläche angeordneten Pins in acht Streifen aufgeteilt, diese zeigen alle in die x-Richtung des imaginären Koordinatensystems im Würfel. Jede Reihe wird so von drei 8-Bit Flip-Flops angesteuert (eins für jede Farbe). Somit ergeben sich 3*8 = 24 Flip-Flops. Diese sind an ihren D-Pins mit einem gemeinsamen 8-Bit Datenbus verbunden, durch diesen Bus wird dann später festgelegt, welche LEDs in jeweils einer Reihe leuchten sollen.
Da ein Arduino Uno nicht genügend Pins besitzt, um die Clock-Pins von dieser Menge Flip-Flops direkt anzusteuern, sind diese, für jeweils eine Farbe zusammen, an einen drei-zu-acht Line Decoder angeschlossen. Dadurch können die Clock-Pins der Flip-Flops, für eine Farbe, mit einem Drei-Bit-Datenwort angesteuert werden. Der Nachteil bei dieser Lösung ist, dass immer nur ein Flip-Flop pro Farbe gleichzeitig die Daten des 8-Bit-Bus übernehmen kann. Da die verwendeten Flip-Flops anders als in der Vorlage flankengesteuert sind, übernimmt immer das Flip-Flop den Wert des Busses, auf dessen Nummer sich die 3-Bit-Zahl am Eingang des Line Decoders geändert hat. Das Signal des Datenbusses wird also nur bei einer Veränderung übernommen. So ist es also auch nicht möglich direkt hintereinander zweimal das selbe Flip-Flop die Daten übernehmen zu lassen.
Die acht "Kathoden-Pins" des Würfels werden durch jeweils einen N-Kanal MOSFET, als Schalter, angesteuert. Diese schalten die "Kathoden-Pins" bei einer Gate-Source-Spannung von 5V auf die Masse der Schaltung. Dadurch kann ein größerer Strom durch die 5V Logikbausteine gesteuert werden. Um Zwischenzustände zu vermeiden wird der Gate-Pin durch einen Pull-Down-Widerstand mit der Masse verbunden. Da sowieso, durch den Aufbau des Würfels bedingt, immer nur eine Lage gleichzeitig angesteuert werden kann, werden die acht Gate-Verbindungen durch einen weiteren Line Decoder auf ein 3-Bit-Datenwort verschlüsselt.
Funktionsprinzip
Die Anzahl der benötigten Pins kann durch die Konstruktion des Würfels an sich auf ein Achtel reduziert werden, indem man die Lagen des Würfels multiplext d.h. die gemeinsame Kathode der LEDs auf einer Lage zusammenfasst und durch einen MOSFET ansteuert. Somit muss nur eine Ebene des Würfels d.h. 64 LEDs einzeln angesteuert werden, auf welcher Lage die LED dann aufleuchtet wird durch die MOSFETS geregelt.
Dadurch müssen die einzelnen Lagen jedoch nacheinander angesteuert werden und können nicht gleichzeitig leuchten. Durch schnelles Ansteuern mit mehr als 100 Hz pro Lage kann das menschliche Auge kein Flackern mehr wahrnehmen.
Da der Arduino jedoch ohne zusätzliche Hardware keine 64 LEDs und acht MOSFETs ansteuern kann, verwende ich hier acht 8bit D-Type Flipflops pro Farbe. Die 8x8 Matrix aus LEDs wird dazu in acht jeweils acht LEDs lange Streifen unterteilt. Jede Farbe eines Streifens wird dann von einem Flipflop angesteuert.
Dadurch kann eine große Menge an LEDs mit wenigen Arduino-Pins angesteuert werden. Da für die Eingänge aller Flipflops ein getaktetes 8-bit Datensignal verwendet wird, kann die Information über den Zustand der LEDs in einer Farbe pro Reihe gleichzeitig übermittelt werden, indem der Clock-Pin des Flipflops zur Zeit der richtigen Datenübergabe auf HIGH gesetzt wird. Da der Arduino jedoch auch für jede einzelne Clock-Verbindung nicht genug Pins hat werden diese über drei 3-bit Signale übermittelt und von drei, 3-bit auf acht Pin seriell, Demultiplexern entschlüsselt.
Diese Methode wird auch für die Ansteuerung der MOSFETs angewendet, damit der Würfel durch 20 Pins, und damit durch einen gewöhnlichen Arduino UNO, ansteuerbar ist. Um die Lebensdauer der LEDs zu verlängern und die gewünschte Helligkeit zu erreichen wird für jeden Flipflop-Ausgang noch ein LED Vorwiderstand angebracht. Zur Sicherstellung der Versorgungsspannung bei schnellen Stromänderungen werden alle Logikbausteine mit einem Kondensator über V+ und Gnd versehen.