7-Segmentanzeige an MAX7219 schaltet sich nach einer Weile aus?
Ich habe zwei Arduino Nanos, wo der selbe Sketch für einen Counter drauf läuft.
An beiden habe ich eine 8-stellige 7-Segmentanzeige angeschlossen.
Das ganze läuft eine Weile und so nach zwei Stunden fängt die Anzeige an zu spinnen bzw. nach einem Neustart des Timers geht die Anzeige aus.
Ich kann jetzt nicht sagen, ob der Timer weiterläuft wärend nur die Anzeige ausgeht, aber ich gehe davon aus. Wenn ich den Timer neu starte läuft die Anzeige kurz an und geht dann wieder aus obwohl die Zeit (120 Sekunden) noch nicht abgelaufen ist.
Hat jemand eine Idee?
1 Antwort
Fühl mal ob der Chip heiß wird.
Wenn nicht, dann bau mal mehr Delays ein, lass also die Daten zum MAX langsamer laufen. Kann sein, dass die so schnell sind, dass die "auf der Grenze" sind und sich der MAX irgendwann "verheddert" und einen Hardlock bekommt. Dann muss man den Strom zum MAX abstellen um das zu lösen. Also gleich den ganzen Strom abstellen um den Hardlock zu lösen und neu zu initialisieren.
Bleibt nur der µC stehen, würde die Anzeige nur einfrieren, aber nicht ausgehen.
P.S.:
Bei so etwas hilft immer ein Oszilloskop. Ein "ordentliches" kostet immer noch über €200, aber wenn man "nur gucken will", also nicht richtig messen will, tut es auch ein billiges wie das hier:
1MHz ist um zu schauen ob Daten korrekt gesendet werden (Pegel, Takt) ausreichend.
Das kann nicht sein, dann würde es "Minuten" dauern bis die Anzeige gefüttert ist, also nur alle paar Minuten aktualisieren.
Ich meine nicht Deinen Sekundentakt in Deiner Schleife sondern den Takt mit dem der MAX seine Daten bekommt.
Hast Du sehr lange Kabel dran, musst Du diesen Takt "runter drehen". Dazu musst Du in die Bibliothek gucken die den MAX ansteuert. Entweder da drin die Delays erhöhen oder da ist meistens eine Konstante bzw. Variable drin die man von seinem Programm aus verstellen kann um den Takt zu reduzieren (oder zu beschleunigen).
wo finde ich in Arduino IDE die Library ?
Ich bin nach dieser Anleitung vorgegangen
https://www.instructables.com/MAX7219-7-Segment-Using-Arduino/
Ein mal warten die 500 zwischen den Updates der einzelnen Segmente. Hast Du das auch?
/* we always wait a bit between updates of the display */
unsigned long delaytime=500;
Und dann mal in der LedControl.h schauen.
Hast Du überhaupt die Taktgeschwindigkeit richtig gesetzt? Der Arduino weiß ja nicht welchen Takt der bekommt. Aber wenn die Sekunden auf der Anzeige richtig laufen, dann sollte das passen.
Jetzt stellt sich noch die Frage, ob das Ding auch genug Strom bekommt? USB bzw. der Arduino kann ja nicht beliebig viel liefern.
Der Delay beträgt 1000 ms