Charlieplexing je tehnika krmiljenja številnih LED z nekaj I / O zatiči. Charlieplexing je enako kot multipleksiranje, vendar uporablja tridržavno logiko (visok, nizek vhod), da dramatično zmanjša število nožic in poveča učinkovitost pri multipleksiranju. Tehnika Charlieplexing je dobila ime po izumitelju Charlieju Allenu, ki jo je izumil leta 1995. Pred tem smo v Arduinu uporabljali tehniko multipleksiranja za povezovanje 4-mestnega 7-segmentnega zaslona in vožnje 8x8 LED matrike.
Charlieplexing vam omogoča nadzor N * (N - 1) LED, kjer je N število nožic. Na primer, lahko upravljate 12 LED z uporabo 4 zatičev Arduino 4 * (4-1) = 12. LED so diode, v diodah pa tok teče samo v eno smer. Tako v Charlieplexingu povežemo dve LED vzporedno med seboj, vendar z nasprotno polarnostjo, tako da se naenkrat vklopi le ena LED. Ko gre za Arduino ali druge plošče mikrokrmilnika, vam nikoli ni dovolj vhodno / izhodnih zatičev. Če se ukvarjate s projektom, pri katerem morate povezati LCD zaslon, kup LED in nekaj senzorjev, potem ste že ostali brez zatičev. V tem primeru lahko LED-diode charlieplex zmanjšate število nožic.
V tej vadnici bomo uporabili tehniko Charlieplexing za nadzor 12 LED z uporabo 4 Arduino zatičev.
Potrebne komponente
- Arduino UNO
- LED (12)
- 4 upor (330 ohmov)
- Jumper žice
- Breadboard
Shema vezja
V bistvu je v tem vezju 12 LED diod prek uporov povezanih s 4 zatiči Arduino. Vsak pin Arduina je povezan s tremi LED. Obstaja šest skupin LED, v vsaki skupini pa sta povezani 2 LED, obe LED pa sta vzporedni med seboj, vendar z nasprotno polarnostjo, tako da se naenkrat vklopi le ena LED. Torej, v skladu s shemo vezja, da vklopite led 1, mora biti na vtiču A visok signal in nizki signal na zatiču B, pin C in D pa je treba odklopiti. Enak postopek se bo upošteval pri ostalih LED. Celotna tabela nastavitev nožic za vsako LED je spodaj:
LED | Zatič 8 | Zatič 9 | Zatič 10 | Zatič 11 |
1. | VISOKO | NIZKO | VHOD | VHOD |
2. | NIZKO | VISOKO | VHOD | VHOD |
3. | VHOD | VISOKO | NIZKO | VHOD |
4. | VHOD | NIZKO | VISOKO | VHOD |
5. | VHOD | VHOD | VISOKO | NIZKO |
6. | VHOD | VHOD | NIZKO | VISOKO |
7. | VISOKO | VHOD | NIZKO | VHOD |
8. | NIZKO | VHOD | VISOKO | VHOD |
9. | VHOD | VISOKO | VHOD | NIZKO |
10. | VHOD | NIZKO | VHOD | VISOKO |
11. | VISOKO | VHOD | VHOD | NIZKO |
12. | NIZKO | VHOD | VHOD | VISOKO |
Po povezavah je moja strojna oprema videti kot na spodnji sliki. Kot lahko vidite na sliki, obstaja šest skupin LED in v vsaki skupini sta 2 LED povezani drug proti drugemu. Modul Arduino UNO napaja vrata USB.
Razlaga kode
Popolna koda z delujočim videoposnetkom je podana na koncu te vadnice, tukaj razlagamo celoten program za razumevanje delovanja projekta.
Na začetku kode Arduino določite vse nožice, na katere so priključene LED. Po tem določite skupno število LED in stanje led.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Zdaj ustvarite matriko za vklop in izklop LED v zaporedju, lahko spremenite zaporedje s spreminjanjem stanja in konfiguracije nožic. V skladu s to matrico se bo najprej vklopil LED1, nato LED2 in tako naprej.
int matrica = { // PIN_CONFIG PIN_STATE // ABCDABCD {{IZHOD, IZHOD, VHOD, VHOD}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ……………………………. ……………………………..
Zdaj znotraj void zanke bo program izvedel matriko LED_COUNT za vklop in izklop LED v danem zaporedju.
void loop () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); zamuda (1000 / LED_Num); }
Zdaj povežite Arduino s prenosnikom, pravilno izberite ploščo in vrata ter kliknite gumb Naloži. Po nalaganju kode bi morale lučke začeti utripati.
Tako lahko s tehniko Charlieplexing nadzorujemo veliko LED z manj Arduino zatiči. To metodo lahko uporabite za nadzor večjega števila LED. Če želite na primer nadzorovati 20 LED, samo uredite matriko in dodajte pogoje za preostale LED.
Spodaj poiščite celotno kodo in delovni video.