Décalage de niveau I2C

11

Je suis en train de concevoir un circuit qui peut enregistrer des données d'un capteur et sauvegarder les données enregistrées dans une EEPROM. Mes deux appareils (EEPROM et à des fins de test un RTC) sont connectés via un bus I2C à un PIC16F887 µC. Cependant, la plage de fonctionnement en tension des deux appareils n'est pas la même (5v pour l'EEPROM, 3,3 pour le RTC), et ma batterie est une batterie de 9V.

J'ai donc conçu un circuit électronique avec un décalage de niveau composé de MOSFET pour le câblage SDA / SDL. En plus de cela, j'ai ajouté deux régulateurs de tension LM317 pour alimenter les appareils (9V-> 3,3V et 9V-> 5V). Comme je ne suis pas un expert dans la conception de telles choses, j'apprécierais que vous jetiez un coup d'œil à ce que j'ai fait et me disiez si j'ai fait quelque chose d'horriblement mal!

entrez la description de l'image ici

Al_th
la source
Juste pour référence: electronics.stackexchange.com/q/708/4950
PetPaulsen

Réponses:

3

Malgré d'autres commentaires, la solution elle-même est bonne. Je vois cependant quelques problèmes mineurs.

  1. Les résistances de rappel 10k sur le bus ne sont pas assez rigides, surtout si vous souhaitez utiliser des vitesses de bus plus élevées.

  2. Vous avez besoin de condensateurs de découplage d'entrée et de sortie sur vos régulateurs linéaires et circuits intégrés numériques. 100nF est un bon début pour les circuits intégrés numériques et pour les régulateurs linéaires, 100nF sur les entrées et 1μF sur les sorties.

Adam Lawrence
la source
Merci pour la pointe du condensateur de découplage, en fait, elle est montrée sur la plupart des schémas de régulateur linéaire, mais j'ai complètement sauté cette partie! Pour le condensateur de découplage des circuits intégrés numériques, vous voulez dire un condensateur entre leur tension d'entrée et la masse, ça va? (Juste pour être sûr d'avoir bien compris ce que vous vouliez dire!) Enfin, vous dites que les résistances de tirage de 10k sont loin d'être suffisamment rigides, mais sur la fiche technique, elles recommandent ces valeurs pour une vitesse de bus de 400 kHz. Y a-t-il un problème avec le décalage de niveau? Quoi qu'il en soit, ce conseil était génial!
Al_th
1
Correct - gardez les condensateurs de découplage aussi près que possible des broches d'alimentation et de retour. S'il y a une capacité significative sur les lignes I2C, vous devrez abaisser ces pullups pour garder les bords nets. Je commence généralement par 1,8 Ko et j'évalue à partir de là.
Adam Lawrence
D'accord, merci pour tout, j'espère que cela aidera les gens à jouer avec différents appareils I2C!
Al_th
-4

Oui, vous avez fait des choses horribles sur votre schéma. Pour modifier correctement le niveau de vos niveaux de tension, voir l' adresse de l'esclave I2C non acquittée (parfois) Le CI MAX3373E est utilisé pour le décalage de niveau. Veuillez noter que les résistances de tirage sont indiquées sur les lignes SDA et SCK. Cependant, lors de l'utilisation du MAX3373E, aucune résistance de pull up n'est requise car le MAX3373E est doté de pull ups intégrés des deux côtés des lignes d'E / S. Il existe également d'autres circuits intégrés pour le changement de niveau. Vous pouvez aller à Digi Key ou Mouser et rechercher.

Suirnder
la source
5
L'approche de l'OP est très bien! NXP a même une note d'application sur le sujet. Ne soyez pas si rapide pour juger.
Adam Lawrence
Je vois où je me suis trompé. Le symbole des FET n'est pas affiché correctement, la diode est manquante.
Suirnder
1
@Suirnder Il y a des risques inhérents à trouver trop fort avec des connaissances limitées. Ce n'est pas le premier article de ce genre que vous avez rédigé, je crois.
Anindo Ghosh
1
@Gosh, j'apprends mes leçons. J'aurais dû d'abord vérifier la fiche technique des FET.
Suirnder