Tutorial ARDUTEKA - Matriz LED Bicolor + 74CH595

Muy buenas

Después de hacer mil pruebas y mirar por varios blogs al final me he decidido postear aqui para ver si alguien puede ayudarme.

Estoy intentando hacer esta practica pero me dan unos resultados extraños.

Despues de estar haciendo muchas pruebas he simplificado el codigo para que al ser lo mas corto posible sea mas dificil que haya fallos. Este es el codigo

int pinLatch = 10;
int pinDatos = 11;
int pinReloj = 12;

int gnd[8] = {2, 3, 4, 5, 6, 7, 8, 9};

byte frase[8] = {255,0,0,0,0,0,0,0};

void setup(){

  for (int i=2;i<=12; i++){
    pinMode(i, OUTPUT);
  }
  
  for (int g=2;g<=9;g++){
    digitalWrite(g, HIGH);
  }

}
void loop(){

    for (int i=0; i<8; i++){
       digitalWrite(gnd[i], LOW);
       digitalWrite(pinLatch, LOW);
       shiftOut(pinDatos, pinReloj, MSBFIRST, frase[i]);
       digitalWrite(pinLatch, HIGH);
       digitalWrite(gnd[i], HIGH);
    }
}

El circuito es el mismo que el de la practica pero con solo un registro 7HC959N, con solo los leds verdes conectados y sin desplazar las letras.

El resultado que obtengo es que siempre se encienden una fila mas abajo de lo que deberia ser.

Si envio la matriz 255,0,0,0,0,0,0,0 se me enciende la fila 2, si pongo 0,255,0,0,0,0,0,0 se enciende la fila 3 y si envio 0,0,0,0,0,0,0,255 se enciende la primera.

Pero si hago un delay:

void loop(){

    for (int i=0; i<8; i++){
       digitalWrite(gnd[i], LOW);
       digitalWrite(pinLatch, LOW);
       shiftOut(pinDatos, pinReloj, MSBFIRST, frase[i]);
       digitalWrite(pinLatch, HIGH);
[color=red]delay(250);[/color]
       digitalWrite(gnd[i], HIGH);
    }
}

Con este codigo si que se encienden las filas en orden pero claro, no todas a la vez sino de una en una.

A la unica conclusion que he podido llegar es que el reloj del registro de desplazamiento es mas lento que el de arduino i por eso no hace bien la representacion sino pongo un delay. La verdad es que yo de programar si que se, pero de electronica se lo basico y no tengo ni idea de que puede estar pasando

Si alguien pudiera ayudarme se lo agradeceria mucho. Mentras tantos empezare a investigar la funcion shiftout y investigando mas a fondo el 7HC959N

Muchas gracias