Mastodon

Wie steuert man LEDs mit den IO-Ausgängen eines Mikrocontrollers an? Im einfachsten Fall schließt man eine LED einfach an einen Ausgang an. Viele digitale Ausgänge haben gegen Low eine höhere Treiberleistung als gegen High. Daher wird man meist eine inverse Logik nutzen. Die LED hängt konstant an positiver Versorgungsspannung, typischerweise über einen passenden Vorwiderstand und wird vom Ausgang gegen Masse geschaltet. Aber das ist nur ein schaltungstechnisches Detail. Wichtiger ist hier, dass man so für jede LED einen Ausgang benötigt. Das wird also bei mehreren LEDs schnell recht „teuer“ im Sinne der Anzahl der benötigten Ausgänge.

CharlieplexingBesser ist es, einige Leitungen als „Zeilen“ zu nutzen und andere als „Spalten“, wie bei einer Tabelle. An jede Kreuzung können nun zwei LED antiparallel geschaltet werden. Wenn man also beispielsweise sechs Ausgänge hat, kann man bei der zuerst erklärten direkten Ansteuerung 6 LED betreiben. Mit dem hier erklärten Multiplexing hat man 3 Zeilen und 3 Spalten und kann mit der gleichen Anzahl an Leitungen 2x3x3=18 LED betreiben. Jede LED wird hier in der Grafik als ein Kreis symbolisiert.
Damit Multiplexing generell funktioniert, müssen zwei Bedingungen erfüllt sein:

  1. Es müssen sogenannte Tri-State-Ausgänge sein, die nicht nur High und Low kennen, sondern auch hochohmig, also auf Z, geschaltet werden können. Das ist heute üblich.
  2. Die LEDs müssen ihre eigene Betriebsspannung oder besser noch die der digitalen Ausgänge auch als Sperrspannung vertragen. Auch das ist heute üblich.

Um eine LED zum Leuchten zu bringen, schaltet man also die Ausgänge, zwischen denen sie hängt, passend auf High und Low. Die anderen Ausgänge sind auf Z. Umgekehrt wird damit klar, dass immer nur eine LED gleichzeitig leuchten kann. Um nun den Eindruck mehrerer leuchtender LEDs zu erzeugen, wird man sie schnell hintereinander schalten und nutzt dazu die Trägheit unserer Augen aus.

Zur Sache

CharlieplexingCharles M. Allen, ein Ingenieur der Firma Maxim, hatte 2001 eine Idee, wie man mit den sechs Leitungen insgesamt 6×5=30 LED ansteuern kann. Er hob die Trennung zwischen Zeile und Spalte auf und schaltete zwischen je zwei verschiedene Leitungen zwei LEDs antiparallel. Ihm zu Ehren wird dieses Verfahren Charlieplexing genannt. In der Grafik rechts sind die beiden LEDs dieser antiparallelen Paare in der dreieckigen Gruppe links unten und rechts oben. Auf der Diagonale sind die Zeilen und Spalten miteinander verbunden. Hier kann natürlich keine LED sitzen. Daher kommt das -1 in der Tabelle unten.

Allgemein gilt also bei N Ausgängen für die maximale Anzahl an ansteuerbaren LEDs:

Direkte AnsteuerungN
Klassisches Multiplexing2(N/2)2
CharlieplexingN(N-1)

Betrachtet man diese Formeln für kleine Zahlen, so sieht man gleich, dass an einer Leitung naheliegenderweise kein Multiplexing gemacht werden kann. Bei zwei Leitungen bringt es auch noch keinen Vorteil. Aber ab drei Leitungen sieht man, dass klassisches Multiplexing noch nicht viel bringt, Charlieplexing jedoch schon Platz für sechs LEDs bietet. Wenn also die etwas kompliziertere Programmierlogik für die Ansteuerung nicht stört, kann man mit Charlieplexing viele Ausgänge einsparen und hat so Platz für andere Komponenten oder kann einen einfacheren Controller einsetzen.

Für die Vorwiderstände der LED lohnt es sich genauer ins Datenblatt des Controllers zu schauen. Viele Ausgänge sind kurzschlussfest und liefern nur wenige mA. Hier kann man sich den Vorwiderstand ganz sparen. Sollten doch welche benötigt werden, halbiert man den benötigten Wert und schaltet an jeden Ausgang den halben Wert.

Noch mehr?

Wenn man den Strombedarf der LED und die Treiberleistung der Ausgänge genau abstimmt, kann man mit einem etwas verrückten Trick noch mal mehr LEDs ansteuern. Man hängt zusätzlich zu den LEDs in der Matrix noch von jedem Ausgang je zwei LEDs in Serie gegen die Versorgungsspannung und gegen Masse. Diese LED werden dann nur leuchten, wenn nur ein Ausgang auf High oder Low liegt. Wegen des höheren Spannungsabfalls von zwei LEDs in Serie können sie nicht leuchten, wenn eine LED aus der Matrix leuchtet. Das zu justieren ist aber ziemlich fummelig und ich empfehle diesen Trick nur anzuwenden, wenn man keine Ausgänge mehr übrig hat und unbedingt noch ein paar LEDs mehr benötigt.

Aufmerksamen Lesern wird auffallen, dass einiges davon voraussetzt, dass die Ausgänge vergleichbar gut gegen High wie gegen Low treiben können. Tatsächlich ist das heute der Fall. Wenn der Ausgang also auch Tri-State, also Z, beherrscht, dann funktioniert der letzte Trick natürlich auch ohne Multiplexing. Und damit können bei direkter Ansteuerung also 2N LED angesteuert werden.

Mehrere gleichzeitig

Bei allen Multiplex-Verfahren stellt sich nun die Frage, wie man mehrere LEDs gleichzeitig zum Leuchten bringt. Das ist meist ein recht normaler Anwendungsfall. Dazu nutzt man die Trägheit des menschlichen Auges aus und steuert die eigentlich gleichzeitig leuchtend gewünschten LED immer nur kurz und immer rundherum an.

Dabei sollte man einen Stroboskop-Effekt vermeiden, besonders wenn sich der Betrachter oder die Anzeige bewegt. Die Frequenz darf also nicht zu niedrig sein. Zum anderen ist dieses zeitliche Multiplexing auf der elektrischen Ebene ein Rechtecksignal, hat also viele Oberwellen, die Störungen verursachen können. Die Leitungen sollten also so geführt werden, dass sie nicht als Antennen wirken.

 

 

Teilen