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.
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.
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();
}
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.
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.
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)))
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..
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.
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!