ho realizzato una semplice pedaliera MIDI; essa ha 5 led controllati da un unico 74HC595.
Fino ad oggi, per settare i led (accesi o spenti) mandavo un valore decimale (corrispondente al binario dei led che voglio accendere) a questa funzione:
void send595(byte value)
{
// Signal to the 595 to listen for data
digitalWrite (latchPin, LOW);
for (byte bitMask = 128; bitMask > 0; bitMask >>= 1)
{
digitalWrite (clockPin, LOW);
digitalWrite (dataPin, value & bitMask ? HIGH : LOW);
digitalWrite (clockPin, HIGH);
}
// Signal to the 595 that I'm done sending
digitalWrite (latchPin, HIGH);
}
Quindi, se volevo accendere il led 1,2 e 4 (cioè i pin 0, 1 e 3 del 595) mandavo fuori semplicemente un bel send595(11).
Ora ho bisogno di avere altri 5 leds, e li ho sistemati su un 595 supplementare (collegato in cascata secondo gli schemi sul playground, con il clock ritrasmesso dal primo 595 al secondo ed il dataPin ed il latchPin in comune.
Tuttavia, non ho idea di come fare ad accendere i leds collegati al secondo 595. Pensavo bastasse mandare un valore maggiore di 255 nella funzione sopra... ma non funziona, e non mi si accendono mai i leds del secondo 595...
Cos'è che mi sfugge (tra tutte le altre cose ? :-))
Ciao demym
come descritto nel Link che ha messo T30:
La cosa é semplice:
Manda al posto di 8 bit due volte 8 bit, i primi per il secondo 595, i secondi per il primo 595.
Ciao Uwe
Grazie mille ! Sono riuscito a gestire i due gruppi di led con i 2 74hc595 !
In effetti è stato semplice con i consigli; però, domanda puramente informativa, ciò significa che anche nel caso che voglia agire su uno solo dei due 595 (per esempio solo il primo della cascata), devo necessariamente inviare anche la situazione dell'altro integrato (cioè il secondo in cascata) ? Non mi è un problema, solo per curiosità.
ciao demym
Ogni bit che fai entare nel 595 fa shiftare le informazioni di una posizione. Questo vale per ogni posizioni dei registri. Quelle che escono dal primo 595 entrano nel secondo.
Devi percui riscrivere tutti i 16 bit ognivolta che vuoi cambiane anche solo 1.
Se metti ancora piú 595 in serie devi per ogni 595 mandare 8 bit e per ogni variazione rimandare tutti i bit.
Ciao Uwe