
Edmund Richardson
0
3181
961
I 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 rigtig god forståelse af det forrige materiale (links i slutningen af denne artikel), samt at forstå det grundlæggende i binære Hvad er binært? [Teknologi forklaret] Hvad er binært? [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 troede jeg, at jeg ville give en kort oversigt over, hvilken binær ... 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 nødvendige output til alle stifterne på én gang, som en enkelt byte eller mere information.
Hvis det hjælper dig med at forstå, kan du tænke på et skiftregister som en 'matrix' af digitale udgange, men vi kan springe over de sædvanlige digitalWrite-kommandoer og blot sende en række bits for at tænde eller slukke dem.
Hvordan virker det?
Skiftregisteret, vi skal bruge - 74HC595N, der er inkluderet i Oomlout-startsættet - behøver kun 3 kontroltapper. Det første er et ur - du behøver ikke bekymre dig for meget om dette, da Arduino serielle biblioteker kontrollerer det - men et ur er stort set bare en tænd / sluk-elektrisk puls, der sætter 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 datapinnen, hvor vi sendte de faktiske serielle data med bitene for at bestemme on / off-tilstand for skiftregisterets output.
Hele processen kan beskrives i 4 trin:
- Indstil datapinden til høj eller lav for den første outputstift i skiftregisteret.
- Impul uret for at 'flytte' dataene ind i registeret.
- Fortsæt med at indstille dataene og pulse uret, indtil du har indstillet den påkrævede tilstand for alle outputstifter.
- 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:
Og min samlede version:
Jeg har ændret den oprindelige kode fra Ooolmout, men hvis du vil prøve det i stedet, kan den downloades i det fulde her. Forklaring af koden er inkluderet, så kopier og indsæt det hele nedenunder eller pastin for at læse en forklaring af koden.
/ * ------------------------------------------------ --------- * | Vejledning til skiftregistrering, baseret på | * | Arduino eksperimentationssæt CIRC-05 | * | .: 8 Flere lysdioder:. (74HC595 skiftregister) | * ------------------------------------------------- -------- * | Ændret af James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Pin Definitioner // 7HC595N har tre pins int data = 2; // hvor vi sender bitene til kontrol af output int ur = 3; // holder dataene synkroniseret i låsen = 4; // fortæller skiftregisteret, hvornår udgangssekvensen skal være ugyldig () // indstille de tre kontrolben til output pinMode (data, OUTPUT); pinMode (ur, OUTPUT); pinMode (lås, OUTPUT); Serial.begin (9600); // så vi kan sende debug-meddelelser 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); // 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 <> 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 loop. Det er vigtigt at bemærke, at hvis du skifter længere end muligt, er biten simpelthen tabt.
Bitskift udføres ved hjælp af <> 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 <> 5 // B00000010
Afsendelse af heltal i stedet (OutputIntegers-funktion)
Hvis du sender et helt tal til skiftregisteret i stedet for en byte, konverteres det simpelthen til et binært 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.
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 yderligere bits ud igen. Dette betyder, at du kan forbinde en serie af dem sammen, skubbe ind en lang kæde af bits og få den distribueret til hvert register separat, alt sammen uden yderligere kodning fra din side.
Selvom vi ikke vil beskrive processen eller skemaerne her, kan du prøve projektet fra det officielle Arduino-sted her, hvis du har mere end et skiftregister her.
Andre artikler i serien:
- Hvad er Arduino & Hvad kan du gøre med det Hvad er Arduino & 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? ?
- Hvad er et Arduino-startkit, og hvad indeholder det? Hvad er der inkluderet i et Arduino Starter Kit? [MakeUseOf Explains] Hvad er der inkluderet i et Arduino Starter Kit? [MakeUseOf forklarer] 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 ...
- Flere seje komponenter, der kan købes med dit startsæt 8 Flere seje komponenter til dine Arduino-projekter 8 Flere seje komponenter til dine Arduino-projekter Så overvejer du at få et Arduino-startkit, men spekulerer på, om nogle basale LED'er og modstande vil blive nok til at holde dig travlt i weekenden? Sikkert ikke. Her er endnu 8 ...
- Kom godt i gang med dit Arduino Starter Kit? Installation af drivere og opsætning af tavlen og havnen Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af Board & Port Kom godt i gang med dit Arduino Starter Kit - Installation af drivere og opsætning af Board & Port Så du har købt dig selv 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 ...
- Fritzing, et gratis værktøj til at tegne kredsløbsdiagrammer Fritzing - Det ultimative værktøj til at skitsere elektronikprojekter [Cross Platform] Fritzing - Det ultimative værktøj til at skitsere elektronikprojekter [Cross Platform] Selvom 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 ...
- Et nærmere kig på strukturen i en Arduino-app & eksemplet Blink-program Første trin med Arduino: Et nærmere kig på kredsløbspladsen og strukturen i et program Første trin med Arduino: Et nærmere kig på kredsløbspladsen og strukturen Af et program Sidste gang forlod jeg dig med at konfigurere din Arduino til at arbejde med Mac eller Windows og have uploadet en simpel testapp, der blinkede LED-indbygget. I dag skal jeg forklare koden ...
- Arduino Xmas-træbelysningsprojekt Et Arduino-projekt: Hvordan man laver prangende julelyspynt Et Arduino-projekt: Hvordan man fremstiller prangende julelyspynt Dette er den næste del i vores lærende Arduino-serie, og denne gang lærer vi om og bruger Arrays at lave et lille juletræornament med forskellige blinkende sekvenser. Dette ville være en ... (AKA læring om matriser)
- Hvad er binær? Hvad er binær? [Teknologi forklaret] Hvad er binært? [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 troede jeg, at jeg ville give et kort overblik over, hvad binært ...
Det er så vidt vi går 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.