Class Library of "INA226 CURRENT/POWER MONITOR with I2C"
Dependents: INA226 INA226_part2 INA226_T2 BMS_6804_pb
INA226.cpp
00001 #include "mbed.h" 00002 #include "INA226.hpp" 00003 00004 INA226::INA226(I2C &i2c_,int addr_,int freq_) : i2c(i2c_),i2c_addr(addr_),freq(freq_) 00005 { 00006 i2c.frequency(freq); 00007 } 00008 00009 int INA226::isExist(void) 00010 { 00011 char p_addr = 0; //Select Configuration Register. 00012 i2c.frequency(freq); 00013 if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){ 00014 return 1; 00015 } 00016 return 0; 00017 } 00018 00019 int INA226::rawWrite(char pointer_addr,unsigned short val_) 00020 { 00021 char val[3]; 00022 val[0] = pointer_addr; 00023 val[1] = static_cast<char>((val_ >> 8) & 0x00ff); 00024 val[2] = static_cast<char>(val_ & 0x00ff); 00025 i2c.frequency(freq); 00026 if(i2c.write(i2c_addr | 0,val,sizeof(val)) == 0){ 00027 return 0; 00028 } 00029 return 1; 00030 } 00031 00032 int INA226::rawRead(char pointer_addr,unsigned short *val_) 00033 { 00034 char p_addr = pointer_addr; 00035 char val[2]; 00036 i2c.frequency(freq); 00037 if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){ 00038 if(i2c.read(i2c_addr | 0x01,val,sizeof(val)) == 0){ 00039 *val_ = static_cast<unsigned short>(val[0]); 00040 *val_ = (*val_ << 8) | static_cast<unsigned short>(val[1]); 00041 return 0; 00042 } 00043 } 00044 return 1; 00045 } 00046 00047 int INA226::getVoltage(double *V_) 00048 { 00049 unsigned short val; 00050 if(rawRead(0x02,&val) == 0){ 00051 *V_ = static_cast<double>(val) * 1.25; 00052 return 0; 00053 } 00054 return 1; 00055 } 00056 00057 int INA226::getCurrent(double *I_) 00058 { 00059 unsigned short val; 00060 if(rawRead(0x04,&val) == 0){ 00061 char *s_p = reinterpret_cast<char *>(&val); 00062 short d_s; 00063 char *d_p = reinterpret_cast<char *>(&d_s); 00064 *(d_p + 0) = *(s_p + 0); 00065 *(d_p + 1) = *(s_p + 1); 00066 *I_ = static_cast<double>(d_s) /* * 1.25 */; 00067 return 0; 00068 } 00069 return 1; 00070 } 00071 00072 int INA226::setCurrentCalibration(unsigned short val) 00073 { 00074 return rawWrite(0x05,val); 00075 }
Generated on Sat Jul 23 2022 15:22:22 by
1.7.2