Forum: Mikrocontroller und Digitale Elektronik i2c-Bus-Problem (vermutlich Hardware)


von Anton S. (gion_toji)


Angehängte Dateien:

Lesenswert?

Hallo Forum,
eins vorweg, ich hab nicht wirklich Plan von der Hardware - meine 
Baustelle ist eher die Software. Ich plage mich schon seit einer ganzen 
Weile mit einem Problem rum und hoffe ihr könnt mir mal helfen.
Der Aufbau ist wie folgt (s. Bild):
am I2C-Bus hängt als Master der MCU und ein persistenter 
Speicher/RTC-Kombo FM30C256. Ferner sind wahlweise eine, zwei oder vier 
externe Platinen mit einem ADC, einem weiteren Speicher und Digitalpoti 
angeschlossen. Die Kabellänge beträgt ca. 1m. Als Bustreiber fungieren 
die P82B715 I2C-Bus-Extender.
Das Problem ist, daß ich in unregelmässigen Abständen den Inhalt des 
FM30C256 nicht komplett auslesen kann. Nach den ersten ca. 500 Bytes 
kommen lauter 0xFF's, die da definitiv nicht drinstehen. Ich arbeite mit 
einer Checksumme und die passt dann natürlich auch nicht
Das Problem tritt sporadisch mit einem Board auf und häufig mit 4 
Boards. Man kann das Problem umgehen, wenn man die Digitalpotis auf 0 
setzt - das kann aber wohl kaum die Lösung sein! Ich vermute, da ist 
i-wo ein Hardware-Fehler und ich würde gerne verstehen, was da genau 
schief läuft. Hat jemand eine Idee?

von Kranker (Gast)


Lesenswert?

Hast du vielleicht einen Schaltplan dazu? Wie hängen die Leitungen 
zwischen den Extendern? Vielleicht hast du dicke Stromschleifen. Ich 
würde SDA und SCL mit einer zusätzlichen Masseleitung verdrillen. 
Außerdem sind laut Schaltplan an jedem Extender Pull-Ups dran. Du hast 
in der Zeichnung nur auf einer Seite die 330Ohm.

The net pull-up on the cable bus can be (VCC - 0.5 V) / (21 - n) mA 
where
n = total number of P82B715 modules on the cable. When there are only 
two
modules, one each end of the cable, the pull-up = (4.5 / 19) = 237 W. 
Make the
pull-ups at each end of the cable equal. Signalling is bidirectional so 
there is no
advantage optimizing for any one direction. The pull-up at each end will 
be 474 W,
using 470 W as the nearest usual value.

von AKKS (Gast)


Lesenswert?

Wo sind die 0xFF?
Im µController, oder hast du die Datenleitung mitgeloggt?

von Joachim S (Gast)


Lesenswert?

Haben die genazen BE denn auch jeweils unterschiedliche Adressen. 
Vielleicht nicht die Lösung, da du sie ja ansprechen kannst, aber wenn 
du das gleiche BE mehrere Male verwendest kann das passieren...

von Jörg S. (joerg-s)


Lesenswert?

Funktioniert es denn wenn du die externen Platinen komplett weg lässt?

von Anton S. (gion_toji)


Lesenswert?

Jörg S. schrieb:
> Funktioniert es denn wenn du die externen Platinen komplett weg lässt?
ja

Joachim S schrieb:
> Haben die genazen BE denn auch jeweils unterschiedliche Adressen.
> Vielleicht nicht die Lösung, da du sie ja ansprechen kannst, aber wenn
> du das gleiche BE mehrere Male verwendest kann das passieren...
ich weiss zwar nicht, was du mit BE meinst, aber die Adressen sind auf 
jeden Fall für jeden IC unterschiedlich. Das habe ich als erstes geprüft 
;)

AKKS schrieb:
> Wo sind die 0xFF?
> Im µController, oder hast du die Datenleitung mitgeloggt?
auf der Datenleitung. Und dadurch natürlich auch im Empfangsregister des 
MCU

Kranker schrieb:
> Hast du vielleicht einen Schaltplan dazu?
ja, allerdings auf dem Papier. Und da ist noch allerhand anderes Gedöns 
dran, was für dieses Problem nicht relevant ist. Alles, was I2C-Bus 
betrifft, ist auf dem Bild

> Wie hängen die Leitungen zwischen den Extendern?
ich verstehe die Frage nicht
> Ich würde SDA und SCL mit einer zusätzlichen Masseleitung verdrillen.
das ist ein 8-poliges Kabel, wo noch andere Leitungen mit dabei sind, 
unter anderem auch Masse. Das Kabel ist abgeschirmt und die Abschirmung 
ist auch mit Masse verbunden
> Außerdem sind laut Schaltplan an jedem Extender Pull-Ups dran. ...
ich werde morgen darauf eingehen

Auf jeden Fall möchte ich mich bei euch allen für die Antworten bedanken

von Kranker (Gast)


Angehängte Dateien:

Lesenswert?

Ich meine die ich rot eingezeichnet habe, die fehlen. Und diese Pullups 
sind halt abhängig von der Anzahl der Extender.

The net pull-up on the cable bus can be (VCC - 0.5 V) / (21 - n) mA
where
n = total number of P82B715 modules on the cable. When there are only
two


1 Platine -> n = 2
4 Platinen -> n = 8

Ist klar, dass sich der Wert der Pull-Ups in Anhängigkeit von 
Platinenanzahl ändert. Und wer weiß, wie empfindlich diese Extender 
sind. Außerdem, am Anfang hast du 2k Pull-Ups, hinter dem zweiten 
Extender 1k. Wie kommst du auf solche Werte? Die Extender machen auch 
erst dann Sinn, wenn du diese an eine höhere Spannung anschließt, z.B. 
10V. Wenn VCC der extender und die restlichen VCC Punkte ein Potential 
sind ist Schaltung sinnlos.

von Jörg S. (joerg-s)


Lesenswert?

Den P82B715 kann man nicht mit einer anderen Spannung betreiben wie den 
Reset der Schaltung, wenn ich mich nicht komplett irre.

von AKKS (Gast)


Lesenswert?

Jörg S. schrieb:
> Den P82B715 kann man nicht mit einer anderen Spannung betreiben wie den
> Reset der Schaltung, wenn ich mich nicht komplett irre

Korrekt, bei verschiedenen Spannungen treibt er auf der höheren Seite 
einen Low-Pegel. Hab das mal mit 3,3V und 5V ausprobiert.

Auch die zusätzliche Pull-Ups sind überflüssig.

Was stehen denn für Daten ins dem Baustein den du ausliest? Kann da 
vielleicht was anderes drin stehen als du erwartest? -> 0xFF

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.