[beendet] I²C beschleunigen am ESP8266 / NodeMCU

Hallo!

Ich habe mich jetzt mal an die ESPs gewagt und ich glaube, ich werde nie wieder einen Arduino kaufen. Die Teile sind sooo toll! Aber einen Nachteil, soviel konnte ich herausfinden, haben sie: Die I²C-Kommunikation wird nicht automatisch von der Hardware geregelt, sondern muss irgendwie manuell gesteuert werden. Daher ist die maximale Geschwindigkeit 400000 Bit/s bei 80Mhz und 600000 Bit/s bei 160Mhz. Aber müsste es nicht gehen, dass bei 160Mhz die Geschwindigkeit auf 800000 Bit/s hochgefahren werden kann?
Ich habe im Pfad C:\Users\Habedidai\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\cores\esp8266 mir verschiedene Dateien für I²C angesehen und bin dann auf die Funktion gestoßen, die die Geschwindigkeit steuert: twi_setClock(unsignet int freq) in der Datei twi.h! Aber ich habe gesucht und gesucht und keine twi.cpp gefunden. Nichts! Wo ist diese Datei? Kann man diese Geschwindigkeitsbegrenzung irgendwie sonst entfernen?

Gruß
HTML-Fan

Die heißt core_esp8266_si2c.c

Gruß Tommy

Gut, das erklärt einiges. Aber ich frage mich eins: In dieser Datei überprüft der Kompiler, ob 160Mhz aktiviert sind. Allerdings kann man ja diese CPU-Frequenz während der Laufzeit ändern. Was passiert dann? Wird die Geschwindigkeit verdoppelt?

Warum sollte man das tun, auch wenn man das kann?

Wenn man das doch tut, dann sollte man an der Stelle auch gleich die passende twi-Funktion mit aufrufen.
Schon passt alles wieder. Ansonsten ausprobieren.

Gruß Tommy

Weil momentan mein Programm, dessen Funktion irrelevant ist, während der Laufzeit auf 160mhz umschaltet.

Dann habe ich Dir den Weg ja auch gezeigt (ungetestet, nur gefolgert).

Gruß Tommy

Edit: Gibt es einen plausiblen Grund, nicht von Anfang an auf 160 zu fahren?

Tommy56:
Wenn man das doch tut, dann sollte man an der Stelle auch gleich die passende twi-Funktion mit aufrufen.

HTML-Fan:
In dieser Datei überprüft der Kompiler, ob 160Mhz aktiviert sind.

Da der Kompiler da mit #if F_CPU == FCPU80 reingeschaltet ist, werden ganz andere Werte in dem Programm eingesetzt.
Wo kann man die CPU-Geschwindigkeit am PC einstellen?

Dann musst Du wohl die Funktion so umbauen, dass sie zur Laufzeit den Prozessortakt auswertet oder den halt konstant halten.
Einen Tod musst Du sterben.

Gruß Tommy

Tommy56:
Edit: Gibt es einen plausiblen Grund, nicht von Anfang an auf 160 zu fahren?

Wie kann man das denn einstellen?

In der IDE. Werkzeuge --> CPU-Frequency

Gruß Tommy

Oh ...

Und warum ist das dann überhaupt eine Option, den ESp langsamer einzustellen? Der gezogene Strom ist fast identisch, was ist denn dann der Vorteil?

Wärme? Störstrahlung? ...

Ich fahre meine alle mit 80, weil ich noch nicht festgestellt habe, das da was zu lahm wäre.
Nicht alles was machbar ist, ist auch sinnvoll. Das hängt aber von der Anwendung ab.

Gruß Tommy

Noch eine Frage, hat kaum was mit dem Thema zu tun: Was bedeutet Crystal Frequency?

Quartzfrequenz - es kann aber auch im weiteren Sinne ein keramischer Resonator gemeint sein.

Gruß Tommy

Okay. Anders.
Wenn ich die Quartzfrequenz ändere, was passiert dann? Läuft alles schneller oder langsamer, sauberer oder unzuverlässiger?

Was meinst Du mit Quartzfrequenz ändern? Einen anderen Quartz einbauen?
Dann stimmen alle zeitabhängigen Sachen (Serial, I2C,millis(), delay(), ...) nicht mehr. Das würde ich nicht empfehlen.
Bei den AVR kannst Du mit den Fuses noch was anpassen aber ansonsten ist Wegwerfen billiger.

Gruß Tommy

Ups, ich werde ungenau. Die Einstellung Werkzeuge/Crystal Frequency

Na dass die CPU schneller läuft. Die zeitabhängigen Werte werden angepasst.
Wenn Du das unbedingt brauchst, ok, ansonsten ist es grundlegend störanfälliger.

Gruß Tommy

Okay? Ich dachte, die CPU-Frequenz ist von Werkzeuge / CPU Frequency abhängig?

Also langsam verstehe ich nicht mehr, was Du willst. Drücke Dich mal klarer aus.

Gruß Tommy