Forum: Digitale Signalverarbeitung / DSP / Machine Learning Signalqualität I²C


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Manuel Neff (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend

Habe mich in letzter Zeit ein wenig mit I²C beschäftigt, da ich es über 
einige Meter übertragen möchte. Ich habe die Datenleitungen mit meinem 
Oszilloskop ausgemessen und hätte von euch gerne eine Einschätzung zu 
meiner Signalqualität.

Den I²C habe ich gemäss dem angefügten Bild namens "Schaltung" 
aufgebaut. Habe mich an einem PDF aus dem Internet orientiert, welches 
über lange I²C-Buslänge und ungefähre Dimensionierung der Widerstände 
berichtete.

Habe 1x eine Messung mit einer Leitungslänge von 1meter gemacht und bei 
der 2. Messung noch 9meter Kabel angehängt, jedoch war es am einen Ende 
offen. Bei den zusätzlichen 9metern der 2. Messung ging es mir darum, 
eine kapazität zu simulieren, welche das I²C-Signal negativ beeinflussen 
sollte. Bei beiden Messungen klappte der Datenaustausch auf dem Bus 
problemlos. Alles über 10meter hat jedoch teilweise zu Problemen 
geführt.

Nun zu meiner Frage:
Wie würdet ihr die Signalqualität einschätzen. Mir geht es drum, dass 
auch nach Alterung der Bauteile die Datenübertragung immer noch sauber 
gewährleistet ist. Im Moment kann ich noch nicht genau sagen, welche 
Buslänge ich schlussendlich brauche, jedoch sind es Schätzungsweise um 
die 5 bis 6 meter.

Wie kann ich meine Schaltung verbessern? Mit den 1490Ohm 
Pullupwiderstand sind es bei 3.3V einen Strom von 2.2mA. Gemäss 
Busbeschrieb kann I²C bis zu 3mA strom bringen. Sollte ich diese 3mA 
voll ausnutzen oder gibt es andere, sinnvollere Varianten um meine 
Busqualität zu verbessern?

Wie wird das in der "professionellen" elektronik gehandhabt. Lässt man 
die Schaltung stehen, wenn sie einmal funktioniert? Oder wird sie bis 
ans limit optimiert? Habe leider keinerlei Erfahrungswerte was gut oder 
schlecht ist.

Danke für zahlreiche Antworten

von I2C Spec (Gast)


Lesenswert?

I²C war eigentlich nie gedacht außerhalb einer PCB benutzt zu werden. 
Der eigentliche Gedanken war, einen Bus für mehrere ICs auf einer PCB 
bereitzustellen. Für externe Verbindungen solltest du auf einen Bus 
setzten, der tatsächlich dafür ausgelegt wurde. Stichwort CAN, RS485, 
RS232, HART, usw.

Hast du einen Link zu diesem PDF?

Die Signale zusammen mit der RC Schaltung und Leitungslänge sind 
plausibel.

von Manuel Neff (Gast)


Angehängte Dateien:

Lesenswert?

I2C Spec schrieb:
> I²C war eigentlich nie gedacht außerhalb einer PCB benutzt zu
> werden.
> Der eigentliche Gedanken war, einen Bus für mehrere ICs auf einer PCB
> bereitzustellen. Für externe Verbindungen solltest du auf einen Bus
> setzten, der tatsächlich dafür ausgelegt wurde. Stichwort CAN, RS485,
> RS232, HART, usw.
>
> Hast du einen Link zu diesem PDF?
>
> Die Signale zusammen mit der RC Schaltung und Leitungslänge sind
> plausibel.

Also direkt für lange Leitungen ist nichts beschrieben...Aber einige 
Beispielwerte, welche gut miteinander harmonieren sollen.

Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Manuel Neff schrieb:
> Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?

Was erwartest du hier?

Für die grobe Misshandlung, die du deinem Signal antust, sieht das 
normal aus.

Bist du dir sicher das mit den Serienwiederständen und dem Kondensator 
nicht jemand versucht hat das Ersatzschaltbild eines Kabels 
darzustellen? So hast du dein Kabel künstlich verlängert. Rechne mal aus 
welche Ströme beim Umladen des Kondensators bei den jeweiligen Freq. 
fliesen, du das nur statisch gerechnet. Und überhaupt wie kommt man auf 
so Werte wie 1,49kOhm?  Die entsprechen keiner gängigen Normenreihe und 
noch dazu mit einer Genauigkeit von zwei Stellen hinter dem Komma bei 
einem 08/15 Bus?

von Kevin M. (arduinolover)


Lesenswert?

Die Beschaltung macht wenig bis keinen Sinn, in deinem PDF wollen sie 
Störungen auf der Leitung filtern. Das hat nichts mit einem langen Bus 
zu tun.

Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF 
entfernen.

: Bearbeitet durch User
von I2C Spec (Gast)


Lesenswert?

Das Paper zielt eher auf das Filtern der Bussleitungen auf Boards ab, 
bei denen der Bus durch umgebene System zugemüllt wird.

Dein Signal zeigt halt die starke Kapazität deiner Schaltung. Wenn du 
mit der Frequenz höher gehst läufst du Gefahr, dass du die Pegel nicht 
mehr erreichst und Clock/Datensignale verloren gehen. Es wird wohl 
irgendwie klappen aber immer irgendwie gerade so. Externe Störungen, die 
du dir dann dazu noch einfängst erhöhen dann auch Bit Fehlerrate...
Wenn es nicht läuft und unbedingt I2C sein muss, wirst du wohl mit der 
Frequenz runter gehen müssen.

Teste mal wie es aussieht wenn du den Kondensator rausnimmst.

Sonst einfach einen Bus benutzen der für Verbindungen außerhalb der PCB 
vorgesehen ist.

von Lars R. (larsr)


Lesenswert?

Kevin M. schrieb:
> Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF
> entfernen.

Würde ich auch empfehlen und stattdessen als Pullup zwei Stromquellen, 
dann sind die steigenden Flanken auch sauber.

von Manuel Neff (Gast)


Lesenswert?

Irgend W. schrieb:
> Manuel Neff schrieb:
>> Was ist deine Meinung zum I²C-Signal, welches ich gemessen habe?
>
> Was erwartest du hier?
>
> Für die grobe Misshandlung, die du deinem Signal antust, sieht das
> normal aus.
>
> Bist du dir sicher das mit den Serienwiederständen und dem Kondensator
> nicht jemand versucht hat das Ersatzschaltbild eines Kabels
> darzustellen? So hast du dein Kabel künstlich verlängert. Rechne mal aus
> welche Ströme beim Umladen des Kondensators bei den jeweiligen Freq.
> fliesen, du das nur statisch gerechnet. Und überhaupt wie kommt man auf
> so Werte wie 1,49kOhm?  Die entsprechen keiner gängigen Normenreihe und
> noch dazu mit einer Genauigkeit von zwei Stellen hinter dem Komma bei
> einem 08/15 Bus?

Ich werde morgen einmal die Serienwiderstände/130pF Kondensator in 
meiner Schaltung auslöten und testen. Das mit dem Kondensator weiss ich 
nicht mehr, von wo ich das her habe. Die Widerstände hat man ja bei 
Datenleitungen mit Potentialunterschied, um den Strom zu begrenzen. 
Klang für mich deshalb noch mehr oder weniger plausibel.

Den Widerstandswert 1,49kOhm habe ich errechnet aus einigen 
Teilwiderständen. Habe am Master und an den Slaves jeweils Widerstände

von P. S. (namnyef)


Lesenswert?

Ob man das so "stehen lassen" kann, hängt halt von der Anwendung ab. Das 
kann  in Ordnung sein, wenn z. B. nur einmal beim Hochfahren aus einem 
EEPROM mit einer CRC abgesicherte Daten geholt werden müssen.

Man kann sich noch mit so etwas wie einem PCA9615 (differentieller 
I²C-Tranceiver) behelfen. Aber schön wir "I²C über Kabel" nie wirklich.

von Manuel Neff (Gast)


Lesenswert?

Lars R. schrieb:
> Kevin M. schrieb:
>> Im ersten Schritt solltest du schonmal die die 180Ohm und die 130pF
>> entfernen.
>
> Würde ich auch empfehlen und stattdessen als Pullup zwei Stromquellen,
> dann sind die steigenden Flanken auch sauber.

Interessanter Ansatz. Hab noch die davon gehört. Kennst du eine gute 
einfache Schaltung? Bin mit der Recherche im Internet ein wenig 
unsicher, da ich nicht genau weiss, welchen Schaltungen ich vertrauen 
darf.

Danke

von Analoger (Gast)


Lesenswert?

Manuel Neff schrieb:
> Serienwiderstände/130pF Kondensator

sicher, dass es 130pF sind, die da verbaut sind? Hat da einer 130n 
eingebaut? Die Flanken sehen schlimm aus. Das ist am Rande des 
Akzeptablen.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Manuel Neff schrieb:
> ...Die Widerstände hat man ja bei Datenleitungen mit Potentialunterschied, um 
den Strom zu begrenzen...
> ...Habe am Master und an den Slaves jeweils Widerstände...

Da dürfte dein Denkfehler liegen. Das gilt für Aktiv getrieben push/pull 
Endstufen, aber nicht für OC Ausgänge wie bei I2C. Das "HI" wird 
ausschließlich durch den pullup erzeugt und nicht durch die 
Busteilnehmer. Und wenn du wie vorgesehen auch nur ein Widerstand 
verwendest hast du garnicht das Problem mit etwaigen 
Potenzialunterschieden (GND muss natürlich verbunden sein und die 
Spannung in der Bandbreite beider Seiten). Der maximale Strom wird durch 
den pullup begrenzt.

von A. H. (pluto25)


Lesenswert?

Manuel Neff schrieb:
> Wie würdet ihr die Signalqualität einschätzen. Mir geht es drum, dass
> auch nach Alterung der Bauteile die Datenübertragung immer noch sauber
> gewährleistet ist.

Das Signal ist ein Traum. Keine Stöärungen und eine satte fallende 
Flanke.
Die Steigende ist irrelevant, wichtig ist nur das SDA eine Mindestzeit 
High ist bevor SCL Low wird. (s. Datenblätter).
Für die Simulation von Alterung eifach noch weitere 10m dranhägen und 
die Frequenz soweit runter das es wieder funktioniert. Wenn Deine 
Umgebung keine Störungen produziert können der Kondensator und die 180 
Ohm weg. Die 68 Ohm sind Angstwidersände für den Fall das es einen 
Vcc-Signalleitung Kurzschluß gibt.
"Professionell" im Sine von Industrie/Medizin Technik? Da würde das mit 
dem i2c gar nicht erst versucht, bzw reichlich Störungen drauf gegeben 
um zu sehen was geht.
im Sinne von Customerproduktentwicklung. Da wird gar nichts optimiert 
nur solange Eingespart bis es gerade noch die Garantiezeit hält.
(Alle Teile entfernen , 1k Pullups und fertig ;-)
PS Konstandstromquellen-Pullups sind weitere Fehlequellen. Zum einen 
könnten sie ausfallen zum anderen produziert jede schnelle Flanke 
Störungen.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Manuel Neff schrieb:
> Lars R. schrieb:
>> als Pullup zwei Stromquellen
>
> Kennst du eine gute einfache Schaltung?

Es wäre möglich, eine Konstantstromquelle aus zwei PNPs zu bauen. 
Aber das gibt es auch fertig (LTC1694, LTC4311), oder integriert in 
I²C-Repeatern (z.B. TCA9803).

von neuer PIC Freund (Gast)


Lesenswert?

> Die Steigende ist irrelevant

Wie deutet man dann den Parameter "rise time of both SDA and SCL 
signals" in UM10204Rev6, Tabelle 10?

> aus zwei PNPs

BCV62 spart Platz. Benutze ich sehr gerne. Macht den Bus zudem robuster 
gegen Einstrahlungen.

von c-hater (Gast)


Lesenswert?

Manuel Neff schrieb:

> Wie kann ich meine Schaltung verbessern?

180Ohm Widerstand ersatzlos (naja: Ersatz 0Ohm) entsorgen, 130pF 
Kondensator ebenfalls ersatzlos entsorgen. Pullups auf 1.2k verringern.

Das ist schon so ziemlich alles, was man machen kann. Ansosnten hilft 
nur: Entweder Kabel kürzer oder (besser) geschirmt oder Bitrate 
verringern.

von Helge (Gast)


Angehängte Dateien:

Lesenswert?

DIY würde ich die pullup-Widerstände durch sowas ersetzen, falls auch 5V 
da sind.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.