¿Cómo conectar LED Matrix en Arduino usando MAX 7219?

9

Yo tengo:

P: Me pregunto cómo puedo conectar eso al Arduino Duemilanove .

He estado buscando en Google pero no pude averiguar cómo.

jusaca
fuente
@Bruno: eliminaste el enlace, así que pensé que estaba muerto. Pero está bien, y no explicaste por qué borraste, así que retrocedí. Si tiene un buen motivo para eliminar el enlace, déjelo en el campo de comentarios.
stevenvh
@stevenvh Lo siento, lo probé antes y no estaba funcionando. Tal vez estaba teniendo algunos problemas de conectividad a Internet, pero ahora funciona. Lo hiciste bien haciendo retroceder mi edición.
Bruno Ferreira

Respuestas:

11

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];
  }
}
littlebirdceo
fuente