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?
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.
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
Stimmt, ist selbstverständlich ein Multi-Master-Bus. Der Bus ist lediglich als Master-Slave-Bus konzipiert. Hab mich falsch ausgedrückt.
> 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.
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?
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".
Was dazu führen wird das man den Bus nicht mehr mit hoher Frequenz betreiben kann...
@metaller, wieso Nie ohene die Internen. Dafür sind ja die Externen Pullups da. Wo sollte da das Problem sein?
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.