Große LED-Matrizen mit Helligkeitsmodulation

Die Basissoftware macht jede LED einzeln in 256 logarithmischen (8192 linearen) Helligkeitsstufen dimmbar! Die Firmware ist hierzu trickreich und in Assembler erstellt.

Die Implementationsstudie zeigt günstige Eigenschaften:

Charlieplexing wurde hier nicht implementiert, kannte ich damals noch nicht. Das lässt die realisierbare Anzahl an LEDs bei 20 Mikrocontroller-Pins auf 20×19 = 380 anwachsen. Dann mit Bipolartransistoren als Spannungsfolger, nicht mit MOSFETs.

Sternhimmel

Genügend billige weiße Leuchtdioden lassen den Wunsch nach einer modernen, Energie sparenden und kindgerechten Zimmer(decken)beleuchtung aus bis zu 100 LEDs aufkommen.

Diese einfache Schaltung ermöglicht mittels zweier Potenziometer die Einstellung der Beleuchtungshelligkeit und die Auswahl eines „Animationsprogramms“, welches die Anzeige einzelner Sternbilder oder die Simulation von „Supernovas“ einschließt.

Natürlich eignet sich eine derartige LED-Decke nicht als Raumbeleuchtung im herkömmlichen Sinne, dafür sind die LEDs (noch) zu leistungsschwach; die eingesetzten Schalttransistoren können aber schon ordentliche Ströme schalten.

Die Schaltung wird mit einem Schaltnetzteil mit 5 V (maximal ca. 1 A) versorgt. Notfalls tut es auch ein PC/Notebook über USB.

Schaltplan, Eagle-Quelle

Die Schaltung ist eine einfache Multiplexansteuerung, wie sie für LED-Anzeigen bekannt ist. Statt der üblichen LED-Treiber (ULN2003 u.ä.) wurden hier viel besser geeignete MOS-Leistungstransistoren verwendet, die in der Lage sind, die hohen Ströme für superhelle LEDs verlustarm zu schalten. Da jede einzelne LED einzeln in ihrer Helligkeit angesteuert werden kann, ist der Rest (bspw. die Gruppierung zu bekannten Sternbildern) nur eine Frage ihrer Anordnung und der Mikrocontroller-Firmware.

Die Leiterplatte findet bspw. in einer Zwischendecke Platz. Programmiert wird der Chip am einfachsten über die parallele Schnittstelle eines PCs über den (rechten) SubD-Stecker.

[Bestückung oben (Durchsteck)] [Bestückung unten (SMD)]
Leiterplatten-Bestückung: Ziemlich übersichtlich! Eagle-Quelle

Der USB-Anschluss dient nur zum Firmware-Update (zurzeit nicht implementiert). Dazu müssen beide Potenziometer auf Linksanschlag stehen, damit durch die dann inaktiven LEDs die Betriebsspannung ruhig genug ist, dass (mit dem internen RC-Oszillator) eine USB-Kommunikation zustande kommt.
Ursprünglich war eine komplette PC-Steuerung vorgesehen, diese funktioniert aber nur stabil mit Quarz – dafür fehlen nun zwei Pins. Bei Verzicht auf K1 und K0 (nur 80 LEDs) wäre dies aber deutlich schöner.

Die Verdrahtung der Außenbeschaltung ist simpel.

Anschlussplan, Eagle-Quelle

Der SubD-Stecker wird links angeschlossen.

Zunächst wurde der Sternhimmel als 10x10-Matrix auf einer Plastscheibe erstellt, um die Firmware zu entwickeln. Gelötet wurde die Leiterplatte von Lehrlingen einer Elektronikwerkstatt; das können sie offenbar ganz gut.

[Foto Versuchsaufbau]   [Foto SMD-Lötarbeit]
Versuchsaufbau und SMD-Lötarbeit

Hier: Eagle-Schaltplan und -Board herunterladen!

Hier: Firmware herunterladen!

Es existiert eine Implementationsstudie für Windows, an der man die Funktion der Firmware am PC nachvollziehen kann. (Heutzutage würde ich's natürlich in JavaScript schreiben, aber damals steckte <canvas> noch in den Kinderschuhen.)

Screenshot
Screenshot der Implementationsstudie (Flimmer-Programm)

Einsatzerfahrungen

Die bisherige Firmware läuft für einen Sternhimmel zu schnell (Disko-Effekt), was aber durchaus beabsichtigt war. Langsamere Effekte würden eine größere PWM-Tiefe als 8 Bit benötigen, um keine störenden Einzelstufen, insbesondere bei geringen Helligkeiten, wahrnehmen zu können.

Weitergehende Betrachtungen

Was ist zu ändern bei 3-Farb-LEDs?

Hier sind verschiedene Fälle zu beachten!

Ich will mehr LEDs

Verschiedene Wege führen nach Rom:

Eine Vergrößerung der Anzahl der „Spaltenleitungen“ (hier sind's die Katoden) auf mehr als 10 ist nicht empfehlenswert, weil die Impulsstrombelastbarkeit typischer LEDs das 10-fache des zulässigen Dauergleichstroms entspricht und mehr Spalten einem Lichtverlust gleich kommt. Außerdem sinkt die Wiederholfrequenz. Daher wird man nur noch die „Zeilenleitungen“ (hier die Anoden) vergrößern können und daher zu rechteckligen Matrizen (= etwas weniger LEDs pro Portpin) tendieren. Ist der Lichtverlust akzeptabel, wären 16 Spalten mit einem Binärdekoder (etwa 74HC154) die nächstliegende Wahl:

Bei Dreifarb-LEDs sind die angegebenen LED-Zahlen dementsprechend durch 3 zu teilen.

Bei den BCD- oder Binärdekodern muss man auf Invertierung bzw. Nichtinvertierung der Ausgänge achten und ist damit auf Spalten = Anoden oder Katoden festgelegt. Nimmt man stattdessen Schieberegister, etwa 74HC164, 4014 oder 4015, braucht man zwar 2 ICs, ist aber bei der Polarität wahlfrei.

Noch mehr LEDs

Hier sollte man den Lichtverlust gezielt einplanen. Etwa:

Hinweis: Das Netzteil muss den Dauergleichstrom aller Leuchtdioden parallel liefern können!

Bunte Leuchtschnecke

Eine Leuchtschnecke mit 54 RGB-LEDs, mithin 162 Einzel-LEDs ist eine praktische Realisierung einer 9x18-Matrix an einem ATmega16. Dabei ist – bei 16 MHz Quarzfrequenz – die PWM-Tiefe 13 Bit und die Bildwiederholfrequenz 200 Hz. Besser geht's nicht! Die Rechenlast ist ca. 25 %, und dank partiell freigegebener Interrupts ist auch USB möglich. (Der USB-Betrieb führt zum leichten Flackern der LEDs.) Die Schaltung ist durchaus geeignet, genügend Strom als Nachttischbeleuchtung zu liefern; dann blendet die Schnecke beim Anblick.

Die Assembler-ISR beinhaltet in der Kommentarspalte auch den Zeitplan für die Ausgabe von minimalen Impulsbreiten auf den notwendigen 3 Ausgabeports. Siehe Quelltext.

Die ISR verlangt das Freihalten der Register R2 .. R6 sowie R7 für CurKatode. Damit darf rand() aus der Standardbibliothek nicht eingebunden werden, da diese (sowie eine Reihe anderer, insbesondere Gleitkomma-Funktionen) diese Register ungefragt in Beschlag nimmt, leider.

Die oben angegebene Firmware enthält nicht die Ablaufsteuerung, keine Infrarotkommunikation und kein V-USB, sondern ist nur als Funktionsnachweis gedacht. Alles weitere ist © Tobias Lucas.