Stap 1: Theorie van de operatie
Ervan uitgaande dat een goed begrip van deze achtergrond, is hier het schema met behulp van de pinout van de Radio Shack gemeenschappelijke kathode SSD deel 276-0075. Zorgvuldig observeren hoe de twaalf SSD LED verbindingen (elke acht anoden en de vier gemeenschappelijke kathoden) zijn verbonden met de lijnen van negen selecteren (Sel). Bijvoorbeeld, er rekening mee dat de gemeenschappelijke kathode van SSD0 (de "ones" positie van de 4-cijferig display) en de anoden van segment 'a' van de andere drie SSDs delen selecteren lijn Sel0.
Wat staten hebben de Sel lijnen aan het veroorzaken van het cijfer '1' worden weergegeven op gewoon SSD0? Enige segmenten "b" en "c" zijn moet worden verlicht, zodat Sel2 en Sel3 moeten hoge (H) met Sel1, Sel4, Sel5, Sel6, Sel7 en Sel8 laag (L). De gemeenschappelijke kathode van SSD0 is verbonden met Sel0, dus Sel0 ook L. moet Onder deze omstandigheden, wordt een "1" inderdaad weergegeven op SSD0.
Charlieplexing is niet zonder complicaties. Op dit punt, er rekening mee dat de kathoden van SSD2 en SSD3 H omdat ze ook met Sel2 en Sel3 respectievelijk verbonden zijn. Anoden van het segment "a" LED's zijn aangesloten op de Sel0 die momenteel L. Het segment "a" LEDs zijn dus omgekeerd-bevooroordeeld. Hoewel deze voorwaarde geen te verlichten veroorzaakt, is het belangrijk om te begrijpen dat de LEDs zijn onderworpen aan (en moet worden beoordeeld voor) de maximaal mogelijke reverse spanning. De Arduino H + 5V en dat is ook de maximale omgekeerde spanning waardering gegeven voor de 276-0075.
Maar een probleem blijft. In plaats van wordt onverlichte, SSD1 zal ook '1' te tonen! Dit is een raadsel. Sel1 L te houden segment moet worden "a" van wordt verlicht maar omdat Sel1 ook met de gemeenschappelijke kathode van SSD1 verbonden is, het moet H of zowel SSD0 en SSD1 actief zal zijn.
Duidelijk kan een select pin niet zowel L en H gelijktijdig. Echter als we verbreken Sel1 krijgen we het gewenste resultaat. Een verbroken lijn is niet H noch L-het is in een derde land van de "open-circuit" waardoor alle de aangesloten LED's worden uitgeschakeld. Een verbroken Sel1 levert geen stroom aan het segment 'a' anoden en biedt ook geen terugkeer pad naar grond voor de gemeenschappelijke kathode van SSD1. Geweldig! Dus hoe koppel wij pinnen selectief?
Hier is waar de Arduino maakt dit gemakkelijk. Elke Arduino pin kan worden geprogrammeerd als of een ingang als een uitgang. Als een input, kan het bron noch huidige zinken. We gebruiken de pin niet voor zijn input eigenschappen; alleen voor het feit dat een invoer pin niet een uitgang Pins is en daarom "disconnected" uit de matrix LED. Deze afhankelijkheid tristate pinnen is een kenmerk van charlieplexing. Dus de programmering regels eenvoudig zijn: Stel de select pinnen H voor de segmenten worden weergegeven, ingesteld het overige segment select pinnen als ingangen en de SSD Selecteer pin L.