Charlieplexing
Charlieplexing (även känd som tristate multiplexing , reducerat pin-count LED-multiplexing , komplementär LED-drivning och crossplexing ) är en teknik för att driva en multiplexerad skärm där relativt få I/O-stift på en mikrokontroller används t.ex. för att driva en uppsättning lysdioder .
Metoden använder sig av tretillståndslogikkapaciteten hos mikrokontroller för att uppnå effektivitet jämfört med traditionell multiplexering. Även om det är mer effektivt i sin användning av I/O, finns det problem som gör att det blir mer komplicerat att designa och gör det svårt för större skärmar. Dessa frågor inkluderar arbetscykel , strömkrav och framspänningarna för lysdioderna.
Som med all multiplexering, finns det ett krav att snabbt bläddra igenom de använda lysdioderna så att det mänskliga ögats uthållighet uppfattar skärmen som en helhet. Multiplexering kan i allmänhet ses av en strobingeffekt och skevhet om ögats brännpunkt flyttas förbi displayen snabbt.
Ursprung
Charlieplexing-tekniken introducerades av Maxim Integrated 2001 som ett LED-multiplexsystem med reducerat antal pin-antal i deras MAX6951 LED-displaydrivrutin. Namnet "Charlieplexing" förekom dock först i en ansökan från 2003. Den var uppkallad efter Charles "Charlie" M. Allen, en applikationsingenjör av MAX232 berömmelse, som hade föreslagit denna metod internt. [ när? ]
Också 2001 illustrerade Don Lancaster metoden som en del av sina funderingar om problemet med " N-anslutenhet ", med hänvisning till Microchip Technology , som redan hade diskuterat det som "komplementär LED-drivteknik" i en ansökan från 1998 och senare skulle inkludera den. i ett tips & tricks-häfte.
Även om Microchip inte nämnde ursprunget till idén, kan de ha plockat upp den i PICLIST, en e-postlista på Microchip PIC-mikrokontroller , där Graham Daniel också 1998 föreslog den för samhället som en metod för att driva rader och kolumner av dubbelriktade lysdioder . Daniel hade vid den tiden skapat enkla kretsar med PIC 12C508- chips som driver 12 lysdioder från 5 stift med en minikommandouppsättning för att sätta igång olika belysningsdisplayer.
Metoden var dock känd och användes av olika parter mycket tidigare på 1980-talet och har beskrivits i detalj redan 1979 i ett patent av Christopher W. Malinowski, Heinz Rinderle och Martin Siegle vid Institutionen för forskning och utveckling , AEG-Telefunken , Heilbronn, Tyskland för vad de kallade ett "trestatssignalsystem".
Enligt uppgift var liknande tekniker redan i bruk så tidigt som 1972 för spårsignalapplikationer inom modelljärnvägar . [ citat behövs ]
Traditionell multiplexering
Pins | lysdioder |
---|---|
1 | 0 |
2 | 2 |
3 | 6 |
4 | 12 |
5 | 20 |
6 | 30 |
7 | 42 |
8 | 56 |
9 | 72 |
10 | 90 |
20 | 380 |
40 | 1560 |
n | n 2 − n |
Displaymultiplexering skiljer sig mycket från multiplexering som används vid dataöverföring, även om den har samma grundläggande principer. Vid displaymultiplexering är datalinjerna för displayerna* parallellkopplade med en gemensam databuss på mikrokontrollern. Sedan slås displayerna på och adresseras individuellt. Detta tillåter användning av färre I/O-stift än vad det normalt skulle ta för att driva samma antal skärmar direkt. Här kan varje "display" till exempel vara en räknarsiffra, inte hela uppsättningen av siffror.
När du använder Charlieplexing kan n drivstift driva n siffror med n − 1 segment. Förenklat motsvarar det att n stift kan driva n 2 − n segment eller lysdioder. Traditionell multiplexering kräver många fler stift för att driva samma antal lysdioder; 2 n stift måste användas för att driva n 2 lysdioder (även om ett 1-av- n dekoderchip kan användas för att minska antalet mikrokontroller I/O-stift till ).
Om antalet lysdioder är känt kan den föregående ekvationen arbetas baklänges för att bestämma antalet stift som krävs. Det vill säga, L lysdioder kan drivas av stift.
Kompletterande drivkraft
Charlieplexing i sin enklaste form fungerar genom att använda en diodmatris av komplementära par av lysdioder. Den enklaste möjliga Charlieplexed-matrisen skulle se ut så här:
Genom att applicera en positiv spänning på stift X1 och jordstift X2 kommer LED1 att tändas. Eftersom ström inte kan flyta genom lysdioder i omvänd riktning vid denna låga spänning, kommer LED2 att förbli släckt. Om spänningarna på stift X1 och stift X2 vänds, tänds LED2 och LED1 släcks.
Charlieplexing-tekniken gör faktiskt inte en större matris möjlig när man bara använder två stift, eftersom två lysdioder kan drivas av två stift utan några matrisanslutningar och utan att ens använda tri-state-läge. I det här exemplet med två lysdioder skulle Charlieplexing spara en jordledning, vilket skulle behövas i en vanlig 2-pins drivrutin.
Dock fungerar 2-stiftskretsen som ett enkelt exempel för att visa de grundläggande koncepten innan man går vidare till större kretsar där Charlieplexing faktiskt visar en fördel.
Expanderande: logik i tre tillstånd
Om kretsen ovan skulle utökas för att rymma 3 stift och 6 lysdioder skulle det se ut så här:
Detta utgör dock ett problem. För att denna krets ska fungera som den föregående måste ett av stiften kopplas bort innan du laddar de återstående två. Om till exempel LED5 var tänkt att lysa måste X1 laddas och X3 jordas. Men om X2 också laddas, skulle LED3 också lysa. Om X2 istället var jordad skulle LED1 lysa, vilket innebär att LED5 inte kan tändas av sig själv. Detta kan lösas genom att använda tretillståndslogikegenskaperna hos mikrokontrollerstift. Mikrokontrollerstift har i allmänhet tre tillstånd: "hög" (5 V), "låg" (0 V) och "ingång". Ingångsläget sätter stiftet i ett högimpedanstillstånd , vilket, elektriskt sett, "kopplar bort" stiftet från kretsen, vilket betyder att liten eller ingen ström kommer att flyta genom den. Detta gör att kretsen kan se valfritt antal stift anslutna när som helst, helt enkelt genom att ändra stiftets tillstånd. För att driva matrisen med sex lysdioder ovan är de två stiften som motsvarar den lysdiod som ska tändas anslutna till 5 V (I/O-stift "hög" = binärt nummer 1) och 0 V (I/O-stift "låg" = binär 0), medan det tredje stiftet är satt i sitt ingångstillstånd.
På så sätt förhindras strömläckage från det tredje stiftet, vilket säkerställer att lysdioden som önskas lysa är den enda som lyser. Eftersom den önskade lysdioden minskar den tillgängliga spänningen efter resistorn, kommer ström inte att flyta över alternativa banor (en alternativ 2-LED-väg finns för varje par av stift i 3-stiftsdiagrammet, till exempel), så länge som spänningsfallet i den önskade LED-vägen är mindre än det totala spänningsfallet över varje sträng av alternativa lysdioder. Men i varianten med individuella motstånd påverkar denna spänningsreglerande effekt inte de alternativa vägarna så du måste se till att alla lysdioder som används inte tänds med halva matningsspänningen pålagd eftersom denna variant inte drar nytta av den spänningsreglerande effekten av önskad väg LED.
Genom att använda tri-state logik kan matrisen teoretiskt expanderas till vilken storlek som helst, så länge stift är tillgängliga. För n stift kan n ( n − 1) lysdioder finnas i matrisen. Vilken lysdiod som helst kan tändas genom att applicera 5 V och 0 V till dess motsvarande stift och ställa in alla andra stift som är anslutna till matrisen till ingångsläge. Under samma begränsningar som diskuterats ovan kan upp till n − 1 lysdioder som delar en gemensam positiv eller negativ bana tändas parallellt.
Expanderar
3-trådskretsen kan omarrangeras till denna nästan ekvivalenta matris (motstånd har flyttats).
Detta understryker likheterna mellan vanlig rutnätsmultiplex och Charlieplex, och visar mönstret som leder till " n -kvadrat minus n "-regeln.
Vid typisk användning på ett kretskort skulle motstånden vara fysiskt placerade på toppen av kolumnerna och anslutna till ingångsstiftet. Raderna skulle sedan kopplas direkt till ingångsstiftet förbi motståndet.
Den första inställningen i bilden till vänster är endast lämplig när identiska lysdioder används eftersom ett enda motstånd används för strömbegränsning genom mer än en lysdiod (men inte samtidigt - snarare begränsar ett motstånd strömmen genom endast en lysdiod i en given kolumn på en gång). Detta står i kontrast till den andra konfigurationen med individuella motstånd för varje lysdiod, som visas i bilden till höger. I denna andra konfiguration har varje lysdiod ett unikt motstånd parat med sig. Detta gör det möjligt att blanda olika typer av lysdioder genom att förse var och en med sitt lämpliga motståndsvärde.
I båda dessa konfigurationer, som visas i både den vänstra och den högra bilden, gör de omplacerade motstånden det möjligt att tända flera lysdioder samtidigt rad för rad, istället för att kräva att de lyser individuellt. Radströmkapaciteten skulle kunna förstärkas av en NPN- emitterföljare BJT- transistor istället för att driva strömmen direkt med enbart det typiskt mycket svagare I/O-stiftet.
Problem med Charlieplexing
Uppdateringsfrekvens
Eftersom endast en enda uppsättning lysdioder, som alla har en gemensam anod eller katod, kan tändas samtidigt utan att oavsiktliga lysdioder slås på, kräver Charlieplexing frekventa utgångsändringar, genom en metod som kallas multiplexing . När multiplexering är klar lyser inte alla lysdioder helt samtidigt, utan snarare en uppsättning lysdioder tänds kort, sedan en annan uppsättning, och så småningom upprepas cykeln. Om det görs tillräckligt snabbt, kommer de att se ut att alla vara på, hela tiden, för det mänskliga ögat på grund av ihållande syn . För att en skärm inte ska ha något märkbart flimmer uppdateringsfrekvensen för varje lysdiod vara större än 50 Hz. [ tveksamt ]
Anta att 8 tri-state stift används för att styra 56 lysdioder genom Charlieplexing, vilket räcker för 8 7-segmentsskärmar (utan decimaler). Typiskt är 7-segmentsskärmar gjorda för att ha en gemensam katod, ibland en gemensam anod, men utan förlust av allmänhet, anta att det är en gemensam katod. Alla lysdioder i alla 8 7-segmentsdisplayer kan inte tändas samtidigt i någon önskad kombination med Charlieplexing. Det är omöjligt att få 56 bitar information direkt från 8 trits (termen för ett bas-3-tecken, eftersom stiften är 3-tillstånd) information, eftersom 8 trits i grunden omfattar 8 log 2 3, eller ungefär 12,7 bitar information , vilket är långt under de 56 bitar som krävs för att slå på eller av alla 56 lysdioder i valfri godtycklig kombination. Istället måste det mänskliga ögat luras med hjälp av multiplexering.
Endast en 7-segmentsdisplay, en uppsättning med 7 lysdioder kan vara aktiva när som helst. Sättet detta skulle göras är att de 8 gemensamma katoderna på de 8 skärmarna tilldelas var sin egen unika stift bland de 8 I/O-portarna. När som helst kommer en och endast en av de 8 styrande I/O-stiften att vara aktivt låga, och därför kan endast 7-segmentsdisplayen med sin gemensamma katod kopplad till det aktivt låga stiftet ha vilken som helst av dess lysdioder på. Det är den aktiva 7-segmentsdisplayen. Anoderna för de 7 LED-segmenten i den aktiva 7-segmentsskärmen kan sedan slås på i valfri kombination genom att ha de andra 7 I/O-portarna antingen höga eller i högimpedansläge, i valfri kombination. De är anslutna till de återstående 7 stiften, men genom motstånd (den gemensamma katodanslutningen är ansluten till själva stiftet, inte genom ett motstånd, eftersom annars strömmen genom varje enskilt segment skulle bero på antalet totala segment som är påslagna, eftersom de skulle alla behöva dela ett enda motstånd). Men för att visa ett önskat nummer med alla 8 siffror kan endast en 7-segmentsdisplay visas åt gången, så alla 8 måste bläddras igenom separat och på en 50:e sekund under hela 8-perioden. måste uppdateras vid 400 Hz under period-8-cykeln genom alla 8 segment för att få lysdioderna att blinka inte långsammare än 50 gånger per sekund. Detta kräver konstant avbrott av vilken ytterligare behandling som styrenheten utför, 400 gånger per sekund.
Toppström
På grund av den minskade arbetscykeln ökar det nuvarande kravet på en Charlieplexed display mycket snabbare än det skulle med en traditionellt multiplexerad display. När skärmen blir större måste den genomsnittliga strömmen som flyter genom lysdioden vara (ungefär) konstant för att den ska behålla konstant ljusstyrka, vilket kräver att toppströmmen ökar proportionellt. Detta orsakar ett antal problem som begränsar den praktiska storleken på en Charlieplexed-skärm.
- Lysdioder har ofta en maximal toppströmsklassning såväl som en genomsnittlig strömstyrka.
- Om mikrokontrollerkoden kraschar och en Charlieplex med en LED i taget används, är den enda lysdioden som lyser under mycket högre påfrestning än den skulle vara i en Charlieplex-display rad i taget eller i en traditionellt multiplexerad display, vilket ökar risken för ett fel innan felet upptäcks.
Krav på tristate
Alla utgångar som används för att driva en Charlieplexed display måste vara tristate. Om strömmen är tillräckligt låg för att driva bildskärmarna direkt av I/O-stiften på mikrokontrollern är detta inget problem, men om externa tristater måste användas, kommer varje tristate i allmänhet att kräva två utgångslinjer för att styra, vilket eliminerar de flesta fördelen med en Charlieplexed display. Eftersom strömmen från mikrokontrollerstiften vanligtvis är begränsad till 20 mA eller så, begränsar detta kraftigt den praktiska storleken på en Charlieplexed-skärm. Det kan dock göras genom att aktivera ett segment åt gången.
Komplexitet
Charlieplex-matriser är betydligt mer komplicerade, både i den erforderliga PCB-layouten och mikrokontrollerprogrammering, än att använda förbyggda multiplexmatriser. Detta ökar designtiden. Lödning av komponenter kan också vara mer tidskrävande än för multiplexade LED-arrayer. En balans mellan komplexitet och pinanvändning kan uppnås genom att Charlieplexa flera förbyggda multiplexade LED-arrayer tillsammans.
Framspänning
När du använder lysdioder med olika framåtspänningar, till exempel när du använder lysdioder med olika färg, kan vissa lysdioder tändas när det inte önskas.
I diagrammet ovan kan man se att om LED 6 har en 4 V framspänning, och LED 1 och 3 har en framspänning på 2 V eller mindre, kommer de att tändas när LED 6 är avsedd att, eftersom deras strömväg är kortare. Detta problem kan enkelt undvikas genom att jämföra framåtspänningar för de lysdioder som används i matrisen och kontrollera kompatibilitetsproblem. Eller, enklare, med lysdioder som alla har samma framspänning.
Detta är också ett problem där lysdioderna använder individuella motstånd istället för delade motstånd, om det finns en väg genom två lysdioder som har mindre LED-fall än matningsspänningen kan dessa lysdioder också tändas vid oavsiktliga tidpunkter.
LED-fel
Om en enda lysdiod misslyckas, genom att antingen bli öppen, kortsluta eller läcka (utvecklar ett parasitiskt parallellmotstånd, som tillåter ström i båda riktningarna), kommer påverkan att bli katastrofal för skärmen som helhet. Dessutom kan den faktiska problematiska lysdioden vara mycket svår att identifiera, eftersom potentiellt en stor uppsättning lysdioder som inte bör tändas alla kan tändas samtidigt, och - utan detaljerad kunskap om kretsen - förhållandet mellan vilken lysdiod som är dålig och vilken inställd av lysdioder som alla tänds tillsammans kan inte lätt fastställas.
Om den misslyckade lysdioden blir en öppen krets, kan spänningen mellan lysdiodens 2 elektroder byggas upp tills den hittar en väg genom två andra lysdioder. Det finns lika många sådana vägar som det finns stift som används för att styra arrayen minus 2; om lysdioden med anod vid nod m och katod vid nod n misslyckas på detta sätt, kan det vara så att varje enskilt par av lysdioder där ens anod är nod m , är katoden p för vilket värde som helst på p (med undantaget att p inte kan vara m eller n , så det finns lika många möjliga val för p som antalet stift som styr arrayen minus 2), tillsammans med lysdioden vars anod är p och katod är n , kommer alla att lysa.
Om det finns 8 I/O-stift som styr arrayen, betyder det att det kommer att finnas 6 parasitvägar genom par med 2 lysdioder, och 12 lysdioder kan lysa oavsiktligt, men lyckligtvis kommer detta bara att hända när den ena dåliga lysdioden är tänkt att komma på, vilket kan vara en liten bråkdel av tiden och kommer inte att uppvisa några skadliga symtom när problemlysdioden inte är tänkt att lysa. Om problemet är en kortslutning mellan noderna x och y , så ska varje gång en LED U med antingen x eller y som sin anod eller katod och någon nod z som sin andra elektrod tändas (utan förlust av allmänhet, anta U' s katod är ansluten till x ), lyser LED V med katod y och anod z också, så varje gång antingen nod x eller y aktiveras som en anod ELLER en katod, kommer två lysdioder att tändas istället för en. I det här fallet tänder den bara en extra LED oavsiktligt, men den gör det mycket oftare; inte bara när den felaktiga lysdioden ska tändas, utan när en lysdiod som har ett stift gemensamt med den misslyckade lysdioden ska tändas.
De problematiska elementen blir särskilt svåra att identifiera om det är två eller flera lysdioder som är fel. Vad detta betyder är att till skillnad från de flesta metoder där förlusten av en enskild lysdiod bara orsakar ett enda utbränt segment, när Charlieplexing används, kommer en eller två utbrända lysdioder, oavsett typ av fel, nästan säkert att orsaka en katastrofal kaskad av oavsiktlig belysning av lysdioderna som fortfarande fungerar, vilket med stor sannolikhet gör hela enheten helt och omedelbart oanvändbar. Detta måste beaktas när man överväger den erforderliga livslängden och felegenskaperna för den enhet som designas.
Alternativa användningsfall och varianter
Indatamultiplexering
Charlieplexing kan också användas för att multiplexera digitala insignaler till en mikrokontroller. Samma diodkretsar används, förutom att en omkopplare är placerad i serie med varje diod. För att avläsa om en switch är öppen eller stängd konfigurerar mikrokontrollern ett stift som en ingång med ett internt pull-up-motstånd. Det andra stiftet är konfigurerat som en utgång och inställt på den låga logiska nivån. Om ingångsstiftet visar lågt är omkopplaren stängd, och om ingångsstiftet läser högt är omkopplaren öppen.
En potentiell applikation för detta är att läsa en standard (4×3) 12-knapps numerisk knappsats med endast 4 I/O-linjer. Den traditionella rad-kolumnskanningsmetoden kräver 4 + 3 = 7 I/O-linjer. Charlieplexing sparar alltså 3 I/O-linjer; men det lägger till kostnaden för 12 dioder (eftersom dioderna bara är gratis när lysdioder används). En variation av kretsen med endast 4 dioder är möjlig, men detta minskar tangentbordets rollover . Mikrokontrollern kan alltid upptäcka när data är korrupta, men det finns ingen garanti för att den kan känna av de ursprungliga tangenttryckningarna, om inte bara en knapp trycks in åt gången. (Det är dock troligen möjligt att ordna kretsen så att om högst två intilliggande knappar trycks ned så kommer ingen dataförlust att inträffa.) [ vagt ] Ingången är endast förlustfri i 4-diodskretsen om bara en knapp är trycks åt gången, eller om vissa problematiska tryckningar på flera tangenter undviks. I 12-diodskretsen är detta inte ett problem, och det finns alltid en en-till-en-överensstämmelse mellan knapptryckningar och indata. Det är dock så många dioder som krävs för att använda metoden (särskilt för större arrayer) att det i allmänhet inte finns några kostnadsbesparingar jämfört med den traditionella rad-kolumn-scanningsmetoden, såvida inte kostnaden för en diod bara är en bråkdel av kostnaden för ett I/O-stift, där bråkdelen är en över antalet I/O-linjer.
GuGaplexing
2008 utvecklade Dhananjay V. Gadre Gugaplexing , som är som Charlieplexing med flera drivspänningar.
Chipiplexing
2008, Guillermo Jaquenods så kallade Chipiplexing lägger till sändarföljare för att öka styrkan på raddriften, vilket gör att rader bredare än en enskild mikrokontrollerport kan driva att tändas samtidigt.
Cross-plexing
År 2010 introducerade den österrikiska chiptillverkaren austriamicrosystems AG (som heter ams AG sedan 2012 och ams-OSRAM AG sedan 2020) den multiplexerande LED-drivrutinen IC AS1119, följt av AS1130 2011. Även divisionen för analoga och blandade signaler (AMS) (som heter Lumissil Microsystems sedan 2020) från Integrated Silicon Solution Inc. (ISSI) introducerade IS31FL3731 2012 och IS31FL3732 2015. De använder alla en teknik som de kallar cross-plexing, en variant av Charlieplexing med automatisk detektering av öppna eller kortslutna anslutningar och åtgärder mot spökbilder.
Tucoplexing
Under 2019 utvecklade Micah Elizabeth Scott en metod för att använda 3 stift för att köra 4 lysdioder och 4 switchar som kallas Tucoplexing .
Pulsbreddsmodulering
Charlieplexing kan till och med användas med pulsbreddsmodulering för att styra ljusstyrkan på 12 lysdioder med 4 stift.
Kodexempel
I följande Arduino- kodexempel använder kretsen ATtiny 8-stifts mikrokontroller som har 5 I/O-stift för att skapa en 7 -segments display . Eftersom en 7-segmentsskärm endast kräver kontroll av 7 individuella lysdioder, använder vi 4 av ATtiny I/O-stiften som charlieplexade utgångar (n*(n-1)). Lämnar det femte I/O-stiftet för att användas som digital eller analog ingång eller annan utgång.
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
// ATtiny-kod // Läser analog (eller digital) ingång från stift 4 och varje gång ingången går under en inställd tröskel // räknar den en och visar ökningen av antalet antingen genom att aktivera en av fyra lysdioder (eller transistorer) / / eller en av tolv charlieplexa lysdioder. // SÄTT DESSA VÄRDEN: int tröskel = 500 ; int maxCount = 7 ; //////////////////// boolean sensorTriggered = false ; int count = ; int sensorValue = ; long lastDebounceTime = ; // sista gången utgångsstiftet ändrades long debounceDelay = 50 ; // avstudstiden; öka om resultatet flimrar //////////////////////////////////////////////////// ////////////////////////////////// void setup () { for ( int pin = ; pin < 4 ; pin ++ ) { pinMode ( pin , OUTPUT ); digitalWrite ( stift , LÅG ); } pinMode ( 4 , INPUT ); digitalWrite ( 4 , HÖG ); // intern pull-up } ///////////////////////////////////////// /////////////////////////////////// void loop () { testDigits (); } void testDigits () { charlieLoop (); } ///////////////////////////////////////////// /////////////////////////////// void readSensor () { sensorValue = analogRead ( 2 ); // pin4! fördröjning ( 100 ); if ( sensorValue < tröskel && sensorTriggered == falskt ) { sensorTriggered = sant ; räkna ++ ; if ( antal > maxCount ) count = ; charlieLoop (); } if ( sensorValue > tröskel ) sensorTriggered = false ; } ///////////////////////////////////////////// /////////////////////////////// void charlieLoop () { count ++ ; for ( int i = ; i < 1000 ; i ++ ) { for ( int c = ; c < count ; c ++ ) { charliePlexPin ( c ); } } fördröjning ( 1000 ); if ( antal > maxCount ) count = ; } ///////////////////////////////////////////// ////////////////////////////// void charliePlexPin ( int myLed ){ // Se till att vi inte matar slumpmässiga spänningar till lysdioderna // under den korta tid vi ändrar stiftlägen och spänningar. pinMode ( , INPUT ); pinMode ( 1 , INPUT ); pinMode ( 2 , INPUT ); pinMode ( 3 , INPUT ); switch ( myLed ){ case : pinMode ( , OUTPUT ); pinMode ( 2 , OUTPUT ); digitalWrite ( 2 , LÅG ); digitalWrite ( , HIGH ); bryta ; fall 1 : pinMode ( 3 , OUTPUT ); pinMode ( 2 , OUTPUT ); digitalWrite ( 2 , LÅG ); digitalWrite ( 3 , HÖG ); bryta ; fall 2 : pinMode ( 3 , OUTPUT ); pinMode ( 1 , OUTPUT ); digitalWrite ( 1 , LÅG ); digitalWrite ( 3 , HÖG ); bryta ; fall 3 : pinMode ( 1 , OUTPUT ); pinMode ( , OUTPUT ); digitalWrite ( , LÅG ); digitalWrite ( 1 , HÖG ); bryta ; fall 4 : pinMode ( , OUTPUT ); pinMode ( 1 , OUTPUT ); digitalWrite ( 1 , LÅG ); digitalWrite ( , HIGH ); bryta ; fall 5 : pinMode ( 2 , OUTPUT ); pinMode ( , OUTPUT ); digitalWrite ( , LÅG ); digitalWrite ( 2 , HÖG ); bryta ; fall 6 : pinMode ( 2 , OUTPUT ); pinMode ( 1 , OUTPUT ); digitalWrite ( 1 , LÅG ); digitalWrite ( 2 , HÖG ); bryta ; } } ///////////////////////////////////////////// //////////////////////////////// void spwm ( int freq , int pin , int sp ) { // ring charlieplexing till ställ in korrekta pin outs: //on: digitalWrite ( pin , HIGH ); delayMicroseconds ( sp * freq ); // off: digitalWrite ( pin , LOW ); delayMicroseconds ( sp * ( 255 - frekv )); }
Se även
Anteckningar
Vidare läsning
- Gadre, Dhananjay V. (2007-01-18). "Mikrokontroller driver logaritmisk/linjär punkt/stapel 20-LED-display" . EDN . sid. 83. CA6406730. Arkiverad från originalet 2021-12-25.
- Gadre, Dhananjay V.; Chugh, Anurag (2007-05-24). "Åtta-stifts mikrokontroller hanterar tvåsiffrig skärm med flera lysdioder" . Elektronisk design . Paramus, New Jersey, USA. ED Online 15512. Arkiverad från originalet 2012-02-13.
- Gadre, Dhananjay V. (2007-09-27). "Mikrokontroller driver 20 lysdioder" . EDN . CA6483826. Arkiverad från originalet 2021-12-25.