Display friert ein und geht komplett aus. 10m Kabel mit Repeater

Hallo

ich steuer ein I2C Display mit einem SSD1306 an.
Die Leitungslänge ist 10m vom Arduino bis zum Display.
Dazwischen sind 2 Verstärker, die mir das Signal stabil halten auf den 10 Metern.
Alles mit Widerständen versehen wie es vorgeschrieben ist.

Nach ca 2 Stunden Laufzeit friert das Display ein und wird dann auch irgendwann schwarz.
Auf Tests ohne die 10 Meter kabel dazwischen war das alles kein Problem.

Um das Problem einfach zu umgehen suche ich eine Lösung das Display neu zu initialisieren.
Ich finde aber keine.

Die Frage ist auch ob man den I2C Bus komplett resetten kann ohne die Steuerung neuzustarten

#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // I2C / TWI

if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}

u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 20, "Fehler");
u8g.drawStr( 0, 40, "Temperatur 3 ");
}while( u8g.nextPage() );
}

Display wird so angesprochen und Initialisiert.

Bitte um Tipps wie das Problem aus der Welt geschafft werden kann.

Danke

Ist das der ganze Sketch?

Was verwendest du für Verstärker?

Zeige uns ein Schaltbild.

Hallo

der ganze Sketch hat 9000 Zeilen..
Das ist zu viel für hier.

Das sind nur die Zeilen die ich für das Display benutzt habe.

Das Display funktioniert ja auch wunderbar bis auf dieses einfrieren.

Das sind die Verstärker

Das sind die Bausteine : P82B715

Ich habe da von 2 drin.

Ohne verstärker gab es auch diese Probleme. Ich habe die Verstärker eigentlich dafür geholt.

Widerstände ich habe ich jetzt 3.0 kOhm am Bus MAster dran.

Schaltbild kann ich jetzt nicht malen.

Aber Arduino ---> Verstärker In ---> Out Verstärker ---> 10 Meter EIB Bus Kabel ---> In Verstärer ---> Out Verstärker ---> Display

Achso, Extenter hast du eingebaut.

Was für Kabel verwendest du?

Ich vermute, du musst den Bus langsamer machen.

Dieses Kabel nutze ich

Busleitung EIB H-(ST)-H 2x2x0,8

Wie mache ich den Bus langsamer?

Ich finde in verschiedenen Foren mehrere Lösungen.

D:\Arduino\hardware\arduino\avr\libraries

Da habe ich die Wire.h drin.

Kann mir da mal bitte einer genau zeigen welcher Wert eingestellt werden sollte?
Bitte so langsam wie möglich.

Ich habe einen Arduino Mega dran falls das wichtig ist

twi.c (16 KB)

twi.h (1.57 KB)

Wire.cpp (7.44 KB)

Wire.h (2.48 KB)

Ich habe es selber auch noch nicht gemacht, aber hier findest du ein paar Infos.

Wenn ich mir die verlinkte Platine so ansehe, dann ist die einzige Spannungspufferung der 100n KerKo für ein ganzes Bussegment. Das kann nicht gut gehen. Schalte mal probeweise noch einen Elko mit mindestens 100µF an jeden Extender und ans Display, welches wohl voraussichtlich ebenfalls mit über das Kabel versorgt wird. Bei jedem Schaltvorgang bricht die Betriebsspannung ein und irgendwann hängt sich dann was auf. Wieviel Strom ziehst du über das Kabel? Wenn das Display noch Hintergrundbeleuchtung hat, kann das eventuell schon zuviel des Guten sein. Es gibt da "Stromschweine", die 100mA und mehr ziehen. Bei 20m Kabellänge kommt da schon etwas an Widerstand zusammen (kann man per Ohmschen Gesetz ausrechnen).
Aber selbst dann kann man noch in die Trickkistte greifen. 12V als Stromversorgung über das Kabel jagen und dem Extender und dem Display einen 78(L)05 vorschalten, so das die stabilen 5V erst vor Ort erzeugt werden :wink:
Bei soviel Buslänge würde ich die Abschlusswiderstände sogar auf Busanfang und Busende aufteilen. 4,7K vorne und hinten sollten gehen. Mit 2,2K bei ca. 1m habe ich auch schon gearbeitet, das schafft die Perepherie. Sinn der Aufteilung ist vorn und hinten eine Terminierung des Busses. So sind Reflektionen an einem Ende noch unwahrscheinlicher.

Wie hast Du die beiden P82B715 an/zusammengeschlossen?

Aber Arduino ---> Verstärker In ---> Out Verstärker ---> 10 Meter EIB Bus Kabel ---> In Verstärer ---> Out Verstärker ---> Display

Die P82B715 sind keine Verstärker. Sie verstärken das I2C Signal nicht und haben darum keinen Eingang und Ausgang sondern eine I2C Seite (SDA bzw SCL oder SX bzw SY) und eine Seite für den langen Kabel (LDA bzw LCL oder LX bzw LY).


Du mußt die beiden P82B715 an LDA bzw LCL zusammenschalten und den Arduino bzw das Display an den beiden SDA/SCL Anschlüssen jeweils eines der beiden P82B715.

Wie aus Schaldbild ersichtlich brauchen die beiden I2C Teilbusse Pullupwiderstände und auch der Zwischenbus.

Der I2C Bus sollte auch mit 100kHz benutzt werden.

Grüße Uwe

com1992:
der ganze Sketch hat 9000 Zeilen..
Das ist zu viel für hier.

Ist ja schön, wenn Du eine Vermutung hast, was "zu viel für hier" ist.

Aber dass der I2C-Bus für die Kommunikation zwischen Chips innerhalb desselben Gerätegehäuses erfunden wurde (z.B. in einem Gerätegehause 453012 cm), und nicht um "Strecke zu machen", mit 100khz Taktrate über Drahtleitung mit 0V/5V, der Verdacht einer "viel zu langen Leitung für die hohe Taktrate und 5V-Pegel" ist Dir noch nicht gekommen?

Na ja, wohl irgendwie doch, wenn Du von "Verstärkern" redest, was auch immer diese Verstärker-Krücken sein sollen.

Du solltest den langen Leitungsabschnitt mit 12V betreiben.

Und wie schon gesagt, am Ende mit einem Regler aus den 12V 5V machen, dass du nicht noch eine 5V Leitung mitführen musst.

@jurs: Ob man dazu Krücken sagen kann, ich weiß nicht. Ich benutze einen 96er Typ davon, und der ist eben genau für diesen Einsatz entwickelt worden, nämlich das I2C Protokoll auf ein anderes Spannungsniveau zu bringen, damit längere Distanzen überbrückt werden können.

Das Pegelumsetzer IC ist schon passend für diese Aufgabe, nur die Umsetzung in eine Leiterplatte ist vorsichtig ausgedrückt, etwas unglücklich geschehen :fearful: :stuck_out_tongue_closed_eyes:
Das erinnert mich an diverse China-Boards. Es funktioniert meistens irgendwie, nur eben nicht sicher und reproduzierbar.
So nach dem Motto: Abblockkondensatoren kann man sich sparen, 85° Elkos sind billiger, Low ESR - was ist das? Hauptsache, die Drossel ist klein, was bei Nennstrom passiert, ist erst mal nebensächlich... einfach nur was hingewurschtelt :smiling_imp: