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.
330 ohm? ich meine irgendwo gelesen zu haben, daß man nicht unter 1k ohm gehen soll.
Ben schrieb: > 330 ohm? ich meine irgendwo gelesen zu haben, daß man nicht unter 1k ohm > gehen soll. Er verwendet den P82B715.
@ 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
Bei langen Leitungen könnte man auch beide Enden mit Pullups versehen - die dann jeweils den doppelten Wert erhalten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.