ESP32 so beschäftigt das Taster zu selten abgefragt wird

OP #6956990
Ein ESP32 beobachtet Bewegungen in einem Raum, schaltet dann nach einer 
"bewegungslosen Zeit" die Stromversorgung aus und versendet dann per 
MQTT bei AN und AUS eine Nachricht.
Mit einem Taster kann man per Hand die Stromversorgung sofort 
ausschalten und hat noch Zeit den Raum zu verlassen ohne den 
Bewegungsmelder wieder zu aktivieren.
Das Problem:
Der ESP ist so beschäftigt, dass der Tastendruck in gewissen Zeiträumen 
nicht abgefragt wird und  man muss dann wild "rumdrücken" bis der 
Tastendruck angenommen wurde. Nennenswerte Delays sind keine im Programm 
vorhanden.
Benötigt man, um das richtig zu machen, hierfür einen gesonderten Thread 
der immer auf den Tastendruck lauscht?
Kannst du den Taster irgendwie latchen, also z.B. ein Interruptbit in 
einem Interruptflag-Register benutzen(ohne den Interrupt-Enable dafür 
anzuschalten)?
Musst halt Hardware-Entprellen.

Eine zweite Lösung wäre, die Tastenabfrage mehrmals in den 
rechenintensiven Bereich einzuweben.
SW-Designmäßig nicht geil, geht aber evtl auch.

mfg mf
Moderator (Firma: Titel) Persönliche Seite
Frank K. schrieb:
> Benötigt man, um das richtig zu machen, hierfür einen gesonderten Thread
> der immer auf den Tastendruck lauscht?
Ja, dafür sind die Dinger da: einen Programmteil zu unterbrechen, der 
von seinem Ersteller nicht unterbrechbar programmiert wurde. Und das 
Wichtigste an einem Gerät ist, dass es zügig auf Benutzeranfoderungen 
reagiert. Da darf dann schon ein Thread her...
(Firma: tbd)
hallo,

die Frage des TO habe ich mir auch schon oft gestellt - ich arbeite an 
etwas ähnlichem.

Lothar M. schrieb:
> Ja, dafür sind die Dinger da: einen Programmteil zu unterbrechen, der
> von seinem Ersteller nicht unterbrechbar programmiert wurde. Und das
> Wichtigste an einem Gerät ist, dass es zügig auf Benutzeranfoderungen
> reagiert. Da darf dann schon ein Thread her...

Steckt da Ironie drin, oder nicht?
Irgendwie interpretiert mein Gehirn da Ironie rein :-D

Meine Frage ist ernst gemeint.

Danke.
mfg
F.
Gast
Früher (tm) hätte man das über einen Pin-Change Interrupt erledigt. 
Jetzt schafft es schon ein Mehrkernprozessor nicht mehr einen Taster 
abzufragen?
Der Fortschritt ist nicht aufzuhalten ...

Vielleicht liegt es aber doch nur an der Programmierung.
Gast
Obermayer F. schrieb:
> Steckt da Ironie drin, oder nicht?
> Irgendwie interpretiert mein Gehirn da Ironie rein :-D
>
> Meine Frage ist ernst gemeint.

Nö...
Ich sehe keinen Witz, oder so...

Zumindest unter Arduino gilt:
FreeRTOS ist dabei und loop sowieso schon eine Task.
Zudem wird dein ESP einen 2ten Kern haben, welcher fleißig genutzt 
werden möchte..
Gast
Pepe T. schrieb:
>>Pin-Change Interrupt
> Am debouncer wird er scheitern :)

Nach einer erkannten Tastenflanke kann der IRQ bis zum Ausschalten der 
Stromversorgung getrost disabled werden. Zum Entprellen sollte die 
Zeitspanne wohl mehr als ausreichend sein.
Obermayer F. schrieb:
> Steckt da Ironie drin, oder nicht?
> Irgendwie interpretiert mein Gehirn da Ironie rein :-D
>
> Meine Frage ist ernst gemeint.

Natürlich. Da verdienst du dir auch eine ernsthafte Antwort.

Da es ja deiner Problembeschreibung nach unbedingt erforderlich ist, daß 
der Raum ohne auch nur die allerkleinste Unterbrechung überwacht wird, 
um auch noch Attosekunden kurze Ereignisse sicher zu detektierten, kann 
der Prozessor natürlich nicht auch noch innerhalb weniger Microsekunden 
auf Benutzereingaben reagieren. Für das Problem gibt es daher keine 
Lösung.

Oliver
OP
Um eine schnelle Verbesserung zu bekommen werde ich den Vorschlag, bzgl. 
mehreren Tasterabfragen, einbauen.

Thread:
... habe ich noch nie programmiert, werde ich mir dann mal ansehen.

Latchen:
Per Flip-Flop die Schalterbetätigung speichern? Auch eine super Idee!

Bis hierher schonmal vielen Dank

Frank
Gast
Frank K. schrieb:
> Thread:
> ... habe ich noch nie programmiert, werde ich mir dann mal ansehen.

Threads setzen ein OS voraus, das die verfügbare Rechenzeit und die 
evtl. mehrfach vorhandenen Kerne irgendwie sinnvoll auf die gestarteten 
Threads aufteilt.

Also, was läuft denn da auf deinem Controller?

W.S.
Moderator (Firma: Titel) Persönliche Seite
Frank K. schrieb:
> Thread:
> ... habe ich noch nie programmiert, werde ich mir dann mal ansehen.
Ja, tu das. Und nein, das war keine Ironie, sondern das Mittel der Wahl, 
wenn man schon einen Mehrkernrechner mit dediziertem 
Echtzeit-Multitasking-OS hat.

> Latchen:
> Per Flip-Flop die Schalterbetätigung speichern? Auch eine super Idee!
Das ist jetzt aber echt ironisch. Garantiert!

Im Ernst: du hast da einen annähernd-GHz-Rechenknecht mit zig tausend 
Flipflops und brauchst noch extra eines für eine Taste. Das ist krude...
Gast
Frank K. schrieb:
> Der ESP ist so beschäftigt, dass der Tastendruck in gewissen Zeiträumen
> nicht abgefragt wird und  man muss dann wild "rumdrücken" bis der
> Tastendruck angenommen wurde

Thread verschleiert vielleicht nur Dein Problem.

Wie erkennst Du die Taste bzw den Tastendruck?

Was heißt "nicht nennenswert"? Mikrosekunden, Millisekunden, Aufbau von 
TCP/IP-Verbindungen?

Reicht gedrückt halten?

Poste 3 oder 4 Zeilen der Abfrage.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.