Forum: Mikrocontroller und Digitale Elektronik 2x level shift in Reihe


von Hans K. (hans_k148)


Lesenswert?

Hallo,
ich sitze etwas in der Klemme. Ich habe eine I2C device, die intern mit 
3,3V arbeitet und einen levelshifter 3,3->5V "on board" hat. Ich würde 
aus Gründen der Störsicherheit auch gerne mit 5V auf der Leitung 
arbeiten, und habe auch andere "pur" 5V I2C devices mit am Netz. Leider 
arbeitet der Master auch mit 3V, wodurch mit dem "on board level 
shifter" eine Reihenschaltung von Level shiftern entsteht. 3V->5V->3V. 
Leider funktioniert das nicht, weil durch die Reihenschaltung der untere 
Störabstand von 0,1V nicht mehr erreicht wird. Als LOW stehen da ca. 
250mV.
Hat jemand eine Idee?

von Rainer S. (enevile) Benutzerseite


Lesenswert?

Dann lass die 3V3 direkt miteinander sprechen ohne Shifter dazwischen. 
Nur bei den 3V3 und 5V ein Shifter und fertig.

von Stefan F. (Gast)


Lesenswert?

Hans K. schrieb:
> Hat jemand eine Idee?

Ich nehme an, dass deine Levelshifter aus einem simplen MOSFET bestehen. 
Es gibt von NXP spezielle Levelshifter IC für I²C, die saubere Pegel 
ausgeben und deswegen vermutlich auch verkettet werden können.

von Hans K. (hans_k148)


Lesenswert?

Danke für den Hinweis. Da ich, wie gesagt, gerne mit 5V auf der Leitung 
arbeiten möchte, werde ich es mal mit dem NXP 9508 versuchen.

von Falk B. (falk)


Lesenswert?

Hans K. schrieb:
> Hallo,
> ich sitze etwas in der Klemme. Ich habe eine I2C device, die intern mit
> 3,3V arbeitet und einen levelshifter 3,3->5V "on board" hat. Ich würde
> aus Gründen der Störsicherheit auch gerne mit 5V auf der Leitung
> arbeiten, und habe auch andere "pur" 5V I2C devices mit am Netz. Leider
> arbeitet der Master auch mit 3V, wodurch mit dem "on board level
> shifter" eine Reihenschaltung von Level shiftern entsteht. 3V->5V->3V.

Versteh ich nicht. Mach mal eine Skizze.

> Leider funktioniert das nicht, weil durch die Reihenschaltung der untere
> Störabstand von 0,1V nicht mehr erreicht wird. Als LOW stehen da ca.
> 250mV.

Glaub ich nicht, 250mV reichen als LOW. Dein Problem liegt woanders.

von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> Glaub ich nicht, 250mV reichen als LOW.

Das hat er im Eröffnungsbeitrag auch indirekt geschrieben. Er möchte 
aber mehr Störabstand zu den Grenzwerten haben, aktuell sind es weniger 
als 100mV.

von Hans K. (hans_k148)


Angehängte Dateien:

Lesenswert?

Die 250mV mit Scope gemessen.
Es geht in der o.a. Anordnung jedenfalls gar nicht!

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Hans K. schrieb:
> Leider funktioniert das nicht

Könnte an den MOSFETs liegen, die Du nicht genannt hast.
Die Schwellspannung muß klein genug sein.

von Falk B. (falk)


Lesenswert?

Hans K. schrieb:
> ie 250mV mit Scope gemessen.
> Es geht in der o.a. Anordnung jedenfalls gar nicht!

Auf deiner Skizze fehlt die Masseverbindung, ein gern gemachter 
Anfängerfehler.

Prinzipiell sollte das so funktionieren, wie bereits gesagt sind 250mV 
für LOW absolut OK! I2C arbeitet AFAIK mit ähnlichen Pegeln wie LVCMOS, 
sprich LOW < 0,3VCC = 0,3*5=1,5V.

von Hans K. (hans_k148)


Lesenswert?

Die MosFet level shifter benötigen keine Masse!. Die GND Verbindung wird 
einfach nur "durchgereicht" hat aber zu den Komponenten auf dem LS board 
keine Verbindung. Der OPI und das GY89 board haben natürlich GND!

von Falk B. (falk)


Lesenswert?

Hans K. schrieb:

Und wo liegt nun das Problem? Geht der I2C Bus gar nicht oder werden nur 
deine akademischen 0,1V für LOW nicht erreicht?

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Hallo,
vielleicht hilft dir der Pegelwandler weiter.
Gruß

von Carsten-Peter C. (carsten-p)


Angehängte Dateien:

Lesenswert?

Hallo,
ich hab noch was zum Pegelwandler gefunder.
Gruß Carsten

von Falk B. (falk)


Lesenswert?

Carsten-Peter C. schrieb:
> Hallo,
> vielleicht hilft dir der Pegelwandler weiter.
> Gruß

Was soll der alte Hut? Und auch dein 2. Beitrag ist alt wie der Wald. 
Der OP HAT schon Pegelwandler auf MOSFET-Basis, und wenn die Chinesen 
keinen Murks gebaut haben, sind da auch die richtigen MOSFETs drauf.

von Peter D. (peda)


Lesenswert?

Falk B. schrieb:
> und wenn die Chinesen
> keinen Murks gebaut haben

Genau das befürchte ich aber.

von Carsten-Peter C. (carsten-p)


Lesenswert?

Falk B. schrieb:
> Was soll der alte Hut? Und auch dein 2. Beitrag ist alt wie der Wald.

Nur, weil es alt ist, muss es nicht schlecht sein.
Ich habe mal einen 8-CHANNEL I2C SWITCH verbaut, der auch Pegel wandeln 
kann. Nach einiger Zeit fing der I2c-Bus an, sich ca. einmal in der 
Woche aufzuhängen. Solche Fehler sind schwer zu finden. Zum Glück ist 
dann der Port irgendwann ganz gestorben. Dann ist der "alte Hut" zum 
Einsatz gekommen und die Fehler waren weg. Ich sage ja nicht, das die 
"alten Schaltungen" besser sind, aber manchmal einfacher zu händeln.
Ich wundere mich manchmal über den unfreundlichen Ton.
Soll Hans selbst entscheiden, welche Lösung er möchte.

Gruß Carsten

von Manfred (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es gibt von NXP spezielle Levelshifter IC für I²C,

Auch von Texas! Für meine Basteleien setze ich den TXS0108E ein, von dem 
es auch kleinere Varianten mit weniger Kanälen gibt.

von Pandur S. (jetztnicht)


Lesenswert?

I2C & Stoersicherheit ?  Der I2C muss sowieso auf der Leiterplatte 
bleiben. Woher sollen Stoerungen kommen ? Schlechtes Design ? Die 
aufgespannte flaeche sollte sowuieso minimal sein.

von Philipp K. (philipp_k59)


Lesenswert?

Hans K. schrieb:
> Die 250mV mit Scope gemessen.
> Es geht in der o.a. Anordnung jedenfalls gar nicht!

Ich denke der rechte Levelshifter ist nicht für Bidirektional/I2C 
optimiert, den würde ich tauschen dann müsste es besser aussehen.

Wie die Pullups in solch einem verbund wirken sehe ich auch als nicht 
ganz geklärt.. man sagt ja genau 4700Ohm .. dadrüber und drunter wird es 
ja kritisch.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Philipp K. schrieb:
> Ich denke der rechte Levelshifter ist nicht für Bidirektional/I2C
> optimiert,

Doch, das ist er. Es ist der simple und doch wirklungsvolle I2C 
Pegelwandler mit einem MOSFET, der allerdings eine recht niedrige 
Schwellenspannung haben muss, BSS138 & Co ist dein Freund.

> den würde ich tauschen dann müsste es besser aussehen.

Was sieht denn schlecht aus? Der Op hat keinen Screenshop angehängt und 
auch keine genauere Beschreibung WO er gemessen hat.

> Wie die Pullups in solch einem verbund wirken sehe ich auch als nicht
> ganz geklärt.. man sagt ja genau 4700Ohm .. dadrüber und drunter wird es
> ja kritisch.

Unsinn! Es wäre höchstens denkbar, daß zuviele Pull-Ups an den ganzen 
Boards parallel am Bus hängen, dann hat der aktive Open Drain Ausgang 
irgendwann mal Probleme, das Potential nach GND zu ziehen, weil sich 
5-20mA Pull-Up Strom ergeben. Offizielle braucht I2C 3mA Pull Up Strom, 
das macht an 5V ~1,5kOhm. Da wir aber noch einen Pull-Up an je 2x 3,3V 
brauchen sollte man den etwa so aufteilen, daß jeder Pull-Up ca. 1mA 
liefert. Macht an den 2x3,3V je 3K3 sowie 4k7 an der 5V Seite. Fertig. 
Es geht aber sicher auch mit leicht höheren und niedrigeren Werten.

Der chinesische Pegelwandler rechts hat jeweils 10k an der 5V und 3V3 
Seite, das passt schon. Das Board linke hat 2x 2k2, naja bissel 
niederohmig, sollte aber noch gehen. Kann man ja wie oben empfohlen 
austauschen, dann sinkt auch der LOW-Pegel.

: Bearbeitet durch User
von Philipp K. (philipp_k59)


Lesenswert?

Ich schrieb nur das diese einfachen Levelshifter vielleicht nicht gerade 
vorteilhaft sind, ich benutze diese mit einer Gegenstelle auch.

Ausserdem habe ich noch kein Breakout Board gesehen das die pullups von 
Haus aus hat.

Jetzt wäre eher die Frage was wird wie wo  on Pullups hochgezogen, 
vielleicht sind diese an der Falschen Stelle Kontraproduktiv. 
(austesten) Mit Master und Slave ist das ja nicht die Frage, ohne kann 
es so schon nicht klappen (Kabellängen etc.)

Es war ja nur ein Tipp.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Diese einfachen Levelshifter, die nur aus einem P-Kanal MOSFET pro 
Leitung bestehen, haben in eine Richtung fast keine Verluste (weil da 
der Transistor einschaltet) und in die andere Richtung ca. 300mV weil 
dabei nur die Body-Diode leitet.

Wenn du zwei davon hintereinander schaltest, fließen wegen der vielen 
Pull-Up Widerstände auch noch größere Ströme. Da hat man dann schnell 
Low Pegel von deutlich über 600mV.

Tipp: Einen der beiden Pegelwandler anders herum drehen, damit immer nur 
eine Body Diode wirksam ist.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> Diese einfachen Levelshifter, die nur aus einem P-Kanal MOSFET pro
> Leitung bestehen,

N-Kanal in Gateschaltung.

> haben in eine Richtung fast keine Verluste (weil da
> der Transistor einschaltet)

Stimmt.

> und in die andere Richtung ca. 300mV weil
> dabei nur die Body-Diode leitet.

Stimmt nicht.

> Wenn du zwei davon hintereinander schaltest, fließen wegen der vielen
> Pull-Up Widerstände auch noch größere Ströme. Da hat man dann schnell
> Low Pegel von deutlich über 600mV.

Ist das so? Oder vielleicht doch nicht? Es geht hier um zwei 3,3V 
Teilnehmer, welche beide mittels Einfach-Pegelwandler über einen 5V I2C 
Bus sprechen wollen. Siehe Anhang.

Wenn die 3,3V Seite akitv auf LOW zieht, wird der MOSFET komplett 
durchgesteuert. Wenn wir mal vorsichtig optimistisch sind, hat er dann 
vielleicht 5Ohm. Der CMOS-Ausgang der jeweiligen I2C Bausteine hat bei 
LOW eher mehr, vielleicht 20-50 Ohm! Macht bei 3mA ca. 150mV LOW-Pegel, 
welcher durch den MOSFET nicht nennenswert erhöht wird, bestenfalls um 
10-20mV.

Wenn jetzt dieser 150mV LOW Pegel auf dem 5V Bus den gegenüberliegenden 
Pegelwandler treiben soll, dann wirkt NICHT nur die Bodydiode des 
MOSFETs, sondern der MOSFET wird gleichzeitig mit aufgesteuert! Klingt 
komisch, ist aber so. Kann man nachmessen oder simulieren. Siehe Anhang. 
Wenn gleich der MOSFET ein klein wenig schlechter aufsteuert, wenn er 
auf der 5V Seite auf LOW gezogen wird. Praktisch sollte das aber nicht 
ins Gewicht fallen. Die Daten vom MOSFET hab ich im Modell grob an den 
BSS138 angepaßt, ist aber nur ein Schnellschuß.

> Tipp: Einen der beiden Pegelwandler anders herum drehen, damit immer nur
> eine Body Diode wirksam ist.

Unsinn! (Mal wieder). Immer diese Akademiker! Erstens geht das nicht, 
die LV-Seite muss immer an Source und "HV" immer an Drain und 2. braucht 
man es nicht, siehe oben!

Hier mal ein Zitat aus dem Dokument von Phillips

"b) The supply voltage related levels are intended for CMOS devices 
and/or devices with supply voltages of 5V
or lower. Their I/O levels are:

LOW level input voltage VIL min. -0.5V max. 0.3VDD
HIGH level input voltage VIH min. 0.7VDD max. VDDmax+0.5V

LOW level output voltage VOL1 min. 0V max. 0.4V
HIGH level output voltage VOH open drain output, determined by VDD via 
an external pull-up resistor."

D.h. 0,4V sind als LOW vollkommen OK!

: Bearbeitet durch User
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Hier das Ganze komplett mit 2 Pegelwandlern. Die Low-Pegel links/rechts 
liegen bei 17 bzw. 34mV in der Simulation. Real wird es mehr sein, weil 
die Open Drain Ausgänge nicht so niederohmig sind. Aber man sieht, daß 
die MOSFETs immer aufsteuern, egal ob an Source oder Drain angesteuert 
wird! Der Spannungsabfall bei aktiver 5V Seite ist deutlich kleiner als 
wenn nur die Bodydiode leitend wäre.

von Philipp K. (philipp_k59)


Lesenswert?

Theorie und Praxis.. Ich musste die billigen i2c Level Shifter auch 
schon gegen boards mit spezial IC austauschen. Vielleicht ist es auch 
die Frequenz oder der Signalverlauf. Vielleicht auch blocking und non 
blocking.

Ausprobieren schadet nicht.

von Philipp K. (philipp_k59)


Lesenswert?

Falk B. schrieb:
> Hier das Ganze komplett mit 2 Pegelwandlern.

Mir fiel noch so ein, es ist ja auch nicht davon auszugehen das die 
Chinaboards Originale vergleichbare Fets draufhauen. Vielleicht sind es 
auch nur Fakes mit anderen bodydioden und Signalverlauf . Bleibt nur die 
Praxis.

von Hans K. (hans_k148)


Lesenswert?

Ich nochmal,
also mit den NXP 9508 geht alles einwandfrei!

von Falk B. (falk)


Lesenswert?

Das Ding heißt PCA9508, auch wenn der Hersteller heute NXP heißt.
Es geht auch mit den einfachen Pegelwandlern mit einem MOSFET, wenn es 
die richtigen Typen sind. Das kann man aber nachmessen, vor allem wenn 
man ein Oszi hat.

von Falk B. (falk)


Lesenswert?

Philipp K. schrieb:
> Vielleicht auch blocking und non
> blocking.

Oder vielleicht Sekt oder Selters?

Mann O Mann, was für ein Geschwätz!

von Einer K. (Gast)


Lesenswert?

Philipp K. schrieb:
> . man sagt ja genau 4700Ohm .. dadrüber und drunter wird es
> ja kritisch.
Da hast du ja eine seltsame Information aufgeschnappt.
Denn wahr ist sie nicht.
Siehe: https://www.ti.com/lit/an/slva689/slva689.pdf


Philipp K. schrieb:
> Ausserdem habe ich noch kein Breakout Board gesehen das die pullups von
> Haus aus hat.
Massig!
Wirkliche Unmengen haben die I2C Pullup an Board.
Das kann man beklatschen, oder drüber jammern, aber der Fakt bleibt.

von Philipp K. (philipp_k59)


Lesenswert?

Arduino Fanboy D. schrieb:
> Da hast du ja eine seltsame Information aufgeschnappt.
> Denn wahr ist sie nicht

Also ich sehe da das bei 5V 4,7K in aller Hinsicht ein guter Mittelwert 
für eine übliche Kapazität und jeden Modus bei 5V ist. Außerdem ist das 
über ein Jahrzehnt ein guter üblicher Empfehlungswert.

Arduino Fanboy D. schrieb:
> Wirkliche Unmengen haben die I2C Pullup an Board.

Dann wohl auf meinem einzigen Board nicht. Ironie Off
30 Pullups aufm Bus ist natürlich optimal, weils ja auf jedem 
Breakout-Board mit drauf ist.. Ohmsches Gesetz.

Falk B. schrieb:
> Oder vielleicht Sekt oder Selters?

Ich habe nur den Bus verwechslet, Blocking/Non Blocking gibts bei RS485. 
Bei I2C habe ich nur das Problem zwischen den Levelschiftern und 
mehreren Pullups beschreiben wollen.

: Bearbeitet durch User
von Robert Goldner (Gast)


Lesenswert?

Servus,

wenn Du zum Pegelwandeln eine extrem teure Lösung (die aber ganz sicher 
funktioniert) verwenden möchtest, dann kannst Du Dir auch die ADUM1250 
oder ADUM1251 von Analog Devices ansehen. Diese haben als 
"Nebeneigenschaft" die Möglichkeit zum Pegelwandeln, und als 
Haupteingenschaft eine vollständige galvanische Trennung.

Funktionieren tut es, dürfte aber ein ziemlicher Overkill sein.

By the way: Mit welcher Frequenz betreibst Du den I²C? Je höher die 
Frequenz, umso problematischer sind "selbst gebastelte" Pegelwandler.

Gruß

Robert

von Einer K. (Gast)


Lesenswert?

Philipp K. schrieb:
> Dann wohl auf meinem einzigen Board nicht.
Mag sein.... dass dein Horizont sehr begrenzt ist.

Fangen wie mal hier an ...
Hans K. schrieb:
> Die 250mV mit Scope gemessen.
In dem Beitrag findest du ein Bild.
Alle drei Boards auf dem Bild haben I2C Pullup onBoard.
Auch wenn du sie nicht sehen, oder wahrhaben, willst.

Offensichtlich lebst du in einer beschränkten Fantasiewelt.
Das ist eigentlich ganz ok.
Wenn du nicht deine Fantasien hier als Wahrheit oder Empfehlung 
verkaufen würdest.

Ich nenne das Fallenstellerei.
Und jetzt nachdem ich dich darauf hingewiesen habe, und du das 
beibehältst, ist es absichtliche Fallenstellerei.

Das musst du mit deinem Gewissen abmachen, ob du die Leute wissentlich 
in die Irre schickst.

Auf jeden Fall hast du dir jetzt ein weiteres Fleißsternchen auf meiner 
Borniertheitsliste erarbeitet.
Das erste hast du dir mit deinen Makros eingefangen.

von Philipp K. (philipp_k59)


Lesenswert?

Arduino Fanboy D. schrieb:
> In dem Beitrag findest du ein Bild.
> Alle drei Boards auf dem Bild haben I2C Pullup onBoard.

Ich sehe keinen Beitrag, ausser den obligatorischen 4,7K auf beiden 
Seiten beim vom TO benutzten Board.

Bei den Level-Shiftern speziell für i2c kann das sein. ich meinte aber 
allgemeine Breakouts/sensoren/IIIC ICs, aber auch da, weil ich 
vielleicht selbst bestimmen möchte wo denn der Pull-Up hin muss.

Man merkt noch wie Grün Du hinter den Ohren bist, weil es lustig ist wie 
Du Dich Emotional verrennst ;) Mach das erstmal 25 Jahre. Keine Ahnung 
ob Du über 18 bist. sieht nicht so aus.

Die 4K7 kannst Du im ganzen Netz nachlesen.. da brauche ich keine Falle 
stellen, na klar habe ich oben auch schon geschrieben, kann man auch 
andere Werte ausprobieren.

P.S. suche doch mal im Forum nach 4,7K Pullup und melde alle Beiträge 
als Fallenstellerei ;) Oder besser nach allen meinen Beiträgen um sie zu 
melden.. danke für Deine Nette Aufmerksamkeit!

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Philipp K. schrieb:
> Ich sehe keinen Beitrag,....
Zu borniert, um auf den Link zu klicken welchen ich dir geliefert habe?
https://www.mikrocontroller.net/attachment/472924/xx.pdf

Philipp K. schrieb:
> ich meinte aber
> allgemeine Breakouts/sensoren/IIIC ICs,
Ich auch.
Massig der vorgefertigten Breakout Boards sind mit Pullup ausgerüstet, 
auch wenn du das nicht wahrhaben möchtest.
Ebenso das auf dem Bild.
Min 10 Pullup Widerstände finden sich dort auf die beiden I2C Leitungen 
verteilt.


Philipp K. schrieb:
> suche doch mal im Forum nach 4,7K Pullup
1000 Fliegen können nicht irren.
Scheiße schmeckt gut.

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.