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
voidsetup(){
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
voidloop(){
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
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.
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.
Wie werden die Taster entprellt? Die Input-Ports des ESP sind nicht 5V-fähig, deswegen müssen die Pullups auf 3.3V gelegt werden. Welche FETs werden verwendet? Sind das LogicLevel-Typen für 3.3V? Fragen über Fragen...
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.
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.
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."
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.
Eine eigene Frage?
Dieser Thread ist über ein Jahr alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.