Allgemein, GPIO, Projekte

Raspberry Pi Bibliothek für mehrzeilige m x n MAX7219 LED Matrizen

In diesem Tutorial zeige ich die Benutzung und eine Demo des Treibers für mehrzeilige MAX7219 Matrizen, welchen ich geschrieben habe.Mit dieser Bibliothek lassen sich verschiedene aneinander gesteckte quadratische Matrizen als ein ganzes Modul steuern und u.a. Texte und sogar Bilder darauf projezieren.



Meine Bibliothek ist eine erweiterte und verbesserte Version von JonA1961’s MAX7219array (https://github.com/JonA1961/MAX7219array)

 

Übersicht

 

Zubehör

Beim Kauf von MAX7219 Matrizen, solltest du darauf achten, dass diese quadratisch sein müssen.

In diesem Artikel zeige ich wie man eine MAX7219 LED Matrix zusammenlötet.

 

Vorbereitung

Um die LED Matrizen einwandfrei nutzen zu können, muss die python spi Bibliothek installiert sein. Falls dies bereits geschehen ist, kannst du diesen Schritt überspringen.

Falls nicht, empfehle ich den ersten Teil dieses Artikels, in dem die Installation beschrieben ist:
http://www.100randomtasks.com/simple-spi-on-raspberry-pi

 

Aufbau der Raspberry Pi LED Matrizen

Nachdem du alle Matrizen zusammengelötet hast, müssen sie noch verbunden werden. Damit die Darstellung mittels des Treibers korrekt ist, ist es wichtig sie wie auf den Bildern unten zu verkabeln. Die erste Matrix ist von vorne gesehen unten links, die folgenden darüber. Wenn die Spalte gefüllt ist, kommt die nächste Matrix in die Spalte rechts daneben nach unten, die folgenden wieder darüber usw. Die Enden der Spalten kannst du mit Jumperkabeln verbinden, die aneinander liegenden mittels kleinen Jumpern.

 

20140801_145824
Vorderseite (Matrizen sind nummeriert)
 

back
Rückseite (Jumper Kabel von Matrix 1 geht zum RaspberryPi)
 

Jede Matrix hat folgende Pins:

Rechts: CLK – CS – DIN – GND – VCC

Links: CLK – CS – DOUT – GND – VCC

Der DOUT Pin der vorherigen Matrix wird mit dem DIN der folgenden Matrix verbunden.  Die anderen Pins werden entsprechend ihres Namen miteinander verbunden.

Die Pins der ersten Matrix gehen wie folgt mit dem Pi verbunden:

board
 

LED Matrix Bibliothek installieren

Zum einfachen download meiner Bibliothek habe ich ein GitHub Repo angelegt, was das installieren sehr einfach macht (der github client sollte natürlich installiert sein):

git clone https://github.com/tutRPi/multilineMAX7219.git && cd multilineMAX7219

In diesem Ordner sind nun zwei wichtige Dateien:

multilineMAX7219.py – Die eigentliche Hauptdatei, welche alle Funktionen enthält

multilineMAX7219_fonts.py – Diese Datei enthält die Buchstaben und Zeichen der Schriften. Falls du eine neue Schriftart hinzufügen willst, füge sie in dieser Datei hinzu.

 

Es ist wichtig die multilineMAX7219.py Datei (Zeile 113/114) zu bearbeiten und deine Größe in MATRIX_WIDTH und MATRIX_HEIGHT einzutragen.

 

Demo Code – 8×8 LED Matrix

Um eine Demo laufen zu lassen, gib folgendes ein:

python multilineMAX7219_demo.py

Hier sind einige Effekte und Funktionen demonstriert.

 

Ich habe vor allem einen Schwerpunkt auf die Graphikfunktionen gelegt und daher auch einen Editor zum „Bilder zeichnen“ erstellt, welche du sehr einfach mit der Bibliothek visualisieren kannst.

Die Seite mit dem Editor gibt’s hier.

Wie du siehst ist der Code des Raspberry Pi Logos bereits vorgegeben (auf 3×3 Matrizen). Mit Python kann es auch eingefügt werden:

logo = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0],[0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0],[0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1],[0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1],[0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1],[0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1],[0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0],[1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0],[1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0],[1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0],[1,0,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0],[1,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,0],[1,1,0,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1,0,1,0,0,1,0],[0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,0,1,0],[0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1],[0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1],[0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,0,1],[0,0,1,1,0,0,1,0,0,0,0,0,1,0,0,1,1,1,1,0,0,0,0,1],[0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,1,0],[0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,1,0],[0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

Und nun kann es gezeichnet werden.

LEDMatrix.gfx_sprite_array(logo)
LEDMatrix.gfx_render()

Für mehr Details schau am besten in die  multilineMAX7219_demo.py Datei und in multilineMAX7219.py wo alle Funktionen beschrieben sind.

 

Hier noch ein Beispiel Video (nur eine verkleinerte Version der Demo Datei):




70 Kommentare

  1. Andreas sagt:

    Frage: Wie viele von den LED-Matrizen kann man problemlos direkt an den RPI anschließen?
    P.S. Ein wirklich klasse Tutorial! Danke

    • Felix sagt:

      Ich hatte 15 Module (3×5) getestet, was kein Problem darstellte. Im Prinzip sind unendlich viele möglich, wobei der Spannungsabfall natürlich beachtet werden muss.

    • Andreas sagt:

      Vielen Dank. Ich dachte nur, weil in irgendeinem anderen Artikel von einer notwendigen externen Spannungsquelle die Rede ist.

    • Felix sagt:

      Die von mir verwendeten Module brauchen 5V Eingangsspannung, sind also problemlos ohne externe Spannungsquelle betreibbar. Ab einer gewissen Anzahl (konnte ich leider noch nicht testen, wie viele genau) ist eine zusätzliche Spannungsquelle nötig. Größere Module (z.B. 32x16LEDs) werden i.d.R. nicht direkt vom Pi versorgt.

    • Andreas sagt:

      Also sollten meine 1×4 Module funktionieren 😀
      Noch eine andere Frage: Geht Ihr Editor für Matrix-Graphiken noch (bei mir geht er nicht; vielleicht falscher Browser)

    • Andreas sagt:

      Ok hat sich schon erledigt, bei Chrome funktioniert es nicht, dafür aber bei Firefox 🙂

  2. Andreas sagt:

    So, ich habe jetzt ein weiteres Problem:
    Nach dem Zusammenlöten wird jetzt beim Programmstart nur wirres Zeug angezeigt. Woran könnte das liegen?

    • Felix sagt:

      Was wird genau angezeigt und vor allem was hast du ausgeführt?

    • Andreas sagt:

      Ich habe die multiline7219_demo.py ausgeführt. Das Resultat ist Folgendes:
      https://goo.gl/FEpqWT
      Liegt das an den Lötstellen?

    • Felix sagt:

      Ja, das sieht sehr nach unsauberen Lötstellen aus. Bei den MAX7219 IC ist es gar nicht so einfach die Kontakte sauber zu verlöten. Du kannst aber auch jedes einzeln auf Funktionalität prüfen (benutze dafür am besten die Bibliothek, die ich hier vorstelle)

  3. Andreas sagt:

    So, ich habe jetzt die Lötstellen überprüft. Allerdings hat sich das Problem noch nicht gelöst. ich glaube aber kaum, dass es an den Lötstellen liegt, da es bei jeder Matrix gleich aussieht.
    Also habe ich eine Frage: was wird bei Ihnen angezeigt, wenn Sie nur eine Spannung anlegen und die Datenverbindung unberührt lassen?

    Viele Grüße
    Andreas

    • Felix sagt:

      Das weiß ich nicht mehr hundert prozentig, ich bin mir aber relativ sicher, dass beim Anlegen der Spannung die Matrizen alle schwarz waren/nichts angezeigt wurde.
      Was wird denn nach dem initialisieren (blank) angezeigt?

    • Andreas sagt:

      Ok, jetzt bekomme ich langsam Angst…
      Ich probiere jetzt schon seit 1 1/2 Stunden rum, schreibe dann einen Kommentar, und dann funktioiert es plötzlich mit dem gleichen Aufbau…

      Ich melde mich wieder, wenn es nicht mehr geht 😀

      Viele Grüße und einen entspannten Sonntag ohne nervige Kommentare

      Andreas

    • Felix sagt:

      Merkwürdig 😀 Klingt ein bisschen nach einem Wackelkontakt.

  4. Raphael Rühl sagt:

    Bei welchem deutschen Shop bekomme ich die LED Matrixen?
    Die Lieferzeiten bei dem angegebenen sind mir zu lange.

    • Felix sagt:

      Weiß ich nicht, ich habe leider keinen gefunden, der die quadratischen Matrizen liefert. Musste auf meine ca. 20 Module 2-3 Wochen warten.

  5. Rico sagt:

    Hallo,

    ich habe Probleme mit der Darstellung von Umlauten.

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    stdout_encoding = sys.stdout.encoding or sys.getfilesystemencoding()
    text="ÄÄÖÖÜÜ"
    print text.decode("utf-8").encode(stdout_encoding)
    LEDMatrix.scroll_message_horiz([text.decode("utf-8").encode(stdout_encoding)], 1, 6, DIR_L, CP437_FONT)
    

    Der Print-Befehl klappt wunderbar, in der Konsole werden die Umlaute korrekt angezeigt. Auf der LED-Matrix dagegen wird allerdings jeweils nur ein kryptisches Symbol für den Buchstaben angezeigt. Es macht keinen Unterschied ob mit oder ohne Umwandlung (ich habe schon diverses ausprobiert). Woran kann das liegen?

    • Rico sagt:

      Eckige Klammern werden hier als Befehl zum durchstreichen interpretiert 🙂 Darin stand, dass ich natürlich auch sämtliche Importe gemacht habe (inklusive Fonts).

    • Felix sagt:

      Sind die Umlaute in der FONT Datei enthalten? Wenn ja versuch sie mal mittels des Index zu laden. Falls nicht kannst du auch einfach einen zusätzlichen Eintrag erstellen und die Umlaute selbst definieren. Mit decode wird das aber nicht klappen, vermute ich (das erstellt „kryptische Zeichen“, die dann anders interpretiert werden).

  6. Rico sagt:

    Bin ein ziemlicher Noob in der Programmierung solcher Dinge. Kannst du mir ein Beispiel für so ein Laden mittels Index geben? Das Problem ist: Die Verwendung des Umlauts (und anderer Zeichen) soll möglichst ohne aufwendige Konvertierung etc. funktionieren.
    Ziel ist: Über ein Textfeld einer php-Page einen String an ein python-Script zu senden, der dann über die LED-Matrix ausgegeben wird. Das habe ich auch schon hinbekommen, nur eben mit den Sonderzeichen klappt’s nicht. Nun wollte ich auf unterster Ebene anfangen, aber selbst das funktioniert schon nicht. Die Umlaute sind in der fonts-Datei enthalten
    [ 0x79, 0x7D, 0x16, 0x12, 0x16, 0x7D, 0x79, 0x00 ], # 0x8E (Ä)
    [ 0x01, 0x19, 0x3C, 0x66, 0x66, 0x3C, 0x19, 0x01 ], # 0x99 (Ö)
    [ 0x3D, 0x7D, 0x40, 0x40, 0x7D, 0x3D, 0x00, 0x00 ], # 0x9A (Ü)
    werden aber trotzdem falsch dargestellt. Beim Ansteuern über den entsprechenden Unicode-Wert (z.B. 0x99 für Ö) wird der Buchstabe korrekt dargestellt, nur eben nicht als einzelner String in einer Zeichenkette.
    Wäre super, wenn du mir da weiterhelfen könntest

    • Felix sagt:

      Hast du mal versucht die Library zu verändern und # -*- coding: utf-8 -*- an den Anfang zu schreiben? Ich habe damals Unicode nicht berücksichtigt/getestet. Btw. 0x8E ist nicht der Unicode für „Ä“, sondern 0xC4 (dezimal 196). Die Abfrage führt über ein Array und ord() des characters. Falls du decode benutzt werden mehrere chars erstellt und es kommt nichts richtiges bei raus.

  7. Rico sagt:

    Habe ich gemacht, hat aber leider nichts geändert. Das mit dem Decode war auch nur ein Ansatz zur Lösung des Problems. Wie du aber schon sagst, bringt es mich nicht weiter. Das kann doch nicht so schwer sein, einen Umlaut da durchscrollen zu lassen?!

    • Felix sagt:

      Ich müsste mir das mal genauer ansehen, habe aber in den nächsten Wochen kaum Zeit. Wenn du willst kannst du deine Skripte mal irgendwo hochladen und verlinken. Ich kann sie mir ansehen, sobald ich mehr Zeit finde.
      LG Felix

  8. Rico sagt:

    Das wär super, allerdings habe ich an den Standard-Skripten (Library und Fonts) nichts großartig geändert, außer dass ich wie gefordert die Anzahl der Matrizen geändert habe (zwei horizontal angeordnete).
    Das Mini-Skript zum probieren habe ich ja quasi schon gepostet:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import multilineMAX7219 as LEDMatrix
    from multilineMAX7219_fonts import CP437_FONT, SINCLAIRS_FONT, LCD_FONT, TINY_FONT
    from multilineMAX7219 import DIR_L, DIR_R, DIR_U, DIR_D
    from multilineMAX7219 import DIR_LU, DIR_RU, DIR_LD, DIR_RD
    from multilineMAX7219 import DISSOLVE, GFX_ON, GFX_OFF, GFX_INVERT
    import time
    import sys
    
    LEDMatrix.init()
    
    text="ÄÄÖÖÜÜ"
    
    LEDMatrix.scroll_message_horiz([text], 1, 6, DIR_L, CP437_FONT)
    
    exit(0)

    Ich weiß nicht, wo der Fehler liegt. Auch wenn er wahrscheinlich total simpel und offensichtlich ist…

  9. Holger sagt:

    Hallo zusammen,

    ich habe 6 Matrizen nebeneinander. Dies funktioniert soweit und in der multilineMAX7219.py ist auch 6 und 1 eingetragen. Änder ich das nun auf 7 und 1 Matritzen und hänge eine 7. dazu spielt das ganze verrückt. Es funktionieren dann teilweise nur die ersten 3. Ich habe schon durchgetauscht ud ausgetauscht. Immer ab der 7.

    Jemand eine Idee was das sein könnte. Einzeln funktioniert auch jede.

    Gruß
    Holger

    • Felix sagt:

      Bei welchen Befehlen tritt das auf? Da ich mehr als 7 Matrizen (3×3 bzw. inzw 4×4 bzw 3×5) verwendet und getestet habe, kann ich ausschließen, dass es an der Datenübertragung liegt (siehe Video). Falls du 8 Matrizen hast, kannst du mal zwei Reihen je 4 Matrizen versuchen?

    • Holger sagt:

      Hi Felix,

      ja das kann ich mal testen. Was auch komisch ist, dass ich immer erst mal sudo python matrix_test.py aufrufen muss. Erst danach kann ich z.B. sudo python multilineMAX7219_demo.py aufrufen und wird korrekt angezeigt.

      Gruß
      Holger

  10. Holger sagt:

    So, hab noch ein wenig gebastelt. 4×2 funktioniert auf Anhieb. Gleiche Matritzen umgesteckt auf 8×1 spinnt das ganze total rum. Ja, ich habe auch die Einstellung in der multilineMAX7219.py angepasst 🙂

    Ich habe leider nicht so viele Female-Female Kabel, dass ich die einmal durchtauschen könnte. Mir fällt im Moment nix ein woran es liegen könnte.

    Gruß
    Holger

    • Holger sagt:

      Hallo zusammen,

      ich wollte auch mal einen Status geben zu meinem Problem, dass bei einer Kombination von 8×1 das ganze rumspinnt, 5×2 aber z.B. problemlos funktioniert.
      Da mir mit der Zeit die Jumperkabel ausgingen wurde ich immer stutziger ob das Problem nicht vielleicht damit zu tun. Nachdem ich nun alle Jumperkabel durch kurze gelötete Verbindungen ersetzt habe funktioniert derzeit sogar 9×1 ohne Probleme.

      http://imgur.com/a/M2irQ

      Gruß
      Holger

  11. Frak sagt:

    Hallo,
    erst einmal vielen Dank für die trefflichen Anleitungen.

    Bin gerade dabei eine größere Matrix zu schalten. Mit einem Modul klappt funtioniert alles toll, Laufschrift, Muster etc.

    Jedoch ist auf Deinem Foto der Rückseite der 9er Matrix die Anordnung der N1/N2/N3/N4 Jumper nicht genau zu erkennen. Kannst Du vielleicht die Schaltung etwas detaillierter angeben.

    Wäre super, Danke

    • Felix sagt:

      Wenn du auf das Bild klickst, vergrößert es sich. P1 muss immer an P2. Sprich alle müssen in der selben Richtung aufgestellt sein.

  12. Frak sagt:

    Danke für die schnelle Antwort. Die Verbindungen habe ich schon, bin mir nuit nicht sicher wie ob es einen Jumper über N1/N2 und N3/N4 und N1/N3 und N2/N4 zur Verbindung der Matrix-Module 1-2-5-4 / 2-3-6-5 / 4-5-8-7 / 5-6-9-8 gibt.

    Oder verstehe ich da was falsch???

  13. Sebastian sagt:

    Hi,

    da ich noch nicht viel Erfahrung mit dem Löten habe, habe ich mir vor kurzem eine schon zusammengebaute Komponente mit 4*4 LED Modulen (quadratisch 8×8) beim Fachhändler bestellt.

    Bei dem Demo-Programm gibt es allerdings ein Problem: Es scheint so, als wäre die Reihenfolge der einzelnen LED Module nicht richtig. Bei Schriftzügen wird die Schrift von rechts nach links angezeigt und auch bei Animationen über mehrere Matrizen hinweg entstehen nicht nachzuvollziehende „Muster“

    Muss ich außer Länge und Breite der Anzeige noch irgendwo etwas einstellen?

    • Felix sagt:

      Hi Sebastian,
      ich weiß nicht welche Komponenten du verwendest, aber es kann durchaus sein, dass meine Bibliothek nicht (komplett) kompatibel mit diesen ist, da ich sie nur für die verlinkten Module geschrieben habe.

    • Sebastian sagt:

      Hi Felix,
      danke für die schnelle Antwort. Es handelt sich um die auch von dir benutzten Max 7219 Module. Der einzige Unterschied ist, dass sie auf einer großen Platine bereits zusammengefügt sind.

      http://eckstein-shop.de/3232-Dot-Matrix-Module-LED-Display-Drive-Module-MAX7219

      Das sollte eigentlich funktionieren oder?

    • Felix sagt:

      Das kann funktionieren – muss aber nicht. Wenn die „falschen“ Kanten aneinander sind, wird es komisch aussehen. Ansonsten kannst du natürlich meine Bibliothek auch so verändern, dass sie auch für deine Matrizen passt. Ich weiß, dass es auch nicht-quadratische Modelle gibt und wenn man diese nebeneinander schaltet, wird es nicht optimal aussehen.
      Ich hab das mal versucht in einem Bild zu veranschaulichen: http://i.imgur.com/K2H9xQ0.png

    • Sebastian sagt:

      Okay, verstehe. Dann bleibt mir wohl nichts anderes übrig als die Bib umzuschreiben.
      Vielen Dank für deine Hilfe 🙂

    • Felix sagt:

      Wenn du möchtest, kannst du die umgeschriebene Version auch gerne hier verlinken, dann haben ggf. auch andere User etwas davon 🙂

  14. Alex sagt:

    Moin,

    eine kurze Frage: Du schreibst oben dass die MAtrizen quadratisch sein _müssen_. Hat das technische Gründe oder meinst Du damit einfach nur, dass Deine Bibliothek nur mit quadratischen funktioniert?
    Was würde passieren wenn ich 5×7-Matrizen nutzen würde?

    • Felix sagt:

      Das war eigentlich anders gemeint 😀 Es gibt nämlich auch 8×8 LED Matrizen, wobei das PCB nicht quadratisch ist. Bei denen kann man keine ebene, verbundene Fläche erstellen.
      Aber ja, meine Bibliothek müsste umgeschrieben werden, wenn du Matrizen mit 5×7 LEDs verwenden willst.

    • Alex sagt:

      OK, dann bin ich beruhigt. Ich hatte schon gedacht meine HArdwarebestellung wäre in den Sand gesetzt. 😉 Dass die Software angepasst werden muss, ist klar.
      Ich würde dann forken und Dir in ein paar Wochen ggf. einen Pull Request schicken wenn Du magst.

    • Felix sagt:

      Kannst du gerne tun 🙂 Nur werde ich es nicht testen können, da ich lediglich 8×8 Matrizen da habe.
      LG Felix

  15. banto sagt:

    Hallo,
    erst mal vielen Dank für die ausführliche Beschreibung.
    Es hat bei mir auf anhieb mit einem Pi3 und einer 4×4 Matrix (16xMAX7219 aus 4 Streifen mit 4 MAX7219) funktioniert. Ich möchte die Punkte einzeln über die Funktion LEDMatrix.gfx_set_px(x,y,GFX_ON) ansprechen, leider sind meine Einzelmodule um 90 Grad gedreht. Gibt es eine Möglichkeit in der Konfiguration das zu korrigieren/einzustellen?
    Ich beutze diese Matrix Streifen http://de.aliexpress.com/item/MAX7219-Dot-Matrix-Module-For-Arduino-Microcontroller-4-In-One-Display-with-5P-Line/32637207300.html?isOrigTitle=true
    Besten Dank.
    VG Banto

    • Felix sagt:

      Hallo Banto,
      kannst du die Module nicht anders anordnen? Da ich nur meine zur Verfügung habe und somit nicht testen kann, müsstest du das selbst im Code ändern (sollte nicht all zu schwer sein).
      PS: Mit diesen sollte das kein Problem sein.
      LG, Felix

  16. Banto sagt:

    Hallo Felix,
    hab mir jetzt eine Funktion dafür geschrieben :-))

    def XY(x,y,onoff):
    	LEDMatrix.gfx_set_px(x,(y/8)*8+7-y%8,onoff)

    Funktioniert prime ist aber sehr langsam. Geht das auch schneller?
    LG
    Banto

    • Felix sagt:

      Ich würde nicht jeden Pixel einzeln setzen, sondern entweder jene write Funktion, die ein Array an Daten auf einmal versendet, verändern oder eben das Array so manipulieren (Bereiche drehen), sodass es für deine Matrizen passt. Damit sollte es schneller sein.
      LG, Felix

  17. Patrick sagt:

    Gibt es eine Anleitung, wie ich eine weitere Spannungsquelle zwischen schalten kann. Also wenn ich jetzt eine sehr große LED Tafel betreiben will, was muss ich da tun?

    Bin ziemlich neu auf dem Gebiet.

    Danke schon einmal!

  18. Florian Schweiger sagt:

    Hallo, muss ich irgendwo angeben, mit welchen GPIO Ports ich die Matrizen ansteuere?
    Bitte um rasche Rückmeldung,
    mgf Florian

  19. Christian sagt:

    Danke für dieses tolle Tutorial und für die bereitgestellte Bibliothek.

    Ich habe trotzdem noch eine Frage:
    Und zwar versuche ich das mit der selben Hardware aber einer anderen Software nachzustellen (C/C++ und WiringPi).
    Hier bin ich allerdings auf ein paar Hindernisse gestoßen und weiß jetzt nicht, wie ich mehrere Matrizen ansteuern kann, OHNE für jede Matrix ein eigenes Chip Select Kabel zum RasPi zu verlegen (man kann auch „normale Pins“ als CS Leitungen verwenden).

    Du hast es jedoch so realisiert, dass es nur ein CS gibt und DIN vom ersten über DOUT auf DIN vom nächsten geht.

    Jetzt meine Fragen :
    Wäre das auch mit C++ und WiringPi möglich ?
    Ist DOUT der letzte Zustand der Matrix, bevor sie über DIN überschrieben wird ?
    Falls nicht: Wie kann man mehrere Slaves (Matrizen) mit SPI über nur ein CS steuern ?

    Mein derzeitiger Code für 2 Matrizen (vereinfacht, ohne Funktionen) :
    Hierzu werden jedoch zwei CS Leitungen benötigt.

    #define CS_0      0
    #define CS_1      1
    
    int main() {
            wiringPiSPISetup(CS_0, 1000000)
            wiringPiSPISetup(CS_1, 1000000)
            uint8_t buf[3];
            zeile    = //...
            wert    = //...
            buf[0] = zeile;                //Zeile  1 .. 8
    	buf[1] = wert;                //Wert 0 (keine LED) bis 255 (alle LEDs der Zeile)
    	wiringPiSPIDataRW(CS_0, buf, 2);        // Read -/ Write Vorgang
            wiringPiSPIDataRW(CS_1, buf, 2);
    }
    • Felix sagt:

      Am besten du schaust dir das Datenblatt vom MAX7219 an. Du brauchst nur einen CS, da DOUT einer Matrix nur die Daten für die folgenden Matrizen enthält.

    • Christian sagt:

      Danke für den Hinweis. Das Datenblatt anschauen war das richtige Stichwort.
      Nur wie kann ich DOUT beeinflussen ?
      Zur Zeit übernimmt DOUT den Wert von DIN einen Schreibzugriff später (so wie ein Schieberegister). Nur lassen sich so eben nicht Bilder oder Schriftzüge auf mehreren Matrizen darstellen. Wie hast du das geschafft ?
      Ich kann zwar kein Python, versuche aber das dann mit C++ nachzustellen.

    • Felix sagt:

      Dadurch, dass ich die Dimensionen der Matrizen kenne (NxM) berechnet meine Bibliothek, welche Matrix was anzeigen muss. Ist etwas Aufwand, sich die Gedanken zu machen, aber du kannst die Funktionen meiner Bibliothek fast 1:! übersetzen. Ich würde mich freuen, wenn du deine Version auch auf GitHub o.ä. teilst, falls andere auch daran interessiert sind 🙂

    • Christian sagt:

      Also wenn du etwas auf z.B. Matrix 4 anzeigen willst, dann clearst du CS (low aktiv), schickst dann die Daten und shiftest 3x mit NO OP, damit die Matrizen 1 bis 3 nichts anzeigen, dann kommt der Delay und man sieht nur etwas auf Matrix 4.
      Habe ich das richtig verstanden ?

    • Felix sagt:

      Nein, der Status aller Matrizen wird gespeichert und bei einer Änderung insgesamt übergeben. Übergibst du nur geshiftete Werte, wären die Matrizen vorher leer.

  20. Kai sagt:

    Hallo zusammen,

    ich habe mir 5 Segmente bestellt. Reicht die Spannungsversorgung vom Pi aus?
    Wenn nein, wie schließe ich das ganze an? Ich habe leider nicht so die Elektrotechnik Skills.

    Danke im voraus
    Kai

    • Felix sagt:

      Ich habe über 9 Module ohne externe Stromversorgung am Pi betrieben. Falls doch notwendig: VCC an extern + und GND an GND vom Pi und Minus Pol der Stromversorgung.

    • Kai Hackl sagt:

      Danke Felix!

      Ich probiere es einfach mal aus. Sie sollten sie Tage in der Post sein.
      Wahrscheinlich ist das ganze etwas fehl am Platz hier, aber hast du schonmal eine einfache Uhr angezeigt? Bzw. ist es Möglich das Skript so umzuschreiben dass man Nachrichten über die Konsole an es schicken kann und falls nicht geschickt wurde eine Uhr angezeigt wird?

      Sorry, kenn mich in Python leider nicht so aus 🙁

      Viele Grüße Kai

    • Felix sagt:

      Hallo Hai,
      schau mal in dem Video, da habe ich eine „Pseudo Uhr“ angzeigt (9 statt 12 Strichen). Wenn die Matrix etwas größer wäre, kann man bestimmt auch eine analoge Uhr anzeigen. Eine Digitaluhr bzw. Nachrichten sind kein Problem.
      LG, Felix

    • Kai sagt:

      Super! Hab das alles hinbekommen.

      Wo es bei mir jetzt etwas klemmt: ich würde gerne auf der ersten anzeige eine grafik anzeigen und die anderen zum anzeigen einer nachricht benutzen. habe in der demo gesehen dass du das mit den raumnummern so ähnlich machst. allerdings bekomme ich es nicht hin dann auf den anderen anzeigen den text anzuzeigen bzw zu scrollen 🙁

      hast du einen tipp für mich wie ich das hinbekomme?

  21. Michael Hoffmann sagt:

    Moin Felix,

    erstmal wirklich cooles Projekt! Ein Kumpel und ich versuchen das Snake Game nachzubauen. Wir sind beide Laien, aber wir hatten einfach mal Lust uns mit einem Raspberry Pi, Python etc zu beschäftigen.
    Auf unserem Raspberry Pi ist Python 3 installiert. Dein Code ist aber für Python 2 oder?
    Jedenfalls haben wir schon die mehrzeilige Matrix zusammengelötet und wollten heute den Testcode abspielen lassen, aber es passierte nichts.
    Müssen wir zu Python 2 wechseln? Oder den Code auf Python 3 anpassen? Hast du vielleicht eine Idee für uns?

    • Felix sagt:

      Hi Michael,
      ich habe den Code für Python2 geschrieben und getestet, allerdings sollte er sehr einfach anpassbar sein, da die meisten Funktionen auch auf Python3 genauso aufrufbar sind. Lediglich die prints etc. müssten ggf. überarbeitet werden.
      LG, Felix

  22. Peter sagt:

    Hallo und vielen Dank für Deine Anleitung,

    Folgende Frage habe ich an Dich, ich habe eine Matrix mit 1×4 Blöcken. Ich habe in Deiner Bibliothek Die Zeilen 113 un 114 in beiden Richtungen versucht zu ändern, sprich;

    height = 1 und width=4 und umgekehrt, aber es klappt nicht einen scrollenden text über die Länge der 4 module hin zu bekommen.

    Hast Du eventuell den entscheidenden Tipp für mich ?

    ich würde einfach nur gerne direkt die Bibliothek aufrufen:

    ./multilineMAX7219.py message [repeats [speed [direction [font]]]]

    Kannst Du mir hierfür ein Besispiel geben ?

    Vielen Dank im voraus / regards Peter

    • Felix sagt:

      Möglicherweise sind deine Matrizen anders angeordnet und somit 90° verschoben. Du musstest sie entweder anders anordnen oder die Bibliothek umschreiben. Ein ähnliches Problem hatte ein User hier, allerdings weiß ich nicht mehr, ob er die angepasste Bibliothek online gestellt hat.

  23. Peter sagt:

    Danke für die prompte Antwort, ich habe diese Matrizen:

    https://www.amazon.de/gp/product/B01BUTAFW2/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1

    Ich habe aber auch den Fehler gelöst, ich benutze die ursprügliche Bibliothek MAX2719 und dort musste ich folgende Parameter setzen:

    device = led.matrix(cascaded = 4)
    device.orientation(90)

    nun funktionirert Textausgabe und Lauftext über die gesamte Breite.

    Wenn ich nun aber noch 3 von diesen Matrizen benutzen wollte um ein 4×4 Array zu haben, würde das dann mit deiner Bibliothe funktionieren ?

    Regards Peter

  24. Björn sagt:

    hallo felix,
    vielen vielen dank dafür dieses anleitung.
    war zwar sehr skeptisch was den chinalieferant betrift von ebay aber die kam echt an, waren 10 stück für 22 euro.. nahja ausgepackt alle einzeln durchgetestet auch keine defekten bei. 9 stück schön sauber und ordentlich nach deinem bild mit heißkleber verklebt und angesteckt. alles nach beschreibung abgearbeitet und ……
    JAWOHLLLLLL es klappt alles so macht es echt spass anleitungen für anfanger nachzumachen wo mal wirklich alles bis ins kleinste beschrieben ist bin auf alle fälle super happy…..
    nahja gut alles geht doch n ich so glatt aber is dahin gestellt inder _demo.py die analoge uhr hat keine zeiger 🙂
    aber nochmals vielen dank dafür

    • Felix sagt:

      Hey Björn,
      freut mich, dass es klappt 🙂
      Bei der Demo erhebe ich keinen Anspruch auf Vollständigkeit – reine Demonstrationszwecke 😀

    • Björn sagt:

      huhu
      spiele jetz schon ne weile mit rum und macht immer noch spass mein sohn hat nun dadurch angefangen zahlen und burchstaben zu lehrnen 🙂

      jedenfals is meine sorge das der pi das ganze nichtso mag
      jedesmal wenn ich den anmache und die 5v noch angeschlossen sind ladet er das os nicht… und zum zweiten habe ich im monitor nach dem ich ein .py script start immer so ein gelben blitz oben rechts nahaj mal permanend mal flackernt

      glaube das kann nicht gut sein achso fals es relevant ist es hängen 9 stück zusammen nachschub wurde bestellt auf 6 x 3 möchte ich kommen
      wenn externe einspeisung nötig ist bitte eine empfehlen weiss nich wirklich auf was ich da achten muss 5v is klar aber amper hmmm
      danke im vorraus und habe eine schöne zeit

    • Felix sagt:

      Ich weiß nicht mehr genau wie viel mA eine LED Matrix braucht, aber denke um die 150 – 200 mA. D.h. dein Netzteil sollte mind. 3-4A liefern können. Du kannst aber auch eines mit mehr Leistung nehmen, wie z.B. in diesem Tutorial, in dem auch der Anschluss beschrieben wird.
      LG, Felix

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!