INA2xx

ina2xx.cpp

Committer:
jotaemesousa
Date:
19 months ago
Revision:
0:726b368625a9

File content as of revision 0:726b368625a9:

/*
 * ina2xx.c
 *
 *  Created on: 26 de Set de 2015
 *      Author: João Sousa
 */


#include "ina2xx.h"

bool ina226_get(I2C *i2c, uint8_t ina_addr, uint16_t *value)
{
    uint8_t i2c_read_data[2];
    i2c_read_data[0] = ina_addr;
    i2c->write(INA226_ADDR, (const char *)i2c_read_data, 1);
    bool v = i2c->read(INA226_ADDR, (char *)i2c_read_data, 2);
    *value = (i2c_read_data[0] << 8) | i2c_read_data[1];
    return v;
}

bool ina226_set(I2C *i2c, uint8_t ina_addr, uint16_t value)
{
    uint8_t i2c_read_data[3];
    i2c_read_data[0] = ina_addr;
    i2c_read_data[1] = value >> 8;
    i2c_read_data[2] = value & 0xFF;
    return i2c->write(INA226_ADDR, (const char *)i2c_read_data, 3);
}


float ina226GetVoltage(I2C *i2c, bool *ret_op)
{
    int16_t conf_reg;
    bool ret = ina226_get(i2c, 0x02, (uint16_t *)&conf_reg);
    float voltage;
    if(!ret)
    {
        *ret_op = true;
        voltage = (conf_reg);
        voltage *= 0.00125;
        return voltage;
    }
    *ret_op = false;
    return 0;
}

float ina226GetShuntVoltage(I2C *i2c, bool *ret_op)
{
    int16_t conf_reg;
    bool ret = ina226_get(i2c, 0x01, (uint16_t *)&conf_reg);
    float voltage;
    if (!ret)
    {
        *ret_op = true;
        voltage = (conf_reg);
        voltage *= 0.0025;
        return voltage;
    }
    *ret_op = false;
    return 0;
}

float ina226GetCurrent(I2C *i2c, bool *ret_op)
{
    int16_t conf_reg;
    bool ret = ina226_get(i2c, 0x04, (uint16_t *)&conf_reg);
    float current;
    if(!ret)
    {
        *ret_op = true;
        current = conf_reg;
        current /= 1173.0;
        return current;
    }
    *ret_op = false;
    return 0;
}