Arduino Programmering - Spelar Med Skiftregister (a.k.a Even More LEDs)

Arduino Programmering - Spelar Med Skiftregister (a.k.a Even More LEDs) / DIY

Idag försöker jag lära dig lite om Shift Registers. Dessa är en ganska viktig del av Arduino programmering, i grund och botten eftersom de utökar antalet utdata du kan använda, i utbyte mot endast 3 kontrollpinnar. Du kan också mönsterkedjeskiftregistret tillsammans för att få ännu fler utgångar.

Detta är ett betydande hopp i svårigheter från tidigare tutorials men jag föreslår starkt att du har en riktigt bra förståelse för det tidigare materialet (länkar i slutet av den här artikeln), samt att förstå grunderna i binär Vad är binärt? [Teknologi förklarad] Vad är binärt? [Teknologi förklarad] Med tanke på att binär är så helt grundläggande för förekomsten av datorer, verkar det konstigt att vi aldrig har tagit upp ämnet före - så idag trodde jag att jag skulle ge en kort översikt över vilket binärt ... Läs mer vilket Jag skrev förra gången.

Vad är ett skiftregister?

Ett utbytesregister, tekniskt sett, tar emot data i serie och matar ut det parallellt. I praktiken betyder det att vi snabbt kan skicka en massa utgångskommandon till chipet, berätta att den ska aktiveras och utgångarna skickas till relevanta stiften. Istället för iterering genom varje stift skickar vi helt enkelt utmatningen som krävs för alla stiften samtidigt, som en enda byte eller mer information.

Om det hjälper dig att förstå, kan du tänka på ett skiftregister som en "array" av digitala utgångar, men vi kan hoppa över de vanliga digitalWrite-kommandona och helt enkelt skicka en serie bitar för att slå på eller av.

Hur fungerar det?

Skiftregistret vi ska använda - 74HC595N ingår i Oomlout startpaket - behöver bara 3 kontrollpinnar. Den första är en klocka - det behöver du inte oroa dig för mycket, eftersom Arduino seriella bibliotek styr det - men en klocka är i grunden bara en on / off elektrisk puls som sätter takten för datasignalen.

Spärrstiftet används för att berätta växlingsregistret när det ska sätta på och stänga utgångarna enligt de bitar vi just skickat det - det vill säga låsa dem på plats.

Slutligen är datapinnen där vi skickade den faktiska seriella data med bitarna för att bestämma om / av-tillståndet hos skiftregisterets utgångar.

Hela processen kan beskrivas i fyra steg:

  1. Ställ datapinnen till hög eller låg för den första utmatningsstiftet på växlingsregistret.
  2. Puls klockan för att "skifta" data till registret.
  3. Fortsätt att ställa in data och pulsera klockan tills du har ställt in önskat tillstånd för alla utmatningsstiften.
  4. Puls spärrstiftet för att aktivera utgångssekvensen.

Genomförande

Du behöver följande komponenter för det här projektet:

  • 7HC595N skiftregisterchip
  • 8 lysdioder och lämpliga motstånd, eller vad du vill mata ut till
  • Den vanliga breadboard, kontakterna och en grundläggande Arduino

Om du har Oomlout-startpaketet kan du hämta breadboardlayouten härifrån.

Här är monteringsvideoen:

Styrelsens layout:

Och min monterade version:

Jag har ändrat den ursprungliga koden från Ooolmout, men om du vill försöka det istället kan den hämtas i sin helhet här. Förklaring av koden ingår, så kopiera och klistra in hela saken nedanför eller pastebin för att läsa en förklaring av koden.

/ * ------------------------------------------------ --------- * | Shift Register Tutorial, baserat på | * | Arduino Experimentation Kit CIRC-05 | * | .: 8 Fler LED:. (74HC595 Shift Register) | * ------------------------------------------------- -------- * | Ändrad av James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Pindefinitioner // 7HC595N har tre stift int data = 2; // där vi skickar bitarna för att styra utgångar int klocka = 3; // håller datan i synkronisering int latch = 4; // talar om skiftregistret när du vill aktivera utmatningsföljdens tomgångsinställning () // ställ in de tre kontrollpinnarna för att mata ut pinMode (data, OUTPUT); pinMode (klocka, OUTPUT); pinMode (latch, OUTPUT); Serial.begin (9600); // så vi kan skicka felsökningsmeddelanden till seriell övervakning void loop () outputBytes (); // vår basutgång som skriver 8 bitar för att visa hur ett skiftregister fungerar. // outputIntegers (); // skickar ett heltal värde som data istället för byte, vilket faktiskt räknas i binärt.  void outputIntegers () for (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100);   void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >> för att justera riktningsfördröjningen (100);  

Bit-Shifting (OutputBytes-funktion)

I det första loopexemplet - outputBytes () - använder koden en 8-bitars sekvens (en byte) som den sedan skiftar bort från varje iteration av loopbandet. Det är viktigt att notera att om du flyttar längre än vad som är möjligt, är biten helt och hållet förlorad.

Bitskiftning görs med << or >> följt av antalet bitar du vill flytta med.

Kolla in följande exempel och se till att du förstår vad som händer:

byte val = B00011010 val = val << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010 

Sänder heltal istället (OutputIntegers Function)

Om du skickar ett heltal till skiftregistret istället för en byte, konverterar det helt enkelt numret till en binär byte-sekvens. I denna funktion (obesvarad i loop och upload för att se effekten) har vi en för loop som räknas från 0-255 (det högsta heltalet vi kan representera med en byte) och skickar det istället. Det räknas i grunden i binär, så sekvensen kan verka lite slumpmässig om inte dina lysdioder läggs ut i en lång rad.

Om du till exempel läser den binära förklarade artikeln kommer du veta att numret 44 kommer att representeras som 00101100, så lysdioder 3,5,6 kommer att tändas vid den punkten i sekvensen.

Daisy Chaining Mer än ett skiftregister

Det anmärkningsvärda med Shift Registers är att om de får mer än 8 bitars information (eller hur stor deras register är), kommer de att flytta de andra ytterligare bitarna igen. Det betyder att du kan ansluta en serie av dem tillsammans, skjuta in en lång kedja bitar och få den distribuerad till varje register separat, allt utan extra kodning från din sida.

Även om vi inte kommer att beskriva processen eller schematerna här, om du har mer än ett skiftregister kan du prova projektet från den officiella Arduino-webbplatsen här.

Andra artiklar i serien:

  • Vad är Arduino och vad kan du göra med det Vad är Arduino & Vad kan du göra med det? Vad är Arduino och vad kan du göra med det? Arduino är en anmärkningsvärd liten elektronik enhet, men om du aldrig har använt en tidigare, precis vad exakt är de, och vad kan du göra med en? Läs mer ?
  • Vad är en Arduino Starter Kit och vad innehåller den? Vad ingår i ett Arduino Starter Kit? [MakeUseOf Förklarar] Vad ingår i ett Arduino Starter Kit? [MakeUseOf Explains] Jag har tidigare introducerat Arduino open source-hårdvaran här på MakeUseOf, men du behöver mer än bara den verkliga Arduino att bygga något ut av det och faktiskt komma igång. Arduino "startpaket" är ... Läs mer
  • Mer coola komponenter att köpa med din startpaket 8 Fler kalla komponenter till dina Arduino-projekt 8 Fler kalla komponenter till dina Arduino-projekt Så du tänker på att få en Arduino-startpaket, men undrar om några grundläggande lysdioder och motstånd kommer att bli tillräckligt för att hålla dig upptagen för helgen? Antagligen inte. Här är ytterligare 8 ... Läs mer
  • Komma igång med din Arduino Starter Kit? Installera drivrutiner och ställa in styrningen och porten Komma igång med ditt Arduino-startpaket - Installera drivrutiner och konfigurera styret och porten Komma igång med ditt Arduino-startpaket - Installera drivrutiner och konfigurera styrelsen och porten Så du har köpt dig själv en Arduino starter kit, och eventuellt några andra slumpmässiga coola komponenter - nu vad? Hur kommer du faktiskt igång med att programmera denna Arduino sak? Hur ställer du upp det ... Läs mer
  • Fritzing, ett gratis verktyg för ritning av kretsscheman Fritzing - Det ultimata verktyget för att skissa ut elektronikprojekt [Cross Platform] Fritzing - Det ultimata verktyget för att skissa ut elektronikprojekt [Cross Platform] Trots att det liknar en alcopop är Fritzing faktiskt en otrolig bit av fri programvara som du kan använda för att skapa krets- och komponentdiagram för användning med snabbprototiska elektronikkort, såsom den fantastiska öppen källan Arduino ... Läs mer
  • En närmare titt på strukturen i en Arduino App & Exempel Blink Program
  • Arduino Xmas trädljusprojekt Ett Arduino-projekt: Hur man gör prydliga julljusprydnader Ett Arduino-projekt: Hur man gör prydliga julljusprydnader Det här är nästa del i vår lärande Arduino-serie, och den här gången lär vi oss om och använder Arrays att göra en liten julgransprydnad med olika blinkande sekvenser. Detta skulle vara en ... Läs mer (AKA lär sig om arrays)
  • Vad är binärt? Vad är binärt? [Teknologi förklarad] Vad är binärt? [Teknologi förklarad] Med tanke på att binär är så helt grundläggande för förekomsten av datorer, verkar det konstigt att vi aldrig har tagit upp ämnet tidigare - så idag trodde jag att jag skulle ge en kort översikt över vad binär ... Läs mer

Det är så långt som vi ska gå med skiftregister idag, eftersom jag tycker att vi har täckt mycket. Som någonsin skulle jag vilja uppmuntra dig att leka med och justera koden, och gärna fråga eventuella frågor du kan ha i kommentarerna, eller ens dela en länk till ditt fantastiska skiftregisterbaserade projekt.

Utforska mer om: Arduino.