Charlieplexing este o tehnică de control al multor LED-uri folosind câțiva pini I / O. Charlieplexarea este la fel ca multiplexarea, dar folosește logica tri-stare (intrare mare, scăzută) pentru a reduce dramatic numărul de pini și pentru a câștiga eficiență față de multiplexare. Tehnica Charlieplexing poartă numele inventatorului său, Charlie Allen, care a inventat tehnica în 1995. Am folosit anterior tehnica de multiplexare în Arduino pentru a interfața afișajul cu 4 cifre în 7 segmente și conducerea matricei LED 8x8.
Charlieplexing vă permite să controlați N * (N - 1) LED-uri, unde N este numărul pinilor. De exemplu, puteți controla 12 LED-uri folosind 4 pini Arduino 4 * (4-1) = 12. LED-urile sunt diode, iar în diode curentul circulă într-o singură direcție. Deci, în Charlieplexing, conectăm două LED-uri în paralel între ele, dar cu polaritate opusă, astfel încât să se aprindă un singur LED la un moment dat. Când vine vorba de Arduino sau alte plăci de microcontroler, nu aveți niciodată suficiente pini de intrare / ieșire. Dacă lucrați la un proiect în care trebuie să interfațați afișajul LCD, o grămadă de LED-uri și niște senzori, atunci nu mai aveți pini. În această situație, puteți încărca LED-uri flexibile pentru a reduce numărul de pini.
În acest tutorial, vom folosi tehnica Charlieplexing pentru a controla cele 12 LED-uri folosind 4 pini Arduino.
Componente necesare
- Arduino UNO
- LED (12)
- 4 rezistor (330 ohmi)
- Sârme jumper
- Breadboard
Diagrama circuitului
Practic, în această diagramă de circuit, 12 LED-uri sunt conectate cu 4 pini Arduino prin rezistențe. Fiecare pin al Arduino este conectat cu trei LED-uri. Există șase grupuri de LED-uri și, în fiecare grup, sunt conectate 2 LED-uri și ambele LED-uri sunt paralele între ele, dar cu polaritate opusă, astfel încât să se aprindă un singur LED la un moment dat. Deci, conform schemei de circuit pentru a porni ledul 1, trebuie să existe un semnal HIGH pe pinul A și un semnal LOW pe pinul B, iar pinii C și D trebuie să fie deconectați. Aceeași procedură va fi urmată și pentru celelalte LED-uri. Tabelul complet al setărilor pinului pentru fiecare LED sunt prezentate mai jos:
LED | Pinul 8 | Pinul 9 | Pinul 10 | Pinul 11 |
1 | ÎNALT | SCĂZUT | INTRARE | INTRARE |
2 | SCĂZUT | ÎNALT | INTRARE | INTRARE |
3 | INTRARE | ÎNALT | SCĂZUT | INTRARE |
4 | INTRARE | SCĂZUT | ÎNALT | INTRARE |
5 | INTRARE | INTRARE | ÎNALT | SCĂZUT |
6 | INTRARE | INTRARE | SCĂZUT | ÎNALT |
7 | ÎNALT | INTRARE | SCĂZUT | INTRARE |
8 | SCĂZUT | INTRARE | ÎNALT | INTRARE |
9 | INTRARE | ÎNALT | INTRARE | SCĂZUT |
10 | INTRARE | SCĂZUT | INTRARE | ÎNALT |
11 | ÎNALT | INTRARE | INTRARE | SCĂZUT |
12 | SCĂZUT | INTRARE | INTRARE | ÎNALT |
După conexiuni hardware-ul meu arată ca imaginea de mai jos. După cum puteți vedea din imagine, există șase grupuri de LED-uri și, în fiecare grup, 2 LED-uri sunt conectate unul față de celălalt. Modulul Arduino UNO este alimentat de un port USB.
Explicarea codului
Codul complet cu un videoclip de lucru este dat la sfârșitul acestui tutorial, aici explicăm programul complet pentru a înțelege funcționarea proiectului.
La pornirea codului Arduino definiți tot pinul la care sunt conectate LED-urile. După aceea, definiți numărul total de LED-uri și starea led-urilor.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Acum creați o matrice pentru pornirea și oprirea LED-urilor într-o secvență, puteți schimba secvența modificând starea pinului și configurația pinului. Conform acestei matrice, LED1 va fi pornit mai întâi apoi LED2 și așa mai departe.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{OUTPUT, OUTPUT, INPUT, INPUT}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Acum, în interiorul buclei de gol , programul va executa matricea LED_COUNT pentru a porni și opri LED-urile în secvența dată.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); întârziere (1000 / LED_Num); }
Acum conectați Arduino la laptop și alegeți placa și portul corect, apoi faceți clic pe butonul Încărcare. După încărcarea codului, LED-urile dvs. ar trebui să înceapă să clipească.
Deci, așa se poate folosi tehnica Charlieplexing pentru a controla multe LED-uri folosind mai puțini pini Arduino. Puteți utiliza această metodă pentru a controla un număr mai mare de LED-uri. De exemplu, dacă doriți să controlați 20 de LED-uri, editați doar matricea și adăugați condițiile pentru LED-urile rămase.
Găsiți codul complet și videoclipul de lucru de mai jos.