in

TUTORIAL: Programación de Microcontroladores – Parte 9

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!

Reportar

¿Qué te pareció?

Escrito por Ariel Palazzesi

41 Comments

Leave a Reply
  1. excelente… muy bueno ke se haga un toturial de este tema paso a paso, pues somos muchos los ke keremos hacer este publik, y entenderlo realmente

  2. Excelente tutorial para los principiantes como yo, felicidades y gracias por elaborar este material y ponerlo al alcande de nuestras manos.

  3. Buenisimo este tutorial, es una gran herrameinta para todos a quellos que queremos aprender sobre este excelente tema, espero continuen colaborandonos en este proyecto…

  4. Muy bueno la Info, excelente, al menos ahora tengo la idea de còmo funciona, pero no estarìa mal que publiquen la otra parte que falta. Saludos.

  5. muy bueno ese tutorial seria excelente si conlocaran mas informacion acerca de los microcontroladores ya que esta area es muy extensa y provechosa, y sobre todo la programacion es fundamental, un tutorial de programacion no caeria nada mal para muchos principiantes.

  6. busque mucho por internet……………pero nada comparado con este artitucol me parece excelenticimo muchos simplemente comentan superficialmente espero que sepamos aprovechar muy bien este tipo de informacion por mi parte seguire con el desarrolo de mi proyecto de leds gracias a este articulo…cuando lo termine muy seguramente tambien aportare con lo aprendido

  7. Amigos, dijeron que pondrían la otra parte pero hasta ahora nada, parece que lo hacen con la sola intención que volvamos contínuamente a su página para generar tráfico y ellos puedan vender publicidad. 🙁

  8. Hola Jorge! Estamos haciendo los PCB y dibujando los esquemas de la segunda parte. Si vienes siguiendo la serie de tutoriales sobre microcontroladores habras notado que periodicamente publicamos notas nuevas. Te pedimos disculpas por la demora, y la semana proxima tendras la segunda parte de esta nota. Saludos!

  9. Genial este tutorial nos ayuda a entender como funciona este tablero electronico, seria aun mas genial si aumentaran la imformacion, sobre todo la parte de programacion de los microcontroladores. salu2. BYE… 😀

  10. Nunca pense encontrar algo asi exelente articulo gracias por publicarlo. me gustaria saber cuando sale la proxima publicacion saludos que esten bien.

  11. hola me gustaria que me colaboraran con el diagrama logico de un contador asincrono binario asendente. por que en el circuito es a. binario b. por que es ascendente c. que tipo de flip-flop se utiliza d. que tipo de flip-flop se utiliza al final. y explicar las generalidades del bit. – necesito hacer este circuito y es un problema se necesita haer un control de calidad de huevos que estan clasificados en ABC Y D cada uno despues de ser clasificado es enviado por una banda transportadora, nos piden el diseño inicial de diagrama de bloques que permita accionar las 4 bandas, ubicar un contador al final de cada banda y ademas que sume las cantidades transportadas.

  12. esta bueno el tutorial ya que lo estaba necesitando , no encontre algo tan facil como lo explican ud. en la web espero la 2 da parte Alberto -Villa María-Córdoba-Argentina

  13. hola a todos que tal espero que esten bien mi gran pregunta es como puedo introducir daos a la memoria EEPROM como por ejemplo mi nombare como hago qu aparesca en la matriz de leds por o que para esto se necesita una memoria eeprom pero no se como introducir datos en ella me lo harian saber por fa se los agradecere mucho
    !!!!!!!!!!poooor faaaaaaaa!!!!!!!!!!!!!!!!

  14. este proyecto esta interesante…. umum tengo una duda quiero controlar digamos "n" caracteres, sopongo que el pic no soportara tendra su limite de caracteres ,,, si me ocure una idea, se puede controlar por ordenador como de puertos serial y paralelo,,, como puedo hacer,,, hacer un software con visual basic.

  15. MUCHAS GRACIAS DE VERDAD…MUY BUENO..LES AGRADECERIA MUCHÍSIMO SI PUDIERAN ENVIARME MAS INFORMACIÓN A MI CORREO..CLARO SI NO ES MUCHA MOLESTIA..SOY NUEVO EN ESTE MUNDO DE LA ELECTRÓNICA…DESDE YA LES AGRADEZCO…(MI MSN ES fabyto69@hotmail.com)

  16. Sólo tengo mis dudas sobre la longitud del registro, Uds. dicen de cualquier longitud, pero la línea de clock, por no mencionar la línea de reset, cuanta corriente necesita y cuanta puede entregar ese pin del pic. Experimenté con el puerto B alimentando 5 registros de desplazamiento paralelo y el pic se me estropeó luego de unas horas.

  17. todos dicen muy bueno pero no veo donde este el final de este tutorial. necesito saber como programarlo, un ejemplo. ayuda que me estoy volviendo loco tratando de hacer funcionar esto.

  18. buen dia mi nombre es manuel .v
    . me agrada el tutorial de matriz de led quiero decirles que esta muy bueno, pero me gustaria saber como programar cualquier otra informacion u o texto en el cartel y con que programa se podria hacer

    agradesco la atencion que me puedan prestar

    att manuel.v

  19. buen dia disculpen quiero preguntarles porque no dan repuestas ala preguntas que hacemos. se estancaron en una informacion y no dijeron

    mas nada
    manuel

  20. hey estoy trabajando en una matriz de 8×32 con el pic16f628a, el 74ls164 son 4 matrises de 8×8 nesesito terminar para el jueves de esta semana y tengo vario tiempo buscando informacion y hasta hoy pude ayar algo q me sirva de verdad ya comprendi un poco como funciona y cree un programa multiplexado manualmente con un pic16f877a y sin los registros de desplasamiento PERO NO ME ALCANSAN LOS PINES PARA LAS CUATRO MATRISES. nesesito un par de ejemplos de como configurarlos en microcode porque intente usar como base el pregrama de la matriz que dice "FELIZ NAVIDAS Y PROSPERO AÑO NUEVO 2011" pero al compilarlo en proton me da un ERROR:USB KEY NOT FOUND! y en microcode intente sustituir los comandos pero no me resuto porfavor alguien que me pueda ayudar se lo agradeseria mucho.

  21. hey estoy trabajando en una matriz de 8×32 con el pic16f628a, el 74ls164 son 4 matrises de 8×8 nesesito terminar para el jueves de esta semana y tengo vario tiempo buscando informacion y hasta hoy pude ayar algo q me sirva de verdad ya comprendi un poco como funciona y cree un programa multiplexado manualmente con un pic16f877a y sin los registros de desplasamiento PERO NO ME ALCANSAN LOS PINES PARA LAS CUATRO MATRISES. nesesito un par de ejemplos de como configurarlos en microcode porque intente usar como base el pregrama de la matriz que dice "FELIZ NAVIDAS Y PROSPERO AÑO NUEVO 2011" pero al compilarlo en proton me da un ERROR:USB KEY NOT FOUND! y en microcode intente sustituir los comandos pero no me resuto porfavor alguien que me pueda ayudar se lo agradeseria mucho.

Responder a German Cancelar la respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Sistema de Asistencia al Sueño de Panasonic

Construye tu propia consola