Está en la página 1de 8

Matriz de LEDs

Matriz de LEDs
Descripcin
Se har un contador del 0-9, el cual visualizaremos a travs de una matriz de LEDs la cual estar controlada por el microcontrolador, la matriz a utilizar es una matriz de LEDs de 5x7 la cual contiene un total de 35 LEDs.

Diagrama Esquemtico

Materiales
Matriz de LEDs 5x7 7 Resistencias de 220 Ohms 1 Microcontrolador ATmega8 Programador USBasp V3.0

Introduccin
Matriz de LEDs
La matriz de LEDs no es ms que un arreglo de LEDs agrupados dentro de un encapsulado, los cuales se encuentran agrupados en forma de matriz. Este acomodo nos ayuda para poder generar cualquier cosa que nosotros queramos siempre y cuando se pueda representar dentro de la matriz.

La matriz de LEDs que se usara en este ejemplo es una como la de la foto superior, esta es de 5 columnas por 7 filas, las columnas son representadas por una C y las filas por una R, en la imagen inferior podemos ver como se encuentran distribuidos los pines de la matriz a usar.

Para poder formar algo en la matriz, es necesario realizar un barrido en las columnas para controlarlas de manera independiente, cada columna tendr su cdigo, por lo que debemos formar la figura, numero o letra que necesitemos separando la misma en 5 columnas. A continuacin veremos cmo se forma el numero 3 el cual prestando atencin al valor de las R's las cuales forman el cdigo deseado mientras que las C's generan un barrido de las columnas. Es importante destacar

que en las R's el LED prende con un 0 lgico, lo cual est dado ya que la columna correspondiente est habilitada con un 1 lgico (Vcc), el led en las R's prendera con la diferencia de voltaje, por lo tanto en las R's se usa el 0 como prendido. Ejemplo de la formacin de un numero 3

C bin 00001 00010 00100 01000 10000

C hex 0x01 0x02 0x04 0x08 0x10

R bin 1011101 0111110 0110110 0000000 1001001

R hex 0x5D 0x3E 0x36 0x00 0x49

Como se puede ver en la imagen anterior, el numero 3 se formo en base a la combinacin de controlar las C's y las R's, trabajo que le asignaremos al microcontrolador, este proceso se repetir varias veces a una velocidad lo suficientemente alta, como para no alcanzar a percibir los cambios, y tener la idea de que todos los LEDs deseados se encuentran prendidos a la vez.

Despus de hacer un proceso similar, se obtuvo una tabla con los valores de cada numero deseados, en este caso los nmeros se crearon de determinada forma, la cual puede cambiar dependiendo las necesidades de cada persona, ya sea que se necesite mostrar letras o caracteres distintos.

Numero 0 1 2 3 4 5 6 7 8 9

C1 0x41 0x7E 0x4E 0x5D 0x07 0x8C 0x41 0x3F 0x49 0x4D

C2 0x3E 0x5E 0x3C 0x3E 0x77 0x36 0x36 0x37 0x36 0x36

C3 0x3E 0x00 0x38 0x36 0x77 0x36 0x36 0x37 0x36 0x36

C4 0x00 0x00 0x02 0x00 0x00 0x30 0x30 0x00 0x00 0x00

C5 0x41 0x7E 0x46 0x49 0x00 0x39 0x39 0x0F 0x49 0x41

Programa en C
#include <avr/io.h> #include <util/delay.h> int contador=0; int i,j; int numero[10][5]={

{0x41,0x3E,0x3E,0x00,0x41}, {0x7E,0x5E,0x00,0x00,0x7E}, {0x4E,0x3C,0x38,0x02,0x46}, {0x5D,0x3E,0x36,0x00,0x49}, {0x07,0x77,0x77,0x00,0x00}, {0x8C,0x36,0x36,0x30,0x39}, {0x41,0x36,0x36,0x30,0x39}, {0x3F,0x37,0x37,0x00,0x0F}, {0x49,0x36,0x36,0x00,0x49}, {0x4D,0x36,0x36,0x00,0x41}};

//Se declara la matriz de los numeros

int main (void){ DDRD=0xFF; DDRC=0xFF; PORTC=0x10; while(1){ for(j=0;j<25;j++){ for(i=0;i<5;i++){ PORTD=numero[contador][i]; _delay_ms(1); PORTC=PORTC>>1; } PORTC=0x10; } contador++; if (contador==10) contador=0; } } //Ciclo de numero de barridos //Ciclo de barrido de columnas //Se le asigna al PORTD el cdigo respecto a la columna //Siguiente columna //Se inicializa a las primera columna //Incrementar en 1 el contador //Si el contador llega a 10 //que vuelva a ser 0

//Inicializar el puerto C para el barrido de las columnas

Detalles del programa


#include <avr/io.h> #include <util/delay.h> Incluir las libreras necesarias para el proyecto. int numero[10][5]={ {0x41,0x3E,0x3E,0x00,0x41}, {0x7E,0x5E,0x00,0x00,0x7E}, {0x4E,0x3C,0x38,0x02,0x46}, {0x5D,0x3E,0x36,0x00,0x49}, {0x07,0x77,0x77,0x00,0x00}, {0x8C,0x36,0x36,0x30,0x39}, {0x41,0x36,0x36,0x30,0x39}, {0x3F,0x37,0x37,0x00,0x0F}, {0x49,0x36,0x36,0x00,0x49}, {0x4D,0x36,0x36,0x00,0x41}};

Como se puede ver se inicializa una variable de tipo entero, pero en este caso es una matriz, a la cual, al momento de declararla le aadimos la longitud de las filas y las columnas dentro de los corchetes, como se puede ver en el cdigo. La matriz declarada e inicializada con los valores, es la misma que se encuentra representada en la tabla en la introduccin del proyecto, como se puede ver, la relacin de la posicin de la fila es la misma que el numero que representa, por ejemplo el numero 3 se encuentra en la 3ra fila, esto nos ayudara al momento de realizar el cdigo. DDRD=0xFF; DDRC=0xFF; PORTC=0x10; Se inicializan los puertos como salida, y el puerto C toma el valor de 0x10 el cual activa el bit 4 del puerto con el que empezara la primera columna, posteriormente se desplazara el bit, para hacer el barrido. for(j=0;j<25;j++){ El primer ciclo for del cdigo representa, las veces que se va ha hacer el barrido completo, por lo tanto ser el total de veces que se muestra un numero completo y esto es el tiempo que dura visualizndose el numero en la matriz. El nmero 25 en este ciclo for puede cambiarse para obtener un conteo ms rpido o ms lento segn se requiera.

for(i=0;i<5;i++){ El segundo for, es para hacer el barrido, en este caso el 5 es constante y no debe cambiarse ya que este representa las columnas de la matriz, como se puede ver, este for trabaja en conjunto con el otro, cuando este termina en el otro for, se incrementa la variable "j" en uno ms, por lo tanto este for se ejecutara completo el nmero de veces que el for exterior marque. PORTD=numero[contador][i]; _delay_ms(1); PORTC=PORTC>>1; Aqu se puede ver como se asigna el numero, en este caso la variable numero esta con dos corchetes los cuales corresponden a la filas y a las columnas, se aprecia que la "i" del ciclo est cambiando dentro del for interior, que representa las columnas mientras que la variable contador permanece fija durante los dos ciclos for, esta representa la fila, y como se comento anteriormente, el numero corresponde a la posicin del mismo en la fila. El PORTC est siendo desplazado para recorrer el bit que controla a las columnas de la matriz, terminando el ciclo for, se inicializa para comenzar de nuevo. contador++; El contador incrementa, para asignar otro nmero a la matriz. if (contador==10) contador=0; Se limita el incremento del contador, con un if, en este caso si llega a 10, un numero del cual no hay fila en la matriz, se inicializa de nuevo asignndole un cero.

También podría gustarte