Program for testing development of BMI160 Library
Dependencies: BMI160 max32630fthr mbed
Diff: main.cpp
- Revision:
- 1:a3fa54415b4e
- Parent:
- 0:0db9a7ed2e63
- Child:
- 2:0d7433075663
--- a/main.cpp Wed Dec 07 19:51:44 2016 +0000 +++ b/main.cpp Wed Dec 14 23:56:30 2016 +0000 @@ -34,55 +34,69 @@ #include "mbed.h" #include "SDFileSystem.h" #include "max32630fthr.h" -#include "mbed-dev/targets/TARGET_Maxim/TARGET_MAX32630/mxc/adc.h" -#include "mbed-dev/targets/TARGET_Maxim/TARGET_MAX32630/mxc/mxc_errors.h" - #include "bmi160.h" -void dumpPmicRegisters(MAX32630FTHR &pegasus); -int readBatteryRaw(uint16_t *data); -float getBatteryVolts(uint16_t data); + void dumpImuRegisters(BMI160 &imu); void printRegister(BMI160 &imu, BMI160::Registers reg); -void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg, uint8_t *buff); +void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg); + +typedef int32_t (MAX32630FTHR::*GetVoltageMbrFxPointer_t)(float *); +void printVoltage(const char *msg, MAX32630FTHR &pegasus, GetVoltageMbrFxPointer_t mbrFxPtr); int main() { - MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); - pegasus.init(); - //connect battery to monitor pin AIN_0 - pegasus.max14690.monSet(MAX14690::MON_BAT, MAX14690::MON_DIV1); - dumpPmicRegisters(pegasus); + MAX32630FTHR pegasus; + pegasus.init(MAX32630FTHR::VIO_3V3); DigitalOut rLED(LED1, LED_OFF); DigitalOut gLED(LED2, LED_OFF); DigitalOut bLED(LED3, LED_ON); - BMI160 imu(pegasus.i2c, BMI160::I2C_ADRS_SDO_LO); + I2C i2cBus(P5_7, P6_0); + BMI160_I2C imu(i2cBus, BMI160_I2C::I2C_ADRS_SDO_LO); dumpImuRegisters(imu); - uint16_t battRawData; uint32_t loopCnt = 0; + imu.setSensorPowerMode(BMI160::GYRO, BMI160::NORMAL); + wait_ms(100); + imu.setSensorPowerMode(BMI160::ACC, BMI160::NORMAL); + wait_ms(5); + printRegister(imu, BMI160::PMU_STATUS); + + float imuTemperature; + while(1) { if(loopCnt == 0) { - if(readBatteryRaw(&battRawData) == E_NO_ERROR) + printf("/***********************/\n\n"); + printVoltage(" Battery voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getBatteryVoltage); + printVoltage(" System voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getSysVoltage); + printVoltage(" Buck1 voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getBuck1Voltage); + printVoltage(" Buck2 voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getBuck2Voltage); + printVoltage(" LDO1 voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getLDO1Voltage); + printVoltage(" LDO2 voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getLDO2Voltage); + printVoltage(" LDO3 voltage = %05.3f\n\n", pegasus, &MAX32630FTHR::getLDO3Voltage); + + if(imu.getTemperature(&imuTemperature) == BMI160::RTN_NO_ERROR) { - printf("Battery voltage = %05.3f\n\n", getBatteryVolts(battRawData)); + printf("IMU temperature = %05.3f\n\n", imuTemperature); } else { - printf("Battery voltage = Overflow\n\n"); + printf("Failed to read temperature.\n\n"); } + + printf("/***********************/\n\n\n\n"); } wait(1.0); bLED = !bLED; loopCnt++; - if(loopCnt >= 15) + if(loopCnt >= 5) { loopCnt = 0; } @@ -91,38 +105,29 @@ //***************************************************************************** -void dumpPmicRegisters(MAX32630FTHR &pegasus) +void printVoltage(const char *msg, MAX32630FTHR &pegasus, GetVoltageMbrFxPointer_t mbrFxPtr) { - char reg_val[32]; - size_t len = sizeof(reg_val); + float volts; - if(pegasus.max14690.readAllReg(reg_val, len) == 0) + if((pegasus.*mbrFxPtr)(&volts) == 0) { - for(uint8_t idx = 0; idx < len; idx++) - { - printf("PMIC Register 0x%02x = 0x%02x\n", idx, reg_val[idx]); - } - printf("\n"); + printf(msg, volts); } else { - printf("Failed to read PMIC registers\n\n"); + printf("Failed to get voltage\n\n"); } - } //***************************************************************************** void dumpImuRegisters(BMI160 &imu) { - //dumps registers defined by datasheet - uint8_t buff[0x30]; - printRegister(imu, BMI160::CHIP_ID); - printBlock(imu, BMI160::ERR_REG,BMI160::FIFO_DATA, buff); - printBlock(imu, BMI160::ACC_CONF, BMI160::FIFO_CONFIG_1, buff); - printBlock(imu, BMI160::MAG_IF_0, BMI160::SELF_TEST, buff); - printBlock(imu, BMI160::NV_CONF, BMI160::STEP_CONF_1, buff); + printBlock(imu, BMI160::ERR_REG,BMI160::FIFO_DATA); + printBlock(imu, BMI160::ACC_CONF, BMI160::FIFO_CONFIG_1); + printBlock(imu, BMI160::MAG_IF_0, BMI160::SELF_TEST); + printBlock(imu, BMI160::NV_CONF, BMI160::STEP_CONF_1); printRegister(imu, BMI160::CMD); printf("\n"); } @@ -132,7 +137,7 @@ void printRegister(BMI160 &imu, BMI160::Registers reg) { uint8_t data; - if(imu.readRegister(reg, &data) == BMI160::NO_ERROR) + if(imu.readRegister(reg, &data) == BMI160::RTN_NO_ERROR) { printf("IMU Register 0x%02x = 0x%02x\n", reg, data); } @@ -144,12 +149,13 @@ //***************************************************************************** -void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg, uint8_t *buff) +void printBlock(BMI160 &imu, BMI160::Registers startReg, BMI160::Registers stopReg) { uint8_t numBytes = ((stopReg - startReg) + 1); + uint8_t buff[numBytes]; uint8_t offset = static_cast<uint8_t>(startReg); - if(imu.readBlock(startReg, stopReg, buff) == BMI160::NO_ERROR) + if(imu.readBlock(startReg, stopReg, buff) == BMI160::RTN_NO_ERROR) { for(uint8_t idx = offset; idx < (numBytes + offset); idx++) { @@ -161,34 +167,3 @@ printf("Failed to read block\n"); } } - - -//***************************************************************************** -int readBatteryRaw(uint16_t *data) -{ - static bool init = false; - int rtnVal = E_NULL_PTR; - - if(!init) - { - if(ADC_Init() == E_NO_ERROR) - { - init = true; - } - } - - if(init) - { - ADC_StartConvert(ADC_CH_0_DIV_5, 1, 0); - rtnVal = ADC_GetData(data); - } - - return rtnVal; -} - - -//***************************************************************************** -float getBatteryVolts(uint16_t data) -{ - return((((0x03FF & data) * 6.0F)/1023.0F)); -}