Ich verwende den TCA9539 von TI für einige Lese- und Schreib-I2C-Operationen, um einige Signale auf meinem Testboard (Schulprojekt) zu steuern. Pro TI umfasst die Schreiboperation Folgendes:
„Um auf den I2C-Bus zu schreiben, sendet der Master eine START-Bedingung auf den Bus, wobei die Adresse des Slaves sowie das letzte Bit (das R/W-Bit) auf 0 gesetzt sind, was einen Schreibvorgang bedeutet. Nachdem der Slave sendet Das Acknowledge-Bit sendet der Master dann die Registeradresse des Registers, in das er schreiben möchte. Der Slave bestätigt erneut und teilt dem Master mit, dass er bereit ist. Danach beginnt der Master, die Registerdaten an den Slave zu senden, bis der Master alle erforderlichen Daten gesendet hat (was manchmal nur ein einzelnes Byte ist), und der Master die Übertragung mit einer STOP-Bedingung beendet."
Allerdings erhalte ich immer einen Nack vom Slave, wenn ich die Registeradresseninformationen an den Slave sende.
Hier ist mein Beispielcode (sehr einfach)
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. Einfach genug. Sie beginnen mit der Übertragung auf 0x74. Dann machst du Schluss.
Dann beginnen Sie mit der Übertragung an 0x02. Das bedeutet, dass Sie wirklich eine Übertragung an die Geräteadresse 0x02 gesendet haben. Statt Gerät 0x74 Register 0x02.
Dafür würdest du tun
Begin transmission 0x74.
Write 0x02. Register
Write value.
End transmission.
If back = 0, you successfully
wrote value to register 0x02 on device 0x74
Indem Sie die Übertragung beenden, senden Sie eine i2c-Stopp-Bedingung, die das Schreiben oder Lesen von dem Gerät ruiniert, zu dem Sie mit der Übertragung begonnen haben.
Passant
Passant
Passant
CL.
beginTransmission
Aufrufe ist falsch.JYasir
Passant