AnzeigeArduinoDIY
Foto des Autors

0

Arduino 8×8 LED Matrix steuern – Anfängerleitfaden mit MAX7219

9 Min. Lesezeit

Hinweis: Die mit * gekennzeichneten Links sind Affiliate-Links. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Für dich entstehen dabei keine Mehrkosten.

1. Was ist eine 8×8 LED-Matrix?

Eine 8×8 LED-Matrix* enthält 64 LEDs (Light Emitting Diodes), die in einer Matrix angeordnet sind – genau 8 Reihen und 8 Spalten. Die 8×8 LED-Matrix-Anzeigen werden üblicherweise für die Anzeige von Symbolen, einfachen Grafiken und Texten verwendet. Das Besondere: Du brauchst nicht alle 64 LEDs einzeln an den Arduino zu stecken – der MAX7219-Treiber macht die Arbeit für dich, und es werden nur 3 digitale Pins des Arduino-Boards verwendet.

Die Matrix funktioniert nach dem Prinzip der Multiplexing: Das Display leuchtet jeweils nur eine Reihe auf einmal auf. Während diese Reihe aktiv ist, werden die entsprechenden Spalten ebenfalls aktiviert, um die gewünschten LEDs in dieser Reihe zum Leuchten zu bringen. Dies passiert so schnell (bis zu 800 Hz), dass dein Auge nur ein vollständiges Bild sieht.

2. Die Rolle des MAX7219-Chips

Der MAX7219 ist ein kompakter Serial-Input/Output-Treiber für Common-Cathode-LED-Anzeigen, der Mikrocontroller mit 7-Segment-Displays oder 64 einzelnen LEDs verbinden kann. Im Klartext: Der Chip kann 64 einzelne LEDs mit nur drei Drähten zum Arduino steuern.

Der MAX7219 kümmert sich automatisch um das Auffrischen der Anzeige, sodass du dir darum keine Gedanken machen musst. Du sendest einfach Befehle über SPI mit nur drei Drähten, und der Chip aktualisiert die Matrix von selbst bis zu 800 Mal pro Sekunde. Das spart dir enorm Rechenleistung deines Arduino.

Ein großer Vorteil: Der MAX7219 unterstützt Daisy-Chaining (Verkettung), sodass du mehrere Module hintereinander verbinden kannst, um größere Displays zu erstellen – auch dann noch mit nur drei Kontrollleitungen.

3. Hardware-Anschluss

Die Verdrahtung ist beeindruckend einfach. Du benötigst das Matrix-Modul mit MAX7219 und ein paar Jumper-Kabel zu deinem Arduino Uno oder Nano.

3.1 Komponenten für ein Single-Matrix-Projekt

  • 1x Arduino Uno (oder Nano, Mega – alle funktionieren)
  • 1x 8×8 LED-Matrix mit integriertem MAX7219-Modul
  • 4x Jumper-Kabel (male-to-male oder female-to-male, je nach Anschlusstyp)
  • Externe 5V-Stromversorgung (optional, aber für mehrere Matrizen empfohlen)
  • USB-Kabel zum Arduino und PC

3.2 Schritt-für-Schritt-Verdrahtung

Verbinde DIN zu Pin 11, CLK zu Pin 13 und CS zu Pin 10 des Arduino. Die restliche Verdrahtung ist wie folgt:

  • VCC (Power) → Arduino 5V
  • GND (Ground) → Arduino GND
  • DIN (Data In) → Arduino Digital Pin 11
  • CLK (Clock) → Arduino Digital Pin 13
  • CS/LOAD → Arduino Digital Pin 10

Wichtig: Externe Stromversorgung. Der maximale Stromverbrauch einer einzelnen 8×8-Matrix beträgt bei voller Helligkeit etwa 330 mA. Der Arduino und die meisten Laptop-USB-Ports liefern das nicht. Eine externe 5V-Stromquelle mit mindestens 1 A ist nötig. Verbinde VCC der Matrix direkt mit der externen Stromversorgung statt über den Arduino – das ist die empfohlene Vorgehensweise. Der negative Anschluss (GND) muss gemeinsam mit dem Arduino-GND verbunden sein.

4. Software-Installation: Die LedControl-Bibliothek

Die LedControl ist eine Arduino-Bibliothek für MAX7219 und MAX7221 LED-Display-Treiber. Sie ist anfängerfreundlich und gut dokumentiert. Später kannst du zu erweiterten Bibliotheken wie MD_Parola aufsteigen.

4.1 Installation im Arduino IDE

Folge diesen Schritten, um die Bibliothek zu installieren. Der Arduino IDE Library Manager macht das einfach:

  1. Öffne die Arduino IDE
  2. Gehe zu Sketch → Bibliothek einbinden → Bibliotheken verwalten
  3. Suche nach „LedControl
  4. Installiere die Version von Evilynux (oder der neuesten stabilen Version)
  5. Warte, bis die Installation abgeschlossen ist – fertig!

Danach kannst du LedControl in deinen Sketches mit #include <LedControl.h> einbinden.

4.2 Erste Beispiel-Programmierung

Hier ist ein einfaches Programm, das die Matrix aufwärmt und die LEDs einzeln aufblinken lässt:

#include <LedControl.h>

// DIN = Pin 11, CLK = Pin 13, CS = Pin 10
LedControl lc = LedControl(11, 13, 10, 1); // 1 = eine Matrix

void setup() {
  // Matrix aufwecken (ist standardmäßig im Sparmodus)
  lc.shutdown(0, false);
  
  // Helligkeit auf mittleres Niveau (0-15)
  lc.setIntensity(0, 8);
  
  // Matrix löschen
  lc.clearDisplay(0);
}

void loop() {
  // Alle LEDs nacheinander aufblinken
  for (int row = 0; row < 8; row++) {
    for (int col = 0; col < 8; col++) {
      lc.setLed(0, row, col, true);  // LED einschalten
      delay(100);
      lc.setLed(0, row, col, false); // LED ausschalten
    }
  }
}

Dieser Code schaltet alle 64 LEDs der Reihe nach an und aus. Das ist eine gute erste Übung, um zu sehen, dass alles funktioniert.

5. Muster und Symbole anzeigen

Statt einzelne LEDs zu kontrollieren, kannst du auch ganze Reihen oder vordefinierte Byte-Muster anzeigen. Das ist schneller, sauberer und verbraucht weniger Rechenleistung.

5.1 Reihen mit Byte-Mustern setzen

Mit der setRow()-Funktion kannst du 8 LEDs einer Reihe auf einmal steuern – jedes Bit (0 oder 1) im Byte steht für eine LED:

#include <LedControl.h>

LedControl lc = LedControl(11, 13, 10, 1);

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
}

void loop() {
  // Ein lächelndes Gesicht anzeigen
  byte smile[8] = {
    B00111100, // Reihe 0
    B01000010, // Reihe 1
    B10100101, // Reihe 2
    B10000001, // Reihe 3
    B10100101, // Reihe 4
    B10011001, // Reihe 5
    B01000010, // Reihe 6
    B00111100  // Reihe 7
  };

  // Alle 8 Reihen setzen
  for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, smile[i]);
  }

  delay(2000); // 2 Sekunden halten

  // Ein trauriges Gesicht
  byte sad[8] = {
    B00111100,
    B01000010,
    B10100101,
    B10000001,
    B10011001,
    B10100101,
    B01000010,
    B00111100
  };

  for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, sad[i]);
  }

  delay(2000);
}

Dieser Code zeigt abwechselnd ein lächelndes und ein trauriges Gesicht an.

5.2 Byte-Muster verstehen

Das B00111100-Format heißt „Binary Literal“ – eine direkte Binärdarstellung in Arduino. Jede 0 oder 1 steht für eine LED: 1 = an, 0 = aus. Ein paar Beispiele:

  • B11111111 = alle 8 LEDs der Reihe leuchten
  • B10000001 = nur erste und letzte LED leuchten
  • B00000000 = keine LED leuchtet
  • B01010101 = abwechselnd jede zweite LED leuchtet (Muster)

Mit etwas Kreativität kannst du damit einfache Symbole wie Pfeile, Herzen oder Sterne gestalten.

6. Text und Laufschrift mit MD_Parola

Für fortgeschrittene Effekte wie Laufschrift oder automatisch generierte Zeichen gibt es die MD_Parola-Bibliothek. Sie ist spezialisiert auf LED-Matrix-Text-Anzeigeeffekte und bietet Funktionen zum Vereinfachen der Implementierung von Text-Spezialeffekten. MD_Parola hat eine Abhängigkeit von der MD_MAX72xx Arduino-Bibliothek, die die Hardware-Funktionen der LED-Matrix implementiert.

Für PWM-Effekte und unterschiedliche Helligkeitsstufen kannst du auch auf Fade-Techniken zurückgreifen, die zum Dimmen von LEDs verwendet werden.

6.1 MD_Parola und MD_MAX72xx installieren

Du benötigst zwei Bibliotheken:

  1. Erste Bibliothek: MD_MAX72xx
    • Öffne Arduino IDE → Sketch → Bibliothek einbinden → Bibliotheken verwalten
    • Suche nach „MD_MAX72xx
    • Installiere die Version von MajicDesigns
  2. Zweite Bibliothek: MD_Parola
    • Suche nach „MD_Parola“ im Library Manager
    • Installiere auch diese von MajicDesigns

Nach der Installation kannst du beide Bibliotheken verwenden.

6.2 Einfache Laufschrift

Hier ein Beispiel, das Text von rechts nach links über die Matrix scrollt:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Hardware-Typ: GENERIC_HW für Standard-Module
#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
#define MAX_DEVICES 1 // 1 = single 8x8 matrix
#define CS_PIN 10

MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
  myDisplay.begin();
  myDisplay.setIntensity(8); // Helligkeit 0-15
  myDisplay.displayClear();
}

void loop() {
  myDisplay.setTextAlignment(PA_CENTER);
  myDisplay.print("HALLO!");
  delay(2000);
  
  myDisplay.displayClear();
  delay(500);
}

Mit MD_Parola in Kombination mit der MD_MAX72XX Arduino-Bibliothek wird die Anzeige von scrollendem Text und anderen Animationen super einfach.

Hinweis zu Hardware-Typen: Das HARDWARE_TYPE kann je nach Modul unterschiedlich sein – häufig sind GENERIC_HW oder FC16_HW, je nachdem, ob die LEDs anders verdrahtet sind. Wenn der Text falsch angezeigt wird, probiere einen anderen Typ.

7. Mehrere Matrizen hintereinander schalten

Wenn du mehr als ein Modul anschließen möchtest, verbindest du die Output-Pins des vorherigen Breakout-Boards mit den Input-Pins des neuen Moduls. Die Pin-Namen sind normalerweise mit IN und OUT gekennzeichnet.

Verbinde DOUT des ersten Moduls zum DIN des zweiten, und teile die CLK- und CS-Leitungen über alle Module. VCC und GND werden parallel verbunden. Die Daten verschieben sich durch jeden Chip der Reihe nach – wenn du 16 Bits sendest, nimmt der erste Chip sie, beim nächsten Datensatz verschieben sich diese zum zweiten Chip.

Im Code brauchst du nur eine kleine Änderung. Statt den vierten Parameter (die Anzahl der Module) auf 1 zu setzen, erhöhst du ihn:

// Für 4 hintereinandergeschaltete Matrizen:
LedControl lc = LedControl(11, 13, 10, 4); // 4. Parameter = 4 Module

// Dann kannst du auf alle Matrizen zugreifen:
lc.setRow(0, 0, B11110000); // Matrix 0
lc.setRow(1, 0, B00001111); // Matrix 1
lc.setRow(2, 0, B10101010); // Matrix 2
lc.setRow(3, 0, B01010101); // Matrix 3

Jede Matrix bekommt eine eindeutige Adresse (0, 1, 2, 3, …), die du im Code verwendest, um auf sie zuzugreifen.

8. Häufige Anfängerfehler

Hier sind ein paar typische Probleme und ihre Lösungen:

  • Nicht genug Strom: Wenn alle LEDs gleichzeitig leuchten, kann der Strombedarf mehrere Hundert Milliampere pro Display betragen. Die Arduino-Pins und USB-Anschlüsse können das nicht liefern. Verwende eine externe 5V-Stromversorgung und verbinde GND zwischen Arduino und Stromquelle.
  • Falsche Pin-Verbindungen: Überprüfe dreimal, dass DIN, CLK und CS mit den richtigen Arduino-Pins verbunden sind. Ein falsches Kabel und nichts funktioniert.
  • Modul nicht aufgeweckt: Vergiss nicht, lc.shutdown(0, false) im setup() aufzurufen – sonst bleibt das Display dunkel. Das ist eine häufige Anfängerfalle!
  • Falsche Byte-Reihenfolge: Wenn dein Muster spiegelverkehrt oder gedreht aussieht, versuche, die Bits umzukehren oder die Reihenfolge der Reihen zu ändern. Manchmal sind MAX7219-Module unterschiedlich verdrahtet.
  • Matrix wird nach dem Hochfahren hell: Wenn das Display nicht korrekt angezeigt wird, nachdem es eingeschaltet wurde, versuche, den Prozessor zurückzusetzen. Manchmal können alle LEDs beim Hochfahren kurz aufleuchten und einen Software-Fehler verursachen.

9. Nächste Schritte und Projektideen

Du hast jetzt die Grundlagen! Hier sind ein paar Ideen zum Ausprobieren:

  • Digitale Uhr: Verwende RTC-Module (Real Time Clock) und zeige Stunden und Minuten an. Alternativ kannst du auch eine 7-Segment-Anzeige verwenden, um Werte anzuzeigen.
  • Temperatur-Anzeige: Verbinde einen Temperatursensor wie den DHT11 und zeige Messwerte live an.
  • Musik-Visualizer: Lese Audio-Daten aus und lass LEDs zum Rhythmus pulsieren.
  • Game-Projekt: Baue ein einfaches Pong- oder Snake-Spiel auf der Matrix.
  • Nachrichten-Ticker: Kombiniere mehrere Matrizen und zeige scrollende Nachrichten.

Häufig gestellte Fragen

Kann ich die Matrix an andere Arduino-Pins anschließen?

Ja, absolut! Die Pin-Nummern im Code sind frei wählbar. Die ersten 3 Argumente in der LedControl-Initialisierung sind die Arduino-Pin-Nummern, die mit dem MAX7219 verbunden sind – diese können beliebig gewählt werden. Wenn du DIN an Pin 12, CLK an Pin 9 und CS an Pin 8 anschließt, änderst du einfach den Code: LedControl lc = LedControl(12, 9, 8, 1);. Wichtig: Stelle sicher, dass die Pins nicht von anderen Komponenten genutzt werden.

Wie helle ich die Matrix auf oder ab?

Mit der Funktion lc.setIntensity(address, value), wobei value zwischen 0 (dunkel) und 15 (sehr hell) liegt. Beispiel: lc.setIntensity(0, 15); macht die erste Matrix maximum hell. Du kannst diesen Wert auch während des Betriebs ändern, um z. B. auf Bewegung zu reagieren.

Warum funktioniert die Scroll-Bibliothek MD_Parola nicht richtig?

Die MD_MAX72xx Bibliothek unterstützt verschiedene Hardware-Typen – die Module sind im Grunde identisch, nur die Art, wie die LED-Matrix mit dem MAX7219 verdrahtet ist, unterscheidet sich. Dies wird in der Software berücksichtigt, wenn du den richtigen Hardware-Typ auswählst. Es gibt verschiedene Typen: PAROLA_HW, GENERIC_HW, ICSTATION_HW und FC_16_HW. Wenn die Schrift falsch scrollt oder spiegelverkehrt ist, probiere einen anderen HARDWARE_TYPE im Code. Die richtige Einstellung ist oft eine einfache Trial-and-Error-Übung.

Kann ich mehrere verschiedene Symbole hintereinander zeigen?

Ja, klar! Speichere mehrere Byte-Arrays (wie die smile– und sad-Beispiele oben) und wechsle zwischen ihnen in einer Schleife oder mit if-Bedingungen. Du kannst auch ein größeres Array mit mehreren Bildern erstellen und mit einer Schleife durch die Bilder iterieren.

Wie viele Matrizen kann ich hintereinander schalten?

Ein einzelner MAX72XX LED-Treiber kann 64 LEDs steuern. Die LedControl-Bibliothek unterstützt bis zu 8 hintereinandergeschaltete MAX72XX-Treiber, was 512 LEDs insgesamt bedeutet – für die meisten Projekte mehr als ausreichend. Theoretisch kannst du mehr verketten, aber ab etwa 10 Modulen können Spannungsabfälle zu Anzeigefehlern führen.

Welche Arduino-Boards funktionieren mit MAX7219?

Die LedControl-Bibliothek wurde ursprünglich für 8-Bit AVR-basierte Arduino-Boards geschrieben. Da der Code aber keine speziellen Prozessor-Funktionen nutzt, sollte sie auf jedem Arduino(-ähnlichen) Board funktionieren, das die pinMode() und digitalWrite() Funktionen unterstützt. Das bedeutet: Arduino Uno, Nano, Mega, Leonardo – alle funktionieren.


Dieser Beitrag wurde mit KI-Unterstützung erstellt und redaktionell geprüft. Er kann dennoch einzelne Fehler enthalten.

Schreibe einen Kommentar