domingo, 17 de enero de 2010

Matriz de LED

Uno de los mejores métodos para indicar información es por medio de pantallas LED, que, aunque costosas, dan muy buenos resultados a la hora de llamar la atención, gracias a su luminosidad.

Para generar la sensación de que la matriz muestra los datos, se usa el método de multiplexación, el cual consiste en ir encendiendo, fila a fila o columna a columna, de un forma secuencial, los respectivos LED, dentro de un arreglo de los mismos, a lo cual le llamaremos Matriz LED.

Por ejemplo, si quisiéramos encender el LED encerrado en el círculo rojo, deberíamos conectar los 2v al pin R3 (en los demás 0v) y conectar a 0v al pin C2.

Una de las cosas importantes para que nuestro letrero quede llamativo, es garantizar su luminosidad, y esto se logra suministrando la corriente necesaria para ello. No olvidemos que en estos casos, los LED van a estar encendidos una fracción de tiempo unicamente y por ende hay que elevar la corriente que pasa a través de el. Un microcontrolador no suministra la suficiente corriente para este caso, por lo que es recomendable usar transistores BJT o MOSFET según sea el caso.

El hardware básico para manejar una matriz de LED de 7 Filas por 5 Columnas puede ser el siguiente (en el cual está incluido un conector MiniUSB para la programación del microcontrolador via ICSP).



Después de varios minutos de ruteado ...


Ya teniendo el hardware básico, podemos adentrarnos en el manejo del firmware del microcontrolador para lograr, en este caso, visualizar algunas letras en nuestra matriz de LED.

Como bien se dijo al inicio de este hilo, se usa la multiplexación para generar la sensación de continuidad de encendido de los LED. El tiempo al cual se enciende y/o se apagan los LED puede ser de 1 o 2 milisegundos, con lo cual no se observaran parpadeos en la matriz.

Se puede usar una interrupción del Timer0 para controlar la multiplexación de las columnas, un código alternativo puede ser:

#int_TIMER0
void visualizar(void)
{
Ints++;
if(Ints>=8)
{
Ints=0;
FlagOk=1;
output_a(0xFF);
}
}

En el programa principal, se validaría la bandera FlagOk para visualizar los datos correspondientes a cada columna.

while(true)
{
if(FlagOk)
{
FlagOk=0;
if(i>6)
i=0;
output_b(Fila[i]);
output_a(ColLetra[i]);
i++;
}
}

Los datos correspondientes a cada fila se guardan en un buffer y se toman de un arreglo bidimensional guardado en la ROM del PIC. Para la letra A, por ejemplo, se tiene:

const char May7x5[27][7]={
{0x0E,0x13,0x13,0x13,0x1F,0x13,0x13},//A
....
};

Para cambiar la letra, usamos los pulsadores:

if(!input_state(BT1))//Verifico el estado del pulsador BT1
{
j++;
memcpy(ColLetra,May7x5[j],sizeof(ColLetra));
}






Aunque en el video no se alcanza a distinguir muy bien el mensaje, no es asi en realidad, cosas de las camaras digitales.






DESCARGAS:
PCB : Tarjeta de ensamble
CÓDIGO: Simulación en ISIS y .hex para programar

No hay comentarios:

Publicar un comentario