I2C 3.3 zu 5.0 V Umwandlung

35

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

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

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

Gibt es noch andere Lösungen?

JohnC
quelle
Zukünftige Leser sollten sich darüber im Klaren sein, dass SCL bei I2C im Allgemeinen bidirektional ist, obwohl OP SCL möglicherweise nur in einer Richtung verwendet.
Das Photon

Antworten:

25

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

sivu
quelle
Ich mag die Philips-Schaltung. Klug. In mancher Hinsicht könnte es besser sein, wenn die I2C-Ausgänge nicht den gesamten Strom von allen Pull-ups abziehen 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.
Supercat
2
Der Link ist tot!
Zimano
14

Um die Antwort von sivu zu erweitern, ist dies eine gebräuchliche Verwendung für sogenannte "Bus-Schalter", bei denen es sich im Grunde um logisch gesteuerte MOSFETs handelt. Die Verwendung von diskreten MOSFETs hat einige Nachteile (parasitäre Kapazität / kapazitive Kopplung ist eins) und es kann schwierig sein, einen guten MOSFET zu wählen. Die Busschalter sind für den Einsatz in schnellen Logikschaltungen optimiert.

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

Siehe unter anderem folgende Appnotes:

Jason S
quelle
8

Viele Arduinos unterstützen 3,3 V an Bord. Tatsächlich können alle mit 3,3 V betrieben werden, und der FTDI-Chip erklärt in einem Beispiel, wie. Paul, der den Teensy USB Arduino hergestellt hat , 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 das versuchen. Es gibt aber 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, sogar auf einem 5-V-Atmel. In einem SparkFun-Artikel heißt es: "* Das Anschließen eines 3,3-V-Digitalausgangspins an einen 5-V-Eingangspin ist häufig unkompliziert. Die meisten Geräte sind ziemlich tolerant gegenüber der Mindestspannung, die sie als digitaler Hochwert akzeptieren. Die meisten Atmel-Mikrocontroller, z. Akzeptieren Sie alles über 0,6 * V CC als hoch, sodass das 3,3-V-Gerät einen Pegel über 3 V (0,6 * 5 V) ausgeben muss. * "
  2. Kaufen Sie einen der Arduino-Klone, der 3,3 V- und 5 V-Selektoren überbrückt hat. Ich verwende den RBBB-Cloan, für den ich den FTDI-Chip der Versorgungskabel auf 3,3 V eingestellt habe. Aber es gibt viele andere, die über tatsächliche 3,3 V-Konfigurationsoptionen verfügen, einschließlich eines der neuesten offiziellen Arduinos, wenn ich mich richtig erinnere. Sie können auch den Teensy USB 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 VCC- Leitung des USB-Kabels eine 3,3-V-Quelle für die Laborstromversorgung bereit. Es sollte ein niedriger Strom sein, wie Paul vorgeschlagen hat. Daher entweder eine Spannungsquelle 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 ermöglichen würde.

Zuletzt haben wir eine Diskussion, die Sie hier auf Chiphacker über unidirektionale und bidirektionale Lösungen zur Spannungsreduzierung interessieren könnte . Dieser von todbot erwähnte Artikel über SparkFun ist nützlich, ebenso wie die Diskussion über bidrektionale MOSFET- Artikel, die von SparkFun verlinkt wurden. So fassen Sie den SparkFun-Artikel zusammen:

  • Inline-Widerstand. Unidirektional. Nur Absenken - Reduziert den Strom, ICs I / O-Klemmdioden können die maximale Eingangsleistung begrenzen.
  • Vorwiderstände. Unidirektional. Nur Step-down, aber körnig.
  • Diode. Unidirektional. Schritt runter. Sicherer. Hoch von 5 V sperrt Diode; Die 3,3-V-Seite ist dann zu hoch. Wenn Sie jedoch die Diodenkonfiguration umkehren, können Sie dann nicht auch die Leistung steigern?
  • MOSFET. Bidirektional. Step-down oder Step-up.
  • In Kommentaren: Optisches Isolationsbeispiel: 4N25. Hoher Strom.
  • In Kommentaren: Zenerdioden-Beispiel: 1N4728A
  • In Kommentaren: 74HC244 / 125 unidirektional
Cyphunk
quelle