Annonse

arduino programmeringI dag skal jeg prøve å lære deg litt om skiftregistre. Dette er en ganske viktig del av Arduino-programmeringen, i utgangspunktet fordi de utvider antall utganger du kan bruke, i bytte for bare 3 kontrollpinner. Du kan også ha kjedeskifteregistre sammen for å få enda flere utganger.

Dette er imidlertid et betydelig hopp i vanskeligheter fra tidligere tutorials, og jeg anbefaler på det sterkeste at du har en virkelig god forståelse av forrige materiale (lenker på slutten av denne artikkelen), samt forståelse de grunnleggende om binær Hva er binær? [Teknologi forklart]Gitt at binær er så absolutt grunnleggende for datamaskinens eksistens, virker det rart at vi aldri har taklet temaet før - så i dag hadde jeg trodd at jeg ville gi en kort oversikt over hva binær ... Les mer som jeg skrev forrige gang.

Hva er et skiftregister?

Et output shift-register, teknisk sett, mottar data i serie og gir dem ut parallelt. Rent praktisk betyr det at vi raskt kan sende en haug med utkommandoer til brikken, fortelle den skal aktiveres, og utgangene vil bli sendt til de aktuelle pinnene. I stedet for å itere gjennom hver pinne, sender vi ganske enkelt utskriften som kreves til alle pinnene samtidig, som en enkelt byte eller mer informasjon.

instagram viewer

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 som er inkludert i Oomlout-startpakken - trenger bare 3 kontrollpinner. Den første er en klokke - du trenger ikke bekymre deg for mye om dette som Arduino-serienes biblioteker kontrollerer det - men en klokke er i utgangspunktet bare en av / på elektrisk puls som setter tempoet for datasignalet.

Sperrebolten brukes til å fortelle skiftregisteret når den skal slå utgangene av og på i henhold til de bitene vi nettopp har sendt den - dvs. låse dem på plass.

Endelig er datapinnen der vi sendte de faktiske seriedataene med bitene for å bestemme av / på-tilstanden til skiftregisterets utganger.

Hele prosessen kan beskrives i fire trinn:

  1. Sett datapinnen til høy eller lav for den første utgangspinnen i skiftregisteret.
  2. Puls på klokken for å "forskyve" dataene i registeret.
  3. Fortsett å stille inn dataene og pulse klokken til du har angitt den nødvendige tilstanden for alle utgangspinner.
  4. Puls låsepinnen for å aktivere utgangssekvensen.

Gjennomføring

Du trenger følgende komponenter for dette prosjektet:

  • 7HC595N skiftregistrebrikke
  • 8 lysdioder og passende motstander, eller hva du vil sende ut til
  • Det vanlige brødbordet, kontaktene og en enkel Arduino

Hvis du har Oomlout-startpakken, kan du laste ned brødbrettoppsettet herfra.

Her er monteringsvideoen:

Tavleoppsettet:

arduino programmering

Og min samlede versjon:

Arduino-programmering - leking med skiftregistre (a.k.a enda flere lysdioder) samlet skiftregisterveiledning

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

/ * * | Shift Register Tutorial, basert på | * | Arduino eksperimentasjonssett CIRC-05 | * |.: 8 Flere lysdioder:. (74HC595 skiftregister) | * * | Endret av James @ MakeUseOf.com | * * / // Pin Definitions. // 7HC595N har tre pinner. int data = 2; // hvor vi sender bitene for å kontrollere utganger int klokke = 3; // holder dataene synkronisert. int-sperre = 4; // forteller skiftregisteret når du vil aktivere utløpssekvenset for tomrom () {// sett de tre kontrollpinnene til å sende ut pinMode (data, OUTPUT); pinMode (klokke, UTGANG); pinMode (sperre, UTGANG); Serial.begin (9600); // slik at vi kan sende feilsøkingsmeldinger til seriell monitor. } void loop () {outputBytes (); // vår grunnleggende utgang som skriver 8-bits for å vise hvordan et skiftregister fungerer. //outputIntegers(); // sender en heltallverdi som data i stedet for byte, og teller effektivt i binær. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Feilsøke, sende utdata til den serielle monitor shiftOut (data, klokke, MSBFIRST, i); digitalWrite (sperre, HØY); forsinkelse (100); }} void outputBytes () {/ * Bytes, eller 8-bits, er representert med en B etterfulgt av 8 0 eller 1s. I dette tilfellet kan du vurdere at dette er som en matrise som vi vil bruke til å kontrollere de 8 lysdiodene. Her har jeg startet byteverdien som 00000001 * / byte dataValuer = B00000001; // endre dette for å justere startmønsteret / * I for-loop begynner vi med å trekke sperren lavt ved å bruke shiftOut Arduino-funksjonen til snakk med skiftregisteret, send det vår byte med dataverdier som representerer lysdiodenes tilstand, og trekk deretter sperren høyt for å låse dem i plass. Til slutt forskyver vi bitene ett sted til venstre, noe som betyr at neste iterasjon vil slå på neste LED i serien. For å se den nøyaktige binære verdien som sendes, sjekk seriell monitor. * / for (int i = 0; i <8; i ++) {digitalWrite (lås, lav); Serial.println (dataValues, BIN); // Feilsøke, sende utdata til seriemonitor shiftOut (data, klokke, MSBFIRST, dataValues); digitalWrite (sperre, HØY); dataValues ​​= dataValues ​​<< 1; // Skyv bitene ett sted til venstre - bytt til >> for å justere retningsforsinkelse (100); } }

Bitforskyvning (OutputBytes-funksjon)

I det første sløyfeeksemplet - outputBytes () - benytter koden en 8-bits sekvens (en byte) som den deretter skifter til venstre for hver iterasjon av for loop. Det er viktig å merke seg at hvis du skifter lenger enn det er mulig, er biten ganske enkelt tapt.

Bitskifting gjøres ved å bruke << eller >> etterfulgt av antall biter du vil skifte etter.

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

byteval = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, vi mistet de andre bitene! val = val >> 5 // B00000010. 

Sende heltal i stedet (OutputIntegers-funksjon)

Hvis du sender et helt tall til skiftregisteret i stedet for en byte, vil det ganske enkelt konvertere tallet til en binærbytesekvens. I denne funksjonen (uncomment i loopen og laste opp for å se effekten), har vi en for loop som teller fra 0-255 (det høyeste heltallet vi kan representere med en byte), og sender det i stedet. Det teller i utgangspunktet binært, 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 blir representert som 00101100, så lysdioder 3,5,6 kommer til å lyse på det punktet i sekvensen.

Arduino-programmering - leking med skiftregistre (a.k.a enda flere lysdioder) binær 44

Daisy Chaining More Than One Shift Register

Det oppsiktsvekkende med Shift Registers er at hvis de får mer enn 8-bits informasjon (eller hvor stort registeret er), vil de flytte de andre ekstra bitene ut igjen. Dette betyr at du kan koble sammen en serie av dem, skyve inn en lang bitkjede og få den distribuert til hvert register hver for seg, uten noen ekstra koding fra din side.

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

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?Arduino er et bemerkelsesverdig lite elektronikkapparat, men hvis du aldri har brukt en før, hva er de egentlig, og hva kan du gjøre med en? Les mer ?
  • Hva er et Arduino Starter Kit, og hva inneholder det? Hva er inkludert i et Arduino Starter Kit? [MakeUseOf Explains]Jeg har tidligere introdusert Arduino open source-maskinvare her på MakeUseOf, men du trenger mer enn bare den faktiske Arduino for å bygge noe ut av det og faktisk komme i gang. Arduino "startpakker" er ... Les mer
  • Flere kule komponenter du kan kjøpe med startpakken 8 kule komponenter til Arduino-prosjektene dineSå du tenker på å skaffe deg et Arduino-startsett, men lurer på om noen grunnleggende LED-er og motstander vil være nok til å holde deg opptatt til helgen? Sannsynligvis ikke. Her er ytterligere 8 ... Les mer
  • Komme i gang med Arduino Starter Kit? Installere drivere og konfigurere styre og port Komme i gang med Arduino Starter Kit - Installere drivere og sette opp styret og portenSå, du har kjøpt deg et Arduino-startsett, og muligens noen andre tilfeldige kule komponenter - hva nå? Hvordan kommer du faktisk i gang med å programmere denne Arduino-tingen? Hvordan setter du det opp ... Les mer
  • Fritzing, et gratis verktøy for å tegne kretsdiagrammer Fritzing - Det ultimate verktøyet for å skisse ut elektroniske prosjekter [Cross Platform]Til tross for at det høres ut som en alcopop, er Fritzing faktisk en utrolig liten gratis programvare du kan bruke til å lage krets- og komponentdiagrammer for bruk med raske prototyping av elektronikktavler, for eksempel den fantastiske open-source Arduino ... Les mer
  • Et nærmere blikk på strukturen til en Arduino-app og eksempelblinkprogrammet Første trinn med Arduino: Et nærmere blikk på kretskortet og strukturen i et programForrige gang jeg forlot deg etter å ha satt opp Arduino-en din til å fungere med Mac eller Windows, og etter å ha lastet opp en enkel test-app som blinket LED-lampen ombord. I dag skal jeg forklare koden ... Les mer
  • Arduino Xmas trelys prosjekt Et Arduino-prosjekt: Hvordan lage prangende orgeler til julelysDette er neste del i vår læring Arduino-serie, og denne gangen skal vi lære om og bruke Arrays til å lage et lite juletreornament med forskjellige blinkende sekvenser. Dette ville være en ... Les mer (AKA lærer om matriser)
  • Hva er binær? Hva er binær? [Teknologi forklart]Gitt at binær er så absolutt grunnleggende for datamaskinens eksistens, virker det rart at vi aldri har taklet temaet før - så i dag hadde jeg trodd at jeg ville gi en kort oversikt over hva binær ... Les mer

Det er så langt vi kommer med skiftregistre i dag, for jeg tror vi har dekket mye. Som alltid 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 lenke til det fantastiske skiftregisterbaserte prosjektet.

James har en BSc i kunstig intelligens, og er CompTIA A + og Network + sertifisert. Han er hovedutvikler av MakeUseOf, og bruker fritiden sin på å spille VR paintball og brettspill. Han har bygd pc-er siden han var liten.