Shiftout 3 x 74hc595 - ShiftIn 3 x CD4021B

Un saluto a tutti

qualcuno mi potrebbe indicare dove poter trovare un collegamento x 3 shiftregister 74hc595 ?

e anche per 3 x CD4021B ? :slight_smile:

Per il momento ho fatto con 2x 74hc595 e 2x CD4021B

Grazie

Ciao!

Ciao cesco
Basta che colleghi il terzo come il secondo e invii o rispettivamente leggi 24 bit non 16 bit.
Ciao Uwe

più semplice del previsto :slight_smile:

Grazie mille!

Ciao

Io per lo ShiftIn ho fatto le prove con i 74HC165...da qualche parte ho preso lo schema nel playground.

scusate.. :frowning:

forse mi sto perdendo su un bicchiere d'acqua ma non ne vengo fuori.

Prima con 2 x 74hc595 usavo questo codice:

bitWrite(bitsToSend, whichPin, whichState);
byte registerOne = lowByte(bitsToSend);
byte registerTwo = highByte(bitsToSend);

dove whichPin era un intero da 1 a 15 ...

Ora come faccio? :-/

manda tutto il codice. Grazie
Ciao Uwe

// leggo i 2 cd4021b

switchVar1 = shiftIn(dataPin1, clockPin1);
switchVar2 = shiftIn(dataPin1, clockPin1);

pin1=switchVar1 << (1 - 7);
pin2=switchVar2 << (1 - 7);

switch (pin1) {
case 1:
lb=!lb;
ii=0;
break;
…

// qui lo switch continua con i valori letti dai 2 integrati (case 2 : ii= 1, case 4: ii= 2, case 8: ii=3 …ecc…)
// l’idea era quella di associare un ingresso ad un uscita direttamente…

//questa la chiamata:

registerWrite(ii, HIGH);

//Questa la funzione:

void registerWrite(int whichPin, int whichState) {

int bitsToSend = 0;

digitalWrite(latchPin, LOW)

bitWrite(bitsToSend, whichPin, whichState);
byte registerOne = lowByte(bitsToSend);
byte registerTwo = highByte(bitsToSend);

shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);

digitalWrite(latchPin, HIGH);

delay(20);

}

così

digitalWrite(latchPin, LOW);

// uscita 1
shiftOut(dataPin, clockPin, MSBFIRST, 2);
// uscita 2
shiftOut(dataPin, clockPin, MSBFIRST, 2);
// uscita 3
shiftOut(dataPin, clockPin, MSBFIRST, 2);

digitalWrite(latchPin, HIGH);

riesco a scrivere in seriale sui 3 integrati.

Però mi piacerebbe scrivere in parallelo convertendo i dati letti su pin1, pin2, pin3 (i tre 4021) direttamente per i tre 595. Qualcuno mi sa indicare un sistema veloce e comprensibile anche dai principianti come me?
:stuck_out_tongue:

Grazie

ho risolto passando i dati letti dai 4021 ai 595

switchVar1 = shiftIn(dataPin1, clockPin1);
switchVar2 = shiftIn(dataPin1, clockPin1);
switchVar3 = shiftIn(dataPin1, clockPin1);

registerWrite(switchVar1,switchVar2,switchVar3, HIGH);

void registerWrite(byte whichPin,byte whichPin2,byte whichPin3, int whichState) {

digitalWrite(latchPin, LOW);

// uscita 1
shiftOut(dataPin, clockPin, MSBFIRST, whichPin);
// uscita 2
shiftOut(dataPin, clockPin, MSBFIRST, whichPin2);
// uscita 3
shiftOut(dataPin, clockPin, MSBFIRST, whichPin3);

digitalWrite(latchPin, HIGH);

delay(20);

}

Ci sono soluzioni migliori? :slight_smile: help me please :cry: