Arduino <= RasPi I2C

Gast #6067811
Lesenswert?

Ich würde gerne einen RasPi mit einem Arduino als I2C Slave koppeln.

Hier ist ein Beispiel mit einer Verbindung durch zwei Kabel:
https://codingworld.io/project/den-arduino-mit-dem-raspberry-pi-verbinden-i2c

Die Frage ist: Wie empfindlich ist der RasPi auf die 5V des Arduino?
#6067823
Lesenswert?

Markus schrieb:
> Die Frage ist: Wie empfindlich ist der RasPi auf die 5V des Arduino?

Raspis sterben schneller als Arduinos, möglicherweise kann ein Serien R 
von 470 Ohm das verhindern

Rechnen wir mal PI 3,3V high Arduino 5V high -> diff = 1,7V / 470 Ohm 
rund 3,5mA sollten den PI nicht killen, ausser einer programmiert den PI 
Port auf low dann kann der Port evtl. Schaden nehmen, der Strom würde ja 
über 10mA steigen.

Es wurden dafür bidirektionale Pegelwandler erfunden
Beitrag "Pegelwandler 3,3V <->5V bidirektional mit Belastung"

die werden sogar als Modul verkauft
https://www.amazon.de/Gebildet-Pegelwandler-Converter-BiDirektional-Mikrocontroller/dp/B07RY15XMJ/ref=asc_df_B07RY15XMJ/?tag=googshopde-21&linkCode=df0&hvadid=354635310126&hvpos=1o1&hvnetw=g&hvrand=10870752784027513764&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9060641&hvtargid=pla-782544999101&psc=1&th=1&psc=1&tag=&ref=&adgrpid=72714819598&hvpone=&hvptwo=&hvadid=354635310126&hvpos=1o1&hvnetw=g&hvrand=10870752784027513764&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9060641&hvtargid=pla-782544999101

bei ebay billiger
https://www.ebay.de/itm/5-STUCKE-4-Kanal-IIC-I2C-Logikpegelwandler-Bidirektionales-Modul-5V-3-3V-AHS/153724466943?hash=item23cab136ff:g:JlcAAOSw9IpXz~LD
Gast #6067824
Lesenswert?

Im Text findet sich schon das Wort "LevelShifter" als Empfehlung.
Was hast du gegen einen "LevelShifter" einzuwenden?

Was mich an dem Artikel ganz derbe stört:
Mit keiner Silbe werden Pullup erwähnt.
Gast #6067839
Lesenswert?

>Was mich an dem Artikel ganz derbe stört:
>Mit keiner Silbe werden Pullup erwähnt.

Da gibt's noch einen Artikel:
https://www.thegeekpub.com/18263/raspberry-pi-to-arduino-i2c-communication/

Da wird erwähnt, dass der RasPi interne PullUps hat. Damit werden dann 
wohl SDA und SCL auf 3.3V gezogen.
Die Frage ist, ob's für den Arduino dann den "Killer Poke" gibt. Beide 
Ausgänge auf High und den RasPi mit 5V grillen.
Ich weiß, der BeagleBone wäre da sehr empfindlich. Den schlachtet man 
wohl schon beim "schräg anschauen".

Die Idee mit den 470Ohm Serienwiderständen wird möglicherweise nicht 
funktionieren. Die I2C-Schnittstelle kann da sehr empfindlich reagieren, 
wenn man die Spezifikation nicht einhält.
#6067861
Lesenswert?

Markus schrieb:
> Die Idee mit den 470Ohm Serienwiderständen wird möglicherweise nicht
> funktionieren

zumindes bei mir hats mit der UART zum ATmega8 funktioniert, ich habe 
aber PI seitig noch ein paar BAT42 zu 3,3V spendiert, alles muss man den 
internen parasitären Dioden ja nicht zumuten, die typische Atmel 
Schutzbeschaltung hat der PI ja nicht.

Während man einen AVR parasitär locker betreiben kann über seine Ports, 
beim  PI klappt das nicht!
Gast #6067881
Lesenswert?

Markus schrieb:
> Da gibt's noch einen Artikel:
> https://www.thegeekpub.com/18263/raspberry-pi-to-arduino-i2c-communication/
Auch den Artikel halte ich für bedenklich!

z.B. dort wird ein Arduino Mega Klon verwendet.
Dieser hat Pullup auf dem Board.
(der UNO hat das nicht, der hat nur die AVR typischen internen Pullup)
Diese, alle Pullup auf den Arduino Boards, gehen an 5V

Gerade das Bild mit den 3 Megas ....
Da sinds dann schon, je Leitung, 3 Pullup, welche versuchen die RPi Pins 
auf 5V zu ziehen.

Es tut mir schon fast körperlich weh, wenn ich solche Schaltungen sehe.
Gast #6067950
Lesenswert?

Was Joachim meint, ist dass ein mega8 (z.B.) nicht für 3.3V spezifiziert 
ist.
Ein mega8L z.B. für 3.3V aber nur bis 8MHz.

Ich kann aber aus Erfahrung sagen, dass bisher jeder mir untergekommene 
mega8l problemlos mit 16 und sogar 20MHz läuft.

Man kann den aber auch mit 4V betreiben, 3.3V muss es ja nicht sein. 
Dann können die R_s kleiner werden.

Ich betreibe mehrere I2C Busse so - mit 220Ohm R_s zu den 3.3V devices 
hin. Selbst bei 400KHz keine Probleme - über ca. 5m Klingeldraht.
Gast #6067968
Lesenswert?

Markus schrieb:
> Die Frage ist: Wie empfindlich ist der RasPi auf die 5V des Arduino?

Wie soll der RasPi mit den 5V des Arduino in Berühtung kommen?
Hast du dir schon mal angesehen, wie I²C funktioniert?

Bei I²C-Betrieb legt niemand die Betriebsspannung direkt auf den Bus.
Gast #6067974
Lesenswert?

Wolfgang schrieb:
> Wie soll der RasPi mit den 5V des Arduino in Berühtung kommen?
> Hast du dir schon mal angesehen, wie I²C funktioniert?

Durch die Pullups - sofern die an die 5V Versorgung angeschlossen sind.

Bei 3k3 nach 5V würden in einen Low-Geschalteten IO-Pin bis zu 
5/3300=1,5mA fliessen.
Für manche IOs wäre das schon zuviel.
#6067983
Lesenswert?

Wolfgang schrieb:
> Bei I²C-Betrieb legt niemand die Betriebsspannung direkt auf den Bus.

das weiss der Arduino aber nicht, der kennt kein OC
Echte I2C OC (open Collector) sind aber selten, die meisten I2C 
Beteiligte die mir begegnet sind hatten entweder feste pullups 
aufgelötet (PI) oder auf einem Modul aufgelötet (RTC) oder sie nutzen 
interne push/pull Ausgänge, ESP32?

Ich wäre ja froh wenn ALLE als OC daher kämen.
Gast #6068004
Lesenswert?

Joachim B. schrieb:
> oder auf einem Modul aufgelötet (RTC)
Nur weil das Modul Pullups hat, muss die RTC auf dem Modul ja kein 
Spar-I2C implementiert haben.
Die Pullups auf den Modulen sind da immer drauf, weil sonst die 
komplette Maker-Fraktion sich wundern würde, warum der I2C Bus nicht 
geht.

Joachim B. schrieb:
> push/pull Ausgänge, ESP32?

Aber was ist daran Falsch? Es funktioniert doch mit OC oder TriState 
genauso. Übersehe ich was?

Der Pullup zieht auf 1. Der jeweilige Transistor intern an den 
Datenleitungen zieht auf 0.
Der AVR kann sich auch so verhalten. Den Ausgang einfach auf Eingang 
umstellen für 1 auf der Leitung oder den Ausgang hart auf 0 ziehen für 
0.

1 auf die Leitung:
1
DDR_SDA &= ~(1<<PIN_SDA)
2
PORT_SDA &= ~(1<<PIN_SDA)  // evtl aktiven pullup ausschalten
0 auf die Leitung:
1
DDR_SDA |= (1<<PIN_SDA)
2
PORT_SDA |= (1<<PIN_SDA)
#6068013
Lesenswert?

mws schrieb:
> Aber was ist daran Falsch? Es funktioniert doch mit OC oder TriState
> genauso. Übersehe ich was?

OK ich sehe was du meinst, es muss anders behandelt werden denn wenn ein 
Ausgangstransistor den Port auf +VCC zieht geht nichts mehr also 
"Tristate" bzw. Input beschreibt es eher! Wobei "Input" ja nicht offen 
heissen muss.

Das nervt halt wenn es keine echte OC sind ist gemischte VCC halt nicht 
möglich oder nicht so einfach und schon nicht immer ohne Nebenwirkugen.

Nicht für alle ICs bekommt man Einblick
Gast #6068025
Lesenswert?

Joachim B. schrieb:
> Wolfgang schrieb:
>> Bei I²C-Betrieb legt niemand die Betriebsspannung direkt auf den Bus.
>
> das weiss der Arduino aber nicht, der kennt kein OC

Auch beim Arduino sitzen Widerstände zwischen Betriebsspannung und 
Busleitung ;-)

Wenn dann absolut kein vernünftiger Pegelwandler zwischen 5V- und 
3.3V-I²C Busteil eingesetzt werden sollen, wäre die pragmatische 
(Pfusch)-Lösung jeweils eine Schottky-Diode von SDA und SCL nach +3,3V.
Dann kann niemand etwas passieren weil die 3.3V-Eingänge des Arduino nie 
mehr als 3.6V sehen und für einen 5V-Arduino reicht das immer noch, um 
sicher als High erkannt zu werden.
Gast #6068039
Lesenswert?

Joachim B. schrieb:
> Nicht für alle ICs bekommt man Einblick

Das fiel mir auch schon auf - auch bei I2C Geräten. Zuletzt bei einem 
TV-Tuner aus Schlachtabfällen. Datenblatt gab's, aber nur mit 
Register-Beschreibung und Maximum Ratings.
Die mir gewohnten Prinzipschaltbilder der Interna der IOs sind dort 
nicht im Datenblatt zu finden.

Bei den meisten 8051ern stehen diese Details sogar in Textform in der 
Pinbeschreibung ("... can/can not drive ... must not connect to ...").
Ebenso bei den AVRs mit Doppelbelegung von Pins, sehr praktisch sich da 
das Innenleben ansehen zu können.
Gast #6068461
Lesenswert?

Wolfgang schrieb:
>Wie soll der RasPi mit den 5V des Arduino in Berühtung kommen?
>Hast du dir schon mal angesehen, wie I²C funktioniert?
>Bei I²C-Betrieb legt niemand die Betriebsspannung direkt auf den Bus.

Wer sagt, dass es die Betriebsspannung sein muss? Den Begriff "Killer 
Poke" kennst Du?
1
..
2
pinMode(A4,Output); //// Arduino Uno SDA
3
digitalWrite(A4,HIGH);
4
..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren