Control en serie de 25 LED desde un solo pin

Tengo un microcontrolador con un pin digital disponible.

¿Cómo puedo controlar 25 LED?

¿Se pueden direccionar los leds por separado o desea encenderlos/apagarlos todos al mismo tiempo?
Los LED están destinados a ser accesibles por separado. El microcontrolador no está destinado a alimentarlos, simplemente determina su estado. Además, por "puerto digital" me refiero a pin.

Respuestas (9)

Expansor I2C IO : - Cierta sobrecarga de protocolo, pero debe poder expandirse a una gran cantidad (miles) de LED.

Registro de desplazamiento simple: interfaz Dead Simple, los LED pueden parpadear al actualizar si el reloj del registro de desplazamiento no es bastante rápido. El uso de un registro de desplazamiento de doble búfer solucionará esto.

Gracias, esto es exactamente lo que estaba buscando, pero no sabía cómo se llamaban.
Eso requerirá al menos un pin, aunque. ¿Los registros de desplazamiento no requieren al menos dos pines, para reloj y datos?
@blalor: sí, pero estos dos pines están diseñados para compartirse entre varios dispositivos I2C.
I2C es también dos líneas.
Dallas 1-wire solo necesita un pin, se expande a N dispositivos.

Shift Register e I2C son buenos, pero solo si hay al menos 2 pines libres. Sugiero que el extensor de puerto de 1 cable Dallas DS2408 será una solución óptima. El código para el acceso a dispositivos de 1 cable de Dallas no es tan complicado y hay muchos ejemplos en la web.

Puede usar varios DS2408 conectados a un pin o implementar más lógica después de un solo DS2408, lo que desee.

I2C se puede usar si no hay pines libres, asumiendo que su bus I2C se está usando como tal y no hay conflictos de direcciones.

Con solo 1 pin IO, puede usar un expansor/registro de desplazamiento de 1 cable o agregar otro dispositivo a su bus I2C, como ya se señaló. Lo único que aún no se ha mencionado es la posibilidad de agregar otro esclavo a su puerto SPI.

SPI se denomina protocolo de 4 hilos: tiene dos líneas de datos, una línea de reloj y una línea de selección (así como un terreno común, pero eso generalmente no cuenta). Sin embargo, los primeros tres se comparten entre todos los dispositivos en el bus, por lo que cada dispositivo después del primero toma solo un rastro/cable más. SPI también aumenta su bus a dúplex completo, pero eso no importará para esta aplicación.

Simplemente encadenaría algunos registros de desplazamiento juntos. (Esto reduce la frecuencia con la que puede alternar los LED, por supuesto...)

Si realmente solo tiene 1 pin disponible, el bus de 1 cable de Dallas parece lo más obvio. Sin embargo, dado que esto es solo de salida, existen soluciones más económicas. Un bus PWM en serie que transporta datos y reloj es fácil de configurar; véase, por ejemplo , la página de Roman Black como también la menciona davidcary. Solo necesita registros de desplazamiento de entrada en serie y salida en paralelo como el 74VHC164 , que puede conectar en cascada para tantas salidas como desee (un '164 tiene 8 salidas).
En esta solución, los LED se activan estáticamente.

Si tiene otras E/S que puede compartir, como SPI de I2C, puede optar por soluciones más lujosas, como Maxim's MAX6950 . El MAX6950 tiene control de parpadeo y brillo, y limitación de velocidad de giro, por nombrar algunas características. Los LED están multiplexados, lo que significa que solo necesita un controlador de 16 pines.

La respuesta es probablemente "una serie de registros de desplazamiento", pero ¿puede ser más específico en su pregunta? ¿Qué microcontrolador? ¿A qué te refieres con "puerto digital"? ¿Un solo pin?

Gracias, hice la aclaración, y los registros de desplazamiento son lo que estoy buscando. Gracias.

25 LED dependiendo del tamaño pueden consumir mucha energía para un solo pin digital IO en un microcontrolador. En lugar de conducirlos directamente, probablemente debería usar un interruptor FET simple (para que el IO esté vinculado a la puerta) para controlar la alimentación de la cadena de LED.

Dependiendo de su aplicación, existen otras formas más robustas de lograr esto. Pero lanzar un fet probablemente te hará trabajar más rápido.

Por ejemplo, si desea activar una señal variable, existen dispositivos más complicados, a veces llamados relés digitales, que le brindan una forma de cambiarla digitalmente.

En cuanto a controlar individualmente 25 LED con un solo puerto IO. Como sugirieron otros, puede usar algunos registros de desplazamiento. Existen soluciones más complicadas que involucran comunicarse con otro IC utilizando un protocolo en serie (I2C, por ejemplo).

Roman Black describe el sistema shift1 que le permite controlar de forma independiente cualquier cantidad de LED desde un solo pin del microcontrolador.

@Fake Name, @Tim, @pingswept sugieren encadenar algunos registros de desplazamiento juntos, el pin de salida de datos DO en uno alimenta el pin de entrada de datos DI en el siguiente. El 74HC595 funcionaría bien. (Quizás algún otro chip funcionaría un poco mejor ).

(@reemrevnivek, con este tipo de SPI encadenado, cada dispositivo después del primero no requiere más pines en el microcontrolador, contrariamente a lo que mucha gente afirma, ¿por qué los escuchas? :-).

Normalmente, esto requiere 4 pines en el microcontrolador: MISO, MOSI, SCLK y pestillo. Como solo está haciendo salida, no necesita un pin de entrada MISO.

Roman Black ha descubierto que con una temporización muy cuidadosa en una sola salida del microcontrolador, y con algunos ajustes cuidadosos de un circuito analógico, un solo pin del microcontrolador puede impulsar un circuito analógico de apariencia simple que separa el SCLK común, el DI pin del primer chip de la cadena (MOSI) y la señal de cierre común.

Luego, ese microcontrolador puede controlar 25 LED desde un solo pin.

Puede conectar otro microcontrolador a través de ese único pin y hablar con él a través de 1 cable (o su propio protocolo si necesita alta velocidad). Luego, ese otro microcontrolador se ocupa de los LED.