SparkFun INA2XX Arduino Library  v1.0.0-3-gc9007d6
Arduino Library for the SparkFun Qwiic Power Monitor (INA228 / INA237)
Loading...
Searching...
No Matches
sfDevINA2XX.h
Go to the documentation of this file.
1
41#pragma once
42
43#include <stdint.h>
44
45// SparkFun Toolkit core headers
46#include <sfTk/sfToolkit.h>
47#include <sfTk/sfTkII2C.h>
48
50// ADC Operating Mode Enumeration
56typedef enum sfe_ina2xx_mode_t : uint8_t
57{
75
77// Conversion Time Enumeration
80typedef enum sfe_ina2xx_conv_time_t : uint8_t
81{
91
93// Averaging Count Enumeration
96typedef enum sfe_ina2xx_avg_count_t : uint8_t
97{
105 INA2XX_AVG_1024 = 7
107
109// CONFIG Register Bitfield (Address 0x00)
113{
114 struct
115 {
116 uint16_t : 4;
117 uint16_t adcRange : 1;
118 uint16_t tempComp : 1;
119 uint16_t convDly : 8;
120 uint16_t rstAcc : 1;
121 uint16_t rst : 1;
122 };
123 uint16_t word;
124};
125
127// ADC_CONFIG Register Bitfield (Address 0x01)
131{
132 struct
133 {
134 uint16_t avg : 3;
135 uint16_t vtct : 3;
136 uint16_t vshct : 3;
137 uint16_t vbusct : 3;
138 uint16_t mode : 4;
139 };
140 uint16_t word;
141};
142
144// DIAG_ALRT Register Bitfield (Address 0x0B)
149{
150 struct
151 {
152 uint16_t memStat : 1;
153 uint16_t cnvrf : 1;
154 uint16_t pol : 1;
155 uint16_t busUL : 1;
156 uint16_t busOL : 1;
157 uint16_t shntUL : 1;
158 uint16_t shntOL : 1;
159 uint16_t tmpOL : 1;
160 uint16_t : 1;
161 uint16_t mathOF : 1;
162 uint16_t chargeOF : 1;
163 uint16_t energyOF : 1;
164 uint16_t apol : 1;
165 uint16_t slowAlert : 1;
166 uint16_t cnvr : 1;
167 uint16_t alatch : 1;
168 };
169 uint16_t word;
170};
171
173// Class Declaration
175
189{
190 public:
191 sfDevINA2XX() : _theBus{nullptr}, _currentLSB{0.0f}, _adcRange{false}, _shuntRes{0.0f}
192 {
193 }
194
199 sfTkError_t begin(sfTkIBus *theBus = nullptr);
200
203 void setCommunicationBus(sfTkIBus *theBus);
204
205 // ========================= Identity & Reset =============================
206
210 sfTkError_t getManufacturerID(uint16_t &id);
211
215 sfTkError_t getDeviceID(uint16_t &id);
216
219 sfTkError_t reset(void);
220
223 sfTkError_t resetAccumulators(void);
224
225 // ========================= CONFIG Register (0x00) =======================
226
230 sfTkError_t setADCRange(bool reducedRange);
231
235 sfTkError_t getADCRange(bool &reducedRange);
236
240 sfTkError_t setConversionDelay(uint8_t delay2ms);
241
245 sfTkError_t getConversionDelay(uint8_t &delay2ms);
246
250 sfTkError_t enableTempCompensation(bool enable);
251
255 sfTkError_t getTempCompensation(bool &enabled);
256
257 // ====================== ADC_CONFIG Register (0x01) ======================
258
262 sfTkError_t setADCMode(sfe_ina2xx_mode_t mode);
263
267 sfTkError_t getADCMode(sfe_ina2xx_mode_t &mode);
268
273
278
283
288
292 sfTkError_t setTempConvTime(sfe_ina2xx_conv_time_t time);
293
297 sfTkError_t getTempConvTime(sfe_ina2xx_conv_time_t &time);
298
302 sfTkError_t setAveragingCount(sfe_ina2xx_avg_count_t count);
303
307 sfTkError_t getAveragingCount(sfe_ina2xx_avg_count_t &count);
308
309 // ================== Calibration Registers (0x02-0x03) ===================
310
314 sfTkError_t setShuntCal(uint16_t calValue);
315
319 sfTkError_t getShuntCal(uint16_t &calValue);
320
324 sfTkError_t setShuntTempCoefficient(uint16_t ppmPerDegC);
325
329 sfTkError_t getShuntTempCoefficient(uint16_t &ppmPerDegC);
330
331 // ================== Diagnostics & Alert (0x0B) ==========================
332
338
342 sfTkError_t setAlertLatch(bool latched);
343
347 sfTkError_t getAlertLatch(bool &latched);
348
352 sfTkError_t setConversionReadyAlert(bool enable);
353
357 sfTkError_t getConversionReadyAlert(bool &enabled);
358
362 sfTkError_t setSlowAlert(bool enable);
363
367 sfTkError_t getSlowAlert(bool &enabled);
368
372 sfTkError_t setAlertPolarity(bool activeHigh);
373
377 sfTkError_t getAlertPolarity(bool &activeHigh);
378
382 sfTkError_t isEnergyOverflow(bool &overflow);
383
387 sfTkError_t isChargeOverflow(bool &overflow);
388
392 sfTkError_t isMathOverflow(bool &overflow);
393
397 sfTkError_t isTempOverLimit(bool &overLimit);
398
402 sfTkError_t isShuntOverVoltage(bool &overVoltage);
403
407 sfTkError_t isShuntUnderVoltage(bool &underVoltage);
408
412 sfTkError_t isBusOverVoltage(bool &overVoltage);
413
417 sfTkError_t isBusUnderVoltage(bool &underVoltage);
418
422 sfTkError_t isPowerOverLimit(bool &overLimit);
423
427 sfTkError_t isConversionReady(bool &ready);
428
432 sfTkError_t isMemoryValid(bool &valid);
433
434 // ==================== Threshold Registers (0x0C-0x11) ===================
435
439 sfTkError_t setShuntOverVoltageThreshold(int16_t threshold);
440
444 sfTkError_t getShuntOverVoltageThreshold(int16_t &threshold);
445
449 sfTkError_t setShuntUnderVoltageThreshold(int16_t threshold);
450
454 sfTkError_t getShuntUnderVoltageThreshold(int16_t &threshold);
455
459 sfTkError_t setBusOverVoltageThreshold(uint16_t threshold);
460
464 sfTkError_t getBusOverVoltageThreshold(uint16_t &threshold);
465
469 sfTkError_t setBusUnderVoltageThreshold(uint16_t threshold);
470
474 sfTkError_t getBusUnderVoltageThreshold(uint16_t &threshold);
475
479 sfTkError_t setTempLimitThreshold(int16_t threshold);
480
484 sfTkError_t getTempLimitThreshold(int16_t &threshold);
485
489 sfTkError_t setPowerLimitThreshold(uint16_t threshold);
490
494 sfTkError_t getPowerLimitThreshold(uint16_t &threshold);
495
496 protected:
497 sfTkIBus *_theBus;
500 float _shuntRes;
501
506 sfTkError_t readRegister24(uint8_t reg, uint32_t &value);
507
512 sfTkError_t readRegister40(uint8_t reg, uint64_t &value);
513
514 // ===================== Shared Measurement Helpers =======================
515 // The INA228 and INA237 share these measurement bodies. Each helper is templated (or
516 // parameterized) only on what actually differs for that one operation, so the per-device
517 // classes stay thin forwarders that pass their own types and constants. No single bundled
518 // "traits" object is required.
519
523 sfTkError_t calibrateImpl(float shuntResOhms, float maxCurrentA, float calScale,
524 float currentFullScale);
525
527 sfTkError_t powerToWatts(float &watts, float powerLSBScale);
528
531 sfTkError_t dieTemperatureToCelsius(float &celsius, uint8_t shift, float tempLSB);
532
534 sfTkError_t readPowerRaw(uint32_t &value);
535
540 template <typename T, bool Wide>
541 sfTkError_t readSignedMeasurementRaw(uint8_t reg, T &value)
542 {
543 if (_theBus == nullptr)
544 return ksfTkErrBusNotInit;
545
546 if (Wide)
547 {
548 uint32_t raw = 0;
549 sfTkError_t rc = readRegister24(reg, raw);
550 if (rc != ksfTkErrOk)
551 return rc;
552
553 int32_t result = (int32_t)(raw >> 4);
554 if (result & (1L << 19))
555 result |= ~((1L << 20) - 1);
556
557 value = (T)result;
558 return ksfTkErrOk;
559 }
560 else
561 {
562 uint16_t raw = 0;
563 sfTkError_t rc = _theBus->readRegister(reg, raw);
564 value = (T)(int16_t)raw;
565 return rc;
566 }
567 }
568
572 template <typename T, bool Wide>
573 sfTkError_t readUnsignedMeasurementRaw(uint8_t reg, T &value)
574 {
575 if (_theBus == nullptr)
576 return ksfTkErrBusNotInit;
577
578 if (Wide)
579 {
580 uint32_t raw = 0;
581 sfTkError_t rc = readRegister24(reg, raw);
582 if (rc != ksfTkErrOk)
583 return rc;
584
585 value = (T)(raw >> 4);
586 return ksfTkErrOk;
587 }
588 else
589 {
590 uint16_t raw = 0;
591 sfTkError_t rc = _theBus->readRegister(reg, raw);
592 value = (T)raw;
593 return rc;
594 }
595 }
596
598 template <typename T, bool Wide>
599 sfTkError_t shuntVoltageToMilliVolts(float &milliVolts, float lsbDefault, float lsbReduced)
600 {
601 T raw = 0;
602 sfTkError_t rc = readSignedMeasurementRaw<T, Wide>(kRegVShunt, raw);
603 if (rc != ksfTkErrOk)
604 return rc;
605
606 float lsb = _adcRange ? lsbReduced : lsbDefault;
607 milliVolts = (float)raw * lsb * 1000.0f;
608 return ksfTkErrOk;
609 }
610
612 template <typename T, bool Wide>
613 sfTkError_t busVoltageToVolts(float &volts, float busLSB)
614 {
615 T raw = 0;
616 sfTkError_t rc = readUnsignedMeasurementRaw<T, Wide>(kRegVBus, raw);
617 if (rc != ksfTkErrOk)
618 return rc;
619
620 volts = (float)raw * busLSB;
621 return ksfTkErrOk;
622 }
623
625 template <typename T, bool Wide>
626 sfTkError_t currentToAmps(float &amps)
627 {
628 T raw = 0;
629 sfTkError_t rc = readSignedMeasurementRaw<T, Wide>(kRegCurrent, raw);
630 if (rc != ksfTkErrOk)
631 return rc;
632
633 amps = (float)raw * _currentLSB;
634 return ksfTkErrOk;
635 }
636
638 // I2C Addressing
642 static const uint8_t kI2CAddress = 0x40;
643
644 // Register Addresses (shared between INA228 and INA237)
645 static const uint8_t kRegConfig = 0x00;
646 static const uint8_t kRegAdcConfig = 0x01;
647 static const uint8_t kRegShuntCal = 0x02;
648 static const uint8_t kRegShuntTempCo = 0x03;
649 static const uint8_t kRegVShunt = 0x04;
650 static const uint8_t kRegVBus = 0x05;
651 static const uint8_t kRegDieTemp = 0x06;
652 static const uint8_t kRegCurrent = 0x07;
653 static const uint8_t kRegPower = 0x08;
654 static const uint8_t kRegEnergy = 0x09;
655 static const uint8_t kRegCharge = 0x0A;
656 static const uint8_t kRegDiagAlrt = 0x0B;
657 static const uint8_t kRegSOVL = 0x0C;
658 static const uint8_t kRegSUVL = 0x0D;
659 static const uint8_t kRegBOVL = 0x0E;
660 static const uint8_t kRegBUVL = 0x0F;
661 static const uint8_t kRegTempLimit = 0x10;
662 static const uint8_t kRegPowerLimit = 0x11;
663 static const uint8_t kRegManufacturerID = 0x3E;
664 static const uint8_t kRegDeviceID = 0x3F;
665
666 // Field masks
667 static const uint16_t kShuntCalMask = 0x7FFF;
668 static const uint16_t kBusThresholdMask = 0x7FFF;
669 static const uint16_t kShuntTempCoMask = 0x3FFF;
670
671 // Device ID Constants
672 static const uint16_t kINA228DeviceIDValue = 0x2280;
673 static const uint16_t kINA237DeviceIDValue = 0x2370;
674 static const uint16_t kINA238DeviceIDValue = 0x2380;
675 static const uint16_t kDeviceIDMask = 0xFFF0;
676 static const uint16_t kManufacturerIDValue = 0x5449;
677};
678
Platform-independent base driver for the INA228/INA237 power monitor ICs.
Definition: sfDevINA2XX.h:189
sfTkError_t readRegister24(uint8_t reg, uint32_t &value)
Read 3 bytes (24-bit) from a register into a uint32_t.
Definition: sfDevINA2XX.cpp:703
static const uint16_t kShuntCalMask
SHUNT_CAL valid bits [14:0] (bit 15 reserved)
Definition: sfDevINA2XX.h:667
sfTkError_t getAveragingCount(sfe_ina2xx_avg_count_t &count)
Get the current ADC averaging count.
Definition: sfDevINA2XX.cpp:303
static const uint16_t kINA238DeviceIDValue
INA238 device ID (register-compatible with INA237)
Definition: sfDevINA2XX.h:674
sfTkError_t powerToWatts(float &watts, float powerLSBScale)
Shared POWER -> watts conversion. powerLSBScale is 3.2 (INA228) or 0.2 (INA237).
Definition: sfDevINA2XX.cpp:778
sfTkError_t getTempLimitThreshold(int16_t &threshold)
Get the temperature over-limit threshold.
Definition: sfDevINA2XX.cpp:674
sfTkError_t setBusVoltageConvTime(sfe_ina2xx_conv_time_t time)
Set the bus voltage conversion time.
Definition: sfDevINA2XX.cpp:210
sfTkError_t setADCMode(sfe_ina2xx_mode_t mode)
Set the ADC operating mode.
Definition: sfDevINA2XX.cpp:184
static const uint8_t kRegManufacturerID
Manufacturer ID (16-bit, R) – reads 0x5449 ("TI")
Definition: sfDevINA2XX.h:663
sfTkError_t getSlowAlert(bool &enabled)
Get the slow alert enable state.
Definition: sfDevINA2XX.cpp:431
static const uint16_t kDeviceIDMask
Mask for device ID (ignore revision)
Definition: sfDevINA2XX.h:675
static const uint16_t kBusThresholdMask
BOVL/BUVL valid bits [14:0] (bit 15 reserved)
Definition: sfDevINA2XX.h:668
static const uint8_t kRegShuntCal
Shunt Calibration register (16-bit, R/W)
Definition: sfDevINA2XX.h:647
sfTkError_t getBusVoltageConvTime(sfe_ina2xx_conv_time_t &time)
Get the bus voltage conversion time.
Definition: sfDevINA2XX.cpp:225
sfTkError_t isBusUnderVoltage(bool &underVoltage)
Check if the bus undervoltage flag is set.
Definition: sfDevINA2XX.cpp:545
sfTkError_t isTempOverLimit(bool &overLimit)
Check if the temperature over-limit flag is set.
Definition: sfDevINA2XX.cpp:501
sfTkError_t resetAccumulators(void)
Reset the energy and charge accumulators (INA228 RSTACC bit).
Definition: sfDevINA2XX.cpp:80
sfDevINA2XX()
Definition: sfDevINA2XX.h:191
sfTkError_t setShuntVoltageConvTime(sfe_ina2xx_conv_time_t time)
Set the shunt voltage conversion time.
Definition: sfDevINA2XX.cpp:236
sfTkError_t setPowerLimitThreshold(uint16_t threshold)
Set the power over-limit threshold.
Definition: sfDevINA2XX.cpp:685
sfTkError_t setAveragingCount(sfe_ina2xx_avg_count_t count)
Set the ADC averaging count.
Definition: sfDevINA2XX.cpp:288
sfTkError_t setSlowAlert(bool enable)
Enable alert comparison on averaged (vs.
Definition: sfDevINA2XX.cpp:416
sfTkError_t setADCRange(bool reducedRange)
Set the ADC full-scale shunt range.
Definition: sfDevINA2XX.cpp:97
sfTkError_t getDiagnosticFlags(sfe_ina2xx_diag_alrt_reg_t &flags)
Read the full DIAG_ALRT register.
Definition: sfDevINA2XX.cpp:356
bool _adcRange
Cached ADC range: false = +/-163.84mV, true = +/-40.96mV.
Definition: sfDevINA2XX.h:499
sfTkError_t isConversionReady(bool &ready)
Check if a conversion has completed.
Definition: sfDevINA2XX.cpp:567
static const uint8_t kRegAdcConfig
ADC Configuration register (16-bit, R/W)
Definition: sfDevINA2XX.h:646
sfTkError_t busVoltageToVolts(float &volts, float busLSB)
Shared VBUS -> volts conversion.
Definition: sfDevINA2XX.h:613
sfTkError_t getBusOverVoltageThreshold(uint16_t &threshold)
Get the bus overvoltage threshold.
Definition: sfDevINA2XX.cpp:638
static const uint8_t kRegSOVL
Shunt Overvoltage Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:657
sfTkError_t setTempLimitThreshold(int16_t threshold)
Set the temperature over-limit threshold.
Definition: sfDevINA2XX.cpp:666
sfTkError_t setBusUnderVoltageThreshold(uint16_t threshold)
Set the bus undervoltage threshold.
Definition: sfDevINA2XX.cpp:648
sfTkError_t calibrateImpl(float shuntResOhms, float maxCurrentA, float calScale, float currentFullScale)
Shared calibration math; only the two scale constants differ per device.
Definition: sfDevINA2XX.cpp:745
sfTkError_t enableTempCompensation(bool enable)
Enable or disable shunt temperature compensation.
Definition: sfDevINA2XX.cpp:156
sfTkError_t getAlertPolarity(bool &activeHigh)
Get the ALERT pin polarity setting.
Definition: sfDevINA2XX.cpp:457
sfTkError_t setShuntCal(uint16_t calValue)
Write a raw value to the SHUNT_CAL register.
Definition: sfDevINA2XX.cpp:316
sfTkError_t isEnergyOverflow(bool &overflow)
Check if the energy register has overflowed (INA228 only).
Definition: sfDevINA2XX.cpp:468
sfTkError_t isShuntUnderVoltage(bool &underVoltage)
Check if the shunt undervoltage flag is set.
Definition: sfDevINA2XX.cpp:523
static const uint8_t kRegSUVL
Shunt Undervoltage Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:658
static const uint8_t kRegShuntTempCo
Shunt Temperature Coefficient (16-bit, R/W)
Definition: sfDevINA2XX.h:648
static const uint8_t kRegVShunt
Shunt Voltage Measurement (24/16-bit, R)
Definition: sfDevINA2XX.h:649
static const uint8_t kI2CAddress
Default 7-bit I2C address for the SparkFun Qwiic Power Monitor board.
Definition: sfDevINA2XX.h:642
sfTkError_t readUnsignedMeasurementRaw(uint8_t reg, T &value)
Shared raw read for an unsigned measurement register (bus voltage).
Definition: sfDevINA2XX.h:573
sfTkError_t currentToAmps(float &amps)
Shared CURRENT -> amps conversion (scales by the calibrated CURRENT_LSB).
Definition: sfDevINA2XX.h:626
static const uint8_t kRegCurrent
Current Result (24/16-bit, R)
Definition: sfDevINA2XX.h:652
sfTkError_t getConversionReadyAlert(bool &enabled)
Get the conversion ready alert enable state.
Definition: sfDevINA2XX.cpp:405
sfTkError_t getShuntUnderVoltageThreshold(int16_t &threshold)
Get the shunt undervoltage threshold.
Definition: sfDevINA2XX.cpp:618
sfTkError_t isBusOverVoltage(bool &overVoltage)
Check if the bus overvoltage flag is set.
Definition: sfDevINA2XX.cpp:534
static const uint8_t kRegEnergy
Energy Result (40-bit, R) – INA228 only.
Definition: sfDevINA2XX.h:654
static const uint8_t kRegDeviceID
Device ID (16-bit, R)
Definition: sfDevINA2XX.h:664
sfTkError_t getShuntTempCoefficient(uint16_t &ppmPerDegC)
Get the shunt temperature coefficient.
Definition: sfDevINA2XX.cpp:344
sfTkError_t getManufacturerID(uint16_t &id)
Read the Manufacturer ID register (0x3E).
Definition: sfDevINA2XX.cpp:49
sfTkError_t setBusOverVoltageThreshold(uint16_t threshold)
Set the bus overvoltage threshold.
Definition: sfDevINA2XX.cpp:629
sfTkIBus * _theBus
Pointer to the communication bus device.
Definition: sfDevINA2XX.h:497
static const uint8_t kRegTempLimit
Temperature Over-Limit Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:661
static const uint8_t kRegPowerLimit
Power Over-Limit Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:662
sfTkError_t isShuntOverVoltage(bool &overVoltage)
Check if the shunt overvoltage flag is set.
Definition: sfDevINA2XX.cpp:512
sfTkError_t reset(void)
Perform a full system reset via the RST bit in CONFIG.
Definition: sfDevINA2XX.cpp:65
sfTkError_t setShuntUnderVoltageThreshold(int16_t threshold)
Set the shunt undervoltage threshold.
Definition: sfDevINA2XX.cpp:610
sfTkError_t isChargeOverflow(bool &overflow)
Check if the charge register has overflowed (INA228 only).
Definition: sfDevINA2XX.cpp:479
sfTkError_t getShuntVoltageConvTime(sfe_ina2xx_conv_time_t &time)
Get the shunt voltage conversion time.
Definition: sfDevINA2XX.cpp:251
static const uint8_t kRegConfig
Configuration register (16-bit, R/W)
Definition: sfDevINA2XX.h:645
void setCommunicationBus(sfTkIBus *theBus)
Set the communication bus pointer.
Definition: sfDevINA2XX.cpp:44
static const uint8_t kRegDiagAlrt
Diagnostic Flags and Alert (16-bit, R/W)
Definition: sfDevINA2XX.h:656
sfTkError_t getTempCompensation(bool &enabled)
Get the temperature compensation enable state.
Definition: sfDevINA2XX.cpp:171
sfTkError_t getShuntOverVoltageThreshold(int16_t &threshold)
Get the shunt overvoltage threshold.
Definition: sfDevINA2XX.cpp:599
sfTkError_t readPowerRaw(uint32_t &value)
Shared raw POWER read (24-bit, unsigned) — identical on both devices.
Definition: sfDevINA2XX.cpp:808
static const uint8_t kRegCharge
Charge Result (40-bit, R) – INA228 only.
Definition: sfDevINA2XX.h:655
sfTkError_t getShuntCal(uint16_t &calValue)
Read the current SHUNT_CAL register value.
Definition: sfDevINA2XX.cpp:325
sfTkError_t isMemoryValid(bool &valid)
Check the memory checksum status.
Definition: sfDevINA2XX.cpp:578
sfTkError_t readRegister40(uint8_t reg, uint64_t &value)
Read 5 bytes (40-bit) from a register into a uint64_t.
Definition: sfDevINA2XX.cpp:721
sfTkError_t dieTemperatureToCelsius(float &celsius, uint8_t shift, float tempLSB)
Shared DIETEMP -> Celsius conversion.
Definition: sfDevINA2XX.cpp:790
sfTkError_t getBusUnderVoltageThreshold(uint16_t &threshold)
Get the bus undervoltage threshold.
Definition: sfDevINA2XX.cpp:656
sfTkError_t getDeviceID(uint16_t &id)
Read the Device ID register (0x3F).
Definition: sfDevINA2XX.cpp:57
sfTkError_t getADCMode(sfe_ina2xx_mode_t &mode)
Get the current ADC operating mode.
Definition: sfDevINA2XX.cpp:199
static const uint16_t kINA228DeviceIDValue
INA228 device ID (upper 12 bits)
Definition: sfDevINA2XX.h:672
sfTkError_t shuntVoltageToMilliVolts(float &milliVolts, float lsbDefault, float lsbReduced)
Shared VSHUNT -> millivolts conversion (reads raw, then scales by the range LSB).
Definition: sfDevINA2XX.h:599
sfTkError_t setAlertLatch(bool latched)
Enable or disable alert latching.
Definition: sfDevINA2XX.cpp:364
sfTkError_t getConversionDelay(uint8_t &delay2ms)
Get the current conversion delay setting.
Definition: sfDevINA2XX.cpp:145
static const uint8_t kRegBOVL
Bus Overvoltage Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:659
static const uint8_t kRegVBus
Bus Voltage Measurement (24/16-bit, R)
Definition: sfDevINA2XX.h:650
sfTkError_t getADCRange(bool &reducedRange)
Get the current ADC range setting.
Definition: sfDevINA2XX.cpp:116
sfTkError_t getAlertLatch(bool &latched)
Get the alert latch setting.
Definition: sfDevINA2XX.cpp:379
static const uint16_t kManufacturerIDValue
"TI" in ASCII
Definition: sfDevINA2XX.h:676
sfTkError_t getTempConvTime(sfe_ina2xx_conv_time_t &time)
Get the temperature conversion time.
Definition: sfDevINA2XX.cpp:277
sfTkError_t setAlertPolarity(bool activeHigh)
Set the ALERT pin polarity.
Definition: sfDevINA2XX.cpp:442
float _currentLSB
Current measurement LSB in Amps, set during calibration.
Definition: sfDevINA2XX.h:498
static const uint8_t kRegBUVL
Bus Undervoltage Threshold (16-bit, R/W)
Definition: sfDevINA2XX.h:660
float _shuntRes
Shunt resistance in Ohms, stored during calibration.
Definition: sfDevINA2XX.h:500
sfTkError_t setTempConvTime(sfe_ina2xx_conv_time_t time)
Set the temperature conversion time.
Definition: sfDevINA2XX.cpp:262
sfTkError_t readSignedMeasurementRaw(uint8_t reg, T &value)
Shared raw read for a signed measurement register (shunt voltage, current).
Definition: sfDevINA2XX.h:541
sfTkError_t setConversionDelay(uint8_t delay2ms)
Set the initial conversion delay in 2ms steps.
Definition: sfDevINA2XX.cpp:130
static const uint16_t kINA237DeviceIDValue
INA237 device ID (upper 12 bits)
Definition: sfDevINA2XX.h:673
sfTkError_t setShuntOverVoltageThreshold(int16_t threshold)
Set the shunt overvoltage threshold.
Definition: sfDevINA2XX.cpp:591
sfTkError_t setShuntTempCoefficient(uint16_t ppmPerDegC)
Set the shunt temperature coefficient for temperature compensation.
Definition: sfDevINA2XX.cpp:335
static const uint8_t kRegPower
Power Result (24-bit, R)
Definition: sfDevINA2XX.h:653
sfTkError_t setConversionReadyAlert(bool enable)
Enable conversion ready flag on the ALERT pin.
Definition: sfDevINA2XX.cpp:390
static const uint8_t kRegDieTemp
Die Temperature Measurement (16-bit, R)
Definition: sfDevINA2XX.h:651
sfTkError_t isPowerOverLimit(bool &overLimit)
Check if the power over-limit flag is set.
Definition: sfDevINA2XX.cpp:556
sfTkError_t begin(sfTkIBus *theBus=nullptr)
Initialize the device driver with the given bus.
Definition: sfDevINA2XX.cpp:28
sfTkError_t isMathOverflow(bool &overflow)
Check if a math overflow has occurred in current/power calculations.
Definition: sfDevINA2XX.cpp:490
sfTkError_t getPowerLimitThreshold(uint16_t &threshold)
Get the power over-limit threshold.
Definition: sfDevINA2XX.cpp:693
static const uint16_t kShuntTempCoMask
TEMPCO field mask, bits [13:0].
Definition: sfDevINA2XX.h:669
sfe_ina2xx_conv_time_t
Conversion time settings shared by the VBUSCT, VSHCT, and VTCT fields.
Definition: sfDevINA2XX.h:81
@ INA2XX_CONV_84US
84 us
Definition: sfDevINA2XX.h:83
@ INA2XX_CONV_50US
50 us
Definition: sfDevINA2XX.h:82
@ INA2XX_CONV_4120US
4120 us
Definition: sfDevINA2XX.h:89
@ INA2XX_CONV_2074US
2074 us
Definition: sfDevINA2XX.h:88
@ INA2XX_CONV_540US
540 us
Definition: sfDevINA2XX.h:86
@ INA2XX_CONV_280US
280 us
Definition: sfDevINA2XX.h:85
@ INA2XX_CONV_150US
150 us
Definition: sfDevINA2XX.h:84
@ INA2XX_CONV_1052US
1052 us (default)
Definition: sfDevINA2XX.h:87
sfe_ina2xx_mode_t
ADC operating mode settings for the MODE field in ADC_CONFIG (bits [15:12]).
Definition: sfDevINA2XX.h:57
@ INA2XX_MODE_TRIG_ALL
Triggered bus + shunt + temp, single shot.
Definition: sfDevINA2XX.h:65
@ INA2XX_MODE_TRIG_SHUNT
Triggered shunt voltage, single shot.
Definition: sfDevINA2XX.h:60
@ INA2XX_MODE_CONT_TEMP
Continuous temperature only.
Definition: sfDevINA2XX.h:70
@ INA2XX_MODE_CONT_ALL
Continuous bus + shunt + temp (default)
Definition: sfDevINA2XX.h:73
@ INA2XX_MODE_CONT_SHUNT
Continuous shunt voltage only.
Definition: sfDevINA2XX.h:68
@ INA2XX_MODE_TRIG_TEMP_BUS
Triggered temp + bus, single shot.
Definition: sfDevINA2XX.h:63
@ INA2XX_MODE_TRIG_BUS
Triggered bus voltage, single shot.
Definition: sfDevINA2XX.h:59
@ INA2XX_MODE_CONT_TEMP_SHUNT
Continuous temp + shunt.
Definition: sfDevINA2XX.h:72
@ INA2XX_MODE_TRIG_BUS_SHUNT
Triggered bus + shunt, single shot.
Definition: sfDevINA2XX.h:61
@ INA2XX_MODE_CONT_TEMP_BUS
Continuous temp + bus.
Definition: sfDevINA2XX.h:71
@ INA2XX_MODE_SHUTDOWN2
Shutdown (alternate)
Definition: sfDevINA2XX.h:66
@ INA2XX_MODE_CONT_BUS_SHUNT
Continuous bus + shunt.
Definition: sfDevINA2XX.h:69
@ INA2XX_MODE_TRIG_TEMP_SHUNT
Triggered temp + shunt, single shot.
Definition: sfDevINA2XX.h:64
@ INA2XX_MODE_SHUTDOWN
Shutdown.
Definition: sfDevINA2XX.h:58
@ INA2XX_MODE_CONT_BUS
Continuous bus voltage only.
Definition: sfDevINA2XX.h:67
@ INA2XX_MODE_TRIG_TEMP
Triggered temperature, single shot.
Definition: sfDevINA2XX.h:62
sfe_ina2xx_avg_count_t
ADC averaging count settings for the AVG field in ADC_CONFIG (bits [2:0]).
Definition: sfDevINA2XX.h:97
@ INA2XX_AVG_1024
1024 samples
Definition: sfDevINA2XX.h:105
@ INA2XX_AVG_1
1 sample (no averaging, default)
Definition: sfDevINA2XX.h:98
@ INA2XX_AVG_512
512 samples
Definition: sfDevINA2XX.h:104
@ INA2XX_AVG_256
256 samples
Definition: sfDevINA2XX.h:103
@ INA2XX_AVG_16
16 samples
Definition: sfDevINA2XX.h:100
@ INA2XX_AVG_64
64 samples
Definition: sfDevINA2XX.h:101
@ INA2XX_AVG_128
128 samples
Definition: sfDevINA2XX.h:102
@ INA2XX_AVG_4
4 samples
Definition: sfDevINA2XX.h:99
Bitfield union for the 16-bit ADC_CONFIG register (0x01).
Definition: sfDevINA2XX.h:131
uint16_t mode
Operating mode (see sfe_ina2xx_mode_t) [bits 15:12].
Definition: sfDevINA2XX.h:138
uint16_t vshct
Shunt voltage conversion time [bits 8:6].
Definition: sfDevINA2XX.h:136
uint16_t avg
ADC sample averaging count (see sfe_ina2xx_avg_count_t) [bits 2:0].
Definition: sfDevINA2XX.h:134
uint16_t word
Raw register value for I2C read/write.
Definition: sfDevINA2XX.h:140
uint16_t vtct
Temperature conversion time (see sfe_ina2xx_conv_time_t) [bits 5:3].
Definition: sfDevINA2XX.h:135
uint16_t vbusct
Bus voltage conversion time [bits 11:9].
Definition: sfDevINA2XX.h:137
Bitfield union for the 16-bit CONFIG register (0x00).
Definition: sfDevINA2XX.h:113
uint16_t word
Raw register value for I2C read/write.
Definition: sfDevINA2XX.h:123
uint16_t rst
System reset (self-clearing) [bit 15].
Definition: sfDevINA2XX.h:121
uint16_t tempComp
Shunt temperature compensation enable [bit 5].
Definition: sfDevINA2XX.h:118
uint16_t convDly
Initial conversion delay, 2ms steps [bits 13:6].
Definition: sfDevINA2XX.h:119
uint16_t rstAcc
Reset ENERGY/CHARGE accumulators (INA228) [bit 14].
Definition: sfDevINA2XX.h:120
uint16_t adcRange
ADC range: 0 = +/-163.84mV, 1 = +/-40.96mV [bit 4].
Definition: sfDevINA2XX.h:117
Bitfield union for the 16-bit DIAG_ALRT diagnostic flags and alert register (0x0B).
Definition: sfDevINA2XX.h:149
uint16_t mathOF
Math overflow [bit 9].
Definition: sfDevINA2XX.h:161
uint16_t busUL
Bus undervoltage [bit 3].
Definition: sfDevINA2XX.h:155
uint16_t shntOL
Shunt overvoltage [bit 6].
Definition: sfDevINA2XX.h:158
uint16_t slowAlert
Alert on averaged value [bit 13].
Definition: sfDevINA2XX.h:165
uint16_t energyOF
Energy register overflow (INA228 only) [bit 11].
Definition: sfDevINA2XX.h:163
uint16_t apol
Alert polarity (0=active-low, 1=active-high) [bit 12].
Definition: sfDevINA2XX.h:164
uint16_t busOL
Bus overvoltage [bit 4].
Definition: sfDevINA2XX.h:156
uint16_t chargeOF
Charge register overflow (INA228 only) [bit 10].
Definition: sfDevINA2XX.h:162
uint16_t shntUL
Shunt undervoltage [bit 5].
Definition: sfDevINA2XX.h:157
uint16_t word
Raw register value for I2C read/write.
Definition: sfDevINA2XX.h:169
uint16_t memStat
Memory checksum status (1 = OK) [bit 0].
Definition: sfDevINA2XX.h:152
uint16_t pol
Power over-limit [bit 2].
Definition: sfDevINA2XX.h:154
uint16_t tmpOL
Temperature over-limit [bit 7].
Definition: sfDevINA2XX.h:159
uint16_t alatch
Alert latch enable [bit 15].
Definition: sfDevINA2XX.h:167
uint16_t cnvr
Conversion-ready flag on ALERT pin [bit 14].
Definition: sfDevINA2XX.h:166
uint16_t cnvrf
Conversion ready flag [bit 1].
Definition: sfDevINA2XX.h:153