ESP32 so beschäftigt das Taster zu selten abgefragt wird

OP #6956990
Lesenswert?

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?
#6957060
Lesenswert?

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 #6957081
Lesenswert?

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) #6957104
Lesenswert?

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 #6957116
Lesenswert?

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 #6957153
Lesenswert?

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..
#6957189
Lesenswert?

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 #6957220
Lesenswert?

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 #6957230
Lesenswert?

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 #6957338
Lesenswert?

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 #6957423
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren