Estoy usando TCA9539 de TI para algunas operaciones de lectura y escritura I2C para controlar algunas señales en mi tablero de prueba (proyecto escolar). Por TI, la operación de escritura comprende lo siguiente,
"Para escribir en el bus I2C, el maestro envía una condición de INICIO en el bus con la dirección del esclavo, así como el último bit (el bit R / W) establecido en 0, lo que significa una escritura. Después El esclavo envía el bit de reconocimiento, el maestro. A continuación, envía la dirección de registro del registro en el que desea escribir. El esclavo lo reconoce de nuevo, avisándole al maestro que está listo. Después de esto, el maestro comienza a enviar los datos de registro al esclavo hasta que el maestro haya enviado todos los datos necesarios (que a veces es solo un byte), y el maestro finaliza la transmisión con una condición de DETENCIÓN ".
Sin embargo, siempre obtengo un Nack del esclavo cuando envío la información de la dirección de registro al esclavo.
Aquí está mi código de ejemplo (muy básico)
int Address = 0x74;
#define control_register 0x02 // command byte for Output Port 0
#define data_register_1 0xFF
void setup()
{
byte ack;
Wire.begin();
Serial.begin(9600);
while (!Serial);
Wire.beginTransmission(Address);
ack = Wire.endTransmission();
if (ack == 0)
{
Wire.beginTransmission(control_register);
Serial.print("Control Register is : ");
byte bck = Wire.endTransmission();
if (bck == 0) // since i dont get a nack, this portion of code doesnt execute
{
Wire.write(control_register);
Wire.write(data_register_1);
}
}
}