Forum: Mikrocontroller und Digitale Elektronik Mehrfache Pullup's am I2C Bus ?


von Gerhard (Gast)


Lesenswert?

Hallo,
ich bin gerad' dabei mir eine Anwendung unter Benutzung des
I2C-Busses zu bauen. Der Bus wird zu jeder Seite ca.
1,50 bis 1,80m aus dem Schaltungsgehäuse herausgeführt.
Im Bereich des MC, also ca in der Busmitte, habe ich
SDA und SCL über 10k Pullups auf +5V gelegt.

Der Master und auch die 2 Slaves (PCF8574) sind
jeweils über Rs 330 an Daten- und Clockleitung geführt.

Als MC verwende ich, nun aber nicht lachen ;),  die MICRO
von dem großen C.

Jetzt meine Frage:
Ist es erforderlich, oder macht es Sinn auch an den exteren
Slaves jeweils Pullups vorzusehen, oder kommt es damit
eher zu Problemen ?

mfg
Gerhard

von Markus_8051 (Gast)


Lesenswert?

Hallo Gerhard,

die Überlegung, den I2C-Bus an den Enden mit zusätzlichen Pullups zu
"terminieren", ist grundsätzlich richtig.

Dann hättest Du aber 3*10k parallel, macht 3,3k. Wenn Du nun die SDA
bzw SCL-Leitung über 330R vom µC treibst, ergeben sich durch diesen
Spannungsteiler etwa 0,5 Volt auf der Leitung für eine logische Null.
Bis 0,8 Volt sollte es gehen! Soweit die Gleichstrombetrachtung.

Mit welcher Datenrate arbeitest Du auf dem Bus? Bei den I2C-üblichen
Geschwindigkeiten sollte es noch ohne Terminierung gehen. Wenn es
Probleme geben sollte, würde ich den Pullup in der Mitte weglassen, und
stattdessen je 20k (o.k., gibt es nicht, also 22k) an den Enden
vorsehen. Hast Du ein Oszi zur Hand? Schau dir mal die Signale an. Wie
sehen die Flanken aus, mit und ohne Terminierung?

Gruß,
Markus_8051

von Reiner Lemmermann (Gast)


Lesenswert?

Hallo Gerhard

Ich hab die Spezifikation von I²C noch nicht wirklich durch gearbeitet
aber ich glaube Du bist um  Groessenordnungen zu lang.

Das was ich mit I²C gemacht habe war so um die 20cm.
Kopplund der Chip's direkt ohne Widerstaende und je (SDA,SCL) ein 680
Ohm nach VCC.
Für etwas laenger giebt es Bustreiber. Vieleicht schaffst Du damit
deine Länge.
Wie gesagt bislang nur höremsagen aber der I²C ist kein Feldbus.

T'schau Reiner

von Markus_8051 (Gast)


Lesenswert?

HAAAAAAAAAAAAAAALT !!!

@Reiner:
1) Tu mal ´ne 1 vor Deine 680R, dann bist Du bei dem minimalen
Pullupwiderstandswert, den man benutzen könnte, ohne daß die Chips am
Bus anfangen zu leuchten. Ideal ist das aber nicht! Die 10k sind da
schon in Ordnung.
2) die 330R, mit denen Gerhard seine I2C-Bausteine an den Bus hängt,
sind zwar nicht erforderlich, aber durchaus üblich. Habe ich auch mal
in einer App-Note von Philips so gesehen, und selbst auch schon so
aufgebaut.
3) Bustreiber?!? Du weißt aber schon, daß der I2C-bus bidirektional
ist?!!!!!

So, bevor Du hier weiter die User verwirrst, lies erstmal die Spec.
weiter!

Mit der Länge hast Du allerdings recht, der I2C-Bus wurde für die
Komunikation von ICs innerhalb eines Gehäuses entworfen, von daher
sollten die Kabellängen niedrig gehalten werden. Die Tatsache, daß
Gerhard sich über die Kabellängen seines Busses Gedanken macht, zeigt
mir aber, daß er von dieser Problematik weiß. Ich selbst habe schon
stabil laufende I2C-Busse mit 2 Metern gebaut (bei etwa 400kHz). Der
längste, von dem ich bisher hörte, war 9m lang.

Gruß,
Markus_8051

von Reiner Lemmermann (Gast)


Lesenswert?

Hallo Markus

Asche auf mein Haupt wenn ich hier mist erzähle!!
Detail:

Also die 680 Ohm hab ich aus der eine Artikelserie zum AVR mit Bascom.
Also so ein ganzbekannter Philips Chip ein 8 eingängen (sorry mir fällt
der Typ gerade nicht ein, hat noch nen Bruder für anderen Adressbereich,
Ihr wisst schon) und DS1307 tun's momentan ohne zu murren. Aber ich
muss Zugeben das ich die Datenblätter nicht genau zum Pullup befragt
hab. --teilschuld?-- Werd ich aber nachholen!

2. Widerstände zum Bus - unwissenheit!! Volles Schuldeigeständniss!

3. Habe ich bei Philips bei den I²C Bauteile gesehen - ich schwöre -
Hatte das Datenblatt gesaugt kurz überflogen. Aber nach dem ich mich
hier wohl schon ziemlich blammiert hab muss ich erst noch wieder lesen
bevor ich was genaues dazu sage.

Von den Buslängen bin ich ziemlich geplättet. War die Umgebung
"störstrahlungfrei"?
Hintergrund: Ich hatte mal überlegt mein Motorrad mit diversen
elektronischen Spielerrein auszustatten, und hatte den I²C dafür ins
Auge gefasst. Das hab ich dann wieder verworfen weil Buslänge Störungen
der Zündung, Mobilfunkender nachgebrannter LKW-Fahrer aus dem
befreundeten Ausland usw.
Aber so 2m würden mir ja reichen. Und 100kHz tätens auch ...

Vielleicht probier ich das doch mal aus,

Wieder was gelernt!!
Reiner

von Gerhard (Gast)


Lesenswert?

@markus:
Danke für Deine Erläuterungen.
Darüber, das sich der Gesamtwiderstand reduziert und die
Auswirkungen auf die Busspannung, hatte ich bisher noch nicht
nachgedacht.
Werde ich dann aber durch Erhöhung der Einzelwiderstände
berücksichtigen.

Da ich auf dem Gebiet MC, I2C etc. noch ziemlich grün bin,
ging es mir auch darum, grundsätzliche Erfahrungen zu diesem
Thema zu hören.
Ich habe bisher nur die App.-Note von Philips durchgesehen,
da ist halt immer nur ein Pullup vorgesehen.

Über die Datenrate kann ich nichts sagen, nur soviel,
das I2C-Protokoll wird an 2 Ports in Basic emuliert.
Kann also nicht allzu flott sein. Das LCD wird aber
trotzdem recht schnell beschrieben.

Da die Schaltung bisher nur als Testaufbau mit geringen
Buslängen (ca. je Seite 90 + 40 cm, Pullups nur an den
Enden) anscheinend funzt,
werde ich im nächsten Schritt mal mit größeren Längen,
mit/ohne Terminierung und 2 oder 3 Pull's probieren.

Ein Oszi steht mir z.Zt. nicht zur Verfügung. Werde
mir dann mal eins ausleihen oder zu Weihnachten wünschen. ;))

Gerhard

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

hier noch ein bischen Literatur für das I2C und SMBus - Design.
( mit Berechnung )

Gruss

Steffen

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.