Forum: Mikrocontroller und Digitale Elektronik I2C, Wohin mit den Pull Ups?


von AKKS (Gast)


Lesenswert?

Hallo,

wir Entwickeln gerade ein System bei welchem bis zu 10 einzelnen Geräte 
über den I2C Bus verbunden sind. Die Leitungslänge beträgt maximal ein 
paar Meter. Die Geräte werden alle in einer Busstruktur verschaltet.

Jetzt sind wir uns uneinig wo die Pull Ups hinkommen.

Ich bin der Meinung es ist egal, bzw. aus einfachheitsgründen beim 
Master.
Alternativ würde ich vielleicht in jedes Gerät zwei Pull Ups von 4K7 
einbauen, so komme ich dann Abhängig von der Teilnehmeranzahl auf 
brauchbare Werte.

Mein Kollege ist der Meinung dass die Pull Ups in das letzte am Bus 
hängende Gerät müssen. Damit sie ähnlich wie die Terminierung bei 
anderen Systemen arbeiten.

Und ehe ich es vergesse, und das geschreie los geht, wir verwenden 
selbstverständlich Treiberbausteine(P82B715).

Da bin ich ja mal gespannt, danke.

von Klaus (Gast)


Lesenswert?

Ich würde sie auch beim Master platzieren, so hats du konstante 
Verhältnisse, egal wieviele Teilnehmer am Bus hängen.
Da die Teilnehmer nach dem Open-Collector-Prinzip arbeiten, kannst du 
die Buslast vernachlässigen, kannst ja sicherheitshalber relative kleine 
Pull-Ups von 2k2 nehmen.

von Uwe N. (ex-aetzer)


Lesenswert?

> Mein Kollege ist der Meinung dass die Pull Ups in das letzte am Bus
> hängende Gerät müssen.

Sehe ich genauso. (Ich glaub das sogar in einer AppNote gelesen zu 
haben)

I2C ist da wahrscheinlich nicht so kritisch, AFAIK haben alle I2C-Ics 
Slew Rate begrenzte Aus- Eingänge.

Gruss Uwe

von Olaf (Gast)


Lesenswert?

> Die Leitungslänge beträgt maximal ein paar Meter.

Vermutlich bereits zuviel. I2C ist gedacht zur Verkabelung INNERHALB
eines Geraetes und nicht zur Gebaeudeautomatisierung. .-)

> Jetzt sind wir uns uneinig wo die Pull Ups hinkommen.

Da I2C kein richtiger Bus mit definierter Impedanz und korrektem 
Abschluss ist, ist es egal.

> Alternativ würde ich vielleicht in jedes Gerät zwei Pull Ups von 4K7
> einbauen,

Das koennen deine I2C-ICs nicht treiben.

> Mein Kollege ist der Meinung dass die Pull Ups in das letzte am Bus
> hängende Gerät müssen. Damit sie ähnlich wie die Terminierung bei
> anderen Systemen arbeiten.

Wenn du einen richtigen Bus haettest und der vernuenftig funktionieren 
soll, und du wuesstest welche Impedanz deine Verbindung haette und du 
einen Bus haettest und keine sternfoermige Verkabelung, dann haette dein 
Kollege recht. So aber ist es eh egal da es entweder funktionieren wird 
weil es noch in der Toleranz von I2C liegt, oder sowieso unzuverlaessig 
ist und dann kannst du mit 4.7k Widerstaenden nichts dran aendern.

In der Praxis wird es wahrscheinlich meistens gehen. Kann man auf dem 
Labortisch machen, wuerde ich aber nicht verkaufen. .-)

> Und ehe ich es vergesse, und das geschreie los geht, wir verwenden
> selbstverständlich Treiberbausteine(P82B715).

Kenne ich nicht. Aber normalerweise haben ICs Datenblaetter und da steht 
normalerweise drin was man an Leitungslaenge machen kann. Ausserdem wird 
das nichts an der Problematik aendern da du ja wohl nicht vor jedem 
Busteilnehmer einen Treiber baust oder?

Warum nimmst du nicht einen richtigen Bus mit RS422/RS485 Treiber? Die 
husten auch nicht gleich wenn du mal 1V Verschiebung im Massepotential 
hast.

BTW: Seit kurzem gibt es ja auch I2C mit 1Mhz und sogar 3.4Mhz. Ich 
denke damit kommt man sowieso in Bereiche wo man den Bus nicht mehr ganz 
so lieblos und gedankenlos auf die Platine werfen kann wie man das jetzt 
macht. Und selbst bei 400kHz wuerde ich schon auspassen.
Und jetzt weisst du ja sicherlich das die Probleme nicht mit der 
Geschwindigkeit kommen die du auf dem Bus faehrst, sonder mit der 
Geschwindigkeit die jeder Teilnehmer fahren koennte wenn er wollte. 
(Anstiegsgeschwindigkeit)

Olaf

von AKKS (Gast)


Lesenswert?

@Klaus

Je mehr Teilnehmer dran hängen, umso mehr Kabel habe ich natürlich und 
die Kapazität wird größer. Kleine Widerstände nehmen wir sowieso -> 330 
Ohm.

@Olaf

>und keine sternfoermige Verkabelung, dann haette dein
>Kollege recht

siehe 1. Post:
>>Die Geräte werden alle in einer Busstruktur verschaltet.

>> Und ehe ich es vergesse, und das geschreie los geht, wir verwenden
>> selbstverständlich Treiberbausteine(P82B715).
>
>Kenne ich nicht. Aber normalerweise haben ICs Datenblaetter und da steht
>normalerweise drin was man an Leitungslaenge machen kann. Ausserdem wird
>das nichts an der Problematik aendern da du ja wohl nicht vor jedem
>Busteilnehmer einen Treiber baust oder?

Doch, ich baue in jedes Gerät einen Treiber rein, und die haben eine 
Beispielrechnung im Datenblatt mit 20m Leitungslänge. Aber es ist eben 
nicht die Positionierung eindeutig beschrieben.

>Warum nimmst du nicht einen richtigen Bus mit RS422/RS485 Treiber? Die
>husten auch nicht gleich wenn du mal 1V Verschiebung im Massepotential
>hast.

1. Weil die Software fertig ist.
2. Die Sache so sehr einfach gehalten ist.
3. Wir das noch nie so gemacht haben. (Ich weiß, das zählt nicht 
wirklich).
4. Die galvanische Trennung sich sehr einfach gestaltet. -> ADUM1250
5. Ich Mangel an seriellen Schnittstellen habe.
6. Der Chef mich für bekloppt erklärt wenn ich damit jetzt anfange(Siehe 
3.).

Zurück zur Fragestellung:
Wir sind da also geteilter Meinung, aber Physikalisch gesehen gibt es 
anscheinend keinen richtigen Grund die Pull Ups an eine bestimmte Stelle 
zu bauen.

von Ben (Gast)


Lesenswert?

330 ohm? ich meine irgendwo gelesen zu haben, daß man nicht unter 1k ohm 
gehen soll.

von T. C. (tripplex)


Lesenswert?

Vielleicht 330 Ohm Serienwiderstand zum Teilnehmer.

von (prx) A. K. (prx)


Lesenswert?

Ben schrieb:

> 330 ohm? ich meine irgendwo gelesen zu haben, daß man nicht unter 1k ohm
> gehen soll.

Er verwendet den P82B715.

von Falk B. (falk)


Lesenswert?

@  AKKS (Gast)

>Jetzt sind wir uns uneinig wo die Pull Ups hinkommen.

>Ich bin der Meinung es ist egal, bzw. aus einfachheitsgründen beim
>Master.

Das ist auch so.

>Alternativ würde ich vielleicht in jedes Gerät zwei Pull Ups von 4K7
>einbauen, so komme ich dann Abhängig von der Teilnehmeranzahl auf
>brauchbare Werte.

Ungünstig, aber machbar. Solange die ICs die Leitung noch halbwegs 
runter ziehen können geht das.

>Mein Kollege ist der Meinung dass die Pull Ups in das letzte am Bus
>hängende Gerät müssen. Damit sie ähnlich wie die Terminierung bei
>anderen Systemen arbeiten.

Käse. Siehe Wellenwiderstand. I2C ist erstens von der Anstiegszeit 
weit weg von Laufzeiteffekten und zweitens sind die Pull-ups meilenweit 
von den Kabelimpedanzen weg.

MFG
Falk

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei langen Leitungen könnte man auch beide Enden mit Pullups versehen 
- die dann jeweils den doppelten Wert erhalten.

von Jürgen W. (juergenw)


Lesenswert?

Hallo,

zwischen I2C-Port und Puffer(82B715) müssen alle Pull-up und 
Serienwiderstände (Statik-Schutz) entfernt werden. Die Serienwiderstände 
verursachen nämlich einen Spannungsverlust, der die Definition der 
logischen Null auf 0,5...2 Volt verschiebt. Dies überschreitet die 
Spezifikationen der Puffer. Zwischen den Puffern sollte ein 
Pull-up-Widerstand von 330 Ohm sitzen (natürlich an SDA und SCL).
So habe ich es auch bei meinem Hausbus mit über 100m länge gehalten und 
habe noch nie Probleme gehabt bei einem Takt von ca. 96kHz. Insgesamt 
hängen bei mir 15 Puffer am Bus.

Gruß
Jürgen

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.