Go Down

Topic: Tutorial ARDUTEKA - Matriz LED Bicolor + 74CH595 (Read 18 times) previous topic - next topic

Arduteka

Hola de nuevo!

En este nuevo proyecto, vamos a aprender a conectar una matriz de LED 8x8 bicolor a través de unos registros de desplazamiento (Shift register) que nos van a permitir ahorrar muchos pines en nuestra placa, obteniendo un resultado tan espectacular como se puede ver en este video:




Podéis descargar el archivo del programa desde AQUI!!

Si queréis saber como empezar a desarrollar este proyecto acceder AQUI.

La idea de este post es que sigáis desarrollando el software o incluso el hardware, mejorándolo y ampliándolo y también para que todos aquellos que tengáis algún problema a la hora de llevarlo a cabo, expongáis vuestras dudas y así dejarlas registradas para el resto de los días!!

Un saludo!!
Aprende a desarrollar por ti mismo!!

@Arduteka
Facebook

rodri7machos

Hola:
Pues, hice el mismo programa, con una matriz bicolor, pero sin los registros de desplazamiento.
Al programar el arduino, y conectarlo a la matriz de led, solo se encienden 3 columnas.
Necesito ayuda.
Tambien quiero saber como hacer para unir 2 matrices led, es decir, que cuando se termine de desplegar el mensaje en una matriz que automaticamente se pase a la otra.

Y, si tengo que usar los registros de desplazamiento, cuales serian los equivalentes al 74hc595? porque por donde vivo, no hay en existencia en las electronicas.

Gatoloco65

Saludo !!!

Quisiera saber que debo cambiar, tanto en el diseño del circuito como en el código en el caso en que las filas de la matrix 8x8 sean los ánodos.

Gracias !!!

Marine

#3
Jun 16, 2012, 06:12 pm Last Edit: Jul 31, 2012, 05:39 pm by Marine Reason: 1
Buenas. Yo soy nueva en el uso de Arduino. Ha sido mi proyecto para finalizar la FP y la aplicación que he realizado es precisamente esto, el envió de un texto a 3 matrices de leds de 8x5 (no son bicolor). A diferencia del tutorial de Arduteka, yo he enviado los datos de los registros de desplazamiento a las columnas, por lo que si veis mi abecedario comprobareis que es diferente al de ese tutorial.
Como novedad he incluido las siguientes cosas:
- Desplazamiento mediante interrupciones por overflow
- Modificaciones en la funcion shiftOut. He creado dos funciones basadas en esta anterior.
   - Una de ellas es para introducir la fila de datos entera. Como mis matrices son de 5 columnas, solo me interesa enviar 5 bits a la linea de datos, por lo que la funcion la he modificado para tomar solo esos bits.
   - La otra está modificada para mostrar tantos bits como veces me haya desplazado. Es decir, mostraré mas bits segun el valor que tenga una variable que incrementaré cada vez que ocurra la interrupción.

He visto en un comentario anterior como se preguntaba sobre enlazar varias matrices, en este proyecto puedes ver como lo he realizado yo. Aquí os dejo el programa en un adjunto (no se si esto funciona asi). Espero que a alguno os sirva de ayuda.

ED: En este ejemplo usé 3 matrices de leds y el dato se iba desplazando por todas ellas. Subo de nuevo el programa con mejores comentarios.

erikcrane

#4
Jul 31, 2012, 11:39 am Last Edit: Jul 31, 2012, 05:44 pm by erikcrane Reason: 1
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

Code: [Select]

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:

Code: [Select]

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

Go Up