Forum: Mikrocontroller und Digitale Elektronik Widerstände am I2C


von Manfred (Gast)


Lesenswert?

Hier entsteht gerade ein Aufbau mit Arduino-Nano und mehreren 
I2C-Steinen. Ich nutze China-Platinchen, die neben dem eigentlichen IC 
auch dessen Grundbeschaltung mitbringen, kosten wenig und passen 
komfortabel auf eine Lochrasterplatte.

In Summe habe ich fünf I2C-Steine: 2x MCP4725, 2x INA219 und Display 
mit PCF8574.

Auf jeder dieser Platinchen sind 4k7 als PullUp an SDA / SCL vorhanden, 
in Summe komme ich also auf knapp 1k.

Frage: So lassen oder einige runter, um die Last am Bus zu reduzieren?

Einen Bus verstehe ich als gerade Linie, welche an beiden Enden 
terminiert wird. Kann ich nicht, es wird eher ein Stern oder gar Baum. 
Ich nehme an, dass das bei I2C kein Problem sein wird - die Gesamtlänge 
wird innerhalb des selben Gehäuses kleiner 30 cm sein?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Manfred schrieb:

> Frage: So lassen oder einige runter, um die Last am Bus zu reduzieren?

Einige runter, minimal etwa 4,7 kΩ.

> Einen Bus verstehe ich als gerade Linie, welche an beiden Enden
> terminiert wird.

So hoch sind die Frequenzen nicht, dass man das hier als elektrisch
lange Leitung betrachten müsste.

: Bearbeitet durch Moderator
von Layoutprofi (Gast)


Lesenswert?

Schau mal da rein:
http://www.ti.com/lit/an/slva689/slva689.pdf

Ist eine AppNote von TI zur berechnung der WIderstände am I2C. Da gibt 
es auch ein schönes diagramm mit dem minimalen Widerstandswert in 
Abhängigkeit der Versorgungsspannung.

von Falk B. (falk)


Lesenswert?

@ Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite

>> Frage: So lassen oder einige runter, um die Last am Bus zu reduzieren?

>Einige runter, minimal etwa 4,7 kΩ.

I2C muss min. 3mA gegen LOW ziehen können, macht ~1k5 an 5V.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
>> Einige runter, minimal etwa 4,7 kΩ.
>
> I2C muss min. 3mA gegen LOW ziehen können, macht ~1k5 an 5V.

Würde ich trotzdem nicht völlig ausreizen.

von Falk B. (falk)


Lesenswert?

@Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite

>> I2C muss min. 3mA gegen LOW ziehen können, macht ~1k5 an 5V.

>Würde ich trotzdem nicht völlig ausreizen.

OK, PI/2 kOhm ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> PI/2 kOhm ;-)

Wer soll den denn anfertigen? :-)

Naja, irgendwelche der vielen Pullups muss er ohnehin runterlöten,
und eigentlich genügt es, sie auf einem der Boards drauf zu lassen.

von M. K. (sylaina)


Lesenswert?

Jörg W. schrieb:
> Würde ich trotzdem nicht völlig ausreizen.

Ja, aber zu hoch ist auch ein Problem. Pauschal kann man das ja eh nicht 
wirklich sagen. Klar, man kann einen Wert in den Raum werfen und meist 
passt es auch mit 4.7 kΩ. Muss es aber nicht immer. Ich würde zunächst 
auch keinen Widerstand runter werfen sondern mir mit dem Oszi den 
Signalverlauf anschaun. Sinds vernünftige Rechtecke würde ich auch 
keinen Widerstand runter werfen.

von Layoutprofi (Gast)


Lesenswert?

Aber Vorsicht, zu groß dürfen die Widerstände nicht werden, das kann bei 
400kHz probleme machen, wenn das Signal nicht schnell genug wieder den 
High Pegel erreicht. 4k7 sollten aber passen.

von M. K. (sylaina)


Lesenswert?

Layoutprofi schrieb:
> 4k7 sollten aber passen.

Hat der TE ja auch auf allen Platinen, er fragt sich nun nur, ob er auf 
der ein und anderen Platine die Pullups entfernen soll.

von Layoutprofi (Gast)


Lesenswert?

M. K. schrieb:
> Layoutprofi schrieb:
>> 4k7 sollten aber passen.
>
> Hat der TE ja auch auf allen Platinen, er fragt sich nun nur, ob er auf
> der ein und anderen Platine die Pullups entfernen soll.

Ja, das war nur für die obere Grenze des Widerstandwertes, die untere 
steht in dem oben verlinkten PDF.

von Falk B. (falk)


Lesenswert?

@ M. Köhler (sylaina)

>Hat der TE ja auch auf allen Platinen, er fragt sich nun nur, ob er auf
>der ein und anderen Platine die Pullups entfernen soll.

Die räumliche Anordnung der Pull-Ups ist bei I2C vollkommen egal. Ich 
würde sie an den Master machen und an allen Slaves entfernen. Dann kann 
man beliebig Slaves anstecken.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Ich würde sie an den Master machen und an allen Slaves entfernen.

Ich auch.

Eigentlich ist es völlig widersinnig, dass diese Slave-Boards überhaupt
mit Pullups ausgeliefert werden.  Aber da hat wohl wer mal gehört, dass
an I²C Pullups Pflicht sind, und da niemand nun weiß, ob außer ihn noch
jemand auf die kluge Idee gekommen sein könnte, an diesem Bus hier
welche vorzusehen, macht deshalb jeder welche drauf …

von Manfred (Gast)


Lesenswert?

Jörg W. schrieb:
> Einige runter, minimal etwa 4,7 kΩ.

Wenn ich andere Threads interpretiere, sollten 10k nicht unterschritten 
werden.

Layoutprofi schrieb:
> Schau mal da rein:
> Ist eine AppNote von TI zur berechnung der WIderstände am I2C.

Danke, abgespeichert, schaue ich mir die Tage an, bevor ich weiter 
mache.

Falk B. schrieb:
> I2C muss min. 3mA gegen LOW ziehen können, macht ~1k5 an 5V.

Danke, diese 3mA nehme ich mal als Hausnummer, die sich hier leicht 
umsetzen lässt. Grob über den Daumen kann ich drei 4k7 drauf lassen.

Jörg W. schrieb:
> Eigentlich ist es völlig widersinnig, dass diese Slave-Boards überhaupt
> mit Pullups ausgeliefert werden.

Ja und Nein: Arduino nutzt die Analog-Pims A4 / A5 für I2C, welche auf 
den Boards natürlich keinerlei Beschaltung aufweisen. Wenn ich nun als 
Heimwerker eine I2C-Device anklemme, tut mir der Chinese den Gefallen, 
die PullUps mitzuliefern. Auf den MCP4725-Boards gibt es sogar eine 
Wischbrücke, mit der man diese abtrennen könnte.

Was ich hier treibe, liegt vielleicht geringfügig über dem typischen 
"Maker" - egal, das wird zur Funktion kommen!

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Es wurde schon alles gesagt - hier noch mein bzw. Microchip's Senf dazu 
;-)

von H.Joachim S. (crazyhorse)


Lesenswert?

Mein Standardwert ist 3k3 direkt am master, funktioniert auch bei 
400kHz. In seltenen Fällen (Stromsparen nötig) denk ich da überhaupt 
noch nach. Ansonsten ist es einfach egal.

von Manfred (Gast)


Lesenswert?

> Es wurde schon alles gesagt

Danke für Eure Antworten, speziell mit den AP-Notes zum Thema!

Der MultiSpeedI2CScanner von Rob Tillaart sieht alle Komponenten, ich 
kann das Display beschreiben und mit dem D/A-Wandler Werte ausgeben. 
Alles weitere wird sich zeitlich ziehen, aber ich bin guter Dinge.

Natürlich gab es erstmal Fehlersuche: Ein Lötfehler und eine falsche 
Adresse, aber das muss wohl so sein :-(

von Stefan F. (Gast)


Lesenswert?

Das Wifi Kit 8 Board verwendet 10k Ohm Pull-Up Widerstände bei 3,3V für 
das on-board Display. Das geht so gerade eben. Wenn man die Pins anfasst 
oder einige cm Draht anlötet, geht es schon nicht mehr.

von Manfred (Gast)


Lesenswert?

Stefan U. schrieb:
> Das Wifi Kit 8 Board verwendet 10k Ohm Pull-Up Widerstände bei 3,3V für
> das on-board Display. Das geht so gerade eben. Wenn man die Pins anfasst
> oder einige cm Draht anlötet, geht es schon nicht mehr.

Generell baue ich gerne stromsparend, was nicht fließt, muß nicht 
weggekühlt werden und Temperatur ist Lebensdauer. Im konkreten Fall habe 
ich 5 Volt, Strom kommt aus der Steckdose und über 10 mW mehr oder 
weniger muß ich nicht nachdenken.

Falk B. schrieb:
> I2C muss min. 3mA gegen LOW ziehen können,

dazu schaue ich in die Datenblätter, jawohl, alle drei beteiligten ICs 
definieren max. 0,4 V-low @ 3 mA bzw. min. 0,4 V @ 3 mA.

Der Zollstock sagt mir, dass ich in Summe fast 50 cm Leitungslänge habe, 
also lege ich mich an die Unterkante mit etwa 1,5 kOhm.

Wie gesagt: Thema erstmal erledigt!

von Karl (Gast)


Lesenswert?

Manfred schrieb:
> Generell baue ich gerne stromsparend, was nicht fließt, muß nicht
> weggekühlt werden und Temperatur ist Lebensdauer.

Das ist bei I2C fast egal, da Strom nur fließt wenn die Pegel auf low 
liegen, also während der Datenübertragung.

Da man I2C nahezu beleibig verlangsamen kann, kann man die Leitungslänge 
entsprechend ausdehnen. Hab letztens ein paar Sensoren an 10m 
geschirmten Cat-Kabel getestet (hohe Leitungskapazität), ging mit 10kHz 
problemlos und mit sauberem Signalbild.

Wenn man es schnell bei großer Leitungslänge haben will, hilft ein 
Stromspiegel, die Pegel schnell wieder hochzuziehen: 
https://www.mikrocontroller.net/attachment/9856/consta1.jpg

Allerdings benötigt der dauerhaft seine 1.5mA pro Leitung.

von M. K. (sylaina)


Lesenswert?

Karl schrieb:
> Hab letztens ein paar Sensoren an 10m
> geschirmten Cat-Kabel getestet

Naja, mein Gefühl sagt mir, dass I2C nie für solche Abstände bestimmt 
war.

Falk B. schrieb:
> Ich
> würde sie an den Master machen und an allen Slaves entfernen.

Wenn ich die Slaves selber baue dann würde ich denen auch keine Pull-Ups 
spendieren. Wie gesagt,, in diesem Falle würde ich aber erstmal den Bus 
zusammen setzen und mir das Signalbild auf dem Oszi anschaun bevor ich 
den Lötkolben auspacke denn warum die Pull-Ups runter holen wenn das 
Signalbild gut aussieht? ;)

von Karl (Gast)


Lesenswert?

M. K. schrieb:
> Naja, mein Gefühl sagt mir, dass I2C nie für solche Abstände bestimmt
> war.

I2C wird von VGA, DVI und HDMI für EDID verwendet. DVI kann bis 15m.

von M. K. (sylaina)


Lesenswert?

Karl schrieb:
> I2C wird von VGA, DVI und HDMI für EDID verwendet. DVI kann bis 15m.

I2C war ursprünglich nur für die Kommunikation von ICs auf einer Platine 
gedacht. Natürlich kann man es auch zweckentfremden. Bei DVI: Ist bei 
den 15 M wirklich noch ne vernünftige I2C Kommunikation mit inbegriffen?
Naja, ich hab jedenfalls I2C noch nie auf diese Entfernungen benutzt und 
plane das auch nicht. Da würde ich dann doch andere Schnittstellen in 
Betracht ziehen.

von Wolfgang (Gast)


Lesenswert?

M. K. schrieb:
> Naja, mein Gefühl sagt mir, dass I2C nie für solche Abstände bestimmt
> war.

Dann weise dein Gefühl mal auf die Application Note AN10658 (Sending 
I2C-bus signals via long communications cables) von NXP hin.
https://www.nxp.com/docs/en/application-note/AN10658.pdf

Dort werden vom Erfinder des I2C Leitungslängen bis 120m für 
I2C-Kommunikation genannt.

von Stefan F. (Gast)


Lesenswert?

> bis 120m

Wenn die Sender die Flankensteilheit begrenzen und die Empfänger kurze 
Überschwinger raus filtern und die Taktrate dazu passend gering ist wird 
das wohl gehen.

Aber wenn du heute einem Hobbybastler erzählst, dass deine Geräte mit 
10kbit (wie bei Lego Mindstorms NXT) kommunizieren, erhältst du nur ein 
müdes mitleidiges Lächeln.

Wenn auf einem Radiowecker "0,00003 GHz Taktfrequenz" stehen würde, 
würde ihn niemand kaufen. So doof ist die Welt geworden, dank der 
permanenten Gigantomanie.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wenn ich dazu etwas beitragen darf.

Die besagten 120m funktionieren auch nur mit Portexpander. Das sollte 
man fairerweise mit erzählen. I2C wurde schließlich für Kommunikation 
innerhalb eines Gerätes entwickelt. Also für kurze Kabellängen.

Ansonsten gibts hier paar bessere Erklärungen mit Messbildern wie sich 
die Widerstandsgrößen auf das Signal auswirken. 
http://www.gammon.com.au/forum/?id=10896&reply=5#reply5

von Edgardo (Gast)


Lesenswert?

120m ? Fuer so etwas ist RS485 da, nicht I2C !

von bingo (Gast)


Lesenswert?

Wie niedrig die Pullups sein müssen, hängt auch von der Kapazitäten ab, 
die an SDA/SDC hängen. Je mehr Platinen und je länger die Leitungen 
sind, umso höher ist die Kapazizät und um so niedriger sind die 
benötigten Pullups.

Bei einem Slave und kurzen Leitungen bzw. wenn der Slave auf der 
gleichen Platine wie der Master ist, mag 4k7 ok sein, bei 5 Platinen, 
die wie hier alle über Leitungen angebunden sind, wäre bei 5V eher 1k5 
zielführend.

Ich nehme für Platinenverbindungen immer Flachkabel, die abwechseld GND 
und Daten führen, also GND/SDA/GND/SDC/GND/+5V, die GND dürfen nur an 
der Seite des Masters verbunden werden, auf der Seite des Slaves ist nur 
1x GND verbunden, die anderen offen.

Und ich schaue mir immer die Flanken mit dem Oszi an und ändere die 
Pullups ggf.

von Wolfgang (Gast)


Lesenswert?

Veit D. schrieb:
> Ansonsten gibts hier paar bessere Erklärungen mit Messbildern wie sich
> die Widerstandsgrößen auf das Signal auswirken.
> http://www.gammon.com.au/forum/?id=10896&reply=5#reply5

Ohne Angaben zu Last/Leitungskapazität/Oszi-Eingang und zu Impedanzen 
der Ausgangsstufen ist das eine absolute Hausnummer.

von M. K. (sylaina)


Lesenswert?

Veit D. schrieb:
> I2C wurde schließlich für Kommunikation
> innerhalb eines Gerätes entwickelt. Also für kurze Kabellängen.

So kenne ich das auch und ich finde schon 10m nicht mehr als kurz. Aber 
interessant ist das schon, dass auch so große Längen wie 120m, wenn auch 
mit speziellen Randbedingungen, gehen sollen.

: Bearbeitet durch User
von Karl (Gast)


Lesenswert?

Edgardo schrieb:
> 120m ? Fuer so etwas ist RS485 da, nicht I2C !

Bei RS485 brauchst Du aber intelligente Sensoren für die 
Kollisionserkennung. Bei I2C kannst Du beliebig dumme Sensoren an den 
Bus hängen, z.B. ein Eeprom oder eine RTC.

Ja, heute wo man für eine blinkende LED einen Raspi benötigt kann man 
sich das nicht mehr vorstellen.

von Klaus (Gast)


Lesenswert?

M. K. schrieb:
> I2C war ursprünglich nur für die Kommunikation von ICs auf einer Platine
> gedacht.

Nein, eigentlich nicht. Er war für die Kommunikation zwischen den 
Platinen in einem Gerät gedacht. Er sollte die vielen Drähte z.b. 
zwischen dem Bedienteil mit den Stationstasten vorne und dem Hauptteil 
hinten, die sonst mit zentimeterbreiten Flachkabeln oder Kabelbäumen 
aufgebaut waren, reduzieren.

> Natürlich kann man es auch zweckentfremden. Bei DVI: Ist bei
> den 15 M wirklich noch ne vernünftige I2C Kommunikation mit inbegriffen?

Über den I2C Bus wird die Monitorkennung gelesen. Zusätzlich werden auch 
5V Übertragen. Wenn der Monitor alles richtig macht, kann der PC selbst 
dann, wenn der Monitor keine Betriebsspannung hat, seine technischen 
Daten auslesen. Wenn das nicht funktioniert, fällt der PC bei jedem 
Einschalten auf seine default Displayeinstellung zurück. Passiert das 
nicht, funktioniert der I2C Bus.

MfG Klaus

von M. K. (sylaina)


Lesenswert?

Karl schrieb:
> Bei RS485 brauchst Du aber intelligente Sensoren für die
> Kollisionserkennung.

Öhm, nein, braucht man nicht. Auch bei RS485 dürfen die Sensoren dumm 
wie Brot sein.

von achso (Gast)


Lesenswert?

Jörg W. schrieb:
> Falk B. schrieb:
>>> Einige runter, minimal etwa 4,7 kΩ.
>>
>> I2C muss min. 3mA gegen LOW ziehen können, macht ~1k5 an 5V.
>
> Würde ich trotzdem nicht völlig ausreizen.

Warum? Wir bewegen uns natürlich sauber in den Recommended operating 
conditions, setze ich mal voraus. Und weil ein niedrigerer Widerstand 
eine höhere Robustheit des Busses bedingt, nimmt man den 
kleinstmöglichen Wert. Das hat keinen Nachteil - der Hersteller 
garantiert uns die Funktion. Aber Vorteile - steilere Flanken, geringere 
Empfindlichkeit gegen Einkopplung.

Ich denke, 2k oder 1k5 sind gute Werte. 1k5 sind nicht teurer als 4k7, 
und der zusätzliche Stromverbrauch ist möglicherweise sogar gleich (wenn 
man schneller kommuniziert, ist man auch schneller fertig).

Die Abwärme ist jedenfalls kein sinnvolles Argument, die 17mW (1k5, 5V) 
pro Leitung tun niemanden weh.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

achso schrieb:
> nimmt man den kleinstmöglichen Wert. Das hat keinen Nachteil

Energieverbrauch, wurde ja auch schon genannt.

Ist aber mittlerweile alles ziemlich müßig, die Diskussion.  Der TE
hat ja seinen Weg gefunden.

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.