¿Por qué hay un retraso en una pantalla de 7 segmentos de ánodo común?

Tengo una pantalla de 7 segmentos de 4 dígitos de ánodo común. Tengo cada cátodo de segmento conectado a una resistencia de 330 ohmios, y la resistencia está conectada a un registro de desplazamiento. Cada cátodo de segmento está conectado al mismo registro de desplazamiento. Cada ánodo común está conectado a un segundo registro de desplazamiento. En este momento, estoy usando un Arduino para multiplexar la pantalla para mostrar un número.

Esto funciona muy bien, pero hay un problema. ¡La pantalla no es lo suficientemente brillante! Supongo que porque esta es una configuración de ánodo común y que el registro de desplazamiento solo puede proporcionar alrededor de 40 mA de corriente para 8 segmentos (AG y el punto decimal).

He decidido que necesito más poder. Mi primer pensamiento fue tratar de usar 4 transistores PNP . Los conecto correctamente y los segmentos se vuelven más brillantes. ¡Excelente! Sin embargo, hay un problema. ¡Parece que el transistor está ralentizando algo! ¡Hay un brillo desagradable de segmentos que son utilizados por otros dígitos! Tengo el microprocesador configurado para mostrar cada segmento durante 4 milisegundos. La hoja de datos afirma que el transistor debería encenderse y apagarse más rápido que eso. ¿Por qué está ocurriendo este débil resplandor?

Esto es lo que parece cuando se muestra 1111:

ingrese la descripción de la imagen aquí

Esto es lo que parece cuando se muestra 1112:

ingrese la descripción de la imagen aquí

Realmente necesitamos un esquema de lo que está haciendo para ayudarlo de manera eficiente. ¿Podemos obtener un esquema? Puede ser muy fácil de resolver.
También podría ser un problema de software, por lo que los fragmentos de código de cómo maneja las líneas de salida (tiempo) también son una buena adición.
Creo que el código es el sospechoso probable: supongo que el problema "siempre estuvo ahí", solo que se hizo más visible con la unidad más alta de los transistores. Publique el bit de código relevante y un esquema.
74HC595 tiene un retraso entre los registros de desplazamiento y los registros de salida.

Respuestas (5)

Aquí hay un posible mecanismo para la falla. Dices que funciona (débilmente) sin los transistores, pero no funciona con ellos. Entonces parece que la falla está en los transistores. ¿Hay alguna razón por la que los transistores puedan estar dejando pasar algo de corriente cuando no deberían?

Sí. Estás usando un transistor PNP. Como sabe, estos transistores están encendidos cuando el voltaje base es más bajo que el voltaje del emisor. Están apagados cuando el voltaje base es mayor o igual al voltaje del emisor.

El problema con el chip de registro de desplazamiento es que las salidas siempre son más bajas que el voltaje del emisor. No pude distinguir el número de pieza del chip que está utilizando, pero según la hoja de datos del 74HC595 (página 6), las salidas no llegan a Vcc. Si hay una pequeña diferencia de voltaje, es posible que se esté escapando una pequeña cantidad de corriente de la base del transistor PNP. Con una ganancia de alrededor de 100, puede encontrar que hay suficiente corriente CE para dar una salida de luz notable en los LED.

Algo para probar: agregue un diodo schottky entre Vcc y el emisor. Esto debería reducir el voltaje del colector en una fracción de voltio, lo suficiente como para permitir que el registro de desplazamiento apague completamente el transistor.

Ohhh, me acabo de dar cuenta de que no he cambiado mi código. No me di cuenta de que el transistor se enciende cuando el voltaje base es 0v. Básicamente estaba encendiendo transistores de 3 dígitos mientras apagaba uno. Fue solo una corrección de código. fallar de mi parte.
@blake305 - ¡Ah! Incluso iba a sugerir eso mismo, pero lo olvidé. Bien hecho.
@ blake305: ¿alguna razón por la que aceptaste esta respuesta? Con el debido respeto a Rocketmagnet, pero no apunta a la solución. Ninguna de las respuestas lo hace.
@FedericoRusso - Me preguntaba lo mismo. Supuse que esta respuesta apuntaba a los transistores, y esta fue la pista que lo llevó al verdadero problema.
@ blake305: si encontró la solución, puede publicarla como respuesta, que podrá aceptar en un par de días. Puede ser útil para otros. No se preocupe por Rocketmagnet, publicará otra excelente respuesta a otra pregunta si puede obtener la aceptación que perdería aquí ;-)

¡No vote esta respuesta! Blake encontró la solución él mismo, pero no parece interesado en publicarla como respuesta. Solo estoy publicando como una lección sabia para las generaciones futuras.

Conduciendo los ánodos comunes directamente, hizo una salida alta a la vez, y las salidas para las pantallas no seleccionadas son bajas. Pero agregar los transistores PNP invierte la lógica, y luego desea que la salida de la pantalla seleccionada sea baja y las otras altas.

Entonces, ¿qué sucede si olvida invertir los controladores de ánodo? Digamos que desea mostrar "1234". Hace que el ánodo del primer dígito sea alto, los otros bajos, y genera el patrón de bits para un "1". En lugar de que el primer dígito muestre el "1", permanece en blanco y los demás mostrarán el "1". Mover al siguiente dígito. Nuevamente, ese dígito permanecerá en blanco y los otros tres mostrarán el "2". Etcétera. Debido a la multiplexación, cada dígito mostrará una combinación de los otros tres dígitos, pero no el valor real de ese dígito.

ingrese la descripción de la imagen aquí

Blake dice que se suponía que esto era "1112". Los primeros tres dígitos muestran la combinación de "1" y "2", mientras que el último solo muestra el "1" porque eso es lo que son todos los demás dígitos.

Rocketmagnet bien puede estar en el camino correcto: los PNP pueden tener algo de corriente base debido a las fugas de sus controladores. Si la fuente de alimentación de PNP (el voltaje del emisor de los transistores) es la misma que la de los controladores HCMOS (¿HC595?), entonces esto no debería ser un problema, las salidas HCMOS generalmente se mantienen dentro de los 100 mV más o menos de los rieles.

Si el suministro de los PNP es mayor, entonces no debe conducirlos con una salida push-pull, sino con un drenaje abierto/colector abierto. En ese caso, la corriente de fuga del transistor cuando está "apagado" pasará a través de la base del PNP y, por lo tanto, se amplificará. Un 2N2907 no tiene un hFE muy alto, pero puede causar suficiente corriente de colector para mostrar LED ligeramente iluminados hacia arriba.

El remedio es simple: agregue una resistencia entre la base y el emisor de los PNP. Luego, siempre que la corriente de fuga provoque una caída de voltaje inferior a 0,6 V en la resistencia, toda pasará a través de la resistencia y nada a través de la base. Elija, por ejemplo, una resistencia de 4,7 kΩ. Luego, necesitará al menos 130 µA para obtener la primera corriente a través de la base, hasta entonces todo pasará a través de la resistencia. 130 µA es un valor seguro: es mucho mayor que la corriente de fuga esperada, pero mucho menor de lo que el controlador puede absorber.

Si la resistencia de 4,7 kOhm es un pull-up desde la base hasta el emisor, ¿no tiene que depender su valor del voltaje de la fuente de alimentación (voltaje del emisor) del PNP?
@m.Alin - No. El emisor está en Vcc, digamos +5 V. La base es 600 mV más baja, a 4,4 V. Luego, la resistencia necesita 130 m A para llegar a los 600 mV, y en ese momento el transistor comenzará a conducir. Si Vcc fuera +10 V, entonces la base aún sería 600 mV más baja, a 9,4 V. El voltaje requerido a través de la resistencia sigue siendo el mismo. (Tal vez te estés confundiendo con un NPN. El PNP es una imagen especular del NPN. Entonces, para el NPN, la corriente fluye del colector al emisor (tierra), para el PNP del emisor (+Vcc) al colector).
Conozco las diferencias entre las NPN y las PNP. Tal vez la corriente de fuga me confunda. ¿Cuál es el camino de la corriente de fuga?
@m.Alin - Vcc -> Emisor de PNP -> Base de PNP -> Resistencia base (espero que no se haya olvidado de eso) -> Salida del controlador (drenaje NMOS) -> Tierra.

Es un problema muy común cuando eres nuevo en la multiplexación. La multiplexación significa conducir una por una pantalla LED. Este problema surge cuando todavía hay datos en el puerto de salida y activa otra pantalla. HAGA esto - Coloque los datos en el puerto de pantalla - encienda cualquier pantalla - Apague todos los datos - apague la pantalla - retraso muy pequeño - ......Repita este paso... Su problema se resolverá.

Supongamos una corriente pico máxima de 20 mA por segmento. Cada uno de los controladores de lado bajo y alto caerá ~ 0,5 V, la pantalla en sí caerá ~ 1,5 V. Por lo tanto, la resistencia caerá 2,5, por lo que para 20 mA debe ser de 125 ohmios. 120 ohmios servirá.

Un registro de desplazamiento común no tendrá problemas con 20 mA, pero 8 x 20 mA (todos los segmentos de un dígito encendidos) probablemente sea demasiado. Si tiene 4 salidas de sobra, puede usar transistores PNP (resistencia base de 1k). De lo contrario, conecte los transistores a su segundo registro de desplazamiento.

Debe darse cuenta de que está multiplexando en el tiempo: debe dividir el tiempo de 'encendido' de manera uniforme entre los 4 dígitos, y el tiempo de 'encendido' debe ser mucho mayor que el tiempo requerido para cambiar entre los dígitos. Esto solicitaría una frecuencia de conmutación baja, pero tampoco desea ver la conmutación, por lo que ~ 100 Hz (2,5 ms para cada dígito) podría ser un buen compromiso.

Sus imágenes muestran imágenes fantasma: un dígito no deseado aparece (tenuemente) superpuesto al dígito que debería estar visible. Es probable que esto se deba a que se cambiaron las filas o las columnas demasiado pronto. Cuando no puede cambiar todo en un solo paso (¡tenga en cuenta que puede hacerlo con un registro de desplazamiento en cascada con un registro de retención separado!) debe

  • desactivar todos los dígitos
  • activar los segmentos para el siguiente dígito
  • activa el siguiente digito

Omitir el primer paso le dará el efecto fantasma.

Eso es lo que yo también habría pensado, pero el efecto es extremo . No parece algo que pueda resolver apagando la pantalla anterior unos microsegundos antes.
Eso depende de cómo estructuró su código. Una de mis asignaciones de ensamblador de PIC solía ser exactamente esta multiplexación, y lo he visto suceder.
¿ También que el efecto fantasma aparece dos dígitos más ?
También estoy un poco desconcertado, me gustaría ver el código/esquema para esto.
De las imágenes no puedo distinguir qué SR se utilizan. Espero que tengan registros de salida...