Annons
Idag ska jag försöka lära dig lite om skiftregister. Dessa är en ganska viktig del av Arduino-programmering, i grunden för att de utökar antalet utgångar du kan använda, i utbyte mot endast 3 kontrollstift. Du kan också koppla ihop skiftregister i serie för att få ännu fler utgångar.
Detta är dock ett betydande hopp i svårighetsgrad från tidigare tutorials, och jag rekommenderar starkt att du har en riktigt bra förståelse för det tidigare materialet (länkar i slutet av denna artikel), samt förståelse de grunderna i binärt Vad är binärt? [Teknik förklaras]Med tanke på att binär är så absolut grundläggande för existensen av datorer, verkar det konstigt att vi aldrig har tagit itu med ämnet förut - så idag tänkte jag ge en kort översikt över vad binär ... Läs mer som jag skrev förra gången.
Vad är ett skiftregister?
Ett utgångsskiftregister tar tekniskt emot data i serie och matar ut det parallellt. I praktiska termer betyder det att vi snabbt kan skicka ett gäng utgångskommandon till chippet, säga att det ska aktiveras, och utgångarna kommer att skickas till de relevanta stiften. Istället för att iterera genom varje stift skickar vi helt enkelt den utdata som krävs till alla stift på en gång, 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 aktivera dem eller av.
Hur fungerar det?
Skiftregistret vi kommer att använda – 74HC595N som ingår i Oomlouts startpaket – behöver bara 3 kontrollstift. Den första är en klocka - du behöver inte oroa dig för mycket om detta eftersom Arduinos seriella bibliotek styr det – men en klocka är i princip bara en på/av elektrisk puls som bestämmer takten för datasignalen.
Spärrstiftet används för att tala om för skiftregistret när det ska slå på och stänga av sina utgångar enligt de bitar vi just skickade det - dvs låsa dem på plats.
Slutligen är datastiftet där vi skickade de faktiska seriella data med bitarna för att bestämma på/av-tillståndet för skiftregistrets utgångar.
Hela processen kan beskrivas i fyra steg:
- Ställ in datastiftet på högt eller lågt för det första utgångsstiftet på skiftregistret.
- Puls på klockan för att "skifta" data till registret.
- Fortsätt att ställa in data och pulsera klockan tills du har ställt in önskat tillstånd för alla utgångsstift.
- Pulsera låsstiftet för att aktivera utgångssekvensen.
Genomförande
Du behöver följande komponenter för detta projekt:
- 7HC595N skiftregisterchip
- 8 lysdioder och lämpliga motstånd, eller vad du nu vill mata ut till
- Den vanliga brödbrädan, kontakter och en grundläggande Arduino
Om du har Oomlout-startpaketet kan du ladda ner breadboard-layouten härifrån.
Här är monteringsvideon:
Tavlans layout:
Och min sammansatta version:
Jag har modifierat originalkoden från Ooolmout, men om du vill prova det istället kan den laddas ner i sin helhet här. Förklaring av koden ingår, så kopiera och klistra in hela underifrån eller pastebin för att läsa en förklaring av koden.
/* * | Shift Register Tutorial, baserat på | * | Arduino Experimentation Kit CIRC-05 | * |.: 8 fler lysdioder:. (74HC595 Skiftregister) | * * | Ändrad av James @ MakeUseOf.com | * */ //Pin-definitioner. // 7HC595N har tre stift. int data = 2; // där vi skickar bitarna för att styra utgångar int clock = 3; // håller data synkroniserade. int spärr = 4; // talar om för skiftregistret när utgångssekvensen void setup() ska aktiveras { // ställ in de tre kontrollstiften för att mata ut pinMode (data, OUTPUT); pinMode (klocka, OUTPUT); pinMode (lås, OUTPUT); Serial.begin (9600); // så att vi kan skicka felsökningsmeddelanden till seriell monitor. } void loop(){ outputBytes(); // vår basutgång som skriver 8-bitar för att visa hur ett skiftregister fungerar. //outputIntegers(); // skickar ett heltalsvärde som data istället för byte, och räknas effektivt binärt. } void outputIntegers(){ for (int i=0;i<256;i++){ digitalWrite (latch, LOW); Serial.println (i); // Debug, skickar utdata till den seriella monitorn shiftOut (data, klocka, MSBFIRST, i); digitalWrite (lås, HÖG); fördröjning (100); } } void outputBytes(){ /* Bytes, eller 8-bitar, representeras av ett B följt av 8 0 eller 1:or. I det här fallet, betrakta detta som en array som vi kommer att använda för att styra de 8 lysdioderna. Här har jag startat bytevärdet som 00000001 */ byte dataValues = B00000001; // ändra detta för att justera startmönstret /* I for-slingan börjar vi med att dra spärren lågt, med shiftOut Arduino-funktionen för att prata med skiftregistret, skicka det vår byte av datavärden som representerar statusen för lysdioderna och dra sedan spärren högt för att låsa dem i plats. Slutligen flyttar vi bitarna ett ställe till vänster, vilket betyder att nästa iteration kommer att tända nästa lysdiod i serien. För att se det exakta binära värdet som skickas, kontrollera den seriella monitorn. */ for (int i=0;i<8;i++){ digitalWrite (lås, LÅG); Serial.println (dataValues, BIN); // Debug, skickar utdata till den seriella monitorn shiftOut (data, klocka, MSBFIRST, dataValues); digitalWrite (lås, HÖG); dataValues = dataValues << 1; // Flytta bitarna ett ställe till vänster - ändra till >> 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 flyttar åt vänster varje iteration av for-slingan. Det är viktigt att notera att om du växlar längre än vad som är möjligt går biten helt enkelt förlorad.
Bitskiftning görs med << eller >> följt av antalet bitar du vill skifta 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, vi tappade de andra bitarna! val = val >> 5 // B00000010.
Skickar heltal i stället (funktionen OutputIntegers)
Om du skickar ett heltal till skiftregistret istället för en byte, konverterar det helt enkelt talet till en binär bytesekvens. I den här funktionen (avkommentera i loopen och ladda upp för att se effekten) har vi en for-loop som räknas från 0-255 (det högsta heltal vi kan representera med en byte), och skickar det istället. Det räknas i princip binärt, så sekvensen kan verka lite slumpmässig om inte dina lysdioder är utlagda i en lång rad.
Till exempel, om du läser den binära förklarade artikeln, vet du att siffran 44 kommer att representeras som 00101100, så lysdioderna 3,5,6 kommer att tändas vid den punkten i sekvensen.
Daisy Chaining More Than One Shift Register
Det anmärkningsvärda med skiftregister är att om de ges mer än 8-bitars information (eller hur stort deras register än är), kommer de att flytta ut de andra extra bitarna igen. Det betyder att du kan koppla ihop en serie av dem, trycka in en lång kedja av bitar och få den distribuerad till varje register separat, allt utan ytterligare kodning från din sida.
Även om vi inte kommer att beskriva processen eller schemat 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 och vad kan du göra med det?Arduino är en anmärkningsvärd liten elektronikenhet, men om du aldrig har använt en tidigare, exakt vad är de, och vad kan du göra med en? Läs mer ?
- Vad är ett Arduino Starter Kit och vad innehåller det? Vad ingår i ett Arduino Starter Kit? [MakeUseOf förklarar]Jag har tidigare introducerat Arduinos hårdvara med öppen källkod här på MakeUseOf, men du kommer att behöva mer än bara den faktiska Arduino för att bygga något av den och faktiskt komma igång. Arduino "startpaket" är... Läs mer
- Fler coola komponenter att köpa med ditt startpaket 8 fler coola komponenter för dina Arduino-projektSå du funderar på att skaffa ett Arduino startpaket, men undrar om några grundläggande lysdioder och motstånd kommer att räcka för att hålla dig sysselsatt under helgen? Antagligen inte. Här är ytterligare 8... Läs mer
- Komma igång med ditt Arduino Starter Kit? Installera drivrutiner och konfigurera kortet och porten Komma igång med ditt Arduino Starter Kit - Installera drivrutiner och konfigurera kortet och portenSå du har köpt dig ett Arduino-startkit, och möjligen några andra slumpmässigt coola komponenter - vad nu? Hur kommer man egentligen igång med att programmera den här Arduino-grejen? Hur ställer du upp det... Läs mer
- Fritzing, ett gratis verktyg för att rita kretsscheman Fritzing - det ultimata verktyget för att skissa på elektronikprojekt [Cross Platform]Trots att det låter som en alcopop är Fritzing faktiskt en otrolig gratis programvara du kan använda för att skapa krets- och komponentdiagram för användning med elektronikkort med snabba prototyper som den fantastiska öppen källkod Arduino... Läs mer
- En närmare titt på strukturen för en Arduino-app och exempelblinkprogrammet Första stegen med Arduino: En närmare titt på kretskortet och strukturen för ett programFörra gången jag lämnade dig efter att ha ställt in din Arduino för att fungera med Mac eller Windows, och efter att ha laddat upp en enkel testapp som blinkade med den inbyggda lysdioden. Idag ska jag förklara koden... Läs mer
- Arduino Xmas tree lights projekt An Arduino Project: How To Make Flashy Christmas Lights OrnamentsDetta är nästa del i vår lärande Arduino-serie, och den här gången kommer vi att lära oss om och använda Arrays för att göra en liten julgransprydnad med olika blinkande sekvenser. Det här skulle vara en... Läs mer (AKA lära sig om arrayer)
- Vad är binärt? Vad är binärt? [Teknik förklaras]Med tanke på att binär är så absolut grundläggande för existensen av datorer, verkar det konstigt att vi aldrig har tagit itu med ämnet förut - så idag tänkte jag ge en kort översikt över vad binär ... Läs mer
Det är så långt som vi kommer att gå med skiftregister idag, eftersom jag tror att vi har täckt mycket. Som alltid vill jag uppmuntra dig att leka med och justera koden, och ställ gärna alla frågor du kan ha i kommentarerna, eller till och med dela en länk till ditt fantastiska skiftregisterbaserade projekt.
James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. Han är huvudutvecklaren av MakeUseOf och ägnar sin fritid åt att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.