@Berghuhn:
Der RP6 bringt ja eine eigene Library (RP6I2CmasterTWI) für die I2C-Kommunikation mit.
Die brauchst du nur einzubinden, wie ich vorgestern in dem Beispiel von 2007 gepostet hatte.
@Berghuhn:
Der RP6 bringt ja eine eigene Library (RP6I2CmasterTWI) für die I2C-Kommunikation mit.
Die brauchst du nur einzubinden, wie ich vorgestern in dem Beispiel von 2007 gepostet hatte.
Geändert von Dirk (18.12.2011 um 19:32 Uhr)
Gruß
Dirk
Oh jaganz vergessen ^^
Habe das ganze mal umgeschrieben, aber ob ich das so:
Code:I2CTWI_transmitByte(0x3D, OUT_X_H_M); I2CTWI_readBytes(0x3D, ACC_Data, 6);
oder so:
Es bleibt immer beim lesen hängen...Code:ACC_Data[0] = I2CTWI_readByte(OUT_X_H_M); ACC_Data[1] = I2CTWI_readByte(OUT_X_L_M); ACC_Data[2] = I2CTWI_readByte(OUT_Y_H_M); ACC_Data[3] = I2CTWI_readByte(OUT_Y_L_M); ACC_Data[4] = I2CTWI_readByte(OUT_Z_H_M); ACC_Data[5] = I2CTWI_readByte(OUT_Z_L_M);![]()
irgend etwas mache ich wohl falsch ^^
Verwenden sie die M32 als Master ? Die I2C Schnittstelle zwischen M32 und Base functioniert also ? Nach verbinden von das Kompass functioniert noch immer die M32-Base Schnittstelle ? (muss normal so sein). Gibt diese I2C_Transmission_error() immer eine Failure ?
Ja ich verwende die M32 Platine als Master. Die Kommunikation funktioniert so wie immer, es kommen zumindest auch keine Fehler.
@Berghuhn:
Du machst es dir aber echt schwer, indem du alle Ratschläge jeweils nur zu 50% umsetzt und sonst wieder eigene Wege gehst...
Probier doch einfach mal das Beispiel, das ich als Post #17 verlinkt habe, auf der RP6Base aus, so wie es ist. Wenn das funktioniert, ist schonmal die Hardware ok.
Wenn du die M32 anstelle der RP6Base benutzen willst, müßte die Demo nur leicht angepaßt werden.
Gruß
Dirk
Verwenden sie fur Lesen und Schreiben ein anders Adress ? Aus den Datasheet :For magnetic sensor, the default (factory) 7-bit slave address is 0011110b(0x3C) for write operations, or 00111101b (0x3D) for read operations.
Moglich ist das schon in die I2Clib forgesehen, muss du mal nachshauen.
So ich habe wie empfohlen den Kompass nun erstmal an die Base angeschlossen.
Hier mal mein Code (testweise nur für X Werte):
So das ganze funktioniert nun schonmal (zumindest bekommen ich erste WerteCode: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); }).
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)
Geändert von Berghuhn (21.12.2011 um 22:08 Uhr) Grund: etwas hinzugefügt
Dirk schrieb:
Probier doch einfach mal das Beispiel, das ich als Post #17 verlinkt habe, auf der RP6Base aus, so wie es ist.
Gruß
Dirk
Lesezeichen