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?
microcontroller
led
multiplexer
JYelton
fuente
fuente
Respuestas:
Existen varios métodos que pueden utilizarse para controlar grandes cantidades de LED desde unos pocos pines de E / S.
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.
fuente
Ejemplo:
Seis LED en 3 pines:
fuente
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
fuente
Como @ mjh2007 sugirió con un expansor I2C. Pero hay algunos específicamente para conducir LED que evitarán la necesidad de resistencias limitantes de corriente externas.
fuente
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.
fuente
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.
fuente