Cambio de nivel I2C

11

Actualmente estoy diseñando un circuito que puede registrar datos de un sensor y guardar los datos grabados en una EEPROM. Mis dos dispositivos (EEPROM y para fines de prueba, un RTC) están conectados a través de un bus I2C a un PIC16F887 µC. Sin embargo, el rango operativo de voltaje de los dos dispositivos no es el mismo (5v para la EEPROM, 3.3 para el RTC), y mi batería es una batería de 9V.

Por lo tanto, diseñé un circuito electrónico con un cambiador de nivel compuesto por MOSFET para el cableado SDA / SDL. Además de eso, agregué dos reguladores de voltaje LM317 para alimentar los dispositivos (9V-> 3.3V y 9V-> 5V). Como no soy un experto en diseñar tales cosas, agradecería que pudieras echar un vistazo a lo que hice y decirme si hice algo terriblemente mal.

ingrese la descripción de la imagen aquí

Al_th
fuente
Solo como referencia: electronics.stackexchange.com/q/708/4950
PetPaulsen

Respuestas:

3

A pesar de otros comentarios, la solución en sí está bien. Sin embargo, veo algunos problemas menores.

  1. Las resistencias pull-up de 10k en el bus no son lo suficientemente rígidas, especialmente si desea usar velocidades de bus más altas.

  2. Necesita condensadores de desacoplamiento de entrada y salida en sus reguladores lineales y circuitos integrados digitales. 100nF es un buen comienzo para los circuitos integrados digitales, y para los reguladores lineales, 100nF en las entradas y 1μF en las salidas.

Adam Lawrence
fuente
Gracias por la punta del condensador de desacoplamiento, en realidad se muestra en la mayoría de los esquemas del regulador lineal, ¡pero omití por completo esta parte! Para el condensador de desacoplamiento para los circuitos integrados digitales, se refiere a un condensador entre su voltaje de entrada y tierra, ¿está bien? (¡Solo para estar seguro de que entendí lo que querías decir!) Por último, dices que las resistencias pull-up de 10k están lejos de ser lo suficientemente rígidas, pero en la hoja de datos recomiendan estos valores para la velocidad del bus de 400kHz. ¿Hay algún problema con el cambiador de nivel? De todos modos, ese consejo fue genial!
Al_th
1
Correcto: mantenga los condensadores de desacoplamiento lo más cerca posible de las clavijas de alimentación y retorno. Si hay alguna capacitancia significativa en las líneas I2C, tendrá que bajar esos pullups para mantener los bordes afilados. Normalmente comienzo con 1.8k y evalúo desde allí.
Adam Lawrence
Bien, gracias por todo, ¡espero que ayude a las personas a jugar con diferentes dispositivos I2C!
Al_th
-4

Sí, has hecho cosas en tu esquema que están terriblemente mal. Para cambiar de nivel adecuadamente los niveles de voltaje, consulte Dirección esclava I2C no reconocida (a veces) El MAX3373E IC se utiliza para el cambio de nivel. Tenga en cuenta que las resistencias pull up se muestran en las líneas SDA y SCK. Sin embargo, cuando se usa MAX3373E, no se requieren resistencias pull up ya que el MAX3373E ha incorporado pull ups en ambos lados de las líneas de E / S. También hay otros circuitos integrados disponibles para el cambio de nivel. Puede ir a Digi Key o Mouser y buscar.

Suirnder
fuente
55
¡El enfoque de OP está bien! NXP incluso tiene una nota de aplicación sobre el tema. No seas tan rápido para juzgar.
Adam Lawrence
Veo dónde me equivoqué. El símbolo de los FET no se muestra correctamente, falta el diodo.
Suirnder
1
@Suirnder Hay riesgos inherentes en encontrarse demasiado fuerte con conocimiento limitado. No es la primera publicación de este tipo, creo.
Anindo Ghosh
1
@Gosh Estoy aprendiendo mis lecciones. Debería haber revisado la hoja de datos en los FET primero.
Suirnder