Le sugiero que no necesite trabajar en absoluto con el registro de desplazamiento de salida de alta velocidad.
Lo que describe es una simple pantalla multiplexada donde las 4 señales de activación activan los dígitos individuales (14 segmentos) durante períodos relativamente largos. Las salidas de datos son estables durante el período de visualización completo para cada dígito.
-
Lleve las señales de habilitación de cuatro dígitos a 4 pines de entrada 328p usando el flanco descendente (supongo que aquí) para desencadenar una interrupción. Ahora tiene un ISR para cada dígito cuando está habilitado. Dado que es probable que la velocidad de escaneo de los dígitos sea inferior a 2 kHz o menos, por lo que podría esperar que cada dígito esté habilitado para aproximadamente 500 us.
-
Alimente los 14 bits de datos del segmento en los multiplexores 2 * 8: 1 (74HCT151), cada uno de los bits de salida va a un pin de entrada en su 328p.
-
Use tres bits de salida en el 328p para establecer el bit que se recibe del byte bajo / alto de los segmentos.
Para el código, cuando reciba una interrupción desde el dígito habilite:
- Establezca la selección en cero (0x000) para los muxes
- Lea el bit LS en cada byte y almacene el valor en 2 ubicaciones de memoria por dígito.
- Seleccione la opción para recorrer y leer cada bit en el byte bajo / alto.
- Ret
Dado que las interrupciones nunca entran en conflicto, puede usar una sola rutina para leer / hacer un bucle y simplemente configurar un puntero para almacenar los bits alto / bajo.
Esto terminaría siendo una solución de 2 chips + MCU, con 6 pines de entrada y 3 pines de salida utilizados en el 328p. También es posible que necesite resistencias pullup en los transistores de exploración. (deberá proporcionar información esquemática para poder determinar la necesidad)