Tips & Tricks - PIC

 


Quanti LED si comandano da un pin ?


Quanti LED si comandano da un pin ?

La risposta parrebbe semplice: uno

La configurazione è quella classica, con il carico appeso alla Vdd (o verso la Vss).
Ogni pin comanda un LED, che ha in serie la relativa resistenza.


1 PIN - 1 LED: prima versione

La configurazione è quella classica, con il carico appeso alla Vdd.
Ogni pin comanda un LED, che ha in serie la relativa resistenza.

In questo modo è possibile alimentare LED (o altri carichi) fino alla capacità di corrente dell' I/O,  tipicamente 25 mA massimi, anche è consigliabile stare sotto questo valore, per sicurezza (Una discussione approfondita su questo aspetto è consultabile qui).

Con questa configurazione è possibile accendere e spegnere entrambi i LED.

fig.1

La tabella riporta le possibili condizioni

Pin B Pin A LED 2 LED 1
0 0 on on
0 1 on off
1 0 off on
1 1 off off
0 = livello basso  1 = livello alto

Altrettanto per la configurazione con il comune alla Vss

Per il carico verso la Vss (GND) la logica di comando è invertita rispetto alla situazione precedente.
 
Pin B Pin A LED 2 LED 1
0 0 off off
0 1 off on
1 0 on off
1 1 on on
0 = livello basso  1 = livello alto

fig.2

Per quest'ultima applicazione esistono anche LED bicolori, ovvero con due emettitori di luce di diverso colore in un solo contenitore


 
LED rosso/verde Kingbright L59EGW
(Rs cat. 228-5764)

Questi LED bicolori sono normalmente realizzati a catodo comune; il fatto che entrambe le sorgenti siano molto vicine e nello stesso contenitore fa si che si possono presentare colori diversi a seconda che sia acceso uno oppure l' altro o entrambi gli emettitori e si può giocare anche su sfumature intermedie comandando in PWM i due LED separatamente.

Quanti LED posso accendere ?

Il limite è dato dalla massima corrente che il microcontroller può gestire. Per i PIC in package DIP solitamente la massima corrente che può essere assorbita dalla Vdd è 250 - 300 mA.
Quindi se vogliamo comandare 16 LED da 20 mA ciascuno, superiamo ampiamente questo limite e non sarà possibile che tutti siano contemporaneamente accesi. Possiamo considerare ragionevole, dato che sarà necessario lasciare un margine di sicurezza e un ulteriore margine per la corrente consumata dalle altre parti del microcontroller, non superare in alcun caso un centinaio di mA continui, ovvero 5 LED a 20 mA o 10 LED a 10 mA. Minore stress per il microcontroller sarà il caso di una gestione impulsiva dei LED, con tempi di on minori del 100%.
 


2 PIN - 2 LED

Altro modo di comandare un paio di LED è quello di utilizzare due pin, scambiandone alternativamente il livello. 

II LED sono in controfase: occorre che entrambi pin  siano configurati come uscita e abbiano livello diverso.
I LED sono spenti se i livelli sono uguali.
 
Pin B Pin A LED 2 LED 1
0 0 off off
0 1 off on
1 0 on off
1 1 off off
0 = livello basso  1 = livello alto
fig.3

Anche questa configurazione permette di spegnere entrambi i LED  o di accenderne uno alla volta, ma si devono utilizzare sempre due pin
La resistenza di limitazione è unica, dato che solamente uno dei due LED è acceso. 

Per questo tipo di collegamento esistono in commercio LED controfase in un unico contenitore, anche di colori diversi.


Kingbright L-937EGW 
(RS cat.228-5641)


Anche in questo caso, il fatto che entrambe le sorgenti siano molto vicine e nello stesso contenitore fa si che si possono presentare colori diversi a seconda che sia acceso uno oppure l' altro o entrambi gli emettitori.

Per poter farli risultare, ad un osservatore, accesi entrambi occorre utilizzare una rapida commutazione dei pin, ad una frequenza superiore alla minima latenza dell' occhio.

Pin B Pin A LED 2 LED 1
0 0 off off
0 1 off on
1 0 on off
1 1 off off
1/0 > 100 Hz on on

 

Usando LED separati di diverso colore e modello, se la luminosità non è simile, è probabile che uno dei due colori si percepisca meno luminoso dell' altro. 

La soluzione è semplice: dotare ogni LED della propria resistenza di limitazione e calcolarla in modo da ottenere la luminosità voluta (sempre restando nel limite massimo della corrente erogabile dai pin)

fig.4

Fino a qui abbiamo confermato la risposta data immediatamente alla domanda: 1 pin - 1 LED.

Ma non può essere certamente solo così...


1 PIN - 2 LED !

Ci si può trovare nella necessità di comandare più LED di quanti siano i pin a disposizione o anche semplicemente di dover aggiungere una segnalazione in più su un progetto già esistente.

E si scopre che è possibile, con grande semplicità, comandare due LED con un solo pin di I/O,

La possibilità più semplice parrebbe la seguente:

Il principio di funzionamento è semplicissimo :
  • se pin A è posto a livello 0, conduce il MOS verso la Vss: la corrente attraverserà R1 e LED1, che sarà acceso, mentre LED2 resterà spento
  • portando pin A a livello alto, conduce il MOS verso la Vdd: si invertirà lo stato dei LED e ad accendersi sarà LED2

Viene usata una sola resistenza di limitazione in quanto viene acceso un solo LED per volta.
Anche qui è possibile "accenderli" entrambi commutando rapidamente lo stato del pin.

fig. 5

La differenza essenziale rispetto allo schema precedente consiste nel fatto che non è possibile accendere  o spegnere contemporaneamente entrambi i LED.

Pin A LED 2 LED 1
0 off on
1 on off


Anzi, se portiamo il pin in tri-state (configurandolo come input) e la V+, ad esempio 5 V, è maggiore della somma delle tensioni di conduzione dei due LED, ad esempio uno rosso da 1,7 V e uno verde da 2 V, nel momento in cui nessuno dei due MOS complementari che comandano l' uscita sul pin shunta uno dei due LED, fornendo una via per la corrente attraverso la R1, entrambi i LED vanno in conduzione e senza alcuna resistenza di limitazione in serie! Puff...

Nello schema della fig.5 dobbiamo utilizzare per LED1 e LED2 due elementi che abbiano una Vf maggiore della metà di V+.
Allora, portando il pin A in tri-state (configurandolo come ingresso), nessuno dei due LED sarà acceso, perchè i LED, trovandosi sostanzialmente in serie (il pin configurato come ingresso assorbe una corrente trascurabile), sommano le loro tensioni di conduzione e se 

 Vf LED1 + Vf LED2  > V+ 

attraverso i diodi non scorrerà che la corrente di perdita dei semiconduttori, pari a pochi microampere e i LED saranno spenti.

Questo è possibile, ad esempio, usando due LED verdi , con tensione tipica di almeno 2 V e una tensione di alimentazione V+ di 3 V: la tensione di conduzione dei due LED in serie sarà 4 V, maggiore di quella di alimentazione, quindi i LED saranno spenti.

Ovviamente se la tensione di alimentazione è più grande di 3 V, ad esempio 5 V, e non stiamo usando LED blu o verdi, ma comuni LED rossi, questo non è possibile, in quanto la somma delle tensioni di conduzione dei LED è inferiore alla tensione di alimentazione.

Inoltre è probabile che, comandando un LED, la caduta di tensione su R1 + quella sul MOS interno non sia sufficiente a shuntare completamente la corrente nell' altro LED, che risulterà acceso, magari solo debolmente.

Occorre fare qualcosa di diverso:

Usando una resistenza per ogni LED si evita che, mancando il comando, la corrente nei LED salga oltre i limiti massimi.

Però la situazione non è ancora perfetta, perchè mandando in tri-state il pin,  se la Vf dei LED è sufficiente bassa rispetto alla V+, probabilmente la serie R1-LED1-R2-LED2 farà passare una corrente sufficiente a mantenere illuminati, anche se debolmente, i due LED.

Ricordiamo che un LED da 20 mA nominali, si "accende" anche con 1 o 2 mA o meno.

fig.6

Occorre un ulteriore passo per poter spegnere con sicurezza entrambi i LED.


Spegnere i LED

Un LED presenta una tensione tipica di conduzione Vf, dipendente dal materiale con cui è costruito (e quindi, in generale, dal colore della luce che emette). Al di sotto di questa tensione il LED non conduce (e non si accende). I valori tipici sono :

Colore  Tensione Vf  [V]
infrarosso 1,3
rosso 1,8
giallo 1,9
verde 2,0
arancio 2,0
blu-bianco 3,0
blu 3,5
UV 4 ÷ 4,5

Questi sono comunque valori di massima; ogni specifico modello di LED potrà allontanarsi anche di molti decimi di volt dai quanto indicato e sarà sempre cosa indispensabile verificare i fogli dati del componente. 
Inoltre la Vf varia, a volte sensibilmente, a seconda della corrente che attraversa il diodo.

Si potrà allora ricorrere ad una semplice aggiunta di un diodo in modo da ottenere nei diodi in serie una tensione tale aumentare la tensione di conduzione della serie e impedire la circolazione di corrente quando il pin di comando è isolato.

Ad esempio, utilizzando due comuni diodi universali (1N4148 o simili), che hanno tensione tipica di 0,6V, e dei LED bianchi, la catena composta da LED1, LED2, D1, D2 avrà al minimo una tensione di conduzione di :

3+0,6+3+0,6 = 7,2 V

assicurando che i LED siano spenti quando il pin di comando è input.

fig. 7

Se occorre una caduta di tensione maggiore sarà possibile inserire dei diodi zener a bassa tensione di soglia.
Zener 1/4 W da 2, 2.4, 2.5, 2.7, 3 e 3.3 V sono disponibili da numerosi costruttori (BZX79, BZX84, MMSZ52, ecc.) possono essere valutati per questo impiego.

Ad esempio, utilizzando due LED rossi con Vf = 1,7 V, si potranno inserire degli zener da 2.7 V. La catena composta da LED1, LED2, DZ1, DZ2 avrà al minimo una tensione di conduzione di :

2,7+1,7+2,7+1,7 = 8,8 V

assicurando che i LED siano spenti quando il pin di comando è input.

fig. 8

Si potranno utilmente utilizzare piccoli diodi Schottky (Vf tra 0,3 e 0,65 V) o al germanio per inserire cadute di tensione diverse.

Va notato che le tensioni di conduzione sono valori che hanno un certo spettro di variabilità all' interno di uno stesso modello di componente e ancor di più tra famiglie diverse di componenti, per cui , nell' esempio precedente, anche se teoricamente tutto è ok, in pratica potrà essere necessario fare qualche prova e misurazione con i componenti che si vogliono utilizzare.

Per riassumere, la regola generale è :

  • la tensione complessiva di ogni ramo non deve essere superiore alla tensione di alimentazione

  • la tensione complessiva dei due rami deve essere superiore alla tensione di alimentazione.

Va considerato che anche il port ha una sua resistenza interna che , per piccoli valori di tensione in gioco, può essere necessario considerare nella somma delle tensioni del ramo quando si calcola la resistenza di limitazione della corrente.

Abbiamo quindi visto come accendere o spegnere i LED. La tabella raccoglie lo stato dei LED in funzione della programmazione del pin di comando :

pin A LED1 LED2
Direzione Livello
output 0 on -
output 1 - on
input - - -

Esempi di calcolo teorici: due LED uguali

Nei circuiti delle figure 2, 3  e 4 , la tensione di conduzione di una ramo è pari alla somma della tensione del LED più quella degli eventuali diodi in serie e questo permette di calcolare la resistenza R1.

R1 = (V - Vled - Vd) / Iled

dove V è la tensione di alimentazione, Vled la tensione di conduzione del LED, Vd la tensione di conduzione del diodo e Iled la corrente voluta nel LED.
Ad esempio, per la figura 3, per una Iled = 15 mA :

R1 = (V - Vled - Vd) / Iled = (5 - 3 - 0,6) / 0,015 = 93,3 ohm

che potrà essere arrotondato al valore standard più comune di 91.

Per essere precisi, si dovrebbe tenere conto anche della caduta interna del MOS del pin di comando :

R1 = (V - Vled - Vd - Vpin) / Iled = (5 - 3 - 0,6 - 0,7 ) / 0,015 = 46,6 ohm

che potrà essere arrotondato al valore standard più comune di 47.

Più avanti sono riportati alcuni esempi reali.


LED di colore diverso

Ci si può porre il problema dell' uso di LED di diverso colore, ad esempio uno rosso e uno verde.
In questo caso l' impiego di una sola resistenza fa si che la corrente nel LED rosso, che ha una Vf minore, sia più elevata di quella nel LED verde, che ha una Vf maggiore.
Solitamente questo non è un grosso problema, bastando calcolare la R1 e la R2 per una corrente che renda entrambi i LED sufficientemente visibili nelle condizioni di uso volute.

Avendo però la necessità di regolare con precisione la corrente nei due rami, la R1 dovrà essere divisa in due resistenze in serie ad ogni ramo.

Il calcolo delle resistenze sarà effettuato con il solito metodo.

R1 = (V - Vled - Vd ) / Iled

dove V è la tensione di alimentazione, Vled la tensione di conduzione del LED, Vd la tensione di conduzione del diodo e Iled la corrente voluta nel LED

Più precisamente :

R1 = (V - Vled - Vd - Vport) / Iled

dove Vport è la caduta di tensione sui commutatori MOS interni al port.

Analogamente per il ramo di LED2

fig. 9

Ad esempio, volendo utilizzare LED 1 rosso (Vf = 1,75 V) e LED 2 verde (Vf = 2,0 V) , entrambi con una corrente di 10 mA , si potrà utilizzare una coppia di diodi generici 1N4148 (Vf= 06V) in serie per D1 e un diodo tipo 1N4148 (Vf=0,6V) per D2 :

R1 = (VOH - Vled1 ) / Iled = (4.3 - 2) / 0.01 = 205 ohm

R2 = (VOL - Vled2) / Iled = ( - 2.4) / 0.01 = 240 ohm

In alternativa si potrà giocare sulle cadute di tensione dei diodi aggiunti per avere una Vf totale per ramo praticamente uguale.

Se pure oltre ai LED sono impiegati altri componenti, rispetto ad altri metodi, questo circuito permette, con la massima semplicità, di :

  • azionare due LED con un solo pin

  • assorbire solo la corrente necessaria ad accendere il LED voluto

  • non assorbire corrente quando i LED sono spenti.

Infatti, se il pin di comando è posto come ingresso, la corrente nei diodi è quella di perdita dei due rami in serie, ovvero di pochi microampere (tipicamente < 50 uA), il che ne consiglia l' uso anche in sistemi alimentati a batteria.


E per accendere entrambi i LED ?

Se è immediata la comprensione del sistema di accensione-spegnimento dei LED, può esserlo meno la via per poter accendere entrambi.

Ma , a pensarci un attimo, non è poi così complesso: come già accennato, basta commutare il pin di comando tra 0 e 1 con una cadenza tale da permettere all' occhio di conservare l' immagine , quindi dell' ordine dei 100 Hz. 
Per i PIC che dispongono di un modulo PWM, può essere pratico usare l' uscita del modulo e inserire una routinetta, il che scarica il micro dalla gestione dello switch del port stesso.

Possiamo quindi completare la tabella precedente:

pin A LED1 LED2
Direzione Livello
output 0 on -
output 1 - on

0/1 > 100Hz

on on
input - - -

NOTE

  1. Tutti i pin GPIO dei PIC che hanno un totem pole in uscita sono utilizzabili per questa funzione, mentre non lo sono quelli open drain, come è tipicamente il PORTA4

  2. E' evidente che la V+ non potrà essere superiore alla tensione massima ammissibile per l' alimentazione del micro, ovvero tipicamente 5V. 
    Se sono richieste tensioni di alimentazione maggiori per i LED, sarà necessario utilizzare un buffer esterno. 

  3. Per quanto detto al punto 1,  alla Vdd non sono applicabili tutte le possibili combinazioni dei LED esistenti, sopratutto se è minore di 5 V.
    In particolare LED con Vf >3 V non possono essere usati in questa configurazione, perchè la serie avrebbe una tensione di conduzione maggiore della Vdd.

  4. La corrente massima dei LED non può essere maggiore della corrente gestita dal port, che per i PIC è tipicamente 25 mA MASSIMI. Se sono richieste corrent maggiori per i LED, sarà necessario utilizzare un buffer esterno.

  5. Un LED che funga da indicatore su un pannello si accende bene con correnti inferiori a 20 mA. Inoltre non è molto sensato impiegare forti (!) correnti per singole segnalazioni : gran parte dei LED si accende in modo più che adeguato con 5 mA ed esistono LED ad alta sensibilità in grado di accendersi pienamente con 2 mA o meno. Ovvero, dove non sia necessario, è più sensato risparmiare energia.

  6. La condizione di minore consumo di corrente a LED spenti si ha utilizzando un port con schmitt trigger o un port analogico.

  7. Come già detto, va considerato che anche il port ha una sua resistenza interna che , per piccoli valori di tensione in gioco, può essere necessario considerare nella somma delle tensioni del ramo quando si calcola la resistenza di limitazione della corrente.

 


Esempi pratici

Le prove realizzate praticamente riguardano la possibilità di collegare LED uguali o diversi per una segnalazione su scheda o sul pannello di uno strumento. Per questo si sono provati LED rossi, verdi e gialli, dando particolare rilievo al risparmio energetico.

Es. 1

Con riferimento alla fig. 5, vogliamo comandare un LED1 rosso (Kingbright L383IDT - Distrelec 253231 ) e un LED 2 verde (Kingbright L383GDT - Distrelec 253232 ) con una Vdd di 5 V.
La corrente nominale di questi LED è prevista dal costruttore a 10 mA, ma con 5 mA la luminosità è più che adeguata.

Se utilizziamo per D1 una coppia D1+D3 di 1N4148 in serie e altrettanto per D2, con i LED spenti la corrente nella serie è circa 29 uA.
Considerando la Vf di LED1 =  1,8 V , la Vf di LED2 =  2 V e quella dei diodi pari a 0.6 V , possiamo calcolare le resistenze :

R1 = (Vdd - Vled1 - Vd1 ) / Iled = (5 - 1,85 - (0.7  - 0.7)) / 0.005 = 350 ohm

R2 = (Vdd - Vled1 - Vd1 ) / Iled = (5 - 2 - (0.7  - 0.7)) / 0.005 = 320 ohm

Utilizziamo una R1 da  330 ohm e una R2 da 270 ohm.
Chi dispone di resistenze della serie E24 o E96 ha, ovviamente, una scelta maggiore.

Collegando a massa o al +V il punto di giunzione delle resistenze, le correnti misurate saranno :

  •   LED rosso circa 5,4 mA
  •   LED verde circa 5.9 mA

che sono valori più che adeguati .

Se ora rimuoviamo lo switch , colleghiamo il punto di giunzione delle resistenze ad un pin del micro e commutiamo questo pin, rileveremo una corrente di  5 mA a livello alto e 5,1  mA a livello basso. 

La differenza tra questi e i valori precedenti è data dalla caduta di tensione sui MOS del port , che non abbiamo considerato nel calcolo.

fig.10

Volendo aumentare la corrente nei LED , sarà necessario ridurre le resistenze rispettivamente a 150 e 100 ohm ; le correnti passano a  9,7 mA e  9,2 mA.

Si potrebbe notare che, aumentando la tensione della serie, ad esempio sostituendo i due 1N4148 con uno zener da 2,7V (BZX84C2V7) la corrente a vuoto cade a soli 2,8 uA. Però , per ottenere 5 mA di accensione le resistenze diventa  56 ohm per R1 e  22 ohm per R2.

Se ora eliminiamo il deviatore e colleghiamo il circuito al micro, ci troveremo a dover abbassare le resistenze fin quasi ad annullarle. Questa condizione non è molto pratica in quanto potrebbe capitare una tolleranza dei componenti in una sola direzione che impedirebbe l' accensione di uno o di entrambi i LED.
Quindi il bilanciamento tra la corrente a vuoto e la soglia di tensione che assicura l' accensione di ogni ramo deve essere valutata con un poco di buon senso.

Per curiosità, il port utilizzato per il test, in ingresso, assorbiva circa 0,12 uA.

Es. 2

Sempre con riferimento alla fig. 5, i LED da azionare sono : LED1 rosso (HLMP4700 - RS  590547) e LED2 giallo (HLMP4719 - RS 590569 ). Si tratta di modelli a bassa corrente (2 mA tipici).
Utilizziamo ancora 4 diodi 1N4148; si otterrà una corrente a vuoto di circa  48 uA nella serie.
Utilizzando una R1 da 860 ohm e una R2 da 820 ohm, le correnti saranno rispettivamente 2,14 mA e 2 mA. 

Es. 3

Utilizzando due LED uguali, ad esempio rossi (HLMP4700 - RS  590547), al posto di R1 e R2 basta collegare una sola R tra il pin di controllo e il punto di giunzione delle due serie di diodi.
Utilizziamo ancora 4 diodi 1N4148; si otterrà una corrente a vuoto di circa  70 uA.
Inserendo una R da 820 ohm, le correnti nel LED collegato al +V e in quello collegato a massa saranno rispettivamente  2.2 mA e 2,18 mA.  La differenza, per quanto riguarda la luminosità valutabile a occhio, è impercettibile.
 


1 Pin - 2 LED ver. 2.0

Possiamo anche accendere due LED attraverso un solo pin con questo collegamento.

Il funzionamento è semplice: quando il pin è a livello basso, condurrà LED2, che sarà acceso, mentre LED1 sarà spento.
Invertendo il livello del pin, i LED cambieranno lo stato.
Con il pin configurato come ingresso, entrambi i LED saranno spenti.

R1 sarà la resistenza di limitazione di LED1 e R2 quella di LED2.

La funzione di controllo:

pin  LED1 LED2
Direzione Livello
output 1 on -
output 0 - on
input - - -

L' accensione di entrambi sarà effettuata come nel caso precedente commutando rapidamente lo stato del pin.

L' unico punto negativo di questa soluzione extra semplice è un passaggio di corrente tra la Vdd e la massa attraverso R1 in serie a R2 a LED spenti.

Esempio

Utilizziamo un LED bicolore rosso/verde TLUV-5300 di Vishay, con una corrente tipica di 10 mA. Viene data una Vf tipica per il rosso di 2V (LED1) e 2.4V per il verde (LED2). Con una Vdd=5V calcoliamo le resistrenze, considerando, a scopo conservativo, anche le cadute di tensione sui MOSFET del port:

R1 = (Vdd - Voh - Vled1) / Iled = (5 - 0.7 - 2)) / 0.01 = 230 ohm

R2 = (Vdd - Vol - Vled1) / Iled = (5 - 0.6 - 2.4)) / 0.01 = 200 ohm

Se entrambi i LED sono spenti, va persa una corrente:

Ir = Vdd / (R1 + R2) = 5 / (230+200) = 11 mA

 


Conclusioni

E' possibile collegare con semplicità due LED ad un solo IO, permettendone il comando completo.
Il vantaggio del primo sistema consiste in una corrente a LED spenti praticamente trascurabile, ma con la possibilità di regolare la corrente di accensione dei singoli LED.
Il vantaggio del secondo è l' estrema semplicità ed il minimo numero di componenti a fronte di una certa corrente persa a LED spenti.
Lo svantaggio del primo metodo è la necessità di aggiungere più componenti, ma questo è un falso problema, dato che si tratta di componenti a basso costo e che occupano uno spazio trascurabile sul circuito stampato, sopratutto se si utilizzano SMD. Il circuito si presta bene per apparati a basso consumo, anche alimentati a batteria. Per contro è poco pratico o non realizzabile per LED a tensioni di conduzione elevate.
Il secondo metodo è adatto per qualunque tipo di LED con una Vf tale da poter essere alimentato dalla Vdd e con una corrente non superiore alla portata del pin di uscita del microcontroller. Per contro, maggiore la corrente che si vuole nei LED accesi, minore sarà il valore delle resistenze e quindi la corrente persa a LED spenti; questo non è adatto per sistemi alimentati a batteria.

In tutti i casi va considerato che, accendendo entrambi i LED con la commutazione alternata del pin di controllo,  la luminosità  si ridurrà un poco a causa del comando a impulsi.
Ovviamente non c'è nessuna controindicazione ad accendere i LED con un PWM per variarne la luminosità o ottenere effetti di colore.

 



 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 01/09/12 .