Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 5:5953e6862d35, committed 2017-01-27
- Comitter:
- lbrandl
- Date:
- Fri Jan 27 13:08:03 2017 +0000
- Parent:
- 4:dfd8d0b5b997
- Commit message:
- KeplerBRAIN_V4
Changed in this revision
| KeplerBRAIN_V4.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/KeplerBRAIN_V4.h Tue Nov 15 10:05:50 2016 +0000
+++ b/KeplerBRAIN_V4.h Fri Jan 27 13:08:03 2017 +0000
@@ -605,6 +605,173 @@
return wert;
}
+
+// *** I2C BNO055 ***
+
+#define BNO055_ADDR (0x28 << 1)
+#define BNO055_CHIP_ID 0x00
+#define BNO055_CHIP_ID_VALUE 0xa0
+#define BNO055_AXIS_MAP_CONFIG 0x41
+#define BNO055_OPR_MODE 0x3d
+#define CONFIGMODE 0x00
+#define MODE_NDOF 0x0c
+#define ACCEL_OFFSET_X_LSB 0x55
+#define ACCEL_OFFSET_X_MSB 0x56
+#define ACCEL_OFFSET_Y_LSB 0x57
+#define ACCEL_OFFSET_Y_MSB 0x58
+#define ACCEL_OFFSET_Z_LSB 0x59
+#define ACCEL_OFFSET_Z_MSB 0x5a
+#define MAG_OFFSET_X_LSB 0x5b
+#define MAG_OFFSET_X_MSB 0x5c
+#define MAG_OFFSET_Y_LSB 0x5d
+#define MAG_OFFSET_Y_MSB 0x5e
+#define MAG_OFFSET_Z_LSB 0x5f
+#define MAG_OFFSET_Z_MSB 0x60
+#define GYRO_OFFSET_X_LSB 0x61
+#define GYRO_OFFSET_X_MSB 0x62
+#define GYRO_OFFSET_Y_LSB 0x63
+#define GYRO_OFFSET_Y_MSB 0x64
+#define GYRO_OFFSET_Z_LSB 0x65
+#define GYRO_OFFSET_Z_MSB 0x66
+#define ACCEL_RADIUS_LSB 0x67
+#define ACCEL_RADIUS_MSB 0x68
+#define MAG_RADIUS_LSB 0x69
+#define MAG_RADIUS_MSB 0x6a
+#define BNO055_EULER_H_LSB 0x1a
+#define BNO055_EULER_H_MSB 0x1b
+#define BNO055_EULER_R_LSB 0x1c
+#define BNO055_EULER_R_MSB 0x1d
+#define BNO055_EULER_P_LSB 0x1e
+#define BNO055_EULER_P_MSB 0x1f
+
+void SET_I2C_BNO055()
+{
+ char data[7];
+ char chip_id;
+
+ char accel_offset_x_lsb_value = 8;
+ char accel_offset_x_msb_value = 0;
+ char accel_offset_y_lsb_value = 34;
+ char accel_offset_y_msb_value = 0;
+ char accel_offset_z_lsb_value = 7;
+ char accel_offset_z_msb_value = 0;
+
+ char mag_offset_x_lsb_value = 45;
+ char mag_offset_x_msb_value = 255;
+ char mag_offset_y_lsb_value = 116;
+ char mag_offset_y_msb_value = 0;
+ char mag_offset_z_lsb_value = 90;
+ char mag_offset_z_msb_value = 1;
+
+ char gyro_offset_x_lsb_value = 1;
+ char gyro_offset_x_msb_value = 0;
+ char gyro_offset_y_lsb_value = 1;
+ char gyro_offset_y_msb_value = 0;
+ char gyro_offset_z_lsb_value = 0;
+ char gyro_offset_z_msb_value = 0;
+
+ char accel_radius_lsb_value = 0;
+ char accel_radius_msb_value = 3;
+ char mag_radius_lsb_value = 66;
+ char mag_radius_msb_value = 2;
+
+ data[0] = BNO055_CHIP_ID;
+ i2c.write(BNO055_ADDR, data, 1, true);
+ i2c.read(BNO055_ADDR, data, 7, false);
+ chip_id = data[0];
+
+ while (chip_id != BNO055_CHIP_ID_VALUE)
+ {
+ data[0] = BNO055_CHIP_ID;
+ i2c.write(BNO055_ADDR, data, 1, true);
+ i2c.read(BNO055_ADDR, data, 7, false);
+ chip_id = data[0];
+ }
+
+ data[0] = BNO055_OPR_MODE;
+ data[1] = CONFIGMODE;
+ i2c.write(BNO055_ADDR, data, 2);
+ wait_ms(50);
+
+ data[0] = BNO055_AXIS_MAP_CONFIG;
+ data[1] = 0x24;
+ data[2] = 0x00;
+ i2c.write(BNO055_ADDR, data, 2);
+
+ data[0] = ACCEL_OFFSET_X_LSB; data[1] = accel_offset_x_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_OFFSET_X_MSB; data[1] = accel_offset_x_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_OFFSET_Y_LSB; data[1] = accel_offset_y_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_OFFSET_Y_LSB; data[1] = accel_offset_y_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_OFFSET_Z_LSB; data[1] = accel_offset_z_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_OFFSET_Z_LSB; data[1] = accel_offset_z_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+
+ data[0] = MAG_OFFSET_X_LSB; data[1] = mag_offset_x_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_OFFSET_X_MSB; data[1] = mag_offset_x_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_OFFSET_Y_LSB; data[1] = mag_offset_y_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_OFFSET_Y_LSB; data[1] = mag_offset_y_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_OFFSET_Z_LSB; data[1] = mag_offset_z_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_OFFSET_Z_LSB; data[1] = mag_offset_z_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+
+ data[0] = GYRO_OFFSET_X_LSB; data[1] = gyro_offset_x_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = GYRO_OFFSET_X_MSB; data[1] = gyro_offset_x_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = GYRO_OFFSET_Y_LSB; data[1] = gyro_offset_y_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = GYRO_OFFSET_Y_LSB; data[1] = gyro_offset_y_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = GYRO_OFFSET_Z_LSB; data[1] = gyro_offset_z_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = GYRO_OFFSET_Z_LSB; data[1] = gyro_offset_z_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+
+ data[0] = ACCEL_RADIUS_LSB; data[1] = accel_radius_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = ACCEL_RADIUS_MSB; data[1] = accel_radius_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_RADIUS_LSB; data[1] = mag_radius_lsb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+ data[0] = MAG_RADIUS_MSB; data[1] = mag_radius_msb_value; i2c.write(BNO055_ADDR, data, 2); wait_ms(20);
+
+ data[0] = BNO055_OPR_MODE;
+ data[1] = MODE_NDOF;
+ i2c.write(BNO055_ADDR, data, 2);
+ wait_ms(10);
+}
+
+int READ_I2C_BNO055_YAW()
+{
+ int16_t wert;
+ char data[3];
+
+ data[0] = BNO055_EULER_H_LSB;
+ i2c.write(BNO055_ADDR, data, 1, true);
+ i2c.read(BNO055_ADDR, data, 2, false);
+
+ wert = data[1] << 8 | data[0];
+ wert = (double)wert/16;
+ return wert;
+}
+
+int READ_I2C_BNO055_PITCH()
+{
+ int16_t wert;
+ char data[3];
+
+ data[0] = BNO055_EULER_P_LSB;
+ i2c.write(BNO055_ADDR, data, 1, true);
+ i2c.read(BNO055_ADDR, data, 2, false);
+
+ wert = data[1] << 8 | data[0];
+ wert = (double)wert/16;
+ return wert;
+}
+
+int READ_I2C_BNO055_ROLL()
+{
+ int16_t wert;
+ char data[3];
+
+ data[0] = BNO055_EULER_R_LSB;
+ i2c.write(BNO055_ADDR, data, 1, true);
+ i2c.read(BNO055_ADDR, data, 2, false);
+
+ wert = data[1] << 8 | data[0];
+ wert = (double)wert/16;
+ return wert;
+}
+
// *** SPI ***
// PA_6 SPI MISO