Estoy usando el TCA9539 de TI para algunas operaciones I2C de lectura y escritura para controlar algunas señales en mi placa de prueba (proyecto escolar). Según TI, la operación de escritura consta de 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 de que el esclavo envía el bit de reconocimiento, el maestro luego envía la dirección de registro del registro en el que desea escribir. El esclavo reconoce de nuevo, haciéndole saber al maestro que está listo. Después de esto, el maestro comienza a enviar los datos de registro al esclavo hasta que el maestro ha enviado todos los datos necesarios (que a veces es solo un byte), y el maestro finaliza la transmisión con una condición de PARADA".
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 muestra (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);
}
}
}
Oh. Suficientemente simple. Comienzas la transmisión a 0x74. Entonces lo terminas.
Luego comienza la transmisión a 0x02. Eso significa que realmente envió una transmisión a la dirección del dispositivo 0x02. En lugar del dispositivo 0x74, registre 0x02.
Por eso harías
Begin transmission 0x74.
Write 0x02. Register
Write value.
End transmission.
If back = 0, you successfully
wrote value to register 0x02 on device 0x74
Al finalizar la transmisión, envía una condición de parada de i2c, arruinando la escritura o la lectura desde el dispositivo al que comenzó la transmisión.
Transeúnte
Transeúnte
Transeúnte
CL.
beginTransmission
llamadas es incorrecta.JYasir
Transeúnte