LED Matrix'i MAX 7219 kullanarak Arduino'ya nasıl bağlanır?


9

Sahibim:

S: Acaba bunu Arduino Duemilanove cihazına nasıl bağlayabilirim ?

Google'da çalışıyordum ama nasıl olduğunu bulamadım.


@Bruno - Bağlantıyı kaldırdın, bu yüzden öldüğünü düşündüm. Ama sorun değil, neden sildiğini açıklamadın, bu yüzden geri döndüm. Bağlantıyı silmek için iyi bir nedeniniz varsa, lütfen yorum alanında bırakın.
stevenvh

@stevenvh Üzgünüm, daha önce test ettim ve işe yaramadı. Belki bazı İnternet bağlantısı sorunları yaşıyordum ama şimdi çalışıyor. Düzenlememi geri aldın.
Bruno Ferreira

Yanıtlar:


11

Bryan Chung'un İnternet Arşivi'nde , bir LED Matrix'i bir MAX7219 kullanarak bir Arduino'ya nasıl bağlayacağına dair bir öğretici vardı :

İşte bir Arduino mikro denetleyici kartı ile kontrol edilen MAX7219 IC tarafından tahrik edilen 8 × 8 LED matrisli bir deney. LED matrisi ve IC'yi bağlayan tüm kabloları toplamak için DinoTech'ten Tan tarafından özel bir PCB yapılmıştır. Arduino kartından her şeyi boşaltmamak için ayrı bir 12V güç kaynağı ile birlikte gelir.

MAX7219 sürücü IC'sini kontrol etmek için sadece 4 kablo gereklidir. Onlar

Veri Saati Kilitleme / yük Topraklama

Veri ve saat pinleri, Arduino'daki shiftOut () komutu için olanlarla eşleşmelidir. Mandal pimi, shiftOut komutundan sonra DÜŞÜK ila YÜKSEK darbe verir. Javelin Stamp için orijinal programı yazdım. Arduino sadece 8 bit veri kaydırabildiğinden, hem üst hem de alt baytları her komut için 2 bayt kontrol gerektiren MAX7219'a kaydırmak için 2 ayrı komut kullanmam gerekiyor.

8 × 8 LED matrisinin veri yapısı için, 8 bit uzunluğunda bir bayt dizisi kullanıyorum. Matristeki her satır Y boyutuna karşılık gelir. Satırdaki her bit X boyutuna karşılık gelir. Basamak 1 açık; 0 kapalı. X yönü tersine çevrilir ve ayrıca 1 bit kaydırma vardır. UpdateLED () işlevi bunu sağlar.

İlk program tek bir çizgi hareketinin animasyonudur.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.