En mi proyecto, he conectado varias placas de ruptura de sensores a un Arduino-proMIni que funciona a 3.3 V y 8 MHz como sigue en una PCB fabricada, pero conservando los diseños originales de la tarjeta (para poder conectarlos a través de rastros en lugar de cables sueltos)
Paraahorrarenergía,estoyusandolospinesdigitalesGPIOparaalimentartodaslasplacasderupturaqueseejecutanenI2CconVin=3.3V.
Lastablasdeseparaciónparadiferentessensorestienenresistenciasdepull-upparalíneasSDA/SCL(conVin)yseconfigurandelasiguientemanera:
Cuando enciendo la placa, siempre que el eeprom externo esté ENCENDIDO (pero no se produzcan lecturas o escrituras), no hay salida en serie para la línea i2c.
Cuando apago el eeprom, la línea i2c solo funciona si todos los demás sensores están encendidos. Al desactivar uno o más de los sensores, no se obtiene una salida en serie para la línea i2c.
Después de investigar en línea, me di cuenta de que necesitamos dar una línea Vdd dedicada a las resistencias de pullup de las líneas SDA / SCL en lugar de las líneas Vin, ya que al desactivar Vin también se eliminarán las líneas i2c.
Así que eliminé las resistencias de pull-up en todas las placas de separación y agregué 5k pullups a los pines SDA / SCL en la MCU con el Vdd.
Incluso después de hacer esto, las líneas i2c solo funcionan después de que se apaga el eeprom externo.
Como para los otros sensores -
- El RTC ahora funciona solo cuando todos los demás sensores están apagados. Cambiando el Es probable que RTC activado agregue mucho ruido en la salida i2c porque Los cambios de valores en el monitor serie cambian como se enciende y volver a la normalidad cuando se apaga.
- El sensor capacitivo solo funciona cuando el acelerómetro está encendido.
- El odómetro actual y el acelerómetro funcionan sin problemas.
¿Puede alguien ayudarme a averiguar por qué sucede todo esto? ¿Se puede resolver este problema simplemente eligiendo las resistencias de pull-up correctas o es un problema de orden superior? Es posible que debido a que estoy usando un cable de 30 cm para el acelerómetro, la capacitancia total del bus esté aumentando, agregando demasiado ruido en el sistema cuando varios esclavos funcionan simultáneamente. ¿Y por lo tanto ayudará si cambio el acelerómetro en el protocolo SPI y lo desacoplo de I2C?
Todos los sensores se ejecutan a < 100Khz, excepto el eeprom que se ejecuta a 400Khz.
Actualización:
Así que tomé la sugerencia de todos a continuación e hice 2 pcbs. En uno, conecté todos los sensores a la línea Vcc e incluso detuve la línea i2c en Vcc. En el otro accioné todos los sensores con los pines GPIO (pero manteniéndolos siempre en ALTO) como antes y levanté las líneas i2c con otro GPIO (de modo que puedo bajarlos cuando todos los sensores están simultáneamente BAJOS para evitar el caso) [4] como señalado por @maple abajo). ¿Y adivina qué? Los sensores alimentados por GPIO funcionan sin problemas, mientras que en los alimentados por Vcc, la línea i2c, es decir, SDA, se congela después de unos segundos. Esto sucede en el caso de que estoy intentando comunicarme con el FDC1004, el adxl y el ina219. RTC no parece estar afectado. ¿Alguna pista de por qué esto podría suceder?