ShiftOut e 74hc595

Ciao a tutti

in questi giorni sto facendo test (ma soprattutto ricerche) sul funzionamento di ShiftOut....

La mia idea era di andare a pilotare 6 uscite sfruttando solo 3 digital output di arduino...

Benissimo allora tanto per provare ho inserito un LED per ciascuna delle seguenti uscite:

Qb, Qc, Qd, Qe, Qf, Qg

e avendo letto qui: shiftOut() - Arduino Reference

e avendo chiara la sintassi

    shiftOut(dataPin, clockPin, LSBFIRST, j);

non mi è chiaro come e dove ricavo i valori di j per pilotare in modo corretto le uscite...

se qualcuno potesse farmi chiarezza, perchè tutti gli esempi del web usano cicli for ma io non devo fare un ciclo, a seconda delle necessità devo attivare 0,1,2,3,4,5,6 uscite...

Il valore di "j" lo devi calcolare tu.
Devi rifarti alla logica binaria, dove ogni numero nella memoria dei microcontrollori è memorizzato dividendolo in byte e questi ultimi in bit.
Avendo il 595 8 uscite, devi quindi usare 8 bit. 8 bit sono 1 byte. Quindi dichiari "j" di tipo byte.
A questo punto se metti in un bit il valore 0 quel pin sul 595 verrà messo su Low, se metti un bit a 1, quel bit indicherà che il corrispondente pin sul 595 dovrà essere messo su High.

Ti consiglio di proseguire qui:

& - Arduino Reference :~
http://arduino.cc/en/Reference/Bit

max95:
Ciao a tutti

in questi giorni sto facendo test (ma soprattutto ricerche) sul funzionamento di ShiftOut....

La mia idea era di andare a pilotare 6 uscite sfruttando solo 3 digital output di arduino...

Benissimo allora tanto per provare ho inserito un LED per ciascuna delle seguenti uscite:

Qb, Qc, Qd, Qe, Qf, Qg

e avendo letto qui: shiftOut() - Arduino Reference

e avendo chiara la sintassi

    shiftOut(dataPin, clockPin, LSBFIRST, j);

non mi è chiaro come e dove ricavo i valori di j per pilotare in modo corretto le uscite...

se qualcuno potesse farmi chiarezza, perchè tutti gli esempi del web usano cicli for ma io non devo fare un ciclo, a seconda delle necessità devo attivare 0,1,2,3,4,5,6 uscite...

lo stesso mio problema di una volta :grin:
allora ceerco di aiutarti
innanzitutto prima di dare il comando shiftOut devi abilitare il latch per poter aprire la ricezione dei dati

digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);  
digitalWrite(latchPin, HIGH);

quella j non è altro che un byte dove in ogni bit lo zero corrisponde a led spento e a 1 led aceso;
se per esempio vuoi accendere tutti i led basterà mettere al posto di j questo: 0b11111111 (in binario), in esa 0xFF, in decimale 255
in quel codce del reference la j non è altro un numero da 0 a 255 che fa accendere in una certa sequenza i led
Altro esempio:
vuoi accendere un led si e uno no allora fai cosi

digitalWrite(latchPin, LOW); //apri trasmissione
shiftOut(dataPin, clockPin, MSBFIRST, 0b10101010); //invia i valori di Qx
digitalWrite(latchPin, HIGH); //chiudi trasmissione e imposta i valori di Qx

spero di non aver detto niente di sbagliato :sweat_smile:
ciao :smiley:

Fantastico ora ho capito!!!!

per chi vuole attivare output "singoli" basta usare:

Qb = 0b00000010
Qc = 0b00000100
Qd = 0b00001000
Qe = 0b00010000

e cosi via...

grazie ancora... :grin:

max95:
Fantastico ora ho capito!!!!

per chi vuole attivare output "singoli" basta usare:

Qb = 0b00000010
Qc = 0b00000100
Qd = 0b00001000
Qe = 0b00010000

e cosi via...

grazie ancora... :grin:

ma Qa ti ha fatto qualcosa che non lo metti? :stuck_out_tongue_closed_eyes:

Su Qi e Qa il bit non va! :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

leo72:
Su Qi e Qa il bit non va! :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

:stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Qi capisco ma Qa?

Vieni Qi che te lo spiego :stuck_out_tongue_closed_eyes:

leo72:
Vieni Qi che te lo spiego :stuck_out_tongue_closed_eyes:

adesso ci vuole il ROTFL ahahahaha :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Non riesco a credere che tu sia Qi, ma se Qo e Qa me lo confermano..... :grin:

Occhio che Qi ci bannano :wink: