BMI160 Initial
Dependents: MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_IMU_HelloWorld MAX32630HSP3_Pitch_Charles Maxim_Squeeks
Diff: bmi160.cpp
- Revision:
- 15:dc35ccc0b08e
- Parent:
- 14:646eb94fa2eb
- Child:
- 16:12782f5d4aa4
--- a/bmi160.cpp Tue Dec 20 19:32:26 2016 +0000
+++ b/bmi160.cpp Tue Dec 20 21:20:22 2016 +0000
@@ -130,21 +130,20 @@
data.raw = ((localData[1] << 8) | localData[0]);
switch(range)
{
- //magic numbers are typical values for LSB/g from EC table
case SENS_2G:
- data.scaled = (data.raw/16384.0F);
+ data.scaled = (data.raw/SENS_2G_LSB_PER_G);
break;
case SENS_4G:
- data.scaled = (data.raw/8192.0F);
+ data.scaled = (data.raw/SENS_4G_LSB_PER_G);
break;
case SENS_8G:
- data.scaled = (data.raw/4096.0F);
+ data.scaled = (data.raw/SENS_8G_LSB_PER_G);
break;
case SENS_16G:
- data.scaled = (data.raw/2048.0F);
+ data.scaled = (data.raw/SENS_16G_LSB_PER_G);
break;
}
}
@@ -167,29 +166,28 @@
switch(range)
{
- //magic numbers are typical values for LSB/g from EC table
case SENS_2G:
- data.xAxis.scaled = (data.xAxis.raw/16384.0F);
- data.yAxis.scaled = (data.yAxis.raw/16384.0F);
- data.zAxis.scaled = (data.zAxis.raw/16384.0F);
+ data.xAxis.scaled = (data.xAxis.raw/SENS_2G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_2G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_2G_LSB_PER_G);
break;
case SENS_4G:
- data.xAxis.scaled = (data.xAxis.raw/8192.0F);
- data.yAxis.scaled = (data.yAxis.raw/8192.0F);
- data.zAxis.scaled = (data.zAxis.raw/8192.0F);
+ data.xAxis.scaled = (data.xAxis.raw/SENS_4G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_4G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_4G_LSB_PER_G);
break;
case SENS_8G:
- data.xAxis.scaled = (data.xAxis.raw/4096.0F);
- data.yAxis.scaled = (data.yAxis.raw/4096.0F);
- data.zAxis.scaled = (data.zAxis.raw/4096.0F);
+ data.xAxis.scaled = (data.xAxis.raw/SENS_8G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_8G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_8G_LSB_PER_G);
break;
case SENS_16G:
- data.xAxis.scaled = (data.xAxis.raw/2048.0F);
- data.yAxis.scaled = (data.yAxis.raw/2048.0F);
- data.zAxis.scaled = (data.zAxis.raw/2048.0F);
+ data.xAxis.scaled = (data.xAxis.raw/SENS_16G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_16G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_16G_LSB_PER_G);
break;
}
}
@@ -199,14 +197,63 @@
//*****************************************************************************
-int32_t BMI160::getSensorTime(float *data)
+int32_t BMI160::getAccXYZandSensorTime(SensorData &data, SensorTime &sensorTime, AccRange range)
+{
+ uint8_t localData[9];
+ int32_t rtnVal = readBlock(DATA_14, SENSORTIME_2, localData);
+ if(rtnVal == RTN_NO_ERROR)
+ {
+ data.xAxis.raw = ((localData[1] << 8) | localData[0]);
+ data.yAxis.raw = ((localData[3] << 8) | localData[2]);
+ data.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+ switch(range)
+ {
+ case SENS_2G:
+ data.xAxis.scaled = (data.xAxis.raw/SENS_2G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_2G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_2G_LSB_PER_G);
+ break;
+
+ case SENS_4G:
+ data.xAxis.scaled = (data.xAxis.raw/SENS_4G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_4G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_4G_LSB_PER_G);
+ break;
+
+ case SENS_8G:
+ data.xAxis.scaled = (data.xAxis.raw/SENS_8G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_8G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_8G_LSB_PER_G);
+ break;
+
+ case SENS_16G:
+ data.xAxis.scaled = (data.xAxis.raw/SENS_16G_LSB_PER_G);
+ data.yAxis.scaled = (data.yAxis.raw/SENS_16G_LSB_PER_G);
+ data.zAxis.scaled = (data.zAxis.raw/SENS_16G_LSB_PER_G);
+ break;
+ }
+
+ sensorTime.raw = ((localData[8] << 16) | (localData[7] << 8) |
+ localData[6]);
+ sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
+ }
+
+ return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorTime(SensorTime &sensorTime)
{
uint8_t localData[3];
int32_t rtnVal = readBlock(SENSORTIME_0, SENSORTIME_2, localData);
if(rtnVal == RTN_NO_ERROR)
{
- *data = (((localData[2] << 16) | (localData[1] << 8) | localData[0]) * 39e-6);
+ sensorTime.raw = ((localData[2] << 16) | (localData[1] << 8) |
+ localData[0]);
+ sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
}
return rtnVal;