He configurado un bus I2C entre 3 Arduino (Master, Slave1 y Slave2) conectando los 3 pines A4 juntos, los 3 pines A5 juntos y un pin GND de cada Arduino a una línea de tierra común. Los 3 Arduinos están siendo alimentados actualmente por fuentes de alimentación USB independientes, pero tengo la intención de alimentarlos a todos desde una única fuente de alimentación usando sus pines Vin.
Los esclavos usan la biblioteca Wire: Slave1 está en la dirección 0x07 y Slave2 en 0x08. El maestro usa la biblioteca I2C de Wayne Truchsess, porque esta biblioteca tiene funcionalidad de tiempo de espera. El maestro interroga al esclavo1 y 100 ms después, interroga al esclavo2. Si alguno de los esclavos no está disponible, el maestro debería leer el otro esclavo (por eso el maestro no funciona con la biblioteca Wire).
Sin embargo, aunque el maestro no se bloquea, puede No leo un esclavo si el otro se apaga pero se deja conectado. Si corto la alimentación de Slave1, Master no puede leer datos de Slave2 hasta que desconecte físicamente Slave1. Si desconecto Slave1, Master puede volver a leer inmediatamente desde Slave2. El escaneo I2C sugiere que todo el bus se vuelve inválido cuando un esclavo se apaga (¿SCL y / o SDA están bajos?).
Por lo que he estado leyendo, esto no es un problema de software sino un problema de circuitos electrónicos : corriente de fuga relacionada con Slave1 y Slave2 que tienen algunos diodos, algo que tal vez podría resolverse con algunos transistores o N-FET que actuarían como válvulas de retención? Por favor avise.
P.D .: Tengo muy poca experiencia en electrónica y el inglés no es mi primer idioma.