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.
>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.
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!
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.
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.
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
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
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.
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.
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.
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.
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:
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
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.
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!
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.
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.
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?