MAX34417 Demo

Dependencies:   max32625pico maxim-dev USBDevice

Committer:
MadhuraT
Date:
Tue Feb 19 22:27:27 2019 +0000
Revision:
1:f7e85b6d0117
Parent:
0:bc0f96339b73
Child:
2:39d6246ca2cb
demo code for MAX34417

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MI 0:bc0f96339b73 1 #include "mbed.h"
MI 0:bc0f96339b73 2 #include "USBSerial.h"
MI 0:bc0f96339b73 3 #include "max32625pico.h"
MI 0:bc0f96339b73 4
MI 0:bc0f96339b73 5 USBSerial pc;
MI 0:bc0f96339b73 6
MadhuraT 1:f7e85b6d0117 7 double readPwrMonitor(I2C &i2cbus, int channel_no);
MadhuraT 1:f7e85b6d0117 8 void configPwrMonitor(I2C &i2cbus);
MI 0:bc0f96339b73 9
MadhuraT 1:f7e85b6d0117 10 #define I2C_SLAVE_ADDRESS 0X10
MadhuraT 1:f7e85b6d0117 11 #define REG_UPDATE 0x00
MadhuraT 1:f7e85b6d0117 12 #define REG_CONTROL 0x01
MadhuraT 1:f7e85b6d0117 13 #define REG_ACC_COUNT 0x02
MadhuraT 1:f7e85b6d0117 14 #define REG_PWR_ACC1 0x03
MadhuraT 1:f7e85b6d0117 15 #define REG_PWR_ACC2 0x04
MadhuraT 1:f7e85b6d0117 16 #define REG_PWR_ACC3 0x05
MadhuraT 1:f7e85b6d0117 17 #define REG_PWR_ACC4 0x06
MadhuraT 1:f7e85b6d0117 18 #define REG_V_CH1 0x07
MadhuraT 1:f7e85b6d0117 19 #define REG_V_CH2 0x08
MadhuraT 1:f7e85b6d0117 20 #define REG_V_CH3 0x09
MadhuraT 1:f7e85b6d0117 21 #define REG_V_CH4 0x0A
MadhuraT 1:f7e85b6d0117 22 #define REG_DID 0x10
MadhuraT 1:f7e85b6d0117 23 #define REG_BULK_UPDATE 0x11
MadhuraT 1:f7e85b6d0117 24 #define REG_BULK_POWER_READOUT 0x06
MadhuraT 1:f7e85b6d0117 25 #define REG_BULK_VOLTAGE_READOUT 0x07
MadhuraT 1:f7e85b6d0117 26
MadhuraT 1:f7e85b6d0117 27
MI 0:bc0f96339b73 28
MI 0:bc0f96339b73 29 int main()
MI 0:bc0f96339b73 30 {
MadhuraT 1:f7e85b6d0117 31 int channel_no;
MadhuraT 1:f7e85b6d0117 32 int device_id;
MadhuraT 1:f7e85b6d0117 33 char *dev_id;
MadhuraT 1:f7e85b6d0117 34 char data_val[2]= {0x0F,0};
MI 0:bc0f96339b73 35 //initialize the MAX32625PICO board for +3.3V logic levels
MI 0:bc0f96339b73 36 MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_IOH);
MI 0:bc0f96339b73 37
MI 0:bc0f96339b73 38 //initialize RGB LED channels and turn them off
MI 0:bc0f96339b73 39 DigitalOut rLED(LED1, LED_OFF);
MI 0:bc0f96339b73 40 DigitalOut gLED(LED2, LED_OFF);
MI 0:bc0f96339b73 41 DigitalOut bLED(LED3, LED_OFF);
MI 0:bc0f96339b73 42
MadhuraT 1:f7e85b6d0117 43
MI 0:bc0f96339b73 44 //initialize the I2C master interface
MI 0:bc0f96339b73 45 I2C i2c(P1_6, P1_7); //SDA, SCL
MadhuraT 1:f7e85b6d0117 46
MI 0:bc0f96339b73 47
MadhuraT 1:f7e85b6d0117 48 //delcare variables to store the raw power readings and the converted power readings
MadhuraT 1:f7e85b6d0117 49 int power_raw;
MadhuraT 1:f7e85b6d0117 50 double power_W;
MadhuraT 1:f7e85b6d0117 51 double step1results, step2results, step3results, senseresistor1;
MI 0:bc0f96339b73 52
MadhuraT 1:f7e85b6d0117 53 i2c.write(I2C_SLAVE_ADDRESS,data_val, 1, false);
MadhuraT 1:f7e85b6d0117 54 i2c.read(I2C_SLAVE_ADDRESS,dev_id, 1, false);
MadhuraT 1:f7e85b6d0117 55 if(*dev_id == 0x07)
MadhuraT 1:f7e85b6d0117 56 {
MadhuraT 1:f7e85b6d0117 57 pc.printf ("Device Found \n");
MadhuraT 1:f7e85b6d0117 58 }
MadhuraT 1:f7e85b6d0117 59 else
MadhuraT 1:f7e85b6d0117 60 {
MadhuraT 1:f7e85b6d0117 61 pc.printf ("Device not found \n");
MadhuraT 1:f7e85b6d0117 62 }
MI 0:bc0f96339b73 63 //write the configuration register
MadhuraT 1:f7e85b6d0117 64 configPwrMonitor(i2c);
MI 0:bc0f96339b73 65
MadhuraT 1:f7e85b6d0117 66 //the while loop will read the power raw reading, convert to actual power data, and then
MI 0:bc0f96339b73 67 //print the result to a serial terminal. It will then toggle each on-board LED
MadhuraT 1:f7e85b6d0117 68 //for 11ms for a total of 33ms. A new power value is available every 12.5ms.
MI 0:bc0f96339b73 69 while (true) {
MadhuraT 1:f7e85b6d0117 70 //the readPwrMonitor() function returns a raw 24-bit power accumulator reading
MI 0:bc0f96339b73 71 //if successful and a zero if unsuccessful
MadhuraT 1:f7e85b6d0117 72 for (channel_no=0; channel_no <4 ; channel_no ++)
MadhuraT 1:f7e85b6d0117 73 {
MadhuraT 1:f7e85b6d0117 74 power_raw = readPwrMonitor(i2c,channel_no);
MI 0:bc0f96339b73 75
MadhuraT 1:f7e85b6d0117 76 //print poweronly if valid data is received.
MadhuraT 1:f7e85b6d0117 77 if(power_raw != 0)
MI 0:bc0f96339b73 78 {
MadhuraT 1:f7e85b6d0117 79 step1results=power_raw;
MadhuraT 1:f7e85b6d0117 80 step2results = (double)step1results / (double)(1073741824);
MadhuraT 1:f7e85b6d0117 81 senseresistor1 = 0.001 *senseresistor1;
MadhuraT 1:f7e85b6d0117 82 step3results = step2results * ((.1 / senseresistor1) * 24);
MadhuraT 1:f7e85b6d0117 83 power_W = step3results;
MI 0:bc0f96339b73 84
MI 0:bc0f96339b73 85 //print a floating point value with 4 decimal places
MadhuraT 1:f7e85b6d0117 86 pc.printf("\r\n%.4f C",power_W);
MI 0:bc0f96339b73 87 }
MI 0:bc0f96339b73 88 else {
MadhuraT 1:f7e85b6d0117 89 pc.printf("\r\nPowerMonitor Read Error");
MadhuraT 1:f7e85b6d0117 90 }
MI 0:bc0f96339b73 91 }
MI 0:bc0f96339b73 92
MI 0:bc0f96339b73 93 //toggle LEDs one at a time for a total of 33ms
MI 0:bc0f96339b73 94 bLED = LED_OFF;
MI 0:bc0f96339b73 95 rLED = LED_ON;
MI 0:bc0f96339b73 96 wait(0.11);
MI 0:bc0f96339b73 97 rLED = LED_OFF;
MI 0:bc0f96339b73 98 gLED = LED_ON;
MI 0:bc0f96339b73 99 wait(0.11);
MI 0:bc0f96339b73 100 gLED = LED_OFF;
MI 0:bc0f96339b73 101 bLED = LED_ON;
MI 0:bc0f96339b73 102 wait(0.11);
MI 0:bc0f96339b73 103 }
MI 0:bc0f96339b73 104 }
MI 0:bc0f96339b73 105
MadhuraT 1:f7e85b6d0117 106 void configPwrMonitor(I2C &i2cbus)
MI 0:bc0f96339b73 107 {
MI 0:bc0f96339b73 108 //creates an array to store the values to be written to the configuration register
MadhuraT 1:f7e85b6d0117 109
MadhuraT 1:f7e85b6d0117 110 char data[2] = {REG_CONTROL, 0xA0};
MI 0:bc0f96339b73 111
MadhuraT 1:f7e85b6d0117 112 //this built-in I2C write function from mbed sends the configuration data to the MAX34417
MadhuraT 1:f7e85b6d0117 113 i2cbus.write(I2C_SLAVE_ADDRESS, data, 2, false);
MI 0:bc0f96339b73 114 }
MI 0:bc0f96339b73 115
MadhuraT 1:f7e85b6d0117 116 double readPwrMonitor(I2C &i2cbus, int channel)
MI 0:bc0f96339b73 117 {
MadhuraT 1:f7e85b6d0117 118 int pwr_raw = 0;
MadhuraT 1:f7e85b6d0117 119 char data[2]= {0, 0};
MI 0:bc0f96339b73 120
MadhuraT 1:f7e85b6d0117 121 data[0] = REG_UPDATE;
MadhuraT 1:f7e85b6d0117 122 data[1] =0;
MadhuraT 1:f7e85b6d0117 123
MadhuraT 1:f7e85b6d0117 124
MI 0:bc0f96339b73 125 //it returns a zero on success or non-zero if unsuccessful
MadhuraT 1:f7e85b6d0117 126 int rtn_val = i2cbus.write(I2C_SLAVE_ADDRESS, data, 1, true);
MI 0:bc0f96339b73 127
MadhuraT 1:f7e85b6d0117 128 //proceeds to read power only if previous command was successful
MI 0:bc0f96339b73 129 if(rtn_val == 0)
MI 0:bc0f96339b73 130 {
MadhuraT 1:f7e85b6d0117 131
MadhuraT 1:f7e85b6d0117 132 {
MadhuraT 1:f7e85b6d0117 133 //this I2C command reads the power and stores it in the 'data' array.
MI 0:bc0f96339b73 134 //it returns a zero on success or non-zero if unsuccessful
MadhuraT 1:f7e85b6d0117 135 if(channel == 0 )
MadhuraT 1:f7e85b6d0117 136 {
MadhuraT 1:f7e85b6d0117 137 data[0] = REG_PWR_ACC1;
MadhuraT 1:f7e85b6d0117 138 data[1] =0;
MadhuraT 1:f7e85b6d0117 139 }
MadhuraT 1:f7e85b6d0117 140 else if (channel == 1)
MadhuraT 1:f7e85b6d0117 141 {
MadhuraT 1:f7e85b6d0117 142 data[0] = REG_PWR_ACC2;
MadhuraT 1:f7e85b6d0117 143 data[1] =0;
MadhuraT 1:f7e85b6d0117 144 }
MadhuraT 1:f7e85b6d0117 145 else if (channel == 2)
MadhuraT 1:f7e85b6d0117 146 {
MadhuraT 1:f7e85b6d0117 147 data[0] = REG_PWR_ACC3;
MadhuraT 1:f7e85b6d0117 148 data[1] =0;
MadhuraT 1:f7e85b6d0117 149 }
MadhuraT 1:f7e85b6d0117 150 else if (channel == 3)
MadhuraT 1:f7e85b6d0117 151 {
MadhuraT 1:f7e85b6d0117 152 data[0] = REG_PWR_ACC4;
MadhuraT 1:f7e85b6d0117 153 data[1] =0;
MadhuraT 1:f7e85b6d0117 154 }
MadhuraT 1:f7e85b6d0117 155 rtn_val = i2cbus.read(I2C_SLAVE_ADDRESS, data, 1, false);
MI 0:bc0f96339b73 156
MI 0:bc0f96339b73 157 //proceeds to format raw temperature data only if previous command was successful
MI 0:bc0f96339b73 158 if(rtn_val == 0)
MI 0:bc0f96339b73 159 {
MadhuraT 1:f7e85b6d0117 160
MadhuraT 1:f7e85b6d0117 161 pc.printf("Successful");
MadhuraT 1:f7e85b6d0117 162 }
MadhuraT 1:f7e85b6d0117 163
MI 0:bc0f96339b73 164 }
MI 0:bc0f96339b73 165 }
MadhuraT 1:f7e85b6d0117 166 pwr_raw=data[0];
MadhuraT 1:f7e85b6d0117 167 //returns the power reading
MadhuraT 1:f7e85b6d0117 168 return pwr_raw;
MI 0:bc0f96339b73 169 }
MI 0:bc0f96339b73 170