Forum: Mikrocontroller und Digitale Elektronik Interrupts esp32 Prpbleme


von Manfred S. (stieneker)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich weiss nicht weiter.
Ich hab jetzt schon (fast) über mehrere Wochen versucht bei mindestens 5 
verschiedenen esp32 Varianten, IDE1 und IDE2 Versionen, verschiedenen 
esp32 Bibliothekständen und Routinen versucht, einen interrupt 
zum.laifem zu bringen.
Bei dem ESP hat das Ende letzten Jahres auch funktioniert. Jetzt nicht 
mehr... warum?
Bei den 8266, Mano und Mega habe ich die eingesetzt und läuft
Warum "zickt" der ESP32 rum?
Ist bei Espressif da Grade eine " Gemeinheit" unterwegs?
Wer hat auch unerwartete Probleme?

Viele Grüße
Manfred

von Helmut -. (dc3yc)


Lesenswert?

Ein delay in einer Interruptroutine? Das geht gar nicht!
Und wo ist die schließenden Klammer von Sensormessung()???

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Probier mal ohne das Delay. Halte ich fuer verdaechtig.

von Manfred S. (stieneker)


Angehängte Dateien:

Lesenswert?

Ja, mach ich nochmal mit dem delay(). Hatte ich (glaube ich ) schon 
probiert.
Ich glaub, das Problem liegt tiefer...
Viele Grüße
Manfred

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Manfred S. schrieb:
> warum?

Warum bekommen wir keinen testbaren Code zu sehen?
Soll ich das ernsthaft abtippen?

Manfred S. schrieb:
> Wer hat auch unerwartete Probleme?
Ja, wer wohl?
Ich nicht!
Unerwartete vielleicht, aber keine unlösbaren.

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Arduino F. schrieb:
> Warum bekommen wir keinen testbaren Code zu sehen?
> Soll ich das ernsthaft abtippen?

Bleiben die Finger auch schoen schlank, newohr?

von Falk B. (falk)


Lesenswert?

Manfred S. schrieb:
> ch hab jetzt schon (fast) über mehrere Wochen versucht bei mindestens 5
> verschiedenen esp32 Varianten, IDE1 und IDE2 Versionen, verschiedenen
> esp32 Bibliothekständen und Routinen versucht, einen interrupt
> zum.laifem zu bringen.
> Bei dem ESP hat das Ende letzten Jahres auch funktioniert. Jetzt nicht
> mehr... warum?

Willst du uns veralber? Was soll der Käse mit dem ECHTEN 
Bildschirmphoto?

Kurzen Quelltext (max 1 Bildschirmseite, ca. 100 Zeilen), kann man hier 
direkt reinkopieren und mittels der eckigen Klammer [ c ] und [ /c] 
einschließen
1
// das ist C Quelltext

Längere Quelltexte DIREKT als Anhang.

> Bei den 8266, Mano und Mega habe ich die eingesetzt und läuft
> Warum "zickt" der ESP32 rum?

Dein Qelltext ist ein Chaos! Das läuft nie durch den Compiler.

> Ist bei Espressif da Grade eine " Gemeinheit" unterwegs?

Nö.

von Falk B. (falk)


Lesenswert?

Manfred S. schrieb:
> Ich glaub, das Problem liegt tiefer...

Es sitzt vor der Tastatur.

von Falk B. (falk)


Lesenswert?

So geht es. Aber man muss beachten, daß das Signal am Interupteingang 
prellfrei sein muss, sonst flackert die LED im Test nur! Ein einfacher 
Taster ist das NICHT! Und delay() funktioniert beim Arduino im Interrupt 
nicht, denn die Funktion benötigt aktive Interrupts (Timer 0). Im 
Interrupt sind diese aber inaktiv, zumindest beim AVR.
1
void setup() {
2
  pinMode(LED_BUILTIN, OUTPUT);
3
  pinMode(2, INPUT_PULLUP);
4
  attachInterrupt(digitalPinToInterrupt(2), Sensormessung, FALLING);
5
}
6
7
void Sensormessung(void) {
8
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
9
}
10
void loop() {
11
12
}

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

"Generally, an ISR should be as short and fast as possible. If your 
sketch uses multiple ISRs, only one can run at a time, other interrupts 
will be executed after the current one finishes in an order that depends 
on the priority they have. millis() relies on interrupts to count, so it 
will never increment inside an ISR. Since delay() requires interrupts to 
work, it will not work if called inside an ISR. micros() works initially 
but will start behaving erratically after 1-2 ms. delayMicroseconds() 
does not use any counter, so it will work as normal."

RTFM works!

: Bearbeitet durch User
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.