Estoy usando expansores de puertos I2C, a saber, TCA9554A y TCA6424A en mi proyecto. Tengo dos opciones para leer las entradas: (a) esperar a la interrupción y leer (b) seguir preguntando continuamente al chip por cualquier cambio de entrada.
Aquí está el código arduino de ejemplo para leer un puerto:
Wire.beginTransmission(0x22); //0x22 is device's i2c address for TCA6424A
Wire.write(0x00); //Command to access port 0
Wire.endTransmission();
Wire.beginTransmission(0x22);
Wire.requestFrom(0x22, 1); //Requesting port state as 1 byte data
byte inputs=Wire.read();
Serial.println(inputs, BIN); //Printing the received state data
Mis preocupaciones con respecto a la forma de votación son las siguientes:
1) Si las líneas I2C están bien con el manejo del tráfico de forma continua durante un período prolongado de tiempo. Mi proyecto se ejecutará durante meses (si no años). Solo el tiempo de inactividad será cuando se apague la red, pero eso no sucederá por más de una hora en un período de un mes.
2) Ya que leer el estado implica escribir algunos datos en algunos registros, se desgastarán esos registros que causan una falla temprana del expansor de puerto que la vida útil esperada.
Hojas de datos:
1) TCA9554A
2) TCA6424A