warum hat die serielle Schnittstelle ein Problem, wenn ich in Zeile 60 das delay vorm sleep mode weglasse?
Und, was mich auch wundert, wenn das delay fehlt, warum ich schon nach Reset die Ausgabe in setup() nur unvollständig bekomme? Es werden normalerweise Register 07 bis 0F ausgelesen und ausgegeben. Ohne delay gehts nur bis 0C und das Byte selbst zusätzlich unvollständig.
Der Sketch macht folgendes zum testen. Weil mein großer Sketch nach Erweiterung mit sleep mode überhaupt nicht mehr läuft. Das ist jetzt Fehlersuche. Der Arduino wird jede Minute an Pin 2 aufgeweckt, gibt Infos seriell raus, löscht das RTC Alarmflag und legt sich wieder schlafen. Mit delay funktioniert alles komplett.
Wenn nun die letzte serielle Ausgabe vorm schlafen legen verstümmelt rauskommt, könnte man das mit dem nicht leeren vom UART Buffer erklären. Denke ich. Aber warum die Ausgaben während setup() schon Mist machen kann ich mir nicht zusammen reimen.
Doc_Arduino:
warum hat die serielle Schnittstelle ein Problem, wenn ich in Zeile 60 das delay vorm sleep mode weglasse?
Wenn Du
Serial.println("Lege mich schlafen.");
machst, dann sind die Zeichen noch lange nicht gesendet.
Mit dem Serial.print-Aufruf werden die Zeichen erstmal nur in den seriellen Ausgangspuffer geschoben.
Und von dort aus werden die Zeichen dann interruptgesteuert eines nach dem anderen gesendet.
Es sei denn, Du schickst den Controller schlafen, bevor die Zeichen aus dem Puffer gesendet werden konnten. Dann schläft der Controller und die Zeichen ruhen im seriellen Ausgangspuffer.
Wenn die Zeichen erst gesendet werden sollen und der Controller soll erst danach schlafen gehen, könntest Du aber wohl statt delay auch das machen:
Und weil der Code ab setup() sehr schnell abgearbeitet ist und der Buffer langsamer geleert wird im Vergleich, ist der µC schon längst am pennen. Sodass schon die ersten Ausgaben hängen bleiben. Mir war der zeitliche Ablauf nicht bewußt.
Kann man das serial.flush auch immer vorbeugend einbauen? Also wenn der Buffer schon leer sein sollte bevor der flush Befehl kommt, dann gibts auch keine zusätzliche Verzögerung? Außer paar Takte für den Befehl selbst, versteht sich.