i'm trying to read values with the following routine
I always get 0.0, what am i doing wrong? I have SDA on pin RG3 and SCL on RG2, both with a resistence of 4k7 to 3.3V.
Moderators note : used code tags for C
C:
void read()
{
unsigned int lsb = 0;
unsigned char msb = 0;
char str[20];
if (I2CBusIsIdle(I2C1))
{
I2CStart(I2C1);
}
I2CSendByte(I2C1, REG_WRITE);
IdleI2C1();
I2CSendByte(I2C1, DATA_OUTPUT_X);
IdleI2C1();
I2CRepeatStart(I2C1);
IdleI2C1();
I2CSendByte(I2C1,REG_READ);
IdleI2C1();
I2CReceiverEnable(I2C1, TRUE);
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, TRUE);
msb = I2CGetByte(I2C1);
}
IdleI2C1();
I2CReceiverEnable(I2C1, TRUE);
IdleI2C1();
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, TRUE);
lsb = I2CGetByte(I2C1);
}
IdleI2C1();
X_axis=((msb<<8) | lsb);
I2CReceiverEnable(I2C1, TRUE);
IdleI2C1();
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, TRUE);
msb = I2CGetByte(I2C1);
}
IdleI2C1();
I2CReceiverEnable(I2C1, TRUE);
IdleI2C1();
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, TRUE);
lsb = I2CGetByte(I2C1);
}
IdleI2C1();
Z_axis=((msb<<8) | lsb);
I2CReceiverEnable(I2C1, TRUE);
IdleI2C1();
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, TRUE);
msb = I2CGetByte(I2C1);
}
IdleI2C1();
I2CReceiverEnable(I2C1, TRUE);
IdleI2C1();
if (I2CReceivedDataIsAvailable(I2C1))
{
I2CAcknowledgeByte(I2C1, FALSE);
lsb = I2CGetByte(I2C1);
}
IdleI2C1();
Y_axis=((msb<<8) | lsb);
I2CStop(I2C1);
}
Moderators note : used code tags for C
Last edited: