Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. MATRIZ LED
Una matriz de LED está formado por diferentes LED, cableados de forma conjunta por
filas y columnas. Podemos encender un LED determinado de la matriz aplicando
correctamente los valores HIGH y LOW a su respectiva fila y columna.
Para poder hacer gráficos el procedimiento consiste en hacer un barrido por filas (o
columnas). Encendemos todos los LED de una única fila (o columna), y a continuación
cambiamos a la siguiente. Sólo una fila (o columna) está encendida cada instante pero, al
hacerlo rápidamente, el efecto en nuestra visión es ver toda la imagen formada de forma
simultánea.
Encender una matriz de 8x8 LED requeriría 16 señales digitales y un trabajo constante
del procesador para refrescar la imagen. Eso es una cantidad enorme de recursos para
cualquier autómata, que estaríamos mal aprovechando para simplemente encender un
display.
Por este motivo, empleamos un controlador como el MAX7219 que está especialmente
diseñado para encender displays de 7 segmentos y matrices de led, y libera a nuestro
procesador para hacer tareas mucho más valiosas.
La comunicación con el MAX7219 se realiza a través de SPI por lo que sólo se requieren
3 pines de Arduino (SS, MOSI y SCK). Además ni siquiera “ocupamos” del todo estos
pines, ya que con el mismo bus podemos controlar múltiples dispositivos.
Por último, las propias placas MAX7219 generalmente incorporan un puerto de entrada
y salida, de forma que podemos combinar múltiples controladores sin ninguna dificultad.
ESQUEMA MONTAJE
CIRCUITO EN PROTEUS
PROGRAMACIÓN
void setup() {
lc.shutdown(0,false); // enciende la matriz
lc.setIntensity(0,4); // establece brillo
lc.clearDisplay(0); // blanquea matriz
}
void loop(){
for(int fila = 0; fila < 8; fila++) { // itera por las filas
for(int columna = 0; columna < 8; columna++) { // itera por las columnas
lc.setLed(0,fila,columna,true); // enciende LED
delay(100); // demora de 100 mseg.
lc.setLed(0,fila,columna,false); // apaga LED
delay(100); // demora de 100 mseg.
}
}
}
Algunas personas prefieren operar con matrices de bytes en lugar de enteros largos.
Este caso también es compatible. Aquí hay un ejemplo del uso de una matriz de bytes en formato
binario:
#include <LedControl.h>
void setup() {
display.clearDisplay(0);
display.shutdown(0, false);
display.setIntensity(0, 5);
}
int i = 0;
void loop() {
displayImage(IMAGES[i]);
if (++i >= IMAGES_LEN ) {
i = 0;
}
delay(333);
}
El estado de la matriz 8x8 se puede presentar como un entero largo sin signo (uint64_t).
En este caso, el código es bastante compacto. El mismo efecto anterior con 64 bits
#include <LedControl.h>
void setup() {
display.clearDisplay(0);
display.shutdown(0, false);
display.setIntensity(0, 10);
}
int i = 0;
void loop() {
displayImage(IMAGES[i]);
if (++i >= IMAGES_LEN ) {
i = 0;
}
delay(100);
}
CONTADOR DE 0 A 9
#include "LedControl.h" // incluye libreria LedControl
void setup() {
lc.shutdown(0,false); // enciende la matriz
lc.setIntensity(0,4); // establece brillo
lc.clearDisplay(0); // blanquea matriz
}
void loop(){
mostrar_0(); // llama funcion mostrar_0
delay(demora); // demora
mostrar_1(); // llama funcion mostrar_1
delay(demora); // demora
mostrar_2(); // llama funcion mostrar_2
delay(demora); // demora
mostrar_3(); // llama funcion mostrar_3
delay(demora); // demora
mostrar_4(); // llama funcion mostrar_4
delay(demora); // demora
mostrar_5(); // llama funcion mostrar_5
delay(demora); // demora
mostrar_6(); // llama funcion mostrar_6
delay(demora); // demora
mostrar_7(); // llama funcion mostrar_7
delay(demora); // demora
mostrar_8(); // llama funcion mostrar_8
delay(demora); // demora
mostrar_9(); // llama funcion mostrar_9
delay(demora); // demora
}
void setup() {
lc.shutdown(0,false); // enciende la matriz
lc.setIntensity(0,4); // establece brillo
lc.clearDisplay(0); // blanquea matriz
}
void loop(){
mostrar_1(); // llama funcion mostrar_1
delay(demora); // demora
mostrar_2(); // llama funcion mostrar_2
delay(demora); // demora
mostrar_3(); // llama funcion mostrar_3
delay(demora); // demora
mostrar_4(); // llama funcion mostrar_4
delay(demora); // demora
mostrar_5(); // llama funcion mostrar_5
delay(demora); // demora
mostrar_6(); // llama funcion mostrar_6
delay(demora); // demora
mostrar_7(); // llama funcion mostrar_7
delay(demora); // demora
mostrar_8(); // llama funcion mostrar_8
delay(demora); // demora
mostrar_9(); // llama funcion mostrar_9
delay(demora); // demora
}