Hallo zusammen,
ich ärgere mich nun seit Tagen mit einem MPU-9250 board herum. Ich
spreche den Baustein mit einem ATMega 328 über I2C an. Das funktioniert
auch alles wie es soll, aber an die Daten vom Magnetometer (AK8963)
komme ich nicht dran. Es gibt wohl die möglichkeit den MPU in einen
Bypass Modus zu setzen und dann soll man den AK direkt adressieren
können. Wenn ich das in der Init Sequenz mache, das sind unten die
beiden auskommentierten Codeschnipsel, dann hängt sich der komplette I2C
Bus weg. Könnte mal bitte irgendwer über meine Init Sequenz schauen, mir
gehen so langsam die Ideen aus.
Danke schon mal im Vorraus
1 | void mpu9520_init ( void )
|
2 | {
|
3 | i2c_start ( ); //
|
4 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
5 | i2c_data_ack ( MPU9250_PWR_MGMT_1 ); // 0x6B
|
6 | i2c_data_ack ( 0x00 ); // 0x00
|
7 | i2c_stop ( ); //
|
8 | _delay_ms ( 100 );
|
9 |
|
10 | i2c_start ( ); //
|
11 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
12 | i2c_data_ack ( MPU9250_PWR_MGMT_1 ); // 0x6B
|
13 | i2c_data_ack ( MPU9250_CLKSEL_1 ); // 0x01
|
14 | i2c_stop ( ); //
|
15 | _delay_ms ( 200 );
|
16 |
|
17 | i2c_start ( ); //
|
18 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
19 | i2c_data_ack ( MPU9250_CONFIG ); // 0x1A
|
20 | i2c_data_ack ( MPU9250_DLPF_CFG_3 ); // 0x03
|
21 | i2c_stop ( ); //
|
22 |
|
23 | i2c_start ( ); //
|
24 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
25 | i2c_data_ack ( MPU9250_SMPLRT_DIV ); // 0x19
|
26 | i2c_data_ack ( 0x04 ); // 0x04
|
27 | i2c_stop ( ); //
|
28 |
|
29 | i2c_start ( ); //
|
30 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
31 | i2c_data_ack ( MPU9250_GYRO_CONFIG ); // 0x1B
|
32 | i2c_data_ack ( MPU9250_FS_SEL_2000DPS ); // 0x18
|
33 | i2c_stop ( ); //
|
34 |
|
35 | i2c_start ( ); //
|
36 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
37 | i2c_data_ack ( MPU9250_ACCEL_CONFIG ); // 0x1C
|
38 | i2c_data_ack ( MPU9250_ACCEL_FS_SEL_16G ); // 0x18
|
39 | i2c_stop ( ); //
|
40 |
|
41 | i2c_start ( ); //
|
42 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
43 | i2c_data_ack ( MPU9250_ACCEL_CONFIG_2 ); // 0x1D
|
44 | i2c_data_ack ( MPU9250_ACCEL_A_DLPFCFG_0 ); // 0X00
|
45 | i2c_stop ( ); //
|
46 |
|
47 | i2c_start ( ); //
|
48 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
49 | i2c_data_ack ( MPU9250_USER_CTRL ); // 0x6A
|
50 | i2c_data_ack ( MPU9250_USR_FIFO_EN ); // 0x40
|
51 | i2c_stop ( ); //
|
52 |
|
53 |
|
54 | /*
|
55 | i2c_start ( ); //
|
56 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
57 | i2c_data_ack ( MPU9250_INT_PIN_CFG ); // 0x37
|
58 | i2c_data_ack ( MPU9250_BYPASS_EN ); // 0x02 --> 0x22
|
59 | i2c_stop ( );
|
60 | _delay_ms ( 100 );
|
61 |
|
62 | i2c_start ( ); //
|
63 | i2c_adress ( MPU9250_ADDRESS | I2C_WRITE ); //
|
64 | i2c_data_ack ( MPU9250_INT_ENABLE ); // 0x38
|
65 | i2c_data_ack ( MPU9250_RAW_RDY_EN ); // 0x01
|
66 | i2c_stop ( );
|
67 | */
|
68 | }
|