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.
Respuestas:
A pesar de otros comentarios, la solución en sí está bien. Sin embargo, veo algunos problemas menores.
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.
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.
fuente
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.
fuente