ciao a tutti. sto cercando di utilizzare uno shift register 74HC595 per accendere e/o spegnere contemporaneamente 8 led. Ho seguito passo passo questo tutorial http://www.arduino.cc/en/Tutorial/ShiftOut. lo shift register è http://docs-europe.electrocomponents.com/webdocs/0422/0900766b80422c0d.pdf, mentre i led sono http://docs-europe.electrocomponents.com/webdocs/0d4f/0900766b80d4f8f9.pdf, per cui ho messo 8 resistori da 100 Ohm. Ho anche messo un trasduttore da 1 micro F sul latchPin (ma da quello che ho capito non credo mi serva a molto). Avviando lo sketch che posto più sotto dovrei poter ottenere accensione e spegnimento degli 8 led contemporanemanete ogni 4 secondi. Eppure: i led, quando si accendono, si accendono o a coppie di due (e restano accesi), o 4 (e restano accesi). Raramente si accendono tutti e 8 (ma anche in questo caso poi non si spengono). I comportamenti, peraltro, avvengono quando inserisco la usb del pc all'Arduino e non quando faccio l'upload dello sketch. e non cambia nulla se tolgo il trasduttore.
Che fare? qualcuno mi aiuta a capire dove sbaglio? ...io ho pensato che ci sia qualcosa che non va nel dato binario dello shiftOut (non capisco molto in materia). Grazie in anticipo a tutti
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
delay(4000);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);
delay(4000);
}
grazie ad entrambi. ho fatto un po' di prove: @leo : non sono molto ferrato sui codici, ma credo di aver capito cosa intendi. ho provato ma purtroppo la sostanza non cambia =( @marco : ho tolto le resistenze da 100 ohm sostituendole con res da 220 ohm, cambia solamente che all'inserimento della usb i led si accendono per una fraz di secondo, mentre con le 100 ohm si accendono e restano accese =(
i led che hai indicato non possono essere alimentati con piu' di 30 mA per uso continuo (DC Forward Current), 100 mA di picco (con pulse width <=0.1msec duty <=1/10).
Per cui devi utilizzare resistenze > di 167 Ohm se utilizzi i 5 V.
Controlla che i led funzionino.
Hai fatto tutti i collegamenti bene?
Nella funzione shiftOut il quarto valore, ossia il value deve essere un byte, prova a inserire il numero come decimale.
ok:
lasciato resistenze da 220 Ohm, cambiato shift register con altro (sempre stesso 74HC595) e rifatto tutto il cablaggio. Purtroppo mi ritrovo sempre con un nulla di fatto
... qui mi trovi davvero impreparato :~
lo shiftOut accetta il binario (credo di default). come cambio in decimale i valori prima del void setup? dovrei per caso inserire:
int decimal = (e qui mi perdo...)
grazie in anticipo
siro
Marco ti ringrazio, ma continuo a rimanere impantanato... inoltre ho provato con altri sketch precompilati presi sempre dal tutorial, ma proprio non ne vuole sapere. riprovo a cablare il tutto per la terza volta...
prova a scollegare, se collegati, altri sensori, dispositivi che stai provando.
Verifica che non siano bruciati i led.
Prova ad accenderne prima uno, poi due, tre, ... alla volta.
Se hai un notebook tieni conto che alcuni modelli (tipo qualche Mac) hanno un output limitato a 100 mA (invede dello standard 500 mA).
Puoi provare con un alimentatore esterno (va bene anche un caricatore per telefonini).
Questa e' un'altra guida all'utilizzo del 74HC595:
La stessa funzione shiftOut non e' complessa, per cui il problema dovrebbe essere altro.
Il codice e' quello che si trova nel file wiring_shift.c del codice sorgente dell'arduino IDE.
ottimo!! finalmente risolto il problema con il 74HC595! in sostanza: @marco: avevi ovviamente ragione sulle resistenze, ho lasciato il binario e studiacchiando un po' qua e un po' la' ce l'ho fatta. @leo72: il cambiamento proposto del codice funziona perfettamente.
Per il resto avevo sicuramente sbagliato qualcosa nel cablaggio ...ancora non ho capito bene cosa... :~
grazie a tutti e due per avermi aiutato a ragionare e a risolvere il problema. Presto cercherò di fare interagire i led con un sensore LDR... tornerò a chiedere aiuto
grazie
ciao
Siro