esp8266 Port toggelt ungewollt

OP #7800503
Lesenswert?

Hallo, Ich habe einen esp8266 board (Lollin wemos D1 mini). An den Ports sind zwei Taster angeschlossen und Transistoren welche leds und einen Laserpointer ansteuern.

Zwei Port Pins (D4 und D0) blinken jetzt aber ungewollt ca. alle 3 sec.

Ich konnte es auf die Zeile: "while(digitalRead(SHOOT_SWITCH));" eingrenzen. Sobald diese raus ist blinkt nichts. jemand eine Idee woran das liegen kann? Bin überfragt.

Der Schaltplan ist im Anhang.

Hier mein aktueller Code:

1
#define FLASH_LED_1 D5
2
#define FLASH_LED_2 D6
3
#define FLASH_LED_3 D7
4
#define FLASH_LED_4 D8
5
#define FLASH_LED_5 D4
6
#define LASER D0
7
#define SHOOT_SWITCH D1
8

9

10
void setup() {
11
  pinMode(FLASH_LED_1, OUTPUT);
12
  pinMode(FLASH_LED_2, OUTPUT);
13
  pinMode(FLASH_LED_3, OUTPUT);
14
  pinMode(FLASH_LED_4, OUTPUT);
15
  pinMode(FLASH_LED_5, OUTPUT);
16
  pinMode(LASER, OUTPUT);
17
  digitalWrite(FLASH_LED_1, LOW);
18
  digitalWrite(FLASH_LED_2, LOW);
19
  digitalWrite(FLASH_LED_3, LOW);
20
  digitalWrite(FLASH_LED_4, LOW);
21
  digitalWrite(FLASH_LED_5, LOW);
22
  digitalWrite(LASER, LOW);
23
  pinMode(SHOOT_SWITCH, INPUT);
24
  pinMode(SHOOT_SWITCH, INPUT_PULLUP);
25
}
26

27
void loop() {
28
  while(digitalRead(SHOOT_SWITCH)); // solange der Schalter gedrückt ist
29

30
  //digitalWrite(FLASH_LED_1, HIGH);  // turn the LED on (HIGH is the voltage level)
31
  //delay(100);
32
  while(!digitalRead(SHOOT_SWITCH)); // solange der Schalter nicht gedrückt ist
33

34

35
}
Angehängte Dateien:
Gast #7800508
Lesenswert?

Sven schrieb:

Ich konnte es auf die Zeile: "while(digitalRead(SHOOT_SWITCH));" eingrenzen. Sobald diese raus ist blinkt nichts. jemand eine Idee woran das liegen kann?

Dieser Eingang legt im Ruhezustand auf HIGH (true) und wenn gedrückt auf LOW (false), deine Programmlogik erwartet das Gegenteil. Aber das alleine ist noch keine Lösung des Problems, denn solche Endlosschleifen sind beim ESP8266 nicht erlaubt. Du löst damit den Watchdog aus, der einen Reset auslöst.

Lies das: http://stefanfrings.de/esp8266/index.html#fallstricke

#7800518
Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:

Ach was, wirklich? Hätte ich jetzt nicht gedacht. Wollen wir noch mehr Hinweise duplizieren, die bereits auf der "Lies das" Seite stehen?

Man kann es doch gleich auf den Punkt bringen, ohne die eigene Seite gleich wieder in den Vordergrund zu schieben.

Außerdem sind natürlich die wenigsten Taster so wichtig, dass sie mit der maximalen Abfragefrequenz des ESP8266 überwacht werden müssen. Eine regelmäßige, timergesteuerte Abfrage ist deutlich sinnvoller.

Beitrag #7800519 wurde von einem Moderator gelöscht.
OP #7800604
Lesenswert?

vielen Dank für die schnellen Antworten. Das war das Problem.

Das Programm ist so noch nicht fertig, ich wollte zuerst meine Hardware testen. Da es aber wirklich relativ simple ist werde ich es vermutlich trotzdem über eine while schleife lösen.

Das Problem mit den Tastern an 5V ist mir auch aufgefallen nachdem ich es gelötet hatte. Werde ich vielleicht noch anpassen, aber aktuell fließt einfach ein kleiner Strom über dem PullUp und die interne Klemmdiode, nicht ideal aber tut erstmal. Die FETs sind logik level und die 3,3V reichen zum durchsteuern.

Achja, Entprellung wird dann noch in der software erledigt.

Moderator (Firma: Titel) Persönliche Seite #7800652
Lesenswert?

Sven schrieb:

aber aktuell fließt einfach ein kleiner Strom über dem PullUp und die interne Klemmdiode

Wohin fließt dieser Strom von immerhin 2x 1,5mA? Richtig: nach 3V3. Wo wird dieser Strom dann "verbraucht"? Der 5V/3V3 Spannungsregler kann nur Strom liefern, aber nicht aufnehmen. Wenn dieser Diodenstrom keinen Verbraucher in Richtung GND findet (weil zb der uC im Sleep nur 100uA braucht), dann werden einfach die 3,3V auf bis zu 4,7V angehoben. Und das ist deutlich über der Spec des ESP.

Gast #7800782
Lesenswert?

Arduino F. schrieb:

Irrtum! Eine solche "interne Klemmdiode" gibt es beim ESP8266 nicht.

Ja, meine ESP Chips haben definitiv keine Klemmdiode direkt zwischen I/O Pin und VDD. Die meisten anderen CMOS Chips haben eine.

Früher stand das angeblich mal im Datenblatt:

"All digital I/O Pins are protected from over-voltage with a snap-back circuit connected between the pad and GND. The snap-back voltage is typically 6V, and the holding voltage is 5.8 Volt. This provides protection from over-voltages and ESD."

https://hackaday.com/2022/05/12/is-esp8266-5-v-tolerant-this-curve-tracer-says-yes/

Daraus wird alle paar Monate erneut eine 5V Toleranz abgeleitet, doch das halte ich für falsch weil direkt darüber klipp und klar steht, dass an allen I/O Pins maximal 3,6 Volt zulässig sind. An diesen maximalen 3,6V hat Espressif nie etwas geändert.

Die Messung die der Typ gemacht hat ist übrigens unglaubwürdig. Er hat bei allen Spannungen von 0 bis 6 Volt ungefähr 0,25 mA gemessen. Das kann unmöglich sein. Nie im Leben nimmt ein heiler I/O Pin so viel Strom auf. Das IC müsste eine negative Ausgangsspannung liefern, um bei knapp über 0V und 1kΩ schon auf 0,25 mA zu kommen.

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