Forum: Mikrocontroller und Digitale Elektronik Fragen zu I2C


von Fabian P. (Firma: wiki.flowerhouse.at) (tropaion)


Lesenswert?

Hallo Community,

ich habe ein paar Fragen zu I2C.

In meiner Schaltung habe ich einen ATtiny85 mit 3,3V 
Versorgungsspannung.
Den I2C-Bus möchte ich ebenfalls mit 3,3V betreiben.
Hier ist auch schon meine erste Frage, wie muss man die 
Pull-Up-Widerstände auslegen? Ich habe hier im Forum mehrere 
widersprüchliche Aussagen gefunden.

Nun habe ich mehrere 3.3V Slaves, welche ich ja direkt an I2C hängen 
kann.
Ich habe jetzt aber auch Slaves welche mit 5V Versorungsspannung 
betrieben werden (z.B.: MAX7324, ja den kann man auch mit 3,3V 
betreiben, aber in meinem Fall muss ich ihn mit 5V betreiben).

Hier muss ich, so weit ich verstanden habe, einen Pegelwandler 
verwenden, liege ich da richtig?

Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig 
realisiert und programmiert, hat da jemand gute Lektüre dazu?

Mfg,
Tropaion

von Stefan F. (Gast)


Lesenswert?

> wie muss man die Pull-Up-Widerstände auslegen

Normalerweise 4,7 bis 10k Ohm. Je weniger, umso höher kann die 
Taktfrequenz sein. Aber die Saves müssen den Strom auch schaffen.

> Hier muss ich, so weit ich verstanden habe, einen
> Pegelwandler verwenden, liege ich da richtig?

Ja.

von Jim M. (turboj)


Lesenswert?

Fabian P. schrieb:
> Den I2C-Bus möchte ich ebenfalls mit 3,3V betreiben.
> Hier ist auch schon meine erste Frage, wie muss man die
> Pull-Up-Widerstände auslegen? Ich habe hier im Forum mehrere
> widersprüchliche Aussagen gefunden.

Kommt auch darauf an wie schnell Dein Bus werden soll. Kleinere R -> 
schnellerer Bus, da die Rise Time nur vom Widerstand abhängt.

Bei I²C ziehen die Geräte den Bus nur herunter, das High wird immer 
durch die Widerstaände erzeugt.

Zu klein darf der aber nicht werden, da irgendwann die Open Drain Stufen 
den Strom nicht mehr liefern.

Fabian P. schrieb:
> Ich habe jetzt aber auch Slaves welche mit 5V Versorungsspannung
> betrieben werden (z.B.: MAX7324, ja den kann man auch mit 3,3V
> betreiben, aber in meinem Fall muss ich ihn mit 5V betreiben).
>
> Hier muss ich, so weit ich verstanden habe, einen Pegelwandler
> verwenden, liege ich da richtig?

Nö. Wenn der Slave die 3V3 zuverlässig als High erkennt - das ist in 
99.9% aller Chips der Fall - dann kannste den Bus auf 3V3 betreiben.

Das Datenblatt des MAX7324 will allerdings 0,7*V+ sehen, das wären bei 
5V Versorgung schon 3,5 Volt Pegel. Für die Serie müsste man das euch 
einhalten, d.h. entweder Pegelwandler (2 korrekt beschaltete MOSFETs) 
oder den I²C Bus bei >= 3,5 Volt betreiben.

Ich würde auch nachschauen was die 3V3 Geräte am Bus so vertragen. 
Eventuell könnte man den ganzen Bus einfach an +5V klemmen.

Fabian P. schrieb:
> Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert,

Da würde ich aber einen anderen Hersteller als Atmel nehmen. Und in die 
Errata Liste schauen.

von Bastler (Gast)


Lesenswert?

PCA9306 Dual Bidirectional I2C Bus and SMBus Voltage-Level Translator
als Beispiel

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Fabian P. schrieb:
> Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert, hat da jemand gute Lektüre dazu?

Wuerd' ich keinesfalls machen. Nicht alles, was irgendwer vor 1000 
Jahren mal in eine Spec. geschrieben hat, ist eine Spitzenidee.

Gruss
WK

von Clemens L. (c_l)


Lesenswert?

Fabian P. schrieb:
> wie muss man die Pull-Up-Widerstände auslegen?

I2C Bus Pullup Resistor Calculation: http://www.ti.com/lit/pdf/slva689

> mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert

http://www.i2c-bus.org/multimaster/

von Klaus R. (klara)


Lesenswert?

Fabian P. schrieb:
> Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert, hat da jemand gute Lektüre dazu?

Etwas direkt vom Entwickler des I2C-Busses.
http://www.nxp.com/documents/user_manual/UM10204.pdf
mfg klaus

von Wolfgang (Gast)


Lesenswert?

Fabian P. schrieb:
> Hier muss ich, so weit ich verstanden habe, einen Pegelwandler
> verwenden, liege ich da richtig?

Ja, die Einfachversion direkt vom Erfinder des I2C:

AN10441 - Level shifting techniques in I2C-bus design
http://www.nxp.com/documents/application_note/AN10441.pdf

von Klaus R. (klara)


Lesenswert?


von il Conte (Gast)


Lesenswert?

Fabian P. schrieb:
> Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert, hat da jemand gute Lektüre dazu?

Davon würde ich  dir bei i2c abraten !
Es ist wie im richtigen Leben, je mehr Leute was zum sagen haben
desto weniger kommt dabei rum.

Noch ein Tipp:
Wenn es richtig schnell werden soll
und es hängen zu viele Slaves am 'Bustropf'
dann helfen active Pullups (gibt es bei Linear)

von Fabian Plaimauer (Gast)


Lesenswert?

il Conte schrieb:
> Davon würde ich  dir bei i2c abraten !
> Es ist wie im richtigen Leben, je mehr Leute was zum sagen haben
> desto weniger kommt dabei rum.

Eig. war meine Idee dahinter nicht, das mehrere gleichzeitig etwas 
"sagen".
Mir ging es eher um die Ausfallssicherheit.
Ich habe in der Schaltung einen kleinen Hilfsmikrocontroller (ATiny85) 
der die meiste Zeit als Master arbeiten soll.
Jedoch, wenn dieser ausfällt, soll der Hauptprozessor (STM32) notfalls 
die Kontrolle über denn Bus übernehmen können.

il Conte schrieb:
> Wenn es richtig schnell werden soll
> und es hängen zu viele Slaves am 'Bustropf'
> dann helfen active Pullups

Slaves habe ich nicht viele in der Schaltung.
Ich weis es jetzt nicht auswendig, aber es sollten max. ~20 sein.

Wenn ich denn Bus jetzt auf 5V lege, muss ich dann etwas bei denn 3,3V 
Slaves beachten?

Ich habe auch schon gelesen, das es empfohlen wird I2C möglichst mit 5V 
zu betreiben, da er dann stabiler läuft und nicht so Fehleranfällig ist, 
ist da was dran?

Mfg,
Tropaion

von Klaus R. (klara)


Lesenswert?

Fabian Plaimauer schrieb:
> Slaves habe ich nicht viele in der Schaltung.
> Ich weis es jetzt nicht auswendig, aber es sollten max. ~20 sein.
>
20 Slaves? Aber nicht an einem Bus! Beim 5V Bus sollte die Kapazität 
nicht über 400pF kommen. Neben der Kapazität der Leitung haben auch die 
Slaves jeweils eine Eingangskapazität.

Für solche Fälle gibt es Multiplexer, eine feine Sache. Lese Dir mal die 
hier aufgezeigten Quellen dazu durch.

> Wenn ich denn Bus jetzt auf 5V lege, muss ich dann etwas bei denn 3,3V
> Slaves beachten?

Levelshifting.

>
> Ich habe auch schon gelesen, das es empfohlen wird I2C möglichst mit 5V
> zu betreiben, da er dann stabiler läuft und nicht so Fehleranfällig ist,
> ist da was dran?

Das hängt nur davon ab in wie weit Du die Spezifikationen einhältst. 
Klar, wenn Du einen starken Strahler in der Nähe hast und die Busleitung 
nicht geschirmt ist, so werden bei 3,3V eher Störungen auftreten. Aber 
das dürfte nur selten der Fall sein.
mfg klaus

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Fabian Plaimauer schrieb:
> Jedoch, wenn dieser ausfällt, soll der Hauptprozessor (STM32) notfalls
> die Kontrolle über denn Bus übernehmen können.

Warum soll denn nicht der STM32 dem Attiny in den Hintern treten, wenn 
dem schwindelig ist? Warum soll's denn dem Attiny schwindelig werden? 
Ich wuerd' das UEbel an der Wurzel packen, nicht versuchen irgendwelche 
Ausfaelle zu kaschieren.


Fabian Plaimauer schrieb:
> Slaves habe ich nicht viele in der Schaltung.
> Ich weis es jetzt nicht auswendig, aber es sollten max. ~20 sein.

Soviele wuerd' ich nicht an einen einzelnen Bus haengen.


> Wenn ich denn Bus jetzt auf 5V lege, muss ich dann etwas bei denn 3,3V
> Slaves beachten?
Sie muessen halt 5V tolerant sein.

Splitte das ganze doch in mehrere Busse auf; die du mittels gepimptem 
Analogschalter (a.k.a. Mux)  umschaltest. So kriegst du Adresskonflikte 
und Spannungskonflikte in den Griff und haelst die Buskapazitaet 
niedrig.

Gruss
WK

von Michael .. (gismi)


Lesenswert?

Da es anscheinend ein grösseres Projekt wird (20 Slaves) empfehle ich 
dir dringend mal in die Specifikation zu schauen.
Da werden die meisten Fragen beantwortet (Pegelwandlung, pull-down 
strom, Leitungskapazität, etc...).

http://www.i2c-bus.org/specification/

von Peter D. (peda)


Lesenswert?

Fabian P. schrieb:
> Und, mich würde auch interessieren, wie man Multi-Master-I2C richtig
> realisiert und programmiert, hat da jemand gute Lektüre dazu?

Mulitmaster ging mit dem MCs (80C552, 87C751) von Philips völlig 
problemlos. Man konnte sich direkt nach den Beispielen im Philips 
Applikationsbuch richten. Auch der Nachfolger P89C668 lief absolut 
stabil.

Mit den Atmel AVR und 89C51 hatte ich allerdings viel Ärger. Die hielten 
die vorgeschriebene Pause 4µs bis zum nächsten Paket nicht ein oder 
verhakten sich komplett:

http://www.robotroom.com/Atmel-AVR-TWI-I2C-Multi-Master-Problem.html

von Fabian Plaimauer (Gast)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Soviele wuerd' ich nicht an einen einzelnen Bus haengen.

Hier steht https://www.mikrocontroller.net/articles/I%C2%B2C das bis zu 
127 Slaves möglich sind.

Dergute W. schrieb:
> Warum soll's denn dem Attiny schwindelig werden?

Weil dieser anfälliger für Sonnenwinde und EMV Strahlung ist und 
leichter ausfallen kann.

Das RTOS das auf dem STM32 läuft, hat ein Speicherkorrektursystem, 
welches relativ zuverlässig arbeitet und noch dazu hat er einen MRAM.

Klaus R. schrieb:
> Für solche Fälle gibt es Multiplexer, eine feine Sache. Lese Dir mal die
> hier aufgezeigten Quellen dazu durch.

Mit Multiplexer bin ich vertraut, ich bin nur nicht davon ausgegangen, 
das einer nötig ist, wegen des Artikels ( 
https://www.mikrocontroller.net/articles/I%C2%B2C )

Dergute W. schrieb:
> Adresskonflikte

Die Adressen werden doch sowieso mit der Außenbeschaltung festgelegt, 
wie können da Konflikte auftreten so lange man keinen Fehler macht?

Klaus R. schrieb:
> Kapazität der Leitung

Sollte relativ klein ausfallen, da alles sehr nahe beieinander liegt 
(PCB = 100 x 100mm)

Beim Bild sollte statt ATmega328p ATtiny85 stehen, habe ich noch nicht 
ausgebessert.

von Peter D. (peda)


Lesenswert?

Fabian Plaimauer schrieb:
> Dergute W. schrieb:
>> Warum soll's denn dem Attiny schwindelig werden?

> Weil dieser anfälliger für Sonnenwinde und EMV Strahlung ist und
> leichter ausfallen kann.

Ist das nur so ein Bauchgefühl oder hast Du dafür auch konkrete Zahlen?

Das RTOS des 32Bitter wird bestimmt >100-fach mehr RAM und Code 
benötigen, als der ATtiny85. Daher ist dort die Ausfallwarscheinlichkeit 
deutlich größer. Auch sind bei einem OS Softwarefehler (Race-Conditions, 
Deadlocks usw.) deutlich warscheinlicher.

Es ist nicht unüblich, einem größeren MC einen kleinen stabileren zu 
Seite zu stellen, der den großen überwacht und bei Fehlern kontrolliert 
abschaltet oder ein Notprogramm fährt.
Den umgekehrten Fall habe ich aber noch nicht gesehen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Fabian Plaimauer schrieb:
> Hier steht https://www.mikrocontroller.net/articles/I%C2%B2C das bis zu
> 127 Slaves möglich sind.

In dem Beipackzettel zu den 2 Bruellwuerfeln vom Grabbeltisch fuer 1.95 
steht auch 4000W P.M.P.O - Trotzdem wuerd' ich die nicht nehmen, um ein 
AC/DC Konzert zu beschallen.

> Weil dieser anfälliger für Sonnenwinde und EMV Strahlung ist und
> leichter ausfallen kann.
Axo.

> Das RTOS das auf dem STM32 läuft, hat ein Speicherkorrektursystem,
> welches relativ zuverlässig arbeitet und noch dazu hat er einen MRAM.
Aaaaha.

> Die Adressen werden doch sowieso mit der Außenbeschaltung festgelegt,
> wie können da Konflikte auftreten so lange man keinen Fehler macht?
Es soll Bausteine geben, die keine 7 Bit Adresskonfigurationseingaenge 
haben. Braucht man dann mehrere davon, kanns eng werden.

>> Kapazität der Leitung
>
> Sollte relativ klein ausfallen, da alles sehr nahe beieinander liegt
> (PCB = 100 x 100mm)
Tja, wenn du meinst.


Gruss
WK

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.