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?
Dann lass die 3V3 direkt miteinander sprechen ohne Shifter dazwischen. Nur bei den 3V3 und 5V ein Shifter und fertig.
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.
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.
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.
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.
Die 250mV mit Scope gemessen. Es geht in der o.a. Anordnung jedenfalls gar nicht!
:
Bearbeitet durch User
Hans K. schrieb: > Leider funktioniert das nicht Könnte an den MOSFETs liegen, die Du nicht genannt hast. Die Schwellspannung muß klein genug sein.
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.
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!
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?
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.
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
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.
I2C & Stoersicherheit ? Der I2C muss sowieso auf der Leiterplatte bleiben. Woher sollen Stoerungen kommen ? Schlechtes Design ? Die aufgespannte flaeche sollte sowuieso minimal sein.
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
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
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
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.
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
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.
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.
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.
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.
Philipp K. schrieb: > Vielleicht auch blocking und non > blocking. Oder vielleicht Sekt oder Selters? Mann O Mann, was für ein Geschwätz!
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.
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.