Hallo,
ich spiele momentan mit einem GY-521 Board rum auf dem ein MPU6050
verbaut ist. Jedoch habe ich Probleme mit meinem LPC1114 Bytes an den
Sensor zu senden. Das Lesen funktioniert einwandfrei. Die volle
Funktionsfähigkeit des Sensors ist gegeben, mit einem ATMega klappt die
I2C Kommunikation einwandfrei. Für die I2C Kommunikation mit dem LPC
benutze ich folgende Bibliothek
https://github.com/microbuilder/LPC1114CodeBase/tree/master/core/i2c
Mein Test ob die Verbindung funktioniert sieht so aus und gibt immer
TRUE zurück
1 | uint8_t mpuReadByte(uint8_t reg, uint8_t* data)
|
2 | {
|
3 | I2CMasterBuffer[0] = MPU6050_ADDRESS | WRITE;
|
4 | I2CMasterBuffer[1] = reg;
|
5 | I2CMasterBuffer[2] = MPU6050_ADDRESS | READ;
|
6 |
|
7 | I2CWriteLength = 2;
|
8 | I2CReadLength = 1;
|
9 |
|
10 | uint8_t ret = i2cEngine();
|
11 |
|
12 | *data = I2CSlaveBuffer[0];
|
13 |
|
14 | return ret;
|
15 | }
|
16 |
|
17 | uint8_t mpuWriteByte(uint8_t reg, uint8_t data)
|
18 | {
|
19 | I2CMasterBuffer[0] = MPU6050_ADDRESS | WRITE;
|
20 | I2CMasterBuffer[1] = reg;
|
21 | I2CMasterBuffer[2] = data;
|
22 |
|
23 | I2CWriteLength = 3;
|
24 | I2CReadLength = 0;
|
25 |
|
26 | uint8_t ret = i2cEngine();
|
27 |
|
28 | return ret;
|
29 | }
|
30 |
|
31 | uint8_t mpuCheckConnection()
|
32 | {
|
33 | uint8_t whoAmI;
|
34 | uint8_t ret = mpuReadByte(MPU6050_RA_WHO_AM_I, &whoAmI);
|
35 |
|
36 | if (!ret || whoAmI != 0x68)
|
37 | return FALSE;
|
38 |
|
39 | return TRUE;
|
40 | }
|
Wenn ich jetzt jedoch ein R/W Register des Sensors schreiben und dann
wieder auslesen möchte, erhalte ich beim Lesevorgang immer den Wert 0
zurück. Das ganze sieht so aus
1 | mpuWriteByte(MPU6050_RA_SMPLRT_DIV, 0x07);
|
2 | uint8_t data;
|
3 | mpuReadByte(MPU6050_RA_SMPLRT_DIV, &data);
|
4 | printf("%u\n", data);
|
Ich bin mit dem Debugger alles durchgegangen, sieht gut aus. Ich habe
mehrere Register ausprobiert alle liefern mir beim Lesen eine 0. Für
mich bedeutet das also, mein Schreibvorgang funktioniert nicht, den
Fehler kann ich aber nicht finden. Vielleicht hat ja hier jemand im
Forum die passende Idee :)