Go Down

Topic: ShiftOut e 74hc595 (Read 894 times) previous topic - next topic

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: http://arduino.cc/en/Reference/shiftOut

e avendo chiara la sintassi
Code: [Select]
   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...

leo72

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:
http://arduino.cc/en/Tutorial/ShiftOut
http://arduino.cc/en/Reference/BitwiseAnd :~
http://arduino.cc/en/Reference/Bit


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: http://arduino.cc/en/Reference/shiftOut

e avendo chiara la sintassi
Code: [Select]
   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  :smiley-mr-green:
allora ceerco di aiutarti
innanzitutto prima di dare il comando shiftOut devi abilitare il latch per poter aprire la ricezione dei dati
Code: [Select]

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
Code: [Select]

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  :smiley-sweat:
ciao  :D

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... :smiley-mr-green:


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... :smiley-mr-green:

ma Qa ti ha fatto qualcosa che non lo metti?  :smiley-yell:

leo72

Su Qi e Qa il bit non va!  :smiley-yell: :smiley-yell:


uwefed


leo72

Vieni Qi che te lo spiego  :smiley-yell:


superp

Non riesco a credere che tu sia Qi, ma se Qo e Qa me lo confermano..... :smiley-mr-green:
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

leo72

Occhio che Qi ci bannano  ;)

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy