Lenze Umrichter


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


LED-Matrix 8x8 mit Maxim 7219 und Arduino Nano


Eine LED-Matrix kann man problemlos mit dem Maxim 7219 - Treiber in Form eines fertigen Moduls erwerben. In der folgenden Schaltung verzichten wir auf diese bequeme Lösung und verdrahten die beiden Komponenten, Matrix und den Treiber, selbst. Zum Einsatz kommt die 8x8-LED-Matrix 1088AB. Damit es etwas schwieriger wird, setzen wir gleich zwei solche Anzeigen ein. Bei der Matrix handelt es sich um eine LED-Matrix mit gemeinsamer Kathode. Sie hat 16 Anschlüsse und Farbe blau.

Matrix 1088AB

LED-Matrix 1088AB


Möchte man eine solche Matrix direkt von Arduino (hier Arduino Nano) ansteuern, müsste man für diese Aufgabe ganze 16 Pins opfern. Das ist definitiv zu viel, diese Aufgabe übernimmt der Treiber MAX 7219. Für Bildung von Buchstaben, Ziffern und anderen Zeichen stehen insgesamt 64 LEDs zur Verfügung. Die interne Verschaltung der Leuchtdioden mit Pin-Bezeichnungen zeigt folgendes Bild:

Schaltplan intern

Interne Verschaltung der Leuchtioden bei der Matrix 1088AB


Der integrierte Baustein MAX7219, der der Matrix vorgeschaltet wird, erledigt gleich mehrere wichtige Aufgaben. Um MAX7219 anzusteuern, werden lediglich drei Leitungen benötigt. Verglichen mit 16 Leitungen, die bei direkter Steuerung nötig wären, ist das ein großes Ersparnis. MAX7219 erledigt für uns auch das Problem der Widerstände, wodurch der Verdrahtungsaufwand geringer ausfällt. Und schließlich erledigt er für uns das Multiplexing. Dadurch wird der Mikrocontroller zusätzlich stark entlastet und man braucht weniger Programmierungsaufwand. Man kann mehrere Bausteine hintereinanderschalten (kaskadieren). Diese Eigenschaft wird in der Schaltung verwendet, da zwei Bausteine zum Einsatz kommen. Schließlich kann man mit dem IC die Helligkeit der LEDs einstellen. MAX7219 hat 24 Anschlüsse und arbeitet mit 5V.

Maxim 7219

Maxim 7219


Die Hauptsteuerung übernimmt in dem Fall Arduino Nano. Das kleine Board hat eine Länge von 45 mm und eine Breite von 18 mm.

Arduino Nano

Arduino Nano (Nachbau)


MAX7219 empfängt die Daten am Pin 1. Es werden insgesamt 16 Bit übertragen. Diese Daten kann der Baustein über den Pin 24 weiterreichen. Es können mehrere Bausteine hintereinander angeschlossen werden. Die Kaskade in dem Beispiel besteht aus zwei Bausteinen. Mit den Widerständen R1 und R2 wird die maximale Helligkeit der LEDs festgelegt.

Schaltplan

Schaltplan zum Versuch (Arduino ohne USB-Anschluss: Vin > 6 V)


Testschaltung

Aufgebaute Testschaltung


In dem Programm (Arduino Sketch) kommt die Bibliothek LedControl.h zum Einsatz. Mit ihr stehen einige Befehle zur Verfügung, die das Ansprechen von MAX7219 erleichtern. Man kann einzelne LEDs, LED-Reihen oder LED-Spalten direkt ansteuern. Auch weitere Funktionen stehen zur Verfügung. Weitere Infos unter:
https://github.com/wayoda/LedControl
Die Bibliothek wurde für die ICs MAX7219 und MAX7221 entwickelt.

// ----------------------------------------------------------
// Arduino steuert 2 LED-Treiber Max 7219
// mit LED-Matrix 1088AB (8x8)
// ----------------------------------------------------------

#include "LedControl.h"

LedControl lc=LedControl(2,4,3,2); 

         // -------------------------------------------------
         // LedControl (DIN, CLK, CS, Anzahl) / Anschlüsse
         // lc.shutdown (Adresse, Status) / Modus
         // lc.setIntensity (Adresse, Wert) / Helligkeit
         // lc.clearDisplay (Adresse) / Löschen
         // lc.setRow (Adresse, Reihe, Byte) / Led-Reihe
         // lc.setColumn (Adresse, Reihe, Byte) / Led-Spalte
         // -------------------------------------------------

byte BitReihe = B11111111;
byte BitReiheH = B00000000;
bool Bit;

byte R[] =
{ B01111000, B01000100, B01000100, B01111000,
  B01100000, B01010000, B01001000, B01000100
};

// ----------------------------------------------------------
void setup() {
  lc.shutdown(0,false); 
  lc.shutdown(1,false);
  lc.setIntensity(0,8); 
  lc.setIntensity(1,8);  
}

// ----------------------------------------------------------
void Spalten () {
  BitReihe = B11111111;
  for (int i=0; i<8; i++) {
    lc.clearDisplay(0);
    lc.clearDisplay(1);
    lc.setColumn(0,i,BitReihe); 
    lc.setColumn(1,7-i,BitReihe);
    delay (100); 
  }
  for (int i=7; i>-1; i--) {
    lc.clearDisplay(0);
    lc.clearDisplay(1);
    lc.setColumn(0,i,BitReihe); 
    lc.setColumn(1,7-i,BitReihe);
    delay (100); 
  }  
}

// ----------------------------------------------------------
void Reihen () {
  for (int i=0; i<8; i++) {
    BitReihe = B11111111;
    lc.clearDisplay(0);
    lc.clearDisplay(1);
    lc.setRow(0,i,BitReihe); 
    lc.setRow(1,7-i,BitReihe);
    delay (100); } 
}

// ----------------------------------------------------------
void Rconst () {
  lc.clearDisplay(0);
  lc.clearDisplay(1);
  for (int i=0; i<8; i++) {
    lc.setRow(0,i,R [i]); 
    lc.setRow(1,7-i,R [i]); } 
  delay (1000);
}

// ----------------------------------------------------------
void Rinvert () {
  lc.clearDisplay(0);
  lc.clearDisplay(1);
  for (int i=0; i<8; i++) {     
    for (int j=0; j<8; j++) {   
      BitReihe = B00000000;
      BitReiheH = R[j];
      for (int k=0; k<=i; k++) {        
        Bit = bitRead (BitReiheH, k); 
        bitWrite (BitReihe, 7-k, Bit); }        
      lc.setRow(0, j, BitReihe); 
      lc.setRow(1, 7-j, BitReihe);
      } } 
  delay (1000);
}

// ----------------------------------------------------------
void Rscroll () {
  lc.clearDisplay(1);
  for (int i=0; i<15; i++) {      
    for (int j=0; j<8; j++) {    
      BitReihe = B00000000;
      BitReiheH = R[j];
      for (int k=0; k<8; k++) {        
        Bit = bitRead (BitReiheH, k); 
        bitWrite (BitReihe, i-7+k, Bit); }        
      lc.setRow(0, j, BitReihe); }    
    delay(200); } 

  lc.clearDisplay(0);
  for (int i=14; i>-1; i--) {      
    for (int j=0; j<8; j++) {    
      BitReihe = B00000000;
      BitReiheH = R[j];
      for (int k=0; k<8; k++) {        
        Bit = bitRead (BitReiheH, k); 
        bitWrite (BitReihe, i-7+k, Bit); }        
      lc.setRow(1, j, BitReihe); }    
    delay(200); }    
}

// ----------------------------------------------------------
void loop() {
    Spalten ();
    Reihen ();
    Rconst ();
    Rinvert ();
    Rscroll ();
}        

Kurzvideo

Kurzvideo


Weitere Themen:



Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz