Hemos recibido varias consultas sobre carteles construidos mediante una matriz de LEDs, asi que hoy comenzamos la construcción de una matriz que nos servirá para pasar mensajes publicitarios, decorar nuestra habitación, ordenador o lo que se nos ocurra. ¡Manos a la obra!
Un “cartel de LEDs” , llamado “Publik” en algunos países, es un recurso utilizado muy frecuentemente con fines publicitarios o informativos. Básicamente, consiste en una matriz de pixeles (si, como la pantalla de tu ordenador), generalmente de un solo color (rojos), aunque con el descenso de los precios de os LEDs individuales o en paneles, es cada vez más frecuentes ver carteles “bicolores” o incluso multicolores, aprovechando la ventaja del los LEDs RGB, que pueden mostrar cualquier color.
Como es de suponer, el desarrollo, construcción y programación de un cartel e este tipo es una tarea bastante compleja para un principiante, pero desde NeoTeo te animamos a hacerlo, ya que te guiaremos paso a paso a lo largo de todo el proceso. Y seguramente aprenderás un montón de trucos al hacerlo.
Por motivos de simplificar el circuito y de no gastar demasiado dinero, nuestro cartel será monocromático, utilizando LEDs de color rojo únicamente. Las dimensiones de la matriz utilizada serán de 7 filas por 80 columnas, lo que permite escribir unas 14 o 16 letras de 7 “pixeles” de altura. A pesar de no ser demasiado grande, ya habrás sacado la cuenta de que se necesitan 560 LEDs para armar el cartel.
A lo largo de este tutorial hemos visto que encender un LED desde un microcontrolador. Y de hecho es algo muy simple: conectamos el ánodo del LED al PIC, el cátodo a una resistencia y el extremo de la resistencia a +V. Cuando el pin del microcontrolador está en “1”, el LED enciende. Este esquema, lamentablemente, no sirve para la construcción de un cartel matricial como este, ya que al disponer de 560 LEDs necesitaríamos tener un microcontrolador que tenga como mínimo ese número de pines de salida y por supuesto, no existe.
El secreto está en el multiplexado. Es decir, utilizar unos pocos pines de E/S del microcontrolador para manejar una serie de circuitos integrados que se encarguen de excitar los LEDs. Hay varias maneras, y muchos modelos diferentes de circuitos para hacer esto.
Pueden usarse un tipo de integrado digital llamado “LATCH”, que básicamente es una memoria en la que escribimos un valor, y lo mantiene en sus salidas hasta que nosotros lo indiquemos. De esta manera, usando varios latches podríamos encender los LEDs por turnos, rápidamente para que no se note el parpadeo, y de esa manera formar una palabra en el cartel.
Otra forma es utilizar un registro de desplazamiento. Y de hecho, es de esta forma cómo vamos a diseñar nuestro cartel. Un registro de desplazamiento funciona de la misma manera en que funciona una cola de gente que espera para entrar en un cine. Por un extremo de la cola van ingresando las personas que llegan, y por el otro van saliendo de la fila. En un registro de desplazamiento, en lugar de personas tenemos “0” y “1”. Lo bueno de esto es que para “meter” datos (“0”s y “1”s) en el registro de desplazamiento solo hacen falta tres pines del microcontrolador, independientemente de lo largo que sea.
Estos pines se encargan de tres tareas: Uno de ellos, al que denominaremos “DATA” es el encargado de decirle al registro de desplazamiento que lo que introduciremos es un “0” o un “1”. El segundo se encarga de avisar al registro que el dato ya está listo para ser ingresado, y lo llamaremos “CLOCK”. Y el ultimo, que no es indispensable, es el “RESET”, que se encarga de “vaciar” la fila escribiendo “0”s en todas las salidas del registro.
En este proyecto utilizaremos un modelo de circuito integrado conocido como 74HC164N, que es un registro de desplazamiento de 8 bits. Es decir, con el se puede armar una “fila” de 8 “personas”. Como nuestro cartel tiene 80 columnas, necesitaremos utilizar 10 de estos integrados, uno a continuación del otro. En NeoTeo ya hemos hablado sobre él, así que sería interesante que leas el artículo correspondiente si quieres saber más sobre su funcionamiento.
En la figura siguiente puedes ver la función de cada pin de este integrado, y la manera de conectar uno a continuación del otro para obtener un registro de desplazamiento de cualquier longitud.
Bien, con el esquema explicado podemos encender los LEDs que queramos de una fila de 80 bits de largo. Si en el registro de desplazamiento introducimos “11111…111”, los 80 LEDs estarán encendidos. Si queremos encender uno por medio, escribiremos “10101…01”. Por supuesto, cuando lleguemos a la parte de la programación veremos cómo se ingresan uno a uno los “0” y “1” en el registro.
Ahora bien: nuestro cartel tiene 7 filas, y lo explicado solo sirve para manejar una de ellas ¿debemos utilizar un registro de desplazamiento para cada una de las filas restantes? Afortunadamente, la respuesta es no. Si bien podríamos utilizar 7 registros de este tipo, la cantidad de circuitos integrados necesarios (56 de ellos), la complejidad del circuito impreso y el costo implicado lo hacen poco aconsejable. Nosotros aprovecharemos un “defecto” del ojo humano, que mantiene la imagen vista durante unos 20 o 30 milisegundos, para “dibujar” una fila a la vez, pero muy rápidamente, de forma que todo el cartel parezca estar encendido a la vez. Si, como en la tele o el cine.
Cuando comenzamos el articulo mencionábamos que para manejar cada LED serian necesarios 560 pines de entrada/salida. Con el esquema propuesto solo necesitamos 7 para seleccionar la fila a escribir, y tres para manejar el registro de desplazamiento. Es decir, un PIC de 3 u$s y 18 pines serviría perfectamente para realizar el proyecto. Y es lo que usaremos, un 16F628A.
¿Cómo funciona la matriz?
Como dijimos antes, 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, si nos atenemos al siguiente algoritmo:
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.
Los tiempos de demora que utilizamos en el programa de ejemplo permiten una visualización correcta, sin molestos parpadeos y con los LEDS brillantes. Hay que tener en cuenta que si utilizamos tiempos mayores para el encendido de cada fila, el brillo de los LEDS será mayor, pero también aumentara el parpadeo. No utilizamos vectores ni otras alternativas que hubieran servido para crear un código más compacto, buscando la claridad del programa, para que pueda servir como base a otros más completos/complejos.
Un punto a tener en cuenta es el brillo de los LEDs. Un LED, utilizado en aplicaciones “normales”, se alimenta con unos 3V y requiere unos 15mA (varia ligeramente de un modelo a otro9 para brillar con una buena intensidad. En nuestro caso, a pesar de que veremos las 7 filas encendidas al mismo tiempo, cada LED solo estará encendido la séptima parte del tiempo, por lo que su brillo será siete veces inferior al normal, y nuestro cartel apenas será visible.
Afortunadamente eso tiene solución: dado que los tiempos que permanecerá encendido cada LED no superara unos pocos milisegundos, no se dañaran si hacemos circular una corriente mayor a la nominal, con brillará mucho más intensamente, dando como resultado un cartel perfectamente visible.
Respecto de los LEDs, podremos utilizar LEDs discretos (y soldar 1120 terminales) o comprar “paneles” de 7×5 LEDs que tienen unos 14 o 16 terminales (según el modelo), estando ya interconectados en forma de matriz.
Hemos dividido este proyecto en varias partes, ya que su complejidad impide explicarlo en un solo artículo, así que en la próxima entrega diseñaremos la totalidad del hardware necesario, y en la siguiente nos dedicaremos a programar nuestro cartel. ¡Hasta la próxima!