title | categories | subCategories | ||
---|---|---|---|---|
shiftOut() |
|
|
Fa "scorrere" un byte di dati, inviandolo dall’arduino ad un dispositivo esterno, un bit alla volta. Può partire sia dal bit più significativo ( il primo a sinistra ) che dal meno significativo ( l’ultimo a destra ). Ogni bit viene assegnato a turno al pin specificato, dopo di che viene generato un impulso sul pin di clock ( portato prima nello stato HIGH, poi LOW ) per indicare che il bit è disponibile.
Se ti stai interfacciando con un dispositivo che è controllato dalle transizioni crescenti del segnale di clock ( LOW → HIGH ), dovrai assicurarti che il pin di clock sia nello stato LOW prima di effettuare la prima chiamata a shiftIn()
, ad esempio con una chiamata a digitalWrite(clockPin, LOW)
.
NOTA: questa è un’implementazione software; Arduino fornisce anche una libreria SPI che usa l’implementazione hardware, che è piu veloce ma funziona solo su pin specifici.
shiftOut(dataPin, clockPin, bitOrder, dati)
dataPin
: il pin al quale inviare i dati (int)
clockPin
: il pin che invia l’impulso dopo che il dataPin
è stato impostato al valore corretto (int)
bitOrder
: l’ordine in cui far "scorrere" i bit; può essere MSBFIRST oppure LSBFIRST.
( Prima i bit più significativi, oppure, Prima i bit meno significativi )
dati
: i dati da inviare. (byte)
Nulla
Per il circuito di accompagnamento, vedi il tutorial su come controllare un registro a scorrimento 74HC595.
//**************************************************************//
// Nome : shiftOutCode, Hello World //
// Autore : Carlyn Maw,Tom Igoe //
// Data : 25 Oct, 2006 //
// Versione: 1.0 //
// Note : Codice per usare un registro a scorrimento //
// : 74HC595 per contare da 0 a 255 //
// : //
// : 2017-11-13 //
// : Tradotto da Giuseppe Masino ( qub1750ul ) //
//****************************************************************
//Pin di arduino connesso al pin ST_CP del 74HC595
int latchPin = 8;
//Pin di arduino connesso al pin SH_CP del 74HC595
int clockPin = 12;
//Pin di arduino connesso al pin DS del 74HC595
int dataPin = 11;
void setup() {
//Imposta i pin come output poichè sono usati nel loop principale
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//routine di conteggio
for (int j = 0; j < 256; j++) {
//manda a massa latchPin e mantienilo così mentre trasmetti
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//imposta latchPin a HIGH per segnalare al chip
//che può smettere di rimanere in ascolto per altre informazioni
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
dataPin e clockPin devono essere gia configurati come output attraverso una chiamata a pinMode().
shiftOut attualmente è scritto per mandare in uscita 1 byte ( 8 bit ) per cui richiede un’operazione a due fasi per valori più grandi di 255.
// Fai questo per MSBFIRST
int data = 500;
// manda in uscita i bit più significativi
shiftOut(dataPin, clock, MSBFIRST, (dati >> 8));
// manda in uscita i bit meno significativi
shiftOut(dataPin, clock, MSBFIRST, dati);
// Oppure questo per LSBFIRST
data = 500;
// manda in uscita i bit meno significativi
shiftOut(dataPin, clock, LSBFIRST, dati);
// manda in uscita i bit più significativi
shiftOut(dataPin, clock, LSBFIRST, (dati >> 8));