I en av de forrige artiklene berørte vi allerede bruken av et skiftregister, spesielt 74HC595. La oss se nærmere på funksjonene og fremgangsmåten for å jobbe med denne mikrokretsen.
Nødvendig
- - Arduino;
- - skiftregister 74HC595;
- - tilkobling av ledninger.
Bruksanvisning
Trinn 1
Skiftregister 74HC595 og lignende brukes som innretninger for å konvertere seriell data til parallell, og kan også brukes som en "sperre" for data, som holder den overførte tilstanden.
Pinout (pinout) er vist i figuren til venstre. Formålet deres er som følger.
Q0… Q7 - parallelle datautganger;
GND - jord (0 V);
Q7 '- seriell datautgang;
^ MR - reset master (aktiv lav);
SHcp - skiftregister klokkeinngang;
STcp - "sperre" klokkeimpulsinngang;
^ OE - aktivering av utgang (aktiv lav);
DS - seriell datainngang;
Vcc - strømforsyning +5 V.
Strukturelt sett er mikrokretsen laget i flere typer tilfeller; Jeg vil bruke den som er vist i figuren til høyre - utgangen - fordi det er lettere å bruke med et brødbrett.
Steg 2
La meg kort huske SPI serielle grensesnitt, som vi vil bruke til å overføre data til skiftregisteret.
SPI er et firetråds toveis serielt grensesnitt der en mester og en slave deltar. Mesteren i vårt tilfelle vil være Arduino, slaven vil være register 74HC595.
Utviklingsmiljøet for Arduino har et innebygd bibliotek for å jobbe med SPI-grensesnittet. Når du bruker den, brukes konklusjonene som er markert i figuren:
SCLK - SPI klokkeutgang;
MOSI - data fra master til slave;
MISO - data fra slave til mester;
SS - slavevalg.
Trinn 3
La oss sette sammen kretsen som på bildet.
Jeg vil også koble en logisk analysator til alle pinnene på skiftregistermikrokretsen. Ved hjelp av det vil vi se hva som skjer på det fysiske nivået, hvilke signaler som går hvor, og vi vil finne ut hva de betyr. Det skal se ut som på bildet.
Trinn 4
La oss skrive en skisse som denne og laste den inn i Arduino-minnet.
Variabelen PIN_SPI_SS er en intern standardkonstant som tilsvarer pin "10" av Arduino når den brukes som master på SPI-grensesnittet vi bruker her. I prinsippet kunne vi like godt bruke hvilken som helst annen digital pin på Arduino; da måtte vi erklære det og angi driftsmodus.
Ved å mate denne pinnen LAV, aktiverer vi skiftregisteret vårt for å sende / motta. Etter overføringen hever vi spenningen til HØY igjen, og sentralen avsluttes.
Trinn 5
La oss gjøre kretsen vår til jobb og se hva logikkanalysatoren viser oss. Den generelle visningen av tidsskjemaet er vist i figuren.
Den blå stiplede linjen viser 4 SPI-linjer, den røde stiplede linjen viser 8 kanaler med parallelle data i skiftregisteret.
Punkt A på tidsskalaen er øyeblikket da tallet "210" overføres til skiftregisteret, B er øyeblikket da tallet "0" skrives, C er syklusen som gjentas fra begynnelsen.
Som du kan se, fra A til B - 10,03 millisekunder, og fra B til C - 90,12 millisekunder, nesten som vi spurte i skissen. Et lite tillegg i 0, 03 og 0, 12 ms er tiden for overføring av seriell data fra Arduino, så vi har ikke akkurat 10 og 90 ms her.
Trinn 6
La oss se nærmere på avsnitt A.
Helt på toppen er en lang puls som Arduino setter i gang overføring på SPI-ENABLE-linjen - slavevalg. På dette tidspunktet begynner å generere SPI-CLOCK klokkepulser (andre linje fra toppen), 8 stykker (for overføring av 1 byte).
Neste linje fra toppen er SPI-MOSI - dataene vi overfører fra Arduino til skiftregisteret. Dette er vårt nummer "210" i binær - "11010010".
Etter at overføringen er fullført, på slutten av SPI-AKTIV puls, ser vi at skiftregisteret har satt samme verdi på sine 8 ben. Jeg har markert dette med en blå prikket linje og merket verdiene for klarhet.
Trinn 7
La oss nå rette oppmerksomheten mot seksjon B.
Igjen, alt begynner med å velge en slave og generere 8 klokkepulser.
Dataene på SPI-MOSI-linjen er nå "0". Det vil si at vi for øyeblikket skriver "0" i registeret.
Men til overføringen er fullført, lagrer registeret verdien "11010010". Den sendes ut til parallellpinnene Q0.. Q7, og sendes ut når det er klokkepulser i linjen fra parallellutgangen Q7 'til SPI-MISO-linjen, som vi ser her.
Trinn 8
Dermed har vi studert i detalj spørsmålet om informasjonsutveksling mellom masterenheten, som var Arduino, og 74HC595 skiftregister. Vi lærte å koble et skiftregister, skrive data inn i det og lese data fra det.