INA236 HAL Based Library 1.0.1
This library is a software library that works with the INA236 current, voltage, and power monitor chip. This library provides a convenient and efficient way to access the I2C interfaces of the chip, allowing developers to easily integrate this power meter into their systems.
Loading...
Searching...
No Matches
ina236.c File Reference
#include "ina236.h"

Functions

INA236_Status INA236_init (INA236 *self, uint8_t I2C_ADDR, I2C_HandleTypeDef *hi2c, float ShuntResistor, ADCRange adc_range, NumSamples numer_of_adc_samples, ConvTime vbus_conversion_time, ConvTime vshunt_conversion_time, Mode mode)
 Initialize the INA236 with the given config.
 
INA236_Status INA236_alert_init (INA236 *self, AlertOn alert_on, AlertPolarity alert_polarity, AlertLatch alert_latch, AlertConvReady alert_conv_ready, float alert_limit)
 Initialize the alert functionality of INA236 with the given configurations.
 
INA236_Status __INA236_readTwoBytes (INA236 *self, uint8_t MemAddress)
 Read two bytes (a 16bit register) from INA236 and stores in the INA236::_reg::raw_data.
 
INA236_Status __INA236_writeTwoBytes (INA236 *self, uint8_t MemAddress)
 Write two bytes (a 16bit register) to INA236 from the INA236::_reg::raw_data.
 
INA236_Status INA236_setADCRange (INA236 *self, ADCRange adc_range)
 Set the ADC full scale range of INA236.
 
INA236_Status INA236_setNumberOfADCSamples (INA236 *self, NumSamples numer_of_adc_samples)
 Set the number of ADC samples to calculate the average.
 
INA236_Status INA236_setVBusConversionTime (INA236 *self, ConvTime vbus_conversion_time)
 Set the VBus convertion period.
 
INA236_Status INA236_setVShuntConversionTime (INA236 *self, ConvTime vshunt_conversion_time)
 Set the VShunt convertion period.
 
INA236_Status INA236_setMode (INA236 *self, Mode mode)
 Set the operating mode.
 
ADCRange INA236_getADCRange (INA236 *self)
 Get the ADC full scale range of INA236.
 
NumSamples INA236_getNumberOfADCSamples (INA236 *self)
 Get the number of ADC samples to calculate the average.
 
ConvTime INA236_getVBusConversionTime (INA236 *self)
 Get the VBus convertion period.
 
ConvTime INA236_getVShuntConversionTime (INA236 *self)
 Get the VShunt convertion period.
 
Mode INA236_getMode (INA236 *self)
 Set the operating mode.
 
void INA236_SoftResetAll (INA236 *self)
 Send a reset command to all of the INA236s on the bus.
 
uint16_t INA236_getManID (INA236 *self)
 Get the manufacturer ID.
 
uint16_t INA236_getDevID (INA236 *self)
 Get the device ID.
 
void INA236_readAll (INA236 *self)
 Read all of the measured values: Shunt voltage, bus voltage, power, and current. Then store the values to the INA236 object (struct) variables. Then you can read variables: INA236::ShuntVoltage, INA236::BusVoltage, INA236::Power, and INA236::Current.
 
float INA236_getCurrent (INA236 *self)
 Read the current from INA236.
 
float INA236_getBusVoltage (INA236 *self)
 Read the bus voltage from INA236.
 
float INA236_getShuntVoltage (INA236 *self)
 Read the shunt voltage from INA236.
 
float INA236_getPower (INA236 *self)
 Read the power from INA236.
 
uint8_t INA236_isDataReady (INA236 *self)
 Check if the conversion is done or not. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.
 
AlertSource INA236_getAlertSource (INA236 *self)
 Get the alert source. This function is usefull when you enabled both of the alert functions and data ready alert simultaneously. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.
 
ErrorType INA236_getErrors (INA236 *self)
 Get the error flags of INA236. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.
 
INA236_Status INA236_resetAlert (INA236 *self)
 Reset the alert pin. This function is useful when set the alert pin to latch mode.
 

Function Documentation

◆ __INA236_readTwoBytes()

INA236_Status __INA236_readTwoBytes ( INA236 * self,
uint8_t MemAddress )

Read two bytes (a 16bit register) from INA236 and stores in the INA236::_reg::raw_data.

Parameters
selfA pointer to the INA236 object (struct)
MemAddressAddress of the register
Returns
Ths status of reading
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ __INA236_writeTwoBytes()

INA236_Status __INA236_writeTwoBytes ( INA236 * self,
uint8_t MemAddress )

Write two bytes (a 16bit register) to INA236 from the INA236::_reg::raw_data.

Parameters
selfA pointer to the INA236 object (struct)
MemAddressAddress of the register
Returns
Ths status of writing
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_alert_init()

INA236_Status INA236_alert_init ( INA236 * self,
AlertOn alert_on,
AlertPolarity alert_polarity,
AlertLatch alert_latch,
AlertConvReady alert_conv_ready,
float alert_limit )

Initialize the alert functionality of INA236 with the given configurations.

Parameters
selfA pointer to the INA236 object (struct)
alert_ondetermines the event that you want to assert the alert:
alert_polarityThe alert polarity determines the polarity of alert assertion:
  • ALERT_ACTIVE_LOW Alert pin goes low on alert
  • ALERT_ACTIVE_HIGH Alert pin goes HiZ on alert (alert pin is open-drain so you have to add a pull-up resistor to get high state)
alert_latchDetermine the alert pin behaviour. If the latch is enabled, you have to reset the pin by calling the INA236_resetAlert() function.
alert_conv_readyShows if you want to get alert on "conversion done"/"data ready" too or not. If enabled, you have to distinguish the alert sourece by calling INA236_getAlertSource() function.
alert_limitThis the limit value. It automatically maps to the alert function you have chosen. The unit of this limit is related to the alert_on argument:

For example if the alert_limit was 10.4 and you give ALERT_SHUNT_OVER_LIMIT for the alert_on argument, it means you will get alert if the shunt voltage reaches over the 10.4mV. If you give ALERT_BUS_OVER_LIMIT to alert_on, it means you will get alert if the bus voltage reaches the 10.4V

Returns
Ths status of initialization
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_getADCRange()

ADCRange INA236_getADCRange ( INA236 * self)

Get the ADC full scale range of INA236.

Parameters
selfA pointer to the INA236 object (struct)
Returns
The full scale range of ADC.
Return values
RANGE_81_92mVfor 81.92 mV
RANGE_20_48mVfor 20.48 mV

◆ INA236_getAlertSource()

AlertSource INA236_getAlertSource ( INA236 * self)

Get the alert source. This function is usefull when you enabled both of the alert functions and data ready alert simultaneously. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.

Parameters
selfA pointer to the INA236 object (struct)
Returns
The alert source
Return values
ALERT_DATA_READYThe alert source is convertion ready
ALERT_LIMIT_REACHEDThe alert source is limit reach

◆ INA236_getBusVoltage()

float INA236_getBusVoltage ( INA236 * self)

Read the bus voltage from INA236.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a float value in Volts representing the bus voltage

◆ INA236_getCurrent()

float INA236_getCurrent ( INA236 * self)

Read the current from INA236.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a float value in Amps representing the current

◆ INA236_getDevID()

uint16_t INA236_getDevID ( INA236 * self)

Get the device ID.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a 12bit device ID

◆ INA236_getErrors()

ErrorType INA236_getErrors ( INA236 * self)

Get the error flags of INA236. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.

Parameters
selfA pointer to the INA236 object (struct)
Returns
Error type
Return values
ERROR_NONENo error
ERROR_MEMORYMemory error (CRC or ECC)
ERROR_OVFMath overflow error
ERROR_BOTH_MEMORY_OVFBoth memory error (CRC or ECC) and math overflow error

◆ INA236_getManID()

uint16_t INA236_getManID ( INA236 * self)

Get the manufacturer ID.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a 16bit manufacturer ID

◆ INA236_getMode()

Mode INA236_getMode ( INA236 * self)

Set the operating mode.

Parameters
selfA pointer to the INA236 object (struct)
Returns
Operating mode
Return values
MODE_SHUTDOWNshutdown mode
MODE_SINGLESHOT_SUNTonly measure the shunt voltage once
MODE_SINGLESHOT_BUSonly measure the bus voltage once
MODE_SINGLESHOT_BOTH_SHUNT_BUSmeasure the bus and shunt voltage once
MODE_CONTINUOUS_SHUNTonly measure the shunt voltage continuously
MODE_CONTINUOUS_BUSonly measure the bus voltage continuously
MODE_CONTINUOUS_BOTH_SHUNT_BUSmeasure the bus and shunt voltage continuously

◆ INA236_getNumberOfADCSamples()

NumSamples INA236_getNumberOfADCSamples ( INA236 * self)

Get the number of ADC samples to calculate the average.

Parameters
selfA pointer to the INA236 object (struct)
Returns
Numer of ADC samples to calculate the average. The higher ADC samples leads to lower noises and higher latency.
Return values
NADC_1for one sample (no average)
NADC_44 samples
NADC_1616 samples
NADC_6464 samples
NADC_128128 samples
NADC_256256 samples
NADC_512512 samples
NADC_10241024 samples

◆ INA236_getPower()

float INA236_getPower ( INA236 * self)

Read the power from INA236.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a float value in Watt representing the power

◆ INA236_getShuntVoltage()

float INA236_getShuntVoltage ( INA236 * self)

Read the shunt voltage from INA236.

Parameters
selfA pointer to the INA236 object (struct)
Returns
a float value in miliVolts representing the shunt voltage

◆ INA236_getVBusConversionTime()

ConvTime INA236_getVBusConversionTime ( INA236 * self)

Get the VBus convertion period.

Parameters
selfA pointer to the INA236 object (struct)
Returns
The conversion time of VBus measurment.
Return values
CTIME_140us
CTIME_204us
CTIME_332us
CTIME_588us
CTIME_1100us
CTIME_2116us
CTIME_4156us
CTIME_8244us

◆ INA236_getVShuntConversionTime()

ConvTime INA236_getVShuntConversionTime ( INA236 * self)

Get the VShunt convertion period.

Parameters
selfA pointer to the INA236 object (struct)
Returns
The conversion time of VShunt measurment.
Return values
CTIME_140us
CTIME_204us
CTIME_332us
CTIME_588us
CTIME_1100us
CTIME_2116us
CTIME_4156us
CTIME_8244us

◆ INA236_init()

INA236_Status INA236_init ( INA236 * self,
uint8_t I2C_ADDR,
I2C_HandleTypeDef * hi2c,
float ShuntResistor,
ADCRange adc_range,
NumSamples numer_of_adc_samples,
ConvTime vbus_conversion_time,
ConvTime vshunt_conversion_time,
Mode mode )

Initialize the INA236 with the given config.

Parameters
selfA pointer to the INA236 object (struct)
I2C_ADDRThe I2C address of the INA236. It depends on the state of A0 pin of the chip.
hi2cA pointer to the I2C handler that is connected to INA236
ShuntResistorThe resistance of your shunt resistor (in mOhm) connected to IN+ and IN- of the INA236
adc_rangeThe full scale range of ADC. It can be one of these values:
numer_of_adc_samplesNumer of ADC samples to calculate the average. The higher ADC samples leads to lower noises and higher latency.
vbus_conversion_timeThe conversion time of VBus measurment.
vshunt_conversion_timeThe conversion time of VShunt measurment.
modeOperating mode:
Returns
Ths status of initialization
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_isDataReady()

uint8_t INA236_isDataReady ( INA236 * self)

Check if the conversion is done or not. NOTE: This function will reset the alert pin if it was in the latch mode. Exactly like calling the INA236_resetAlert() function.

Parameters
selfA pointer to the INA236 object (struct)
Return values
True
False

◆ INA236_readAll()

void INA236_readAll ( INA236 * self)

Read all of the measured values: Shunt voltage, bus voltage, power, and current. Then store the values to the INA236 object (struct) variables. Then you can read variables: INA236::ShuntVoltage, INA236::BusVoltage, INA236::Power, and INA236::Current.

Parameters
selfA pointer to the INA236 object (struct)

◆ INA236_resetAlert()

INA236_Status INA236_resetAlert ( INA236 * self)

Reset the alert pin. This function is useful when set the alert pin to latch mode.

Parameters
selfA pointer to the INA236 object (struct)
Returns
Ths status of reset
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_setADCRange()

INA236_Status INA236_setADCRange ( INA236 * self,
ADCRange adc_range )

Set the ADC full scale range of INA236.

Parameters
selfA pointer to the INA236 object (struct)
adc_rangeThe full scale range of ADC. It can be one of these values:
Returns
Ths status of config
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_setMode()

INA236_Status INA236_setMode ( INA236 * self,
Mode mode )

Set the operating mode.

Parameters
selfA pointer to the INA236 object (struct)
modeOperating mode:
Returns
Ths status of config
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_setNumberOfADCSamples()

INA236_Status INA236_setNumberOfADCSamples ( INA236 * self,
NumSamples numer_of_adc_samples )

Set the number of ADC samples to calculate the average.

Parameters
selfA pointer to the INA236 object (struct)
numer_of_adc_samplesNumer of ADC samples to calculate the average. The higher ADC samples leads to lower noises and higher latency.
Returns
Ths status of config
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_setVBusConversionTime()

INA236_Status INA236_setVBusConversionTime ( INA236 * self,
ConvTime vbus_conversion_time )

Set the VBus convertion period.

Parameters
selfA pointer to the INA236 object (struct)
vbus_conversion_timeThe conversion time of VBus measurment.
Returns
Ths status of config
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_setVShuntConversionTime()

INA236_Status INA236_setVShuntConversionTime ( INA236 * self,
ConvTime vshunt_conversion_time )

Set the VShunt convertion period.

Parameters
selfA pointer to the INA236 object (struct)
vshunt_conversion_timeThe conversion time of VShunt measurment.
Returns
Ths status of config
Return values
INA236_OKin case of success
INA236_TimeOutin case of failure

◆ INA236_SoftResetAll()

void INA236_SoftResetAll ( INA236 * self)

Send a reset command to all of the INA236s on the bus.

Parameters
selfA pointer to the INA236 object (struct)