Yo tengo:
- 2 8x8 LED Matrix , y
- un chip MAX7219.
P: Me pregunto cómo puedo conectar eso al Arduino Duemilanove .
He estado buscando en Google pero no pude averiguar cómo.
Yo tengo:
P: Me pregunto cómo puedo conectar eso al Arduino Duemilanove .
He estado buscando en Google pero no pude averiguar cómo.
Respuestas:
Bryan Chung tenía un tutorial aún disponible en Internet Archive sobre cómo conectar una matriz de LED a un Arduino usando un MAX7219:
Aquí hay un experimento con una matriz de LED 8 × 8, impulsada por un IC MAX7219, controlado a través de una placa de microcontrolador Arduino. Tan de DinoTech ha creado un PCB personalizado para ordenar todos los cables que conectan la matriz de LED y el IC. Viene con una fuente de alimentación de 12V separada, para no drenar todo de la placa Arduino.
Solo se necesitan 4 cables para controlar el IC del controlador MAX7219. Ellos son las
Data Clock Latch / load Ground
Los pines de datos y reloj deben coincidir con los del comando shiftOut () en Arduino. El pasador de bloqueo dará un pulso BAJO a ALTO después del comando shiftOut. He escrito el programa original para Javelin Stamp. Dado que Arduino solo puede cambiar 8 bits de datos, tengo que usar 2 comandos separados para cambiar los bytes superior e inferior al MAX7219, que necesita un control de 2 bytes para cada comando.
Para la estructura de datos de la matriz de LED 8 × 8, utilizo una matriz de bytes - matriz de longitud 8. Cada fila en la matriz corresponde a la dimensión Y. Cada bit de una fila corresponde a la dimensión X. El dígito 1 está activado; 0 está apagado. La dirección X se invierte y también hay un desplazamiento de 1 bit. La función updateLED () atiende esto.
El primer programa es una animación de un movimiento de una sola línea.
int CLOCK = 12;
int LATCH = 13;
int DATA = 11;
byte matrix[8];
int idx = 0;
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
digitalWrite(CLOCK, LOW);
digitalWrite(LATCH, LOW);
digitalWrite(DATA, LOW);
initLED();
clearLED();
}
void loop() {
for (int j=0;j<8;j++) {
updateLED(idx, j, true);
}
refreshLED();
delay(200);
for (int j=0;j<8;j++) {
updateLED(idx, j, false);
}
refreshLED();
delay(100);
idx++;
idx %= 8;
}
void ledOut(int n) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, (n>>8));
shiftOut(DATA, CLOCK, MSBFIRST, (n));
digitalWrite(LATCH, HIGH);
delay(1);
digitalWrite(LATCH, LOW);
}
void initLED() {
ledOut(0x0B07);
ledOut(0x0A0C);
ledOut(0x0900);
ledOut(0x0C01);
}
void clearLED() {
for (int i=0;i<8;i++) {
matrix[i] = 0x00;
}
refreshLED();
}
void refreshLED() {
int n1, n2, n3;
for (int i=0;i<8;i++) {
n1 = i+1;
n2 = matrix[i];
n3 = (n1<<8)+n2;
ledOut(n3);
}
}
void updateLED(int i, int j, boolean b) {
int t = 1;
int n = 0;
int m = 0;
if (j==0) {
m = 7;
}
else {
m = j-1;
}
n = t<<m;
if (b) {
matrix[i] = n | matrix[i];
}
else {
n = ~n;
matrix[i] = n & matrix[i];
}
}
Lo siento si es un poco tarde para ti, pero acabo de escribir una publicación sobre el uso del MAX7219 con matrices LED y pantallas LED de 7 segmentos.