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
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
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
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
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.
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...
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.
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.
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!
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.
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?