Restablecer el chip esclavo I2C cuando el maestro se va

2

Tengo una placa con un transformador y un MCP23017 . Esta placa está conectada a otra placa a través de 4 cables que traen energía (+ 5V, GND) y un bus I2C para un ATmega328P que actúa como maestro.

El ATmega habilitará algunos pines en el MCP23017 cuando el usuario seleccione una entrada. El pull-up I2C está en el lado ATmega.

Una vez que se habilite un pin, el MCP23017 lo mantendrá habilitado hasta que se reprograme o reinicie. Quiero restablecer el MCP23017 si el cable está desconectado, para desconectar los pines, pero no sé cómo detectarlo, dado que el hecho de desconectar el cable está cortando la conexión I2C (y desconectando la alimentación del ATmega). ).

La única solución que me viene a la mente es usar una segunda unidad de usuario para hacer ping al ATmega principal y eliminar el sesgo en el MCP23017 si la placa principal ya no responde, pero me encantaría encontrar una solución más sencilla.

    
pregunta garph0

1 respuesta

3

Ya que dice que las I2C-pullups están en el lado de ATmega, tal vez podría ejecutar un temporizador y verificar si tanto el SDA como el SCL están bajos durante más tiempo del esperado durante la comunicación normal y restablecer ese temporizador una vez que las señales son altas. Tal vez no sea la forma más eficiente en términos de energía, pero no necesita ningún circuito adicional.

    
respondido por el og1L

Lea otras preguntas en las etiquetas