¿Cuál es la mejor manera de conectar un LED de 7 segmentos de 4 dígitos a Atmega168?

Estoy trabajando en un dispositivo con un contador de 7 segmentos de 4 dígitos y me pregunto cuál es la mejor manera de controlar todos los LED. En este momento tengo una PCB personalizada que los controla a todos desde un Atmega168, usando la mayoría de los pines de E/S. El problema es que algunos de los números parecen más brillantes que otros. Por ejemplo, un "1" es más brillante que un "8888".
Alguien sugirió que debería usar un controlador LED como el TLC5940.

¿Es esto necesario? Dado que es para un dispositivo portátil, trato de mantener el tamaño y la potencia al mínimo.

El prototipo actual funciona bien, pero quiero asegurarme de que los dígitos sean igualmente brillantes y tan brillantes como puedan ser de forma segura, para aumentar su visibilidad.

Eliminé su encabezado y la firma (según esta guía ) y arreglé el formato en '"888".\nAlguien...' Si desea que las personas sepan su nombre, agréguelo a su perfil aquí y aparecerá, con su [gr]avatar, en la parte inferior derecha de tus publicaciones. ¡Buena pregunta, sin embargo!

Respuestas (4)

Puede reducir la cantidad de pines que usa en el AVR multiplexando las pantallas. Conecte todos los segmentos juntos y conéctelos a siete pines de salida a través de resistencias, y conecte los cuatro cátodos comunes a otros cuatro pines de salida. Esto debería darle un brillo constante. El software será más complejo, pero es una solución mucho mejor.

Debido a que el ojo humano responde al brillo máximo, la multiplexación puede proporcionar más brillo del que es posible con pantallas no multiplexadas y usa menos energía, especialmente si se reduce el ciclo de trabajo.

Por supuesto, debe asegurarse de que no se excedan los límites actuales de los pines AVR. Se necesitarán dispositivos de controlador si se requieren corrientes mayores que el límite de 25 mA para los pines AVR. Los uso en una PCB que diseñé para una aplicación similar.

Sin embargo, eso reducirá la intensidad, ya que solo tiene un ciclo de trabajo del 25% para cada pantalla individual.
Eso se soluciona poniendo más corriente a través de las pantallas, usando resistencias de segmento de menor valor. Debido al bajo ciclo de trabajo, son posibles altas corrientes, aumentando el brillo tanto como sea necesario, sin desperdiciar energía.
Creo que esto es lo que estoy haciendo ahora, multiplexación. Tengo segmentos A - G en los pines 11 - 19 (saltando 13). Y los dígitos 1 - 4 en los pines 7 - 10. Esto funciona bien, excepto por el problema del brillo. El 8888 debe ser más brillante o el 1 debe ser más tenue, preferiblemente el primero para que sea agradable y brillante. Gracias por los comentarios.
¿Tiene resistencias para los segmentos?
@León Heller. Tenía resistencias de 60 ohm, pero las reemplacé con 3 ohm para tratar de aumentar el brillo. Hizo que todo fuera un poco más brillante, pero el 1 todavía está demasiado caliente. ¿Necesito un controlador de LED o podría salirme con la mía con una pieza más barata como un registro de desplazamiento 74HC595 o un expansor de E/S I2C?
3R es demasiado bajo y está causando la variación de brillo.
Gracias León. Mi placa está funcionando a 3V3 y los LED están especificados a 2V1, ¿significa esto que debo tener resistencias de 120 ohmios para cada uno de los segmentos (7) y dígitos (4)? ¿O solo los segmentos O dígitos?
Suponiendo que está cambiando los dígitos uno tras otro para la multiplexación, necesita las resistencias de 120 ohmios en los segmentos. El valor sería correcto, ya que solo se permiten 100 mA para todos los pines en un puerto, consulte las notas en 28.2. Características DC en la ficha técnica. Estás excediendo los límites por mucho.
Con 3 ohmios = 400 mA a 1,2 V, está superando con creces el límite absoluto de 40 mA por pin de puerto, el ATmega168 podría sufrir daños.
@starblue, no creo que el mega se dañe, la corriente solo se limitará a 40 mA.
@vicatcu: Incorrecto. Los puertos AVR IO no tienen limitación de corriente, como casi todos los microcontroladores. Aumentar demasiado la corriente provocará un calentamiento interno del chip, lo que eventualmente provocará una falla.

No necesita un controlador LED, pero tiene sus ventajas. Ahorras mucho en la E/S de tu microcontrolador, solo necesitas un par de líneas para la interfaz serial (SPI o I2C). También puede ahorrar espacio en la placa, ya que no necesita un montón de componentes discretos para la multiplexación.
Personalmente me gusta el Maxim MAX6950/51 para cinco y ocho dígitos de 7 segmentos resp. Viene en un pequeño paquete de 16 pines. Tiene control de brillo digital y decodificador de hexadecimal a 7 segmentos. Interfaces a tu uC con 3 líneas.

¡El paquete TSOP no es fácil de soldar a mano! El MAX7221 existe en paquete DIL.
@Federico: bueno, si quieres ahorrar espacio, ¡tienes que sufrir! :-). ¡El paquete MAX6950 es de solo 5x5 mm! Por cierto, si desea el 7221 debido a una mejor soldabilidad, aún puede elegir el paquete SOIC.

Estás diciendo que este es un dispositivo portátil. Es posible que los problemas de brillo que está viendo no tengan nada que ver con los chips involucrados, sino que sean el resultado de la resistencia interna de la batería, especialmente si está usando pilas de botón. Es decir, cuando intenta encender todos los LED (en un segmento) a la vez, alcanza el límite de la cantidad de corriente que puede entregar la batería, independientemente de los controladores del microcontrolador.

Un enfoque viable es utilizar una cadena de cuatro registros de desplazamiento de 8 bits (p. ej., 74HC595) para controlar todos los segmentos y utilizar una resistencia limitadora de corriente del mismo tamaño para cada segmento (importante: cada segmento tiene su propia resistencia).

Luego simplemente cambie el patrón de 32 bits apropiado del AVR para el valor que está tratando de representar. Eso desacoplará los requisitos de energía de la pantalla LCD de las restricciones de suministro de corriente del pin AVR. También reducirá la utilización de su pin AVR a tres pines (datos, reloj, pestillo).

En términos de complejidad del software, todo lo que necesita es una tabla para asignar valores de dígitos a patrones de bits. Si mantiene el cableado consistente entre los dígitos, eso es solo una tabla de búsqueda de 10 entradas (si solo está mostrando números de base 10 simples). El protocolo de comunicación del registro de desplazamiento no podría ser mucho más simple: abra el pestillo, registre los bits de datos, cierre el pestillo, y son capaces de operar de manera confiable a velocidades mucho mayores que las que puede lograr con los AVR, por lo que solo puede moverse. los cables lo más rápido posible en el software. Si desea reducir la energía, es posible que pueda lograr PWM cambiando a 0x0000 durante el ciclo de apagado y usando interrupciones del temporizador para garantizar la consistencia del ciclo de trabajo, por ejemplo.

Lo último, estas cosas son baratas y vienen en paquetes DIP si eso es importante para usted.