I en af de tidligere artikler berørte vi allerede kort brugen af et skiftregister, især 74HC595. Lad os se nærmere på mulighederne og proceduren til at arbejde med dette mikrokredsløb.
Nødvendig
- - Arduino;
- - skiftregister 74HC595;
- - tilslutning af ledninger.
Instruktioner
Trin 1
Skiftregister 74HC595 og lignende anvendes som enheder til konvertering af serielle data til parallelle og kan også anvendes som en "lås" til data, der holder den overførte tilstand.
Pinout (pinout) vises i figuren til venstre. Deres formål er som følger.
Q0… Q7 - parallelle dataudgange;
GND - jord (0 V);
Q7 '- seriel dataoutput;
^ MR - reset master (aktiv lav);
SHcp - skifte register ur input;
STcp - "latch" -impulsindgang;
^ OE - udgangsaktivering (aktiv lav);
Ds - seriel dataindgang;
Vcc - strømforsyning +5 V.
Strukturelt er mikrokredsløbet lavet i flere typer tilfælde; Jeg vil bruge den, der er vist i figuren til højre - output - fordi det er lettere at bruge med et brødbræt.
Trin 2
Lad mig kort huske SPI serielle interface, som vi vil bruge til at overføre data til skiftregisteret.
SPI er en to-leder tovejs seriel grænseflade, hvor en master og en slave deltager. Mesteren i vores tilfælde vil være Arduino, slaven vil være register 74HC595.
Udviklingsmiljøet for Arduino har et indbygget bibliotek til arbejde på SPI-grænsefladen. Når du anvender det, bruges konklusionerne, der er markeret i figuren:
SCLK - SPI ur output;
MOSI - data fra master til slave;
MISO - data fra slave til master;
SS - slavevalg.
Trin 3
Lad os sammensætte kredsløbet som på billedet.
Jeg vil også forbinde en logisk analysator til alle stifterne i skiftregisterets mikrokredsløb. Ved hjælp af det vil vi se, hvad der sker på det fysiske niveau, hvilke signaler der går, og vi vil finde ud af, hvad de betyder. Det skal se ud som billedet.
Trin 4
Lad os skrive en sådan skitse og indlæse den i Arduino-hukommelsen.
Variablen PIN_SPI_SS er en intern standardkonstant, der svarer til pin "10" i Arduino, når den bruges som master på SPI-grænsefladen, vi bruger her. I princippet kunne vi lige så godt bruge enhver anden digital pin på Arduino; så skulle vi erklære det og indstille dets driftstilstand.
Ved at fodre denne pin LAV aktiverer vi vores skiftregister til transmission / modtagelse. Efter transmissionen hæver vi spændingen til HIGH igen, og udvekslingen slutter.
Trin 5
Lad os gøre vores kredsløb til arbejde og se, hvad logikanalysatoren viser os. Det generelle billede af tidsdiagrammet er vist i figuren.
Den blå stiplede linje viser 4 SPI-linjer, den røde stiplede linje viser 8 kanaler med parallelle data i skiftregisteret.
Punkt A på tidsskalaen er det øjeblik, hvor tallet "210" overføres til skiftregisteret, B er det øjeblik, hvor tallet "0" skrives, C er den cyklus, der gentages fra begyndelsen.
Som du kan se, fra A til B - 10,03 millisekunder og fra B til C - 90,12 millisekunder, næsten som vi spurgte i skitsen. En lille tilføjelse i 0, 03 og 0, 12 ms er tidspunktet for overførsel af serielle data fra Arduino, så vi har ikke ligefrem 10 og 90 ms her.
Trin 6
Lad os se nærmere på afsnit A.
Øverst er der en lang puls, hvormed Arduino initierer transmission på SPI-ENABLE-linjen - slavevalg. På dette tidspunkt begynder at generere SPI-CLOCK-urimpulser (anden linje fra toppen), 8 stykker (til overførsel af 1 byte).
Den næste linje fra toppen er SPI-MOSI - de data, som vi overfører fra Arduino til skiftregisteret. Dette er vores nummer "210" i binær - "11010010".
Efter afslutningen af overførslen ved slutningen af SPI-AKTIV puls ser vi, at skiftregisteret har indstillet den samme værdi på sine 8 ben. Jeg har fremhævet dette med en blå prikket linje og mærket værdierne for klarhed.
Trin 7
Lad os nu rette opmærksomheden mod afsnit B.
Igen starter det hele med at vælge en slave og generere 8 urimpulser.
Dataene på SPI-MOSI-linjen er nu "0". I dette øjeblik skriver vi tallet "0" i registret.
Men indtil overførslen er afsluttet, gemmer registeret værdien "11010010". Den sendes ud til de parallelle ben Q0.. Q7 og udsendes, når der er urimpulser i linjen fra den parallelle udgang Q7 'til SPI-MISO-linjen, som vi ser her.
Trin 8
Således har vi undersøgt detaljeret spørgsmålet om informationsudveksling mellem master-enheden, som var Arduino, og 74HC595 skiftregister. Vi lærte at forbinde et skiftregister, skrive data ind i det og læse data fra det.