328P <-> I2C <-> Arduino Mega 2560

Hallo, am Arduino Mega 2560 R3 betreibe ich einen I2C-Bus mit Sensoren. Diese Sensoren haben eine Versorgungsspannung von 3,3V und senden ihre Daten über SDA/SCL an den Mega. Kann ich SDA/SCL vom 328P einfach mit dem I2C-Bus des Mega verbinden um Daten vom 328P zum Mega zu senden. Gruß und Dank Andreas

Jein. Wenn die Sensoren am Mega hängen ist der Mega Master. Damit muss der 328 Slave sein. Ein Slave kann nicht unaufgefordert Daten senden. Du kannst aber mit dem Mega ständig abfragen ob Daten abzuholen sind.

Hast du an die Pegelwandler für 3V3 gedacht?

Hallo, das "Jain" kannte ich. Um den Pegel ging es mir. Du meinst also, eine LevelShifterSchaltung müßte dazwischen? Weil Mega I2C mit 3,3V und 328P I2C mit 5V. Ich habe mir das schon gedacht. Gruß und Dank Andreas

Serenifly:
Jein. Wenn die Sensoren am Mega hängen ist der Mega Master. Damit muss der 328 Slave sein. Ein Slave kann nicht unaufgefordert Daten senden. Du kannst aber mit dem Mega ständig abfragen ob Daten abzuholen sind.

Du kannst je ein Pin nehmen damit der UNO den MEGA signalisiert daß er Daten abzuholen hat.
Grüße Uwe

Und zwar ein bidirektional Wandler!

http://www.watterott.com/de/Level-Shifter

SkobyMobil: Hallo, das "Jain" kannte ich. Um den Pegel ging es mir. Du meinst also, eine LevelShifterSchaltung müßte dazwischen? Weil Mega I2C mit 3,3V und 328P I2C mit 5V. Ich habe mir das schon gedacht. Gruß und Dank Andreas

Nein, weil Sensoren 3,3V und Arduino Mega und Arduino UNO 5,0V sind. Kontrolliere im Datenblatt ob die Sensoren 5V resistent sind. Dann kannst Du sie obwohl mit 3,3V versorgung an einen 5V I2C Bus anschließen. Grüße Uwe

Hallo, der Mega soll die Daten bekommen, die 328P liefern. Das funktioniert nicht so einfach, wie ich es mir vorgestellt hatte. Da habe ich einen Denkfehler- gelöst, und der nächste taucht auf… und dann kann man es lösen, aber es wird zur Bastelei… erst einmal erledigt. Vielen Dank für eure Mühe Gruß und Spaß Andreas

Morgen zusammen, im aktuellen elektor steht, dass man [unter Umständen] keinen Levelshifter braucht. Die Erklärung ist, dass der I2C durch pull-ups hochgezogen wird, die I2C-Pins aber nur entweder Z oder GND können. Ein 5V-Teilnehmer wird also eigentlich nicht 5V auf den Bus geben. Zur SIcherheit ist jeweils ein 330R in den Leitungen seriell eingebaut. So wie ich es verstehe, ist ein Levelshifter nur notwendig, wenn die I2C-Specs sehr genau eingehalten werden: dann ist nämlich ein logisches High mindestens 0.7 x VDD, und das wären dann 3.5V. Da aber die beiden ATMegas aber schon ab 0.6 x 5V = 3.0V ein logisches High versteht, kann man sich womöglich tatsächlich den Shifter sparen. Aber nur, wenn das für alle Teilnehmer gilt. Hat das mal jemand ausprobiert? Würde mich mal interessieren, wie "betriebssicher" der Bus ist, wenn es nur so einen knappen overhead von 0.3V gibt. Grüße Sebastian

Das Problem ist daß der Atemga intern den Pullupwiderstadn aktiviert und so automatisch 5V auf den I2C Bus gibt. Ein zusätzliche Pullup-Widerstand auf +3,3V vermindert die Spannung auf dem Bus. Der Bus kann trotz 3,3V Teiel mit 5V versorgt weren wenn die Teile 5V verträglich sind (einige I2C Deices sind das). Viele Grüße Uwe

Oha?! Warum brauch ich dann noch externe Pull-ups? Dann müsste es ja messbar auf 5V liegen, oder? Laut 21.5.1 im 328er Datenblatt kann man das auch ausschalten. Das werd ich mal probieren, denn mein Slave kann keine 5V ab.

Warum brauch ich dann noch externe Pull-ups?

Weil er ziemlich groß ist und bei längeren Leitungen bzw mehreren angeschlossenen Devices er den Bus nicht in der vorgegebenen Zeit wieder auf HIGH ziehen kann bzw die Leitungskapazität laden kann.

Dann müsste es ja messbar auf 5V liegen, oder?

Ja.

Grüße Uwe