Saluti a tutti, in questi giorni di forzata inattività (a proposito mi auguro stiate tutti bene!) sto cercando d'imparare ad utilizzare dei SN74HC595N, che ho ricevuto diverso tempo fa, collegandoli "a cascata".
Nessun problema a collegarne 2, (ho seguito pedestramente quanto indicato in questo tutorial), i problemi sorgono a collegarne un terzo (e poi un quarto).
Nel "void writeRegister(unsigned int value)" ho variato la variabile (scusate il bisticcio!") da "int" a "long" in modo da avere non 16 ma 32 bit; ho inoltre aggiunto un'ulteriore riga agli "shiftOut" facendolo partire dal bit 16.
#define DATA_PIN 4
#define LATCH_PIN 3
#define CLOCK_PIN 2
void setup(){
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
}
void loop(){
animation1(200);
}
void writeRegister(unsigned long value){
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 16);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 8);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value);
digitalWrite(LATCH_PIN, HIGH);
}
void animation1(unsigned long animationDelay){
for(int i = 0; i < 24; i++){
writeRegister(0x1 << i);
delay(animationDelay);
}
for(int i = 0; i < 24; i++){
writeRegister(0x8000000 >> i); //*** è qui l'errore? ***
delay(animationDelay);
}
}
Penso che l'errore sia dovuto alla mia non conoscenza dei numeri esadecimali; il mio ragionamento è stato:
se nel tutorial con 2 integrati si indica un 8 seguito da 3 zeri per 16 bit, ne occorrerà uno con 6 zeri per 32 bit.
Ragionamento sicuramente errato, ma non sono stato capace di trovare alcuna informazione per correggermi!!
Anticipatamente grazie per ogni indicazione/suggerimento vogliate darmi.
Saluti
Enrico