Aiuto codice 3 x 74HC595N

Sto cercando di accendere in sequenza 24 led collegati a 3 shift register 595

Ho fatto i collegamenti come sul playground... collegato il 3° 595 al 2° come il 2° al 1° :smiley:

Tutto finziona ma quando parte la swquenza dei led

i primi 8 e gli ultimi 8 fanno la stessa cosa
:fearful: :fearful: :fearful: :fearful: :fearful: :fearful: :fearful: :fearful: :astonished: :astonished: :astonished: :astonished: :astonished: :astonished: :astonished: :astonished: :fearful: :fearful: :fearful: :fearful: :fearful: :fearful: :fearful: :fearful:
(questi erano i led)

Quindi dato che il codice era scritto per 2 shift register non so come cambiarlo

ho provato a casaccio a sostituire un po di cose ma niente... riporto qui il codice che funziona bene per i primi 16 led

Cioè... qual'è la logica? la parte incriminata che gli fa capire che ci sono 3 registers?

...
void oneByOne(int left, int right, int numRepeat){
  while (numRepeat!=0){
    left=1;
    right=0;
    for (left=1;left<=64;left=left*2
    ){
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, right);
      shiftOut(dataPin, clockPin, left);
      digitalWrite(latchPin, HIGH);
      delay(time);
    }
 
    left=1;
    right=0;
    for (left=1;left<=64;left=left*2){
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, left);
      shiftOut(dataPin, clockPin, right);
      digitalWrite(latchPin, HIGH);
      delay(time);
    }
    
    numRepeat-=1;
  }
}
...

EDIT:

L'effetto che esce è

si accendono in sequnza i led del primo e del terzo 595 in sicnrono (e invece quelli del terzo dovrebbero rimanere spenti)...
poi poi continua la sequenza sul secondo 595 (quindi il primo e il secondo funzionano bene)
qui dovrebbe iniziare la sequenza del terzo 595... invece riparte il ciclo!

Altra domanda:

Quale integrato mi consigliate al posto del 595 per accendere in sequenza più leds possibili?
Ne avevo segnato uno che ne gestiva 15 ma non ricordo più quale fosse, se non sbaglio, e occupava 2 soli pin Arduino, ma forse mi sbaglio :grin:

L'applicazione sarebbe gestire due file di led paralleli che si accendono in sequenza... restano tutti accesi... e poi si spengono ancora con la stessa sequenza
tipo le luci delle piste di atterraggio per gli arei o luci scale

Il massimo sarebbe poter creare dei moduli su pcb che possano essere incrementati in cascata senza dover mettere mano al codice (ma anche dovendo incrementare il codice non sarebbe un problema)

ES1 Corridoio: [ARDUINO1 MASTER]=== [Modulo1]===[Modulo2]===[Modulo3]===[Modulo4]===[Modulo5]

ES2 Giardino: [ARDUINO2 MASTER]=== [Modulo1]===[Modulo2]===[Modulo3]===[Modulo4]===[Modulo5]===[Modulo6]===[Modulo7]===[Modulo8]

ES3 Scala2: [ARDUINO3 MASTER]=== [Modulo1]===[Modulo2]

Stai facendo un errore logico.
Un 595 gestisce 8 uscite. Per comandare 8 uscite ti servono 8 bit, ossia 1 byte. Per comandare 24 uscite ti servono 3 byte ma un intero è composto solo da 2 byte. Inoltre tu spedisci 24 volte i byte 1 e 0.

Devi preparare 3 variabili di tipo byte e poi lavorare sui singoli pin ed in seguito spedire con shiftOut i 3 byte insieme. Come fai tu non va bene.

byte var1=0b10101010;
byte var2=0b11001100;
byte var3=0b00001111;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, var1);
shiftOut(dataPin, clockPin, var2);
shiftOut(dataPin, clockPin, var3);
digitalWrite(latchPin, HIGH);

Ecco... su una logica così, per non sapere ne leggere ne scrivere, dedicando ci il tempo necessario sarei riuscito a venirne a capo (sempre seguendo un tutorial)
ma si vede che ho imbroccato ptoprio il tutorial sbagliato sul quale fare le prove e imparare!

Ora che ho un esempio LOGICO "in tutti i sensi" mi metto a cercare dei tutorials adeguati!

Ne avevo segnato uno che ne gestiva 15 ma non ricordo più quale fosse, se non sbaglio, e occupava 2 soli pin Arduino, ma forse mi sbaglio

forse ti eri segnato il TLC5940:
http://arduino.cc/playground/Learning/TLC5940
solo che utilizza più di 2 pin!

KrashNet:
Ora che ho un esempio LOGICO "in tutti i sensi" mi metto a cercare dei tutorials adeguati!

Tutorial non ti servono. Devi solo impostare i bit delle 3 variabili di tipo byte.
Io le ho caricate per comodo con dei valori predefiniti ma puoi usare benissimo le funzioni di Arduino bitSet e bitClear per impostare rispettivamente a 1 ed a 0 i singoli bit. Basta che ti ricordi l'ordine con cui inviare i byte e sai poi a quale led corrisponde ogni bit.

pitusso:

Ne avevo segnato uno che ne gestiva 15 ma non ricordo più quale fosse, se non sbaglio, e occupava 2 soli pin Arduino, ma forse mi sbaglio

forse ti eri segnato il TLC5940:
http://arduino.cc/playground/Learning/TLC5940
solo che utilizza più di 2 pin!

Bravissimo era quello! Lo avevo sengato per gli steppers! :grin:

leo72:
Tutorial non ti servono. Devi solo impostare i bit delle 3 variabili di tipo byte.
Io le ho caricate per comodo con dei valori predefiniti ma puoi usare benissimo le funzioni di Arduino bitSet e bitClear per impostare rispettivamente a 1 ed a 0 i singoli bit. Basta che ti ricordi l'ordine con cui inviare i byte e sai poi a quale led corrisponde ogni bit.

A scuola quando alle riunioni con i professori dicevano: "suo figlio non è scemo... ma non si applica"...
vai a farglielo capire che ho il cervello come una tictac :smiley:

Premesso che nessuno è scemo, secondo me è tutta questione di applicarsi.
Non mi dire che non riesci ad andare nel Reference ed a leggerti 2-schede-2 sulle funzioni che ti ho citato per capire come manipolare i singoli bit perché non ci credo.
Immagino che se la tua donna ti telefona e ti chiama a casa da lei perché i suoi non ci sono io dico che la voglia di applicarti al bunga-bunga la trovi, anche con una gamba rotta vero? 8)

Appunto, è quello che intendevo... sono lento ma cerca, studia, prova e riprova... poi ci arrivo...
E' l'altro, che voleva lo sketch compilato...

spillo84top:
Potresti compilarmi lo sketch con questa ultima modifica? Basta che copi il codice nel mio primo post!

mica io!
:slight_smile:

Ohi ohi come siete permalosi XD XD

ciao

io ho utilizzato la libreria EzExpander

http://nootropicdesign.com/ez-expander/

Che poi ho modificato appunto per 3 74hc595 cambiando alcune righe sui file Ezexpander.h e Ezexpander.cpp (che allego)

Magari non è il massimo della finezza in fatto di codice (parlo delle mie modifiche) ma funziona perfettamente.
Ti permette di attivare i pin semplicemente indicandoli come i pin di base di Arduino

Spero ti possa servire.
Ciao

ezexapnder_mod.zip (2.48 KB)

Ci sto lavorando... grazie!

Mi da parecchi errori però già dallo sketch...
Ho visto le differenze tra EZExpander.h, EZExpander.cpp e quelli modificati da te, e ne ho capito il senso...
ora finisco di studiare i codici di prima poi ci ritorno su e vedo perchè mi da errori anche se non ho effettuato modifiche!
(penso errori di caratteri qui "void fastDigitalWrite(int pin, uint8_t signal);" boh per me è tutto arabo... poi controllo)

Hai caricato le librerie dentro la dir di Arduino ?

Usi Mac o Windows ?

Win7... si si le ho caricate... stsera a mente fresca ci riprovo!

Per ora sto ancora lavorando sull'esempio di Leo, in maniere ridicola per il momento ho risolto, o per lo meno riesco a far fare accendere e spegnere i leds dove e quando dico io...
( :smiley: con un listato lunghissimo, so che ci sarà il modo per un autoincremento e un reverse... ma ci penso dopo )

Ora sto iniziando a cercare come fare fade in e fade out su sti benedertti shift registers... cmq sono una figata e mi procurerò prima possibile i TLC5940

Ok

Anch'io all'inizio avevo usato un codice come Leo .. poi ho trovato comodissima la soluzione con Ezexpander che per un testone come me rende semplice la scrittura del codice.

Ciao!

Si si è una figata quel sistema lì, pulitissimo e intuitivo, per questo cercherò di farlo girare a mente più lucida!

leo72:
Immagino che se la tua donna ti telefona e ti chiama a casa da lei perché i suoi non ci sono io dico che la voglia di applicarti al bunga-bunga la trovi, anche con una gamba rotta vero? 8)

Leo XD mica sono tutti come te! :grin: Infatti non ti ha manco risposto... 8)

Dalle mie parti si dice: "se sei buco, dillo!"
Ed evito di specificare cosa significhi "buco" :stuck_out_tongue_closed_eyes:

menniti:
Leo XD mica sono tutti come te! :grin: Infatti non ti ha manco risposto... 8)

:smiley: sarebbe stata fuori luogo (alla fine non abbiamo tutta quella confidenza) e non volevo cominciare un flame dato che erano un po di ore che cercavo i capirci qualcosa di quei shift registers e mi giravano un pò!