Forum: Mikrocontroller und Digitale Elektronik LED Matrix MAX7219 8x8 an Arduino will nicht.


von Egon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade solche 8x8 Matrix zum Laufen zu bringen und habe mir 
auf die schnelle mal einen Shetch aus dem Netz gefischt.
Dieser bricht aber mit Fehler ab und nach Internetsuche soll das wohl 
mit einer zu neuen IDE zusammnehängen. Ich habe die Version Arduino 
1.6.7.
Fehler:

sketch_mar15a:24: error: 'prog_uchar' does not name a type

 PROGMEM prog_uchar CH[] = {

         ^

C:\Users\Egon\Documents\Arduino\sketch_mar15a\sketch_mar15a.ino: In 
function 'void printCharWithShift(char, int)':

sketch_mar15a:182: error: 'CH' was not declared in this scope

   memcpy_P(buffer, CH + 7*c, 7);

                    ^

exit status 1
'prog_uchar' does not name a type

Angehangen habe ich mal den vollständigen Sketch.
Meine eigenen Versuche bringen aber eher mehr Fehler wenn ich den Hilfen 
aus dem Netz dazu folge. Demnach wäre "prog_char" mit "const char" zu 
ersetzen, aber das funktioniert eher weniger.
Wäre nett wenn mir Jemand helfen würde ich es richtig machen muß.
Danke, Egon

von Draco (Gast)


Lesenswert?

Dann versuch doch mal
1
prog_uchar CH[] PROGMEM = {...}

Was sagt er da?!

von Egon (Gast)


Lesenswert?

das sieht dann so aus:

sketch_mar15a:24: error: 'prog_uchar' does not name a type

 prog_uchar CH[] PROGMEM = {...}

 ^

sketch_mar15a:26: error: expected unqualified-id before numeric constant

 3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space

 ^

sketch_mar15a:121: error: expected declaration before '}' token

 };

 ^

exit status 1
'prog_uchar' does not name a type

von Draco (Gast)


Lesenswert?

Dann mach es einfach so:
1
const unsigned char CH[] PROGMEM = {...}

Das muss dann aber funktionieren, ansonsten wirf deine Arduino Umgebung 
an die Wand :D

von Draco (Gast)


Lesenswert?

Einfach dann 90° verdreht schieben. Der Max oder das Display hat keinen 
"Klatsch" weg. Ich gehe davon aus das das Display Common Kathode ist, 
statt Common Anode - das resultiert dann in einem 90° gedrehtem Ausgang 
des Max zu den LEDs.

Das Problem dabei ist, du musst dir deine Routine für den Max dann 
selbst schreiben, ist aber kein großes Hexenwerk. Und da lernst du 
wirklich viel - vor allem wie der Max an sich arbeitet.

Das ist halt der Nachteil bei der Arduino Geschichte, Solange alles 
"Standart" ist, funktioniert das Zeugs (Sketches nennt ihr das oder?!) 
aber sobald etwas anders ist, funktioniert nix mehr und die "Maker" 
wissen sich nicht mehr selbst zu helfen.

Nimm dir das Datenblatt zum Max... schau wie die Timings und I2C 
Reihenfolge sind und los gehts!

von Draco (Gast)


Lesenswert?

Ach und noch was:
1
  while (Serial.available() > 0){
2
    byte c = Serial.read();
3
    Serial.println(c, DEC);
4
    printCharWithShift(c, 100);
5
  }
6
  delay(100);

Überdenke dir das obige nochmal, mach dir ein Ablaufdiagramm und gehe 
schritt für Schritt durch:

Du sendest ein UART String vom Rechner zu µC: "Hallo Welt!"... einmal in 
der Sekunde z.b. (Und das ist schon verdammt lang).

Deine "Routine" zum auslesen des UART Buffers läuft in einer While 
Schleife solange der Buffer leer ist. Das ist schonmal richtig so. Wobei 
man das in einer Interrupt Routine macht (Es sei denn es ist ein 
Mega32u4 etc... welche über USB keinen Interrupt bereitstellen).

Jedoch blockst du diese Routine mit "printCharWithShift(c,100)" jedesmal 
um 100ms. Der String hat nun 11 Zeichen, das sind 1100ms - über eine 
Sekunde in dem du die Routine blockst. Kommt jetzt aber in der nächsten 
Sekunde der nächste String, verhasptüdelt sich alles.

Nach der Uart-Routine hast du nochmal ein "delay(100);" - lass das doch 
weg, den brauchst du garnicht - lass ihn doch gleich wieder prüfen ob 
ein Zeichen im UART ist. Ob ein µC nun mit nem "nop" beschäftigt ist 
oder auf nen Zeichen prüft ist im Rille, aber Zeichen prüfen macht mehr 
Sinn. ;)

Was nun "m.ShiftLeft(bool, bool)" ist, weiß ich nicht, aber ich denke 
das ist ne Setup Einstellung, und gehört damit in die Init Routine.

Welcher µC steckt denn im Arduino?!

von Peter (Gast)


Lesenswert?

Gibt es inzwischen eine Lösung für das Problem?

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Wenn der Sketch für eine ältere Arduino-Version gedacht war - was 
spricht gegen einen Versuch mit einer 'älteren Arduino-Umgebung'?
Diese müsste den Sketch ja korrekt compilieren.
Ausnahme: Die ältere Umgebung kann mit dem neueren Arduino Nichts 
anfangen - dann hättest Du aber zumindest ein brennbares File für einen 
der älteren Chips - vll. auch eine Überlegung wert.

MfG

PS: Ja, den roten Text hatte ich gesehen ;)

von Jürgen S. (jurs)


Lesenswert?

Peter schrieb:
> Gibt es inzwischen eine Lösung für das Problem?


Für die Arduino-IDE  und diese 8x8 Matrix-Module mit MAX7219 und roten 
LEDs gibt es im Internet reihenweise Codes, das Internet ist voll davon.

Wenn ein Sketch mal nicht funktioniert, bzw. mit Deiner IDE-Version 
nicht funktioniert, dann nimmst Du eben den nächsten. Der ist im 
Zweifelsfall genau einmal Googeln weit entfernt.

Wo ist das Problem?

Hast Du irgendwelche speziellen Wünsche, was Du auf dem Modul anzeigen 
möchtest?

ASCII-Zeichen? Eigene Muster? Laufschrift?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.