¿Conducir matriz LED 10x10 con AVR?

Estoy en el proceso de diseñar un PCB controlador para un reloj de matriz de LED blanco de 10x10 (inspirado en el tutorial aquí ). Se basa en un ATmega328 AVR IC y Maxim DS3234 SPI RTC.

Sin embargo, estoy atascado: no tengo idea de cómo controlar mi matriz de LED 10x10 no estándar personalizada. Originalmente, iba a usar un IC Maxim MAX7219/7221, pero solo puede manejar matrices LED de 8x8. Luego estaba buscando algún tipo de solución charlieplexing con una matriz de transistores darlington ULN2803. Los LED blancos brillantes que estoy usando necesitan al menos 30 mA de corriente.

Aquí está mi esquema preliminar (lo siento, no está muy claro, pero tenga en cuenta que las líneas I2C y UART están disponibles para su uso):Esquemático

Aquí hay un esquema de cableado de ejemplo de mi matriz LED ( NOTA: el diagrama de ejemplo a continuación solo muestra una matriz de 8x8. Mi matriz es 10x10) .Extracto de matriz LED


¿ Cuál es la mejor manera de controlar mi matriz LED 10x10 con el AVR ? (Además, PWM no es un requisito, pero estaría bien).

¡Gracias!

Enlace al esquema de tamaño completo: i.stack.imgur.com/Ki2N1.png

Respuestas (2)

El mejor ejemplo que se me ocurre es "Peggy", una pantalla de tablero perforado que emite luz . Es una pantalla de matriz LED de 25x25 impulsada por un ATmega168 (que es pin compatible con el ATmega328)

La página wiki tiene mucha buena información. Incluyendo un esquema detallado .

Hay pocas cosas que notar en su diseño.

Por un lado, utilizan una configuración de ánodo común de fila. Es decir, la fuente actual está en la fila y el fregadero en la columna. Tienes el tuyo en fila de cátodo común. No hay nada intrínsecamente correcto o incorrecto en ninguno de los diseños. Solo algo a tener en cuenta al diseñar su circuito. Si usa ledes discretos, solo significa voltear las conexiones de los leds. Si usa una matriz de LED preconstruida, es algo importante que debe saber. (Supongo que puede cambiar fácilmente el orden para que coincida con el esquema de Peggy. Si no, simplemente cambie la columna por la fila en su cabeza)

Utilizan chips decodificadores/demux 74HC154 4-16 para la selección de filas. Como solo necesita 10 filas (o columnas), puede salirse con la suya con solo una. Por supuesto, está el tema de la corriente. En tu caso, a 10 x 30mA = 300mA mínimo. Para resolver ese problema, utilizaron transistores 2STX2220 PNP que podrán generar hasta 1.5A por fila. Un poco más de matar en tu caso. Dado que solo los usará como interruptores de selección de fila, casi cualquier otro transistor pnp que pueda generar su corriente máxima debería funcionar igual de bien. Eche un vistazo a Circuitos de transistores para averiguar qué valores de resistencia necesitará para operaciones completas de encendido/apagado.

En el tablero Peggy, para el controlador del fregadero de la columna usan un STP16DP05 . Pero he encontrado estos difíciles de encontrar y caros. Hay muchas otras alternativas como el TLC5916. Estos usan una entrada en serie y se pueden conectar en cascada fácilmente. De lo contrario, una búsqueda digikey de mouser para el controlador del disipador LED arrojará muchos resultados.

Alternativamente, dado que ya tiene arreglos ULN2803 , podría usar dos de estos con una sola resistencia de límite de corriente por columna. Son muchos alfileres, por lo que tendrá que ser creativo, pero también podría funcionar para el fregadero de la columna.

Avago publicó una bonita nota de aplicación titulada "Introducción a la conducción de matrices LED" . Cubre esto y algunas otras cosas.

Wow, gracias, esta es una gran cantidad de información (especialmente el documento de Avago).
Enlace muerto a Avago, aquí hay una alternativa (pdf): avagotech.com/docs/AV02-3697EN

Cuando se conducen los LED desde los pines del puerto, una técnica a veces llamada "Charlieplexing" puede ser útil. Aunque algunas descripciones parecen ser más bien ad hoc, permite que N pines de puerto de 3 estados (alto/bajo/flotante) controlen (N*(N-1)) LED. Aquí hay un ejemplo que usa 4 pines de puerto para controlar 12 LED. Los interruptores del lado izquierdo son momentáneos y generarán una salida alta. Los interruptores del lado derecho están enclavados y cambiarán una salida a nivel bajo. Tenga en cuenta que el interruptor del lado izquierdo asociado con una salida solo funcionará si el interruptor del lado derecho para esa salida está en la posición inferior ("apagado").

El alcance en la parte inferior muestra la corriente a través del segundo pin; como se muestra, se pedirá a los pines que hundan aproximadamente 15 mA que impulsan una columna, o generan aproximadamente 5 mA que impulsan una fila (un transistor suministrará el equilibrio de la corriente).

En la práctica, si uno quisiera construir algo como este circuito para una matriz de 10x10, uno conectaría eléctricamente una matriz de 11x11 con la falta de la diagonal, y "empujaría" la parte superior derecha hacia la izquierda un punto (produciendo una cuadrícula de 11x10) y deshacerse de la fila inferior.

10x10 puede ser demasiado para charlieplexing debido a las corrientes de fuga de LED, pero vale la pena intentarlo. Además, no espere demasiado de un ciclo de trabajo de 1/100 si está tratando de encender todos los LED al mismo tiempo.
CharliePlexing no debería requerir un ciclo de trabajo de 1/100. Solo 1/11. Haga clic en el enlace de demostración del circuito que proporcioné. Es para una cuadrícula 4x3 efectiva que usa cuatro pines, cada uno de los cuales tiene un interruptor de palanca a tierra y (si no está conectado a tierra) un interruptor momentáneo a VDD.
ah, veo lo que hiciste allí! Buen truco con esos transistores. esto permite que se utilicen varios LED a la vez.
@noah1989: Ciertamente ayuda con el brillo, aunque para una matriz de 10x10 si tiene pines de puerto de 25 mA, puede que no sea estrictamente necesario; He visto algunos LED que eran realmente brillantes con 2,5 mA. Me parece interesante que todas las discusiones sobre Charlieplexing parecen pensar en una matriz ad hoc que se activa con un LED a la vez, cuando el escaneo por filas es, de hecho, bastante sencillo si los LED están dispuestos como se indica o describe. No estoy seguro de que Charlieplexing sea necesariamente una gran victoria en comparación con el uso de chips de controlador de registro de desplazamiento que pueden suministrar la corriente adecuada sin transistores externos...
... y regular la corriente de la columna sin resistencias externas, pero hay algo de elegancia en el hecho de que la cantidad de cables que van a una placa con "solo" LED se puede reducir (tenga en cuenta que, por cierto, en el circuito que se muestra, la cantidad de corriente consumida del suministro/pines de la CPU podría reducirse ligeramente si las resistencias solo se conectan a las columnas y los transistores solo a las filas, pero el consumo general de corriente no se verá afectado por tenerlos conectados; ya que los pines de la CPU se utilizan para generar mucho menos actual de lo que se están hundiendo, probablemente no importa.