Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: INA226 INA226_part2 INA226_T2 BMS_6804_pb
INA226.cpp
- Committer:
- tosihisa
- Date:
- 2012-11-24
- Revision:
- 1:e0ebc6af5e04
- Parent:
- 0:3a05c5755625
- Child:
- 3:e4822d187b05
File content as of revision 1:e0ebc6af5e04:
/**
* @section LICENSE
* Released under the MIT License: http://mbed.org/license/mit
* Copyright (C) 2012 tosihisa
*
* @section DESCRIPTION
* INA226 - Bi-Directional CURRENT/POWER MONITOR with I2C
* http://strawberry-linux.com/catalog/items?code=12031
*
*/
#include "mbed.h"
#include "INA226.hpp"
INA226::INA226(I2C &i2c_,int addr_,int freq_) : i2c(i2c_),i2c_addr(addr_),freq(freq_)
{
i2c.frequency(freq);
}
int INA226::isExist(void)
{
char p_addr = 0; //Select Configuration Register.
i2c.frequency(freq);
if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
return 1;
}
return 0;
}
int INA226::rawWrite(char pointer_addr,unsigned short val_)
{
char val[3];
val[0] = pointer_addr;
val[1] = static_cast<char>((val_ >> 8) & 0x00ff);
val[2] = static_cast<char>(val_ & 0x00ff);
i2c.frequency(freq);
if(i2c.write(i2c_addr | 0,val,sizeof(val)) == 0){
return 0;
}
return 1;
}
int INA226::rawRead(char pointer_addr,unsigned short *val_)
{
char p_addr = pointer_addr;
char val[2];
i2c.frequency(freq);
if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
if(i2c.read(i2c_addr | 0x01,val,sizeof(val)) == 0){
*val_ = static_cast<unsigned short>(val[0]);
*val_ = (*val_ << 8) | static_cast<unsigned short>(val[1]);
return 0;
}
}
return 1;
}
int INA226::getVoltage(double *V_)
{
unsigned short val;
if(rawRead(0x02,&val) == 0){
*V_ = static_cast<double>(val) * 1.25;
return 0;
}
return 1;
}
int INA226::getCurrent(double *I_)
{
unsigned short val;
if(rawRead(0x04,&val) == 0){
char *s_p = reinterpret_cast<char *>(&val);
short d_s;
char *d_p = reinterpret_cast<char *>(&d_s);
*(d_p + 0) = *(s_p + 0);
*(d_p + 1) = *(s_p + 1);
*I_ = static_cast<double>(d_s) /* * 1.25 */;
return 0;
}
return 1;
}
int INA226::setCurrentCalibration(unsigned short val)
{
return rawWrite(0x05,val);
}