nach dem Deep Sleep kommt Time offset (ESP32)

hat schon jemand ein ähnliches problem bemerkt?
ich schicke meinen esp32 für 9 stunden in den DeepSleep-modus und nach dem wakeup (mit seinem timer) ist ein zeitversatz der RTC von +10 minuten und ein paar sekunden.

ich habe eine RTC-uhr angeschlossen (batterie neu) - vor dem deep sleep läuft die RTC richtig

kann jemand eine lösung für dieses problem anbieten bzw. erklären warum das passiert? bis jetzt helfe ich mir indem ich die RTC vor dem DeepSleep um 10 minuten und 20 sekunden zurückdrehe (was ja nicht so die elegante lösung ist)

Ich glaube nicht das der ESP da was für kann.
Die Uhr ist wahrscheinlich so ein Billigteil und wahnsinnig ungenau.
Die Uhr weis doch gar nicht das der ESP schläft.

Teste sie doch mal in einer anderen Umgebung und warte 9 Stunden ab.

Ulli

hab ich schon .. die uhr ist zwar billig gewesen, jedoch komme ich nach einer stunde auf maximal 1 sekunde unterschied.

und bei 9 stunden -> 10 min offset müssten das rund 54 sekunden pro stunde sein.

die uhr ist zwar billig gewesen

Der ESP32 hat eine eingebaute RTC, und die soll wohl beim sleep Probleme machen.
Wenn du eine externe RTC hast, verwendest du sie eventuell nicht richtig?

Ist doch mal wieder das gleiche, wie so oft...
Code geheim
Schaltplan geheim
Uhrtype geheim

Als wenn ich aus weiter Ferne auf fremder Leute Arbeitstische schauen könnte ...
Kann ich aber nicht.
Einerseits evtl schade.
Aber so grundsätzlich, bin ich recht zufrieden damit.

Nunja...
Meine RTCs laufen perfekt!

Du hast also mein volles Mitgefühl.
Aber helfen kann ich so nicht.

Tipp:
Wenn du den Kram zusammensuchst, wird dir selber der Fehler auffallen.
Also demnächst, VOHER zusammenstellen, dann erübrigt sich die Frage evtl. schon.
Zumindest hätte sie dann mehr Informationsgehalt.

externe RTC 1307 an controller. Keine alarm-funktion hardwareseitig möglich daher soll der
ESP mit dem internen timer(RTC vom controller) in den DeepSleep gehen
beim aufwachen sollte die uhrzeit wieder von der externen RTC herangezogen werden.
tagsüber funktioniert die externe RTC ohne probleme mit 0 bis max. 1 sekunde offset pro stunde.

den code habe ich euch absichtlich vorenthalten, da ich dachte es gibt ev generell probleme damit.
finde ich toll dass die RTC zumindest bei combie funktioniert.

verwendet wird übrigens der samplecode: Rtc/DS1307_Simple.ino at master · Makuna/Rtc · GitHub

und zum abschalten in den DeepSleep der übliche befehl:
if(((dt.Hour() == 22) && (dt.Minute() == 00) && (dt.Second() == 00))){
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
}

w31x:
externe RTC 1307 an controller. Keine alarm-funktion hardwareseitig möglich daher soll der

Verwende eine DS3231. Da geht das

Hi

Auch ist die Genauigkeit der DS3231 wohl um Welten besser - man liest von wenigen Sekunden im JAHR, nicht in der Stunde.

MfG

Eine RTC 1307 kenne ich nicht, aber eine RTC namens DS1307 .
Die ist nicht sonderlich genau, aber deutlich besser, als der im Eingangsposting genannte Versatz.

Da läuft also ganz was anderes schief.
(nehme ich mal ganz stark an)
Aber was das ist?

habe ich euch absichtlich vorenthalten

z.B. sind einige der DS1307 Module für Lir2032 vorgesehen.
Welche man dann nicht mit CR2032 bestücken darf, zumindest nicht ohne Modifikation.

combie:
z.B. sind einige der DS1307 Module für Lir2032 vorgesehen.
Welche man dann nicht mit CR2032 bestücken darf, zumindest nicht ohne Modifikation.

Das trifft auch auf die DS3231 zu, die ich in jedem Fall bevorzugen würde. Besonders bei supergeheimen Sketchen :wink:

Gruß Tommy

Hallo,
ich würde jetzt mal vermuten, der ESP versaut die Uhrzeit. Beim ESP8266 war schon angesagt nach dem sleep_start unbedingt ein delay(100); anzuhängen, der läuft nach dem sleep_start auch erstmal weiter und erledigt noch ein paar Sachen bis er schlafen geht und dabei sollte er natürlich nicht zufällig noch ein paar folgende Anweisungen des eigenen Programms ausführen.
Beim ESP32 ist ein RTOS drunter, der kann also auf jeden Fall noch in Deinem Programm weitermachen und dann z.B. mitten in einem I2C-Zugriff reinpfuschen.

Ich würde da zum Test mal vor und nach dem schlafen schicken mal ein delay(100) zum Testen reinhängen, ob die Uhr dann richtig geht.

Gruß aus Berlin
Michael

danke für den tip! hab delay(100); gleich mal ausprobiert und danach auch zusätzlich noch mit einer anderen rtc library (RTClib), jedoch ist der offset nach wie vor vorhanden.

habe es nun auch damit probiert:
if(((dt.Hour() == 22) && (dt.Minute() == 0) && (dt.Second() == 0)))

{ Rtc.SetDateTime(RtcDateTime(dt.Year(), dt.Month(), dt.Day(), 21, 50, 00));

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
delay(100);
}

leider war der offset am morgen dann immer noch +8 minuten?!

für mich ist das ganze nicht sehr verständlich, da es sich ja um 2 verschiedene uhren handelt (exteren RTC und interner timer). tagsüber hat die externe RTC gerade mal maximal 3 sekunden offset über 12 stunden (was von der genauigkeit nicht sehr gut ist dennoch egal weil im programm wird die uhr immer wieder mal mit einer npt gesynct falls ein wlan vorhanden ist). was in den 9 stunden mit 10 minuten offset passiert kann ich mir nicht erkären; das wären über 1 minute offset pro stunde! .. was mit meinem 12stunden tagtest jedoch nicht zusammen past.

die externe RTC sollte doch gar nichts mit dem deepsleep zu tun haben vor allem der deepsleep-timer läuft über die interne RTC des controllers.

eine andere möglichkeit wäre es die uhr im setup() um 10 minuten zurück zu stellen, was hald auch nicht die lösung für dieses problem sein kann..

Hallo,

w31x:
die externe RTC sollte doch gar nichts mit dem deepsleep zu tun haben vor allem der deepsleep-timer läuft über die interne RTC des controllers.

darin stimme ich erstmal voll zu.

Es muß irgendwas im Zusammenspiel ESP32-RTC, Betriebsspannung?, StandBy-Wechsel der RTC?, keine Ahung... zu tun haben.
Welches RTC-Modul hast Du genau, welches ESP32 Modul? Ein Link wäre gut. Ich würde das gern mal mit ESP32 und RTC ausprobieren, ich mag solche Rätsel nicht.

Gruß aus Berlin
Michael

ich mag solche Rätsel nicht.

Ich befürchte, dass die wesentlichen Informationen, um dieses Problem zu lösen, noch etwas geheim bleiben müssen.

Was sicher zum Teil daran liegt, dass unser w31x den Fehler noch nicht da gesucht hat, wo er steckt.

Bis jetzt blendet er/sie/es den Fehler, die fehlerhafte Stelle, noch vor sich selber aus.
Und damit bleibt er auch vor uns verborgen.

Uns, und auch sich selber, möchte er/sie/es nicht mit zuviel Information verwirren.

Hallo,

combie:
Was sicher zum Teil daran liegt, dass unser w31x den Fehler noch nicht da gesucht hat, wo er steckt.

sehe ich auch so, allerdings sind manche Hinweise das es eben durchaus bessere RTC-Module gibt, auch nicht so zieführend für das beschreibene Problem.

Mache, wie eben auch der TO, bauen eben lieber einen "Würg"-around statt den Fehler zu suchen und zu beheben.

Gruß aus berlin
Michael

mittlerweile habe ich das problem gefunden. nachdem ich den zweiten core in meinem programm aktiviert hatte und die wlan anmeldung darüber läuft, musste der deepsleep ebenfalls auf diesem ausgeführt werden. Warum auch immer das so sein muss aber jetzt funktioniert es!

vielen dank nochmal für eure hilfestellungen!