Multiplexación de una matriz 8x8 - ¿Por qué transistores?

Estoy tratando de entender cómo multiplexar correctamente una matriz de 8x8 (o cualquier gran cantidad de LED) http://arduino.cc/en/Tutorial/RowColumnScanning

Sin embargo, me estoy confundiendo un poco, ya que encontré otros como este: http://garagelab.com/profiles/blogs/arduino-scrolling-text-marquee-to-give-a-happy-christmas

Ese dice usar transistores para la conmutación actual, pero el primer enlace ni siquiera usa resistencias (lo que me parece sospechoso), sin importar los transistores.

Realmente no veo por qué se necesitan los transistores, ¿alguien puede explicar por qué?

¿Pensamientos?

Respuestas (3)

Los transistores son necesarios si la corriente requerida para impulsar los LED es más alta de lo que puede manejar el microcontrolador. Esto significa una clasificación de corriente de un solo pin o la clasificación máxima para todos los pines juntos (se indicará en la hoja de datos)

La mayoría de los LED típicos de 5 mm y 3 mm tienen una clasificación de corriente máxima de alrededor de 20 mA y pueden controlarse directamente desde un pin de microcontrolador (10 mA está bien para la mayoría de las aplicaciones). Sin embargo, si la corriente nominal
máxima de sus microcontroladores es de 200 mA y desea controlar 20 LED a 15 mA , entonces, aunque los pines individuales pueden suministrar la corriente, está fuera de las especificaciones para la clasificación de corriente máxima.

Los LED siempre deben tener un componente limitador de corriente (por ejemplo, una resistencia) cuando se alimentan de una fuente de voltaje, por lo que tiene razón al sospechar del primer enlace. Parece que simplemente depende de que la unidad de pines no sea lo suficientemente alta como para dañar el micro o el LED, lo que definitivamente no es una buena idea.

Aquí están las calificaciones máximas absolutas para el ATmega328 . Tenga en cuenta que hay una clasificación de corriente por pin y también una clasificación de corriente Vcc total máxima:

Especificaciones máximas

Ver también notas 3 y 4 en pág.314:

notas

Además, puede obtener LED de alta potencia con valores nominales de corriente de> 500 mA, por lo que, obviamente, un transistor es la única opción en este caso.

Estoy usando uno de estos: adafruit.com/datasheets/BL-M07C881.PDF La variedad UltraBright Red. Parece que la corriente máxima por LED es de 30 mA. Sin embargo, parecería que no hay forma sin los transistores, ya que está manejando una columna a la vez, por lo que sería 8x30mA. Pero obviamente la gente lo hace. Tengo un reloj con una matriz de 8x8 que no usa transistores, así que es posible... ¿Estoy calculando mal los cálculos actuales?
No, puede ejecutar el chip más allá de las especificaciones recomendadas, es solo que Atmel no garantiza lo que sucederá si lo hace. Si solo ha terminado un poco y no es probable que sus condiciones (por ejemplo, temperatura ambiente, etc.) estresen el chip, entonces probablemente se salga con la suya. Sin embargo, no es la forma de diseñar un producto profesional, trabaje siempre dentro de las especificaciones recomendadas.
Además, recuerde que con una matriz no tiene que tener todos los LED encendidos a la vez si está escaneando a, por ejemplo, 100 Hz, por lo que la corriente puede mantenerse dentro de las especificaciones. Por ejemplo, si cada LED de su reloj usa 10 mA, entonces si se escanea una columna a la vez, el consumo promedio máximo posible es de 80 mA.
Ok, pero ¿no significaría eso que el consumo de corriente en el pin que controla esa columna sería de 80 mA, que es> 40 mA? ¿Y no sería este el caso independientemente de que el pin de control sea la fuente o el sumidero actual?
Sí, lo siento, tendría que dividir más el escaneo si las columnas también se controlan desde los pines (estaba pensando en transistores en cada columna por alguna razón) Si tanto las columnas como las filas se controlan desde los pines, entonces un máximo de 4 LED por columna se puede encender en cualquier momento. Idealmente, solo encendería 2, ya que 40 mA es la clasificación máxima absoluta, lo cual no se recomienda.
Está bien, tiene sentido. Ahora me pregunto cómo alguien maneja estas cosas directamente desde los pines de E/S: P
Escanean rápidamente uno o dos LED a la vez (si la velocidad de escaneo es lo suficientemente alta, el ojo ve todos los LED encendidos a la vez; vea POV), o en diagonal, o ignoran las especificaciones y esperan lo mejor ;-) Básicamente, sin embargo, a menos que esté utilizando una matriz pequeña que conduzca a corrientes muy bajas, entonces use transistores: por el mínimo costo y esfuerzo adicional, tiene una capacidad de manejo mucho mayor y menos de qué preocuparse (por ejemplo, puede encender todos los LED a la vez que desee) Para la pantalla a la que se vincula, definitivamente usaría transistores (más resistencias limitadoras de corriente)
En el tutorial arduino.cc/en/Tutorial/RowColumnScanning , siento que cuando configuramos la fila BAJA (ánodo) y todas las columnas ALTA (cátodo), dejamos los LED de fila con polaridad invertida. ¿Dañará los leds?
La polaridad invertida está bien siempre que no exceda el valor de la hoja de datos, así que verifique esto y mientras esté seguro dentro de él, estará bien.

Eso es realmente falso, los transistores se usan como interruptor. Esto le permite cambiar los pines del cátodo usando una señal positiva de un arduino de modo que cada LED en la matriz se pueda controlar individualmente, lo que permite la posibilidad de multiplexación. Simple.

Deberías leer esta publicación http://www.theengineeringprojects.com/2015/12/scrolling-text-led-matrix-8x8-using-arduino-proteus-isis.html ... Han mostrado en detalle cómo interactuar arduino con matriz led 8x8. Han utilizado MAX7219 para hacerlo. El código también se proporciona allí junto con la simulación de Proteus.