INA226 Library

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN

INA226.cpp

Committer:
zebrin1422
Date:
2017-07-10
Revision:
0:ad712ebc38d6
Child:
1:9c367d227582

File content as of revision 0:ad712ebc38d6:

#include"mbed.h"
#include"INA226.h"

//Serial pc(USBTX, USBRX); //tx, rx

myINA226::myINA226(I2C &i2cBus){
    i2c = &i2cBus;
    i2c->frequency(400000);
}


void myINA226::set_callibretion(unsigned int val)
{
    char reg = cal_reg;
    char cmd[3];
    cmd[0] = reg;
    cmd[1] = static_cast<char>(val>>8 & 0x00FF);
    cmd[2] = static_cast<char>(val & 0x00FF);
    
    i2c->write(SLV_WRITE, cmd, 1);
}

int myINA226::Connection_check()
{
    char reg = check_reg;
    char check;
    
    i2c->write(SLV_WRITE, &reg, 1);
    i2c->read(SLV_READ, check, 2);
    
    if(check[0] == 0x54 && check[1] == 0x49)return 0;
    else return 1;
}

void myINA226::setup(int i)
{
    char reg = Ctrl_reg;
    char cmd[3][3];
    int j;
    
    for(j=0;j<3;j++){cmd[j][0]=reg; cmd[j][1]=0x41;}
    cmd[0][2]=0xFF;cmd[1][2]=0xFE;cmd[2][2]=0xFD;
    
    i2c->write(SLV_WRITE, cmd[i], 3);
}

void myINA226::get_Voltage_current(float *V_bus, float *current)
{
    char reg = V_bus_reg;
    char buff[2];
    unsigned int val[2];
    
    setup(0);
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *V_bus = (float)(val[0] | val[1]);
    *V_bus = *V_bus*1.25;
    
    reg = current_reg;
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *current = (float)(val[0] | val[1]);
    *current = *current;//1.25;
}

void myINA226::get_Shunt_voltage(float *V_shunt)
{
    char reg = V_shunt_reg;
    char buff[2];
    unsigned int val[2];
    
    setup(2);
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *V_shunt = (float)(val[0] | val[1]);
    *V_shunt = *V_shunt*1.25;
}

void myINA226::get_Bus_voltage(float *V_bus)
{
    char reg = V_bus_reg;
    char buff[2];
    unsigned int val[2];
    
    setup(1);
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *V_bus = (float)(val[0] | val[1]);
    *V_bus = *V_bus*1.25;
}

void myINA226::get_current(float *current)
{

    char reg = current_reg;
    char buff[2];
    unsigned int val[2];
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *current = (float)(val[0] | val[1]);
    *current = *current;//*1.25;
}
        
void myINA226::get_power(float *power)
{
    char reg = power_reg;
    char buff[2];
    unsigned int val[2];
    
    i2c->write(SLV_WRITE, &reg, 1);
    wait_ms(10);
    i2c->read(SLV_READ, buff, 2, false);
    
    val[0] = (unsigned int)buff[0]<<8;
    val[1] = (unsigned int)buff[1];
    
    *power = (float)(val[0] | val[1]);
}