Matriz de led 8 x 24 con arduino solo enciende una matriz

Hola compañeros buenas noches.
Necesito de su ayuda, estoy realizando una matriz de leds de 8 x 24 con arduino la cual debe desplegar un determinado mensaje.
Navegando en la red encontré un circuito con el ci 74hc595 lo conecté y funcionó con una sola matriz, entonces conecté las otras 2 matrices pero sólo una enciende.
Tengo pocos conocimientos de programación y he intentado buscar una solución pero hasta ahora no funciona nada.

Espero me puedan ayudar, aquí adjunto el programa.
Código:
int pinLatch = 10;    //Pin para el latch de los 74CH495
int pinDatos = 11;    //Pin para Datos serie del 74CH495
int pinReloj = 12;    //Pin para reloj del 74CH495

int letra = 0;         //Variable para cada letra
int ciclo = 0;         //Variable para los ciclos de cada letra en cada posicion
int desplaza = 0;      //Variable para generar desplazamiento en las filas

//Definimos los numeros decimales que hacen falta para dibujar cada caracter

#define SP {0, 0, 0, 0, 0}               //Espacio
#define EX {0, 125, 0, 0, 0}             //Exclamacion !
#define A {31, 36, 68, 36, 31}
#define B {127, 73, 73, 73, 54,}
#define C {62, 65, 65, 65, 34}
#define D {127, 65, 65, 34, 28}
#define E {127, 73, 73, 65, 65}
#define F {127, 72, 72, 72, 64}
#define G {62, 65, 65, 69, 38}
#define H {127, 8, 8, 8, 127}
#define I {0, 65, 127, 65, 0}
#define J {2, 1, 1, 1, 126}
#define K {127, 8, 20, 34, 65}
#define L {127, 1, 1, 1, 1}
#define M {127, 32, 16, 32, 127}
#define N {127, 32, 16, 8, 127}
#define O {62, 65, 65, 65, 62}
#define P {127, 72, 72, 72, 48}
#define Q {62, 65, 69, 66, 61}
#define R {127, 72, 76, 74, 49}
#define S {50, 73, 73, 73, 38}
#define T {64, 64, 127, 64, 64}
#define U {126, 1, 1, 1, 126}
#define V {124, 2, 1, 2, 124}
#define W {126, 1, 6, 1, 126}
#define X {99, 20, 8, 20, 99}
#define Y {96, 16, 15, 16, 96}
#define Z {67, 69, 73, 81, 97}

//Escribimos la frase separando cada letra por comas
//En el primer numero lo adaptaremos la longitud de la frase (caracteres)
byte frase[13][6]={A,R,D,U,I,N,O,U,N,O,SP,SP,SP};

//Almacenamos los pines de las filas que van conectadas a los catodos
int gnd[13]={0,0,0,0,0,2,3,4,5,6,7,8,9};

//Configuramos la placa
void setup()

{
  //Ponemos del pin 2 al 12 como salidas
  for (int i=2;i<=12; i++)
    {
      pinMode(i, OUTPUT);
    }  
   
  //Ponemos a nivel alto todas las lineas de los catodos de la matriz 
  for (int g=2; g<=9; g++)
    {
      digitalWrite(g, HIGH);
    }
}

void loop()
{
  
        for (desplaza = 8; desplaza>=0; desplaza--)
          {
            for (ciclo=0; ciclo<=45; ciclo++)
              {
                imprime();
              }          
          }
        
  
  //Una vez ha mostrado una letra, sumamos uno para que salga la siguiente
  letra++;

  
  
//Cuando ha llegado al final de la frase, lo pone a cero para que vuelva a salir
//Si cambiamos la longitud de la frase, este valor hay que cambiarlo
if(letra == 13)
  {
    letra = 0;
  }  
}

//Funcion que imprime en color rojo
void imprime()
{
 //Un contador del tamaño de las letras (5 lineas de ancho)
 for (int z=0; z<=5; z++)  
       { 
          int fila = z + desplaza;                        //Le decimos en que linea empieza a dibujar
          digitalWrite(gnd[fila], LOW);                   //La ponemos a cero
          digitalWrite(pinLatch, LOW);                    //Le decimos a los registros que empiecen a escuchar los datos
          shiftOut(pinDatos, pinReloj, MSBFIRST, 0);      //Le decimos que en el ultimo registro no encienda nada
          shiftOut(pinDatos, pinReloj, MSBFIRST, frase[letra][z]);   //Le decimos que imprima la linea z de la letra en el primer registro (rojo)
          digitalWrite(pinLatch, HIGH);                   //Guarda y graba las salidas en los registros al poner a 1 el latch
          digitalWrite(gnd[fila], HIGH);                  //Apagamos esa fila poniendola en alto
        }
}
 
Última edición por un moderador:
Publica el esquema del circuito que tienes montado para poder ver donde puede estar el problema.
 
En ese diagrama no se ve como están conectadas las matrizes de leds. No me queda claro lo de 8 x 24, son 3 de 8x8 y sus 3 74hc595?.

Código:
shiftOut(pinDatos, pinReloj, MSBFIRST, 0);      //Le decimos que en el ultimo registro no encienda nada
shiftOut(pinDatos, pinReloj, MSBFIRST, frase[letra][z]);   //Le decimos que imprima la linea z de la letra en el primer registro (rojo)
El programa solo manda información a un 74hc595, al segundo le manda valor 0.

Por otro lado, no creo que los pines del Arduino que mandan las filas (Katodos) puedan drenar a las 3 matrices ( no se que modelo utilizas), te recomiendo intercales un transistor en cada linea para poder drenar esa intensidad.



quiza te interesen estos tutoriales:
http://arduino.cc/en/pmwiki.php?n=Tutorial/ShiftOut
http://arduino.cc/en/pmwiki.php?n=Reference/ShiftOut
 
Última edición:
Arriba