LED Matrix Module

(<-- links kein Menü? Hier klicken)
Bei Ebay habe ich mir LED Module mit jeweils 16x16 LEDs gekauft (Samsung SLM1608 MD2). Das Interessante ist, dass es sich um Rot/Grün LEDs handelt, so dass die einzelnen Bildpunkte auch in der Mischfarbe gelb leuchten können. Die Ansteuerung erfolgt über nur 6 Leitungen. Mehrere Module lassen sich (fast) beliebig aneinander reihen, so dass ziemlich große Grafikanzeigen möglich sind. Nicht zu unterschätzen ist allerdings auch der Stromverbrauch, da schließlich jedes Modul 512 LEDs besitzt.

Bisher habe ich eine Grafik Demo und einige einfache Spiele für ein LED Modul geschrieben. Da mir die drei möglichen Farben rot/grün/gelb als etwas wenig erschien, kam ich auf die Idee, dass man die einzelnen Farben durch ein schnelles neu schreiben mit einem zweiten (und dritten) Bild auch in der Helligkeit regeln können müsste (PWM; Puls-Weiten-Modulation). Als Ergebnis lässt sich jede LED in drei verschiedenen Helligkeiten (und zusätzlich auch ausgeschaltet) einstellen. Grafiken sehen so deutlich schöner aus. Der Nachteil ist jedoch, dass das ständige neue Schreiben der Bilddaten nicht unerheblich viel Rechenleistung kostet und diese Methode so auf die Verwendung mit wenigen Modulen begrenzt ist.

Die Funktionsweise des PWM Tricks:
Beim ersten ans Display gesendete Bild leuchten nur die LEDs, die besonders hell sein sollen.
Beim zweiten zusätzlich die mit mittlerer Helligkeit.
Nur beim dritten angezeigtem Bild werden alle LEDs eingeschaltet die irgendwie leuchten sollen, also die mit heller, mittlerer und schwacher Leuchtstärke.
Soll also eine LED hell leuchten, so leuchtet sie die ganze Zeit mit maximaler Helligkeit, bei mittlerer Helligkeit nur 2/3 der Zeit und bei einem schwachen Leuchten 1/3 der Zeit mit maximaler Helligkeit. Da der Wechsel der drei Bilder so schnell erfolgt, so dass das menschliche Auge diesen nicht erkennen kann hat es für den Betrachter den Anschein als ob es die LEDs mit verschiedenen Helligkeitsstufen leuchten könnten.

Grafik Demo

Meine Grafik Demo demonstriert die Ansteuerung eines LED Modul. Die Demo läuft auf einem AVR (beispielsweise ATMEGA32) mit 8MHZ Takt. Zusätzlich habe ich einige Funktionen zum Anzeigen von Linien, Text, Scrolltext, Rechtecke und verschieben des Display Inhaltes nach oben/unten/links/rechts geschrieben. Die Grafik Demo belegt rund 8KB Flash und passt somit noch in einen ATMEGA8.

Bilder:
(auf Bilder klicken zum Vergrößern)
Bild eines LED Moduls
Ausschnitte aus der Demo
Bild eines LED Moduls
Animierte .gif Datei

Quellcode und Schaltpläne:
Die Verwendung der Quellcodes und Schaltpläne erfolgt auf eigene Verantwortung, es gibt keine Garantie auf Fehlerfreiheit.
demo1-schaltplan.png
demo1-version_1-00.zip
Schaltplan und Quellcode der Demo. Version: 1.00. Getestet mit einem ATMEGA32, müsste jedoch auch mit einem ATMEGA16 oder ATMEGA8 funktionieren.

Gamebox

Als nächstes habe ich einige Spiele geschrieben, soweit dies bei einer Begrenzung auf 16x16 Pixel möglich ist. Als Eingabegerät dient ein analoger Joystick. Digitale Gamepads funktionieren nicht! Realisierte Spiele: Tetris, Race, 4 Gewinnt, Pong, Snake und Reversi. Alle Spiele und Optionen sind über ein Menü auswählbar. Auch die obige Demo ist vorhanden. Getestet wurde die Software mit einem ATMEGA32. Alle Features zusammen benötigen rund 27,5KB Flash. Mit einem ATMEGA16 muss die Auswahl der Spiele/Features daher reduziert werden. Bei einem ATMEGA8 müsste die Auswahl noch weiter verringert werden, so dass ich von einem ATMEGA8 abrate. Als Experiment habe ich den Quellcode soweit erweitert, dass das Programm auch auf einem PC lauffähig ist. Hierbei wird die Joystick Eingabe durch eine Mauseingabe ersetzt und die LEDs als passende farbige Kreise mit Hilfe der Grafik Libray  GLUT dargestellt. Dies ermöglicht ein deutlich einfacheres Debuggen als wenn die Software auf dem Mikrocontroller läuft. Auch kann so jeder auch ohne AVR und LED Display die Funktionen der Gamebox testen. Der Spielspaß ist allerdings bei der PC Version bei weitem nicht der Selbe da ich auf dem PC die Zeitsteuerung nicht exakt nachbilden konnte und die Spiele so etwas träge wirken.

Bilder:
(auf Bilder klicken zum Vergrößern)
Gamebox mit Gameport
Bildschirmausschnitte der Spiele
Das Programm als PC Version
LED Modul in Holzkasten mit Tetris
Ausschnitte aus vier Spielen
Screenshot mit Reversi

Ein Video auf Youtube zeigt die Gamebox in Aktion.

Quellcode und Schaltpläne:
Die Verwendung der Quellcodes und Schaltpläne erfolgt auf eigene Verantwortung, es gibt keine Garantie auf Fehlerfreiheit. ACHTUNG: Die Pins an denen der Joystick hängt dürfen nicht als Ausgang beschaltet werden. Für den Fall dass die Pins des AVR an dem die Achsen des Joysticks angeschlossen sind als Ausgang und auf logisch Eins geschaltet werden und gleichzeitig die Joystickachse in eine Stellung mit maximalem Ausschlag gestellt wird, wäre ein Kurzschluss sehr wahrscheinlich da der Joystick Ausgang dann direkt auf Masse liegen kann und der Controller Pin versucht den Anschluss auf +5V zu legen. Dieser würde wahrscheinlich zur Zerstörung des Controllers führen!
gamebox1-schaltplan.png
gamebox-final1.zip
Schaltplan und Quellcode der Gamebox. Version: 1.00 (Final 1). Getestet mit einem ATMEGA32, bei einem ATMEGA16 (ungetestet) müsste auf einige Features verzichtet werden. Alternativ läuft die Software zu Ausprobieren auch auf dem PC.
gamebox-final1-02.zip
Bugfixes + Aktualisierung für neuere avr-libc. Weihnachtsstern Modus.

Derzeit wäre noch Platz für ein weiteres Spiel, ich gehe aber nicht davon aus, dass ein weiteres folgen wird, sondern werde mich wohl nur noch kleinere Verbesserungen und Fehlerkorrekturen beschränken. Falls jedoch jemand eine überzeugende Spieleidee für die Gamebox hat, würde es mich freuen davon zu hören.



Zur Startseite

Projekt aus dem Jahr: 2005
Beschreibung zuletzt aktualisiert: 18.12.2013