¿Cómo puedo controlar muchos LED con solo unos pines en mi micro?

10

Estoy usando un Atmel ATtiny13 que tiene una E / S de 6 pines. Me gustaría controlar unos 15 LED, pero no estoy seguro de cómo conectar todo. Sin multiplexación de ningún tipo, parece que solo podría controlar 6 LED a la vez. ¿Estoy limitado a solo 6 LED debido al tamaño del microcontrolador?

JYelton
fuente
No había visto. Posiblemente duplicado: electronics.stackexchange.com/questions/9860/…
Daniel Grillo
3
No olvide comparar sus opciones con el costo de comprar un microcontrolador un poco más pinny. También preste atención a los límites de corriente por puerto y total.
joeforker
Cuando comencé a trabajar con micros hace un tiempo, esta es una pregunta que ojalá hubiera sido fácil de encontrar con respuestas claras. Logré aprender sobre charlieplexing e implementarlo con éxito, pero quería recrear la pregunta aquí con la excelente calidad de las respuestas de la comunidad SE.
JYelton
1
@joeforker Tienes razón, el costo de un micro con más pines fue bastante mínimo, teniendo en cuenta que mi proyecto fue único. En un momento pensé en usar un micro con aproximadamente 20 pines IO para realizar el trabajo, pero uno de mis objetivos era una huella muy pequeña en la placa de circuito. Además, adjetivo increíble pinnier !
JYelton

Respuestas:

18

Existen varios métodos que pueden utilizarse para controlar grandes cantidades de LED desde unos pocos pines de E / S.

(n/2)2n

1minimum(unique row patterns, unique column patterns)

1/n

n2nnn1

1minimum simultaneous sets

1/n

El último método que mencionaré es usar un registro de desplazamiento o un expansor de E / S. Con dos pines (ya sea la interfaz de datos sin procesar / reloj, I2C o SPI unidireccional), puede controlar un número arbitrariamente grande de LED. El ciclo de trabajo para cualquier patrón es del 100%, pero la tasa de actualización es inversamente proporcional al número de LED. Este es el método más costoso. Para 15 LED, probablemente sea más barato simplemente actualizar a un micro con esa cantidad de pines IO.

Kevin Vermeer
fuente
+1 por explicar un poco sobre el aspecto del ciclo de trabajo. En la segunda oración sobre Charlieplexing, ¿quiso decir "conducir n ^ 2-n LED con n pines IO?"
JYelton
Charlieplexing se puede hacer de manera muy similar a la multiplexación, si uno simplemente omite una luz de cada fila. En realidad, puede ser posible "recuperar" esa luz agregando un diodo, aunque a menos que los controladores de columna sean salidas de corriente constante, hacer que coincida con el brillo de los otros puede ser difícil.
supercat
11

n×(n1)n

Ejemplo:

Seis LED en 3 pines:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

Esquema de Charlieplexing con 3 pines de salida

Daniel Grillo
fuente
Gracias por el conjunto de datos del pin de salida, así como por un útil esquema.
JYelton
1
Otra forma de dibujar el esquema es como una cuadrícula NxN, pero solo impulsando columnas y reemplazando la diagonal primaria con cortos fila-columna.
supercat
significa que no puedo encenderlos todos a la vez? ¿Eso significa que si quiero activarlos todos a la vez, tengo que hacer el tiempo suficiente para engañar a los ojos?
MaNyYaCk
@MaNyYaCk Sí. Tienes razón.
Daniel Grillo
8

Sin multiplexación (accionamiento directo) está limitado a 6 LED.

Con charlieplexing puede manejar n * (n-1) LED desde n pines.

Con los expansores de E / S o los registros de desplazamiento, puede manejar una cantidad virtualmente ilimitada de LED.
Ejemplo: MCP23008 Expansor de E / S I2C de 8 bits

mjh2007
fuente
¿Puede explicar en detalle cuáles serían los expansores de E / S?
JYelton
3
Un expansor de E / S es un chip externo que contiene pines y registros de E / S. Puede usar el bus de comunicación estándar como I2C o SPI para comunicarse con ellos.
mjh2007
+1 Puede manejar muchos LED con el TLC594 de TI ( focus.ti.com/lit/ds/symlink/tlc5940.pdf ), pero puede ser excesivo para muchos trabajos. search.digikey.com/scripts/DkSearch/…
kenny
Gracias. Debería diseñar un proyecto que utilice expansores de E / S para forzar mi aprendizaje de su uso.
JYelton
2

Aquí hay un ejemplo de charlieplexing que he construido.

Es un simulador de haz de faro y utiliza una serie de 12 LEDs cargados a 4 GPIO para barrer un haz de luz alrededor de un disco. Hay un video de esto aquí .

El proyecto está basado en PIC, utilizo un PIC12f683 que también es un uP de 8 pines y podría considerarse comparable a los AVR de 8 pines.

La intensidad del LED es impulsada por una interrupción que proporciona un PWM de 32 pasos a unos 60Hz. Solo se permite encender dos LED a la vez, lo que proporciona un 50% de trabajo para cada LED, ya que eso era todo lo que necesitaba. También ofrece una buena compensación de la frecuencia de actualización PWM contra la resolución.

La codificación para usar charlieplexing es realmente bastante simple si se adhiere al método "clásico" de encender solo un LED en un momento dado a una velocidad de actualización muy rápida. Calculo el PORT y el TRIS (registros específicos de imágenes) requeridos primero en papel y luego almaceno los resultados en una matriz estática. Para encender el LED x, el PIC solo tiene que buscar el valor en el índice de la matriz [x] y escribirlos directamente en el PUERTO (con un poco de enmascaramiento para preservar el estado de los otros pines no utilizados en el charliplex)

Mi proyecto solo tiene 12 LED, no 15 o el máximo 20 que permitirán los 5 GPIO, ya que quería tener un GPIO de repuesto para el desarrollo futuro.

De todos modos ... Pensé que podría ser útil tener un ejemplo de trabajo similar a su solicitud.

El código fuente completo y los esquemas están disponibles en mi blog.

Matt Casey
fuente
0

Otra opción sería utilizar los LED Neopixel. Tienen un IC de control incorporado y solo necesita un pin para controlar tantos LED como desee. Por supuesto, necesitará una fuente de alimentación LED adecuada por separado.

todo lo necesario
fuente