4 X 74hc595 aiuto per codice 32 uscite

mi son rimesso a far prove con i 595 ma non capisco come si gestiscono in cascata

so mandare high o low solo le uscite del primo (contemporaneamente si accendono led a caso sugli altri 3 595) mi serve che qualcuno mi spieghi come comandare ogni singola uscita

altra cosa, msbfirst e lsbfirst praticamente mi invertono come manda il byte al 595?

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000011);   
digitalWrite(latchPin, HIGH);
delay(2000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);   
digitalWrite(latchPin, HIGH);
delay(2000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);   
digitalWrite(latchPin, HIGH);
delay(2000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11000000);   
digitalWrite(latchPin, HIGH);
delay(2000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);
digitalWrite(latchPin, HIGH);
delay(2000);
 }

codice che sto usando e comanda solo il primo 595 della cascata

Intanto partiamo da un presupposto: i pin latch e clock dei 4 chip devi collegarli tutti insieme.
Il pin Q7s del 1° chip va collegato al pin DS del 2° chip; il pin Q7s del 2° chip va collegato al pin DS del 3° chip, il pin Q7s del 3° pin va collegato al pin DS del 4° pin.

Lato codice, metti su Low il pin Latch, poi spedisci i 4 byte e solo dopo riattivi il latch.
MBF e LBF influiscono su come la sequenza di bit viene spedita: quindi con MBF il primo bit ad essere inviato ai chip è il bit più alto (l'8°) del byte di dati, con LBF viene invece spedito il 1°, quello più basso.
Il latch lo devi rendere quando hai spedito i 4 byte.

Qui il codice per 2 chip

ma va bene per 4.

i collegamenti son giusti, diciamo che va elettricamente ma non lato codice :disappointed_relieved:

nell'esempio che mi hai linkato cosi' com'e' inviato ai 4 595 mi esegue lo sketch sui 595 terzo e quarto (e non me lo spiego)

non riesco a modificarlo per 4, o almeno l'ho modificato ma non accende nessun led

come sarebbe da modificare qui per mettere 4 byte?

digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00001100);
digitalWrite(latchPin, HIGH);

non ci sto a capir nulla :frowning:

Prova così:

digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, byte1);
shiftOut(dataPin, clockPin, MSBFIRST, byte2);
shiftOut(dataPin, clockPin, MSBFIRST, byte3);
shiftOut(dataPin, clockPin, MSBFIRST, byte4);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 1);
shiftOut(dataPin, clockPin, MSBFIRST, 255);
shiftOut(dataPin, clockPin, MSBFIRST, 1);
shiftOut(dataPin, clockPin, MSBFIRST, 1);   
digitalWrite(latchPin, HIGH);

ok, funziona, ora sto capendo altre cose, in pratica consideravo i led (uscite) da 1 a 32 da destra a sinistra, invece e' il contrario, pure i 595... ora provo a mettere LSBfirst o al limite giro le connessioni data latch e clock, finche' non mi corrisponde da destra a sinistra

(come con la matrix 8x8... righe colonne destra sinistra alto basso dritto storto catodo anodo puffi folletti e chi piu' ne ha ne metta :stuck_out_tongue_closed_eyes: )

se hai un byte 11110000 e lo fai uscire con MSB nel registro entra come 1-1-1-1-0-0-0-0 ma te lo ritroverai come 00001111 proprio perché entra prima l'8° bit, poi il 7° ecc... andando nel 1° bit del registro, poi nel 2° ecc...

reizel:
ok, funziona, ora sto capendo altre cose, in pratica consideravo i led (uscite) da 1 a 32 da destra a sinistra, invece e' il contrario, pure i 595... ora provo a mettere LSBfirst o al limite giro le connessioni data latch e clock, finche' non mi corrisponde da destra a sinistra

Puoi anche ruotare la scheda oppure metterti allo specchio. :smiley:

ora e' ok, devo mandare i byte con LSBFIRST e finalmente mi capisco, o meglio i led s'accendono come li scrivo finalmente

volevo fare un tix clock e con 5 595 avrei 40 led disponibili

(avevo provato con il charlieplexin ma pur funzionando con molti led accesi la luminosita' andava a zero piu' accensioi non volute, il charlieplexin va bene finche' ti serve 1 led su 20...)

grazie leo :wink:

Puoi anche ruotare la scheda oppure metterti allo specchio.
potrei pure riformattarmi il cervello e rimasterizzarlo dritto, cosi' risolvo pure tutte le altre cose :stuck_out_tongue_closed_eyes:

reizel:
Puoi anche ruotare la scheda oppure metterti allo specchio.
potrei pure riformattarmi il cervello e rimasterizzarlo dritto, cosi' risolvo pure tutte le altre cose :stuck_out_tongue_closed_eyes:

Se dovesse funzionare, scrivi una Guida. Un domani potrei averne bisogno anche io. :grin: :grin:

PaoloP:
Se dovesse funzionare, scrivi una Guida. Un domani potrei averne bisogno anche io. :grin: :grin:

ok, ma io non la scrivo, chiedo a menniti di farla, guida all'autoformattazione del cervello a masterizzazione speculare inversa diremo a menni che puo' usarci per i test se poi ci nomina nella guida :stuck_out_tongue_closed_eyes: