Come collegare LED Matrix in Arduino usando MAX 7219?


9

Io ho:

D: Mi chiedo solo come posso collegarlo ad Arduino Duemilanove ?

Ho cercato su Google ma non sono riuscito a scoprire come.


@Bruno - Hai rimosso il link, quindi ho pensato che fosse morto. Ma va bene, e non hai spiegato perché hai eliminato, quindi sono tornato indietro. Se hai buone ragioni per eliminare il link, ti ​​preghiamo di lasciarlo nel campo dei commenti.
Stevenvh,

@stevenvh Siamo spiacenti, l'ho provato prima e non funzionava. Forse stavo avendo alcuni problemi di connettività Internet ma ora funziona. Hai fatto bene a ripristinare la mia modifica.
Bruno Ferreira,

Risposte:


11

Bryan Chung aveva ancora un tutorial disponibile su Internet Archive su come collegare una matrice LED a un Arduino usando un MAX7219:

Ecco un esperimento con una matrice LED 8 × 8, guidata da un IC MAX7219, controllato attraverso una scheda micro-controller Arduino. Tan ha realizzato una PCB personalizzata da DinoTech per riordinare tutti i fili che collegano la matrice LED e l'IC. Viene fornito con un alimentatore a 12V separato, per non scaricare tutto dalla scheda Arduino.

Sono necessari solo 4 fili per controllare l'IC driver MAX7219. Loro sono il

Data Clock Latch / load Ground

I pin di dati e clock devono corrispondere a quelli per il comando shiftOut () in Arduino. Il perno di chiusura produrrà un impulso da BASSO AD ALTO dopo il comando shiftOut. Ho scritto il programma originale per Javelin Stamp. Poiché Arduino può spostare solo 8 bit di dati, devo usare 2 comandi separati per spostare i byte superiore e inferiore sul MAX7219, che richiede un controllo di 2 byte per ciascun comando.

Per la struttura dei dati della matrice LED 8 × 8, utilizzo una matrice di byte - matrice di lunghezza 8. Ogni riga nella matrice corrisponde alla dimensione Y. Ogni bit di una riga corrisponde alla dimensione X. La cifra 1 è attiva; 0 è spento. La direzione X è invertita e c'è anche uno spostamento di 1 bit. La funzione updateLED () si rivolge a questo.

Il primo programma è un'animazione di un movimento a linea singola.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.