Sunteți pe pagina 1din 11

Matriz de diodos LEDs de 7x32 pixel

LINKS: [Esquema elctrico] [PCB1] [PCB2] [PCB3] [HEX] [PDF]



Display de diodos LED.

INTRODUCCIN:
En este documento veremos como disear
y construir un display de diodos leds, que
nos servir de pantalla para exhibir textos o
imgenes, fijas o animadas. Los usos son
varios, desde un sofisticado modding en
nuestro gabinete hasta su empleo como
medio para exhibir mensajes o publicidad.
Por supuesto, sus dimensiones pueden
resultar insuficientes para algunos usos,
pero es fcilmente expandible.
En lo que respecta a las entradas y salidas
(E/S), cada microcontrolador, al igual que
cualquier computadora, dispone de un
numero finito de ellas, y en general, se
trata de un numero no demasiado elevado.
Por ejemplo, un PIC16F876A de 28 pines dispone de 22 dedicados a funciones de E/S,
y su hermano mayor, el PIC16F877A que cuenta con un total de 40 pines dedica 33 a
estos menesteres. Habitualmente, con un numero as de pines de control es posible
resolver correctamente casi cualquier situacin que se nos plantee, ya que
normalmente en el diseo de un circuito de control basta con leer unos pocos
pulsadores o sensores, y luego de realizar internamente algn proceso con esas
seales, se actan (o no) unas pocas cargas conectadas a sus salidas, generalmente
mediante reles o interfaces de algn tipo.
Sin embargo, hay caso concretos en que ningn PIC (o microcontrolador de otras
familias) puede aportar en numero suficientes de E/S que permitan controlar todas las
cargas conectadas a el, y se deben recurrir a circuitos de apoyo comandados mediante
seales de control y utilizando un bus de datos. Uno de esos casos es el que nos ocupa
en este articulo.
NDICE:
> Introduccin
> Houston, tenemos un problema
> Multiplexado
> Tres placas
> El cable plano
> Lista de componentes
> Programacin
> El registro de desplazamiento
> Cdigo fuente
> Conexin con la PC
> El 74LS164N
> Ideas, ideas y ms ideas

> Houston, tenemos un problema
Esta claro que si queremos formar una imagen mediante pixeles compuestos por LEDs
individuales, harn falta un numero de lneas de control mucho mayor que las
disponibles en cualquier microcontrolador.
Nuestra pantalla ser semejante a esos displays
que seguramente habrn visto en algn comercio o
local de servicios, en los que un texto realiza un
scroll de derecha a izquierda, a una velocidad que
permite la ilusin de un movimiento suave y
continuo. Estas matrices de leds generalmente
estn conformadas por un cierto nmero de filas y
de columnas.
Para permitir un texto legible, que represente
claramente los caracteres correspondientes a las
letras maysculas y minsculas hacen falta unas 7
filas de alto, y si queremos que el display muestre
unos 10 o 12 caracteres simultneamente,
necesitaremos unas 100 columnas.
Si multiplicamos el numero de filas por las
columnas, tendremos el numero de LEDs que hay
presente en un display de este tipo. Con los
valores que mencionbamos recin, vemos que se
necesitan 700 LEDs para un display no muy
complejo, y de un solo color.
Si nos limitramos a los medios tradicionales
para encender o apagar cada LED del display, es
decir, conectando cada uno de ellos a un pin de
salida del PIC y encenderlos mediante 0 o 1
publicados en ese bit del puerto, nos haran falta
un PIC con al menos 700 pines, algo que debemos
descartar de plano por que no existe.
Una solucin posible seria utilizar varios PICs
conectados entre si, de manera que cada uno
maneje por ejemplo dos o tres columnas, y
mediante algn protocolo se enven mensajes
entre ellos para mostrar la parte del texto que le
corresponde. Esta alternativa tiene ms
posibilidades de xito, pero cuenta con la contra de
una programacin compleja y un costo elevado, ya
que se necesitan unos 3 PICs por carcter, lo que
econmicamente no es viable.
La respuesta a este problema viene de la mano de
la multiplexacion, el empleo de buses y circuitos de
apoyo que transformen datos enviados en forma
serial a una representacin en paralelo.


Detalle del 74LS164N, parte del
registro de desplazamiento.
[ Volver al NDICE ]

> Multiplexado
El termino multiplexar hace referencia a una tcnica que permite aprovechar unas
pocas lneas de datos para diferentes tareas, cambiando la funcin que cumplen a lo
largo del tiempo. Un ejemplo podra ser un sistema de control de temperaturas de
varios ambientes. Dado que la velocidad no es crucial, ya que en trminos de
milisegundos (o microsegundos) la temperatura casi no vara debido a la inercia
trmica, se puede utilizar un nico circuito que lea alternativamente cada sensor de
temperatura. Esto evita la duplicacin de circuitos y permite resolver el problema con
una fraccin de los recursos (pines I/O) disponibles. En el caso de este proyecto, la
pantalla que construiremos esta formada por una matriz de 224 diodos LEDs
distribuidos una matriz de 32 columnas por 7 filas. Estos valores se eligieron por ser
casi los mnimos para lograr un display til, ya que un carcter para ser legible
necesita tener una altura de 5 o 7 pxeles, y un ancho como mnimo de 5. Con estas
dimensiones, lograremos ubicar un texto de unos 5 o 6 caracteres, que opcionalmente
puede irse desplazando por la matriz.
[ Volver al NDICE ]
> Tres placas

El proyecto completo consta de tres placas de circuito impreso.

Por razones
de
comodidad, el
proyecto se
distribuyo
sobre tres
placas de
circuito
impreso
diferentes. La
primera de
ellas,
encargada de
la
alimentacin,
control lgico
y la
comunicacin
con la PC es
la que incluye
el PIC,
corazn del
proyecto.
Adems, en
ella se
encuentra la
etapa de
alimentacin,
excepto el
transformado
r, llave y
fusible que
debern
alojarse en el
gabinete que
contenga esta
placa.
La alimentacin esta basada en un regulador de voltaje LM7805, capaz de entregar
500mA sin disipador, y hasta 1A si lo refrigeramos convenientemente. Si sacamos
algunas cuentas, veremos que gracias al multiplexado nunca debera haber ms de
una fila encendida al mismo tiempo, que en el caso ms desfavorable tendra 32 leds
encendidos. Cada LED consume unos 15 miliamperes (5V / 330 ohms = 0.015A), por
lo que el consumo de la pantalla es de 0.015 x 32 = 480mA, si esto sumamos el
consumo del resto de la electrnica, el consumo total ronda los 600mA. El LM7805 de
mi prototipo apenas se entibia sin utilizar disipador.
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 conversores serie-paralelo
74LS167N. Tambin tiene la posibilidad de conectarse a una PC va RS-232 (ver mas
adelante) y controla los drivers que proveen la corriente que alimenta cada fila del
display. Como la corriente es muy elevada para ser entregada directamente por el PIC,
se incluyeron 7 transistores BC327 para esta tarea.
Se utilizo un cristal de 4MHz y dos capacitores de 22 nF para generar los pulsos de
reloj del micro en lugar del reloj interno, para lograr una mejor estabilidad con la
temperatura, ya que en caso se utilizar la conexin RS-232 la velocidad es un tema
delicado.
La segunda de las placas, que se conecta mediante un cable plano a la primera, es la
encargada de controlar el display. Recoge los pulsos de CLOCK y los datos
provenientes de la placa controladora va el cable plano, y energiza las columnas que
correspondan. Los 74LS164N se conectan a cada columna a travs de una resistencia
de 330 o 390 ohms. Si se quiere aumenta el brillo de los LEDS, pueden reemplazarse
por resistencias de 220 ohms (o incluso menores), pero asegurndose que el tiempo
de encendido de los leds no pase de unos milisegundos por vez para evitar su
envejecimiento prematuro. Tambin hay que prestar atencin al consumo de corriente
total, y posiblemente cambiar los transistores BC327 por BC640, capaces de manejar
corrientes mas elevadas.
Por ultimo, la placa mas sencilla, pero a la vez mas laboriosa desde el punto de vista
constructivo es la pantalla propiamente dicha, ya que esta formada por 224 diodos
LEDs. Esta placa recibe las seales de control provenientes de la placa de video
mediante pines de bronce que le otorgan soporte mecnico y elctrico
simultneamente, y mediante 7 pequeos cables que son los encargados de
seleccionar la fila que vamos a iluminar.

[ Volver al NDICE ]

> El cable plano
Para enviar los datos desde la placa de control a la placa de video se utilizo un cable
plano de 10 vas, con fichas en los extremos muy parecidas a las empleadas para
conectar unidades de CD-ROM dentro de la PC, pero ms pequeas. Hay que tener
cuidado que al armar el cable las fichas no queden invertidas, y las seales de un
extremo terminen siendo un espejo de las aplicadas en el otro.
Dado que los conductores de este cable son muy delgados, para evitar problemas se
utilizaron dos cables de mas seccin para llevar los 5V de alimentacin hasta esta
placa. Hay que tener en cuenta de conectarlos con la polaridad correcta para evitar
destruir algn componente.
[ Volver al NDICE ]
> Lista de componentes
1 porta fusible y fusible de 1 A.
1 transformador de 220V a 6V, 1 A.
1 puente de diodos de 1 A
1 regulador LM7805
2 capacitores cermicos de 100 nF
2 capacitores cermicos de 22 pF
1 capacitor electroltico de 220uF/16V
1 dip-switch de 4 interruptores en formato DIL
1 diodo 1N4148
1 transistor BC547B
7 transistores BC327
1 cristal de 4 MHz.
1 resistencia de 33K
1 resistencia de 2K2
4 resistencias de 10K
7 resistencias de 1K5
32 resistencias de 330 ohms
224 leds rojos de 3mm
1 microcontrolador PIC 16F628A 4 MHz.
4 integrados 74LS164N
20 cm. de cable plano de 10 vas y dos fichas
3 borneras de 2 contactos, para circuito impreso
Varios: zcalos para los integrados, pines de bronce, circuito
impreso virgen de una sola cara.


Placa controladora del display con los
componentes montados.
[ Volver al NDICE ]

> Programacin
Si bien la construccin de este proyecto es un poco mas compleja que otros encarados
antes, la parte del software es la que seguramente nos costara mas trabajo, pero los
resultados bien valen la pena.
Hemos adjuntado el listado correspondiente al programa que genera el texto POWER
para que sirva de ejemplo, pero la idea es que cada uno realice su propio software
utilizando como punto de partida las ideas y datos que expondremos a continuacin.
Como dijimos antes, la pantalla esta formada por una serie de filas y columnas. La
interseccin entre ambas contiene un LED. Para que este encienda, tiene que recibir
simultneamente un 0 en la fila, y un 0 en la columna. Cuando se dan estas
condiciones, la electrnica de la placa de video 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, escribiendo un 1 en PORTB.0 y PORTB.2 al 7
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 ultimo LED de la fila, y el ultimo en poner al de la primer columna.
3) Poner un 0 en la primer fila (PORTB.0 = 0), esperar un tiempo, y volver a
apagarla con PORTB.0 = 1.
4) Repetir los pasos para las filas 2 a 7.
Los tiempos de demora que utilizamos en el programa de ejemplo permiten una
visualizacin 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 tambin aumentara el parpadeo. No utilizamos vectores ni
otras alternativas que hubieran servido para crear un cdigo mas compacto, buscando
la claridad del programa, para que pueda servir como base a otros mas
completos/complejos.

[ Volver al NDICE ]

> El registro de desplazamiento
Vamos a detenernos un momento para explicar como se introducen los datos en el
registro de desplazamiento. Lo primero a tener en cuenta es que los datos deben
entrar de izquierda a derecha, es decir, el primer dato que introduzcamos sera
empujado por los que vienen detrs hasta llegar a la ultima columna. En segundo
lugar, hay que saber (recomendamos la lectura de la hoja de datos del 74LS164N) que
el dato ingresa al registro en el momento que se produce la transicin de 0 a 1 del
pulso de CLOCK, por lo que se debern seguir los siguientes pasos para ingresar cada
uno de los 32 valores correspondientes a cada fila:
1) Fijar el valor del dato a escribir (si DATA es 1, hacer PORTA.1 = 1, si no PORTA.1 =
0)
2) Esperar un par de microsegundos (WaitUs 2)
3) Poner la lnea de CLOCK en estado bajo (PORTA.0 = 0).
4) Esperar un par de microsegundos (WaitUs 2)
5) Poner la lnea de CLOCK en estado alto (PORTA.0 = 1). En este punto el dato entra
efectivamente en el registro de desplazamiento.
6) Esperar un par de microsegundos (WaitUs 2)
7) Fin
Los tiempos de demora de dos microsegundos funcionan, pero se puede experimentar
un poco con ellos, dado que segn la hoja de datos la frecuencia mxima de trabajo
del 74LS164N es de 25MHz., por lo que demoras menores deberan trabajar bien.
Con estos tiempos, la escritura de los 32 bits de una lnea demora unos 350
microsegundos, tiempo ms que aceptable.
En el cdigo fuente se puede ver que por cada lnea a escribir en la pantalla se utiliza
un bloque como el siguiente
aux = %0010001011111001
Gosub escribo
aux = %0100011100000010
Gosub escribo
Fila1 = 0
WaitMs 2
Fila1 = 1
Goto loop
End
Bsicamente, se llama dos veces a la subrutina escribo que comentaremos en un
momento, con 16 bits en la variable aux.
Luego se enciende la fila escribiendo un 0 en el pin apropiado, se esperan un par de
milisegundos, se apaga escribiendo un 1, y se pasa a la fila siguiente.
La subrutina escribo se encarga de procesar el contenido de la variable aux, bit por
bit, viendo si son 0o 1 y escribiendo el dato correspondiente en el registro de
desplazamiento. La instruccin aux = ShiftLeft(aux, 1) se encarga de rotar los 16 bits
de la variable a la izquierda, para tomar el bit siguiente.

Placa de LEDs lista, y soldada al registro de desplazamiento.
[ Volver al NDICE ]


> Cdigo fuente
A continuacin, el cdigo fuente de ejemplo, en BASIC.
'----------------------------
'Programa de ejemplo display 7x32
'Texto fijo: POWER
'
'PIC: 16F628A - 4Mhz XTAL, SIN RESET
'
'----- CONFIGURO PUERTOS-----
PORTA = 0
CMCON = 7 'Configuro PORTA como Digital I/O

'Configuro el portA:
TRISA.0 = 0 'Salida CLOCK
TRISA.1 = 0 'Salida DATA
TRISA.2 = 1 'Entrada Dip 0
TRISA.3 = 1 'Entrada Dip 1
TRISA.4 = 1 'Entrada Dip 2
TRISA.5 = 1 'Entrada Dip 3
'Configuro el portB:
TRISB.0 = 0 'Salida (Fila 1)
TRISB.1 = 1 'Entrada RS-232
TRISB.2 = 0 'Salida (Fila 2)
TRISB.3 = 0 'Salida (Fila 3)
TRISB.4 = 0 'Salida (Fila 4)
TRISB.5 = 0 'Salida (Fila 5)
TRISB.6 = 0 'Salida (Fila 6)
TRISB.7 = 0 'Salida (Fila 7)
'Simbolos
Symbol clock = PORTA.0
Symbol data = PORTA.1
Symbol fila1 = PORTB.0
Symbol fila2 = PORTB.2
Symbol fila3 = PORTB.3
Symbol fila4 = PORTB.4
Symbol fila5 = PORTB.5
Symbol fila6 = PORTB.6
Symbol fila7 = PORTB.7
clock = 0
data = 0
'Declaracion de variables
Dim col As Byte
Dim aux As Word
PORTB = 255 'Apago todas las filas antes de comenzar
'---------BUCLE PRINCIPAL------------
Loop:
aux = %0001111011111010
Gosub escribo
aux = %0010011100011110
Gosub escribo
fila1 = 0
WaitMs 2
fila1 = 1

aux = %0010001000001010
Gosub escribo
aux = %0010100010100010
Gosub escribo
fila2 = 0
WaitMs 2
fila2 = 1
aux = %0010001000001010
Gosub escribo
aux = %0010100010100010
Gosub escribo
fila3 = 0
WaitMs 2
fila3 = 1

aux = %0001111000111010
Gosub escribo
aux = %0010100010011110
Gosub escribo
fila4 = 0
WaitMs 2
fila4 = 1
aux = %0000101000001010
Gosub escribo
aux = %1010100010000010
Gosub escribo
fila5 = 0
WaitMs 2
fila5 = 1
aux = %0001001000001001
Gosub escribo
aux = %1100100010000010
Gosub escribo
fila6 = 0
WaitMs 2
fila6 = 1
aux = %0010001011111001
Gosub escribo
aux = %0100011100000010
Gosub escribo
fila7 = 0
WaitMs 2
fila7 = 1
Goto loop
End
'Subrutina que llena el registro de dezplazamiento
escribo:
For col = 1 To 16
If aux.15 = 0 Then
data = 1
WaitUs 2
clock = 0
WaitUs 2
clock = 1
WaitUs 2
Else
data = 0
WaitUs 2
clock = 0
WaitUs 2
clock = 1
WaitUs 2
Endif
aux = ShiftLeft(aux, 1)
Next col
Return
[ Volver al NDICE ]

> Conexin con la PC
El PIC16F628A dispone de un puerto RS-232 incorporado, con capacidad para recibir y
transmitir datos, pero maneja solo niveles TTL, por lo que se incluyeron un par de
resistencias, un diodo y un transistor para adecuar el nivel de la seal proveniente del
puerto de la computadora a valores digeribles por el PIC. La funcin de los 4 dip-
switches conectados a los pines 1,2,3 y 4 tienen como objetivo permitir asignar un
numero del 0 al 15 (en binario) a cada placa. Esto permitira conectar 16 placas iguales
(cada cual con su pantalla de 7x32), donde cada una representara el dato que esta
dirigido a ella, para lograr un display total de 7x512 pixeles (aunque habra que
soldar.3584 LEDS!)
En caso de utilizar la interfaz con la PC, hay que construir un cable de conexin, un
programa en Visual Basic u otro lenguaje que enve los datos por el puerto serie, en
tramas compuestas por ejemplo por un byte de direccin (a que placa de las 16
corresponde el dato), y 4 bytes con el mensaje en si. Desde el lado del PIC, el software
debera incluir la capacidad de discriminar los mensajes enviados a el (en funcin de la
posicin de los dip-switches) y representar los caracteres en la matriz.

[ Volver al NDICE ]

> El 74LS164N
Este interesante circuito integrado de la familia TTL viene en diferentes sabores, de
acuerdo a la velocidad, temperatura de operacin, voltajes y corrientes soportadas,
etc. Dichas caractersticas dependen de las letras entre el 74 y el 164. En lo que a
este proyecto respecta, cualquiera va a funcionar, de hecho, para construir mi
prototipo use cuatro integrados que rescate de mi cementerio de plaquetas. Incluso,
use dos 74LS164N y dos 74HC164J/B, y funcionaron perfectamente.
Desde el punto de vista tcnico, se trata de un registro de desplazamiento de 8 bits.
Esto significa que se comporta como un conversor serie-paralelo, en el que se
introducen pulsos de reloj por un pin y datos en serie por otro, y las 8 salidas van
toman los estados indicados por el tren de datos de la entrada. Dispone de un pin (el
9) que realiza la funcin de poner en cero todas las salidas (clear) que a pesar de ser
una interesante y til caracterstica, en el circuito que presentamos hoy no la
implementamos, ya que el PIC 16F628A se nos estaba quedando sin pines libres, y
preferimos la posibilidad de conectar el proyecto a una PC va RS-232, y cuando
queramos limpiar el display le imprimiremos espacios en blanco.
Los pines 1 y 2 son la entrada de datos. Internamente una compuerta AND realiza el
producto lgico de los valores de ambas entradas, por lo que se opto por unirlas
elctricamente entre si para que se comporten como una sola. Los pulsos de clock
entran por el pin 8, y los pines 3,4,5,6 ,10,11,12 y 13 son (en ese orden) las salidas.
Cada una de estas salidas alimentara una de las columnas del display, y la ultima de
ellas (el pin13) se encargara tambin de transferir el dato al integrado siguiente, de
manera que con cuatro de ellos puestos en serie logramos un registro de
desplazamiento de 32 bits, justo uno para cada columna del display. Si se quiere, es
posible construir un display mas largo simplemente agregando etapas de 8 columnas,
cada una con su 74LS164N.

[ Volver al NDICE ]

> Ideas, ideas y ms ideas
Por supuesto, es imposible incluir aqu la explicacin de todo lo que se puede hacer
utilizando como punto de partida este proyecto, pero descartamos que los lectores
modificaran el software (y por que no el hard!) para lograr atractivas marquesinas.
Lo ms obvio para atacar es la comunicacin con la PC. Esto permite una gran
flexibilidad a la hora de escribir nuevos mensajes, ya que si no hay que reprogramar el
PIC cada vez que queremos mostrar un mensaje nuevo. Por supuesto, esto implica
crear tablas con la definicin de cada carcter, recibir y analizar los mensajes que
entren por el puerto RS-232, y por ultimo mostrarlos en la pantalla. Un verdadero
desafo.
Algo ms sencillo pero igualmente til es el implementar rutinas de scroll. Si bien el
programa para ello no es trivial, se puede encarar cargando en una matriz los 0 y 1
que representan la totalidad del mensaje a mostrar, y luego ir desplazndose por ella a
medida que se muestran los datos en la pantalla.
Un scroll vertical se puede hacer fcilmente rotando los datos de cada fila, el de la 1 a
la 2, la 2 a la 3..y la 7 a la 1.
En lo particular, cuanto disponga de un rato de tiempo, voy a utilizar este display como
pantalla de un reloj/termmetro. Har una nueva placa para el PIC, cambiando los dip-
switchs por pulsadores para ponerlo en hora y un sensor de temperatura one-wire
DS1820. Se va a ver bien sobre el banco de trabajo.

[ Volver al NDICE ]

S-ar putea să vă placă și