Programmazione Arduino - Riproduzione con registri a scorrimento (a.k.a ancora più LED)

Programmazione Arduino - Riproduzione con registri a scorrimento (a.k.a ancora più LED) / Fai da te

Oggi cercherò di insegnarti un po 'su Shift Registers. Queste sono una parte abbastanza importante della programmazione di Arduino, fondamentalmente perché espandono il numero di uscite che è possibile utilizzare, in cambio di solo 3 pin di controllo. È anche possibile creare registri a scorrimento a margherita per ottenere ancora più risultati.

Si tratta comunque di un significativo salto di difficoltà rispetto ai tutorial precedenti e suggerisco caldamente di avere una buona comprensione del materiale precedente (collegamenti alla fine di questo articolo), oltre a comprendere le basi del binario What Is Binary? [La tecnologia ha spiegato] Cos'è il binario? [Tecnologia spiegata] Dato che il binario è così assolutamente fondamentale per l'esistenza dei computer, sembra strano che non abbiamo mai affrontato l'argomento prima - così oggi avevo pensato di dare una breve panoramica di ciò che è binario ... Per saperne di più Ho scritto l'ultima volta.

Cos'è un registro di turno?

Un registro di spostamento dell'uscita, tecnicamente parlando, riceve i dati in serie e li emette in parallelo. In termini pratici, questo significa che possiamo inviare rapidamente una serie di comandi di output al chip, dargli l'attivazione e le uscite saranno inviate ai pin pertinenti. Invece di scorrere attraverso ogni pin, semplicemente inviamo l'output richiesto a tutti i pin contemporaneamente, come un singolo byte o più di informazioni.

Se ti aiuta a capire, puoi pensare a un registro a scorrimento come un "array" di output digitali, ma possiamo saltare i soliti comandi digitalWrite e semplicemente inviare una serie di bit per attivarli o disattivarli.

Come funziona?

Il registro a scorrimento che useremo - il 74HC595N incluso nel kit di avvio Oomlout - richiede solo 3 pin di controllo. Il primo è un orologio - non devi preoccuparti troppo di questo dato che le librerie seriali Arduino lo controllano - ma un orologio è fondamentalmente solo un impulso elettrico on / off che imposta il passo per il segnale dati.

Il pin di aggancio viene utilizzato per indicare al registro a scorrimento quando deve attivare e disattivare le sue uscite in base ai bit che abbiamo appena inviato, ossia bloccarle in posizione.

Infine, il pin di dati è dove abbiamo inviato i dati seriali effettivi con i bit per determinare lo stato on / off delle uscite del registro a scorrimento.

L'intero processo può essere descritto in 4 fasi:

  1. Impostare il pin di dati su alto o basso per il primo pin di uscita sul registro a scorrimento.
  2. Pulisci l'orologio per "spostare" i dati nel registro.
  3. Continua a impostare i dati e a pulsare l'orologio finché non hai impostato lo stato richiesto per tutti i pin di uscita.
  4. Pulire il fermo del fermo per attivare la sequenza di uscita.

Implementazione

Sono necessari i seguenti componenti per questo progetto:

  • 7HC595N chip del registro a scorrimento
  • 8 LED e resistori appropriati, o qualsiasi altra cosa si desideri trasmettere
  • Il solito breadboard, connettori e un Arduino di base

Se hai lo starter kit di Oomlout, puoi scaricare il layout della breadboard da qui.

Ecco il video di assemblaggio:

Il layout della scheda:

E la mia versione assemblata:

Ho modificato il codice originale fornito da Ooolmout, ma se desideri provarlo, puoi scaricarlo completamente qui. Spiegazione del codice è inclusa, quindi copia e incolla l'intera cosa da sotto o pastebin per leggere una spiegazione del codice.

/ * ------------------------------------------------ --------- * | Shift Registrati Tutorial, basato su | * | Arduino Experimentation Kit CIRC-05 | * | .: 8 Altri LED:. (Registro Shift 74HC595) * ------------------------------------------------- -------- * | Modificato da James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Definizioni dei pin // 7HC595N ha tre pin int dati = 2; // dove inviamo i bit alle uscite di controllo int clock = 3; // mantiene i dati sincronizzati int latch = 4; // dice al registro a scorrimento quando attivare la sequenza di output void setup () // imposta i tre pin di controllo sull'uscita pinMode (data, OUTPUT); pinMode (clock, OUTPUT); pinMode (latch, OUTPUT); Serial.begin (9600); // così possiamo inviare messaggi di debug al monitor seriale void loop () outputBytes (); // il nostro output di base che scrive 8 bit per mostrare come funziona un registro a scorrimento. // outputIntegers (); // invia un valore intero come dati anziché byte, contando efficacemente in binario.  void outputIntegers () for (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 >> per regolare il ritardo di direzione (100);  

Bit-Shifting (funzione OutputBytes)

Nel primo esempio di loop - outputBytes () - il codice utilizza una sequenza di 8 bit (un byte) che poi sposta a sinistra ogni iterazione del ciclo for. È importante notare che se si sposta più lontano del possibile, il bit viene semplicemente perso.

Il cambio di bit viene eseguito utilizzando << or >> seguito dal numero di bit da spostare.

Guarda il seguente esempio e assicurati di aver capito cosa sta succedendo:

byte val = B00011010 val = val << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010 

Invio di numeri interi invece (funzione OutputIntegers)

Se invii un numero intero al registro a scorrimento invece di un byte, converte semplicemente il numero in una sequenza di byte binari. In questa funzione (decommentare nel loop e caricare per vedere l'effetto), abbiamo un ciclo for che conta da 0-255 (il numero intero più alto che possiamo rappresentare con un byte) e lo invia invece. Fondamentalmente conta in binario, quindi la sequenza può sembrare un po 'casuale a meno che i LED non siano disposti in una lunga fila.

Ad esempio, se leggi l'articolo di spiegazione binaria, saprai che il numero 44 sarà rappresentato come 00101100, quindi i LED 3,5,6 si accenderanno in quel punto della sequenza.

Daisy Chaining più di uno Shift Register

La cosa straordinaria di Shift Registers è che se vengono forniti più di 8 bit di informazioni (o comunque il loro registro è grande), spostano nuovamente gli altri bit aggiuntivi. Ciò significa che è possibile connetterli insieme, inserire una lunga catena di bit e distribuirli a ciascun registro separatamente, senza alcuna codifica aggiuntiva da parte dell'utente.

Anche se qui non descriviamo il processo o gli schemi, se hai più di un turno di registrazione puoi provare il progetto dal sito ufficiale di Arduino qui.

Altri articoli della serie:

  • Cosa è Arduino e cosa puoi fare con esso Cosa è Arduino e cosa puoi fare con esso? Cosa è Arduino e cosa puoi fare con esso? L'Arduino è un eccezionale dispositivo elettronico, ma se non ne hai mai usato uno prima, cosa sono esattamente e cosa puoi fare con uno? Leggi di più ?
  • Che cos'è un kit di avvio Arduino e cosa contiene? Cosa è incluso in un kit di avvio Arduino? [MakeUseOf Explains] Cosa è incluso in un Arduino Starter Kit? [MakeUseOf Explains] Ho già introdotto l'hardware open source Arduino qui su MakeUseOf, ma non avrai bisogno di altro che l'effettivo Arduino per crearne qualcosa e iniziare davvero. I "kit di avvio" Arduino sono ... Leggi di più
  • Altri componenti fantastici da acquistare con il kit di avvio 8 Altri componenti fantastici per i tuoi progetti Arduino 8 Altri componenti fantastici per i tuoi progetti Arduino Quindi, stai pensando di ottenere un kit di avvio Arduino, ma ti chiederai se alcuni LED e resistori di base saranno abbastanza per tenerti occupato per il weekend? Probabilmente no. Ecco altri 8 ... Leggi altro
  • Iniziare con il kit di avvio Arduino? Installazione dei driver e configurazione della scheda e della porta Guida introduttiva di Arduino Starter Kit - Installazione dei driver e configurazione della scheda e della porta Guida introduttiva di Arduino Starter Kit - Installazione dei driver e configurazione della scheda e della porta Quindi, hai acquistato te stesso uno starter kit Arduino, e possibilmente alcuni altri componenti casuali - ora cosa? In che modo inizi a programmare questa cosa di Arduino? Come si imposta ... Per saperne di più
  • Fritzing, uno strumento gratuito per disegnare diagrammi circuitali Fritzing - Lo strumento definitivo per disegnare progetti elettronici [Cross Platform] Fritzing - Lo strumento definitivo per disegnare progetti elettronici [Cross Platform] Nonostante suoni come un alcopop, Fritzing è in realtà un incredibile pezzo di software gratuito che puoi utilizzare per creare diagrammi di circuiti e componenti da utilizzare con schede elettroniche di prototipazione rapida come il fantastico Arduino open source ... Continua a leggere
  • Uno sguardo ravvicinato alla struttura di un'app Arduino e del programma di esempio di lampeggio
  • Arduino Xmas tree lights project Progetto Arduino: Come realizzare decorazioni di luci natalizie appariscenti Un progetto Arduino: come realizzare ornamenti di luci natalizie appariscenti Questa è la prossima parte della nostra serie di apprendimento su Arduino, e questa volta impareremo e useremo gli array fare un piccolo ornamento per l'albero di Natale con varie sequenze lampeggianti. Questo sarebbe un ... Per saperne di più (AKA learning about matrici)
  • Cos'è il binario? Cos'è il binario? [La tecnologia ha spiegato] Cos'è il binario? [Tecnologia spiegata] Dato che il binario è così assolutamente fondamentale per l'esistenza dei computer, sembra strano che non abbiamo mai affrontato l'argomento prima - quindi oggi avevo pensato di dare una breve panoramica di ciò che è binario ... Per saperne di più

Questo è quanto andremo oggi con i registri a scorrimento, poiché penso che abbiamo coperto molto. Come sempre, ti incoraggerei a giocare e ad aggiustare il codice, e sentirti libero di porre qualsiasi domanda tu possa avere nei commenti, o anche di condividere un link al tuo fantastico progetto di registro a turni.

Scopri di più su: Arduino.