Wie verbinde ich LED Matrix mit MAX 7219 mit Arduino?

9

Ich habe:

F: Ich frage mich nur, wie ich das mit dem Arduino Duemilanove verbinden kann .

Ich habe gegoogelt, aber ich konnte nicht herausfinden, wie.

Jusaca
quelle
@Bruno - Du hast den Link entfernt, also dachte ich, er wäre tot. Aber es ist in Ordnung, und Sie haben nicht erklärt, warum Sie gelöscht haben, also habe ich einen Rollback durchgeführt. Wenn Sie einen guten Grund haben, den Link zu löschen, lassen Sie ihn bitte im Kommentarfeld.
Stevenvh
@stevenvh Sorry, ich habe es schon einmal getestet und es hat nicht funktioniert. Vielleicht hatte ich einige Probleme mit der Internetverbindung, aber es funktioniert jetzt. Sie haben meine Bearbeitung gut rückgängig gemacht.
Bruno Ferreira

Antworten:

11

Bryan Chung hatte im Internetarchiv noch ein Tutorial zum Verbinden einer LED-Matrix mit einem Arduino mit einem MAX7219:

Hier ist ein Experiment mit einer 8 × 8-LED-Matrix, die von einem MAX7219-IC angesteuert wird und über eine Arduino-Mikrocontrollerkarte gesteuert wird. Tan von DinoTech hat eine kundenspezifische Leiterplatte hergestellt, um alle Drähte zwischen LED-Matrix und IC aufzuräumen. Es wird mit einem separaten 12-V-Netzteil geliefert, um nicht alles von der Arduino-Platine zu entleeren.

Zur Steuerung des MAX7219-Treiber-IC sind nur 4 Drähte erforderlich. Sie sind die

Data Clock Latch / Load Ground

Die Daten- und Taktstifte sollten mit denen für den Befehl shiftOut () in Arduino übereinstimmen. Der Latch-Pin gibt nach dem Befehl shiftOut einen LOW-to-HIGH-Impuls aus. Ich habe das Originalprogramm für Javelin Stamp geschrieben. Da Arduino nur 8 Datenbits verschieben kann, muss ich 2 separate Befehle verwenden, um sowohl das obere als auch das untere Byte zum MAX7219 zu verschieben, der für jeden Befehl eine 2-Byte-Steuerung benötigt.

Für die Datenstruktur der 8 × 8-LED-Matrix verwende ich ein Byte-Array - Matrix der Länge 8. Jede Zeile in der Matrix entspricht der Y-Dimension. Jedes Bit in einer Reihe entspricht der X-Dimension. Ziffer 1 ist eingeschaltet; 0 ist aus. Die X-Richtung ist umgekehrt und es gibt auch eine 1-Bit-Verschiebung. Die Funktion updateLED () berücksichtigt dies.

Das erste Programm ist eine Animation einer einzelnen Linienbewegung.

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
quelle