Push The Button

Worklog de electronica, DIY, e informática de Alwar

Quijost - El mejor hosting de origen manchego
El mejor hosting de origen español y manchego

A traves de Hack a Day descubro un interesante puzzle hecho con matrices de diodos. Cada matriz (8×8 diodos) es totalmente autonoma del resto y puede mostrar imagenes animadas, que recibe por un puerto ethernet y almacena en una tarjeta SD. Para ello utiliza un microcontrolador PIC24FJ64GA004 el cual posee una pila TCP/IP y soporta sistemas de ficheros FAT. Cada matriz es sincronizada con el soporte mediante unos cables de cobre en la base. El soporte envia los datos en serie a 9600 baudios, y cada matriz con un identificador unico lee los datos correspondientes.

Personalmente las matrices de diodos me encantan, y cada vez que veo una me entra una rabia por no poder trabajar con ellas!!!. Aqui en España tengo la desgracia de no encontrar ningun sitio donde comprarlas. El unico sitio que se es eBay, pero seria comprarlas en EE.UU y los portes no son baratos. Pero mas rabia me da cuando recuerdo que hace mes y medio estuve de intercambio dos semanas en Chicago y no aproveche para traerme la maleta llena de cosas de estas!! Fuck!!

Ya llevo mucho tiempo con un proyecto en la mente. Consiste en una marquesina con diodos para mostrar mensajes.

Al principio me daba un poco cague, por el tema de tener que programar un microchip en C o asm, pero mas tarde llego a mis manos Arduino y se me ocurrio la idea de utilizarlo como el controlador del display. Pero me falta lo fundamental. LAS MATRICES!!. A si que ahora estoy hablando con uno de eBay a ver cuanto me cobra por enviarme una protoboard y las matrices.

Por si alguien se lo pregunta como se puede hacer esto, por lo que yo he averiguado lo que se hace es utilizar unos “shift registers” que basicamente son unos convertidores de serie a paralelo, y multiplexacion. En otras palabras:
El display se supone que tiene de alto 8 diodos (8 filas) y largo lo que quieras (por ejemplo 80 columnas). El primer problema que nos presenta las dimensiones del display es que no tenemos suficientes puertos en un microcontrolador para conectar todas las entradas, a si que utilizaremos el “shift register” para las 80 columnas. Como suelen tener 8 salidas necesitariamos 10, una por matriz (la matriz es de 8×8 diodos). y luego las filas las conectamos directamente al micro para no compicarnos mucho, aunque podriamos utilizar otro “shift register” para ahorrar puertos del pic.

Vale Ya esta todo conectado, pero se nos presenta otro problema, bastante dificil de explicar, a si que tendré que hacer un dibujito. Si quisieramos iluminar una fila bastaria con dar corriente a una fila de diodos y enviar por los shift registers todo 1. Supongamos que los 0 son LEDs apagados y los 1 LEDs encendidos, y los v donde hay voltage..
vvvvvvvvvvvvvvvvvvvvvvvv
000000000000000000000000<-n
111111111111111111111111<-v
000000000000000000000000<-n

Se ve que el circuito se enciende porque a todos los leds le llega corriente. Los diodos estan conectados segun este diagrama
¿Pero si ahora en vez de una fila horizontal quiero una en diagonal?
vvvnnnnnnnnnnnnnnnnnnnnn
100000000000000000000000<-v
010000000000000000000000<-v
001000000000000000000000<-v

Hariamos según el esquema de ceros y unos de arriba. Pero si te fijas bien eso no es lo que ocurriria, si no que se iluminarian mas diodos de los que queriamos. (WTF!!)
Asi resultaria:
vvvvvvnnnnnnnnnnnnnnnnnn
111000000000000000000000<-v
111000000000000000000000<-v
111000000000000000000000<-v

¿Entonces como encendemos cada diodo sin que se encienda otro?
MULTIPLEXACION DEL TIEMPO
En vez de encender todos los diodos a la vez lo haremos por columnas. Por el shift register enviariamos solo un 1 en cada porcion de tiempo, y para hacer la diagonal, el microchip tendría que darle 3 vueltas al bucle en muy poco tiempo para crear el efecto deseado.

1º)
vnnnnnnnnnnnnnnnnnnnnnnn
100000000000000000000000<-v
000000000000000000000000<-n
000000000000000000000000<-n

2º)
nvnnnnnnnnnnnnnnnnnnnnnn
000000000000000000000000<-n
010000000000000000000000<-v
000000000000000000000000<-n

3º)
nnvnnnnnnnnnnnnnnnnnnnnn
000000000000000000000000<-n
000000000000000000000000<-n
001000000000000000000000<-v

Aqui volveriamos al primer paso otra vez así en bucle para que se viese siempre la linea diagonal.

Y como nuestro ojo es muy lento creeria ver una linea cuando se estan iluminando los diodos por separado. Así conseguiriamos mostrar en el display lo que queramos, parecido al cine. Espero que quede claro, si no, podeis poner comentarios y preguntar. Luego en la realidad salen problemas porque hay parpadeos, tics etc… y esto se complica cuando queremos mostrar algo en movimiento.