Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Chiarimenti su come pilotare tre shift register in cascata

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Chiarimenti su come pilotare tre shift register in cascata

Messaggioda Foto UtenteAgatino » 24 ago 2016, 17:09

Salve a tutti.

Dovrò realizzare un circuito costituito da tre shift register di tipo 74HC595 disposti in cascata che dovranno a loro volta darmi in uscita i valori di 3 variabili di tipo byte inviate da Arduino.

i tre shift register li chiamo S1, S2, S3 di cui S1 è quello collegato direttamente ad arduino mentre gli altri due sono in cascata a questo.

posto un po di codice di esempio per inviare i valori dei Byte ai register:

Codice: Seleziona tutto
//Pin connected to ST_CP of 74HC595
int pinEN = 23;
//Pin connected to SH_CP of 74HC595
int pinCL = 25;
//Pin connected to DS of 74HC595
int pinDT = 27;

byte A = B00000001;
byte B = B00001100;
byte C = B10101010;

void setup()
{
  // put your setup code here, to run once:
  pinMode(pinEN, OUTPUT);
  pinMode(pinCL, OUTPUT);
  pinMode(pinDT, OUTPUT);
  Serial.begin(9600);
   
}

void loop() {

digitalWrite(pinEN, LOW);
  shiftOut(pinDT, pinCL, LSBFIRST, A);
  shiftOut(pinDT, pinCL, LSBFIRST, B);
  shiftOut(pinDT, pinCL, LSBFIRST, C);
  digitalWrite(pinEN, HIGH);
}


ora volevo chiedere:

- quale è la sequenza dei byte all'interno degli shift register (ad esempio in S1 ho il valore di A, S2 = B ...) oppure altro?

- poi prendendo in considerazione il byte A (valore = 00000001) quale pin del 74HC595 relativo mi espone in uscita il valore 1 il pin Q0 [pin 15] oppure pin Q7 [pin 7]?

Grazie a tutti per l'aiuto.
Saluti
Avatar utente
Foto UtenteAgatino
109 1 5
Frequentatore
Frequentatore
 
Messaggi: 167
Iscritto il: 26 mar 2010, 10:36

0
voti

[2] Re: Shift register in serie

Messaggioda Foto Utenteharpefalcata » 24 ago 2016, 17:15

Senza vedere in che modo hai connesso gli shift register è difficile rispondere.

Ad esempio, gli shift register che hai scelto hanno bisogno di un ingresso di clock, oltre che impostare reset ed enable.

Tu come fai ad estrarre da Arduino un clock che sia sincronizzato con le tue stringhe? Non mi pare di vedere nel codice che hai postato alcuna parte inerente il clock che sempre Arduino dovrà generare, comunque non mi intendo di Arduino, non ne conosco la sua funzione shiftOut e dunque potrebbe essere che anche il clock viene generato di conseguenza ma, sicuramente se non posti almeno uno schema di come hai connesso i componenti, non si può dire se quello che hai fatto avrà mai qualche possibilità di successo.

Saluti
Avatar utente
Foto Utenteharpefalcata
326 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 422
Iscritto il: 28 lug 2015, 21:03

0
voti

[3] Re: Shift register in serie

Messaggioda Foto UtenteAgatino » 24 ago 2016, 17:26

ciao.

Per quanto riguarda la connessione degli shift register in allegato ho inserito un esempio di collegamento.

74hc595.gif


Nell'immagine ne sono presenti solo 2 ma il collegamento in cascata è identico per ogni register. Basta infatti che replichi per ogni register aggiuntivo la linea di Enabled e di Clock (linea Gialla e Verde) mentre per la linea dati (blu) basta collegare l'uscita Q7" del precedente all'ingresso DS del register successivo (come mostrato nella foto)

Riguardo al clock e al sincronismo ci pensa direttamente Arduino.
Avatar utente
Foto UtenteAgatino
109 1 5
Frequentatore
Frequentatore
 
Messaggi: 167
Iscritto il: 26 mar 2010, 10:36

0
voti

[4] Re: Shift register in serie

Messaggioda Foto UtenteDanteCpp » 24 ago 2016, 17:33

Agatino ha scritto:- quale è la sequenza dei byte all'interno degli shift register (ad esempio in S1 ho il valore di A, S2 = B ...) oppure altro?


Quando?

Agatino ha scritto:- poi prendendo in considerazione il byte A (valore = 00000001) quale pin del 74HC595 relativo mi espone in uscita il valore 1 il pin Q0 [pin 15] oppure pin Q7 [pin 7]?


Cosa vuol dire quel parametro LSBFIRST che hai passato a shiftOut()?
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

[5] Re: Shift register in serie

Messaggioda Foto UtenteAgatino » 24 ago 2016, 17:46

Ciao Dante.

Riguardo alla prima domanda intendevo dire a fine della trasmissione dei 3 byte come sono distribuiti all'interno dei registri.

LSBFIRST invece è un parametro dell'istruzione shiftout che specifica in che modo inviare i bit appartenenti al Byte.
https://www.arduino.cc/en/Reference/ShiftOut
Avatar utente
Foto UtenteAgatino
109 1 5
Frequentatore
Frequentatore
 
Messaggi: 167
Iscritto il: 26 mar 2010, 10:36

0
voti

[6] Re: Shift register in serie

Messaggioda Foto UtenteDanteCpp » 24 ago 2016, 17:54

Agatino ha scritto:Riguardo alla prima domanda ...


Se tu invii il byte A per primo, a fine trasmissione dove si troverà? Lontano o vicino ad arduino?

Agatino ha scritto:specifica in che modo inviare i bit appartenenti al Byte.


Appunto.
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

1
voti

[7] Re: Shift register in serie

Messaggioda Foto Utentefrancicoma » 24 ago 2016, 21:18

se non sbaglio funzionano cosi i shift register (SR):
invii il primo bite (B1) , che andrà sul primo SR:
invii il secondo bite(B2) che andrà sul primo SR, che trasmettera' il bite che aveva (B1) al secondo SR collegato
invii il terzo bite (B3) che andrà sul primo SR, che trasmettera' il bite che aveva (B2) al secondo SR collegato; a sua volta il secondo SR invierà il bite che aveva (B1) al terzo SR collegato
e cosi via a catena

quindi:
se si shift register sono collegati in serie: SR1 poi SR2 e infine SR3
SR1=B3
SR2=B2
SR3=B1

se per caso invierai un altro bite B4 dovrebbe venirti cosi:
SR1=B4
SR2=B3
SR3=B2
B1 perso
Avatar utente
Foto Utentefrancicoma
60 1 6
Frequentatore
Frequentatore
 
Messaggi: 151
Iscritto il: 5 lug 2013, 1:23


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti