Hallo, ich habe einen ESP32 bei dem ich einem Pir-Sensor angeschlossen habe. Doch jedesmal wenn dieser auslöst, resettet sich mein Programm und dass immer wieder. Wie kann ich rausfinden, woran das liegt?
Jonas schrieb: > Wie kann ich rausfinden, woran das liegt? Lesen. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/log.html
beim Warten auf die Eventbits wird kein Auto Reset des Triggers gemacht ( xClearOnExit = false), damit dürfte diese Funktion den Kern in einer Dauerschleife lahmlegen.
Hi, zum einen das was J.S. sagt prüfen. Und dann führst du ESP_LOGI in der isr aus. Das hatte ich auch mal versucht und das selbe Phänomen gehabt wie du. Setze in der isr lediglich ein Flag, werte das dann in der main() aus und generiere dein Log dort. Gruss tobi
die Espressif Doku rät auch davon ab die logging Funktionen in ISR zu benutzen. ESP_DRAM_LOGx könnte funktionieren, würde ich aber auch nur maximal zum Test bei Ints mit geringer Frequenz als q&d Test einbauen. Einen gpio umschalten geht auch einfach und kann mit LA kontrolliert werden.
Jonas schrieb: > ich habe einen ESP32 bei dem ich einem Pir-Sensor angeschlossen habe Ist es tatsächlich so, dass ein schnarchlangsames Ding wie ein PIR-Sensor einen Interrupt braucht? Warum fragst du den nicht einfach in einem 100ms-Task ab? Schneller wird da wohl kaum was passieren... Und sonst: wie sieht der Schaltungsaufbau aus? Woraus wird das Ganze versorgt? Passen die Pegel vom IR-Sensor und dem µC zusammen?
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Ist es tatsächlich so, dass ein schnarchlangsames Ding wie ein > PIR-Sensor einen Interrupt braucht? Ja. Ziel war es den ESP in den DeepSleep zu bringen und durch den Sensor aufzuwecken. Das funktioniert auch. Allerdings wollte ich zyklisch auch andere sachen machen und den ESP per Timer aufwachen lassen. Da der Timer durch das aufwachen durch ext0 (PirSensor) aber abgebrochen wird und ich nicht weiß, wie viel Restzeit noch wäre, kann es vorkommen, dass der ESP gar nicht durch den Timer aufwacht (je nachdem wie der PirSensor detektiert). Daher bin ich doch am überlegen öfters (nur durch den Timer) aufzuwachen und den PirSensor abzufragen. hacker-tobi schrieb: > Und dann führst du ESP_LOGI in der isr aus. > Das hatte ich auch mal versucht und das selbe Phänomen gehabt wie du. > Setze in der isr lediglich ein Flag, werte das dann in der main() aus > und generiere dein Log dort. Das war es auch. Habe den Log nur zum Testen reingemacht, um zu sehen das es auch wirklich ausgelöst wird. Mit einem Flag konnte ich das ganze auch testen und hat letztendlich auch funktioniert.
Jonas schrieb: > öfters (nur durch den Timer) aufzuwachen Das hört sich nach einem berechenbaren und beherrschbaren Ansatz an. Denn es ist natürlich wirklich übel, wenn der eine Interrupt den anderen korrumpiert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.