Home

Charlieplexing


Charlieplexen is een techniek waarbij gebruik gemaakt word van de 'tri-state' van een pin op bijvoorbeeld een microcontroller. Dat wil zeggen: de pin kan hoog (1) en laag (0) zijn, maar ook Z (hoogimpedant).
Hierdoor is het mogelijk om met n digitale pinnen n*(n-1) LEDs aan te sturen. (bijv. 5 i/o's geven dan dus de mogelijkheid tot het aansturen van maar liefst 20 LEDs!)
3 van de i/o's is Z, één is hoog en één is laag, resulteerd in 1 brandende LED. Door het wisselen van deze state's over de beschikbare i/o's lichten verschillende LEDs op.

Het schema:

snapshot van mini-LEDroulette
Per 2 i/o's zijn er telkens 2 LEDs
anti-parallel geschakeld.
Ik wilde het concept charlieplexen eens uitproberen, en heb daarom een mini-LEDroulette gemaakt. Ik heb gebruik gemaakt van een ATtiny13, een 8 pins microcontrollertje van atmel, welke in totaal 6 i/o's bevat waarvan ik er 5 gebruik.
Met 6 i/o's zou ik anderhalf keer zoveel LEDs nodig hebben! Ook het ontwerpen van het printje zou dan heel wat meer kopzorgen opleveren.
Dat was nu al niet heel gemakkelijk. Daar is dan ook gelijk het nadeel van deze techniek ten opzichte van het veel meer bekende multieplexen, wat veel makkelijker te routen is. Helemaal op een dubbelzijdige print is dat een eitje!
Met 5 beschikbare i/o's zou ik met multieplexen overigens slechts 6 led's aan kunnen sturen (2 groepen van 3, of natuurlijk 3 van 2).
Wel kunnen middels multieplexen naast het aansturen van lampjes ook knopjes uitgelezen worden, zie de alom bekende 3X4 of 4X4 matrix toetsenbordjes. Met charlieplexen is dit niet mogelijk.

Na het ontwerpen, maken en solderen van de printplaat kon ik beginnen met programmeren. Ik heb het programma geschreven in assembler, puur voor de gein.
Na inladen van het programma stuitte ik op een vrij grappig probleem, naast de LED waarvan de bedoeling was dat deze oplichtte, begonnen er nog meer LED's in de keten te branden...
Dat resulteerde in een erg 'spacy' effect. De reden hiervoor bleek de programmer te zijn, het stukje hardware waarmee de microcontroller geprogrammeerd word. Vanwege de grootte van de microcontroller worden de pinnen die gebruikt worden voor het charlieplexen ook gebruikt om het beestje te programmeren. De Z state's werden soms na het programmeren gedefinieerd naar 0 of 1 door de programmer. En dat was nou precies niet de bedoeling!
Na het loshalen van de programmeer kabel werkte het printje dan ook vlekkeloos.

Al met al een leuk projectje, en een geinig principe om eens uit te proberen. Wie weet waar het later goed voor is! Natuurlijk is een LED-roulette en tikkeltje doelloos, maar bedenk eens hoeveel 7 segmentsdisplay's met maar heel weinig i/o's aangestuurt kunnen worden!

3X4 Keypad