Forum: Mikrocontroller und Digitale Elektronik Arduino <= RasPi I2C


von Markus (Gast)


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?

von Joachim B. (jar)


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

von Einer K. (Gast)


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.

von Markus (Gast)


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.

von Daniel B. (dbuergin)


Lesenswert?

Der läuft bei mir seit Jahr und Tag. Zuerst an einem Raspberry Pi, jetzt 
an einem Odroid C2.
https://www.horter-shop.de/de/i2c-hutschienen-module/182-bausatz-i2c-repeater-mit-taste-fur-raspberry-pi-4260404261186.html

von Joachim B. (jar)


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!

von Einer K. (Gast)


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.

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Es tut mir schon fast körperlich weh, wenn ich solche Schaltungen sehe.

mir auch und es werden immer mehr!
https://www.digitalewelt.at/ambilight-mit-dem-raspberry-pi-3-4k-schritt-fuer-schritt-anleitung/

sogar ohne Pegelwandler mit Netzteilempfehlung damit der USER auch noch 
ohne Ahnung 230V verkabelt

: Bearbeitet durch User
von Forist (Gast)


Lesenswert?

Markus schrieb:
> Ich würde gerne einen RasPi mit einem Arduino als I2C Slave koppeln.

Das ist völlig komplikationslos, wenn du den Arduino auch mit 3.3V 
betreibst.

von Joachim B. (jar)


Lesenswert?

Forist schrieb:
> Das ist völlig komplikationslos, wenn du den Arduino auch mit 3.3V
> betreibst.

ach mit 16MHz?
so einfach geht das nun nicht, es müssen schon 3,3V Arduinos sein, 
entweder die andere Serie xmega oder wenn AVR dann mit 8MHz als mini zu 
bekommen

von Forist (Gast)


Lesenswert?

Joachim B. schrieb:
> ach mit 16MHz?

Sogar mit 84MHz, wenn man einen Arduino Due nimmt.

von Joachim B. (jar)


Lesenswert?

Forist schrieb:
> Sogar mit 84MHz, wenn man einen Arduino Due nimmt.

ist aber kein Uno oder Nano :)

Joachim B. schrieb:
> es müssen schon 3,3V Arduinos sein

einfacher ist den Uno oder nano per USB anzukoppeln und 
Serial.print/read zu verwenden

: Bearbeitet durch User
von mws (Gast)


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.

von Wolfgang (Gast)


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.

von mws (Gast)


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.

von Joachim B. (jar)


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.

: Bearbeitet durch User
von mws (Gast)


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)

von mws (Gast)


Lesenswert?

Fehler eingeschlichen, berichtigt:
0 auf die Leitung:
1
DDR_SDA |= (1<<PIN_SDA)
2
PORT_SDA &= ~(1<<PIN_SDA)

von Joachim B. (jar)


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

von Wolfgang (Gast)


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.

von Wolfgang (Gast)


Lesenswert?

Wolfgang schrieb:
> 3.3V-Eingänge des Arduino

... des Raspberry Pi

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> wäre die pragmatische
> (Pfusch)-Lösung jeweils eine Schottky-Diode von SDA und SCL nach +3,3V.

Beitrag "Re: Arduino <= RasPi I2C"

die immerhin besser ist als die internen PI Dioden zu quälen

Wolfgang schrieb:
> weil die 3.3V-Eingänge des Arduino nie
> mehr als 3.6V

des PI, der Atmel AVR steckt das weg, der PI eher weniger!

: Bearbeitet durch User
von mws (Gast)


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.

von PittyJ (Gast)


Lesenswert?

Warum eigentlich I2C?
Ich habe den Arduino einfach über USB verbunden. Der bekommt auch seinen 
Strom daher. 08/15 Kabel und Kommunikation über libUSB. Das läuft seit 
Jahren stabil.

von Markus (Gast)


Lesenswert?

>Warum eigentlich I2C?

Weil ich viele Atmega644 anschließen will.
Praktischerweise gibt es dazu den Mighty Core:

https://github.com/MCUdude/MightyCore

von Markus (Gast)


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

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.