Controllo 2 registri con latch e clock in comune

Salve a tutti di nuovo...
ho un piccolo problema con i registri (i soliti 595)...
Mi spiego in dettaglio:
-posseggo 2 pannelli di led ognuno 7x5 celle di led (qualcuno forse lo conosce perchè avevo avuto un altro problema in un altro topic)
-su un pannello ci sono 5 registri a cascata
-quello che voglio fare io è usare clock e latch in comune tra i pannelli ma non mettere in cascata i pannelli...
-nello sketch se provo a inviare contemporaneamente due matrici su due datapin si crea il problema che non vengono visualizzate corretamente le matrici

ecco lo sketch:

byte matriceLed1[5]; 
byte matriceLed2[5]; 

int latchPin = 9;
int clockPin = 8;
int dataPin1 = 10;
int dataPin2 = 11;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin1, OUTPUT);
  pinMode(dataPin2, OUTPUT);
}


void loop() 
{
matriceLed1[4]=0b1100001;
matriceLed1[3]=0b1010001;
matriceLed1[2]=0b1010001;
matriceLed1[1]=0b1010101;
matriceLed1[0]=0b1100111;
inviaStatoLed();delay(250);

//qui stanno altri array (circa 50)

matriceLed2[4]=0b0110000;
matriceLed2[3]=0b0101000;
matriceLed2[2]=0b0101000;
matriceLed2[1]=0b0101010;
matriceLed2[0]=0b0110011;
inviaStatoLed();delay(250);
}


void inviaStatoLed() {
  digitalWrite(latchPin, LOW);
  for (byte x=0; x<5; x++) {
    shiftOut(dataPin1, clockPin, MSBFIRST, matriceLed1[x]);  
    shiftOut(dataPin2, clockPin, MSBFIRST, matriceLed2[x]);  
  }
   digitalWrite(latchPin, HIGH);
}

E come sono collegati? Schemino?

adesso è un po tardi per far uno schemino ho gli occhi annebbiati dal fumo del saldatore :sweat_smile:
magari domani lo faccio
comunque provo a spiegarlo:
[1° Pannello]
1° reigistro --> 2° registro --> 3° registro --> 4° registro --> 5° registro (sul primo ho il dataPin, clockPin, latchPin; gli altri stanno a cascata)

[2° Pannello]
1° reigistro --> 2° registro --> 3° registro --> 4° registro --> 5° registro (sul primo ho il dataPin, clockPin, latchPin; gli altri stanno a cascata)

Conclusione
a.I pannelli sono alimentati insieme
b.I pannelli funzionano al 100%
c. ho messo in comune latch e clock
d. Voglio controllare i pannelli agendo su i due dataPin principali (quello del primo pannello e quello del secondo)

Se non mi sono spiegato bene allora metterò lo schema domani

lo schema è lo stesso di quello nel tutorial dello shift out

L'unica differenza è che invece di mettere in cascata i due registri voglio controllarli con i rispettivi dataPin usando gli stessi latch e clock

Se non riesci nel tuo intento, ti consiglio di usare clock e data in comune.
Poi di usare due latch separati.

Devi ovviamente inviare i dati separatamente...

acik:
Se non riesci nel tuo intento, ti consiglio di usare clock e data in comune.
Poi di usare due latch separati.

Devi ovviamente inviare i dati separatamente...

se uso latch e clock (e ovviamente data)separatamente tutto torna a funzionare, se invece metto in comune tutto,torna il problema ...come mai??

Secondo me è normale che non vada, se metti il clock in comune modifichi anche gli shift register non interessati perché quel segnale fa leggere e memorizzare (e fa avanzare i registri interni dei chip) il valore sul pin data.

leo72:
Secondo me è normale che non vada, se metti il clock in comune modifichi anche gli shift register non interessati perché quel segnale fa leggere e memorizzare (e fa avanzare i registri interni dei chip) il valore sul pin data.

quindi non c'è altra soluzione sennò quella di usare clock e latch separati?

Oppure puoi mettere tutti i chip in cascata e poi cambi dallo sketch la parte di dati da aggiornare, ed infine spedisci il blocco unico.

leo72:
Oppure puoi mettere tutti i chip in cascata e poi cambi dallo sketch la parte di dati da aggiornare, ed infine spedisci il blocco unico.

ma scherzi? :sweat_smile: dovrei cambiare 448 byte? ahahah no no, per questo progetto uso tutto separato, poi quando mi va ci salderò i serial out e metto in cascata..