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
> 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.
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.
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
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/
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
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
NPX erwähnt in diesem Zusammenhang den 2N7002. http://cache.nxp.com/documents/data_sheet/PCA9512A_PCA9512B.pdf?pspll=1 Reichelt 0,04€. Ein Levelshifter ist teurer. http://www.reichelt.de/index.html?ACTION=3;ARTICLE=41142;SEARCH=2N%207002%20SMD mfg klaus
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)
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
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
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
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/
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.