Arduino de programare - joaca cu registrele de schimbare (a.k.a chiar mai multe LED-uri)
Azi voi încerca să vă învăț câte ceva despre registrele de schimbare. Acestea reprezintă o parte destul de importantă a programării Arduino, în principal pentru că acestea extind numărul de ieșiri pe care le puteți utiliza, în schimbul a doar 3 pini de control. De asemenea, puteți regăsi împreună registrele de schimbare a lanțurilor pentru a obține mai multe rezultate.
Acesta este un salt semnificativ în dificultate din tutorialele anterioare, însă vă sugerez să aveți o înțelegere foarte bună asupra materialelor anterioare (legături la sfârșitul acestui articol), precum și să înțelegeți elementele de bază ale binarului Ce este binar? [Tehnologie explicată] Ce este binar? [Tehnologie Explained] Având în vedere că binar este atât de absolut fundamental pentru existența de computere, pare ciudat că nu am abordat niciodată subiectul anterior - așa că astăzi m-am gândit că voi da o scurtă prezentare a ceea ce binar ... Read More Am scris ultima oară.
Ce este un registru de schimbare??
Un registru de transfer de ieșire, din punct de vedere tehnic, primește date în serie și le transmite în paralel. În termeni practici, acest lucru înseamnă că putem trimite rapid o grămadă de comenzi de ieșire la chip, să-i spunem să se activeze, iar ieșirile vor fi trimise la pinii relevanți. În loc să iterăm prin fiecare pin, trimitem pur și simplu ieșirea necesară tuturor pinilor simultan, ca un singur octet sau mai multe informații.
Dacă vă ajută să înțelegeți, vă puteți gândi la un registru de deplasare ca o "array" de ieșiri digitale, dar putem să depășim comenzile obișnuite ale digitalWrite și să trimitem pur și simplu o serie de biți pentru a le activa sau a dezactiva.
Cum functioneazã?
Registrul de deplasare pe care îl vom folosi - 74HC595N inclus în setul de pornire Oomlout - necesită doar 3 știuleți de control. Primul este un ceas - nu trebuie să vă faceți griji prea mult despre acest lucru, deoarece bibliotecile seriale Arduino îl controlează - dar un ceas este practic doar un impuls electric pornit / oprit care stabilește ritmul pentru semnalul de date.
Pivotul de blocare este folosit pentru a indica registrului de deplasare atunci când ar trebui să pornească și să dezactiveze ieșirile în funcție de biții pe care tocmai l-am trimis - adică, blocând-i pe loc.
În cele din urmă, pinul de date este locul în care am trimis datele seriale reale cu biții pentru a determina starea de pornire / oprire a ieșirilor din registrul de deplasare.
Întregul proces poate fi descris în 4 pași:
- Setați știftul de date la nivel ridicat sau scăzut pentru primul pin de ieșire din registrul de deplasare.
- Impulsați ceasul pentru a "transfera" datele în registru.
- Continuați să setați datele și să pulsați ceasul până când ați setat starea necesară pentru toți pinii de ieșire.
- Impingeți știftul de blocare pentru a activa secvența de ieșire.
Punerea în aplicare
Aveți nevoie de următoarele componente pentru acest proiect:
- 7HC595N cip registru de deplasare
- 8 LED-uri și rezistoare adecvate, sau orice doriți să obțineți
- Pâlnia obișnuită, conectorii și un Arduino de bază
Dacă aveți setul de pornire Oomlout, puteți să descărcați aspectul panoului de paie de aici.
Iată videoclipul de asamblare:
Structura de bord:
Și versiunea mea asamblată:
Am modificat codul original furnizat de Ooolmout, dar dacă doriți să încercați acest lucru, acesta poate fi descărcat în întregime aici. Explicația codului este inclusă, deci copiați și lipiți întregul lucru de jos sau pastebin pentru a citi o explicație a codului.
/ * ------------------------------------------------ --------- * | Shift Register Tutorial, bazat pe | * | Setul de experimente pentru Arduino CIRC-05 | * | .: 8 Mai multe LED-uri:. (Registrul de schimbare al * ------------------------------------------------- -------- * | Modificat de James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Pin Definiții // 7HC595N are trei pini int date = 2; // unde trimitem biții pentru a controla ieșirile int clock = 3; // păstrează datele în sincronizare int int = 4; // spune registrului de deplasare când pentru a activa secvența de ieșire void setup () // setați cele trei pinii de control pentru a ieși pinMode (date, OUTPUT); pinMode (ceas, OUTPUT); pinMode (dispozitiv de blocare, OUTPUT); Serial.begin (9600); // pentru a putea trimite mesaje de depanare la serialele de monitor void loop () outputBytes (); // ieșirea noastră de bază care scrie 8 biți pentru a arăta cum funcționează un registru de deplasare. // outputIntegers (); // trimite o valoare întregă ca date în loc de octeți, număra efectiv în binar. void outputIntegers () pentru (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100); void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >> pentru a regla întârzierea de direcție (100);
Bit-Shifting (funcția OutputBytes)
În primul exemplu de buclă - outputBytes () - codul utilizează o secvență pe 8 biți (un octet) pe care apoi o schimbă în stânga fiecare iterație a buclă for. Este important să rețineți că dacă treceți mai departe decât este posibil, bitul este pur și simplu pierdut.
Bit-shifting se face folosind << or >> urmat de numărul de biți pe care doriți să îl deplasați.
Consultați exemplul următor și asigurați-vă că înțelegeți ce se întâmplă:
octet val = B00011010 val = val << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010
Trimiterea în întregime a numerelor întregi (funcția OutputIntegers)
Dacă trimiteți un număr întreg la registrul de deplasare în loc de un octet, acesta va pur și simplu converti numărul într-o secvență binară octet. În această funcție (necomentăm în buclă și încărcați pentru a vedea efectul), avem o buclă pentru care se calculează de la 0 la 255 (cel mai înalt număr pe care îl putem reprezenta cu un octet) și trimite în schimb. În esență, contează în binar, astfel încât secvența poate părea puțină aleatoare, cu excepția cazului în care LED-urile sunt așezate pe o linie lungă.
De exemplu, dacă citiți articolul explicat binar, veți ști că numărul 44 va fi reprezentat ca 00101100, astfel încât LED-urile de 3,5,6 se vor aprinde la punctul respectiv în secvență.
Daisy Chaining Mai mult de un Shift Înregistrează
Lucru remarcabil despre Shift Registers este că dacă li se dau mai mult de 8 biți de informații (sau oricât de mare ar fi registrul lor), ei vor schimba din nou celelalte biți adiționali. Aceasta înseamnă că puteți conecta o serie între ele, impingeți un lanț lung de biți și îl distribuiți separat fiecărui registru, toate fără codificare suplimentară din partea dvs..
Deși nu vom detalia procesul sau schemele aici, dacă aveți mai multe registre de deplasare puteți încerca proiectul de pe site-ul oficial Arduino aici.
Alte articole din serie:
- Ce este Arduino și ce poți să faci cu el Ce este Arduino și ce poți să faci cu el? Ce este Arduino și ce puteți face cu el? Arduino este un dispozitiv remarcabil de electronică, dar dacă nu ai mai folosit niciodată înainte, ce anume sunt și ce poți să faci cu unul? Citeste mai mult ?
- Ce este un set Arduino Starter & ce conține? Ce este inclus într-un kit de pornire Arduino? [Explică-i pe MakeUseOf] Ce este inclus în kitul de pornire Arduino? [MakeUseOf Explains] Am introdus hardware-ul open-source Arduino aici pe MakeUseOf, dar ai nevoie de ceva mai mult decât Arduino pentru a construi ceva din ea și de fapt începe. Arduino "kituri de starter" sunt ... Citește mai mult
- Mai multe componente cool pentru a cumpăra cu kitul de pornire 8 Componente mai cool pentru proiectele dvs. Arduino 8 Componente mai cool pentru proiectele dvs. Arduino Deci, vă gândiți să obțineți un kit de pornire Arduino, dar vă întrebați dacă unele LED-uri și rezistoare de bază vor fi suficient pentru a vă menține ocupat pentru weekend? Probabil ca nu. Iată încă 8 ... Citește mai mult
- Noțiuni de bază cu kitul de pornire Arduino? Instalarea driverelor și configurarea tabloului de bord și a portului Începeți cu kitul de pornire Arduino - Instalarea driverelor și configurarea tabloului de bord și a portului Începeți cu setul dvs. de pornire Arduino - Instalarea driverelor și configurarea tabloului de bord și a portului Deci, v-ați cumpărat un kit de pornire Arduino și, eventual, alte componente aleatoare aleatoare - acum ce? Cum de a începe cu programarea acestui lucru Arduino? Cum îl configurați ... Citește mai mult
- Fritzing, un instrument gratuit pentru desenarea schemelor de circuite Fritzing - instrumentul final pentru a schița proiectele electronice [Cross Platform] Fritzing - instrumentul final pentru a schița proiectele electronice [Cross Platform] În ciuda faptului că sună ca un alcopop, Fritzing este de fapt un incredibil software-ul gratuit ce puteți utiliza pentru a crea circuite și componente de diagrame pentru utilizarea cu rapid-prototipuri electronice panouri, cum ar fi fantastic open-source Arduino ... Citeste mai mult
- O privire mai clară asupra structurii unei aplicații Arduino și a programului Blink Exemplu
- Arduino Proiect de arbori de Craciun Arduino: Proiectul Arduino: Cum sa faci ornamente luminoase de Craciun Un Proiect Arduino: Cum sa faci Ornamente de Craciun Flashy Aceasta este partea urmatoare in seria noastra de invatare Arduino, iar de data aceasta vom invata despre si folosind Arrays pentru a face un mic ornament de pom de Crăciun cu diferite secvențe intermitente. Acest lucru ar fi un ... Citeste mai mult (AKA de învățare despre arrays)
- Ce este binar? Ce este binar? [Tehnologie explicată] Ce este binar? [Tehnologie Explained] Având în vedere că binar este atât de absolut fundamental pentru existența calculatoarelor, pare ciudat că nu am abordat niciodată subiectul anterior - așa că astăzi m-am gândit că voi da o scurtă trecere în revistă a ceea ce ... Read More
Asta e în măsura în care vom merge astăzi cu registrele de deplasare, deoarece cred că am acoperit foarte mult. Ca de obicei, vă încurajez să jucați și să modificați codul și să vă simțiți liber să vă adresați întrebările pe care le aveți în comentarii sau chiar să împărtășiți un link către proiectul dvs. minunat de înregistrări în schimburi.
Explorați mai multe despre: Arduino.