Ich habe:
- 2 8x8 LED Matrix und
- ein MAX7219 Chip.
F: Ich frage mich nur, wie ich das mit dem Arduino Duemilanove verbinden kann .
Ich habe gegoogelt, aber ich konnte nicht herausfinden, wie.
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.
Antworten:
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];
}
}
Es tut mir leid, wenn es für Sie etwas spät ist, aber ich habe gerade einen Beitrag über die Verwendung des MAX7219 mit LED-Matrizen und 7-Segment-LED-Anzeigen geschrieben.