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?
Réponses:
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.
la source
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:
la source
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.
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:
la source
Il y a des CI disponibles spécifiquement pour le changement de niveau I2C:
Je ne sais pas quelles contraintes vous avez sur votre conception, mais je penserais qu’il serait plus simple d’utiliser un CI dédié que de proposer votre propre solution.
la source