Program for testing development of BMI160 Library

Dependencies:   BMI160 max32630fthr mbed

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));
-}