Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert ein i2c logic level shifter?


von Manuel Neff (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

Möchte den angefügten logic level shifter namens MAX3373e verwenden, um 
mein i2c, welches auf 3.3V logiklevel ist, auf 5V logiklevel bringen. 
Habe es gemäss angefügten Bild aus datenblatt verschaltet.
-->im Bild sind es 1.8V auf 3.3V, bei mir sind es 3.3V auf 5V.

Nun zu meinem Problem:
Habe einen gas-sensor am 3.3V i2c angehängt und ein digitalpotentiometer 
an 5V i2c angehängt. Aus bislang unerklärlichen gründen ist nur das 
Digitalpotentiometer erreichbar, wenn ich mit dem logic level shifter 
arbeite. Nehme ich den shifter raus, erkennt es meinen gas-sensor 
wieder.
Ist der logic level shifter dafür gedacht um die i2c-geräte NUR am 
höheren Spannungspegel anzuschliessen?

P.S. die bidirektionale kommunikation funktioniert aber. Sprich ich kann 
zum digitalpoti schreiben und auch lesen

Danke für jegliche hilfe

von DerEinzigeBernd (Gast)


Lesenswert?

Hast Du auf beiden Seiten die nötigen I2C-Pullups?

Wo ist in Deiner Schaltung der µC? Auf der 3.3- oder auf der 
5-V-Seite?


Ansonsten würde ich einen PCA9517 verwenden, der ist von NXP explizit 
als I2C-Pegelwandler konzipiert:

https://www.nxp.com/docs/en/data-sheet/PCA9517.pdf

von Sebastian (Gast)


Lesenswert?

Und warum nicht einfach mit den zwei N-Fets?

LG, Sebastian

von Manuel Neff (Gast)


Lesenswert?

Hi,

Danke für deine Antwort. Der uC(also Raspberry Pi) ist auf der 
3.3V-Seite.
Habe gesehen, dass ich die Pullups nur auf der 3.3V-Seite habe, welche 
ja nicht funktioniert!!!! ...Auf der funktionierenden 5V-Seite habe ich 
sie vergessen. Kann diese aber erst morgen Abend in meine Schaltung 
einfügen.

Gibt es eine logische Begründung dafür, dass die 5V-Seite ohne Pullups 
funktioniert, die 3.3V-Seite mit Pullups aber nicht?

Und danke für den Hinweis mit dem PCA9517, werde versuchen, in Zukunft 
diesen zu verwenden

Danke

von Frank K. (fchk)


Lesenswert?

Manuel Neff schrieb:

> Gibt es eine logische Begründung dafür, dass die 5V-Seite ohne Pullups
> funktioniert, die 3.3V-Seite mit Pullups aber nicht?

Ja. Du verwendest ein unpassendes Produkt. I2C erfordert Open-Collector 
bzw Open Drain IOs. Diese IOs können nur gegen Ground ziehen, nicht aber 
gegen Vcc. Dafür braucht es Pullups.

Dein Level Shifter ist aber für Logiksignale gedacht und zieht sowohl 
nach Vcc als auch nach GND. So etwas kann man selbstverständlich für I2C 
nicht einsetzen.

Also: wegwerfen und nochmal.

fchk

von DerEgon (Gast)


Lesenswert?

Frank K. schrieb:
> Dein Level Shifter ist aber für Logiksignale gedacht

Das sieht das Datenblatt anders:

> I²C Level Translation
> The MAX3373E–MAX3376E, MAX3378E/MAX3379E
> and MAX3390E–MAX3393E level-shift the data present
> on the I/O lines between +1.2V and +5.5V, making them
> ideal for level translation between a low-voltage ASIC and
> an I²C device.

Der /THREE-STATE-Pin könnte des Problems Ursache sein.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manuel Neff schrieb:
> ein digitalpotentiometer an 5V i2c angehängt.
Nur aus bloßer Neugier: wofür verwendest du das Digipoti? Was wird damit 
angesteuert?

Manuel Neff schrieb:
> Gibt es eine logische Begründung dafür, dass die 5V-Seite ohne Pullups
> funktioniert, die 3.3V-Seite mit Pullups aber nicht?
Ja, die Begründung ist in der Struktur des I2C begründet. Es ist immer 
so, dass wenn mehrere Teilnehmer an 1 Bus hängen, dann muss es einen 
inaktiven/hochohmigen Zustand geben, weil sonst ja ein Busteilnehmer 
eine '0' und der nächste eine '1' aktiv auf den selben Bus treiben kann. 
Und das Ergebnis ist das, was du grade beobachtest: ein Buskollision.

Dein Pegelwandler wäre z.B. super für SPI-Signale.

DerEgon schrieb:
> Der /THREE-STATE-Pin könnte des Problems Ursache sein.
Auf der Seite 14 im DB ist das tatsächlich so beschrieben. Ich halte 
diese aktive Richtungsumschaltung vom Master aus allerdings für Murks, 
denn es wird spannend, wenn der Slave Clock-Stretching macht...

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Irgendwie passt der Titel nicht so richtig zum Eröffnungsbeitrag. Um die 
Frage vom Titel zu beantworten:
https://cdn-shop.adafruit.com/datasheets/AN10441.pdf

Ich denke in dieser Application Note von NXP ist detailliert erklärt, 
wie einfache Level Shifter am I²C Bus funktionieren. Genau solche werden 
bei Aliexpress in Hülle und Fülle billig verhökert.

Das IC dass du im Eröffnungsbeitrag ansprichst ist allerdings komplexer 
aufgebaut. Wie dieses Funktioniert müsste im Datenblatt stehen, 
allerdings hast du nicht danach gefragt.

von Wolfgang (Gast)


Lesenswert?

Manuel Neff schrieb:
> Habe es gemäss angefügten Bild aus datenblatt verschaltet.

Dann zeige einfach mal deinen Schaltplan.
Aus den Kästchen sind die entscheidenden Details nicht erkennbar.

von Manfred (Gast)


Lesenswert?

Lothar M. schrieb:
> Dein Pegelwandler wäre z.B. super für SPI-Signale.

Laut Einleitungstext des Datenblattes wäre der Maxim für I2C geeignet. 
Ich würde trotzdem die Idee haben, besser einen Texas TXS0108E 
einzusetzen, von dem weiß man, dass er klaglos läuft.

Stefan ⛄ F. schrieb:
> Irgendwie passt der Titel nicht so richtig zum Eröffnungsbeitrag. Um die
> Frage vom Titel zu beantworten:
> https://cdn-shop.adafruit.com/datasheets/AN10441.pdf

Das war wieder ein Beitrag der Sorte [bitte selbst ausdenken].

Gib Gas, damit Du endlich Deine 55.555 Beiträge erreichst!

von Clemens L. (c_l)


Lesenswert?

Manuel Neff schrieb:
> Gibt es eine logische Begründung dafür, dass die 5V-Seite ohne Pullups
> funktioniert, die 3.3V-Seite mit Pullups aber nicht?

Nein, der MAX3372/3 hat schon integrierte Pullups.

Aber ohne einen genauen Schaltplan kann man nur raten.

Manfred schrieb:
> Ich würde trotzdem die Idee haben, besser einen Texas TXS0108E
> einzusetzen, von dem weiß man, dass er klaglos läuft.

Der MAX3373E ist ein Klon des TXS0102.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Manfred schrieb:
> Laut Einleitungstext des Datenblattes wäre der Maxim für I2C geeignet.
Das stimmt, da bin ich in die Irre gegangen... :-/

Das ist kein aktiver Pegelwandler, der ist eigentlich nur für I2C und 
artverwandte Busse geeignet. Für einen SPI-Bus ist ein high-Pegel via 
10k-Widerstand eher fraglich.

Clemens L. schrieb:
> der MAX3372/3 hat schon integrierte Pullups.
So ist es. Und zusätzlich noch "Flankenbeschleuniger" für die steigende 
Flanke.

> Aber ohne einen genauen Schaltplan kann man nur raten.
Und der Aufbau kann dann nochmal anders sein. Aber ich würde wie bei 
solchen seriellen Bussen üblich einfach mal mit dem Oszi messen, was 
sich da an den Pegeln und Flanken tut.
@Manuel Neff: Hast du ein Oszi? Oder kannst du den I2C mal einfach 
langsamer fahren, damit sich bei flachen Flanken die Pegel ggfs 
stabilisieren können?

von Manfred (Gast)


Lesenswert?

Clemens L. schrieb:
> Der MAX3373E ist ein Klon des TXS0102.

Na wenn schon, dann vom TXS0104. Leider nicht pinkompatibel.

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.