Forum: Mikrocontroller und Digitale Elektronik I2C Bus: Wie Busteilnehmer anschließen?


von Ulrich (Gast)


Lesenswert?

Hi

ich habe einen I2C Bus welcher nur aus AVRs besteht. Der Bus ist so 
aufgebaut:
Jeder Bus-Teilnehmer kann I2C-Slave und I2C-Master sein. Der Bus besteht 
zum einen aus einem aus einer "Zentrale" und ca. 4 - 20 "Slaves".

Als maximale Buslänge sind 5m geplant. (PS ich weiß das I2C für was 
anderes entwickelt wurde)

Vor langer Zeit habe ich irgendwo im WWW von jemandem gelesen dass er 
jedem Busteilnehmer einen Reihenwiderstand in die SCL und SDA gehängt 
hat.
Eventuell hat er auch noch einen Pull-up vor oder hinter den 
Reihenwiderstand gehängt.....

Weiß jemand was über die Hintergründe so eines Reihenwiderstandes?
(Eventuell Reflexionen oder damit der "Sender" den bus leicher 
runterziehen kann?)

Ich habe keine Ahnung wie groß der Serienwiderstand sein muss.

bringt so ein Widerstand überhaupt Vorteile für mich?

Gibt es sonst noch Tipps die die Lage bei mir aufhellen?

reicht ein Pullup auf einer Seite des Busses oder sollte noch irgendein 
Abshclusswiderstand am ende vom Bus hin????

Um viele Tipps wird gebeten.

PS: Oder geht es einfach so:
Jeder AVR hängt direkt am Bus mit aktiviertem Pullupwiderstand und sonst 
gar nix?

von Jens Ziegler (Gast)


Lesenswert?

Schau mal hier rein:

http://de.wikipedia.org/wiki/I2C

Grundsätzlich ist nur ein Pull-Up (z.B. 1KOhm) für jede Leitung 
notwendig. Die internen Pull-Ups kannst du abschalten (nur diese reichen 
erfahrungsgemäß nicht). Ein Abschlusswiderstand ist nicht vorgesehen. 
Bei 5m Kabellänge ist Vorsicht angebracht (Rauschen, Signal-Degeneration 
usw.). Grundsätzlich ist I2C ein Single-Master-Bus, wenn du mehrere 
Master wünschst, musst du (per Software) für entsprechende 
Kollisionsvermeidung (Stichwort z.B. TDMA) sorgen.

von Fabian B. (fabs)


Lesenswert?

Wo hast du das mit dem Single-Master denn her? Selbst in dem von dir 
genannten Wikipedia Artikel steht:
"Mehrere Master sind möglich (Multimaster-Mode). Die Buszuteilung 
(Arbitrierung) ist dabei per Spezifikation geregelt."
Zu den Fragen: schau dir mal die Spezifiktation an, da stehen auch 
Vorschriften zu Leitungsführung bei längeren Bussen. Du musst halt 
darauf achten, dass die Gesamtkapazität des Busses die Specs nicht 
sprengt (15pF glaub ich), sonst brauchst du u.U. z.B. Strong-Pullups.

Gruß
Fabian

von Jens Ziegler (Gast)


Lesenswert?

Stimmt, ist selbstverständlich ein Multi-Master-Bus. Der Bus ist 
lediglich als Master-Slave-Bus konzipiert. Hab mich falsch ausgedrückt.

von Metaller (Gast)


Lesenswert?

> Die internen Pull-Ups kannst du abschalten

Davon kann ich nur abarten! Immer die internen Pull-Up's einschalten, 
gerade wenn man mehr als einen AVR am Bus hängen hat. Wenn sie nicht 
eingeschaltet sind, dann kann der Bus in einen undefinierten Zustand 
fallen und die Leitungen immer auf Low ziehen. Die Erfahrung durfte ich 
leider auch schon machen und hat mich mehrere Stunden Arbeit gekostet. 
Also nie ohne interne Pull-Up's die TWI-Schnittstelle betreiben.

von Ulrich (Gast)


Lesenswert?

Hat noch jemand einen Tipp was ein Widerstand für jede Datenleitung vor 
jedem Busteilnehmer bringt? Würde dies die Kapazität eventuell 
ernidrigen damit die Flanken besser werden?

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ein Widerstand vom uC zum Datenbus bringt "sanftere" Flanken auf dem 
Bus, der dann nicht soviel HF-Störungen ausstrahlt. Die Widerstände 
ergeben zusammen mit der Kapazität des Busses ein RC-Glied, das hohe 
Frequenzen abschwächt.
Dadurch werden auch die Flanken "schwächer".

von Jörg S. (Gast)


Lesenswert?

Was dazu führen wird das man den Bus nicht mehr mit hoher Frequenz 
betreiben kann...

von SiO2 (Gast)


Lesenswert?

@metaller, wieso Nie ohene die Internen. Dafür sind ja die Externen 
Pullups da. Wo sollte da das Problem sein?

von Metaller (Gast)


Lesenswert?

@SiO2

Da fragst Du mich was :) Ich habe am Anfang auch nur die externen 
Pull-Up's drangehabt und nach der ersten Übertragung ging der Bus nicht 
mehr in den High-Zustand und verblieb immer auf Low. An dem Bus hingen 
zwei Mega8, ein Mega128, ein LCD und ein Schrittmotorcontroller. Nachdem 
ich nur die internen Pull-Up's aktiviert habe, ohne das Programm 
abzuändern, lief alles ohne Probleme.

Keine Ahnung warum das danach lief, da ich nur ein Metaller bin und kein 
Elektroniker. Bei mir laufen manche Versuch nach dem Prinzip "Try & 
Error" ab, da mir leider einige Grundlagen fehlen. Irgendwo hier im 
Forum habe ich ein Beitrag gefunden, wo jemand ein ähnliches Problem 
hatte, aber nachdem er die Internen eingeschaltet hatte, funktionierte 
bei ihm auch alles. Leider finde ich den Thread jetzt nicht mehr.

von Ppp M. (sanic)


Lesenswert?

Wo ich noch mit C-Control Systemen und viel I2C gearbeitet habe, kam 
immer ein 330 Ohm Widerstand vor jeden Teilnehmer an jede Leitung.

Grüße,
Patrick

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.