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!
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