Come controllare tre LED con due pin uC usando solo componenti passivi?


8

Ho solo 2 pin (a 3 stati) disponibili su un microcontrollore e ho bisogno di controllare 3 LED rossi, uC funziona a 5V. Posso usare solo componenti passivi in ​​aggiunta.


Definire "controllo". Hai bisogno di tutti i LED completamente illuminati allo stesso tempo, o solo uno alla volta o qualcos'altro? Perché dici che puoi usare solo componenti passivi?
Joe Hass,

Google "charlieplexing".
John U,

1
@JohnU: Charlieplexing non fa nulla di utile con meno di tre pin. Due pin ti danno solo due LED.
Dave Tweed,

Ovviamente, un espansore di porte I2C o anche alcuni semplici registri a scorrimento ti permetterebbero di controllare un numero arbitrario di LED. Perché sono esclusi?
Dave Tweed,

1
@DaveTweed - L'atto di cercare su Google è molto probabilmente comunque informativo;)
John U

Risposte:


10

Per controllare quattro LED:

schematic

simula questo circuito - Schema creato usando CircuitLab

Per accendere entrambi i LED su un determinato pin, attivare il pin a poche centinaia di Hz.

Questa configurazione richiede che la tensione diretta dei LED sia inferiore a Vcc / 2.

Si noti inoltre che i resistori consumano sempre energia, non solo quando i LED sono accesi.


Avere R1 collegato solo a D1 e R2 solo a D2, ecc. Ridurrà notevolmente l'assorbimento di corrente di riposo quando il LED è spento, a condizione che le cadute di tensione del LED si combinino con VDD.
supercat

@supercat: Sì, ma raramente è vero per i LED rossi specificati dall'OP. Vedi il diagramma di Will .
Dave Tweed,

Aggiungi un LED in più tra i nodi R1-D1 e D2-D2 e nascondilo da qualche parte.
supercat

@supercat: vedi la risposta di Spehro .
Dave Tweed,

6

Questa soluzione dipende dal fatto che 5V non accenderà i tre LED in serie. Se necessario, è possibile aggiungere un diodo al silicio in serie con uno o più LED per aumentare la caduta di tensione diretta totale.

schematic

simula questo circuito - Schema creato usando CircuitLab

  • Se entrambi i pin A e B sono tristati, tutti i LED sono spenti.
  • Se il pin A è abbassato, D1 è attivo.
  • Se il pin A è spostato in alto e il pin B è guidato in basso D2 è attivo.
  • se il pin B è spostato in alto, D3 è attivo.

Per avere più di un LED alla volta, è necessario multiplexare: accenderli uno alla volta, abbastanza rapidamente da farli accendere in modo continuo.


C'è qualche vantaggio rispetto al metodo di Michael Karas?
Sarà il

Questo funziona con una caduta di tensione diretta inferiore sui LED. La sua soluzione è solo due copie della versione a un pin / due LED di questo.
Dave Tweed,

Ahh quindi con questo se hai 2 resistori su di te stai facendo cadere un po 'di tensione attraverso 1 e alcuni nell'altro, e devi bruciare meno di resistori?
Sarà il

1
@Will: Um, no. Con questo schema, è acceso solo un LED alla volta e solo un resistore alla volta fa scendere la tensione. Quando entrambi i pin sono tristati, la corrente non scorre affatto, poiché è bloccata dalla caduta in avanti cumulativa dei tre LED in serie.
Dave Tweed

Se si tristata il pin b, è possibile pilotare 2 LED con il proprio schema, giusto?
Sarà il

3

Con due pin puoi effettivamente controllare quattro LED. Per controllare due LED inserire un resistore dal pin MCU per limitare la corrente e collegarlo a due LED: il catodo di un LED e l'anodo dell'altro LED. L'estremità anodica libera del primo LED viene collegata al VCC della scheda MCU tramite un'altra resistenza. L'estremità libera del catodo del secondo LED viene collegata a GND (tramite un altro resistore). Ora i LED si accenderanno alternativamente quando il pin MCU è impostato su alto o basso. Collega il secondo pin MCU allo stesso modo e ora hai il controllo di un totale di quattro LED.

Per dare l'apparenza di un controllo indipendente di ciascun LED nella coppia rispetto a uno dei pin della porta è necessario un piccolo lavoro software come segue.

Se LED1 è quello con l'anodo sul pin della porta e LED2 è quello con il catodo sul pin della porta, procedere come segue per stabilire i quattro stati per due LED.

LED2  LED1    Action
OFF   OFF     Set the port pin to tristate level.
OFF   ON      Set the port pin low.
ON    OFF     Set the port pin high.
ON    ON      Toggle the port pin high and low at a frequency over about 120 Hz. 

Ripeti le stesse azioni per l'altro pin della porta e sembrerai di avere quattro LED indipendenti su due pin della porta.

Questo schema funziona bene per i LED che hanno una caduta di tensione diretta superiore alla metà del livello VCC. I LED rossi con 2.1 VF non funzioneranno così bene se ad esempio il VCC è 5V. D'altra parte un LED verde con un VF da 2,5 V funzionerà perfettamente su un sistema con un VCC da 3,3 V.


3
È questo controllo totale, però? Come si attivano o disattivano tutti?
Stanì,

Un LED è acceso quando la corrente fluisce dal pin, l'altro LED è acceso quando la corrente fluisce nel pin. Quindi spegnili entrambi, basta tri-state il pin della porta, nessuna corrente entrerà o uscirà da esso, quindi nessun LED. La corrente non può fluire dentro e fuori allo stesso tempo, quindi non è possibile avere entrambi i LED accesi esattamente nello stesso momento. Ma puoi creare l'effetto di entrambi attivando il pin alto poi basso poi alto poi basso poi alto poi alto poi basso ecc.
Will

2

2 led uno spillo, mal disegnato

Quindi in questo modo nessuna corrente fluisce quando sono spenti e puoi pilotare tutta la / piccola tensione diretta di cui hai bisogno


Questo è lo stesso della soluzione di Michael Karas. Richiede che V_f dei LED sia maggiore di Vcc / 2, altrimenti non è possibile spegnerli completamente.
Dave Tweed,

+1 per lo sforzo di presentare la soluzione di Michael Karas copiando gli schemi CircuitLabs di Dave Tweed e tracciando linee a mano libera con MS Paint (o simili).
Ricardo

Ed era in vernice :)
Will

1
Ah, vedo di cosa stai parlando ora, Dave. La corrente va r1 d1 d2 r2 e nulla deve entrare / il nostro pin
Will

2

EDN ha pubblicato alcune idee relative al design qui

Eccone uno: -

inserisci qui la descrizione dell'immagine

Per valori tipici con D1 un LED giallo (2,2 V acceso), D2 un LED rosso (1,9 V acceso) e tensioni di spegnimento rispettivamente di 1,2 V e 1,1 V e correnti di 8 mA ciascuna, Vcc = 5,0 V, il valore ottimale i valori sono

R1 = 300 ohm R2 = 330 ohm R3 = 1,2 K ohm

La corrente di riposo è di 2,7 mA. Per far apparire illuminati entrambi i LED, attivare o disattivare il pin di uscita a 100Hz o superiore.

Ho usato il solutore Excel nell'articolo originale, il codice potrebbe essere ancora disponibile da EDN.

L' ulteriore grado di libertà offerto dalla resistenza R3 può evitare i limiti dei circuiti di Dave Tweed e Michael Karas, sebbene per il caso specifico di 2 LED rossi che funzionano da un'alimentazione a 5 V, il circuito di Dave Tweed è probabilmente accettabile, ma controlla il Vf attenzione, non va bene per alcuni LED rossi e può essere marginale per altri se il pin della porta non si abbassa completamente.


Nota: OP richiede un circuito completamente passivo . Inoltre, se il pin MCU è alto-Z, l'inverter viene forzato in una modalità di funzionamento lineare, che generalmente sprecherà energia.
Dave Tweed,

@DaveTweed Sì, il mio post originale specificava un inverter ST, quindi l'ho modificato per chiarirlo. E ' non è tutto passiva, ma è semplice e lo zero Iq. Il secondo circuito è Iq più alto ma tutto passivo. Grazie per i commenti
Spehro Pefhany,

Non vedo come un input di Schmitt Trigger sia di aiuto; invece, penso che forzerebbe l'oscillazione del circuito. Certo, i LED saranno spenti, ma l'inverter stesso consumerà energia significativa.
Dave Tweed,

Bene, poiché non soddisfa il requisito originale di nessuna parte attiva, lo eliminerò, ma credo che funzioni bene.
Spehro Pefhany,

+1 per R3, potrebbe essere un trucco utile. E a buon mercato a quello
Will
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.