Cómo "deserializar" una salida digital a 4 salidas digitales

Estoy trabajando en un pequeño proyecto de prueba para mi Arduino y, como parte de él, quiero mostrar un número en un sistema LED de 7 segmentos. Mi primera configuración involucró solo enlaces directos a la pantalla de 7 segmentos y controló cada segmento individualmente con el Arduino configurando la salida para LOWactivarlo.

Luego reduje la cantidad de pines requeridos a 4 (5 incluyendo el control de punto decimal) usando un BCD a un chip CMOS de alta velocidad de 7 segmentos (74HC4511) y conectándolo como se muestra en el diagrama a continuación (las puertas NOT se logran usando Puertas NOR con una entrada conectada a tierra):

esquemático

simular este circuito : esquema creado con CircuitLab

Luego puedo controlar la pantalla de 7 segmentos usando el siguiente fragmento:

digitalWrite( 1, iVal & 0x0001 != 0 ? HIGH : LOW );
digitalWrite( 2, iVal & 0x0002 != 0 ? HIGH : LOW );
digitalWrite( 3, iVal & 0x0004 != 0 ? HIGH : LOW );
digitalWrite( 4, iVal & 0x0008 != 0 ? HIGH : LOW );
digitalWrite( 5, bDPRequired ? HIGH : LOW );

Sin embargo, esto no es ideal ya que aún requiere 4 pines; idealmente, me gustaría reducirlo a 1 pin que genera los datos en serie. Mi primer pensamiento fue usar algún tipo de registro de desplazamiento de 4 bits; sin embargo, esto requeriría otro pin de salida para controlar el pulso del reloj y daría como resultado pantallas falsas durante la transición de un número a otro.

¡Estaría agradecido por cualquier forma potencial de minimizar la cantidad de pines!


PD: Soy consciente de que es una mala práctica tener la resistencia limitadora de corriente en la salida de 5 V en lugar de cada uno de los pines del cátodo en la pantalla de 7 segmentos, ya que resultará en una menor emisión de luz cuantos más segmentos se activen.

Respuestas (2)

Podría usar un registro de desplazamiento 74HC595 y este circuito, cortesía de Roman Black.

ingrese la descripción de la imagen aquí

Eso le permitirá comprar 8 salidas con un solo chip de 25 centavos.

No lo usaría para controlar una planta de energía nuclear, pero asumiendo que maneja una pantalla, puede actualizarla regularmente, por lo que una falla tiene un impacto limitado.

Lo único que puedo pensar para hacer esto con un solo pin es usar un registro de desplazamiento de 1 cable, como DS2408 . Esto le dará 8 salidas usando solo un pin de su micro. Sin embargo, realmente te sugiero que vayas a dos pines en su lugar. Esto le permitirá usar un registro de desplazamiento estándar o I2C a un chip expansor GPIO, ya que será mucho más fácil de programar.

Por cierto, tienes un error en tu esquema. La resistencia debe estar después de su chip de controlador. De lo contrario, su Vcc caerá en voltaje junto con los LED a medida que se enciendan más.

Y preferiblemente debería ser una resistencia separada para cada segmento.
El OP ya comentó sobre esto, así que no lo mencioné. Sin embargo, es aún peor como se muestra en este esquema.