Interrupts esp32 Prpbleme

OP #7379290
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

Angehängte Dateien:
#7379381
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

[C] // das ist C Quelltext [/c]

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

#7379389
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!

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