práctica
cubo led
Luminaria 3D
Matriz LED programable con 125 LED Por Jerry Jacobs
Una matriz LED bidimensional no es algo espectacular. La matriz que presentamos aquí, no obstante, es de otro calibre. Cinco de estas matrices fueron apiladas una encima de otra. Lo que ha resultado en una verdadera matriz 3D en la que cada uno de sus LED puede encenderse y apagarse independientemente.
sólo para Windows, sino también para Linux- y Mac OS X.
Características técnicas •
125 LED en disposición 3D
•
Microcontrolador ATmega32 con recuencia interna de 1 MHz
•
Conector ISP de 10 contactos para programar
•
5 transistores BC337 para el control de los niveles
•
25 transistores BC547 para el control de las columnas
Los LED intermitentes siempre llaman la atención. En la mayoría de los casos se trata sencillamente de un par de LED o como máximo de una pantalla de LED plana. Un cubo LED es algo realmente dierente. En este caso se trata de una pantalla tridimensional compuesta de LED que pueden ser controlados de manera individual.
Funcionamiento
En contraste con el cubo borg, se trata aquí de electrónica terrestre convencional con incorporación de un un microcontrolador AVR. Estos controladores son económicos, áciles de conseguir, y además, también existen para ellos sufcientes herramientas de desarrollo con código abierto. Estos últimos existen no
La suposición de que para 125 LED se necesitarían grandes cantidades de cables puede engañar. engañar. Mediante el control por multiplexación se reduce enormemente “la alambrada de espino artifcial”. Sólo un único cable es sufciente para activar o desactivar los 25 LED que conorman una matriz bidimensional parcial. A los 25 LED de un nivel como éste, les bastan exactamente 26 líneas. Cada cinco LED superpuestos de los cinco niveles conorman una columna conjunta que, de esta manera, precisa únicamente de tan sólo
Tabla 1. Control de niveles y columnas Puerto A
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
Columna 8
Columna 7
Columna 6
Columna 5
Columna 4
Columna 3
Columna 2
Columna 1
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
Columna 25
–
–
Nivel 5
Nivel 4
Nivel 3
Nivel 2
Nivel 1
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
Columna 16
Columna 15
Columna 14
Columna 13
Columna 12
Columna 11
Columna 10
Columna 9
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
PD7
PD6
PD5
PD4
PD3
PD2
PD1
PD0
Columna 24
Columna 23
Columna 22
Columna 21
Columna 20
Columna 19
Columna 18
Columna 17
Puerto B
Puerto C
Puerto D
64
elektor, electronics worldwide - 12/2008
una línea. Para encender un LED específco por separado, se conecta el nivel correspondiente a la tensión positiva de alimentación y se selecciona la respectiva columna. El cubo está organizado en 5 niveles y 25 columnas. De ello se deducen lógicamente 30 líneas, en lugar de 126 líneas independientes para los 125 LED. Con una recuencia de 1 MHz, el circuito alcanza una recuencia de imagen de 39 Hz. Cada 1024 periodos se incrementa un contador (también denominado controlador). Cuando este contador alcanza en su estado el valor 5, se dispara automáticamente el interruptor y se reestablece el valor del contador.. Este interruptor se encarga también dor de transerir el contenido del buer a un nivel LED. Una recuencia de 1 MHz se obtine una “recuencia de nivel” de 195 Hz. Dado que el cubo tiene cinco capas LED, éste se reproduce completamente 39 veces por segundo.
la electrónica pone automáticamente el contenido del buer en el respectivo patrón LED. La rutina de interrupción ya mencionada se encarga de ello. El buer se organiza de orma multidimensional de acuerdo con el cubo, de tal orma que las imagenes se pueden “dibujar” plásticamente en el buer. Interrupción
Software El sotware está escrito en C y puede compilarse con AVR-GCC [1]. Cuenta con una amplia documentación que puede además consultarse en un sitio web para más inormaciones. La documentación ha sido generada con Doxygen [2]. Buffer
Se utiliza un buer para darle orma a una imagen en el cubo de orma menos compleja. Como usuario, solamente es preciso manejar hábilmente los bits, y
12/2008 - elektor, electronics worldwide
La unción de ormateo de imagenes de la rutina de interrupción consiste en la correcta reproducción del contenido del búer 39 veces por segundo. En consecuencia, cada bit en el búer es asignado inequívocamente a un LED El nivel de los bits decide entonces si un LED se enciende o no. El usuario debe escribir los datos de la imagen con unciones especiales en el buer para poder generar una imagen.
eectos individuales en el cubo. En la Tabla 1 se puede observar la conexión exacta de cada bit con el puerto, columna de LED, etc. Con esta tabla se pueden generar también directamente muestras sin refnamientos como desplazamientos o máscaras de bit. Las unciones de bajo nivel se encuentran defnidas en el archivo “draw.h”. “draw .h”. Con ellas es posible controlar niveles, columnas, flas, etc. Veremos a continuación un par de ejemplos sobre la manera como se pueden utilizar estas unciones. Control de una fla en un nivel determinado: set_row(ROW_1, NIVEL_1); clear_row(ROW_1, NIVEL_1); toggle_row(ROW_1, NIVEL_1);
Las unciones para controlar una columna:
Instrucciones gráficas de bajo nivel
Las rutinas de bajo nivel están concebidas de orma tal que se puedan lograr
set_column(COLUMN_1, ON); set_column(COLUMN_1, OFF);
65
práctica
cubo led
T 2 2
T 2 3
150R
150R
R 4 7
C O L 1 7
R 4 8
1k8 C O L 1 8
G N D
R 3 9
R 4 0
1k8 C O L R 2 5 0 0
R 4 1
R 4 2
T 2 6
1k8 C O L R 150R 2 5 1 1
R 4 3
T 2 7
1k8 C O L 150R R 2 5 2 2 1k8
R 4 4
T 2 5
T 2 8
150R
150R
150R
R 4 9
R 5 3
C O L 2 3
1k8
T 2 9
150R
R 5 4
C O L 2 4
1k8
R 4 6
12
13
150R
R 3 1
C O L 1 6
1k8
T 2 0
150R
R 3 2
C O L 1 5
1k8
T 1 9
150R
R 3 3
C O L 1 4
1k8
T 1 8
150R
R 3 4
C O L 1 3
1k8
T 1 7
150R
R 3 5
C O L 1 2
1k8
T 1 6
150R
R 3 6
C O L 1 1
1k8
0 8 0 3 5 5 - 1 1
T 1 5
R 3 7
C O L 1 0
1k8
T 1 4
66
150R
150R
R 3 8
C O L 9
100k
R 1
M O S I
L A Y 4
330R
T 5 R 6 T 4 R 5
L A Y 3
330R
T 3 R 4
L A Y 2
330R L A Y 1
R E S E GND T
GND
XTAL2
XTAL1
2 2 1 1 1 1 1 1 1 0 9 8 7 6 5 4
P D 7 ( O C 2 )
P D 6 ( I C P )
P D 5 ( O C 1 A )
P D 4 ( O C 1 B )
P D 3 ( I N T 1 )
P D 2 ( I N T 0 )
P D 1 ( T X D )
P D 0 ( R X D )
330R 8 7 6 5 4 3 2 1
P B 7 ( S C K )
P B 6 ( M I S O )
P B 5 ( M O S I )
P B 4 ( S S )
P B 3 ( A I N 1 / O C 0 )
P B 2 ( A I N 0 / I N T 2 )
P B 1 ( T 1 )
A D C 3 )
A D C 2 )
A D C 1 )
P B 0 ( X C K / T 0 )
A T 10 m VCC e g I C a 30 2 3 AVCC 2 - P P 1 C C 6 P P P P P P P P 32 7 6 P P P P P P P A A A A A A A A C C C C C 7 6 5 4 3 2 1 0 AREF ( ( C T T 4 3 2 1 0 C ( ( ( ( ( ( ( ( 5 O S C 2 )
O S C 1 )
( T ( T ( T ( T D M C D O S K I ) ) ) )
( S D A )
( S C L )
A D C 7 )
A D C 6 )
A D C 5 )
A D C 4 )
150R
R 5 5
T 2 R 3 T 1
+ 5 V
+ 5 V
+ 5 V
+ 5 V
K 1
+ 5 V 2
R 2
2 4 5 7 V 0 u
+ 5 V
1k8
1k8
1k8
R 2 5
1k8
R 2 6
1k8
R 2 7
1k8
R 2 8
1k8
R 2 9
1k8
R 3 0
Imagen 1. Todos los LED son controlados mediante un microcontrolador AVR. La gran cantidad de transistores se encargan de proveer la tensión necesaria.
C 1
D 1
1
7 8 0 5
I C 1
3
3 3 3 3 3 3 3 4 3 4 5 6 7 8 9 0
R 2 4
1 3
1 N 4 0 0 1
2
A D C 0 )
R 2 3
C O L 2 5
R 5 6
330R
9
+ 5 V
T 3 0
L A Y 5
2 2 2 2 2 2 2 2 9 8 7 6 5 4 3 2
T 2 1
C 4
R 4 5
31
1k8
1 1 0 u 0 V
1k8
11 T 6 T 1 .. .. . T .T 3 5 0 = = B B C C 5 3 4 3 7 7
K 2
9 7 5 3 1
M S R I C S S O K T
1k8 C O L 1 9
T 2 4
1 0 8 6 4 2
R 1 5
1 0 0 n
C 2
1 0 0 n
C 3
T 6
150R
R 7
C O L 1
T 7
150R
R 8
C O L 2
T 8
150R
R 9
C O L 3
T 9
150R
R 1 0
T 1 0
150R
R 1 1
T 1 1
150R
R 1 2
T 1 2
150R
R 1 3
T 1 3
150R
R 1 4
R 1 6
R 1 7
R 1 8
R 1 9
R 2 0
R 2 1
R 2 2
+ 5 V
C O L 4
C O L 5
C O L 6
C O L 7
C O L 8
elektor, electronics worldwide - 12/2008
En estas unciones se utilizan denominaciones como ON, OFF y COLUMN_1. Se trata aquí de constantes con valores fjos. Por ejemplo: ON tiene 1 y OFF tiene 0 como valor. Algunas de estas unciones se pueden emplear una tras otra para crear una fgura determinada. Otras explicaciones se encuentran disponibles en el código uente que se puede descargar gratuitamente desde el sitio web de Elektor.
P B 4
R 6
La electrónica se puede montar completamente con componentes convencionales y, a pesar ello, la placa de circuito impreso resultante es bastante compacta. Podemos utilizar un adaptador de red comercial corriente con una salida de 9 V capaz de suministrar 600 mA para alimentar el circuito. El regulador IC1, un 7805, estabilizará la tensión aplicada al circuito. El diodo D1 lo protege de los eectos negativos de polarizaciones inversas.
P B 2
R 5
P B 1
R 4
P B 0
R 3
R 2
L A Y 1
P A 0
T 1
L A Y 2
R 1 5
C O L 1 T 6
Hardware
P B 3
R 7
0 8 0 3 5 5 - 1 2
T 2
L A Y 3 T 3
L A Y 4 T 4
L A Y 5 T 5
+ 5 V
Imagen 2. Esta imagen muestra el recorrido que sigue la corriente entre los LED medios de la primera columna.
Con los transistores T1 a T5 se conecta la tensión de alimentación de 5 V a los cinco niveles. Con los transistores T6 a T30 se controlan las columnas poniendo los LED
a tierra y cerrando de esta manera el circuito (véase Imagen 1 e Imagen 2). La corriente que circula entre los LED depende de la dierencia de potencial
Imagen 3. El aspecto de la cara superior de la placa de circuito impreso es bastante claro.
12/2008 - elektor, electronics worldwide
67