Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Gadgets    Kontakt   




<<< LEDs schalten         Einfache Kommunikation >>>

LED-Matrix

Das Video zur Funktionsweise einer LED-Matrix


Das Video zum Kapitel geht auf eine Zusammenarbeit mit meinem Sponsor NextPCB zurück, von dem ich die im Video zu sehenden Platinen erhalten habe. Angebote zum Erstellen eigener Projekte gibt's bei NextPCB:

Register to get $10 coupon and 20 Points: Zum Angebot auf NextPCB.com
Fast & Free Shipping for PCBA order: Zum Angebo auf NextPCB.comt
PCB Boards 10pcs for Free: Zum Angebot auf NextPCB.com

Das 2. Video zeigt die NextPCB Platinen im Detail


Übersicht

In diesem Kapitel ist nachzulesen:


Funktionsweise

3x3 LED Matrix
Abbildung 1:
Zu sehen ist eine Matrix aus 9 LEDs. Die drei Spalten (engl.: Columns, Col.) sind über je einen Widerstand von 1kΩ an die GPIOs 1, 2 und 3 angeschlossen, die Zeilen direkt an die GPIOs 4, 5 und 6. An allen GPIOs lieget ein LOW-Signal an, womit an keinem Punkt der Matrix eine Spannung zu messen ist - alle LEDs sind ausgeschaltet.
Matrix mit LEDs 1, 4 und 7 eingeschaltet
Abbildung 2:
Nun wird GPIO Nummer 1 auf HIGH-Signal gesetzt, womit die LEDs Nummer 1, 4 und 7 in Vorwärtsrichtung gepolt sind und zu leuchten beginnen.
Matrix mit LEDs 1, 4 und 7 eingeschaltet mit Ersatzschaltbild
Abbildung 3:
An den Kathoden (Spitze des Dreiecks mit Querstrich des Diodensymbols) der drei LEDs liegen die 0V des LOW-Signals, die Anoden (stumpfe Seite des Dreiecks) sind über den 1kΩ Widerstand mit dem HIGH-Signal, also 5V, an GPIO 1 verbunden. Somit fällt an den LEDs die Schwellspannung ab. Diese Spannung ist typabhängig und liegt üblicherweise im Bereich von 1V bis 3V. An den Anoden, die direkt miteinander verbunden sind, ist die Schwellspannung zu messen.
Gehen wir im Folgenden davon aus, dass das Logiklevel 5V und die Schwellspannung der LEDs 2V beträgt.
Der Widerstand an GPIO Nummer 1 bildet mit den drei in Vorwärtsrichtung gepolten LEDs einen Spannungsteiler. Die drei LEDs wiederum sind parallel zueinander geschaltet, wie in dem Ersatzschaltbild rechts zu sehen.
Matrix Mit LEDs 4 und 7 eingeschaltet
Abbildung 4:
Nun wird auch GPIO Nummer 4 auf HIGH-Level gesetzt, womit LED 1 ausgeschaltet wird, die LEDs 4 und 7 bleiben hingegen eingeschaltet.
Das Ersatzschaltbild rechts zeigt, dass an Kathode von LED 1 - die direkt mit GPIO 4 verbunden ist - nun 5V anliegen, an der Anode nach wie vor 2V, womit diese Diode in Sperrrichtung geschaltet ist und nicht mehr leuchtet. Die Kathoden von LED 2 und 3 sind ebenfalls direkt mit GPIO Nummer 4 verbunden, womit hier 5V anliegen. Die Anode von LED 2 ist über einen Reihenwiderstand mit GPIO 2 verbunden, was auch für die Anode von LED3 und GPIO 3 gilt. Beide liegen somit an 0V, womit LED 2 und 3 in Sperrrichtung geschaltet sind und nicht leuchten.
Matrix mit LED 4 eingeschaltet
Abbildung 5:
Um schließlich auch LED 7 auszuschalten und nur noch LED 4 am Leuchten zu halten, muss auch GPIO 6 auf HIGH-Level, also 5V geschaltet werden.
Ersatzschaltbild mit eingeschalteter LED Nummer 4
Abbildung 6:
Das Ersatzschaltbild zeigt, dass nur noch LED 4 in Vorwärtsrichtung gepolt ist. Nicht im Ersatzschaltbild gezeichnet sind die LEDs Nummer 5 und 6. An diesen liegt sowohl an der Anode als auch an der Kathode 0V an, womit durch diese kein Strom fließen kann.
Ausgangszustand Matrix mit allen LEDs ausgeschaltet.
Abbildung 7:
Wie zu Beginn sind schließlich wieder alle LEDs ausgeschaltet, wenn auch GPIO Nummer 5 auf HIGH-Signal gesetzt wird. Daran ändert sich auch dann nichts nichts, wenn GPIO Nummer 1 auf LOW gesetzt wird. Dies ist der bessere Ausgangszustand für eine LED Matrix, denn ausgehend hiervon bleiben alle LEDs ausgeschaltet, wenn nun GPIO Nummer 1, 2 oder 3 auf HIGH-Signal gesetzt wird.
Matrix in Vorbereitung zum Schalten von LED 5
Abbildung 8:
Hier ist das für GPIO Nummer 2 der Fall. Die LEDs in Spalte 1 (LED 1, 4, 7) und Spalte 3 (LED 3, 6, 9) sind mit 5V an den Kathoden und 0V an den Anoden in Sperrrichtung geschaltet. An den Dioden in Spalte 2 (LED 2, 5, 8) Liegen sowohl an den Kathoden als auch an den Anoden 5V an, womit durch keine der 3 LEDs ein Strom fließen kann.
Matrix mit LED 5 eingeschaltet
Abbildung 9:
Erst wenn einer der GPIOs Nummer 4, 5 oder 6 auf LOW-Signal geht, fließt ein Strom durch das Netzwerk. Hier ist GPIO 5 auf LOW-Signal gegangen, womit ein Strom aus GPIO Nummer 2 über den Widerstand und LED 5 in GPIO Nummer 5 fließt. GPIO 2 ist die Stromquelle (engl.: current source), GPIO 5 ist die Stromsenke (engl.: current sink).
Ausgangszustand LED Matrix
Abbildung 10:
Bevor die nächste LED eingeschaltet wird, sollte der Ausgangszustand von Abbildung 7 wieder hergestellt werden.
3x3 LED Matrix, LED 8 eingeschaltet
Abbildung 11:
Zum Einschalten einer beliebigen LED muss also zunächst der GPIO der entsprechenden Spalte auf HIGH-Signal und direkt anschließend der GPIO der entsprechenden Zeile auf LOW-Signal gesetzt werden. Hier sind das Spalte 2 (GPIO 2) und Zeile 3 (GPIO 6), womit LED Nummer 8 eingeschaltet ist.
Sechs GPIOs sind ausreichend, um 9 LEDs einzeln einzuschalten.
Schalten mehrerer LEDs einer Zeile
Abbildung 12:
Völlig unabhängig lassen sich die LEDs aber nicht schalten:
In den Abbildungen 2, 4 und 5 ist zu sehen, dass die LEDs einer Spalte entweder einzeln, in Zweiergruppen oder alle drei eingeschaltet werden können, wozu Spalte 1 auf HIGH-Signal und die jeweilige Zeile(n) auf LOW gesetzt werden müssen.
Ähnlich funktioniert das auch, wenn eine Zeile auf LOW geschaltet ist. Je nachdem, welche Spalte(n) nun auf HIGH-Signal sind, leuchten die entsprechenden LEDs in dieser Zeile. Hier ist das für die LEDs 8 und 9 der Fall.
Matrix mit 4 eingeschalteten LEDs
Abbildung 13:
Nicht möglich ist es allerdings, z.B. nur die beiden LEDs Nummer 3 und 8 einzuschalten:
Für LED Nummer 3 muss Zeile 1 (GPIO 4) auf LOW und Spalte 3 (GPIO 3) auf HIGH gesetzt werden. Für LED Nummer 8 muss Zeile 3 (GPIO 6) auf LOW und Spalte 2 (GPIO 2) auf HIGH gesetzt werden. Damit werden zwangsläufig auch die beiden LEDs 2 und 9 eingeschaltet.
Matrix aus 16 LEDs
Abbildung 14:
Die LED-Matrix kann nach belieben erweitert werden. 16 LEDs ergeben sich bei einer Matrix aus 4 Spalten und 4 Zeilen, es werden somit 8 GPIOs zur Ansteuerung benötigt. Für quadratische Matrizen geht es weiter mit 25 LEDs mit 10 GPIOs, 36 LEDs mit 12 GPIOs, 42 LEDs mit 14 LEDs und so weiter.
Matrix aus 12 LEDs
Abbildung 15:
Auch unsymmetrische Matrizen sind möglich wie hier bestehend aus 3 Zeilen und 4 Spalten, was 12 LEDs bei 7 GPIOs ergibt. Das Verhältnis aus LEDs zu GPIOs ist aber bei quadratischen Matrizen am günstigsten.

Common Row Anode Konfiguration

Matrix in Common Row Anode Konfiguration
Abbildung 16:
Die vorherigen Abbildungen haben die Matrizen in der Common Row Cathode Konfiguration gezeigt. Dabei sind die Kathoden der LEDs jeder Zeile direkt miteinander verbunden. In der hier zu sehenden Abbildung handelt es sich um die Common Row Anode Konfiguration, entsprechend sind die LEDs in jeder Zeile an ihrer Anodenseite verbunden. Um in dieser Anordnung eine LED zu adressieren, darf nur an der entsprechenden Zeile ein HIGH-Signal anliegen, während die übrigen Zeilen auf LOW-Signal gesetzt sind. Alle Spalten außer der Spalte der einzuschaltenden LED müssen auf HIGH-Signal gesetzt werden. Die Signale sind im Vergleich zur Common Row Cathode Konfiguration invertiert.

Gesamtstrom

Maximaler Spalten- und Zeilenstrom
Abbildung 17:
Beim Berechnen der Widerstände ist der Maximalstrom der GPIOs zu beachten! Für den Arduino Uno sind das z.B. 20mA pro GPIO. Nach dem Ohmschen Gesetz erhalten wir bei der Logikspannung von 5V:
R = U / I = 5V / 0.02A = 250Ω
Da auch an der LED eine Spannung in Höhe der Durchlassspannung abfällt, kann diese von der Logikspannung abgezogen werden. diesen Fall lassen wir aber aus Sicherheitsgründen außen vor.
Zu beachten ist allerdings, dass in der Matrix auch alle LEDs einer Zeile gleichzeitig eingeschaltet werden können, womit dann ein deutlich höherer Strom fließt! Die GPIOs einer Spalte sind über Reihenwiderstände mit den LEDs verbunden. Somit ist der Quellstrom (engl.: source current) pro Spalte auf jeden Fall kleiner als der Maximalwert. Die Zeilen sind jedoch direkt mit den LEDs verbunden. Sind alle LEDs einer Zeile gleichzeitig eingeschaltet, so addiert sich der Senkenstrom (engl.: sink current) zu einem Wert deutlich über dem Maximum! Um das zu verhindern müssen Die Widerstandswerte angepasst werden. Der Maximalstrom pro GPIO ist durch die Anzahl der Spalten zu teilen und man erhält für eine 3x3 Matrix:
R = N * U / I = 3 * 5V / 0.02A = 750Ω

Matrix mit Reihenwiderständen in Spalten und Zeilen
Abbildung 18:
Plan "B" besteht darin, auch die Zeilen über Vorwiderstände mit den LEDs zu verbinden. Dann genügt der niedrigere Widerstandswert der vorherigen Rechnung und dieser muss nicht angepasst werden, wenn die LED Matrix erweitert wird. Soll die maximale Helligkeit der LEDs ausgenutzt werden, so müssen die Signale der GPIOs über z.B. Transistoren verstärkt werden, wie in den folgenden Kapiteln zu lesen ist.
Matrix mit Reihenwiderständen in Spalten und Zeilen
Abbildung 19:
Im Video habe ich gezeigt, dass die LEDs einer Spalte um so heller leuchten, je weniger davon eingeschaltet sind, was daran liegt, dass weniger Strom durch eine einzelne LED fließt, je mehr davon parallel an einem Reihenwiderstand geschaltet sind:
Fällt zum Beispiel an 5V Logikspannung an einer LED eine Spannung von 2V unter der Verwendung eines Reihenwiderstandes von 500Ω ab, so ergeben sich 3V für den Spannungsabfall am Widerstand und mit Hilfe des Ohm'schen Gesetztes ein Strom durch beide Bauteile von I = U / R = 3V / 500Ω = 6mA. Durch die LED fließt der gleiche Strom, somit ergibt sich für den Widerstand der LED ein Wert von R = 2V / 0.006A = 333Ω.
Matrix mit Reihenwiderständen in Spalten und Zeilen
Abbildung 20:
Werden nun alle 3 LEDs der Spalte eingeschaltet, so sind nun 3 parallel geschaltete Widerstände (=LEDs) in Reihe zu dem 500Ω Widerstand geschaltet. Der Widerstand der parallel geschalteten LEDs ergibt sich zu:
RLED Total = 1 / (1/333Ω + 1/333Ω + 1/333Ω) = 27.5Ω
Der an 5V durch die Schaltung fließende Strom beträgt nun:
I = 5V / (500Ω + 27.5Ω) = 9.5mA
Da sich der Strom auf drei LEDs gleichmäßig aufteilt, fließt durch eine einzelne LED nun nur noch ein Strom von ILED = 3.2mA. Die einzelnen LEDs scheinen somit weniger hell.

Multiplexing

Matrix in multiplex Ansteuerung
Abbildung 21:
Man kann die Trägheit des menschlichen Auges ausnutzen, um den Eindruck zu erwecken, jede beliebige Kombination von LEDs schalten zu können. Wie gezeigt, können die LEDs jeweils einer Zeile durchaus in beliebiger Kombination angesteuert werden. Der Trick besteht nun darin, die Zeilen mit sehr hoher Frequenz von oben nach unten anzusteuern und dabei jeweils nur die gewünschten LEDs einzuschalten. Die jeweils aktive Zeile ist dabei - ausgehend von einer Common Row Cathode Konfiguration - auf LOW-Signal geschaltet, die Spalten der zu aktivierenden LEDs befinden sich auf HIGH-Signal. Um die gewünschte Täuschung aufzubauen, muss die Matrix mit einer Frequenz von mehr als etwa 25Hz geschaltet werden. Bei einer 3x3 LED Matrix bedeutet das, dass eine einzelne Zeile für nur etwa:
1s / ( 25 * 3 ) ≈ 13ms
eingeschaltet ist, bevor die nächste Zeile angesteuert wird.
Auf dem Foto sieht es aus, als ob jede zweite LED ständig eingeschaltet ist, was ohne Multiplexing nicht möglich wäre. In Wahrheit wird jede Zeile nur für etwa 1ms aktiviert.

Beispielschaltung

Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 22:
Beispielschaltung 6x6 LED Matrix mit verschiedenfarbigen LEDs:
12x 5mm LED Gelb
12x 5mm LED Grün
12x 5mm LED Rot
12 Widerstände zu je 270Ω
Die LED Matrix habe ich hier als Drahtgitter verlötet, um den Schaltplan 1 zu 1 umzusetzen, was sehr anschaulich ist. Dabei ist unbedingt darauf zu achten, dass sich keine blanken Drähte an den Gitterpunkten berühren! Ich habe dazu kleine Stücke der isolierenden Umhüllung aufgeschoben, was recht fummelig ist. Einfacher ist die Schaltung auf einer Lochrasterplatine zu verlöten.

Professionelle Platinen

In dem zweiten Video (siehe oben auf dieser Seite) stelle ich meine von NextPCB produzierten Boards im Bewegtbild vor. Hier nun ein paar zusästzliche Infos:

Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 23:
Platinen von NextPCB mit je 64 LEDs, bestückt mit gelben, roten, grünen, blauen und weißen LEDs. Diese große Version einer 8x8 Matrix verwendet einen ATmega328P zur Ansteuerung der LEDs.
Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 24:
Integriert ist eine Infrarot-Schnittstelle, bestehend aus einem TSOP4838 Empfängermodul und einer Infrarot LED.
Als akustische Schnittstelle können ein Arduino-Mikrofonmodul und ein passiver Buzzer auf die entsprechenden Buchsenreihen aufgesteckt werden. Dabei ist darauf zu achten, dass diese Module korrekt aufgesteckt werden, denn es gibt keinen Verpolungsschutz!
Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 25:
Schaltplan der großen LED Matrix, erstellt mit KiCad.
Microcontroller: ATmega328P-PU
R1-R8: 1kΩ
R9: 100Ω
R10: 390Ω
Crystal: 16MHz
C1, C2: 20pF
C3: 4.7μF
IR-Receiver: TSOP4843

Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 26:
Das zweite Board ist mit 3mm LEDs bestückt und kann auf einen Arduino UNO aufgesteckt werden. Auch hier ist eine Infrarot-Schnittstelle integriert und es können ein Mikrofon-Modul und ein passiver Buzzer aufgesteckt werden.
Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 27:
Schaltplan Arduino Shield, erstellt mit KiCad.
Microcontroller: ATmega328P-PU
R1-R8: 1kΩ
R9: 100Ω
R10: 390Ω
Crystal: 16MHz
C1, C2: 20pF
C3: 4.7μF
IR-Receiver: TSOP4843

Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 28:
Die LED Uhr besitzt keine Schnittstellen - die Einstellung der Uhrzeit erfolgt über 3 Taster auf der Vorderseite. Die Uhrzeit wird ähnlich einer analogen Uhr angezeigt:
Die LED für die aktuelle Stunde leuchtet durchgehend, die für die Minute blinkt asymmetrisch im Sekundentakt und der Sekundenzeiger ist wohl ohne weitere Erklärung auszumachen. Der LED-Kreis ist in vier Farben unterteilt und über den Buzzer wird zu jeder Viertelstunde die Melodie einer bekannten Londoner Turmuhr ausgegeben.
Beispielschaltung Matrix in Common Row Anode Konfiguration
Abbildung 29:
Schaltplan erstellt mit KiCad. Auch die LED Uhr basiert auf einer LED Matrix.
Microcontroller: ATmega328P-PU
R1-R8: 1kΩ
Crystal: 16MHz
C1, C2: 20pF
Transistor: BS170

Downloads

In dem Download-Paket (2.2MB) findet ihr die KiCad-Dateien, mit denen ihr meine Platinen nach Belieben verändern könnt und auch die originalen *.zip Dateien, mit denen ihr die Platinen bei NextPCB bestellen könnt. Ebenfalls inklusive sind einige Arduino Programmbeispiele, mit denen ihr eigene Experimente starten könnt.

Bezugsquellen für Bauteile

Durch den Kauf von Bauteilen über die von mir angegebenen Affiliate-Partnerlinks in der Tabelle (oder in den Bannern auf meinen Seiten) unterstützt ihr meine Projekte - vielen Dank!
Die Links anzuklicken bedeutet allerdings keinen Kaufzwang - völlig ungezwungenes Stöbern ist möglich ;-)

Meine frei zugängliche Bildungsplattform ohne einzukaufen mit Hilfe einer Spende oder als Patreon zu unterstützen geht natürlich auch. Vielen Dank an alle, die mir bereits einen Obolus haben zukommen lassen!

Wenn ihr weitere Bauteile kennt, die sich für die Beispiele auf dieser Seite eignen, hinterlasst bitte einen Kommentar auf dieser Seite.

Bauteil Online Shops Bemerkung
Arduino UNO Arduino UNO auf eBay

Adruino UNO auf Amazon
Mikrocontroller sind für Echtzeitanwendungen wie das Multiplexing bestens geeignet.
LEDs LED Sortimente auf eBay

LED Sortimente auf Amazon
LEDs mit Durchlassströmen um die 20mA sind günstig zu bekommen, sogenannte Low Current LEDs sind teurer, bei kleinen Strömen aber heller.
Widerstände Widerstände auf eBay

Widerstände auf Amazon
Kohleschichtwiderstände mit 5% Toleranz sind günstig und für Experimente rund um LEDs gut geeignet.
Lochrasterplatine Lochrasterplatinen auf eBay

Lochrasterplatinen auf Amazon
Europlatinen haben ein Lochrastermaß von 2.54mm.
Professionelle PCBs Zum Angebot meines Sponsors auf NextPCB.com Die von mir erstellten Vorlagen dürfen nach belieben kopiert, verändert und anschließend produziert werden.




<<< LEDs schalten         Einfache Kommunikation >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Gadgets    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO