Vraag:
I2C 3.3 naar 5.0 V conversie
JohnC
2009-11-28 02:45:08 UTC
view on stackexchange narkive permalink

Ik probeer een 3.3V I 2 C-apparaat te koppelen aan een 5V Arduino.

Ik heb geen enkel probleem met de SCL-lijn. Ik kan een eenvoudige spanningsdeler gebruiken, maar ik heb een probleem met de SDA-lijn omdat deze bidirectioneel is.

Ik weet helemaal niet hoe ik dit moet aanpakken. Ik heb overwogen om een ​​paar diodes toe te voegen, met een spanningsdeler aan de slave-ingangszijde en niets extra's aan de master-ingang.

Zijn er nog andere oplossingen?

Toekomstige lezers moeten zich ervan bewust zijn dat, hoewel OP SCL alleen in één richting gebruikt, I2C SCL in het algemeen bidirectioneel laat zijn.
Vier antwoorden:
#1
+25
sivu
2009-11-28 04:08:41 UTC
view on stackexchange narkive permalink

Een goed document over het onderwerp is een Bi-directionele niveauverschuiver voor I2C-bus en andere systemen die een enkele mosfet gebruikt als een bi-directionele niveauverschuiver.

Ik hou van het Philips-circuit. Slim. Het zou in sommige opzichten beter kunnen zijn als de I2C-uitgangen niet alle stroom van alle pull-ups hoeven te zinken, maar het ontwerpen van een actieve I2C-repeater is moeilijk; Ik denk niet dat het kan met normale logica, aangezien de repeater een stijgende flank moet kunnen detecteren en erop moet reageren voordat I2C-apparaten dat kunnen.
De link is dood!
@Zimano Internet Archive schiet te hulp: http://web.archive.org/web/20121222214842/http://ics.nxp.com/support/documents/interface/pdf/an97055.pdf
@Adrian Geweldig!Bedankt!
#2
+14
Jason S
2009-11-28 10:34:28 UTC
view on stackexchange narkive permalink

Om het antwoord van sivu uit te breiden: dit is een algemeen gebruik voor zogenaamde "busschakelaars", die in feite logisch gestuurde MOSFET's zijn. Het gebruik van discrete MOSFET's heeft enkele nadelen (parasitaire capaciteit / capacitieve koppeling is één) en het kan lastig zijn om een ​​goede MOSFET te kiezen. De busschakelaars zijn geoptimaliseerd voor gebruik in logische circuits met hoge snelheid.

Verschillende fabrikanten maken ze, waaronder Fairchild, TI, IDT en Pericom. Bekijk de NC7SZ384.

Zie onder meer de volgende app-notities:

#3
+8
cyphunk
2009-11-28 05:43:33 UTC
view on stackexchange narkive permalink

Veel Arduino's hebben ingebouwde ondersteuning om op 3,3 V te draaien. Eigenlijk kunnen ze allemaal op 3,3 V draaien en het schema van de FTDI-chip legt uit hoe in een voorbeeld. Paul, die de Teensy USB Arduino maakte, had gesuggereerd dat ik de USB-kabel open kon splitsen en een spanning van 3,3 V zou kunnen leveren in plaats van de V CC -lijn van de kabel. Je zou dit kunnen proberen. Maar er zijn ook andere opties.

  1. Controleer de logische niveaus voor de Arduino. Ik geloof dat ze 3,3 V ondersteunen als logisch HOOG, zelfs op een Atmel van 5 V. In een SparkFun-artikel staat: "* Het aansluiten van een 3,3 V digitale uitgangspen op een 5 V ingangspen is vaak eenvoudig. De meeste apparaten zijn redelijk tolerant ten opzichte van de minimale spanning die ze accepteren als een digitale hoge waarde. De meeste Atmel-microcontrollers accepteren bijvoorbeeld alles boven 0,6 * V CC als hoog, dus het 3,3 V-apparaat moet een niveau van meer dan 3 V (0,6 * 5 V) uitvoeren. * "
  2. Koop een van de Arduino-klonen die 3.3 V en 5 V selectors heeft overbrugd. Ik gebruik de RBBB-mantel waarvan ik de voedingskabels FTDI-chip op 3,3 V heb ingesteld. Maar er zijn vele andere die feitelijke 3,3 V-configuratieopties hebben, waaronder een van de recente officiële Arduino's als ik het me goed herinner. Je kunt ook de Teensy USB gebruiken met zijn Arduino-plug-in en de aanwijzingen op zijn site volgen om een ​​ 3,3 V-regelaar te installeren.
  3. Verbind de USB-kabel en zorg voor een laboratoriumvoedingkwaliteit 3.3 V-bron in plaats van de V CC -lijn van de USB-kabel. Het zou een lage stroom moeten zijn, zoals Paul heeft voorgesteld. Daarom ofwel een spanningsbron van goede kwaliteit. Je zou ook gewoon een paar batterijen in serie kunnen zetten om de gewenste spanning te krijgen.
  4. Als je geïnteresseerd bent, kan ik proberen het schema van je Arduino te bekijken en misschien is het mogelijk om een ​​wijziging aan te brengen in de FTDI-configuratie die 3,3 V mogelijk zou maken.

Ten slotte hebben we hierover een discussie die u mogelijk interesseert via hier op Chiphacker over unidirectionele en bidirectionele oplossingen voor het verlagen van de spanning. Dit artikel over SparkFun dat door todbot wordt genoemd, is nuttig, evenals de discussie over het bidrectionele MOSFET -artikel waarnaar wordt gelinkt vanuit SparkFun. Om het SparkFun-artikel samen te vatten:

  • Inline-weerstand. Unidirectioneel. Alleen step-down - vermindert de stroom, IC's I / O-klemdiodes kunnen de maximale invoer beperken.
  • Serieweerstanden. Unidirectioneel. Alleen step-down, maar korrelig.
  • Diode. Unidirectioneel. Aftreden. Veiliger. Hoog vanaf 5 V blokken diode; de 3.3 V-zijde bindt dan te hoog. Maar als u de diodeconfiguratie omkeert, zou u dan niet ook een stap omhoog kunnen doen?
  • MOSFET. Bidirectioneel. Step-down of step-up.
  • In opmerkingen: Voorbeeld van optische isolatie: 4N25. Hoge stroom.
  • In opmerkingen: voorbeeld zenerdiode: 1N4728A
  • In opmerkingen: 74HC244 / 125 unidirectioneel
#4
+6
Vineeth
2009-12-02 00:45:48 UTC
view on stackexchange narkive permalink

Er zijn IC's beschikbaar specifiek voor I2C met niveauverschuiving:

Ik weet niet wat voor beperkingen je hebt aan je ontwerp, maar ik zou denken dat het gebruik van een speciale IC gemakkelijker is dan het bedenken van je eigen oplossing.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...