Martes 15 de Marzo de 2011 00:33
Matriz de LEDs
DESCRIPCIÓN
Se hará un contador del 0 -9, el cual visualizaremos a través de una un a matriz de LEDs la cual estará controlada p microcontrolador, la matriz a utilizar es una matriz de LEDs de 5x7 la cual c ontiene un total de 35 LEDs.
DIAGRAMA ESQUEMÁTICO
MATERIALES
Matriz de LEDs 5x7 7 Resistencias de 220 Ohms 1 Microcontrolador ATmega8
Programador USBasp V3.0
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 enc agrupados en forma de matriz. Este acomodo nos ayuda para poder generar cualquier cosa que nosotros quera 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 columnas son representadas por una C y las filas por una R, en la imagen inferior podemos ver como se encue distribuidos los pines de la matriz a usar.
Para poder formar algo en la matriz, es necesario realizar un barrido en las column as para controlarlas de man independiente, cada columna tendrá su código, por lo que debemos formar la figura, numero o letra que neces separando la misma en 5 columnas. A continuación veremos cómo se forma el numero 3 el cual prestando ate valor de las R's las cuales forman el código deseado mientras que las C's generan un barrido de las columnas. importante destacar que en las R's el LED prende con un 0 lógico, lo cual está dado ya que la columna corres 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 el 0 como prendido. Ejemplo de la formación de un numero 3
Como se puede ver en la imagen anterior, el numero 3 se formo en base a la combinación de controlar las C's trabajo que le asignaremos al microcontrolador, este proceso se repetirá varias veces a una velocidad lo sufici alta, como para no alcanzar a percibir los cambios, y tener la idea de que todos los LEDs deseados se encuent prendidos a la vez.
Después de hacer un proceso similar, se obtuvo una tabla con los valores de cada numero deseados, en este c números se crearon de determinada forma, la cual puede cambiar dependiendo las necesidades de cada perso que se necesite mostrar letras o caracteres distintos.
PROGRAMA EN C
#include
#include 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}}; int main (void){
//Se declara la matriz de los numeros
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++; if (contador==10) contador=0;
//Incrementar en 1 el contador //Si el contador llega a 10 //que vuelva a ser 0
} }
DETALLES DEL PROGRAMA
#include #include 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 mom declararla le añadimos la longitud de las filas y las columnas dentro de los corchetes, como se puede ver en el 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 representa, por ejemplo el numero 3 se encuentra en la 3ra fila, esto nos ayudara al momento de realizar el có
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 co empezara la primera columna, posteriormente se desplazara el bit, pa ra hacer el barrido.
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 veces que se muestra un numero completo y esto es el tiempo que dura visualizándose el numero en la matriz. 25 en este ciclo for puede cambiarse para obtener un conteo más rápido o más lento según 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 repres columnas de la matriz, como se puede ver, este for trabaja en conjunto con el otro, cuando este termina en el incrementa la variable "j" en uno más, por lo tanto este for se ejecutara completo el número de veces que el fo 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 cuale corresponden a la filas y a las columnas, se aprecia que la "i" del ciclo está cambiando dentro del for interior, representa las columnas mientras que la variable contador pe rmanece fija durante los dos ciclos for, esta repre
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 inicializa para comenzar de nuevo.
contador++; El contador incrementa, para asignar otro número 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 inicializa de nuevo asignándole un cero.
Viendo la carencia de información incompleta sobre el desarrollo de Cartel de leds, también llamado “publik”, me vi a publicar este Mini-Tutorial y espero que sea de gran ayuda para todos los lectores. Como es de suponer, el desarrollo, construcción y programación de un cartel de este tipo es una tarea bastante compleja para un principiante, pero eso no debe ser un obstáculo para nosotros ya que aquí, te guiare paso a paso, hasta que culmines tu proyecto. (CODIGO FUENTE,SIMULACION,PCBs etc)
Nuestro cartel será monocromático, utilizando LEDs de color rojo únicamente. Las dimensiones de la matriz utilizada serán de 7 filas por 32 columnas, lo que permite escribir unas 8 letras de 8 “pixeles” de altura. A pesar de no ser demasiado grande, ya habrás sacado la cuenta de que se necesitan 225 LEDs para armar el cartel. ¿Funcionamiento sencilla de una matriz de leds? La pantalla está formada por una serie de filas y columnas. La intersección entre ambas contiene un LED. Para que este encienda, tiene que recibir simultáneamente un “0” en la fila, y un “1” en la columna. Cuando se dan estas condiciones, la electrónica de la placa se encarga del encendido. La forma de generar un mensaje sobre el display es relativamente sencilla. 1) Apagar todas las filas. 2) Escribir los valores correspondientes a la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer digito binario colocado corresponde al último LED de la fila, y el ultimo en poner al de la primer columna. 3) Encenderla primer fila, esperar un tiempo, y volver a apagarla. 4) Repetir los pasos para las filas 2 a 7.
El secreto del Multiplexado Existen muchas estrategias de multiplexación según el protocolo de comunicación empleado, que puede combinarlas para alcanzar el uso más eficiente. La multiplexación es una técnica que permite aprovechar unas pocas líneas de datos para diferentes tareas, cambiando la función que cumplen a lo largo del tiempo. El PIC se encarga de generar los pulsos de CLOCK y DATOs (pines 17 y 18) que son enviados a la “placa de video” que es la que tiene los 74LS164N que forman un registro de desplazamiento.
Registro de desplazamiento 74lc164N