Forum: Mikrocontroller und Digitale Elektronik ESP32: Hardware Interrupt triggert spontan.


von Keith S. (ksau)


Lesenswert?

Hallo liebe Wissenden ;-)

Ich lese mittels ESP32 einen Stromzähler per RS485 aus, Details siehe 
unten. Zwischen GPIO13 des ESP und GND hängt ein Taster. Ein Druck auf 
diesen Taster triggert einen Interrupt, der über einen entsprechenden 
Handler eine Aktion ausführt.

Funktioniert.

Aber: mehrmals am Tag wird der handler getriggert, OHNE dass jemand den 
Taster gedrückt hätte...

Jemand eine Idee, wie ich dieses Problem sinnvoll analysieren kann?




ESP32: https://www.wemos.cc/en/latest/d32/d32_pro.html

RS485: 
https://eckstein-shop.de/WaveshareRS485communicationboard2CSP3485onboard2C33V

Stromzähler: https://www.panda-solar.de/Victron-ET112-Energy-Meter.html

Codeschnipsel, der den Interrupt setzt:
pinMode(reset_pin, INPUT_PULLUP);
attachInterrupt(reset_pin, reset_request_handler, FALLING);

: Bearbeitet durch User
von Andreas M. (amesser)


Lesenswert?

Wie wäre es mit einem Schaltplan?

von Wolfgang (Gast)


Lesenswert?

Keith S. schrieb:
> Jemand eine Idee, wie ich dieses Problem sinnvoll analysieren kann?

Wozu analysieren? Du musst immer mit Störimpulsen in deine Leitung 
rechnen.
Programmiere eine vernünftige Tasterentprellung. Dann kann es dir egal 
sein.

von Keith S. (ksau)


Lesenswert?

Andreas M. schrieb:
> Wie wäre es mit einem Schaltplan?

Habe ich gerade nicht verfügbar. Ist aber trivial: GPIO13 -> Taster -> 
GND. GND verbindet GND des RS485 und des ESP, der wird über USB 
gespeist.

von Stefan F. (Gast)


Lesenswert?

Der Internet PullUp Widerstand ist recht hochohmig, bietet keinen Schutz 
vor Radiowellen.

Benutze einen externen Widerstand mit 2,2 kΩ, dann hast du sehr 
wahrscheinlich Ruhe. In ganz harten Fällen kannst du noch einen 10nF 
Kondensator zwischen GPIO und GND packen.

von Keith S. (ksau)


Lesenswert?

Wolfgang schrieb:
> Wozu analysieren? Du musst immer mit Störimpulsen in deine Leitung
> rechnen.
> Programmiere eine vernünftige Tasterentprellung. Dann kann es dir egal
> sein.

Mir ist klar, dass ein Tasterdruck ohne Entprellung ggfs. mehrfach den 
handler triggert. Aber "Entprellung", um Fehlerkennung zu verhindern ist 
mir neu. Wie denn? Eine Mindestlänge fordern?

von Wolfgang (Gast)


Lesenswert?

Keith S. schrieb:
> Eine Mindestlänge fordern?

Genau das

von Stefan F. (Gast)


Lesenswert?

Keith S. schrieb:
> Wie denn? Eine Mindestlänge fordern?

Ja, so macht man das normalerweise.

von Keith S. (ksau)


Lesenswert?

Wolfgang schrieb:
> Genau das

Hast Du dafür Beispielcode? Gibt ja ggfs. auch längere Störimpulse.

von Stefan F. (Gast)


Lesenswert?

Keith S. schrieb:
> Hast Du dafür Beispielcode?

Schau dir die Methode von Peter an, vor allem die Erklärungen dazu
https://www.mikrocontroller.net/articles/Entprellung#Debounce-Makro_von_Peter_Dannegger

von Wolfgang (Gast)


Lesenswert?

Keith S. schrieb:
> Hast Du dafür Beispielcode? Gibt ja ggfs. auch längere Störimpulse.

Woher sollen die kommen?
ESD liegt eher im Nanosekundenbereich.
Du könntest den Taster regelmäßig, z.B. im 10ms-Takt o.ä. abfragen. Wenn 
du ein paarmal hintereinander "gedrückt" liest, wird da wohl was dran 
sein und du kannst deine Aktion auslösen.

von Keith S. (ksau)


Lesenswert?

Wow - vielen Dank Euch für die vielen Tipps in dieser kurzen Zeit! Damit 
komme ich auf jeden Fall weiter. Werde vorsichthalber sowohl auf 
externen Pull-up wechseln als auch die Mindestlänge implementieren.

Nochmal: vielen Dank und friedliche Feiertage!

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
Noch kein Account? Hier anmelden.