Forum: Mikrocontroller und Digitale Elektronik ESP8266 taster entprellen in Interruptroutine


von Luigi A. (spok)


Lesenswert?

Hallo zusammen,

ich habe in meinem Sketch ein Interrupt eingebaut welcher bei einer 
Tastenäderung aufgerufen wird. ich habe in der Interruptroutine ein 
delay(100) eingebaut um den Taster zu entprellen.

Sobald das delay in der Interruptrotine aber drin ist, spielt der ESP 
verrückt und gibt jede menge Zeichen aus, startet nicht richtig.
Darf mann kein delay Befehl in einer Interrupt Routine einbauen?
1
//Sub Interrupt  Change
2
3
  void wechsel(){
4
    zustandalt = digitalRead(reedpin);
5
    delay(100);
6
7
  if (zustandalt==HIGH){
8
    aufzaehler++;
9
    Serial.print("Interrupt->auf->" );
10
    Serial.println(aufzaehler);
11
    
12
  }
13
  if (zustandalt==LOW){
14
    zuzaehler++;
15
    Serial.print("Interrupt->zu->" );
16
    Serial.println(zuzaehler);
17
  
18
  }
19
    
20
  }

von dxs (Gast)


Lesenswert?

Du bist nicht der Erste mit dem Problem ;)

Schau mal hier:
Beitrag "Delay in Interrupt - routine"

von Stefan F. (Gast)


Lesenswert?

Das funktioniert aus zwei Gründen nicht:

1) Die Firmware soll für maximal 20ms unterbrochen werden, sonst kommt 
es zu Kommunikationsfehlern. In der Praxis gehen 50ms.

2) Der Quelltext von delay() enthält einen Aufruf von yield(), was 
wiederum die Firmware des ESP ausführt. Diese wurde aber nicht dafür 
vorgesehen, aus einer ISR heraus aufgerufen zu werden.

von Luigi A. (spok)


Lesenswert?

Danke euch für die Hinweise.
Werde einen anderen weg finden.

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.