Într-unul din articolele anterioare, am atins deja pe scurt utilizarea unui registru de schimbare, în special 74HC595. Să aruncăm o privire mai atentă la capacitățile și procedura de lucru cu acest microcircuit.
Necesar
- - Arduino;
- - registru schimbare 74HC595;
- - conectarea firelor.
Instrucțiuni
Pasul 1
Registrul de schimbare 74HC595 și altele asemenea sunt utilizate ca dispozitive pentru conversia datelor seriale în paralel și pot fi, de asemenea, utilizate ca „blocare” pentru date, păstrând starea transferată.
Pinout (pinout) este prezentat în figura din stânga. Scopul lor este următorul.
Q0 … Q7 - ieșiri paralele de date;
GND - sol (0 V);
Q7 '- ieșire de date seriale;
^ MR - reset master (activ redus);
SHcp - intrare ceas registru shift;
STcp - intrarea impulsului ceasului "zăvor";
^ OE - activare ieșire (activă scăzută);
DS - introducere date seriale;
Vcc - sursa de alimentare +5 V.
Structural, microcircuitul este realizat în mai multe tipuri de cazuri; O voi folosi pe cea prezentată în figura din dreapta - ieșirea - pentru că este mai ușor de utilizat cu o placă de calcul.
Pasul 2
Permiteți-mi să amintesc pe scurt interfața serială SPI, pe care o vom folosi pentru a transfera date în registrul de schimbare.
SPI este o interfață serial bidirecțională cu patru fire la care participă un master și un slave. Stăpânul în cazul nostru va fi Arduino, sclavul va fi registrul 74HC595.
Mediul de dezvoltare pentru Arduino are o bibliotecă încorporată pentru lucrul la interfața SPI. La aplicarea acestuia, se utilizează concluziile care sunt marcate în figură:
SCLK - ieșire ceas SPI;
MOSI - date de la stăpân la sclav;
MISO - date de la sclav la stăpân;
SS - selecție sclavă.
Pasul 3
Să punem împreună circuitul ca în imagine.
Voi conecta, de asemenea, un analizor logic la toți pinii microcircuitului registrului de schimbare. Cu ajutorul acestuia, vom vedea ce se întâmplă la nivel fizic, ce semnale merg unde și vom afla ce înseamnă. Ar trebui să arate ca fotografia.
Pasul 4
Să scriem o schiță ca aceasta și să o încărcăm în memoria Arduino.
Variabila PIN_SPI_SS este o constantă standard internă care corespunde pinului "10" al Arduino atunci când este utilizată ca master a interfeței SPI pe care o folosim aici. În principiu, am putea folosi la fel de bine orice alt pin digital de pe Arduino; atunci ar trebui să-l declarăm și să-i setăm modul de funcționare.
Alimentând acest pin LOW, activăm registrul nostru de schimbare pentru transmisie / recepție. După transmisie, ridicăm din nou tensiunea la HIGH, iar schimbul se termină.
Pasul 5
Să transformăm circuitul nostru în muncă și să vedem ce ne arată analizatorul logic. Vederea generală a diagramei de sincronizare este prezentată în figură.
Linia punctată albastră arată 4 linii SPI, linia punctată roșie arată 8 canale de date paralele ale registrului de deplasare.
Punctul A pe scara de timp este momentul în care numărul "210" este transferat în registrul de schimbare, B este momentul în care este scris numărul "0", C este ciclul care se repetă de la început.
După cum puteți vedea, de la A la B - 10,03 milisecunde și de la B la C - 90,12 milisecunde, aproape așa cum am cerut în schiță. O mică adăugare în 0, 03 și 0, 12 ms este timpul pentru transferul datelor seriale de pe Arduino, deci nu avem exact 10 și 90 ms aici.
Pasul 6
Să aruncăm o privire mai atentă la secțiunea A.
În partea de sus este un impuls lung cu care Arduino inițiază transmisia pe linia SPI-ENABLE - selecția slave. În acest moment, impulsurile de ceas SPI-CLOCK încep să fie generate (a doua linie din partea de sus), 8 bucăți (pentru transferul de 1 octet).
Următoarea linie din partea de sus este SPI-MOSI - datele pe care le transferăm de la Arduino la registrul de schimbare. Acesta este numărul nostru "210" în binar - "11010010".
După finalizarea transferului, la sfârșitul impulsului SPI-ENABLE, vedem că registrul de schimbare a stabilit aceeași valoare pe cele 8 picioare ale sale. Am evidențiat acest lucru cu o linie punctată albastră și am etichetat valorile pentru claritate.
Pasul 7
Acum să ne îndreptăm atenția asupra secțiunii B.
Din nou, totul începe cu alegerea unui sclav și generarea a 8 impulsuri de ceas.
Datele de pe linia SPI-MOSI sunt acum „0”. Adică, în acest moment scriem numărul „0” în registru.
Dar până la finalizarea transferului, registrul stochează valoarea „11010010”. Acesta este transmis la pinii paraleli Q0.. Q7 și este emis când există impulsuri de ceas în linie de la ieșirea paralelă Q7 'la linia SPI-MISO, pe care o vedem aici.
Pasul 8
Astfel, am studiat în detaliu problema schimbului de informații între dispozitivul principal, care a fost Arduino, și registrul de schimbare 74HC595. Am învățat cum să conectăm un registru de schimbare, să scriem date în el și să citim date din acesta.