Charlieplexing ist eine Technik zur Steuerung vieler LEDs mit wenigen E / A-Pins. Charlieplexing ist dasselbe wie Multiplexing, verwendet jedoch die Tri-State-Logik (High, Low Input), um die Anzahl der Pins drastisch zu reduzieren und die Effizienz gegenüber Multiplexing zu steigern. Die Charlieplexing-Technik ist nach ihrem Erfinder Charlie Allen benannt, der die Technik 1995 erfand. Zuvor verwendeten wir in Arduino die Multiplexing-Technik, um eine 4-stellige 7-Segment-Anzeige zu verbinden und eine 8x8-LED-Matrix anzusteuern.
Mit Charlieplexing können Sie N * (N - 1) LEDs steuern, wobei N die Anzahl der Pins ist. Sie können beispielsweise 12 LEDs mit 4 Arduino-Pins 4 * (4-1) = 12 steuern. LEDs sind Dioden, und in Dioden fließt Strom nur in eine Richtung. Beim Charlieplexing verbinden wir also zwei LEDs parallel zueinander, jedoch mit entgegengesetzter Polarität, sodass jeweils nur eine LED leuchtet. Wenn es um Arduino oder andere Mikrocontroller-Karten geht, haben Sie nie genug Eingangs- / Ausgangspins. Wenn Sie an einem Projekt arbeiten, in dem Sie eine LCD-Anzeige, eine Reihe von LEDs und einige Sensoren anschließen müssen, haben Sie bereits keine Pins mehr. In dieser Situation können Sie Charlieplex-LEDs verwenden, um die Anzahl der Pins zu verringern.
In diesem Tutorial verwenden wir die Charlieplexing-Technik, um die 12 LEDs mit 4 Arduino-Pins zu steuern.
Erforderliche Komponenten
- Arduino UNO
- LED (12)
- 4 Widerstand (330 Ohm)
- Überbrückungsdrähte
- Steckbrett
Schaltplan
Grundsätzlich sind in diesem Schaltplan 12 LEDs über Widerstände mit 4 Arduino-Pins verbunden. Jeder Pin von Arduino ist mit drei LEDs verbunden. Es gibt sechs Gruppen von LEDs, und in jeder Gruppe sind zwei LEDs angeschlossen, und beide LEDs sind parallel zueinander, jedoch mit entgegengesetzter Polarität, sodass jeweils nur eine LED leuchtet. Gemäß dem Schaltplan zum Einschalten von LED 1 muss an Pin A ein HIGH-Signal und an Pin B ein LOW-Signal anliegen, und Pin C und D müssen getrennt werden. Das gleiche Verfahren wird für die anderen LEDs angewendet. Die vollständige Tabelle der Pin-Einstellungen für jede LED finden Sie unten:
LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | HOCH | NIEDRIG | EINGANG | EINGANG |
2 | NIEDRIG | HOCH | EINGANG | EINGANG |
3 | EINGANG | HOCH | NIEDRIG | EINGANG |
4 | EINGANG | NIEDRIG | HOCH | EINGANG |
5 | EINGANG | EINGANG | HOCH | NIEDRIG |
6 | EINGANG | EINGANG | NIEDRIG | HOCH |
7 | HOCH | EINGANG | NIEDRIG | EINGANG |
8 | NIEDRIG | EINGANG | HOCH | EINGANG |
9 | EINGANG | HOCH | EINGANG | NIEDRIG |
10 | EINGANG | NIEDRIG | EINGANG | HOCH |
11 | HOCH | EINGANG | EINGANG | NIEDRIG |
12 | NIEDRIG | EINGANG | EINGANG | HOCH |
Nach den Verbindungen sieht meine Hardware wie im Bild unten aus. Wie Sie auf dem Bild sehen können, gibt es sechs Gruppen von LEDs und in jeder Gruppe sind 2 LEDs gegenüberliegend verbunden. Das Arduino UNO-Modul wird über einen USB-Anschluss mit Strom versorgt.
Code Erklärung
Der vollständige Code mit einem Arbeitsvideo finden Sie am Ende dieses Tutorials. Hier erklären wir das vollständige Programm, um die Funktionsweise des Projekts zu verstehen.
Definieren Sie zu Beginn des Arduino-Codes alle Pins, an denen LEDs angeschlossen sind. Definieren Sie danach die Gesamtzahl der LEDs und den LED-Status.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Erstellen Sie nun eine Matrix zum Ein- und Ausschalten von LEDs in einer Sequenz. Sie können die Sequenz ändern, indem Sie den Pin-Status und die Pin-Konfiguration ändern. Gemäß dieser Matrix wird zuerst LED1 eingeschaltet, dann LED2 und so weiter.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{AUSGANG, AUSGANG, EINGANG, EINGANG}, {HOCH, NIEDRIG, NIEDRIG, NIEDRIG }}, {{AUSGANG, AUSGANG, EINGANG, EINGANG }, {NIEDRIG, HOCH, NIEDRIG, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Innerhalb der Void-Schleife führt das Programm nun die LED_COUNT-Matrix aus, um die LEDs in der angegebenen Reihenfolge ein- und auszuschalten.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); Verzögerung (1000 / LED_Num); }}
Verbinden Sie nun das Arduino mit dem Laptop und wählen Sie die Karte und den Port richtig aus. Klicken Sie dann auf die Schaltfläche Hochladen. Nach dem Hochladen des Codes sollten Ihre LEDs anfangen zu blinken.
Auf diese Weise kann die Charlieplexing-Technik verwendet werden, um viele LEDs mit weniger Arduino-Pins zu steuern. Mit dieser Methode können Sie mehr LEDs steuern. Wenn Sie beispielsweise 20 LEDs steuern möchten, bearbeiten Sie einfach die Matrix und fügen Sie die Bedingungen für die verbleibenden LEDs hinzu.
Den vollständigen Code und das Arbeitsvideo finden Sie unten.