Publicitate
Astăzi voi încerca să vă învăț un pic despre Registrele Shift. Acestea sunt o parte destul de importantă a programării Arduino, practic pentru că extind numărul de ieșiri pe care le puteți utiliza, în schimbul a doar 3 pini de control. Puteți, de asemenea, să înregistrați registre de schimb de lanțuri de margarete pentru a obține și mai multe rezultate.
Totuși, acesta este un salt semnificativ în dificultate față de tutorialele anterioare și sugerez cu tărie să aveți un într-adevăr o bună înțelegere a materialului precedent (link-uri la sfârșitul acestui articol), precum și înțelegere elementele de bază ale binarului Ce este binarul? [Tehnologie explicată]Având în vedere că binarul este atât de fundamental pentru existența calculatoarelor, pare ciudat că nu am mai abordat subiectul până acum - așa că astăzi am crezut că voi oferi o scurtă privire de ansamblu a ceea ce binare ... Citeste mai mult despre care am scris ultima dată.
Ce este un Shift Register?
Un registru de schimb de ieșire, tehnic vorbind, primește date în serie și le transmite în paralel. În termeni practice, acest lucru înseamnă că putem trimite rapid o mulțime de comenzi de ieșire pe cip, să-i spunem să activeze, iar ieșirile vor fi trimise la pinii relevanți. În loc să repetăm fiecare pin, pur și simplu trimitem ieșirea necesară tuturor pinilor simultan, ca un singur octet sau mai multe informații.
Dacă vă ajută să înțelegeți, puteți gândi un registru de schimburi ca un „tablou” de ieșiri digitale, dar putem sări peste comenzile obișnuite digitalWrite și pur și simplu trimitem o serie de biți pentru a le activa sau off.
Cum functioneazã?
Registrul de schimburi pe care îl vom folosi - 74HC595N inclus în kitul de pornire Oomlout - are nevoie de doar 3 pini de control. Primul este un ceas - nu trebuie să vă faceți prea multe griji în acest sens, deoarece controlează bibliotecile seriale Arduino it - dar un ceas este practic un impuls electric pornit / oprit care stabilește ritmul pentru semnalul de date.
Pinul de blocare este folosit pentru a indica registrul de schimburi atunci când ar trebui să activeze și să dezactiveze ieșirile în funcție de biții pe care tocmai i-am trimis-o, adică, să-i blocheze.
În cele din urmă, pinul de date este locul unde am trimis datele seriale reale cu biți pentru a determina starea de pornire / oprire a ieșirilor registrului de schimb.
Întregul proces poate fi descris în 4 etape:
- Setați pinul de date la mare sau mic pentru primul pin de ieșire din registrul de schimburi.
- Apăsați ceasul pentru „mutarea” datelor în registru.
- Continuați să setați datele și să împingeți ceasul până când ați setat starea necesară pentru toți pinii de ieșire.
- Apăsați știftul pentru a activa secvența de ieșire.
Punerea în aplicare
Aveți nevoie de următoarele componente pentru acest proiect:
- Cip de registru de schimb 7HC595N
- 8 LED-uri și rezistențe corespunzătoare sau orice altceva doriți să ieșiți
- Panoul obișnuit, conectori și un Arduino de bază
Dacă aveți kitul de pornire Oomlout, puteți descărca aspectul plăcii de panou de aici.
Iată videoclipul de asamblare:
Dispunerea plăcii:

Și versiunea mea asamblată:

Am modificat codul original furnizat de Ooolmout, dar dacă doriți să încercați în schimb, acesta poate fi descărcat complet aici. Explicația codului este inclusă, deci copiați și lipiți totul de jos sau pastebin pentru a citi o explicație a codului.
/ * * | Tutorial pentru înregistrarea schimbării, bazat pe | * | Arduino Experimentation Kit CIRC-05 | * |.: 8 mai multe LED-uri:. (74HC595 Shift Register) | * * | Modificat de James @ MakeUseOf.com | * * / // Definiții pin. // 7HC595N are trei pini. date int = 2; // unde trimitem biții pentru controlul ieșirilor int clock = 3; // păstrează datele în sincronizare. int zăvorul = 4; // spune registrul de schimbare pentru a activa secvența de ieșire a voidului instalat () {// setați cei trei pini de control la ieșirea pinMode (date, OUTPUT); pinMode (ceas, OUTPUT); pinMode (zăvor, OUTPUT); Serial.begin (9600); // astfel putem trimite mesaje de depanare pe monitorul serial. } bucla void () {outputBytes (); // ieșirea noastră de bază care scrie 8 biți pentru a arăta cum funcționează un registru de schimbări. //outputIntegers(); // trimite o valoare întreagă ca date în loc de octeți, numărând efectiv în binar. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (zăvor, LOW); Serial.println (i); // Debugare, trimitere ieșire la monitorul serial shiftOut (date, ceas, MSBFIRST, i); digitalWrite (zăvor, HIGH); întârziere (100); }} void outputBytes () {/ * Bytes sau 8 biți sunt reprezentate de un B urmat de 8 0 sau 1s. În acest caz, consideră că acesta este ca un tablou pe care îl vom folosi pentru a controla cele 8 LED-uri. Aici am început valoarea de byte ca 00000001 * / byte dataValues = B00000001; // schimbați acest lucru pentru a ajusta modelul de pornire / * În bucla for, începem prin tragerea zăvorului jos, folosind funcția shiftOut Arduino pentru discutați cu registrul de schimbări, trimițându-i octețul nostru de dateValoare reprezentând starea LED-urilor, apoi trageți zăvorul înalt pentru a bloca cele în loc. În cele din urmă, mutăm biții un loc spre stânga, ceea ce înseamnă că următoarea iterație va porni următorul LED din serie. Pentru a vedea valoarea binară exactă trimisă, verificați monitorul serial. * / for (int i = 0; i <8; i ++) {digitalWrite (zăvor, LOW); Serial.println (dataValues, BIN); // Debug, trimitere ieșire la monitorul serial shiftOut (date, ceas, MSBFIRST, dataValues); digitalWrite (zăvor, HIGH); dataValues = dateValues << 1; // Schimbați biții un loc spre stânga - schimbați în >> pentru a ajusta întârzierea direcției (100); } }
Schimbarea de biți (funcția OutputBytes)
În primul exemplu de buclă - outputBytes () - codul utilizează o secvență de 8 biți (un octet) pe care apoi o mută la stânga fiecărei iterații a buclei for. Este important să rețineți că dacă treceți mai departe decât este posibil, bitul este pur și simplu pierdut.
Schimbarea de biți se face folosind << sau >> urmată de numărul de biți pe care doriți să-l schimbați.
Vedeți următorul exemplu și asigurați-vă că înțelegeți ce se întâmplă:
byte val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, am pierdut ceilalți biți! val = val >> 5 // B00000010.
Trimiterea numerelor întregi în schimb (funcția OutputIntegers)
Dacă trimiteți un număr întreg la registrul de schimburi în loc de un octet, acesta va converti pur și simplu numărul într-o secvență de octeți binari. În această funcție (dezacord în buclă și încărcare pentru a vedea efectul), avem o buclă for care contează de la 0-255 (cel mai mare număr întreg pe care îl putem reprezenta cu un octet) și îl trimite în loc. Practic, contează în mod binar, deci secvența poate părea puțin întâmplătoare, cu excepția cazului în care LED-urile dvs. sunt expuse într-o linie lungă.
De exemplu, dacă citiți articolul binar explicat, veți ști că numărul 44 va fi reprezentat ca 00101100, astfel încât ledurile 3,5,6 vor fi luminate în acel moment din secvență.

Daisy Chaining Mai mult decât un Shift Register
Lucrul remarcabil despre Shift Registers este că, dacă li se oferă mai mult de 8 biți de informații (sau oricât de mare ar fi registrul lor), vor schimba din nou celelalte biți suplimentare. Acest lucru înseamnă că puteți conecta o serie de ei împreună, împingeți într-un lanț lung de biți și puteți să-l distribuiți în fiecare registru separat, totul fără codificare suplimentară din partea dvs.
Cu toate că nu vom detalia procesul sau schemele de aici, dacă aveți mai multe registre de schimb, puteți încerca proiectul de pe site-ul oficial Arduino aici.
Alte articole din serie:
- Ce este Arduino și ce poți face cu asta Ce este Arduino și ce poți face cu asta?Arduino este un mic dispozitiv electronic, remarcabil, dar dacă nu ai mai folosit niciodată unul, exact ce sunt acestea și ce poți face cu unul? Citeste mai mult ?
- Ce este un kit de pornire Arduino și ce conține? Ce este inclus într-un kit de pornire Arduino? [FaceUseOf Explică]Am introdus anterior hardware-ul Arduino open-source aici pe MakeUseOf, dar veți avea nevoie de mai mult decât doar Arduino pentru a construi ceva din el și pentru a începe de fapt. Arduino "seturile de început" sunt ... Citeste mai mult
- Mai multe componente cool pentru a cumpăra cu setul de pornire 8 mai multe componente minunate pentru proiectele dvs. ArduinoDeci, te gândești să obții un kit de pornire Arduino, dar te întrebi dacă unele LED-uri și rezistențe de bază vor fi suficiente pentru a te menține ocupat pentru weekend? Probabil ca nu. Iată alte 8 ... Citeste mai mult
- Noțiuni introductive despre setul dvs. Arduino Starter? Instalarea de drivere și configurarea plăcii și a portului Noțiuni introductive cu setul dvs. de pornire Arduino - Instalarea de drivere și configurarea plăcii și a portuluiAșadar, v-ați cumpărat un kit de pornire Arduino și, probabil, alte alte componente aleatoare aleatorilor - acum ce? Cum te apuci de fapt cu programarea acestui lucru Arduino? Cum o configurați ... Citeste mai mult
- Fritzing, un instrument gratuit pentru desenarea diagramelor de circuite Fritzing - Instrumentul final pentru schițarea proiectelor electronice [platformă încrucișată]În ciuda sunării unui alcopop, Fritzing este de fapt un pic incredibil de software gratuit pe care îl puteți utiliza pentru a crea diagrame de circuite și componente pentru utilizarea cu plăci electronice de prototipare rapidă, cum ar fi fantasticul open-source Arduino ... Citeste mai mult
- O privire mai atentă la structura unei aplicații Arduino și a programului de clipire de exemplu Primii pași cu Arduino: o privire mai atentă la placa de circuit și structura unui programUltima dată te-am lăsat să îți configurezi Arduino să funcționeze cu Mac sau Windows și după ce ai încărcat o aplicație de testare simplă care a clipit LED-ul de bord. Astăzi voi explica codul ... Citeste mai mult
- Proiect de Arduino Xmas lumini de copac Un proiect Arduino: Cum să realizezi ornamente luminoase de CrăciunAceasta este următoarea parte din seria noastră de învățare Arduino, și de această dată vom învăța și vom folosi Array-uri pentru a realiza un mic ornament de brad de Crăciun cu diverse secvențe intermitente. Acesta ar fi un ... Citeste mai mult (AKA afla despre tablouri)
- Ce este binarul? Ce este binarul? [Tehnologie explicată]Având în vedere că binarul este atât de fundamental pentru existența calculatoarelor, pare ciudat că nu am mai abordat subiectul până acum - așa că astăzi am crezut că voi oferi o scurtă privire de ansamblu a ceea ce binare ... Citeste mai mult
Este în măsura în care vom merge cu registrele de schimb astăzi, deoarece cred că am acoperit o mulțime. Ca oricând, te-aș încuraja să te joci și să reglezi codul și nu te simți liber să-ți pui întrebări pe care le poți avea în comentarii sau chiar să împărtășești un link către proiectul tău bazat pe registrul de schimburi.
James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.