Nach Sketch Upload funktioniert manchmal I2C nicht mehr

Der Sketch meiner Uhr umfasst 780 Zeilen (mit Leerzeilen) und ist ca 28kb groß.

Angeschlossen ist ein DS3231, TM1637 LCD 4 Digit, eine WS2812 LED, ein LDR und ein Taster.
Aufgebaut ist alles noch auf einem Breadboard mit entsprechender Verkabelung.

Vom TM1637 ist CLK an D6 und DIO an D5
Vom DS3231 ist SCL an D1 und SDA an D2

Im Sketch selbst mache ich keinerlei i2c Einstellungen.

Zum testen lade ich den Sketch über USB immer wieder mal auf den Wemos D1 mini hoch. Manchmal auch kurz hintereinander. Normalerweise funktioniert alles einwandfrei aber manchmal findet er das RTC Modul nicht. Mache ich dann einen i2c Scan, meldet er für jede Adresse Unknown error at address .... No I2C devices found

Der Fehler kann nicht am Sketch liegen, da es ja zuvor und auch später mit genau dem gleichen Sketch funktioniert.
Am Wemos kann es auch nicht liegen, da ich es schon mit 3 Modulen verschiedener Herkunft versucht habe.

Trenne ich usb ab (und somit auch die Stromversorgung) und schließe es wieder an, besteht der Fehler weiter. Auch wenn ich den Sketch neu hochlade oder den Wemos resette.
Ich habe auch schon "Reset all Flash contents" in der Arduino IDE eingestellt, dennoch funktioniert das i2c nicht.
Auch wenn ich das höchste debug level einstelle, bekomme ich keine Meldungen.

//Edit:
Trenne ich DS3231 ab, dann findet der i2c Scanner keine Geräte, bringt aber keine Fehler mehr. Verbinde ich das Modul wieder, funktioniert alles normal. Der i2c Scanner findet fehlerfrei beides (DS3231 und EEprom vom Modul) an 0x57 und 0x68
Auch wenn ich mit dem ESPFlasher Blank, Flash, Irom und default flashe und dann wieder den Sketcch, funktioniert alles.

Das ganze passiert immer nur nach dem Upload des Sketches. Nie im normalen betrieb des Programms.

Hat jemand eine Idee woran das liegen könnte und wie ich das beheben kann?

Hallo
nehme eine Suchmaschine Deiner Wahl und beschäftige diese mit: I2C Bus Pullup Resistor Calculation.

modi0:
Aufgebaut ist alles noch auf einem Breadboard mit entsprechender Verkabelung.

Hat jemand eine Idee woran das liegen könnte und wie ich das beheben kann?

Baue das mal ab und an anderen Positionen auf den Steckbrett wieder auf.

my_xy_projekt:
Baue das mal ab und an anderen Positionen auf den Steckbrett wieder auf.

Das habe ich schon gemacht. Hat leider nichts gebracht. Habe die Module dann auch direkt ins Breadboard gesteckt und die Kabel noch kürzer gehalten.

paulpaulson:
Hallo
nehme eine Suchmaschine Deiner Wahl und beschäftige diese mit: I2C Bus Pullup Resistor Calculation.

OK, werde ich machen. Aber kann es wirklich daran liegen? Sollte es dann nicht öfters nicht funktionieren? Von ca 50 mal funktioniert es nur einmal nicht. Und immer nur nach dem upload vom Sketch.

Trenne ich DS3231 und TM1637 ab, dann findet der i2c Scanner keine Geräte, bringt aber keine Fehler mehr. Verbinde ich beide wieder, funktioniert alles normal. Der i2c Scanner findet fehlerfrei beide Geräte an 0x57 und 0x68

Erstmal solltest du unterscheiden.....

Die Adresse des DS3231 ist 0x68
Die Adresse des Atmel EEPROM ist 0x57

Der TM1637 hat keine Adresse.
Hat auch gar nix mit I2C zu tun.


Evtl fehlt ja nur etwas mehr Pullup...

Ups, ja stimmt. Hab das im Beitrag editiert.

Das mit dem Pullup werde ich morgen testen. Trotzdem seltsam das es meistens funktioniert.

Habe auch gelesen das dass ds3231 Modul bereits Pullup Widerstände on board hat.

Einfach im spannungslosen Zustand zwischewn SDA/SCL und Vcc ausmessen. die sollten so zwischen 4k7 und 10k sein, wenn vorhanden.

Gruß Tommy

Mit welcher Spannung versorgst du die RTC ?
Und ja, es gibt RTC die haben Pullup-Widerstände drauf. Vermute mal, das ist nicht dein Problem.

HotSystems:
Mit welcher Spannung versorgst du die RTC ?
Und ja, es gibt RTC die haben Pullup-Widerstände drauf. Vermute mal, das ist nicht dein Problem.

Kann mir auch nicht vorstellen, dass ein fehlender PullUp das Problem ist. Das Problem tritt auch nur sehr selten auf. Ich stelle es immer nur fest nachdem ich ein sketch hochgeladen habe. Vor allem das der Fehler bestehen bleibt wenn ich usb ab und wieder an stecke. Hatte ein Speicherproblem vermutet aber ich habe 3 Module aus verschiedener Herkunft getestet.

Ich versorge alles mit 5V.
In den ganzen Beispielen zu dem Modul war das immer so verdrahtet. Auch ohne PullUp.
Blöd ist halt, dass der Fehler nicht reproduzierbar ist. Er tritt warlos und selten auf.

Tommy56:
Einfach im spannungslosen Zustand zwischewn SDA/SCL und Vcc ausmessen. die sollten so zwischen 4k7 und 10k sein, wenn vorhanden.

Gruß Tommy

ok, mache ich. Danke für den Tipp.

modi0:
Ich versorge alles mit 5V.

Blöd ist halt, dass der Fehler nicht reproduzierbar ist. Er tritt warlos und selten auf.

Ich hab mal noch ne Idee...
Mach mal im setup ein kurzes delay von 200-500 ms in der ersten Zeile.

Austesten, ob sich was verändert.

Ich versorge alles mit 5V.

Dir ist schon klar, dass der ESP ein 3,3V Baustein ist, oder?

combie:
ESP

Ich hab mich gefragt, woher Du die Info hast...
Und siehe, der TO hat sein Ausgngspost bearbeitet nachdem die ersten Antworten standen ;(
Danke.

modi0:
Ich versorge alles mit 5V.

Dann solltest du den I2C-Bus vom Wemos zur RTC mittels Levelshifter verbinden.

In den ganzen Beispielen zu dem Modul war das immer so verdrahtet.

Und das vermutlich mit einem Uno o.ä.

my_xy_projekt:
Ich hab mal noch ne Idee...
Mach mal im setup ein kurzes delay von 200-500 ms in der ersten Zeile.

Austesten, ob sich was verändert.

Habe ich gemacht. Wird sich halt erst nach einer gewissen zeit herausstellen ob es hilft, da der Fehler recht selten auftritt.

combie:
Dir ist schon klar, dass der ESP ein 3,3V Baustein ist, oder?

Wie gesagt, in den Beispielen die ich gesehen habe hing das Modul an 5V.

my_xy_projekt:
Ich hab mich gefragt, woher Du die Info hast...
Und siehe, der TO hat sein Ausgngspost bearbeitet nachdem die ersten Antworten standen ;(
Danke.

Das mit dem Wemos stand schon von Anfang an da. Habe nur das mit dem Uhrmodul bearbeitet, weil ich es fälschlicherweise als i2c angesehen hatte. Und die Änderung habe ich mit einem Edit// markiert!

HotSystems:
Dann solltest du den I2C-Bus vom Wemos zur RTC mittels Levelshifter verbinden.

Und das vermutlich mit einem Uno o.ä.

Die Beispiele die ich mir angesehen hatte, waren für den wemos. Werde es dennoch mal an 3,3v versuchen ob das was bringt.

modi0:
Das Wemos d1 Modul hat auch einen 5v Pin.

Seine IO-Pins liefern aber nur max. 3,3V und vertragen lt. Datenblatt auch nur diese Spannung.

Gruß Tommy

modi0:
Habe ich gemacht. Wird sich halt erst nach einer gewissen zeit herausstellen ob es hilft, da der Fehler recht selten auftritt.

Ja.
Das ist halt so.
Alternativ kannst Du auch Messequipment einsetzen. Das geht aber weit über ein Volt- und Amperemeter hinaus. :slight_smile:

Wie gesagt, in den Beispielen die ich gesehen habe hing das Modul an 5V.

Ja. Das ist auch so.

Das mit dem Wemos stand schon von Anfang an da. Habe nur das mit dem Uhrmodul bearbeitet, weil ich es fälschlicherweise als i2c angesehen hatte. Und die Änderung habe ich mit einem Edit// markiert!

Und hier muss ich eingestehen nur darauf geachtet zu haben, wann das edit war und nicht warum.

Der Wemos kann mit den 5V an den DIGITAL-Pin umgehen.
Das Datenblatt des ESP wurde in einer früheren Version mit 5V-tolerant ausgefertigt.
Da aber der Eine oder Andere meinte, das das für alles gilt, wurden die Passagen entfernt.

Es gibt dazu auch den einen oder anderen Eintrag.

Zusammenfassend:
Ich entschuldige mich für meinen voreiligen Rückschluß aufgrund des Zeitstempel des edit.
Der Rest ist reines testen.

Gültig ist das aktuelle Datenblatt und ohne Grund hat Espressif die 5V Toleranz (wenn sie denn mal drin war) nicht raus genommen.
Mir ist es aber völlig egal, ob sich die Leute ans Datenblatt halten (ich weise darauf hin) oder auf "Fachleute" hören, die 5V-Toleranz predigen.
Es ist ja nicht meine Hardware, die durch solche Ratschläge stirbt.

Gruß Tommy

Tommy56:
Gültig ist das aktuelle Datenblatt

Gilt das auch in allen Threads?

predigen.

Dann bin ich ja raus.

my_xy_projekt:
Gilt das auch in allen Threads?

Von meiner Seite aus, ja.

my_xy_projekt:
Dann bin ich ja raus.

Gut.

Gruß Tommy

modi0:
Die Beispiele die ich mir angesehen hatte, waren für den wemos. Werde es dennoch mal an 3,3v versuchen ob das was bringt.

Leider gibt es im Web viele fehlerhafte Beispiele.

Bei mir laufen derartige Schaltungen mit Levelshifter schon lange Zeit fehlerfrei.
Das kann auf einem Steckbrett im warmen Büro auch ohne Levelshifter funktionieren.
Was aber, wenn die Spannung etwas daneben liegt, oder die Temperatur sich ändert. Dann geht das Problem los und du darfst suchen.

Also mach es gleich so, dass es sicher ist.
Wenn nicht, ist es dein Problem.