Jochen 'Nunz' Herz

   

Nunzios 5*5*5 LED Cube

Was macht man mit 4 Wochen Winterurlaub, die recht überraschend kommen ? Natürlich mal wieder was Neues ausprobieren!
Ich habe mir den Asuro-Roboterbausatz besorgt und in wenigen Stunden zusammengebaut.
Ich war begeistert von der Einfachheit, mit der der verbaute ATMEGA8L-Mikroprozessor zu programmieren war. Also: Thema vertiefen. Das Netz ist voll von kreativen Spinnern und Infos über Mikroprozessoren. Am meisten faszinierten mich die 3D-LED Cubes, die in Wort und Video in allen Größen zu finden waren. Das musste ich auch bauen. Zwar war ich anfangs als Hardware-Neuling komplett überfordert und habe einiges an Zeit gebraucht, bis ich kapiert hatte, wie die Ansteuerung der einzelnen LEDs ohne sichtbaren Leitungen überhaupt funktioniert, aber dann ging es los. 4 Wochen lang wurde jede freie Minute in das Projekt gesteckt. Pläne gemacht, wieder verworfen, neu gemacht, Bauteile besorgt, geflucht, gefreut, Infrastruktur (einfaches uraltes Oszilloskop) besorgt und irgendwann war er fertig (die Ferien allerdings auch :-)

Das Ergebnis könnt ihr im Video sehen:



 

Wie funktioniert's?

Auf den ersten Blick kann der Würfel gar nicht funktionieren, da alle LEDs scheinbar mit einem Drahtwürfel direkt verbunden sind und keine Leitungen zu den einzelnen LEDs gehen. Bei genauerem Hinschauen sieht man jedoch, dass alle Kathoden der LEDs auf jeder horizontalen Ebene verbunden sind und jede dieser Ebene mit einem Draht mit dem Boden einzeln verbunden ist. Somit kann man jede Ebene einzeln mit Strom versorgen oder nicht.
 

 

 


Würfel mit Logik- und Netzteilplatine im Sockel
 

Außerdem sind alle Anoden übereinander verbunden und diese Drähte verschwinden unten im Boden. Man kann also alle Anoden in einer vertikalen Reihe gleichzeitig mit Strom versorgen oder nicht.
Aber damit kann man doch nur jeweils die LEDs in allen Ebenen gleichzeitig ansteuern, oder ? Stimmt. Die Reihen werden einzeln angesteuert.
Aber ein Mikroprozessor ist schnell! Nun programmiert man die Leitungen der Ebenen so, dass sie nacheinander einzeln Strom bekommen und danach wieder ausgeschaltet werden. Bevor eine Ebene Strom bekommt, setzt man die einzelnen Säulen wie es für die Ebene sinnvoll ist. Somit hat man das Muster für eine Ebene erzeugt. Danach wiederholt man das Ganze für die nächste Ebene und fängt am Schluss wieder bei der ersten Ebene an. De facto leuchten also nie alle LEDs im Würfel gleichzeitig, sondern sie werden gepulst. Bei mir findet pro Sekunde 4000mal ein Wechsel zwischen den Ebenen statt. Das menschliche Auge nimmt das nicht wahr, sondern sieht nur, dass eine LED an oder aus ist.

Auch habe ich Graustufeneffekte softwaremäßig realisiert. Ich erreiche dies einfach indem eine LED, die etwas dunkler sein soll eben nur bei der zweiten oder dritten Ebenenaktivierung eingeschaltet wird. Das Ganze hat natürlich seine Grenzen, denn irgendwann nimmt das Auge bei zu seltenem Einschalten ein Flackern wahr.

 
 


Ebene für Ebene...
 

Leuchtdioden

Ich habe mich aus Kosten- und Aufwandsgründen für einen 5*5*5 LED Cube entschieden.
Zuerst einmal zu den LEDs. Im Netz bekommt man recht günstig LEDs in allen Farben im Pack. Ich habe 50 LEDs mit (hier nicht verwendbaren) Vorwiderständen für 4 Euro bekommen. Kauft sie um bloß nicht einzeln beim großen C, da werdet ihr arm!
Die meisten LEDs sind aber klar und da wir von dem Material abhängig sind, das gerade angeboten wird, muss man sich hier etwas einfallen lassen. Klare LEDs erzeugen meistens einen Spot nach vorne. Von der Seite sieht man das Licht kaum. Im Falle des Cubes ist das sehr schlecht, denn a) sieht man von der Seite nicht, welche LEDs brennen und b) werden die LEDs der darüber liegenden Ebenen angestrahlt. Ich habe viel ausprobiert: Lacke, Haarspray, Kleber, abgesägte Heissklebestücke. Aber die Lösung ist absolut einfach: Die LEDs werden einfach mit einem 100er Sandpapier von Hand abgeschmirgelt! Dadurch wird das Spotlicht gebrochen und tritt in alle Richtungen nahezu gleichzeitig aus. Viel Spaß beim Schmirgeln, denn ihr braucht 125 Stück davon :-)

 

 


Eine geschliffene LED, der Rest wartet schon
 

LED-Ebene

Betrachten wir zuerst eine einzelne Ebene: Es ist eine Matrix von 5 mal 5 LEDs. jeweils 5 LEDs in einer Reihe sind einem 8-Bit Wert zugewiesen. Diesen Wert erzeuge ich durch Schieberegister, wobei jede 5er Reihe ein eigenes Schieberegister spendiert bekommt. Die restlichen 3 Bits des Schieberegisters habe ich übrigens genommen, um ein paar farbige LEDs an der Gehäuserückseite anzusteuern um ein wechselndes ambientes Hintergrundlicht zu erhalten (siehe Abbildung).
Sicherheitshalber habe ich hinter die 5 Schieberegister noch jeweils einen Treiber-IC gesteckt, denn ich fahre die LEDs in einem etwas zu hohen Spannungsbereich. Dies ist zu verantworten, da dadurch die LEDs etwas heller sind und sie ja nie permanent Strom bekommen, sondern durch die Ebenenansteuerung immer gepulst werden.

Jede Ebene hängt nun durch einen Draht an einem eigenen Port. Sind mal alle 25 LEDs einer Ebene durch die Schieberegister durchgesteuert, so würde viel zuviel Strom fließen für einen Port eines Mikroprozessors. Daher wurde ein Treibertransistor für jede Ebene spendiert.

 
 


Eine Maske ist bei 125 LEDs sehr zu empfehlen
 

Prozessor

Ich habe mich für einen ATMEGA32 entschieden, da er mehr Speicher für die Effektprogrammierung hat. Durch die Schieberegister hätte auch die Portanzahl eines kleineren ATMEGA8 gereicht, denn die Schieberegister sind hintereinander geschaltet, so dass theoretisch schon 8 Ports ausgereicht hätten.

Der Programmierport kam auch gleich mit auf die Lochrasterplatine, denn bei jeder Erweiterung den Prozessor umstecken zu müssen wäre weitaus aufwendiger.

Rechts unten ist noch ein kleines IC zu sehen. Das ist eine MAX2323, der nur für die Realisierung eines seriellen RS232-Ports nötig ist um mit dem PC zu kommunizieren. Der Cube selbst arbeitet vollkommen autark ohne PC, aber in der Entwicklungsphase sind Debugausgaben an den PC sehr, sehr hilfreich!

Ansonsten erkennt man schön die 5 Gruppen mit Schieberegister und Treiber ICs für die 5 LED-Reihen, die alle auf einen Stecker in Richtung Cube enden.

 


 


Logikplatine
 

Software

Die Ansteuerung der Schieberegister sowie die Umschaltung der Ebenen erfolgt komplett in einer Interrupt-Routine. Dann muss man sich keine Gedanken mehr um das Timing machen. In jedem Interrupt wird ein globales dreidimensionales Feld ausgelesen und die Register entsprechend der eingeschalteten Ebene gesetzt. Beim nächsten Interrupt wird die Ebene ausgeschaltet und die nächste Ebene berechnet.
Die Animationen selbst erfolgen in der Hauptschleife. Hier habe ich einfach kleine Programme geschrieben, die die Animationen in das dreidimensionale Feld schreiben.

Rechts habe ich das Pulsen der LEDs sichtbar gemacht, indem ich die Kamera schnell während der Belichtung über die Schaltung gezogen habe. Oben (grüner Strich) sieht man eine normale LED vom Programmer. Die anderen Punkte kommen schon von der Schaltung. Man sieht schön, die wie LEDs sehr schnell an- und ausgeschaltet werden.

An der Seite des Gehäuses habe ich noch 4 Taster eingelassen, die im Prozessor noch 2 Flags setzen. Über diese Taster kann man die Geschwindigkeit verändern, mit der die Animationen ablaufen sollen. Mit den anderen Tastern kann man kurz ein "R" oder ein "S" im Würfel darstellen und schaltet damit um von einer zufälligen Reihenfolge und einer fest vorgegebenen Reihenfolge (sowohl der Würfelanimation wie auch der Ambient-Light Animation der farbigen LEDs auf der Rückseite des Gehäuses).

 

 


Oben ungepulste, unten gepulste LEDs
 

Die Animationen

Hier kann man sich wirklich austoben. Seht euch am besten den Film an. Meine witzigste Idee finde ich die Game of Life-Animation. Die meisten kennen die 2D-Simulation, in der bei jedem Schritt für jeden Punkt einer Matrix berechnet wird, ob diese (Population=Punkt) überlebt oder nicht. Das wird durch ein Regelwerk bestimmt wie "Überlebt nur, wenn mindestens zwei Nachbarn vorhanden sind aber nicht alle 6 Nachbarn." Durch die Wiederholung der Regeln entstehen Animationen, die immer weiter ablaufen. Teilweise erreichen sie einen stabilen Zustand, manchmal auch einen Instabilen, bei dem Populationen immer wieder alternierend leben und sterben.
Ich habe die Idee auf den dreidimensionalen Raum erweitert und als Cube-Animation realisiert. Schön kann man hier die stabilen und instabilen Zustände erkennen.
 


Die LEDs sind Teil des Ambient-Lights auf der Rückseite



Hat Spaß gemacht. Traut euch! Ich könnt ja mit einem 3*3*3 Würfel anfangen, der dann ohne Schieberegister und ohne Treiber direkt von den Ports des Mikroprozessors gesteuert wird. Egal was ihr baut: Schickt mir Bilder!!!

Viel Spaß, Nunz


 

Zurück zum Seitenanfang


  

Weitere Hinweise zu den Seiten finden Sie in unserem Impressum
Copyright © 2010 CODEV, Jochen Herz, www.kalorio.de