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.
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.
> 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
> 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
@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.
@ 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
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