Banner publicitario de PCBWay

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:
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:
Atrás
Arriba