Arduino Profi-Hilfe gesucht - MAX7219

Hi zusammen. Ich hab mich heut bei euch hier angemeldet weil ich seit Wochen mit meinem Arduino Projekt nicht mehr weiterkomme.

Ich habe versucht folgendes Projekt nachzubauen

Der Bau an sich war kein großes Problem, vom Prinzip her läuft das NES-Tetris auf dem Raspberry Pi per fceux Emulator, ein Lua Script gibt einige Daten weiter an den Arduino UNO und dieser steuert dann die LED-Matrix und eigentlich auch noch eine MAX7219 7-Segment-Anzeige für den Punktestand.

Leider kann oder will der Entwickler nicht mehr helfen und deshalb suche ich anderswo Hilfe. Zum eigentlichen Problem: das Spiel selbst läuft wunderbar auf der LED-Matrix, allerdings bekomme ich das Score-Display ums verrecken nicht zum laufen. Keine Ahnung wo genau der Bug steckt, vermute aber eher im Sketch als im Lua Script weil die Punkte nämlich auf dem Monitor korrekt angezeigt werden. Somit vermute ich das der Sketch nicht ganz stimmt. Ich habe leider nicht die Kenntnisse um den Code komplett zu überprüfen.

Eigene Blödheit schließe ich fast komplett aus weil zum Testen habe ich diverse andere Sketche probiert die auch funktioniert haben.

Wäre schön wenn mir jemand helfen könnte, zum probieren ist nur ein Raspberry Pi, ein Arduiono UNO und ein MAX7219 7-Segment-Anzeige, die große LED-Matrix ist nicht zwingend notwendig.

Hallo,

die Fähigkeit meiner Glaskugel ist begrenzt. Deshalb mein Rat. Lasse den ganzen Rest erstmal weg und teste nur mit dem Uno die MAX7219 Platine einzeln. Teste ob du alle Leds gezielt ansprechen kannst oder auch nicht und behebe ggf. den Fehler.

Hi

Die MAX7219 4x 8x8-LED-Matrix und die MAX7219 8x 7-Segment-Anzeige wünschen die Daten anders.
Zumindest deute ich Deine Beschreibung so, daß die Matrix läuft, die Punkte aber nur Müll anzeigen.
Wenn Ja: Bei der Initialisierung kann man einstellen, ob die übergebenen Daten als Zahl oder als Bitmuster ausgegeben werden sollen.
Zahl eignet sich für die 7-Segment-Anzeige, wo 8 Ziffern mit je 8 LED angezeigt werden - Bitmuster für die 8x8 Matrix, wo 8 BitMuster auf 8 Zeilen angezeigt werden - pro 8x8 Matrix ist's ein eigenes MAX7219.

MfG

Im Anhang ist der Sketch und das Lua Script.

Der Arduino UNO ist per USB angeschlossen, der UNO empfängt ja auch die RGB-Daten für die LED-Matrix zum Spielen. Nur irgendwo im Bereich MAX7219 scheint er nicht richtig zu sein.

Ich probiere ja schon mehrere MAX7219 und verschiedene UNOs, keine Ahnung wie das MAX7219 seine Daten haben will, 2-Byte oder 3-Byte?? Kein Plan, dafür reichtss nicht mehr bei mir.

ledtris.ino (3.29 KB)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hier erst mal die Fotos

SS Pin ist auf 9

Das Foto vom Arduino und dem MAX7129 ist nur das ihr seht welche 7-Segment-Anzeige verwendet wird. Auf diesem UNO läuft grad nur ein anderer Sketch mit einer anderen Library

Mit diesem Sketch kommt zumindest zum Testen was auf dem MAX an.

//We always have to include the library
#include "LedControl.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 11 is connected to the DataIn   MOSI
 pin 13 is connected to the CLK      SCK
 pin  9 is connected to LOAD         CS
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(11,13,9,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=250;

void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}


/*
 This method will display the characters for the
 word "Arduino" one after the other on digit 0. 
 */
void writeArduinoOn7Segment() {
  lc.setChar(0,0,'a',false);
  delay(delaytime);
  lc.setRow(0,0,0x05);
  delay(delaytime);
  lc.setChar(0,0,'d',false);
  delay(delaytime);
  lc.setRow(0,0,0x1c);
  delay(delaytime);
  lc.setRow(0,0,B00010000);
  delay(delaytime);
  lc.setRow(0,0,0x15);
  delay(delaytime);
  lc.setRow(0,0,0x1D);
  delay(delaytime);
  lc.clearDisplay(0);
  delay(delaytime);
} 

/*
  This method will scroll all the hexa-decimal
 numbers and letters on the display. You will need at least
 four 7-Segment digits. otherwise it won't really look that good.
 */
void scrollDigits() {
  for(int i=0;i<13;i++) {
    lc.setDigit(0,3,i,false);
    lc.setDigit(0,2,i+1,false);
    lc.setDigit(0,1,i+2,false);
    lc.setDigit(0,0,i+3,false);
    delay(delaytime);
  }
  lc.clearDisplay(0);
  delay(delaytime);
}

void loop() { 
  writeArduinoOn7Segment();
  scrollDigits();
}

Mit dieser Verkabelung hab ich auch den ledtris.ino Sketch probiert aber ohne Erfolg

Doc_Arduino:
Hallo,die Fähigkeit meiner Glaskugel ist begrenzt.

Da rächt sich wieder mal der Asieneinkauf :wink: :wink: :wink: .

ernsthaft
LedControl.h klingt für mich Matrixbetrieb.

Der MAX7219 will und bekommt immer 8 Byte Daten.
Im Displaybetrieb bedeuten diese Daten die Zahl die auf der 7-Segmantanzeige angezeigt werden soll.
Im Matrixbetrieb entspricht jedes Bit der Daten einer LED der Anzeige.
Wenn Du das in einer Reihenschaltung mehrerer MAX7219 nicht zusammenbekomst dann mach einfach 2 Reihen. Eine für Matrixbetrieb und die andere für Displaybetrieb. Die Anschlüsse bleiben gleich nur jede Reihe braucht ihr SS Signal. Das mußt Du umschalten um den Datenfluß der einen oder der anderen Reihe zu aktivieren.

Grüße Uwe

Hallo,

meine Glaskugel benötigt ein Firmwareupdate. :slight_smile:

Das Problem ist, wir wissen überhaupt nicht welche Hardware du verwendest. Wenn das alles 1:1 nachgebaut ist sollte es ja funktionieren. Bei Hardwaredefekten sollten dann nur entweder einzelne Segmente oder ganze Ziffernblöcke fehlen, generell aber keinen Mist anzeigen.

Habe mich mal durchgeklickt. Deine Anzeige sollte dem Schaltplan entsprechen. Entspricht das deiner Hardware dafür?

Jedes Digit bekommt sein eigenes Segmentmuster übertragen. Den Rest wie Refresh macht der MAX selbst.

Edit:
Der Sketch aus #9 ist ja der vom LedControl Bsp. für 7-Segmentanzeige. Wenn das funktioniert entspricht deine Hardware entweder nicht der vom "Tretiscode" oder anders herum.