Problema registro a scorrimento

Ciao ragazzi, ho comprato alcuni shift register da un rivenditore sparkfun, questo è l'oggetto in questione:

questo il datasheet:

Ho letto diverse guide all'utilizzo di questo integrato (tra cui quella presente su questo sito per ShiftOut), ma non riesco a far funzionare il tutto a dovere. Le guide mi sembrano consistenti col datasheet del componente, ma anche seguendole alla lettera non mi funziona niente.

Per ora sto cercando semplicemente di verificarne il funzionamento: gli passo un numero e controllo che le tensioni in uscita siano corrette, ovvero controllo che l'uscita parallela dello shift register sia effettivamente la codifica del numero che ho passato. Purtroppo non mi torna un bel niente, e non so da che parte rifarmi.

I collegamenti dovrebbero ssere corretti:

  • metto ad alimentazione il piedino 16 ed il 10
  • metto a massa il piedino 8 e il 13

Il codice che sto usando è questo, mi sembra corretto:

int latchPin = 8;
int clockPin = 7;
int dataPin = 11;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, 170); // (170)dec = (10101010)bin
    digitalWrite(latchPin, HIGH);

    delay(500);

}

Ho misurato le tensioni sui piedini dello shift register col multimetro, ecco i risultati:

PIN1 = 0.00
PIN2 = 0.00
PIN3 = 0.00
PIN4 = 0.00
PIN5 = 0.00
PIN6 = 0.00
PIN7 = 4.95
PIN8 = 0.00

PIN9 = 0.00
PIN10 = 4.95
PIN11 = 0.00
PIN12 = 4.95
PIN13 = 0.00
PIN14 = 0.00
PIN15 = 0.00
PIN16 = 4.95

voi ci capite qualcosa? perchè tutte le uscite sono a 0 tranne la 7, che sarebbe il bit n°8 (7 contando da 0) dell'output?

mi aspetterei di trovarli alternati tra 0 e 5V, come la codifica vorrebbe...

potete darmi una mano? può darsi anche che abbia fatto una cavolata mostruosa io, perciò non date niente per scontato...

vi ringrazio...

il codice sembre giusto negli esempi usano il pin 12 come clock pin, ma non dovrebbe cambiare. siccome sei in um loop prova a mettere dei led con le resistenze sui pin dello shift e metti un delay invece che di 500 a 2000 o 5000 per prova. cosi hai del tempo per capire cosa succede prima che rinizi il loop

ciao Kilin

Non hai scritto con cosa hai collegato i pin 7,8 e 11 del Arduino.

Ciao Uwe

giusto :smiley:

pin 14 shift register -> D11
pin 12 shift register -> D8
pin 11 shift register ->D7

guarda qui
http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
i collegamenti sono guisti prova nel pin 10 a mettere un circuito rc di pochissimi millesimi e prima di far partire il caricamento dati metti un delay di poco 100/50 forse non ri resetta bene

uhm, il delay l'ho messo ma non cambia niente, per quanto riguarda il circuito rc da mettere sul pin 10, puoi essere più specifico? non sono tanto pratico d'elettronica...

grazie

hai risolto?

eh no :-/

milionario che intendi?

prova nel pin 10 a mettere un circuito rc di pochissimi millesimi e prima di far partire il caricamento dati metti un delay di poco 100/50 forse non ri resetta bene

una resistenza di pochi ohm e un condensatore da 1microF?