INA226 Library

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN

Committer:
zebrin1422
Date:
Mon Jul 10 10:50:39 2017 +0000
Revision:
0:ad712ebc38d6
Child:
1:9c367d227582
INA226 Library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zebrin1422 0:ad712ebc38d6 1 #include"mbed.h"
zebrin1422 0:ad712ebc38d6 2 #include"INA226.h"
zebrin1422 0:ad712ebc38d6 3
zebrin1422 0:ad712ebc38d6 4 //Serial pc(USBTX, USBRX); //tx, rx
zebrin1422 0:ad712ebc38d6 5
zebrin1422 0:ad712ebc38d6 6 myINA226::myINA226(I2C &i2cBus){
zebrin1422 0:ad712ebc38d6 7 i2c = &i2cBus;
zebrin1422 0:ad712ebc38d6 8 i2c->frequency(400000);
zebrin1422 0:ad712ebc38d6 9 }
zebrin1422 0:ad712ebc38d6 10
zebrin1422 0:ad712ebc38d6 11
zebrin1422 0:ad712ebc38d6 12 void myINA226::set_callibretion(unsigned int val)
zebrin1422 0:ad712ebc38d6 13 {
zebrin1422 0:ad712ebc38d6 14 char reg = cal_reg;
zebrin1422 0:ad712ebc38d6 15 char cmd[3];
zebrin1422 0:ad712ebc38d6 16 cmd[0] = reg;
zebrin1422 0:ad712ebc38d6 17 cmd[1] = static_cast<char>(val>>8 & 0x00FF);
zebrin1422 0:ad712ebc38d6 18 cmd[2] = static_cast<char>(val & 0x00FF);
zebrin1422 0:ad712ebc38d6 19
zebrin1422 0:ad712ebc38d6 20 i2c->write(SLV_WRITE, cmd, 1);
zebrin1422 0:ad712ebc38d6 21 }
zebrin1422 0:ad712ebc38d6 22
zebrin1422 0:ad712ebc38d6 23 int myINA226::Connection_check()
zebrin1422 0:ad712ebc38d6 24 {
zebrin1422 0:ad712ebc38d6 25 char reg = check_reg;
zebrin1422 0:ad712ebc38d6 26 char check;
zebrin1422 0:ad712ebc38d6 27
zebrin1422 0:ad712ebc38d6 28 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 29 i2c->read(SLV_READ, check, 2);
zebrin1422 0:ad712ebc38d6 30
zebrin1422 0:ad712ebc38d6 31 if(check[0] == 0x54 && check[1] == 0x49)return 0;
zebrin1422 0:ad712ebc38d6 32 else return 1;
zebrin1422 0:ad712ebc38d6 33 }
zebrin1422 0:ad712ebc38d6 34
zebrin1422 0:ad712ebc38d6 35 void myINA226::setup(int i)
zebrin1422 0:ad712ebc38d6 36 {
zebrin1422 0:ad712ebc38d6 37 char reg = Ctrl_reg;
zebrin1422 0:ad712ebc38d6 38 char cmd[3][3];
zebrin1422 0:ad712ebc38d6 39 int j;
zebrin1422 0:ad712ebc38d6 40
zebrin1422 0:ad712ebc38d6 41 for(j=0;j<3;j++){cmd[j][0]=reg; cmd[j][1]=0x41;}
zebrin1422 0:ad712ebc38d6 42 cmd[0][2]=0xFF;cmd[1][2]=0xFE;cmd[2][2]=0xFD;
zebrin1422 0:ad712ebc38d6 43
zebrin1422 0:ad712ebc38d6 44 i2c->write(SLV_WRITE, cmd[i], 3);
zebrin1422 0:ad712ebc38d6 45 }
zebrin1422 0:ad712ebc38d6 46
zebrin1422 0:ad712ebc38d6 47 void myINA226::get_Voltage_current(float *V_bus, float *current)
zebrin1422 0:ad712ebc38d6 48 {
zebrin1422 0:ad712ebc38d6 49 char reg = V_bus_reg;
zebrin1422 0:ad712ebc38d6 50 char buff[2];
zebrin1422 0:ad712ebc38d6 51 unsigned int val[2];
zebrin1422 0:ad712ebc38d6 52
zebrin1422 0:ad712ebc38d6 53 setup(0);
zebrin1422 0:ad712ebc38d6 54
zebrin1422 0:ad712ebc38d6 55 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 56 wait_ms(10);
zebrin1422 0:ad712ebc38d6 57 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 58
zebrin1422 0:ad712ebc38d6 59 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 60 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 61
zebrin1422 0:ad712ebc38d6 62 *V_bus = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 63 *V_bus = *V_bus*1.25;
zebrin1422 0:ad712ebc38d6 64
zebrin1422 0:ad712ebc38d6 65 reg = current_reg;
zebrin1422 0:ad712ebc38d6 66
zebrin1422 0:ad712ebc38d6 67 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 68 wait_ms(10);
zebrin1422 0:ad712ebc38d6 69 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 70
zebrin1422 0:ad712ebc38d6 71 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 72 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 73
zebrin1422 0:ad712ebc38d6 74 *current = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 75 *current = *current;//1.25;
zebrin1422 0:ad712ebc38d6 76 }
zebrin1422 0:ad712ebc38d6 77
zebrin1422 0:ad712ebc38d6 78 void myINA226::get_Shunt_voltage(float *V_shunt)
zebrin1422 0:ad712ebc38d6 79 {
zebrin1422 0:ad712ebc38d6 80 char reg = V_shunt_reg;
zebrin1422 0:ad712ebc38d6 81 char buff[2];
zebrin1422 0:ad712ebc38d6 82 unsigned int val[2];
zebrin1422 0:ad712ebc38d6 83
zebrin1422 0:ad712ebc38d6 84 setup(2);
zebrin1422 0:ad712ebc38d6 85
zebrin1422 0:ad712ebc38d6 86 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 87 wait_ms(10);
zebrin1422 0:ad712ebc38d6 88 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 89
zebrin1422 0:ad712ebc38d6 90 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 91 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 92
zebrin1422 0:ad712ebc38d6 93 *V_shunt = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 94 *V_shunt = *V_shunt*1.25;
zebrin1422 0:ad712ebc38d6 95 }
zebrin1422 0:ad712ebc38d6 96
zebrin1422 0:ad712ebc38d6 97 void myINA226::get_Bus_voltage(float *V_bus)
zebrin1422 0:ad712ebc38d6 98 {
zebrin1422 0:ad712ebc38d6 99 char reg = V_bus_reg;
zebrin1422 0:ad712ebc38d6 100 char buff[2];
zebrin1422 0:ad712ebc38d6 101 unsigned int val[2];
zebrin1422 0:ad712ebc38d6 102
zebrin1422 0:ad712ebc38d6 103 setup(1);
zebrin1422 0:ad712ebc38d6 104
zebrin1422 0:ad712ebc38d6 105 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 106 wait_ms(10);
zebrin1422 0:ad712ebc38d6 107 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 108
zebrin1422 0:ad712ebc38d6 109 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 110 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 111
zebrin1422 0:ad712ebc38d6 112 *V_bus = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 113 *V_bus = *V_bus*1.25;
zebrin1422 0:ad712ebc38d6 114 }
zebrin1422 0:ad712ebc38d6 115
zebrin1422 0:ad712ebc38d6 116 void myINA226::get_current(float *current)
zebrin1422 0:ad712ebc38d6 117 {
zebrin1422 0:ad712ebc38d6 118
zebrin1422 0:ad712ebc38d6 119 char reg = current_reg;
zebrin1422 0:ad712ebc38d6 120 char buff[2];
zebrin1422 0:ad712ebc38d6 121 unsigned int val[2];
zebrin1422 0:ad712ebc38d6 122
zebrin1422 0:ad712ebc38d6 123 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 124 wait_ms(10);
zebrin1422 0:ad712ebc38d6 125 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 126
zebrin1422 0:ad712ebc38d6 127 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 128 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 129
zebrin1422 0:ad712ebc38d6 130 *current = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 131 *current = *current;//*1.25;
zebrin1422 0:ad712ebc38d6 132 }
zebrin1422 0:ad712ebc38d6 133
zebrin1422 0:ad712ebc38d6 134 void myINA226::get_power(float *power)
zebrin1422 0:ad712ebc38d6 135 {
zebrin1422 0:ad712ebc38d6 136 char reg = power_reg;
zebrin1422 0:ad712ebc38d6 137 char buff[2];
zebrin1422 0:ad712ebc38d6 138 unsigned int val[2];
zebrin1422 0:ad712ebc38d6 139
zebrin1422 0:ad712ebc38d6 140 i2c->write(SLV_WRITE, &reg, 1);
zebrin1422 0:ad712ebc38d6 141 wait_ms(10);
zebrin1422 0:ad712ebc38d6 142 i2c->read(SLV_READ, buff, 2, false);
zebrin1422 0:ad712ebc38d6 143
zebrin1422 0:ad712ebc38d6 144 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 0:ad712ebc38d6 145 val[1] = (unsigned int)buff[1];
zebrin1422 0:ad712ebc38d6 146
zebrin1422 0:ad712ebc38d6 147 *power = (float)(val[0] | val[1]);
zebrin1422 0:ad712ebc38d6 148 }