Bagaimana menghubungkan LED Matrix ke Arduino menggunakan MAX 7219?


9

Saya sudah:

T: Saya hanya ingin tahu bagaimana saya bisa menghubungkannya ke Arduino Duemilanove ?

Saya telah googling tetapi saya tidak tahu caranya.


@ Bruno - Anda menghapus tautan, jadi saya pikir itu sudah mati. Tapi tidak apa-apa, dan Anda tidak menjelaskan mengapa Anda menghapus, jadi saya memutar kembali. Jika Anda memiliki alasan yang bagus untuk menghapus tautan, silakan tinggalkan di kolom komentar.
stevenvh

@stevenvh Maaf, saya mengujinya sebelumnya dan tidak berfungsi. Mungkin saya mengalami beberapa masalah konektivitas Internet tetapi sekarang berfungsi. Anda berhasil memutar kembali edit saya.
Bruno Ferreira

Jawaban:


11

Bryan Chung memiliki tutorial yang masih tersedia di Internet Archive tentang cara menghubungkan Matriks LED ke Arduino menggunakan MAX7219:

Berikut ini adalah percobaan dengan matriks LED 8 × 8, didorong oleh IC MAX7219, yang dikendalikan melalui papan pengontrol mikro Arduino. PCB kustom telah dibuat oleh Tan dari DinoTech untuk merapikan semua kabel yang menghubungkan matriks LED dan IC. Itu datang dengan catu daya 12V terpisah, agar tidak menguras semuanya dari papan Arduino.

Hanya 4 kabel yang diperlukan untuk mengontrol IC driver MAX7219. Mereka adalah

Data Clock Latch / load Ground

Pin data dan jam harus cocok dengan yang untuk perintah shiftOut () di Arduino. Pin kait akan memberikan pulsa RENDAH ke TINGGI setelah perintah shiftOut. Saya telah menulis program asli untuk Stamp Javelin. Karena Arduino hanya dapat menggeser 8 bit data, saya harus menggunakan 2 perintah terpisah untuk menggeser byte atas dan bawah ke MAX7219, yang membutuhkan kontrol 2 byte untuk setiap perintah.

Untuk struktur data matriks LED 8 × 8, saya menggunakan array byte - matriks panjang 8. Setiap baris dalam matriks sesuai dengan dimensi Y. Setiap bit dalam satu baris berhubungan dengan dimensi X. Digit 1 aktif; 0 tidak aktif. Arah X terbalik dan ada juga pergeseran 1 bit. Fungsi updateLED () melayani untuk ini.

Program pertama adalah animasi gerakan satu baris.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.