Go Down

Topic: multiplexing leds (Read 3 times) previous topic - next topic

Brunello

Quote
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

Quote
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

uwefed

#46
Dec 16, 2012, 10:23 pm Last Edit: Dec 16, 2012, 10:25 pm by uwefed Reason: 1

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!  XD



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

leo72


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.

Subsea

ok. Grazie delle delucidazioni :D

Subsea

#49
Dec 17, 2012, 03:42 pm Last Edit: Dec 17, 2012, 04:00 pm by SUBSEA Reason: 1
Per adesso funziona tutto, ma non capisco il "dato" dello sketch, mi potete dare una mano?
Code: [Select]
//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!

leo72

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....

Subsea

ok, questo l'avevo capito. Non mi è chiaro come mai devo anteporre ai bit 0b...
p.s. Cos'è un segnale di latch :smiley-mr-green:

leo72


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

"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?

Subsea

#53
Dec 17, 2012, 10:37 pm Last Edit: Dec 17, 2012, 10:42 pm by SUBSEA Reason: 1
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" :smiley-mr-green:

leo72

Ti rimetto il link che spiega come usare gli S/R:
http://www.arduino.cc/en/Tutorial/ShiftOut
Lì trovi come si usa il latch.

Go Up