Mal eine kurze Frage an die ESP8266 bzw. ESP12E Kenner. Ich dachte eigentlich das man beim nutzen der Pins D1/D2 (also GPIO 5 und GPIO4) wie üblich einen Pullup-Widerstand braucht. Ich habe aber festgestellt das es genauso ohne geht, sind da interne Pullup Widerstände auf dem ESP12E Modul aktivierbar?
Tipp 1:
Einfach mal die ein oder andere Doku lesen.....
Tipp 2:
Google kann dir helfen.
Bitte aufmerksam lesen: https://github.com/esp8266/Arduino/blob/master/doc/reference.md#digital-io
Habe ich eigentlich schon, zu I2C in Bezug aus ESP8266 sind die Infos etwas dürftig!
Wenn ich es aber richtig interpretiere, dann kann man zu allen 15 GPIOs einen PullUp zuschalten. Ich vermute das dies die Arduino Lib´s bei I2C so machen, kannst du das bestätigen?
Darauf deutet zumindet dieser Satz auf der verlinkten Seite:
Digital pins 0—15 can be INPUT, OUTPUT, or INPUT_PULLUP. Pin 16 can be INPUT, OUTPUT or INPUT_PULLDOWN_16. At startup, pins are configured as INPUT.
Ah, ja, I2C!
Warum nicht sofort?
Das will ich gar nicht bestätigen, weil die Frage einen Fehler enthält.
Die fehlerhafte Annahme, dass die eingebauten Pullup für I2C reichen.
Das ist nicht der Fall!
Also, ich vermute:
Du unterliegst einem Irrtum!
Und eine weitere Vermutung:
Dein I2C Dingen hat selber Pullups an Board.
Dein Zitat hat erst mal nichts mit I2C zu tun.
maxi62:
❝Digital pins 0--15 can be INPUT, OUTPUT, or INPUT_PULLUP. Pin 16 can be INPUT, OUTPUT or INPUT_PULLDOWN_16. At startup, pins are configured as INPUT.
Damit dein I2C stabil funktioniert, solltest du Pullups für I2C einsetzen. Dabei musst du, wie combie schrieb, die Doku oder Datenblätter lesen, da es Module gibt, die schon einen Hardware-Pullup integriert haben.
Dann kannst du dir diesen sparen. Aber nur dann.
Ausschließen kannst du es aber auch nicht das die Arduino Libs die interne Pullups nutzt, wenn ich dich richtig verstehe. Du liegst falsch, es ist durchaus denkbar das die für viele I2C Komponenten reichen.
Fehler kann ich ausschließen, mit mehreren Modulen getestet. Es funktioniert stabil.
Das der Sensor einen PullUp besitzt, daran habe ich natürlich auch schon längst gedacht, allerdings kann ich im Datenblatt des HYT939 keinen Hinweis dazu finden.
Daher ja meine wohl berechtigte Frage.
Eine Illusion.....
-
das mit der berechtigten Frage!
A: Denn alle, für die Antwort nötigen Informationen finden sich auf deiner Festplatte.
B: Wenn du I2C nutzen willst, mach die richtigen Pullups dran! Darum ist die Frage im Kern falsch. -
die internen Pullup reichen nicht.
Die Zukunft wird es dir zeigen.
void twi_init(unsigned char sda, unsigned char scl){
twi_sda = sda;
twi_scl = scl;
pinMode(twi_sda, INPUT_PULLUP);
pinMode(twi_scl, INPUT_PULLUP);
twi_setClock(100000);
twi_setClockStretchLimit(230); // default value is 230 uS
}
Aus: https://github.com/esp8266/Arduino/blob/master/cores/esp8266/core_esp8266_si2c.c
Daher ja meine wohl berechtigte Frage.
Es gibt nur eine einzige Situation, in der die Frage Berechtigung haben könnte:
Wenn nichts am I2C Bus angeschlossen ist.
Danke und Tschüss....
Ok, also interen PullUps werden genutzt. Das wollte ich nur wissen, danke!
Bislang funktionieren die seiten Tagen problemlos, aber dennoch muss ich dir recht geben, aus Sicherheitsgründen könnten externe sinnvoll sein, ich werde es weiter beobachten.
maxi62:
Ausschließen kannst du es aber auch nicht das die Arduino Libs die interne Pullups nutzt, wenn ich dich richtig verstehe. Du liegst falsch, es ist durchaus denkbar das die für viele I2C Komponenten reichen.
Ich antworte hier mal, auch wenn ich nicht weiß, ob du mich damit meinst. Extra dafür git es hier die Zitat-Funktion (quote), die macht vieles deutlicher.
Und ja, mit meiner Antwort habe ich es nicht ausgeschlossen.
Da aber die internen Pullups irgendwo bei 22-50 kOhm liegen, hat sich erwiesen, dieser Wert ist in vielen Fällen zu hoch ist.
Damit ist der I2C-Bus sehr störanfällig. Also solltest du besser immer die Pullups von 4,7 kOhm einsetzen.
Ich kann nicht verstehen, warum du dich dagegen sträubst.