MAX 7219を使用してLEDマトリクスをArduinoに接続する方法


9

私が持っています:

Q:Arduino Duemilanoveに接続するにはどうすればよいですか?

私はグーグルで遊んでいましたが、方法がわかりませんでした。


@Bruno-あなたはリンクを削除したので、それは死んだと思った。しかし、問題はありません。削除した理由を説明しなかったため、ロールバックしました。リンクを削除する正当な理由がある場合は、コメントフィールドに残してください。
stevenvh

@stevenvh申し訳ありませんが、以前にテストしましたが、機能しませんでした。多分私はいくつかのインターネット接続の問題を抱えていましたが、それは現在働いています。あなたは私の編集をうまくロールバックしました。
Bruno Ferreira 2012

回答:


11

Bryan Chungは、MAX7219を使用してLEDマトリクスをArduinoに接続する方法について、インターネットアーカイブでまだ利用可能なチュートリアルを公開していました。

これは、Arduinoマイクロコントローラボードを介して制御される、MAX7219 ICによって駆動される8×8 LEDマトリクスの実験です。LEDマトリックスとICを接続するすべてのワイヤを整理するために、カスタムPCBがDinoTechのTanによって作成されました。Arduinoボードからすべてを排出しないように、独立した12V電源が付属しています。

MAX7219ドライバICを制御するために必要なのは4本のワイヤのみです。彼らは

データクロックラッチ/ロードグランド

データピンとクロックピンは、ArduinoのshiftOut()コマンドのピンと一致する必要があります。ラッチピンは、shiftOutコマンドの後にLOWからHIGHパルスを出力します。Javelin Stampのオリジナルプログラムを作成しました。Arduinoは8ビットのデータしかシフトできないため、2つの個別のコマンドを使用して、上位バイトと下位バイトの両方をMAX7219にシフトする必要があります。MAX7219では、コマンドごとに2バイトの制御が必要です。

8×8 LEDマトリックスのデータ構造には、バイト配列(長さ8のマトリックス)を使用します。マトリックスの各行はY次元に対応しています。行の各ビットはX次元に対応します。桁1はオンです。0はオフです。X方向が反転し、1ビットのシフトもあります。updateLED()関数はこれに対応します。

最初のプログラムは、単一の線の動きのアニメーションです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.