So ich habe wie empfohlen den Kompass nun erstmal an die Base angeschlossen.
Hier mal mein Code (testweise nur für X Werte):
Code:
void LSM303Init()
{
I2CTWI_transmitByte(MAG_ADDRESS, 0x3C);
I2CTWI_transmitByte(MAG_ADDRESS, 0x02);
I2CTWI_transmitByte(MAG_ADDRESS, 0x00);
}
int main(void)
{
initRobotBase();
I2CTWI_initMaster(400); // 400kHz
I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
setLEDs(0b111111);
mSleep(500);
setLEDs(0b000000);
powerON();
LSM303Init();
PORTC &=~SCL;
PORTC &=~SDA;
DDRC &=~SDA;
DDRC &=~SCL;
unsigned char ACC_Data[6];
while(true)
{
task_I2CTWI(); // Call I2C Management routine
task_RP6System();
I2CTWI_transmitByte(MAG_ADDRESS, 0x3C);
I2CTWI_transmitByte(MAG_ADDRESS, OUT_X_H_M);
ACC_Data[0] = I2CTWI_readByte(0x3D);
I2CTWI_transmitByte(MAG_ADDRESS, 0x3C);
I2CTWI_transmitByte(MAG_ADDRESS, OUT_X_L_M);
ACC_Data[1] = I2CTWI_readByte(0x3D);
writeString_P("--------------------------- \n");
writeString_P("X High: \n");
writeIntegerLength(ACC_Data[0], DEC, 10);
writeString_P("\nX Low: \n");
writeIntegerLength(ACC_Data[1], DEC, 10);
writeString_P("\n--------------------------- \n");
mSleep(5000);
}
So das ganze funktioniert nun schonmal (zumindest bekommen ich erste Werte
).
für X High:
0000000000
X Low:
0000000032
Egal wie der Kompass geneigt ist es kommen immer die selben. (Bei Y Werten kommen ebenfalls die selben daten wie bei den x Werten)
Lesezeichen