I en av de tidigare artiklarna berörde vi redan kort användningen av ett skiftregister, särskilt 74HC595. Låt oss titta närmare på funktionerna och proceduren för att arbeta med denna mikrokrets.
Nödvändig
- - Arduino;
- - skiftregister 74HC595;
- - anslutande ledningar.
Instruktioner
Steg 1
Skiftregister 74HC595 och liknande används som anordningar för att konvertera seriell data till parallell, och kan också användas som en "spärr" för data, som håller det överförda tillståndet.
Pinout (pinout) visas i figuren till vänster. Deras syfte är som följer.
Q0 … Q7 - parallella datautgångar;
GND - jord (0 V);
Q7 '- seriell datautgång;
^ MR - återställ master (aktiv låg);
SHcp - skiftregisterklockingång;
STcp - "spärr" klockpulsingång;
^ OE - utgångsaktivering (aktiv låg);
DS - seriell dataingång;
Vcc - strömförsörjning +5 V.
Strukturellt är mikrokretsen tillverkad i flera typer av fall; Jag kommer att använda den som visas i figuren till höger - utgången - för det är lättare att använda med en brödbräda.
Steg 2
Låt mig kort komma ihåg SPI: s seriella gränssnitt, som vi kommer att använda för att överföra data till skiftregistret.
SPI är ett fyra-tråds dubbelriktat seriellt gränssnitt där en mästare och en slav deltar. Befälhavaren i vårt fall kommer att vara Arduino, slaven kommer att registrera 74HC595.
Utvecklingsmiljön för Arduino har ett inbyggt bibliotek för att arbeta med SPI-gränssnittet. När du använder den används slutsatserna som är markerade i figuren:
SCLK - SPI klockutgång;
MOSI - data från master till slave;
MISO - data från slav till mästare;
SS - slavval.
Steg 3
Låt oss sätta ihop kretsen som på bilden.
Jag kommer också att ansluta en logisk analysator till alla stiften i skiftregistermikrokretsen. Med hjälp av det kommer vi att se vad som händer på den fysiska nivån, vilka signaler som går vart och vi kommer att ta reda på vad de betyder. Det borde se ut som på fotot.
Steg 4
Låt oss skriva en sådan skiss och ladda den i Arduino-minnet.
Variabeln PIN_SPI_SS är en intern standardkonstant som motsvarar stift "10" i Arduino när den används som master för SPI-gränssnittet vi använder här. I princip kan vi lika gärna använda någon annan digital stift på Arduino; då måste vi deklarera det och ställa in dess driftläge.
Genom att mata denna stift LÅG aktiverar vi vårt skiftregister för sändning / mottagning. Efter överföringen höjer vi spänningen till HÖG igen och växeln slutar.
Steg 5
Låt oss göra vår krets till arbete och se vad logikanalysatorn visar oss. Den allmänna bilden av tidsdiagrammet visas i figuren.
Den blå streckade linjen visar 4 SPI-linjer, den röda streckade linjen visar 8 kanaler med parallella data i skiftregistret.
Punkt A på tidsskalan är det ögonblick då numret "210" överförs till skiftregistret, B är det ögonblick då siffran "0" skrivs, C är cykeln som upprepas från början.
Som du kan se, från A till B - 10,03 millisekunder och från B till C - 90,12 millisekunder, nästan som vi frågade i skissen. Ett litet tillägg i 0, 03 och 0, 12 ms är tiden för att överföra seriell data från Arduino, så vi har inte exakt 10 och 90 ms här.
Steg 6
Låt oss titta närmare på avsnitt A.
Högst upp är en lång puls med vilken Arduino initierar överföring på SPI-ENABLE-linjen - slavval. Vid denna tidpunkt börjar SPI-CLOCK-klockpulser genereras (andra raden uppifrån), 8 stycken (för överföring av 1 byte).
Nästa rad från toppen är SPI-MOSI - data som vi överför från Arduino till skiftregistret. Detta är vårt nummer "210" i binär - "11010010".
Efter slutförandet av överföringen, i slutet av SPI-ENABLE-pulsen, ser vi att skiftregistret har ställt in samma värde på sina 8 ben. Jag har markerat detta med en blå prickad linje och märkt värdena för tydlighet.
Steg 7
Låt oss nu rikta vår uppmärksamhet till avsnitt B.
Återigen, allt börjar med att välja en slav och generera 8 klockpulser.
Uppgifterna på SPI-MOSI-raden är nu "0". Det vill säga, just nu skriver vi siffran "0" i registret.
Men tills överföringen är klar lagrar registret värdet "11010010". Den matas ut till de parallella stiften Q0.. Q7 och matas ut när det finns klockpulser i linjen från den parallella utgången Q7 'till SPI-MISO-linjen, som vi ser här.
Steg 8
Således har vi studerat i detalj frågan om informationsutbyte mellan masterenheten, som var Arduino, och 74HC595-skiftregistret. Vi lärde oss att ansluta ett skiftregister, skriva data i det och läsa data från det.