I2C 3,3 bis 5,0 V Umwandlung

Ich versuche, ein 3,3-VI- 2 -C-Gerät an ein 5-V-Arduino anzuschließen.

Ich habe kein Problem mit der SCL-Leitung. Ich kann einen einfachen Spannungsteiler verwenden, aber ich habe ein Problem mit der SDA-Leitung, da diese bidirektional ist.

Ich bin mir überhaupt nicht sicher, wie ich damit umgehen soll. Ich habe jedoch ein Paar Dioden hinzugefügt, mit einem Spannungsteiler auf der Slave-Eingangsseite und nichts Extra am Master-Eingang.

Gibt es noch andere Lösungen?

Zukünftige Leser sollten sich darüber im Klaren sein, dass, obwohl OP SCL möglicherweise nur in eine Richtung verwendet, I2C im Allgemeinen erlaubt, dass SCL bidirektional ist.

Antworten (4)

Ein gutes Dokument zu diesem Thema ist Bidirektionaler Pegelumsetzer für I2C-Bus und andere Systeme , die einen einzelnen Mosfet als bidirektionalen Pegelumsetzer verwenden.

Ich mag die Philips-Schaltung. Klug. Es könnte in gewisser Weise besser sein, wenn die I2C-Ausgänge nicht den gesamten Strom von allen Pull-ups aufnehmen müssten, aber das Entwerfen eines aktiven I2C-Repeaters ist schwierig; Ich glaube nicht, dass dies mit normaler Logik möglich ist, da der Repeater in der Lage sein muss, eine steigende Flanke zu erkennen und darauf zu reagieren, bevor I2C-Geräte dies können.
Der Link ist tot!
@Adrian Super! Danke!

Um die Antwort von sivu zu erweitern, ist dies eine übliche Verwendung für sogenannte "Busschalter", bei denen es sich im Grunde um logikgesteuerte MOSFETs handelt. Die Verwendung diskreter MOSFETs hat einige Nachteile (parasitäre Kapazität / kapazitive Kopplung sind einer davon) und es kann schwierig sein, einen guten MOSFET auszuwählen. Die Busschalter sind für den Einsatz in Hochgeschwindigkeits-Logikschaltungen optimiert.

Mehrere Hersteller stellen sie her, darunter Fairchild, TI, IDT und Pericom. Schauen Sie sich den NC7SZ384 an .

Siehe unter anderem die folgenden Appnotes:

Viele Arduinos haben Onboard-Unterstützung für den Betrieb mit 3,3 V. Tatsächlich können alle mit 3,3 V betrieben werden, und der FTDI-Chip-Schema erklärt in einem Beispiel, wie das geht. Paul, der den Teensy USB Arduino herstellte , hatte vorgeschlagen, dass ich das USB-Kabel aufspleißen und eine 3,3-V-Spannung anstelle der V CC -Leitung des Kabels liefern könnte. Sie könnten dies versuchen. Aber es gibt auch andere Möglichkeiten.

  1. Überprüfen Sie die Logikpegel für den Arduino. Ich glaube, sie unterstützen 3,3 V als logisches HIGH, selbst auf einem Atmel mit 5 V. In einem SparkFun-Artikel heißt es: „* Das Verbinden eines digitalen 3,3-V-Ausgangspins mit einem 5-V-Eingangspin ist oft einfach. Die meisten Geräte sind ziemlich tolerant gegenüber der Mindestspannung, die sie als digitalen Hochwert akzeptieren. Die meisten Atmel-Mikrocontroller zum Beispiel alles über 0,6*V CC als hoch akzeptieren, also muss das 3,3-V-Gerät einen Pegel über 3 V (0,6*5 V) ausgeben.*"
  2. Kaufen Sie einen der Arduino-Klone, der 3,3-V- und 5-V-Selektoren überbrückt hat. Ich verwende den RBBB-Cloan , bei dem ich den FTDI-Chip der Versorgungskabel auf 3,3 V eingestellt habe. Aber es gibt viele andere, die tatsächliche 3,3-V-Konfigurationsoptionen haben, einschließlich eines der neuesten offiziellen Arduinos, wenn ich mich richtig erinnere. Sie können den Teensy USB auch mit seinem Arduino-Plugin verwenden und den Anweisungen auf seiner Website folgen, um einen 3,3-V-Regler zu installieren .
  3. Spleißen Sie das USB-Kabel und stellen Sie anstelle der V CC -Leitung des USB-Kabels eine 3,3-V-Quelle mit Labornetzteilqualität bereit . Es sollte ein niedriger Strom sein, wie Paul vorgeschlagen hat. Daher entweder eine Spannungsquelle von guter Qualität. Sie können auch einfach ein paar Batterien in Reihe schalten, um die gewünschte Spannung zu erhalten.
  4. Wenn Sie interessiert sind, kann ich versuchen, den Schaltplan Ihres Arduino zu untersuchen, und vielleicht ist es möglich, eine Änderung an der FTDI-Konfiguration vorzunehmen, die 3,3 V zulassen würde.

Schließlich haben wir hier auf Chiphacker eine Diskussion über unidirektionale und bidirektionale Lösungen zur Spannungsabsenkung , die Sie interessieren könnte . Dieser von todbot erwähnte Artikel zu SparkFun ist nützlich, ebenso wie die Diskussion über den Artikel über bidirektionale MOSFETs , der von SparkFun verlinkt ist. Um den SparkFun-Artikel zusammenzufassen:

  • Inline-Widerstand. Unidirektional. Nur Step-down – reduziert den Strom, I/O-Klemmdioden von ICs können den maximalen Eingang begrenzen.
  • Vorwiderstände. Unidirektional. Nur Step-down, aber granular.
  • Diode. Unidirektional. Absteigen. Sicherer. High von 5 V blockiert Diode; Die 3,3-V-Seite liegt dann auf High. Aber wenn Sie die Diodenkonfiguration umkehren, könnten Sie nicht auch aufsteigen?
  • MOSFET. Bidirektional. Step-down oder step-up.
  • In Kommentaren: Beispiel für optische Isolierung: 4N25. Hoher Strom.
  • In Kommentaren: Beispiel für Zenerdiode: 1N4728A
  • In Kommentaren: 74HC244/125 unidirektional

Es gibt ICs, die speziell für die Pegelverschiebung von I2C verfügbar sind:

Ich weiß nicht, welche Art von Einschränkungen Sie bei Ihrem Design haben, aber ich würde denken, dass die Verwendung eines dedizierten ICs einfacher wäre, als eine eigene Lösung zu finden.