Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Download Reaktionen Spiele Gadgets Kontakt <<< LEDs schalten Einfache Kommunikation >>> LED-MatrixDas Video zur Funktionsweise einer LED-MatrixDas 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 ÜbersichtIn diesem Kapitel ist nachzulesen:
FunktionsweiseAbbildung 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. 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. 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. 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. 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. 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. 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. 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. 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). Abbildung 10: Bevor die nächste LED eingeschaltet wird, sollte der Ausgangszustand von Abbildung 7 wieder hergestellt werden. 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. 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. 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. 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. 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 KonfigurationAbbildung 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. GesamtstromAbbildung 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Ω 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. 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 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 MultiplexingAbbildung 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. BeispielschaltungAbbildung 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 PlatinenIn 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: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. 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! 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 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. 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 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. 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 DownloadsIn 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 BauteileDurch 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.
<<< LEDs schalten Einfache Kommunikation >>> Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Archiv Download Reaktionen Spiele Verweise Gadgets Kontakt Impressum |