Reklame

arduino programmeringI dag vil jeg forsøge at lære dig lidt om skiftregistre. Dette er en forholdsvis vigtig del af Arduino-programmeringen, dybest set fordi de udvider antallet af output, du kan bruge, til gengæld for kun 3 kontrolben. Du kan også daisy-chain skiftregistre sammen for at få endnu flere output.

Dette er dog et markant spring i vanskeligheder fra tidligere tutorials, og jeg anbefaler stærkt, at du har en virkelig god forståelse af det forrige materiale (links i slutningen af ​​denne artikel) samt forståelse det grundlæggende om binære Hvad er binær? [Teknologi forklaret]I betragtning af at binære er så absolut grundlæggende for eksistensen af ​​computere, synes det underligt, at vi aldrig har behandlet emnet før - så i dag havde jeg troet, jeg ville give et kort overblik over, hvad binært ... Læs mere som jeg skrev sidste gang.

Hvad er et skiftregister?

Et outputskiftregister, teknisk set, modtager data i serie og udsender dem parallelt. Rent praktisk betyder det, at vi hurtigt kan sende en masse outputkommandoer til chippen, fortælle den skal aktiveres, og outputene sendes til de relevante stifter. I stedet for at itereere gennem hver pin, sender vi simpelthen det krævede output til alle stifterne på én gang, som en enkelt byte eller mere information.

instagram viewer

Hvis det hjælper dig med at forstå, kan du tænke på et skiftregister som et 'array' af digitale output, men vi kan springe de sædvanlige digitalWrite-kommandoer over og blot sende en række bits for at tænde eller af.

Hvordan virker det?

Skiftregisteret, vi skal bruge - 74HC595N, der er inkluderet i Oomlout-startsættet - behøver kun 3 kontrolben Det første er et ur - du behøver ikke bekymre dig for meget om det, da Arduino-serielibibliotekerne styrer det - men et ur er stort set bare en tænd / sluk-elektrisk puls, der indstiller tempoet for datasignalet.

Låsestiften bruges til at fortælle skifteregisteret, hvornår den skal tænde og slukke dens output i henhold til de bits, vi lige har sendt den - dvs. låse dem på plads.

Endelig er datapinden, hvor vi sendte de faktiske serielle data med bitene for at bestemme skiftregisterets output til / fra.

Hele processen kan beskrives i 4 trin:

  1. Indstil datapinden til høj eller lav for den første outputstift i skiftregisteret.
  2. Impul uret for at ‘flytte’ dataene ind i registeret.
  3. Fortsæt med at indstille dataene og pulse uret, indtil du har indstillet den krævede tilstand for alle outputstifter.
  4. Pulse på låsestiften for at aktivere output sekvensen.

Implementering

Du har brug for følgende komponenter til dette projekt:

  • 7HC595N skiftregisterchip
  • 8 lysdioder og passende modstande, eller hvad du end vil sende til
  • Den sædvanlige brødbræt, stik og en grundlæggende Arduino

Hvis du har Oomlout-startkit, kan du downloade brødbrætlayoutet herfra.

Her er samlingsvideoen:

Kortets layout:

arduino programmering

Og min samlede version:

Arduino-programmering - Spil med skiftregistre (a.k.a Endnu flere LED'er) samlet skiftregistervejledning

Jeg har ændret den originale kode, der er leveret af Ooolmout, men hvis du i stedet vil prøve det, kan den downloades i det fulde her. Forklaring af koden er inkluderet, så kopier og indsæt det hele nedenunder eller pastebin at læse en forklaring af koden.

/ * * | Vejledning til skiftregister, baseret på | * | Arduino eksperimentationssæt CIRC-05 | * |.: 8 flere LED'er:. (74HC595 skiftregister) | * * | Ændret af James @ MakeUseOf.com | * * / // Pin Definitions. // 7HC595N har tre stifter. int data = 2; // hvor vi sender bitene til kontrol af output int ur = 3; // holder dataene synkroniseret. int-lås = 4; // fortæller skiftregisteret, hvornår udgangssekvenset skal annulleres () {// indstil de tre kontrolben til at udføre pinMode (data, OUTPUT); pinMode (ur, OUTPUT); pinMode (lås, OUTPUT); Serial.begin (9600); // så vi kan sende debugmeddelelser til seriel skærm. } void loop () {outputBytes (); // vores grundlæggende output, der skriver 8-bit for at vise, hvordan et skiftregister fungerer. //outputIntegers(); // sender en heltalværdi som data i stedet for bytes, der faktisk tælles binært. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Fejlfinding, afsendelse af output til den serielle monitor shiftOut (data, ur, MSBFIRST, i); digitalWrite (låsen, HØJ); forsinkelse (100); }} void outputBytes () {/ * Bytes eller 8-bit repræsenteres af en B efterfulgt af 8 0 eller 1s. I dette tilfælde skal du betragte dette som en matrix, som vi vil bruge til at kontrollere de 8 LED'er. Her har jeg startet byteværdien som 00000001 * / byte dataValuer = B00000001; // ændre dette for at justere startmønsteret / * I for-loop starter vi med at trække låsen lavt ved hjælp af shiftOut Arduino-funktionen til tale med skiftregisteret, send det vores byte af dataVærdier, der repræsenterer lysdiodernes tilstand, og træk derefter låsen højt for at låse dem ind i placere. Endelig skifter vi bitene et sted til venstre, hvilket betyder, at den næste iteration tænder den næste LED i serien. For at se den nøjagtige binære værdi, der sendes, skal du kontrollere den serielle skærm. * / for (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // Fejlsøgning, afsendelse af output til den serielle monitor shiftOut (data, ur, MSBFIRST, dataValues); digitalWrite (låsen, HØJ); dataValues ​​= dataValues ​​<< 1; // Skift bitene ét sted til venstre - skift til >> for at justere retningsforsinkelse (100); } }

Bitforskydning (OutputBytes-funktion)

I det første loop-eksempel - outputBytes () - bruger koden en 8-bit-sekvens (en byte), som den derefter skifter til venstre for hver iteration af for-loopen. Det er vigtigt at bemærke, at hvis du skifter længere end muligt, er biten simpelthen tabt.

Bitforskydning udføres ved hjælp af << eller >> efterfulgt af antallet af bits, du vil skifte med.

Tjek følgende eksempel, og sørg for at forstå, hvad der sker:

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

Afsendelse af heltal i stedet (OutputIntegers-funktion)

Hvis du sender et helt tal til skiftregisteret i stedet for en byte, konverterer det simpelthen tallet til en binær bytesekvens. I denne funktion (uncomment i loop og upload for at se effekten) har vi en for loop, der tæller fra 0-255 (det højeste heltal, vi kan repræsentere med en byte), og sender det i stedet. Det tæller dybest set binært, så sekvensen kan virke lidt tilfældig, medmindre dine LED'er er anbragt i en lang række.

Hvis du for eksempel læser den binære forklarede artikel, ved du, at tallet 44 vil blive repræsenteret som 00101100, så LEDs 3,5,6 vil lyse på det tidspunkt i sekvensen.

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

Daisy Chaining More Than One Shift Register

Det bemærkelsesværdige ved Shift-registre er, at hvis de får mere end 8-bit information (eller hvor stort deres register der er), vil de flytte de andre ekstra bits ud igen. Dette betyder, at du kan forbinde en serie af dem sammen, skubbe ind en lang kæde af bit og få den distribueret til hvert register separat, alt sammen uden yderligere kodning fra din side.

Selvom vi ikke vil beskrive processen eller skematikken her, kan du prøve projektet fra det officielle Arduino-sted her, hvis du har mere end et skiftregister.

Andre artikler i serien:

  • Hvad er Arduino og hvad kan du gøre med det Hvad er Arduino og hvad kan du gøre med det?Arduino er en bemærkelsesværdig lille elektronik, men hvis du aldrig har brugt en før, hvad er de nøjagtigt, og hvad kan du gøre med en? Læs mere ?
  • Hvad er et Arduino-startkit, og hvad indeholder det? Hvad er inkluderet i et Arduino Starter Kit? [MakeUseOf Explains]Jeg har tidligere introduceret Arduino open source-hardware her på MakeUseOf, men du har brug for mere end bare den faktiske Arduino for at bygge noget ud af det og faktisk komme i gang. Arduino "starter sæt" er ... Læs mere
  • Flere seje komponenter, der kan købes med dit startsæt 8 flere seje komponenter til dine Arduino-projekterSå overvejer du at få et Arduino-startkit, men spekulerer på, om nogle grundlæggende LED'er og modstande vil være nok til at holde dig travlt i weekenden? Sikkert ikke. Her er endnu 8 ... Læs mere
  • Kom godt i gang med dit Arduino Starter Kit? Installation af drivere og opsætning af tavle og port Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af tavlen og havnenSå du har købt dig et Arduino-startpakke og muligvis nogle andre tilfældige, coole komponenter - hvad nu? Hvordan kommer du faktisk i gang med programmeringen af ​​denne Arduino-ting? Hvordan konfigurerer du det ... Læs mere
  • Fritzing, et gratis værktøj til at tegne kredsløbsdiagrammer Fritzing - Det ultimative værktøj til at skitsere elektronikprojekter [Cross Platform]På trods af at det lyder som en alcopop er Fritzing faktisk en utrolig smule gratis software, du kan bruge til at oprette kredsløb og komponentdiagrammer til brug med hurtige prototyper elektroniktavler såsom den fantastiske open source Arduino ... Læs mere
  • Et nærmere kig på strukturen i en Arduino-app og eksemplet Blink-program Første trin med Arduino: Et nærmere kig på kredsløbspladsen og strukturen i et programSidste gang jeg forlod dig, havde du konfigureret din Arduino til at arbejde med Mac eller Windows, og efter at have uploadet en simpel testapp, der blinkede LED-indbygget. I dag skal jeg forklare koden ... Læs mere
  • Arduino Xmas træ lys projekt Et Arduino-projekt: Hvordan man laver prangende julelys ornamenterDette er den næste del af vores Arduino-serie, og denne gang lærer vi om og bruger Arrays til at lave et lille juletræornament med forskellige blinkende sekvenser. Dette ville være en ... Læs mere (AKA læring om matriser)
  • Hvad er binær? Hvad er binær? [Teknologi forklaret]I betragtning af at binære er så absolut grundlæggende for eksistensen af ​​computere, synes det underligt, at vi aldrig har behandlet emnet før - så i dag havde jeg troet, jeg ville give et kort overblik over, hvad binært ... Læs mere

Det er så vidt vi kommer med skiftregistre i dag, da jeg tror, ​​vi har dækket meget. Som altid vil jeg opfordre dig til at lege med og justere koden, og du er velkommen til at stille spørgsmål, du måtte have i kommentarerne, eller endda dele et link til dit fantastiske skiftregisterbaserede projekt.

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.