INA226 (Texas Instruments) High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface
INA226.h@0:d17469a618b3, 2015-05-05 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue May 05 07:54:46 2015 +0000
- Revision:
- 0:d17469a618b3
- Child:
- 2:b1e759cb121e
INA226 (Texas Instruments) High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:d17469a618b3 | 1 | /* |
kenjiArai | 0:d17469a618b3 | 2 | * mbed library program |
kenjiArai | 0:d17469a618b3 | 3 | * INA226 High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface |
kenjiArai | 0:d17469a618b3 | 4 | * by Texas Instruments |
kenjiArai | 0:d17469a618b3 | 5 | * |
kenjiArai | 0:d17469a618b3 | 6 | * Copyright (c) 2015 Kenji Arai / JH1PJL |
kenjiArai | 0:d17469a618b3 | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:d17469a618b3 | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:d17469a618b3 | 9 | * Created: January 25th, 2015 |
kenjiArai | 0:d17469a618b3 | 10 | * Revised: May 5th, 2015 |
kenjiArai | 0:d17469a618b3 | 11 | * |
kenjiArai | 0:d17469a618b3 | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 0:d17469a618b3 | 13 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 0:d17469a618b3 | 14 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:d17469a618b3 | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 0:d17469a618b3 | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:d17469a618b3 | 17 | */ |
kenjiArai | 0:d17469a618b3 | 18 | /* |
kenjiArai | 0:d17469a618b3 | 19 | *---------------- REFERENCE ---------------------------------------------------------------------- |
kenjiArai | 0:d17469a618b3 | 20 | * Original Information |
kenjiArai | 0:d17469a618b3 | 21 | * http://www.ti.com/product/INA226/description |
kenjiArai | 0:d17469a618b3 | 22 | * http://www.ti.com/lit/ds/symlink/ina226.pdf |
kenjiArai | 0:d17469a618b3 | 23 | * Device kit |
kenjiArai | 0:d17469a618b3 | 24 | * http://strawberry-linux.com/catalog/items?code=12031 |
kenjiArai | 0:d17469a618b3 | 25 | * http://strawberry-linux.com/catalog/items?code=12226 |
kenjiArai | 0:d17469a618b3 | 26 | */ |
kenjiArai | 0:d17469a618b3 | 27 | |
kenjiArai | 0:d17469a618b3 | 28 | #ifndef MBED_INA226 |
kenjiArai | 0:d17469a618b3 | 29 | #define MBED_INA226 |
kenjiArai | 0:d17469a618b3 | 30 | |
kenjiArai | 0:d17469a618b3 | 31 | /////////// ADDRESS ///////////////////////////// |
kenjiArai | 0:d17469a618b3 | 32 | // 7bit address = 0b1000000(0x40) |
kenjiArai | 0:d17469a618b3 | 33 | // G=GND, V=VS+, A=SDA, L=SCL |
kenjiArai | 0:d17469a618b3 | 34 | // e.g. _VG: A1=VS+, A0=GND |
kenjiArai | 0:d17469a618b3 | 35 | // -> Please make sure your H/W configuration |
kenjiArai | 0:d17469a618b3 | 36 | // Set data into "addr" |
kenjiArai | 0:d17469a618b3 | 37 | #define INA226_ADDR_GG (0x40 << 1) |
kenjiArai | 0:d17469a618b3 | 38 | #define INA226_ADDR_GV (0x41 << 1) |
kenjiArai | 0:d17469a618b3 | 39 | #define INA226_ADDR_GA (0x42 << 1) |
kenjiArai | 0:d17469a618b3 | 40 | #define INA226_ADDR_GL (0x43 << 1) |
kenjiArai | 0:d17469a618b3 | 41 | #define INA226_ADDR_VG (0x44 << 1) |
kenjiArai | 0:d17469a618b3 | 42 | #define INA226_ADDR_VV (0x45 << 1) |
kenjiArai | 0:d17469a618b3 | 43 | #define INA226_ADDR_VA (0x46 << 1) |
kenjiArai | 0:d17469a618b3 | 44 | #define INA226_ADDR_VL (0x47 << 1) |
kenjiArai | 0:d17469a618b3 | 45 | #define INA226_ADDR_AG (0x48 << 1) |
kenjiArai | 0:d17469a618b3 | 46 | #define INA226_ADDR_AV (0x49 << 1) |
kenjiArai | 0:d17469a618b3 | 47 | #define INA226_ADDR_AA (0x4a << 1) |
kenjiArai | 0:d17469a618b3 | 48 | #define INA226_ADDR_AL (0x4b << 1) |
kenjiArai | 0:d17469a618b3 | 49 | #define INA226_ADDR_LG (0x4c << 1) |
kenjiArai | 0:d17469a618b3 | 50 | #define INA226_ADDR_LV (0x4d << 1) |
kenjiArai | 0:d17469a618b3 | 51 | #define INA226_ADDR_LA (0x4e << 1) |
kenjiArai | 0:d17469a618b3 | 52 | #define INA226_ADDR_LL (0x4f << 1) |
kenjiArai | 0:d17469a618b3 | 53 | |
kenjiArai | 0:d17469a618b3 | 54 | /////////// REGISTER DEFINITION ///////////////// |
kenjiArai | 0:d17469a618b3 | 55 | #define INA226_CONFIG 0x00 |
kenjiArai | 0:d17469a618b3 | 56 | #define INA226_SHUNT_V 0x01 |
kenjiArai | 0:d17469a618b3 | 57 | #define INA226_BUS_VOLT 0x02 |
kenjiArai | 0:d17469a618b3 | 58 | #define INA226_POWER 0x03 |
kenjiArai | 0:d17469a618b3 | 59 | #define INA226_CURRENT 0x04 |
kenjiArai | 0:d17469a618b3 | 60 | #define INA226_CALBLATION 0x05 |
kenjiArai | 0:d17469a618b3 | 61 | #define INA226_MASK_EN 0x06 |
kenjiArai | 0:d17469a618b3 | 62 | #define INA226_ALERT_LMT 0x07 |
kenjiArai | 0:d17469a618b3 | 63 | #define INA226_DIE_ID 0xff |
kenjiArai | 0:d17469a618b3 | 64 | |
kenjiArai | 0:d17469a618b3 | 65 | /////////// PARAMETER SETTING for Configuration Reg. ////////////////////////// |
kenjiArai | 0:d17469a618b3 | 66 | // Set data into "shunt_register" |
kenjiArai | 0:d17469a618b3 | 67 | #define INA226_PAR_R_2MORM 2 // Strawberry Linux borad |
kenjiArai | 0:d17469a618b3 | 68 | #define INA226_PAR_R_25MOHM 25 |
kenjiArai | 0:d17469a618b3 | 69 | #define INA226_PAR_R_MORM(x) (x) |
kenjiArai | 0:d17469a618b3 | 70 | // Set data into "average", Averaging Mode |
kenjiArai | 0:d17469a618b3 | 71 | #define INA226_PAR_A_1 0 // Default |
kenjiArai | 0:d17469a618b3 | 72 | #define INA226_PAR_A_4 1 |
kenjiArai | 0:d17469a618b3 | 73 | #define INA226_PAR_A_16 2 |
kenjiArai | 0:d17469a618b3 | 74 | #define INA226_PAR_A_64 3 |
kenjiArai | 0:d17469a618b3 | 75 | #define INA226_PAR_A_128 4 |
kenjiArai | 0:d17469a618b3 | 76 | #define INA226_PAR_A_256 5 |
kenjiArai | 0:d17469a618b3 | 77 | #define INA226_PAR_A_512 6 |
kenjiArai | 0:d17469a618b3 | 78 | #define INA226_PAR_A_1024 7 |
kenjiArai | 0:d17469a618b3 | 79 | // Set data into "b_volt_cnv_time" Bus Voltage Conversion Time |
kenjiArai | 0:d17469a618b3 | 80 | #define INA226_CFG_BUS_V_TR140 0 |
kenjiArai | 0:d17469a618b3 | 81 | #define INA226_CFG_BUS_V_TR204 1 |
kenjiArai | 0:d17469a618b3 | 82 | #define INA226_CFG_BUS_V_TR332 2 |
kenjiArai | 0:d17469a618b3 | 83 | #define INA226_CFG_BUS_V_TR588 3 |
kenjiArai | 0:d17469a618b3 | 84 | #define INA226_CFG_BUS_V_T1R1 4 // Default |
kenjiArai | 0:d17469a618b3 | 85 | #define INA226_CFG_BUS_V_T2R116 5 |
kenjiArai | 0:d17469a618b3 | 86 | #define INA226_CFG_BUS_V_T4R156 6 |
kenjiArai | 0:d17469a618b3 | 87 | #define INA226_CFG_BUS_V_T8R244 7 |
kenjiArai | 0:d17469a618b3 | 88 | // Set data into "s_volt_cnv_time", Shunt Voltage Conversion Time |
kenjiArai | 0:d17469a618b3 | 89 | #define INA226_CFG_SHT_V_TR140 0 |
kenjiArai | 0:d17469a618b3 | 90 | #define INA226_CFG_SHT_V_TR204 1 |
kenjiArai | 0:d17469a618b3 | 91 | #define INA226_CFG_SHT_V_TR332 2 |
kenjiArai | 0:d17469a618b3 | 92 | #define INA226_CFG_SHT_V_TR588 3 |
kenjiArai | 0:d17469a618b3 | 93 | #define INA226_CFG_SHT_V_T1R1 4 // Default |
kenjiArai | 0:d17469a618b3 | 94 | #define INA226_CFG_SHT_V_T2R116 5 |
kenjiArai | 0:d17469a618b3 | 95 | #define INA226_CFG_SHT_V_T4R156 6 |
kenjiArai | 0:d17469a618b3 | 96 | #define INA226_CFG_SHT_V_T8R244 7 |
kenjiArai | 0:d17469a618b3 | 97 | // Set data into "mode", Operating Mode |
kenjiArai | 0:d17469a618b3 | 98 | #define INA226_PAR_M_PDWN 0 |
kenjiArai | 0:d17469a618b3 | 99 | #define INA226_PAR_M_SHNT_TRG 1 |
kenjiArai | 0:d17469a618b3 | 100 | #define INA226_PAR_M_BUS_TRG 2 |
kenjiArai | 0:d17469a618b3 | 101 | #define INA226_PAR_M_SHNTBUS_TRG 3 |
kenjiArai | 0:d17469a618b3 | 102 | #define INA226_PAR_M_ADC_OFF 4 |
kenjiArai | 0:d17469a618b3 | 103 | #define INA226_PAR_M_SHNT_CONT 5 |
kenjiArai | 0:d17469a618b3 | 104 | #define INA226_PAR_M_BUS_CONT 6 |
kenjiArai | 0:d17469a618b3 | 105 | #define INA226_PAR_M_SHNTBUS_CONT 7 // Default |
kenjiArai | 0:d17469a618b3 | 106 | |
kenjiArai | 0:d17469a618b3 | 107 | ////////////// DATA TYPE DEFINITION /////////////////////// |
kenjiArai | 0:d17469a618b3 | 108 | typedef struct { |
kenjiArai | 0:d17469a618b3 | 109 | uint8_t addr; |
kenjiArai | 0:d17469a618b3 | 110 | uint8_t shunt_register; |
kenjiArai | 0:d17469a618b3 | 111 | uint8_t average; |
kenjiArai | 0:d17469a618b3 | 112 | uint8_t b_volt_cnv_time; |
kenjiArai | 0:d17469a618b3 | 113 | uint8_t s_volt_cnv_time; |
kenjiArai | 0:d17469a618b3 | 114 | uint8_t mode; |
kenjiArai | 0:d17469a618b3 | 115 | uint16_t calibration_data; |
kenjiArai | 0:d17469a618b3 | 116 | } INA226_TypeDef; |
kenjiArai | 0:d17469a618b3 | 117 | |
kenjiArai | 0:d17469a618b3 | 118 | ////////////// DEFAULT SETTING //////////////////////////// |
kenjiArai | 0:d17469a618b3 | 119 | // Standard parameter for easy set-up |
kenjiArai | 0:d17469a618b3 | 120 | const INA226_TypeDef ina226_std_paramtr = { |
kenjiArai | 0:d17469a618b3 | 121 | // I2C Address |
kenjiArai | 0:d17469a618b3 | 122 | INA226_ADDR_GG, |
kenjiArai | 0:d17469a618b3 | 123 | // CONFIG REG |
kenjiArai | 0:d17469a618b3 | 124 | INA226_PAR_R_2MORM, // 2 milli-ohm |
kenjiArai | 0:d17469a618b3 | 125 | INA226_PAR_A_1, // Averaging Mode |
kenjiArai | 0:d17469a618b3 | 126 | INA226_CFG_BUS_V_T1R1, |
kenjiArai | 0:d17469a618b3 | 127 | INA226_CFG_SHT_V_T1R1, |
kenjiArai | 0:d17469a618b3 | 128 | INA226_PAR_M_SHNTBUS_CONT, |
kenjiArai | 0:d17469a618b3 | 129 | // CALBLATION REG |
kenjiArai | 0:d17469a618b3 | 130 | 2560 |
kenjiArai | 0:d17469a618b3 | 131 | }; |
kenjiArai | 0:d17469a618b3 | 132 | |
kenjiArai | 0:d17469a618b3 | 133 | /** INA226 High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface |
kenjiArai | 0:d17469a618b3 | 134 | * |
kenjiArai | 0:d17469a618b3 | 135 | * @code |
kenjiArai | 0:d17469a618b3 | 136 | * //--------- Default setting ----------------- |
kenjiArai | 0:d17469a618b3 | 137 | * #include "mbed.h" |
kenjiArai | 0:d17469a618b3 | 138 | * #include "INA226.h" |
kenjiArai | 0:d17469a618b3 | 139 | * |
kenjiArai | 0:d17469a618b3 | 140 | * // I2C Communication |
kenjiArai | 0:d17469a618b3 | 141 | * INA226 current(dp5, dp27, INA226_ADDR_GG); |
kenjiArai | 0:d17469a618b3 | 142 | * // If you connected I2C line not only this device but also other devices, |
kenjiArai | 0:d17469a618b3 | 143 | * // you need to declare following method. |
kenjiArai | 0:d17469a618b3 | 144 | * I2C i2c(dp5, dp27); |
kenjiArai | 0:d17469a618b3 | 145 | * INA226 current(I2C& p_i2c, INA226_ADDR_GG); |
kenjiArai | 0:d17469a618b3 | 146 | * |
kenjiArai | 0:d17469a618b3 | 147 | * int main() { |
kenjiArai | 0:d17469a618b3 | 148 | * while(1){ |
kenjiArai | 0:d17469a618b3 | 149 | * printf("I=%+6.3f [A]\r\n", current.read_current()); |
kenjiArai | 0:d17469a618b3 | 150 | * wait(1.0): |
kenjiArai | 0:d17469a618b3 | 151 | * } |
kenjiArai | 0:d17469a618b3 | 152 | * } |
kenjiArai | 0:d17469a618b3 | 153 | * //--------- Detail setting ----------------- |
kenjiArai | 0:d17469a618b3 | 154 | * #include "mbed.h" |
kenjiArai | 0:d17469a618b3 | 155 | * #include "INA226.h" |
kenjiArai | 0:d17469a618b3 | 156 | * |
kenjiArai | 0:d17469a618b3 | 157 | * const INA226_TypeDef ina226_my_paramtr = { |
kenjiArai | 0:d17469a618b3 | 158 | * // I2C Address |
kenjiArai | 0:d17469a618b3 | 159 | * INA226_ADDR_GG, |
kenjiArai | 0:d17469a618b3 | 160 | * // CONFIG REG |
kenjiArai | 0:d17469a618b3 | 161 | * INA226_PAR_R_100MOHM, // 100 milli-ohm |
kenjiArai | 0:d17469a618b3 | 162 | * INA226_CFG_B16V, // 16V max |
kenjiArai | 0:d17469a618b3 | 163 | * INA226_PAR_G_40MV, // Gain x1 |
kenjiArai | 0:d17469a618b3 | 164 | * INA226_PAR_M_SHNTBUS_CONT,// Measure continuously |
kenjiArai | 0:d17469a618b3 | 165 | * // CALBLATION REG |
kenjiArai | 0:d17469a618b3 | 166 | * 2560 // Calibration data |
kenjiArai | 0:d17469a618b3 | 167 | * }; |
kenjiArai | 0:d17469a618b3 | 168 | * |
kenjiArai | 0:d17469a618b3 | 169 | * I2C i2c(dp5,dp27); |
kenjiArai | 0:d17469a618b3 | 170 | * INA226 current(I2C& p_i2c, &ina226_my_paramtr); |
kenjiArai | 0:d17469a618b3 | 171 | * |
kenjiArai | 0:d17469a618b3 | 172 | * int main() { |
kenjiArai | 0:d17469a618b3 | 173 | * while(1){ |
kenjiArai | 0:d17469a618b3 | 174 | * printf("I=%+6.3f [A]\r\n", current.read_current()); |
kenjiArai | 0:d17469a618b3 | 175 | * wait(1.0): |
kenjiArai | 0:d17469a618b3 | 176 | * } |
kenjiArai | 0:d17469a618b3 | 177 | * } |
kenjiArai | 0:d17469a618b3 | 178 | * @endcode |
kenjiArai | 0:d17469a618b3 | 179 | */ |
kenjiArai | 0:d17469a618b3 | 180 | |
kenjiArai | 0:d17469a618b3 | 181 | class INA226 |
kenjiArai | 0:d17469a618b3 | 182 | { |
kenjiArai | 0:d17469a618b3 | 183 | public: |
kenjiArai | 0:d17469a618b3 | 184 | /** Configure data pin |
kenjiArai | 0:d17469a618b3 | 185 | * @param data SDA and SCL pins |
kenjiArai | 0:d17469a618b3 | 186 | * @param parameter address chip (INA226_TypeDef) |
kenjiArai | 0:d17469a618b3 | 187 | * @param or just set address or just port |
kenjiArai | 0:d17469a618b3 | 188 | */ |
kenjiArai | 0:d17469a618b3 | 189 | INA226(PinName p_sda, PinName p_scl, const INA226_TypeDef *ina226_parameter); |
kenjiArai | 0:d17469a618b3 | 190 | INA226(PinName p_sda, PinName p_scl, uint8_t addr); |
kenjiArai | 0:d17469a618b3 | 191 | INA226(PinName p_sda, PinName p_scl); |
kenjiArai | 0:d17469a618b3 | 192 | |
kenjiArai | 0:d17469a618b3 | 193 | /** Configure data pin (with other devices on I2C line) |
kenjiArai | 0:d17469a618b3 | 194 | * @param I2C previous definition |
kenjiArai | 0:d17469a618b3 | 195 | * @param parameter address chip (INA226_TypeDef) |
kenjiArai | 0:d17469a618b3 | 196 | * @param or just set address or just port |
kenjiArai | 0:d17469a618b3 | 197 | */ |
kenjiArai | 0:d17469a618b3 | 198 | INA226(I2C& p_i2c, const INA226_TypeDef *ina226_parameter); |
kenjiArai | 0:d17469a618b3 | 199 | INA226(I2C& p_i2c, uint8_t addr); |
kenjiArai | 0:d17469a618b3 | 200 | INA226(I2C& p_i2c); |
kenjiArai | 0:d17469a618b3 | 201 | |
kenjiArai | 0:d17469a618b3 | 202 | /** Read Current data |
kenjiArai | 0:d17469a618b3 | 203 | * @param none |
kenjiArai | 0:d17469a618b3 | 204 | * @return current [mA] |
kenjiArai | 0:d17469a618b3 | 205 | */ |
kenjiArai | 0:d17469a618b3 | 206 | float read_current(void); |
kenjiArai | 0:d17469a618b3 | 207 | float read_current_by_shuntvolt(void); |
kenjiArai | 0:d17469a618b3 | 208 | |
kenjiArai | 0:d17469a618b3 | 209 | /** Read Power data |
kenjiArai | 0:d17469a618b3 | 210 | * @param none |
kenjiArai | 0:d17469a618b3 | 211 | * @return power [w] |
kenjiArai | 0:d17469a618b3 | 212 | */ |
kenjiArai | 0:d17469a618b3 | 213 | float read_power(void); |
kenjiArai | 0:d17469a618b3 | 214 | |
kenjiArai | 0:d17469a618b3 | 215 | /** Read Bus voltage |
kenjiArai | 0:d17469a618b3 | 216 | * @param none |
kenjiArai | 0:d17469a618b3 | 217 | * @return voltage [v] |
kenjiArai | 0:d17469a618b3 | 218 | */ |
kenjiArai | 0:d17469a618b3 | 219 | float read_bus_voltage(void); |
kenjiArai | 0:d17469a618b3 | 220 | |
kenjiArai | 0:d17469a618b3 | 221 | /** Read Shunt voltage data |
kenjiArai | 0:d17469a618b3 | 222 | * @param none |
kenjiArai | 0:d17469a618b3 | 223 | * @return voltage [v] |
kenjiArai | 0:d17469a618b3 | 224 | */ |
kenjiArai | 0:d17469a618b3 | 225 | float read_shunt_voltage(void); |
kenjiArai | 0:d17469a618b3 | 226 | |
kenjiArai | 0:d17469a618b3 | 227 | /** Read configration reg. |
kenjiArai | 0:d17469a618b3 | 228 | * @param none |
kenjiArai | 0:d17469a618b3 | 229 | * @return configrartion register value |
kenjiArai | 0:d17469a618b3 | 230 | */ |
kenjiArai | 0:d17469a618b3 | 231 | uint16_t read_config(void); |
kenjiArai | 0:d17469a618b3 | 232 | |
kenjiArai | 0:d17469a618b3 | 233 | /** Set configration reg. |
kenjiArai | 0:d17469a618b3 | 234 | * @param configuration data |
kenjiArai | 0:d17469a618b3 | 235 | * @return configrartion register value |
kenjiArai | 0:d17469a618b3 | 236 | */ |
kenjiArai | 0:d17469a618b3 | 237 | uint16_t set_config(uint16_t cfg); |
kenjiArai | 0:d17469a618b3 | 238 | |
kenjiArai | 0:d17469a618b3 | 239 | /** Read calibration reg. |
kenjiArai | 0:d17469a618b3 | 240 | * @param none |
kenjiArai | 0:d17469a618b3 | 241 | * @return calibration register value |
kenjiArai | 0:d17469a618b3 | 242 | */ |
kenjiArai | 0:d17469a618b3 | 243 | uint16_t read_calb(void); |
kenjiArai | 0:d17469a618b3 | 244 | |
kenjiArai | 0:d17469a618b3 | 245 | /** Set calibration reg. |
kenjiArai | 0:d17469a618b3 | 246 | * @param calibration data |
kenjiArai | 0:d17469a618b3 | 247 | * @return calibration register value |
kenjiArai | 0:d17469a618b3 | 248 | */ |
kenjiArai | 0:d17469a618b3 | 249 | uint16_t set_calb(uint16_t clb); |
kenjiArai | 0:d17469a618b3 | 250 | |
kenjiArai | 0:d17469a618b3 | 251 | /** Read Mask/Enable reg. |
kenjiArai | 0:d17469a618b3 | 252 | * @param none |
kenjiArai | 0:d17469a618b3 | 253 | * @return calibration register value |
kenjiArai | 0:d17469a618b3 | 254 | */ |
kenjiArai | 0:d17469a618b3 | 255 | uint16_t read_msk_enbl(void); |
kenjiArai | 0:d17469a618b3 | 256 | |
kenjiArai | 0:d17469a618b3 | 257 | /** Set Mask/Enable reg. |
kenjiArai | 0:d17469a618b3 | 258 | * @param mask enable data |
kenjiArai | 0:d17469a618b3 | 259 | * @return calibration register value |
kenjiArai | 0:d17469a618b3 | 260 | */ |
kenjiArai | 0:d17469a618b3 | 261 | uint16_t set_msk_enbl(uint16_t clb); |
kenjiArai | 0:d17469a618b3 | 262 | |
kenjiArai | 0:d17469a618b3 | 263 | /** Read ID |
kenjiArai | 0:d17469a618b3 | 264 | * @param none |
kenjiArai | 0:d17469a618b3 | 265 | * @return ID |
kenjiArai | 0:d17469a618b3 | 266 | */ |
kenjiArai | 0:d17469a618b3 | 267 | uint8_t read_ID(); |
kenjiArai | 0:d17469a618b3 | 268 | |
kenjiArai | 0:d17469a618b3 | 269 | /** Set I2C clock frequency |
kenjiArai | 0:d17469a618b3 | 270 | * @param freq. |
kenjiArai | 0:d17469a618b3 | 271 | * @return none |
kenjiArai | 0:d17469a618b3 | 272 | */ |
kenjiArai | 0:d17469a618b3 | 273 | void frequency(int hz); |
kenjiArai | 0:d17469a618b3 | 274 | |
kenjiArai | 0:d17469a618b3 | 275 | /** Read register (general purpose) |
kenjiArai | 0:d17469a618b3 | 276 | * @param register's address |
kenjiArai | 0:d17469a618b3 | 277 | * @return register data |
kenjiArai | 0:d17469a618b3 | 278 | */ |
kenjiArai | 0:d17469a618b3 | 279 | uint8_t read_reg(uint8_t addr); |
kenjiArai | 0:d17469a618b3 | 280 | |
kenjiArai | 0:d17469a618b3 | 281 | /** Write register (general purpose) |
kenjiArai | 0:d17469a618b3 | 282 | * @param register's address |
kenjiArai | 0:d17469a618b3 | 283 | * @param data |
kenjiArai | 0:d17469a618b3 | 284 | * @return register data |
kenjiArai | 0:d17469a618b3 | 285 | */ |
kenjiArai | 0:d17469a618b3 | 286 | uint8_t write_reg(uint8_t addr, uint8_t data); |
kenjiArai | 0:d17469a618b3 | 287 | |
kenjiArai | 0:d17469a618b3 | 288 | protected: |
kenjiArai | 0:d17469a618b3 | 289 | I2C _i2c; |
kenjiArai | 0:d17469a618b3 | 290 | |
kenjiArai | 0:d17469a618b3 | 291 | void initialize(void); |
kenjiArai | 0:d17469a618b3 | 292 | |
kenjiArai | 0:d17469a618b3 | 293 | private: |
kenjiArai | 0:d17469a618b3 | 294 | uint8_t id_number; |
kenjiArai | 0:d17469a618b3 | 295 | INA226_TypeDef ina226_set_data; |
kenjiArai | 0:d17469a618b3 | 296 | int32_t scale_factor; |
kenjiArai | 0:d17469a618b3 | 297 | uint8_t dt[4]; |
kenjiArai | 0:d17469a618b3 | 298 | }; |
kenjiArai | 0:d17469a618b3 | 299 | |
kenjiArai | 0:d17469a618b3 | 300 | #endif // MBED_INA226 |