Arduino Programmering - Spille med Shift Registers (a.k.a enda flere LEDer)

Arduino Programmering - Spille med Shift Registers (a.k.a enda flere LEDer) / DIY

I dag prøver jeg å lære deg litt om Shift Registers. Dette er en ganske viktig del av Arduino programmering, i utgangspunktet fordi de utvider antall utganger du kan bruke, i bytte for kun 3 kontrollpinner. Du kan også meldekjede skiftregister sammen for å få enda flere utganger.

Dette er imidlertid et stort hopp i vanskeligheter fra tidligere opplæringsprogrammer, og jeg anbefaler sterkt at du har en veldig god forståelse av det forrige materialet (lenker i slutten av denne artikkelen), samt å forstå grunnleggende om binær Hva er binært? [Teknologi forklart] Hva er binært? [Teknologi forklart] Gitt at binær er så helt grunnleggende for eksistensen av datamaskiner, virker det merkelig at vi aldri har taklet emnet før - så i dag trodde jeg at jeg ville gi en kort oversikt over hvilket binært ... Les mer som Jeg skrev forrige gang.

Hva er et skiftregister?

Et output shift register, teknisk sett, mottar data i seriell og sender det ut parallelt. I praksis betyr dette at vi raskt kan sende en mengde utgangskommandoer til brikken, fortelle den aktivere, og utgangene sendes til de aktuelle pinnene. I stedet for å iterere gjennom hver pinne, sender vi bare utgangen som kreves for alle pinnene samtidig, som en enkelt byte eller mer informasjon.

Hvis det hjelper deg å forstå, kan du tenke på et skiftregister som et "utvalg" av digitale utganger, men vi kan hoppe over de vanlige digitalWrite-kommandoene og bare sende en serie biter for å slå dem på eller av.

Hvordan virker det?

Skiftregisteret vi skal bruke - 74HC595N inkludert i Oomlout-startpakken - trenger bare 3 kontrollpinner. Den første er en klokke - du trenger ikke bekymre deg for mye om dette da Arduino serielle biblioteker styrer det - men en klokke er i utgangspunktet bare en på / av elektrisk puls som setter tempoet for datasignalet.

Sperrepinnen brukes til å fortelle skiftregisteret når den skal slå utgangene av og på i henhold til biter vi nettopp har sendt den - det vil si å låse dem på plass.

Endelig er datapinnen hvor vi sendte de faktiske serielle dataene med biter for å bestemme på / av-tilstanden i skiftregisterets utganger.

Hele prosessen kan beskrives i 4 trinn:

  1. Sett datapinnen til høy eller lav for den første utgangspinnen på skiftregisteret.
  2. Puls klokken for å "skifte" dataene inn i registret.
  3. Fortsett å stille inn dataene og pulse klokken til du har angitt ønsket tilstand for alle utgangsstifter.
  4. Puls sperren for å aktivere utgangssekvensen.

Gjennomføring

Du trenger følgende komponenter for dette prosjektet:

  • 7HC595N skiftregisterbrikke
  • 8 lysdioder og passende motstander, eller hva du vil sende til
  • Den vanlige breadboard, kontakter, og en grunnleggende Arduino

Hvis du har Oomlout startpakke, kan du laste ned breadboardoppsettet herfra.

Her er samlingsvideoen:

Brettoppsettet:

Og min monterte versjon:

Jeg har endret den originale koden fra Ooolmout, men hvis du vil prøve det i stedet, kan den lastes ned helt her. Forklaring av koden er inkludert, så kopier og lim inn hele saken nedenunder eller pastebin for å lese en forklaring av koden.

/ * ------------------------------------------------ --------- * | Shift Register Tutorial, basert på | * | Arduino Experimentation Kit CIRC-05 | * | .: 8 Flere lysdioder:. (74HC595 Shift Register) | * ------------------------------------------------- -------- * | Modifisert av James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Pin Definisjoner // 7HC595N har tre pins int data = 2; // hvor vi sender biter for å kontrollere utganger int klokke = 3; // holder dataene synkronisert i latch = 4; // forteller skiftregisteret når du skal aktivere utgangssekvensens tomromoppsett () // sett de tre kontrollpinnene til utgang pinMode (data, UTGANG); pinMode (klokke, utgang); pinMode (lås, OUTPUT); Serial.begin (9600); // så vi kan sende feilsøkingsmeldinger til seriell skjerm void loop () outputBytes (); // vår grunnleggende produksjon som skriver 8-bits for å vise hvordan et skiftregister fungerer. // outputIntegers (); // sender en heltallverdi som data i stedet for byte, som faktisk teller i binær.  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 >> for å justere retningsforsinkelsen (100);  

Bit-Shifting (OutputBytes-funksjon)

I det første loop-eksemplet - outputBytes () - koden benytter en 8-biters sekvens (en byte) som den deretter skifter, forlot hver iterasjon av forløpet. Det er viktig å merke seg at hvis du skifter lenger enn mulig, er biten bare tapt.

Bit-shifting er ferdig med å bruke << or >> etterfulgt av antall biter du vil skifte av.

Sjekk ut følgende eksempel og sørg for at du forstår hva som skjer:

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

Sende helheter i stedet (OutputIntegers-funksjon)

Hvis du sender et helt tall til skiftregisteret istedenfor en byte, vil det bare konvertere tallet til en binær byte-sekvens. I denne funksjonen (ikke kommentert i sløyfen og opplasting for å se effekten) har vi en for sløyfe som teller fra 0-255 (det høyeste heltallet vi kan representere med en byte), og sender det i stedet. Det teller i utgangspunktet i binær, så sekvensen kan virke litt tilfeldig, med mindre lysdiodene dine er lagt ut i en lang linje.

Hvis du for eksempel leser den binære forklarte artikkelen, vil du vite at tallet 44 vil bli representert som 00101100, så lysdiodene 3,5,6 kommer til å lyse på det tidspunktet i sekvensen.

Daisy Chaining Mer enn ett Shift Register

Den bemerkelsesverdige tingen om Shift Registers er at hvis de blir gitt mer enn 8 bits informasjon (eller hvor stor deres register er), vil de skifte de andre ekstra bitene ut igjen. Dette betyr at du kan koble sammen en serie av dem sammen, skyve inn en lang kjede av biter, og få den distribuert til hvert register separat, alt uten ekstra koding fra din side.

Selv om vi ikke vil detaljere prosessen eller skjemaene her, hvis du har mer enn ett skiftregister, kan du prøve prosjektet fra det offisielle Arduino nettstedet her.

Andre artikler i serien:

  • Hva er Arduino og hva kan du gjøre med det Hva er Arduino og hva kan du gjøre med det? Hva er Arduino og hva kan du gjøre med det? Arduino er en bemerkelsesverdig liten elektronikk enhet, men hvis du aldri har brukt en før, akkurat hva er de, og hva kan du gjøre med en? Les mer ?
  • Hva er en Arduino Starter Kit og hva inneholder den? Hva er inkludert i en Arduino Starter Kit? [MakeUseOf Forklarer] Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Forklarer] Jeg har tidligere introdusert Arduino open-source hardware her på MakeUseOf, men du trenger mer enn bare den faktiske Arduino å bygge noe ut av det og faktisk komme i gang. Arduino "startpakker" er ... Les mer
  • Flere kjølige komponenter for å kjøpe med startpakken 8 Flere kjølige komponenter for dine Arduino-prosjekter 8 Flere kule komponenter for dine Arduino-prosjekter Så du tenker på å få et Arduino-startpakke, men lurer på om noen grunnleggende lysdioder og motstander kommer til å bli nok til å holde deg opptatt i helgen? Sannsynligvis ikke. Her er en annen 8 ... Les mer
  • Komme i gang med Arduino Starter Kit? Installere drivere og sette opp styret og porten Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og porten Så du har kjøpt deg selv et Arduino startpakke, og muligens noen andre tilfeldige, kule komponenter - nå hva? Hvordan kommer du faktisk i gang med programmering av denne Arduino-tingen? Hvordan setter du opp ... Les mer
  • Fritzing, et gratis verktøy for å tegne kretsdiagrammer Fritzing - Det ultimate verktøyet for å skisse ut elektroniske prosjekter [Cross Platform] Fritzing - Det ultimate verktøyet for å skille ut elektroniske prosjekter [Cross Platform] Til tross for å lyde som en alcopop, er Fritzing faktisk en utrolig bit av gratis programvare du kan bruke til å lage krets- og komponentdiagrammer for bruk med raske prototypingelektronikkbrett som den fantastiske open-source Arduino ... Les mer
  • En nærmere titt på strukturen av en Arduino App & Eksempel Blink Program
  • Arduino Xmas Tree-lysprosjekt Et Arduino-prosjekt: Slik lager du lyse ornamenter i julelys Et Arduino-prosjekt: Slik lager du lyse ornamenter på julelys Dette er neste del i vår lærings Arduino-serie, og denne gangen lærer vi om og bruker Arrays å lage et lite juletre ornament med ulike blinkende sekvenser. Dette ville være en ... Les mer (AKA lærer om arrays)
  • Hva er binært? Hva er binært? [Teknologi forklart] Hva er binært? [Teknologi forklart] Gitt at binær er så helt grunnleggende for eksistensen av datamaskiner, virker det merkelig at vi aldri har taklet emnet før - så i dag tenkte jeg at jeg ville gi en kort oversikt over hvilket binært ... Les mer

Det er så langt vi skal gå med skiftregister i dag, som jeg tror vi har dekket mye. Som noen gang vil jeg oppfordre deg til å leke med og justere koden, og gjerne stille spørsmål du måtte ha i kommentarene, eller til og med dele en link til ditt fantastiske skiftregisterbaserte prosjekt.

Utforsk mer om: Arduino.