Como conectar o LED Matrix ao Arduino usando o MAX 7219?

9

Eu tenho:

P: Gostaria de saber como posso conectar isso ao Arduino Duemilanove ?

Pesquisei no Google, mas não consegui descobrir como.

jusaca
fonte
@Bruno - Você removeu o link, então pensei que estava morto. Mas tudo bem, e você não explicou por que excluiu, então eu revirei. Se você tiver um bom motivo para excluir o link, deixe-o no campo de comentário.
stevenvh
@stevenvh Desculpe, eu testei antes e não estava funcionando. Talvez eu estivesse tendo alguns problemas de conectividade com a Internet, mas está funcionando agora. Você fez bem ao rever minha edição.
Bruno Ferreira

Respostas:

11

Bryan Chung ainda tinha um tutorial disponível no Internet Archive sobre como conectar uma matriz de LED a um Arduino usando um MAX7219:

Aqui está um experimento com uma matriz de LED 8 × 8, acionada por um MAX7219 IC, controlada por uma placa de microcontrolador Arduino. Tan da DinoTech fez um PCB personalizado para arrumar todos os fios que conectam a matriz de LEDs e o IC. Ele vem com uma fonte de alimentação separada de 12V, para não esgotar tudo da placa Arduino.

Apenas 4 fios são necessários para controlar o IC do driver MAX7219. Eles são o

Trava do relógio de dados / carga Terra

Os pinos de dados e relógio devem corresponder aos do comando shiftOut () no Arduino. O pino de trava emitirá um pulso de BAIXO a ALTO após o comando shiftOut. Eu escrevi o programa original para o Javelin Stamp. Como o Arduino pode mudar apenas 8 bits de dados, eu tenho que usar 2 comandos separados para mudar os bytes superior e inferior para o MAX7219, que precisa de um controle de 2 bytes para cada comando.

Para a estrutura de dados da matriz de LED 8 × 8, utilizo uma matriz de bytes - matriz de comprimento 8. Cada linha da matriz corresponde à dimensão Y. Cada bit em uma linha corresponde à dimensão X. O dígito 1 está ativado; 0 está desativado. A direção X é invertida e há também uma mudança de 1 bit. A função updateLED () atende a isso.

O primeiro programa é uma animação de um movimento de linha única.

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
fonte
2

Desculpe se é um pouco tarde para você, mas acabei de escrever um post sobre o uso do MAX7219 com matrizes de LED e displays de LED de 7 segmentos.


fonte