ahorrando salidas para 4 digitos 7 segmentos

Como parte del proyecto tengo un display de 4 dígitos de 7 segmentos que me muestran un tiempo. Al final, mi proyecto tiene más cosas de las esperadas (con lo que usaba todas las entradas y salidas posibles y tengo que ganar entradas y salidas de alguna manera.he ahorrado 5 entradas usando una sola analogica para los diferentes pulsadores que tengo. Ahora quiero ganar salidas. Mi display usa 11 salidas (7 segmentos y 4 de control (el punto lo he hecho fijo por hardware) Había pensado en ganar 3 salidas, que las usaría con un multiplexor para tener las 5 que necesito. Estas 3 salidas saldrían de las salidas de los 7 segmentos. Usaría 4 salidas y un conversor bcd7 segmentos del tipo :74ls48 o 74LS247 – 74LS248 – 74LS249.

Ahora bien, el software.. ahrora mismo esta es la parte de codigo del display

byte Digit[10][8] =
  {  { 0,0,0,0,0,0,1,0 },    // 0
     { 1,0,0,1,1,1,1,0 },    // 1
     { 0,0,1,0,0,1,0,0 },    // 2
     { 0,0,0,0,1,1,0,0 },    // 3
     { 1,0,0,1,1,0,0,0 },    // 4    
     { 0,1,0,0,1,0,0,0 },    // 5
     { 0,1,0,0,0,0,0,0 },    // 6
     { 0,0,0,1,1,1,1,0 },    // 7
     { 0,0,0,0,0,0,0,0 },    // 8
     { 0,0,0,1,1,0,0,0 }     // 9
   };

void Display(int pos, int N){
  digitalWrite(9 ,LOW);      // Apaga todos los digitos
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   digitalWrite(12,LOW);      
  
    for (int i= 0 ; i<8 ; i++)
             digitalWrite(i+2 , Digit[N][i]) ;
  
   digitalWrite(pos + 9, HIGH); // Enciende el digito pos
}

como no se me dan muy bien las arrays... ¿debería ser así?:

byte Digit[10][4] = {
     { 0,0,0,0 },    // 0
     { 0,0,0,1 },    // 1
     { 0,0,1,0 },    // 2
     { 0,0,1,1 },    // 3
     { 0,1,0,0 },    // 4    
     { 0,1,0,1 },    // 5
     { 0,1,1,0 },    // 6
     { 0,1,1,1 },    // 7
     { 1,0,0,0 },    // 8
     { 1,0,0,1 }     // 9
   };

void Display(int pos, int N){
   digitalWrite(9 ,LOW);      // Apaga todos los digitos
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   digitalWrite(12,LOW);      
  
    for (int i= 0 ; i<8 ; i++)                       // me voy moviendo por el array
             digitalWrite(i+5 , Digit[N][i]) ;    // empiezo la salida en la salida 5
  
   digitalWrite(pos + 9, HIGH); // Enciende el digito pos 
}

Usaría las salidas 5,6,7,8 para el BCD y las salidas 9,10,11,12 para el control

Hola.
Que tal un par de Shift Register 74hc595? O tal vez MCP23017?

Lo has considerado?

Saludos

Esos los he considerado para después de ganar las 3 salidas al usar el BCD-7seg. Me faltaba decir que mañana sí o sí lo tengo que montar y esas 5 salidas que de momento me faltan, se pueden preparar en una actualización del sistema, es decir, un poco más adelante.

¿Pensaste que tu proyecto no da para una UNO sino para una MEGA?

En un principio con la uno suficiente, tras los cambios que me han introducido tambien deberia valer, pero con mas entradas/salidas. Montar 4 megas seria viable si no fuera pq solo tengo 1 y mañna no podré tener 3 mas jjj

Tu solución eran los SHIFT REGISTERES 595 o mucho mejor el MAX7219 pero eso es algo que se debe pensar al comienzo de un proyecto.
EL Max7219 maneja 8 displays Anodo o Catodo Común, control de brillo, control del punto decimal.

para cuando puedas mejorar tu trabajo. No lo dudes.

Como este es un tema de hardware, lo muevo.

Cierto, perdón por la equivocación

Nada que perdonar! :wink: