Um eine LED zum leuchten zu bringen muss man diese mit dem Plus- und dem Minuspol einer Stromquelle verbinden, ein Widerstand begrenzt noch den Stromfluss und somit auch die Leuchtkraft. Möchte man aber sehr viele LED mit einer Schaltung steuern, gibt das ganz viele Drähte, die man verbinden muss. Theoretisch pro LED eine Verbindung und alle Minuspole noch zum Ground. Also Anzahl LED plus eins.
Eine LED leuchtet nur, wenn ein Spannungsunterschied vorliegt, wobei die höhere Spannung am längeren Draht, der Anode und die tiefere Spannung am kürzeren Draht, der Kathode angebracht werden muss. Diese Tatsache hilft uns, eine alternative Variante mit weniger Verbindungen zu bauen. Denn wenn die höhere Spannung an der Kathode anliegt, leuchtet die LED nicht.
In einem Video sah ich, wie jemand einen LED Würfel von 4x4x4 LED verbunden hat und diese auch einzeln kontrollieren konnte. Bei 64 LED wären das mit der oben genannten Methode aber 64 Verbindungen zum Kontroller plus Ground. Daher ein Raspberry Pico aber nur 23 GPIO Pins hat, würde das nicht funktionieren. Aber im Video hat er es anders verdrahtet. Alle auf einer Ebene liegenden LED hat er an einem Drahtgitter an der Anode zusammen verbunden. Die Kathode wurde mit einem anderen Draht nach unten durch den Sockel geführt, wobei 4 LED der 4 verschiedenen Ebenen verbunden wurden. So hat er 4 Ebenen mit 4 Pins am Pico verbunden und 16 Drähte der Kathoden auch. Insgesamt 20 Pins, was bei einem Pico knapp zur Verfügung steht.
Das Prinzip funktioniert so:
Man macht eine Matrix, wobei jede LED durch eine Kombination von Pins angesteuert wird.
Pin | 16 (Kathode) | 17 (Kathode) |
14 (Anode) | Blau | Rot |
15 (Anode) | Gelb | Grün |
Wenn ich also Rot zum leuchten bringen will, muss Pin 14 auf +3V (high) und Pin 17 auf Ground (low). Gleichzeitig muss aber Pin 16 auch auf high, damit die Blaue LED nicht aufleuchtet. Daher LED aber nur leuchten, wenn die höhere Spannung an der Anode anliegt, bleibt die Gelbe LED dunkel. Grün hat zwei mal low.
Der MicroPython Code lässt die LED nacheinander aufleuchten:
from time import sleep from machine import Pin p14 = Pin(14, Pin.OUT) p15 = Pin(15, Pin.OUT) p16 = Pin(16, Pin.OUT) p17 = Pin(17, Pin.OUT) def init(): p14.low() p15.low() p16.low() p17.low() def red(): p14.high() p15.low() p16.high() p17.low() def blue(): p14.high() p15.low() p16.low() p17.high() def green(): p14.low() p15.high() p16.low() p17.high() def yellow(): p14.low() p15.high() p16.high() p17.low() init() for x in range(3): red() sleep(1) blue() sleep(1) green() sleep(1) yellow() sleep(1) init()
Bei 4 LED ist noch kein grosser Vorteil dieses Systems zu erkennen. Aber sobald es mehr LED werden, macht es Sinn diesen Ansatz zu wählen. Nehmen wir das Beispiel eines Würfels wo die Gesamtzahl gleich der Anzahl der LED auf einer Seite hoch 3 ist. Dann ergeben sich folgende Zahlen:
LED pro Würfelkante | LED Gesamt | Pins bei Einzelverbindung | Pins bei Matrix |
2 | 23=8 | 8+1=9 | 2+4=6 |
3 | 33=27 | 27+1=28 | 3+9=12 |
4 | 43=64 | 64+1=65 | 4+16=20 |
5 | 53=125 | 125+1=126 | 5+25=30 |