Charlieplexing er en teknikk for å kontrollere mange lysdioder ved hjelp av noen få I / O-pinner. Charlieplexing er det samme som multipleksing, men det bruker tri-state-logikken (høy, lav inngang) for å redusere antall pinner dramatisk og for å oppnå effektivitet over multiplexing. Charlieplexing-teknikken er oppkalt etter oppfinneren, Charlie Allen, som oppfant teknikken i 1995. Vi brukte tidligere multipleksingsteknikk i Arduino for å grensesnitt 4-sifret 7-segment display og kjøre 8x8 LED-matrise.
Charlieplexing lar deg kontrollere N * (N - 1) lysdioder, der N er antall pinner. For eksempel kan du kontrollere 12 lysdioder ved hjelp av 4 Arduino-pinner 4 * (4-1) = 12. Lysdioder er dioder, og i dioder strømmer strømmen bare i én retning. Så i Charlieplexing kobler vi to lysdioder parallelt med hverandre, men med motsatt polaritet slik at bare en LED tennes om gangen. Når det gjelder Arduino eller andre mikrokontrollerkort, har du aldri nok inngangs- / utgangspinner. Hvis du jobber med et prosjekt der du trenger å grensesnitt LCD-skjerm, en haug med lysdioder og noen sensorer, er du allerede tom for pins. I den situasjonen kan du lade lysdioder for å redusere antall pinner.
I denne opplæringen skal vi bruke Charlieplexing-teknikken til å kontrollere de 12 lysdiodene ved hjelp av 4 Arduino-pinner.
Komponenter kreves
- Arduino UNO
- LED (12)
- 4 motstand (330 ohm)
- Jumper Wires
- Brettbrett
Kretsdiagram
I utgangspunktet, i dette kretsskjemaet, er 12 lysdioder koblet til med 4 Arduino-pinner gjennom motstander. Hver pin av Arduino er koblet til med tre lysdioder. Det er seks grupper av lysdioder, og i hver gruppe er to lysdioder koblet til, og begge lysdiodene er parallelle med hverandre, men med motsatt polaritet, slik at bare en lysdiode tennes om gangen. Så ifølge kretsskjemaet for å slå på led 1, må det være et HØYT signal på pin A og et LAV signal på pin B, og pin C og D må kobles fra. Den samme prosedyren vil bli fulgt for de andre lysdiodene. Den fulle tabellen med pin-innstillinger for hver LED er gitt nedenfor:
LED | Pin 8 | Pin 9 | Pin 10 | Pin 11 |
1 | HØY | LAV | INNGANG | INNGANG |
2 | LAV | HØY | INNGANG | INNGANG |
3 | INNGANG | HØY | LAV | INNGANG |
4 | INNGANG | LAV | HØY | INNGANG |
5 | INNGANG | INNGANG | HØY | LAV |
6 | INNGANG | INNGANG | LAV | HØY |
7 | HØY | INNGANG | LAV | INNGANG |
8 | LAV | INNGANG | HØY | INNGANG |
9 | INNGANG | HØY | INNGANG | LAV |
10 | INNGANG | LAV | INNGANG | HØY |
11 | HØY | INNGANG | INNGANG | LAV |
12 | LAV | INNGANG | INNGANG | HØY |
Etter tilkoblingene ser maskinvaren ut som bildet nedenfor. Som du kan se på bildet, er det seks grupper av lysdioder, og i hver gruppe er 2 lysdioder koblet motsatt hverandre. Arduino UNO-modulen drives av USB-port.
Kode Forklaring
Komplett kode med en arbeidsvideo er gitt på slutten av denne opplæringen. Her forklarer vi hele programmet for å forstå hvordan prosjektet fungerer.
I begynnelsen av Arduino-koden definerer du alle pinnene som lysdioder er koblet til. Deretter definerer du totalt antall lysdioder og ledetilstand.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Lag nå en matrise for å slå på og av lysdioder i en sekvens, du kan endre sekvensen ved å endre pin-status og pin-konfigurasjon. I henhold til denne matrisen vil LED1 bli slått på først deretter LED2 og så videre.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{OUTPUT, OUTPUT, INPUT, INPUT}, {HIGH, LOW, LOW, LOW}}, {{OUTPUT, OUTPUT, INPUT, INPUT}, {LOW, HIGH, LOW, LAV}}, {{INNGANG, UTGANG, UTGANG, INNGANG}, {LAV, HØY, LAV, LAV}}, ………………………………. ……………………………..
Nå inne i tomrommet sløyfe , vil programmet utføre den LED_COUNT matrise for å slå på og av lysdioder i en gitt rekkefølge.
ugyldig sløyfe () { for (int l = 0; l <LED_Num; l ++) { lightOn (l); forsinkelse (1000 / LED_Num); }
Koble Arduino til den bærbare datamaskinen, velg kortet og porten riktig, og klikk deretter på Last opp-knappen. Etter at du har lastet opp koden, skal LED-lampene dine begynne å blinke.
Så dette er hvordan Charlieplexing-teknikken kan brukes til å kontrollere mange lysdioder ved hjelp av færre Arduino-pinner. Du kan bruke denne metoden til å kontrollere flere antall lysdioder. Hvis du for eksempel vil kontrollere 20 lysdioder, er det bare å redigere matrisen og legge til betingelsene for gjenværende lysdioder.
Finn den fullstendige koden og arbeidsvideoen nedenfor.