Matriz de LEDs 5×7

 Matriz de LEDs

Descripción

Se hará un contador del 0-9, el cual visualizaremos a través de una matriz de LEDs la cual estará controlada por el microcontrolador, la Matriz de led´s  a utilizar es una Matriz de LEDs de 5×7 la cual contiene un total de 35 LEDs.

 Diagrama Esquemático

 

matriz de leds

Diagrama de matriz de led´s

 

 

Materiales

 

Introducción

Matriz de LEDs

La matriz de LEDs no es más 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.

 

matriz de leds

Matriz de led´s 5×7

 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.

 

led matrix

matriz de led´s 5×7

Para poder formar algo en la matriz de led´s, es necesario realizar un barrido en las columnas para controlarlas de manera independiente, cada columna tendrá su código, por lo que debemos formar la figura, numero o letra que necesitemos separando la misma en 5 columnas. A continuación veremos cómo se forma el numero 3 el cual prestando atención al valor de las R’s las cuales forman el código 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 lógico, lo cual está dado ya que la columna correspondiente está habilitada con un 1 lógico (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 formación de un numero 3

Matriz de LEDs

Esquema de matriz de led´s 5×7

 

 

tabla Matriz de LEDs

Tabla de codigos

 

 Como se puede ver en la imagen anterior, el numero 3 se formo en base a la combinación 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 de la Matriz de led´s  deseados se encuentran prendidos a la vez.

 

LED matrix Matriz de LEDs

numero 3

 

Después de hacer un proceso similar, se obtuvo una tabla con los valores de cada numero deseados, en este caso los números 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.

tabla matrix 2 Matriz de LEDs

tabla matrix 2

 

 

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}, //Se declara la matriz de los numeros
{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}};

 int main (void){

DDRD=0xFF;
DDRC=0xFF;
PORTC=0x10;    //Inicializar el puerto C para el barrido de las columnas

while(1){

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

 

Detalles del programa

<pre>#include <avr/io.h>
#include <util/delay.h>

Incluir las librerías 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 añadimos la longitud de las filas y las columnas dentro de los corchetes, como se puede ver en el código.

 La matriz declarada e inicializada con los valores, es la misma que se encuentra representada en la tabla en la introducción del proyecto, como se puede ver, la relación de la posición 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 código.

 

<pre>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.

 

<pre>for(j=0;j<25;j++){

 El primer ciclo for del código 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 visualizándose el numero en la matriz. El número 25 en este ciclo for puede cambiarse para obtener un conteo más rápido o más lento según se requiera.

 

<pre>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 más, por lo tanto este for se ejecutara completo el número de veces que el for exterior marque.

 

<pre>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 posición 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.

 

<pre>contador++;

El contador incrementa, para asignar otro número a la matriz.

 

<pre>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 asignándole un cero.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *