Forum: Mikrocontroller und Digitale Elektronik ESP32 so beschäftigt das Taster zu selten abgefragt wird


von Frank K. (micromax)


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?

: Verschoben durch Moderator
von Wegweisender (Gast)


Lesenswert?

Und der Code ist geheim?

von Achim M. (minifloat)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Obermayer F. (Firma: tbd) (foikei)


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.

von Wolfgang (Gast)


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.

von Pepe T. (pepe_t)


Lesenswert?

>Steckt da Ironie drin, oder nicht?

Nein das meint der ernst. Das ist so.
Alternativ kannst du beim esp32 einen kern nur zur tastenabfrage 
benutzen.

>Pin-Change Interrupt
Am debouncer wird er scheitern :)

: Bearbeitet durch User
von EAF (Gast)


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..

von Wolfgang (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


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

von Frank K. (micromax)


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

von W.S. (Gast)


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.

von Frank K. (micromax)


Lesenswert?

W.S. schrieb:
> Also, was läuft denn da auf deinem Controller?

FreeRTOS! Die Seiten habe ich in meinem ESP32-Buch immer überlesen :-D
... und dann kommen die Seiten zur Thread Funktionalität... jetzt 
benötige ich ein paar Tage Zeit

von R.TOS (Gast)


Lesenswert?

Frank K. schrieb:
> FreeRTOS!

Als Real Time Betriebssystem sollte dir das doch sogar verraten, wie 
echtzeitfähig es ist, d.h. welche Reaktionszeit auf ein Event garantiert 
wird.

von Rotor (Gast)


Lesenswert?

Und keine Angst vor Interrupts, klingt furchtbar schwierig aber am 
Schluss sind's dann nur eine Handvoll Codezeilen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

Frank K. schrieb:
> man muss dann wild "rumdrücken" bis der
> Tastendruck angenommen wurde.

Das ist dann definitiv ein Programmierfehler.
Im einfachsten Fall packt man die Entprellib in den Systick Interrupt 
alle 10ms.

von A. S. (Gast)


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.

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.