Forum: Mikrocontroller und Digitale Elektronik I2C Pegelwandler


von Walt N. (belayason)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte einen MLX90614 an meinen ESP32 anschließen. Die Leitungslänge 
sollte mind. 3m haben, besser wären noch 5m. Jetzt erscheint mir das mit 
einer 3.3V Versorgungsspannung ziemlich lange. Daher möchte ich den 
Sensor mit 5V Versorgen und dementsprechend die beiden I2C Leitungen mit 
Hilfe eines Pegelwandler an die 3.3V des ESP32 anpassen. Gibt es hier 
fertige Bausteine? Oder hatte jemand schon das gleiche Problem?

Gleiches Vorhaben habe ich mit dem DS18B20 & DHT22 One-Wire Sensor. Bei 
einer Versorgungsspannung von 3.3V ist die empfohlene Leitungslänge 
leider nur 1m. Daher habe ich Ihn mit 5V versorgt und einen Pegelwandler 
(SN74LV1T34DBVR)  dazwischen geschaltet. Außerdem habe ich beide Seiten 
des Pegelwandlers mit einem Pull Up (nach 3,3V ESP32 seitig und 5V 
Sensor seitig) versorgt, macht das Sinn und wird das so funktionieren ? 
(Siehe Anhang)

Grüße
Waltnus

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Walt N. schrieb:
> Die Leitungslänge sollte mind. 3m haben, besser wären noch 5m

I2C und solche Leitungslängen? Du wirst dir jede Menge
Fehlversuche und/oder Hänger durch Störungseinstreuungen
einhandeln. I2C ist zu hochohmig für grosse Leitungslängen.

Wie oft hat man hier schon erklärt dass I2C für kurze
Verbindungen von Teilnehmern auf einer Leiterplatte
gedacht und konzipiert ist.

von Zino (zinn)


Lesenswert?

Zitat PCA9616-Datenblatt (natürlich braucht man zwei davon, einen an 
jedem Ende des Kabels):

The dI2C-bus buffers were designed to solve these problems and are 
ideally suited for rugged high noise environments and/or longer cable 
applications, allow multiple slaves, and operate at bus speeds up to 1 
MHz clock rate. Cables can be extended to at least three meters (3 m), 
or longer cable runs at lower clock speeds.

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> besser wären noch 5m. Jetzt erscheint mir das mit
> einer 3.3V Versorgungsspannung ziemlich lange.

Solche Leitungslaengen sind fuer I2C generell ziemlich lang und koennen 
FEhler bereiten und dabei ist es vollkommen irrelevant ob du mit 3V oder 
5V arbeitest. Vermutlich ist 3V sogar besser weil du du dann die Pullups 
entsprechend der maximal moeglichen Stromes niederohmiger auslegen 
kannst.
Ich denke aber das es schon auf Bastlerlevel funktionieren kann wenn du 
die Taktrate niedrig waehlst. I2C funktioniert ja auch mit 10 oder 1khz. 
Es muessen nicht 400khz sein. Ausserdem muss natuerlich vor ort ein 
Kondensator an das IC. Also wohl 100nF direkt ans IC und 10uF daneben. 
PUllup dann bei 3.3V 3.3k, vielleicht sogar 1k. Datenblatt lesen und 
nicht bloed bleiben.
Am Eingang vielleicht noch 10-100R als Serie, muss man mal ausprobieren 
was geht und wie die Signale aussehen und dann 47pF oder so als Filter.
Wenn du dann keine allzu stoerverseuchte Umgebung hast und deine 
Software keine while(I2C_blabla==true); enthaelt und bei Fehlern wieder 
aufsetzt, dann koennte das gehen.

Vanye

von Vanye R. (vanye_rijan)


Lesenswert?

Was mir gerade noch eingefallen ist, man koennte mal probieren anstatt 
der Serienwiederstaende eine 100MHz Induktivitaet zu verwenden. Also 
eure schicken OSzi einschalten auf die ihr alle so stolz seit und auch 
mal pruefen ob ich kein Unsinn erzaehle. :-)
Die IDee davon ist die Leitung aus Sicht der 47pF hochomiger zu machen 
damit der Stoerungen besser wegfiltert.

Vanye

von Rainer W. (rawi)


Lesenswert?

Walt N. schrieb:
> Gleiches Vorhaben habe ich mit dem DS18B20 & DHT22 One-Wire Sensor.
> ...
> Daher habe ich ... einen Pegelwandler (SN74LV1T34DBVR) dazwischen
> geschaltet.

Und wie stellst du dir dabei die Kommunikation mit deinem Sensor vor?
One-Wire braucht eine bidirektionale Verbindung.

Vanye R. schrieb:
> Solche Leitungslaengen sind fuer I2C generell ziemlich lang und koennen
> FEhler bereiten und dabei ist es vollkommen irrelevant ob du mit 3V oder
> 5V arbeitest.

Stimmt - viel wichtiger sind Leitungskapazität und Größe der Pull-Ups.
Außerdem müssen SDA und SCL im Kabel halbwegs gut entkoppelt sein, um 
übermäßiges Übersprechen zu vermeiden (I2C-Specs, Kap. 7.5 Wiring 
pattern of the bus lines).
https://www.nxp.com/docs/en/user-guide/UM10204.pdf

Für lange Leitungen bis 30m hilft ein I2C-Bus Extender, wie z.B. der 
P82B715. Außerdem empfiehlt sich eine nicht zu hohe Taktfrequenz (z.B. 
100kHz). Auf jeden Fall ist es immer eine gute Idee, die Form der 
Signale auf dem Bus mit dem Oszi zu prüfen.
https://www.nxp.com/docs/en/brochure/75016527.pdf

Wastl schrieb:
> Wie oft hat man hier schon erklärt dass I2C für kurze
> Verbindungen von Teilnehmern auf einer Leiterplatte
> gedacht und konzipiert ist.

Lies einfach, was NXP/Philips zu dem Thema schreibt. Die wissen 
halbwegs, was ihr Bus kann.

: Bearbeitet durch User
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.