Charlieplexing er en teknik til styring af mange lysdioder ved hjælp af et par I / O-ben. Charlieplexing er det samme som multiplexing, men det bruger tri-state-logikken (høj, lav input) til at reducere antallet af pins dramatisk og for at opnå effektivitet i forhold til multiplexing. Charlieplexing-teknikken er opkaldt efter opfinderen, Charlie Allen, der opfandt teknikken i 1995. Vi har tidligere brugt multiplexingsteknik i Arduino til at interface 4-cifret 7-segment display og køre 8x8 LED matrix.
Charlieplexing giver dig mulighed for at kontrollere N * (N - 1) LED'er, hvor N er antallet af ben. For eksempel kan du styre 12 lysdioder ved hjælp af 4 Arduino-ben 4 * (4-1) = 12. LED'er er dioder, og i dioder flyder strømmen kun i en retning. Så i Charlieplexing forbinder vi to lysdioder parallelt med hinanden, men med modsat polaritet, så kun en LED tændes ad gangen. Når det kommer til Arduino eller andre mikrocontroller-kort, har du aldrig nok input / output-pins. Hvis du arbejder på et projekt, hvor du skal interface LCD-skærm, en flok lysdioder og nogle sensorer, så er du allerede løbet tør for ben. I den situation kan du charlieplex LED'er for at reducere antallet af ben.
I denne vejledning skal vi bruge Charlieplexing-teknikken til at styre de 12 lysdioder ved hjælp af 4 Arduino-ben.
Komponenter, der kræves
- Arduino UNO
- LED (12)
- 4 modstand (330 ohm)
- Jumper Wires
- Brødbræt
Kredsløbsdiagram
Dybest set er i dette kredsløbsdiagram 12 lysdioder forbundet med 4 Arduino-ben gennem modstande. Hver pin af Arduino er forbundet med tre lysdioder. Der er seks grupper af lysdioder, og i hver gruppe er der tilsluttet 2 lysdioder, og begge lysdioder er parallelle med hinanden, men med modsat polaritet, så kun en lysdiode tændes ad gangen. Så ifølge kredsløbsdiagrammet for at tænde led 1 skal der være et HIGH signal på pin A og et LOW signal på pin B, og pin C og D skal frakobles. Den samme procedure følges for de andre lysdioder. Den fulde tabel med pin-indstillinger for hver LED er angivet nedenfor:
LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | HØJ | LAV | INDGANG | INDGANG |
2 | LAV | HØJ | INDGANG | INDGANG |
3 | INDGANG | HØJ | LAV | INDGANG |
4 | INDGANG | LAV | HØJ | INDGANG |
5 | INDGANG | INDGANG | HØJ | LAV |
6 | INDGANG | INDGANG | LAV | HØJ |
7 | HØJ | INDGANG | LAV | INDGANG |
8 | LAV | INDGANG | HØJ | INDGANG |
9 | INDGANG | HØJ | INDGANG | LAV |
10 | INDGANG | LAV | INDGANG | HØJ |
11 | HØJ | INDGANG | INDGANG | LAV |
12 | LAV | INDGANG | INDGANG | HØJ |
Efter forbindelserne ligner min hardware billedet nedenfor. Som du kan se fra billedet er der seks grupper af lysdioder, og i hver gruppe er 2 lysdioder forbundet modsat hinanden. Arduino UNO-modulet drives af USB-port.
Kode Forklaring
Komplet kode med en fungerende video er givet i slutningen af denne tutorial, her forklarer vi det komplette program for at forstå projektets funktion.
I starten af Arduino-koden defineres al den pin, hvorpå LED'er er tilsluttet. Derefter defineres det samlede antal lysdioder og ledet tilstand.
#definer A 8 #definer B 9 #definer C 10 #definer D 11 #definer PIN_CONFIG 0 #definer PIN_STATE 1 #definer LED_Num 12
Opret nu en matrix til at tænde og slukke for lysdioder i en sekvens, du kan ændre sekvensen ved at ændre pin-tilstand og pin-konfiguration. I henhold til denne matrix tændes LED1 først, derefter LED2 osv.
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}}, …………………………………. ………………………………..
Nu inde i tomrum løkke , vil programmet udføre LED_COUNT matrix for at tænde og slukke lysdioder i den givne rækkefølge.
ugyldig sløjfe () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); forsinkelse (1000 / LED_Num); }
Tilslut nu Arduino med den bærbare computer, og vælg kortet og porten korrekt, og klik derefter på Upload-knappen. Efter uploaden af koden skal dine lysdioder begynde at blinke.
Så dette er, hvordan Charlieplexing-teknikken kan bruges til at styre mange lysdioder ved hjælp af færre Arduino-ben. Du kan bruge denne metode til at styre flere antal lysdioder. Hvis du f.eks. Vil styre 20 lysdioder, skal du bare redigere matrixen og tilføje betingelserne for de resterende lysdioder.
Find den komplette kode og arbejdsvideo nedenfor.