I2C Pegelwandler

#7683868
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

Angehängte Dateien:
#7683879
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.

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

#7683929
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

#7683930
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

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

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