Operación de escritura I2C en TCA9539

1

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);

        }

    }
}
    
pregunta JYasir

1 respuesta

1

Oh. Suficientemente simple. Comienzas la transmisión a 0x74. Entonces lo terminas.

Entonces comienzas 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.

Para 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 i2c, arruinando la escritura o la lectura desde el dispositivo al que comenzó la transmisión.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas