Conversion I2C 3,3 à 5,0 V


35

J'essaie d'interfacer un périphérique 3.3VI 2 C avec un Arduino 5V.

Je n'ai aucun problème avec la ligne SCL. Je peux utiliser un simple diviseur de tension, mais j'ai un problème avec la ligne SDA car il s'agit d'un circuit bidirectionnel.

Je ne suis pas du tout sûr de savoir comment gérer cela. J'ai pensé ajouter une paire de diodes, avec un diviseur de tension du côté de l'entrée esclave et rien de plus sur l'entrée principale.

Y a-t-il d'autres solutions?


Les futurs lecteurs doivent savoir que, même si OP n’utilise le SCL que dans un sens, I2C permet généralement à SCL d’être bidirectionnel.
Le Photon

Réponses:


25

Un bon document sur le sujet est le sélecteur de niveau bidirectionnel pour bus I2C et autres systèmes utilisant un seul mosfet comme transmetteur de niveau bidirectionnel.


J'aime le circuit Philips. Intelligent. À certains égards, il serait peut-être préférable que les sorties I2C ne absorbent pas tout le courant, mais concevoir un répéteur I2C actif est difficile; Je ne pense pas que cela puisse être fait avec une logique normale, car le répéteur doit être capable de détecter un front montant et d'y réagir avant tout dispositif I2C.
Supercat

2
Le lien est mort!
Zimano

14

Pour développer la réponse de sivu, il s'agit d'une utilisation courante des "commutateurs de bus", qui sont essentiellement des MOSFET à commande logique. L'utilisation de MOSFET discrets présente certains inconvénients (couplage capacitance / capacitif parasite) et il peut être difficile de choisir un bon MOSFET. Les commutateurs de bus sont optimisés pour une utilisation dans des circuits logiques à grande vitesse.

Plusieurs fabricants en fabriquent, notamment Fairchild, TI, IDT et Pericom. Jetez un coup d'œil au NC7SZ384 .

Voir les notes suivantes, entre autres:


8

De nombreux Arduino ont un support intégré pour fonctionner à 3,3 V. En fait, tous peuvent fonctionner à 3,3 V et le schéma de la puce FTDI explique comment, dans un exemple. Paul, qui a fabriqué le Teensy USB Arduino , m'avait suggéré de raccorder le câble USB et de fournir une tension de 3,3 V à la place de la ligne V CC du câble. Tu pourrais essayer ça. Mais il y a aussi d'autres options.

  1. Vérifiez les niveaux logiques pour l'Arduino. Je crois qu’ils supportent 3,3 V en logique HAUT même sur un Atmel de 5 V. Un article de SparkFun indique: "* La connexion d'une broche de sortie numérique de 3,3 V à une broche d'entrée de 5 V est souvent simple. La plupart des périphériques sont assez tolérants à la tension minimale qu'ils accepteront en tant que valeur numérique haute. La plupart des microcontrôleurs Atmel, par exemple, Accepter toute valeur supérieure à 0,6 * V CC comme élevée, l’appareil 3,3 V doit donc fournir un niveau supérieur à 3 V (0,6 * 5 V). * "
  2. Achetez l’un des clones Arduino disposant de sélecteurs 3,3 V et 5 V. J'utilise le manteau RBBB pour lequel j'ai réglé les câbles d'alimentation de la puce FTDI sur 3,3 V. Mais il y en a beaucoup d'autres qui ont des options de configuration de 3,3 V, y compris l'un des récents Arduinos officiels, si je me souviens bien. Vous pouvez également utiliser l'USB Teensy avec son plug - in Arduino et suivez les instructions sur son site pour installer un régulateur de 3,3 V .
  3. Séparez le câble USB et fournissez une source d'alimentation 3,3 V de qualité d'alimentation de laboratoire à la place de la ligne V CC du câble USB. Il devrait être faible courant, comme Paul l'a suggéré. Par conséquent, soit une source de tension de bonne qualité. Vous pouvez également simplement mettre deux piles en série pour obtenir la tension désirée.
  4. Si cela vous intéresse, je peux essayer d’examiner le schéma de votre Arduino et il est peut-être possible d’apporter une modification à la configuration FTDI qui autoriserait une tension de 3,3 V.

Enfin, nous avons une discussion qui pourrait vous intéresser à ce sujet ici sur Chiphacker au sujet des solutions unidirectionnelles et bidirectionnelles pour la réduction de tension. Cet article sur SparkFun mentionné par todbot est utile, tout comme la discussion sur l’ article bidirectionnel MOSFET lié à SparkFun. Pour résumer l'article de SparkFun:

  • Résistance en ligne. Unidirectionnel. Abaissement uniquement - réduit le courant, les diodes de blocage des E / S des circuits intégrés peuvent limiter le nombre maximal d'entrées.
  • Résistances série. Unidirectionnel. Réduit seulement, mais granulaire.
  • Diode. Unidirectionnel. Step-down. Plus sûr. Élevé à partir de 5 V blocs de diode; le côté 3,3 V est alors lié à haut. Mais, si vous inversez la configuration de la diode, ne pourriez-vous pas également progresser?
  • MOSFET. Bidirectionnel. Step-down ou step-up.
  • Dans les commentaires: Exemple d'isolation optique: 4N25. Courant élevé.
  • Dans les commentaires: exemple de diode Zener: 1N4728A
  • Dans les commentaires: 74HC244 / 125 uni-directional

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.