Mein 8*8 LED-Cube war eines meiner ersten großen Elektronik-Projekte. Er besteht aus 8*8*8=512 grünen 3mm LEDs. Die Idee stammt von Instructables, wo mehrere Umsetzungen dokumentiert wurden.
Planungsbeginn: 02/2015
Baubeginn: 05/2015
Fertigstellung: 07/2015
Ein LED-Cube ist prinzipiell eine quaderförmige Anordnung von LEDs, wobei die Anzahl der LEDs in jede Richtung unterschiedlich sein kann. Üblicherweise wird jedoch eine konstante Anzahl für alle Richtungen verwendet. In diesem ersten Modell habe ich -in meinem Größenwahn- mit 8 LEDs pro Richtung eine hohe Anzahl gewählt. Dadurch ergibt sich eine Gesamtzahl an LEDs von 512. Natürlich kann nicht jede LED einzeln angesteuert werden, dafür währen entsprechend 512 I/O-Pins notwendig.
Um diesen Ansteueraufwand zu umgehen, wird auf die Trägheit des Auges vertraut. (PoV- "Persistence of Vision") Daher wird nur jeweils eine Ebene des Würfels auf einmal angeschaltet. Die darin befindlichen LEDs müssen dann aber vollparallel angesteuert werden, wodurch immernoch 64 Datenleitungen benötigt werden. Nun werden nacheinander die Ebenen und die dazu jeweils entsprechenden LEDs eingeschaltet. Es entsteht der Eindruck, dass alle LEDs gleichzeitig leuchten. Werden LEDs nur in jedem zweiten oder dritten Durchlauf eingeschaltet, so erscheint die LED gedimmt. Dadurch kann jede LED einzeln abgedunkelt werden.
Elektrisch ist der Würfel in Kathodenebenen und Anodensäulen geteilt. Es sind also sämtliche LEDs einjeder Ebene an der Kathode (Minuspol), sowie alle LED-Anoden (Pluspol) jeder Säule verbunden. Da theoretisch bei allen eingeschalteten LEDs innerhalb einer Ebene der Strom von 64 LEDs geschaltet werden muss, wurde jeweils ein parallel geschaltetes Transistorpar zur Stromverstärkung verwendet.
Für die 8*8=64 Säulen wurden 8 Schieberegister vom Typ 74HC595 verwendet. Diese stellen jeweils 8 Datenleitungen zur Verfügung, welche jeweils über einen Widerstand eine Säule ansteuern. Um eine möglichst kurze Ansteuerzeit zu gewährleisten, sind deren Eingänge parallel am ansteuernden Mikroprozessor angeschlossen. Bei diesem handelt es sich um einen Atmel ATmega32. Im Vergleich zu seinem aus dem Arduino bekannten, kleineren Bruder Atmega328 bietet dieser mehr I/O-Leitungen, sowie mehr Speicher und einen höheren Takt.
Der Atmega hat zwei Aufgaben, welche parallel ausgeführt werden. Die eine Aufgabe ist das Erzeugen von Anzeigedaten und deren Übertragung in den Framebuffer. Dafür stehen verschiedene Effekt-Programme zur Verfügung, welche per Zufallsprinzip ausgewählt und variiert werden. Die zweite Aufgabe ist die Anzeige der erzeugten Daten im Framebuffer. Diese wird zyklisch über einen Interrupt eines Timers durchgeführt. Mit jedem Interrupt werden die Daten einer Ebene gelesen und auf die Schieberegister übertragen. Am Ende wird die alte Ebene ausgeschaltet, die Daten in den Schieberegistern angewendet (Übetragung Schieberegister -> Latch) und die neue Ebene eingeschaltet. So geht die Zeit der Datenübertragung für die Anzeige nicht verloren, was der Helligkeit zugute kommt.
Neben dem Erzeugen von Daten aus Effektprogrammen existiert auch ein serieller SUB-D-Anschluss. Über diesen können Bilder von einem PC übertragen und angezeigt werden. Dafür existiert auch ein Programm, welches ich jedoch bisher nicht fertig gestellt habe.
Um diesen Ansteueraufwand zu umgehen, wird auf die Trägheit des Auges vertraut. (PoV- "Persistence of Vision") Daher wird nur jeweils eine Ebene des Würfels auf einmal angeschaltet. Die darin befindlichen LEDs müssen dann aber vollparallel angesteuert werden, wodurch immernoch 64 Datenleitungen benötigt werden. Nun werden nacheinander die Ebenen und die dazu jeweils entsprechenden LEDs eingeschaltet. Es entsteht der Eindruck, dass alle LEDs gleichzeitig leuchten. Werden LEDs nur in jedem zweiten oder dritten Durchlauf eingeschaltet, so erscheint die LED gedimmt. Dadurch kann jede LED einzeln abgedunkelt werden.
Elektrisch ist der Würfel in Kathodenebenen und Anodensäulen geteilt. Es sind also sämtliche LEDs einjeder Ebene an der Kathode (Minuspol), sowie alle LED-Anoden (Pluspol) jeder Säule verbunden. Da theoretisch bei allen eingeschalteten LEDs innerhalb einer Ebene der Strom von 64 LEDs geschaltet werden muss, wurde jeweils ein parallel geschaltetes Transistorpar zur Stromverstärkung verwendet.
Für die 8*8=64 Säulen wurden 8 Schieberegister vom Typ 74HC595 verwendet. Diese stellen jeweils 8 Datenleitungen zur Verfügung, welche jeweils über einen Widerstand eine Säule ansteuern. Um eine möglichst kurze Ansteuerzeit zu gewährleisten, sind deren Eingänge parallel am ansteuernden Mikroprozessor angeschlossen. Bei diesem handelt es sich um einen Atmel ATmega32. Im Vergleich zu seinem aus dem Arduino bekannten, kleineren Bruder Atmega328 bietet dieser mehr I/O-Leitungen, sowie mehr Speicher und einen höheren Takt.
Der Atmega hat zwei Aufgaben, welche parallel ausgeführt werden. Die eine Aufgabe ist das Erzeugen von Anzeigedaten und deren Übertragung in den Framebuffer. Dafür stehen verschiedene Effekt-Programme zur Verfügung, welche per Zufallsprinzip ausgewählt und variiert werden. Die zweite Aufgabe ist die Anzeige der erzeugten Daten im Framebuffer. Diese wird zyklisch über einen Interrupt eines Timers durchgeführt. Mit jedem Interrupt werden die Daten einer Ebene gelesen und auf die Schieberegister übertragen. Am Ende wird die alte Ebene ausgeschaltet, die Daten in den Schieberegistern angewendet (Übetragung Schieberegister -> Latch) und die neue Ebene eingeschaltet. So geht die Zeit der Datenübertragung für die Anzeige nicht verloren, was der Helligkeit zugute kommt.
Neben dem Erzeugen von Daten aus Effektprogrammen existiert auch ein serieller SUB-D-Anschluss. Über diesen können Bilder von einem PC übertragen und angezeigt werden. Dafür existiert auch ein Programm, welches ich jedoch bisher nicht fertig gestellt habe.
Letzte Änderung: 12.11.2018
Keine Kommentare:
Kommentar veröffentlichen