¿Cómo controlar tres LED con dos pines uC usando solo componentes pasivos?

8

Solo tengo 2 pines (3 estados) disponibles en un microcontrolador y necesito controlar 3 LED rojos, uC se ejecuta en 5V. Solo puedo usar componentes pasivos además.

Cano64
fuente
Definir "control". ¿Necesita todos los LED completamente iluminados al mismo tiempo, o solo uno a la vez, o algo más? ¿Por qué dice que solo puede usar componentes pasivos?
Joe Hass
Google "charlieplexing".
John U
1
@JohnU: Charlieplexing no hace nada útil con menos de tres pines. Dos pines solo te dan dos LED.
Dave Tweed
Obviamente, un expansor de puerto I2C o incluso algunos registros de desplazamiento simples le permitirían controlar un número arbitrario de LED. ¿Por qué se descartan estos?
Dave Tweed
1
@DaveTweed - Sin embargo, el acto de buscar en Google es bastante informativo;)
John U

Respuestas:

10

Para controlar cuatro LED:

esquemático

simular este circuito : esquema creado con CircuitLab

Para encender ambos LED en un pin en particular, alterne el pin a unos cientos de Hz.

Tenga en cuenta que esta configuración requiere que el voltaje directo de los LED sea inferior a Vcc / 2.

Tenga en cuenta también que las resistencias consumen energía todo el tiempo, no solo cuando los LED están encendidos.

Dave Tweed
fuente
Tener R1 conectado solo a D1 y R2 solo a D2, etc. reducirá en gran medida el consumo de corriente de reposo cuando el LED esté apagado, siempre que las caídas de voltaje del LED se combinen con VDD.
supercat
@supercat: Sí, pero eso rara vez es cierto para los LED rojos que especificó el OP. Ver el diagrama de Will .
Dave Tweed
Agregue un LED adicional entre los nodos R1-D1 y D2-D2 y escóndelo en algún lugar.
supercat
@supercat: Ver la respuesta de Spehro .
Dave Tweed
6

Esta solución depende del hecho de que 5V no iluminará los tres LED en serie. Si es necesario, puede agregar un diodo de silicio en serie con uno o más de los LED para aumentar la caída de voltaje directo total.

esquemático

simular este circuito : esquema creado con CircuitLab

  • Si tanto el pin A como el pin B son tristados, todos los LED están apagados.
  • Si el pin A se conduce bajo, D1 está encendido.
  • Si el pin A se conduce alto y el pin B se conduce bajo, D2 está encendido.
  • Si el pin B se conduce alto, D3 está encendido.

Para tener más de un LED encendido a la vez, tendrá que multiplexar: enciéndalos uno a la vez, lo suficientemente rápido como para que parezcan estar continuamente encendidos.

Dave Tweed
fuente
¿Hay alguna ventaja de esto sobre el método de Michael Karas?
Se
Éste funciona con una menor caída de voltaje directo en los LED. Su solución es solo dos copias de la versión de un pin / dos LED de esto.
Dave Tweed
Ahh, entonces, con esto, si tienes 2 resistencias, ¿estás cayendo algo de voltaje a través de 1 y algo en el otro, y tienes que quemar menos resistencias?
Se
1
@ Will: Um, no. Con este esquema, solo un LED está encendido a la vez, y solo una resistencia a la vez está cayendo el voltaje. Cuando ambos pines son tristados, no fluye corriente en absoluto, ya que está bloqueado por la caída directa acumulativa de los tres LED en serie.
Dave Tweed
Si trista el pin b, puede manejar 2 LED con su esquema, ¿verdad?
Se
3

Con dos pines, puedes controlar cuatro LED. Para controlar dos LED, coloque una resistencia desde el pin MCU para limitar la corriente y átela a dos LED: el cátodo de un LED y el ánodo del otro LED. El extremo del ánodo libre del primer LED se conecta al VCC de la placa MCU a través de otra resistencia. El extremo del cátodo libre del segundo LED se conecta a GND (a través de otra resistencia). Ahora los LED se iluminarán alternativamente cuando el pin MCU esté configurado alto o bajo. Conecte el segundo pin MCU de la misma manera y ahora tiene control sobre un total de cuatro LED.

Para dar la apariencia de un control independiente de cada LED en el par de uno de los pines del puerto requiere un poco de trabajo de software de la siguiente manera.

Si el LED1 es el que tiene el ánodo al pin del puerto y el LED2 es el que tiene el cátodo al pin del puerto, haga lo siguiente para establecer los cuatro estados para dos 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. 

Repita las mismas acciones para el otro pin de puerto y parecerá que tiene cuatro LED independientes en dos pines de puerto.

Este esquema funciona bien para los LED que tienen una caída de tensión directa que supera la mitad del nivel de VCC. Los LED rojos con un 2.1 VF no funcionarán tan bien si el VCC es 5V, por ejemplo. Por otro lado, un LED verde con un VF de 2.5V funcionará muy bien en un sistema con un VCC de 3.3V.

Michael Karas
fuente
3
¿Es este control total, sin embargo? ¿Cómo los enciendes o apagas todos?
stanri
Un LED está encendido cuando la corriente fluye fuera del pin, el otro LED está encendido cuando la corriente fluye hacia el pin. Así que apáguelos a ambos, simplemente coloque tres veces el pin del puerto, no entrará ni saldrá corriente, por lo que no habrá LED. La corriente no puede entrar y salir al mismo tiempo, por lo que no puede tener ambos LED encendidos exactamente en el mismo momento. Pero se puede crear el efecto de los dos estar en la conducción por el alto pin continuación, bajo, alto, entonces bajo, alto, entonces baja, etc
Will
2

2 leds un pin, mal dibujado

De esta manera, no fluye corriente cuando están apagados, y puede conducir tanto / poco voltaje hacia adelante como necesite

Será
fuente
Esto es lo mismo que la solución de Michael Karas. Requiere que la V_f de los LED sea mayor que Vcc / 2, o de lo contrario no puede apagarlos por completo.
Dave Tweed
+1 por hacer el esfuerzo de presentar la solución de Michael Karas copiando los esquemas de CircuitLabs de Dave Tweed y dibujando líneas de manos libres con MS Paint (o similar).
Ricardo
Y estaba en pintura :)
Will
1
Ah, ya veo de qué estás hablando, Dave. La corriente va r1 d1 d2 r2 y nada tiene que entrar / nuestro del pin
Will
2

EDN publicó algunas ideas relacionadas para el diseño aquí

Aquí hay uno de ellos:

ingrese la descripción de la imagen aquí

Para valores típicos con D1 un LED amarillo (2.2V encendido), D2 un LED rojo (1.9V encendido) y voltajes de apagado de 1.2V y 1.1V respectivamente, y corrientes de 8mA cada uno, Vcc = 5.0V, el óptimo los valores son

R1 = 300 ohmios R2 = 330 ohmios R3 = 1.2K ohmios

La corriente de reposo es de 2.7mA. Para que ambos LED aparezcan iluminados, cambie el pin de salida a 100Hz o más.

Utilicé el solucionador de Excel en el artículo original, el código aún puede estar disponible en EDN.

El grado adicional de libertad que ofrece la resistencia R3 puede evitar las limitaciones de los circuitos de Dave Tweed y Michael Karas, aunque para el caso específico de 2 LED rojos que funcionan con un suministro de 5V, el circuito de Dave Tweed es probablemente aceptable, pero verifique el Vf con cuidado, no está bien para algunos LED rojos, y puede ser marginal para otros si el pin del puerto no baja o sube.

Spehro Pefhany
fuente
Nota: OP está pidiendo un circuito totalmente pasivo . Además, si el pin MCU es de alta Z, el inversor se ve forzado a un modo lineal de operación, que generalmente desperdiciará energía.
Dave Tweed
@DaveTweed Sí, mi publicación original especificaba un inversor ST, así que lo edité para aclararlo. Es no todo pasiva, pero es simple y cero Iq. El segundo circuito es Iq más alto pero todo pasivo. Gracias por los comentarios.
Spehro Pefhany
No veo cómo ayuda una entrada de Schmitt Trigger; en cambio, pensaría que obligaría al circuito a oscilar. Por supuesto, los LED estarán apagados, pero el inversor mismo consumirá una potencia significativa.
Dave Tweed
Bueno, como no cumple con el requisito original de no tener partes activas, lo eliminaré, pero creo que funciona bien.
Spehro Pefhany
+1 para R3, podría ser un truco útil. Y una barata en eso
será el