Probleme mit I2C Displays und einem Mega 2560

Wer kann mir helfen? Mein Problem nach dem einschalten habe ich immer Datenmüll in meinem I2C Display.
Wenn ich einen Reset vornehme funktioniert die Anzeige einwandfrei.
Mein Problem, wie kriege ich das hin, dass das Display sofort nach einschalten ohne den Restknopf zu drücken
funktioniert.
im "void setup()" beginne ich mit einem "lcd.init();" also daran kann es nicht liegen.
Ich bin Anfänger, wer kann mir helfen.
Danke im voraus.

lasertronic:
im "void setup()" beginne ich mit einem "lcd.init();" also daran kann es nicht liegen.

Was passiert, wenn Du nach dem init gleich das Display löschst:

lcd.init();
lcd.clear();

?

Hättest Du mal einen Kondensator von ca. 100 nF bis zu einigen ?F da, um mal was zu testen?

Danke mir "lcd.clear();" habe ich schon getestet, brachte aber keinen Erfolg.

Kondensatoren habe ich da.

lasertronic:
Kondensatoren habe ich da.

OK, mein Verdacht: Der Display-Controller initialisiert nicht, weil er beim Power-On einen zu kurzen Reset vom Arduino-Board bekommt.

Abhilfe: Reset-Dauer beim Power-On verlängern.
Möglich durch: Zwischenschalten eines Kondensators zwischen Reset und Ground Pin am Arduino
(Probier mal: 100 nF, 1?F, 10 ?F oder irgendwas dazwischen)

Mögliche Nebenwirkungen: Ggf. kein Sketch-Upload über Bootloader mehr möglich

Also zum Testen erst den Sketch hochladen, dann den Kondensator stecken, dann Power-On

Ergebnis?

Wenn der Display-Kontroller dann mit Kondensator korrekt initialisiert, aber der Sketch-Upload nicht mehr funktioniert, dann müßtest Du die Kondensatorgröße feintunen, evtl. geht dann 100 nF, oder 47 nF, so dass gleichzeitig das Display korrekt initialisiert wird, aber auch ein Upload über Bootloader noch funktioniert.

Ich habe alles getestet, von 1 NF bis 100 uF , meine alten C++ Bücher aus dem Keller geholt, die include Datei auseinander gepflückt,
Hat fast die ganze Nacht gedauert, dass mit der Initialisierung hat mir aber letztendlich den Denkanstoß gebracht.
Ist wahrscheinlich nicht ganz richtig, aber brachte den Erfolg. 2 x "lcd.init();" hintereinander und es funktioniert.

sieht jetzt so aus . . . . .

lcd.init();
lcd.init();
lcd.backlight();
lcd.clear();

Danke nochmal für die Info´s

Es könnte auch sein daß Du dem Display zuwenig Zeit zum initialisieren gibst. Gib mal nach lcd.init(); ein delay(10); ein.

Die Initialisation braucht einige Zeit. Da aus Pin-Sparmaßnamen das busy-Bit des Displays nicht kontrolliert wird, könnte der nächste Befehl zu früh kommen.

Grüße Uwe

eventuell auch andersherum, erst delay(50), danach lcd.init()

Dirk