Tuscany
Offline
Edison Member
Karma: 20
Posts: 1049
|
 |
« Reply #45 on: December 16, 2012, 02:43:35 pm » |
La mia perplessità è sul fatto che i led saranno più luminosi se ne accendo uno e meno se ne accendo di più E perche' dovrebbe, visto che in multiplexing ne accendi uno alla volta P.s. brunello che programma usi? Li fa proprio bene gli schemi! smiley-lol Non e' il programma... e' la mano che lo guida Comunque questi li faccio con Fidocad
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15707
+39 349 2158303
|
 |
« Reply #46 on: December 16, 2012, 04:23:40 pm » |
Ok, faro così. La mia perplessità è sul fatto che i led saranno più luminosi se ne accendo uno e meno se ne accendo di più. P.s. brunello che programma usi? Li fa proprio bene gli schemi!   Viene sempre messo solo un uscita del ULN2003 a massa e le uscite del 595 a H che corrispondono ai LED che devono accendersi di quella riga. Le resistenze sui collegamenti del 595 limitano la corrente dei LED. In questo modo la corrente attraverso i LED é sempre uguale indipendente dal numero di LED accesi. Ciao Uwe
|
|
|
|
« Last Edit: December 16, 2012, 04:25:46 pm by uwefed »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #47 on: December 16, 2012, 04:42:48 pm » |
Ok, faro così. La mia perplessità è sul fatto che i led saranno più luminosi se ne accendo uno e meno se ne accendo di più.
No. Ogni LED riceverà sempre una corrente costante visto che hanno tutti una propria resistenza.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 387
|
 |
« Reply #48 on: December 17, 2012, 03:19:43 am » |
ok. Grazie delle delucidazioni 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 387
|
 |
« Reply #49 on: December 17, 2012, 09:42:53 am » |
Per adesso funziona tutto, ma non capisco il "dato" dello sketch, mi potete dare una mano? //Il pin8 viene usato per abilitare la scrittura //sullo shift register int Abilitazione = 8; //il pin11 viene usato per inviare il dato int UscitaDatoSeriale = 11; //Il pin12 viene usato per generare il clock int DataClock = 12; //variabile che contiene il dato da scrivere sullo //shift register byte dato = 0; void setup() { //Setto i pin come uscite pinMode(Abilitazione, OUTPUT); pinMode(DataClock, OUTPUT); pinMode(UscitaDatoSeriale, OUTPUT); //Per il serial monitor (debug) Serial.begin(9600); } void loop() { //setto tutte le 8 uscite dello shift register a 1 dato=0b11111111; //invio il valore al serial monitor Serial.println(dato); //abilita la scrittura digitalWrite(Abilitazione, LOW); //invia il dato shiftOut(UscitaDatoSeriale, DataClock, LSBFIRST, dato); //Disabilita scrittura digitalWrite(Abilitazione, HIGH); //ritardo delay(500); } Perchè devo inviare il dato come 0bxxxxxxxx? Macchinamente riesco a far accendere i led che voglio, ma vorrei approfondire la questione. Grazie!
|
|
|
|
« Last Edit: December 17, 2012, 10:00:01 am by SUBSEA »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #50 on: December 17, 2012, 11:12:15 am » |
Ma lo sketch lo hai scritto te oppure no? Propendo per la seconda ipotesi, visto che dici di non capire "dato"... Sono un po' contrario alle "pappe pronte" perché si risolvono i problemi senza capire il perché.
Comunque.... un byte è un elemento della memoria del computer capace di immagazzinare 8 bit. Ogni bit rappresenta un singolo elemento della memoria, una specie di "interruttore". Come ogni buon interruttore, il bit può assumere solo 2 stati: 0 o spento, e 1 o acceso. Uno shift register contiene un registro interno ad 8 bit, ognuno dei quali governa un pin esterno. Per mettere su HIGH un pin devi impostare il corrispondente bit a 1 (interruttore acceso) e viceversa per LOW. Puoi spedire 1 singoli bit, che dovrai posizionare con tanti colpi di clock sul relativo pin finché non raggiunge la posizione voluta, e poi spedire lo stato del registro interno sui pin esterni mediante un segnale di latch, oppure usare la funzione shiftOut che spedisce 1 intero byte, bit per bit, dove ogni bit corrisponde allo stato dei pin. Quindi se spedisci 00000001 metterai su HIGH solo il 1° pin, con 10101010 metterai su HIGH i pin pari ecc....
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 387
|
 |
« Reply #51 on: December 17, 2012, 02:44:53 pm » |
ok, questo l'avevo capito. Non mi è chiaro come mai devo anteporre ai bit 0b... p.s. Cos'è un segnale di latch 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #52 on: December 17, 2012, 04:11:16 pm » |
ok, questo l'avevo capito. Non mi è chiaro come mai devo anteporre ai bit 0b...
Indica al compilatore che il numero che segue deve essere trattato in forma binaria. p.s. Cos'è un segnale di latch  "Latch" in inglese significa "paletto". In pratica è un segnale elettrico dato su un determinato pin che dice allo shift register di "spingere" (come si farebbe con un paletto che entra in una serratura) il valore dei bit del registro interno sui pin esterni. In questo modo l'1 diventa HIGH e lo 0 diventa LOW. Ma lo sketch lo hai scritto te oppure no?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 4
Posts: 387
|
 |
« Reply #53 on: December 17, 2012, 04:37:03 pm » |
e come si fa ad usare questi segnali di latch? ci si può riuscire solo con la funzione Shiftout? Comunque grazie, non sapevo che 0b indicasse la forma binaria. Ci sono altri codici? P.s. Lo sketch l'ho trovato su internet ma ci ho fatto amche qualcosa io. Non sei l'unico a cui non piace la "pappa pronta" 
|
|
|
|
« Last Edit: December 17, 2012, 04:42:36 pm by SUBSEA »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #54 on: December 17, 2012, 04:55:59 pm » |
Ti rimetto il link che spiega come usare gli S/R: http://www.arduino.cc/en/Tutorial/ShiftOutLì trovi come si usa il latch.
|
|
|
|
|
Logged
|
|
|
|
|
|