shift register 74HC595

ciao a tutti
sono di roma e da pochi mesi ho iniziato a studiare elettronica per hobby per la mia passione di costruire lampade, e grazie ad arduino ho visto si possono fare cose molto belle.
mi sono imbattuto in questo componente 74HC595, vorrei avere una spiegazione del suo funzionamento. cioè cosa accetta in entrata per pilotare le varie uscite?

ieri ho fatto una prova come nel documento shiftout su questo sito e ai piedini di uscita avevo una tensione di 0.955 o 0.980. non è troppo bassa? che cosa voltaggio mi dovrei aspettare. lo so che i led si accendono a 0.7 ma il mio non si accendeva (led rosso)

grazie a tutti :wink:

ciao stefanosky
La tensione dei led quando sono polarizzati in modo che si accendono é tra 1,4 e 3,6 V a secondo del colore e percui il materiale con cui sono fatti.
Hai agiunto una resistenza per limitare la corrente del LED. Metti qualcosa tra 300 e 1000 Ohm.

Senza niente collegato le tensioni del 595 dovrebbero essere vicini a 0V e vicini a 5V.

Ciao Uwe

grazie della risposta.
ancora non ho messo le resistenze, la tensione di uscita è così bassa.
l'ho controllata con un multimetro.
forse c'era qualche falso contatto sulla breadboard.

in generale vorrei capire come funziona un microchip così.
ho visto il datasheet, che cos'è uno stage? non riesco a capirlo.
grazie

sai come funziona uno shift register?
http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
in pratica si mettono in ingresso dei bit 8 in modo seriale, qesti poi a seconda di come scegli escono in modo parallelo o in modo seriale.
prova a controllare che sia attiva l'uscita e l'enable, poi controlla il clock

no non so come funziona... sto vedendo dallo sheet, ma non sono abituato a leggere questi schemi. soprattutto quelli logici.

@milionario: stasera provo a fare questi controlli.
quindi creato un byte scelgo se farlo uscire dalle uscite parallele o dalla seriale. giusto?
ho visto infatti che dalla seriale escono dati per comunicare con un altro shiftregister

Ciao stefanosky
Hai un entrata seriale, un clock e un enable e 8 uscite.
Gli 8 bit gli scrivi uno dopo l'altro dentro e poi le 8 uscite prendono un valore per ogni bit inserito.
vedi Registro a scorrimento - Wikipedia

Mi ripeto metti le resistenze ai LED perché stai facendo un corto!!!

Ciao Uwe

grazie,
si ora mi sto chiarendo un po' con quell'articolo

non ti preoccupare :wink: i led ancora non li ho messi , si ho visto dal tutorial del sito di arduino i valori delle resistenze, grazie per i valori che hai postato.

mi sto ricordando che non ho messo a TERRA l'ultimo piedino sotto gli output e quindi la tensione era bassa, forse era quello. più tardi provo.

ciao

TRa gli avvertimenti:
-ricordati posizionare(polarizzare) i LED nella "direzione" giusta sennò non si accenderanno mai

grazie a tutti
ora ho i voltaggi giusti in output, avevo sbagliato un po di collegamenti.
ora aspetto i led che ho ordinato e do un'occhiata al codice per arduino.

bene
Ancora buona fortuna
Ciao Uwe

ciao,
allora ho montato il tutto carino e pulito
uno shift register col suo condensatore (ho messo 10microfarad 25v), e i led con le loro resistenze.
vado a scrivere
shiftOut(dataPin, clockPin, MSBFIRST, B00000110);
e si accendono i due led 2° e 3°
e poi?
cioè, se lancio ancora quel comando con altri valori non succede nulla.
così

digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000110);
digitalWrite(latchPin, HIGH);
delay(1000);
digitalWrite(latchPin, LOW);
delay(1000);
shiftOut(dataPin, clockPin, MSBFIRST, B00110000);
digitalWrite(latchPin, HIGH);
delay(1000);

rimane al primo valore B00000110

dove si azzera il chip? come?
pensavo bastasse mandargli una serie di bit
e come si shifta? cioè shift register non mi dovrebbe far lavorare sui bit con qualche comando?

grazie mille :wink:

voi usate solo il metodo shiftOut per dialogare con lo shift register?

togliendo il secondo delay(1000); ti funziona?
Ciao Uwe

se tolgo quel delay rimane fermo al primo byte
posto l'immagine con lo sketch caricato
non ho resistito l'ho messo anche su youtube http://www.youtube.com/watch?v=9BFxg98OYBE :wink:

ma il loop in arduino ogni quanto lo ripete?
grazie


aggiunta:
guardando la foto ho avuto l'idea: nel fare tutto compresso ho sbagliato a mettere i led che terminano sul lato del condensatore!
ho tolto il collegamento tra il condensatore e la terra e ora va.
quindi ho il condensatore libero , cioè è collegato solo al piedino del chip. se provo a metterlo a terra si blocca il movimento led.
idee?

Ciao stefanosky

Il condensatore al pin 12 (latch clock) non ci va. Toglilo del tutto.
Ralenta la velocitá di passare da LOW a HIGH e viceversa.
Il datasheet da il parametro "maximum input Rise and Falll Times" per 5V ca 0,5 µsec.
HTTP 301 This page has been moved pagina 4 e figura 1 alla pagina 6.

La funzione loop: ogni volta che ha finito di elaborare le istruzioni rincomincia dal inizio della funzione.

La velocitá di ripetizione dipende dal tempo che serve per la funzione Loop. Se fai solo un delay di 1 secondo la funzione vrrá eseguito ca 1 volta al secondo.

Ciao Uwe

ok, grazie uwefed.
più tardi inzio a montare un piccolo termometro che illumina i led.


FATTO:
ecco il video LED Termometer (arduino + LM35DZ + shift register - YouTube

nel video su youtube ho messo la spiegazione dei led che si accendono, la rimetto qui:
ho considerato gli 8 led che riesco a pilotare
primo : led per segno
2° : se è 10
3°: 20
4° : 30
5°: 1
6°: 2
7°: 3
8°: 5

quindi per fare 37°C accendo tutti e tre le decine e il 6° e l'8°

nel codice ho preso il campione di temperatura con degli if ho visto che decina avesse e imposto un flag a una variabile di appoggio
poi sottraggo al valore temperatura il flag (0, 10, 20, 30) e ottengo le decine che scorro con uno switch.

così si accendono prima le decine e poi le unità; vorrei costruire la stringa del byte da passargli in una volta con questa analisi utilizzando string, char e byte(). poi mi ci metto.

byez

PS: ma perchè nel forum non sempre appare il bottone modifica del msg?