Heute kam mein Paket…
…mit einem MAX7219 Dot Matrix LED Bausatz an. Diesen Bausatz hatte ich über einen ebay-Shop bestellt.
(MAX7219 Dot Matrix LED Bausatz für 4,90 € inkl. Versand).
Der Bausatz mit einem MAX7219 LED Treiber sowie einem 8*8 Dot Matrix LED Modul enthält alle benötigten Teile und macht insgesamt einen sehr guten Eindruck. Auch der Bestückungsaufdruck ist völlig in Ordnung. Über 4 Bohrungen kann das Modul mit einem Trägerboard verbunden werden. Bei genauerer Betrachtung stellte sich allerdings heraus, dass auf dem Transportweg vermutlich etwas arg viel Druck auf die Verpackung ausgeübt worden war.
Diverse Beinchen am LED-Modul, dem IC und Sockel waren verbogen. Mit einer Zange und etwas Geduld konnte ich das jedoch wieder richten.
Die technischen Daten des Moduls in Kurzform
- Vcc: Typ. 5,0V
- Betriebstemperatur: 0°C – + 70°C
- LED-Farbe: Rot
- Abmessungen: 50mm * 32mm * 15mm
Die Schaltung und der Aufbau
Die Schaltung selbst ist nicht wirklich aufregend. Sie besteht aus dem MAX7219 IC und dem LED Matrix Modul. Das Datenblatt des ICs kann direkt von MAXIM heruntergeladen werden. Der Elko C2 dient hier der Stabilisierung bzw. Glättung der 5V Versorgungsspannung. Zusätzlich gibt es noch den Keramikkondensator C1, der die hochfrequenteren Anteile der beim Schalten der LEDs entstandenen Spikes reduziert. Der Widerstand R1 dient der Strombegrenzung der LEDs. Details dazu sind auch im MAX7219 Datenblatt zu finden. Ansonsten sind nur noch die beiden 5-poligen abgewinkelten Stiftleisten angeschlossen. Die Stiftleiste mit der Pinbezeichnung DIN (Data In) direkt am IC liegend wird wie folgt mit dem Arduino verbunden:
- VCC = 5V
- GND = GND
- DIN = Digital Pin 8
- CS = Digital Pin9
- CLK = Digital Pin10
Werden mehrere dieser LED Matrix Module kaskadiert, so wird die auf dem Modul vorhandene 2. Stiftleiste (hier oben im Bild, mit der Pinbezeichnung DOUT an Pin 3) einfach mit der 5-poligen Stiftleiste des nächsten Moduls (die Leiste mit Pin3 DIN) verbunden. Die anderen Kontakte wie VCC, GND, CS und CLK können dabei auf gleiche Weise per Daisy Chain Verfahren mit einem 5-pol. Dupontkabel einfach durchverbunden werden. Bis zu 8 Module mit dem MAX7219 können so kaskadiert werden.
Beispielcode für die Arduino IDE1.xx
Beim Stöbern nach einem Testsketch bin ich bei instructables.com auf Marcelo Moraes Library gestoßen. Die Library mit einem von mir minimal angepassten Testsketch kann hier heruntergeladen werden:
Nach dem herunterladen der komprimierten Datei, muss diese zuerst entpackt werden. Der komplette Ordner „MAXMATRIX“ mit den darin enthaltenen Dateien und dem Unterordner „examples“ muss dann entweder in den Arduino Projektpfad z. B. unter Eigene Dateien\Arduino\libraries oder in den Installationspfad z. B. unter Programme\Arduino\libraries kopiert werden. Gegebenenfalls müssen die Pfade hier der eigenen Umgebung entsprechend angepasst werden. Ich persönlich favorisiere dafür inzwischen den Projektpfad unter Eigene Dateien, da sich ein schnelles Backup zwischendurch mal eben viel einfacher realisieren lässt und es keine Vermischung zwischen den Libraries der originalen Arduino Installation und den selbst erstellten bzw. heruntergeladenen Libraries gibt.
Der Beispielsketch
In der Arduino IDE sind jetzt unter Datei|Beispiele|MAXMATRIX zwei Beispiele zu finden. Der Sketch MAX7219_2_LED_DOT_MATRIX ist minimal von mir modifiziert und entspricht noch weitgehend dem Original.
Nach dem Einbinden der Library MaxMatrix.h gleich am Anfang des Sketches erfolgt die Definition der verschiedenen ASCII Zeichen. Die Speicherung erfolgt über ein Array im Flash des Programmspeichers.
- PROGMEM prog_uchar CH[] = {
- 3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
- 1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
- …usw.
- };
In der Variablen maxInUse wird die Anzahl der angeschlossenen Module eingetragen.
- int maxInUse = 1; //change this variable to set how many MAX7219’s
Verschiedene Texte werden in den dann folgenden Arrays
- char string1[ ] = „abc“;
usw. gespeichert.
Im Setup kann mit m.setIntensity(0) die Helligkeit des Displays vorgegeben werden. Zulässig sind hier Werte von 0 bis 15. Bei dem von mir verwendeten Display ist der Wert 0 mit der dunkelsten Stufe völlig ausreichend.
- m.setIntensity(0); // dot matix intensity 0-15
Mit diesem Testprogramm lassen sich beliebige Texte in Klein- und Großbuchstaben sowie diversen Sonderzeichen auf dem Display durchlaufend darstellen. Leider steht mir bisher nur eines dieser Module zur Verfügung. Die Kaskadierung mehrerer Module konnte ich daher noch nicht testen.
Es gibt von mir jedoch inzwischen einen ersten Prototyp einer LED Matrix Wortuhr basierend auf dem hier vorgestellten LED Matrix Modul und der Library von Marcelo Moraes.
Hier meine Zusammenfassung
Bauteil: MAX7219 Dot Led Matrix Module
Artikelnummer: ohne
Lieferant: ebay
Verkäufer: emall-foryou
Preis: 4,90 €
Lieferzeit: etwa 3 Wochen
Versandkosten: inklusive
Sonstiges: leichter Transportschaden
Bewertung: bin trotzdem sehr zufrieden
Agenda zur Bewertung
*=Ganz Mies **=Mies ***=Akzeptabel ****=Gut *****=Sehr gut
Verkäufer: ****
Produkt: *****
Bei einer etwas besseren Verpackung hätte ich dem Verkäufer auch gern die volle Punktzahl gegeben.
Olaf Meier
Arduino Hannover http://Arduino-Hannover.de
Hello friend? …
Cara saw your project Matrix LED on YOUTUBE and thought you might help me.
I have a project to build a marquee with LED animations for DAFT PUNK helmet. Just not Manjo anything about programming, I have the code + -, only that it is for only one matrix and that appears in 4 matrix of LEDs. Could you help me, or know who can fi? … Vlw …
More details here >>> https://docs.google.com/document/d/16XsNl_EW-ubifXAQrx_xkWqIPFTISYQl0KZWc6ELeI0/edit?usp=sharing
Hi!
I found the initial base and the library for my projects from BIGDOG1971 here:
http://www.instructables.com/id/16×8-LED-dot-matrix-with-MAX7219-module/
Most probably he can help much better and faster than me. Please send him my regards!
Best regards
Olaf
Hi,
mit Linux (Kubuntu 14.04) gibt es bei Deinem Beispielprogramm 1 einen Fehler beim Kompilieren!
Ich habe dann eine andere Bibliothek mit Beispielsketch gefunden und daraufhin in Zeile 31
PROGMEM prog_uchar CH[] = {
durch
const prog_uchar CH[] PROGMEM = {
ersetzt, was dann zum Erfolg geführt hat. Der Compiler hatte genau das angemeckert:
MAX7219_1_LED_DOT_MATRIX.ino:31:23: error: variable ‘CH’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
Ansonsten vielen Dank für Deinen Blogbeitrag!
Daniel
Daniel, vielen Dank für Deinen Hinweis.
Sehr geehrter Herr Meier!
Vor kurzem habe ich mir auch solch ein Teil gekauft.
Jetzt möchte ich den 1.Beispiel-Sketch auf den Arduino hochladen, um diesen zu testen. Leider kommt beim kompilieren des Sketches folgende Fehlermeldung:
MAX7219_1_LED_DOT_MATRIX:193: error: ‚CH‘ was not declared in this scope
‚prog_uchar‘ does not name a type
Was hat dies uz bedeuten? Könnten sie mir eventuell helfen, wie das Problem behoben werden könnte?
Ich bin selber Programmiereinsteiger und würde mich sehr über eine Antwort freuen.
Mit freundlichen Grüßen, Timo!
Email: timo.53881@web.de
Hallo Timo, ich habe das selbe Problem!
Ich würde mich auch sehr über eine Antwort freuen! 😉
Hallo Mona und/oder Timo,
mit welcher Arduino IDE Version arbeitet ihr? bei mir macht die 1.5x bei vielen Sketchen Schwierigkeiten. Ich bin daher wieder auf die 1.06 zurückgegangen.
http://www.arduino.cc/en/Main/OldSoftwareReleases#previous
Ist im oberen rechten Block zu finden.
Funktioniert jetzt alles bestens! 🙂
Moin Timo, Mona und Olaf,
die Lösung ist recht simpel: Die Variable ist deprecated: http://goo.gl/yAGUZo
Es muss einfach nur die folgende Zeile
PROGMEM prog_uchar CH[] = {
getauscht werden mit
const unsigned char CH[] PROGMEM = {
Dann funktioniert wieder alles.
@Olaf
Danke für die Anleitung und Beschreibung!
Hallo Philipp,
ein wertvoller Tipp. Vielen Dank. Ich denke, ich werde dem Hinweis von von Dir bei nächster Gelegenheit auch noch einen Platz im Forum spendieren, nachdem ich es selber auch einmal angetestet habe.
Dankeschön! Super Trick!!!! 😉
Hallo Herr Meier,
der Beitrag liegt ein wenig zurück, dennoch würde ich mich über eine Antwort aufgrund Ihrer Erfahrung sehr freuen.
Ich möchte eine Wetterstation aufbauen. Über Aussensensoren werden die Winddaten (Richtung und Geschwindigkeit) sowie Temperatur und rel Luftfeuchtigkeit per MC aufbereitet und über Funk (433 Mhz) an den Empfänger gesendet.
Der MC Empfänger dekodiert die Signale und leitet diese an den MAX 7219 weiter. MAX 7219 steuert die LEDs (Windrichtung Kompasrose und Geschwindigkeit als LED Balken)
Alles funktioniert soweit gut aber nur solange der der Sender MC direkt mit dem Empfänger MC verbunden ist.
Sobald ich die Funkmodule einsetze passiert folgendes:
Der MAX 7219 ( auf der Empfandseite) produziert (mit der refressh sequenz (890 Hz) derartige Spikes die auf dem MC Input Port die zu Fehlinterpretationen führen.
Die Leitung vom Funkempfänger zum MC ist geschirmt.
Die Leitungen von MAX 77219 zu den LEDs sind lang (15 cm) und unabgeschirmt.
Die Leitungen (load, clk, data) vom MC zum Max 7219 sind unabgeschirmt und ca 10 cm lang.
Die Spikes sind in der Versorgungspannung kaum sichtbar.
Kann es sein dasss alle LED Leitungen ( also alle 8 Kathoden und alle Segment Leitungen) abgeschirmt ausgeführt werden müssen (aufgrund der Länge von bis zu 25 cm) ?
Kann es sein dass die Treiber vom MAX 7219 soviel EMV induzieren und den MC Input lahmzulegen?
Wenn Sie mir einige Hinweise aufgrund Ihrer Erfahrung liefern könnten wäre ich Ihnen sehr dankbar.
Last not least: Ob Sie mich mit „Werner und DU ansprechen oder über Herr Smidt und SIE ist für mich offen.
Viele Grüße
Werner Smidt
Hallo Werner,
lasse uns gern beim Du bleiben. 3 Ideen habe ich zu Deinem geschilderten Problem. Vorab folgender Hintergrund:
Die LED Matrixanzeige wird im Multiplexbetrieb angesteuert. Das bedeutet, dass eine relativ hohe Störstrahlung durch die laufenden Schaltvorgänge erzeugt wird. Diese Störstrahlung wird in den Raum abgestrahlt! In einem meiner Projekte war es einem DCF77 Empfänger aus gleichem Grunde nicht möglich zu synchronisieren. Erst entsprechender Abstand zur Anzeige brachte etwas Verbesserung. Daher folgende Vorschläge:
1. Abschirmung der Rückseite der Anzeige durch z. B. Kupferplatinenreste, soweit halt machbar
2. Den Abstand des Pendelempfängers in z. B. 1-2m Abstand zur Anzeige montieren und die Betriebsspannung abblocken. Möglichst abgeschirmtes Kabel verwenden.
3. Die Sendeleistung durch erhöhen der Versorgungsspannung des Senders (meine max. sind hier 12V) erhöhen. Ausserdem ist es sinnvoll in solchen Fällen die Datenrate so gering wie möglich zu gestalten.
Viel Erfolg!
Olaf
Hallo
Bei mir ist das Problem das sich die LED Matrix nicht verändert. Egal welcher Sketch ich Hochlade es funktioniert nicht obwohl ich die Libary richtig hinzugefügt habe. Kann der Fehler sein das der IC kaputt ist.
Vielen Dank im Voraus für deine Antwort
Hallo
Ich möchte dieses Display als Gang Anzeige bei sim racing nutzen. Es soll nur den Gang anzeigen und wenn ich Drehzahl erreicht wird sollen alle LED blitzen. Ist es möglich?
Hallo Martin, ist lange her, wo ich das zum Thema hatte. Soweit ich das noch in Erinnerung habe, sollte das aber lösbar sein. Schau vielleicht auch hier einmal rein:
http://arduino-hannover.de/2013/12/01/poor-mens-word-clock/
Ich kann mir sogar vorstellen, dass es für Deinen Zweck noch viel einfacher lösbar ist. Zum Beispiel eine Tabelle für jede benötigte Ziffer anlegen und nur diese dann bei Bedarf aufrufen.
Hallo Olaf.
Habe mir ein MAX7219 8×8 LED Punkt Matrix Modul mit 4 Stück 8*8 Matrix-LED (4 in 1 Display) gekauft.
Dein Sketch läuft, nur die Orientierung ist quer zur Modulausrichtung.
Die einzelnen Zeichen müßten um 90° gegen den Uhrzeigersinn gedreht werden. Dann sollte alles vernünftig aussehen.
Ein mechanisches Drehen der Module ist nicht besonders sinnvoll.
Entweder Zeichen drehen oder neuen Zeichensatz erzeugen.
Hast du oder sonst wer da vielleicht einen Rat?
Danke vorab.