LED Lichterkette mit Charlyplexing
Downloads
Schaltplan und Board für Eagle: | LED_leucht-o-mat.zip |
Sourcecode: | LED_Lauflicht.c |
Einleitung
Da wir jedes Jahr Zelten fahren (http://www.orlik-camper.de) und dort einiges an Technik aufgefahren wird, um die Nacht zu erhellen, hatte ich mich entschieden, auch mein Zelt zu "verschönern". Aber wenn schon, dann richtig gut. Ziel war es, eine Lichterkette zu bauen, bei der jede LED einzeln angesteuert und in ihrer Helligkeit verändert werden kann. Das sollte an sich kein Problem sein. Die Kunst ist nun, dieses mit sowenig wie möglich einzelnen Kabeln zu erreichen. Meine erste Idee war, die LED's in einer Matrix zu verschalten und im Multiplexbetrieb zu betreiben. Das ist aber noch nicht das Optimum. Das beste Verhältnis zwischen der Anzahl der Kabel und der zu steuernden LED's erhält man, wenn man alle Kombinationsmöglichkeiten zwischen den Kabeln ausnutzt. Noch besser wird es, wenn man auch die Polung der LED's mit einbezieht und immer zwei Stück antiparallel schaltet. Mit dieser Schaltung kann man mit acht Kabeln 56 LED's einzeln steuern! Auf den folgenden Bildern könnt ihr sehen, wie die LED's verschaltet und angesteuert werden müssen:
Schaltung Lichterkette | Schaltplan Steuerung | Leiterplatte Steuerung |
Beschreibung Hardware
Die ganze Schaltung ist recht einfach. Das komplizierteste ist die Ansteuerung für ein Kabel. Die Schaltung ermöglicht es, ein Kabel auf Masse, Versorgungsspannung oder hochohmig zu schalten. Folgendes Zustandsdiagramm ergibt sich daraus:
Eingang A1_HI | Eingang A1_LO | Ausgang A1 |
---|---|---|
low | low | hochohmig |
high | low | high |
low | high | low |
high | high | !!! Kurzschluß !!! |
Beschreibung Software
Die Software ist etwas komplizierter als die Hardware. Es gibt eine Interrupt-Routine, die alle 20µs aufgerufen wird. Die Daten für die LED's (mit welcher Helligkeit sie leuchten sollen) werden in einem globalen Feld gespeichert. Die Routinen, die die Leuchtmuster steuern, verändern die Werte in diesem Feld. Die Interrupt-Routine schaltet die LED's.
In der Interrupt-Routine wird ein Zähler hochgezählt. Je nach Zählerstand wird eins der acht Kabel auf Masse gelegt. Die anderen Kabel werden in Abhängigkeit des LED Zustands, der aus dem globalen Feld gelesen wird, auf High geschaltet. Im nächsten Durchlauf wird das gleiche mit veränderter Polarität gemacht. Die Helligkeit wird dadurch gesteuert, dass noch ein zweiter Zähler mitläuft und die LED's nur geschaltet werden, wenn der Wert in dem globalen Feld, der für die LED steht, größer ist als dieser zweite Zähler.
Lizenz:
Der Schaltplan und der Sourcecode können für nicht kommerzielle Anwendungen von jedem frei genutzt werden. Falls der unwahrscheinliche Fall eintreten sollte, dass jemand Interesse an einer kommerziellen Nutzung haben sollte, möchte ich vorher gefragt werden.