INA226 Library
Dependents: HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN
Diff: INA226.h
- Revision:
- 6:4aa455bab63f
- Parent:
- 3:ea79e6a72ec3
- Child:
- 7:5c1d19898020
diff -r 6e48af29852f -r 4aa455bab63f INA226.h --- a/INA226.h Mon Jul 17 09:38:13 2017 +0000 +++ b/INA226.h Wed May 02 18:22:21 2018 +0000 @@ -1,9 +1,6 @@ #ifndef INA226 #define INA226 -#define SLV_WRITE 0b10001000 -#define SLV_READ 0b10001001 - #define check_reg 0xFE #define Ctrl_reg 0x00 #define V_shunt_reg 0x01 @@ -25,29 +22,142 @@ { public: + typedef enum A1{ + A1_GND = 0, + A1_VDD = 1, + A1_SDA = 2, + A1_SCL = 3 + } A1; + + typedef enum A0{ + A0_GND = 0, + A0_VDD = 1, + A0_SDA = 2, + A0_SCL = 3 + } A0; + + /*********************************************************************** + A1,A0はそれぞれはんだでジャンパして選択します + このA1,A0の組み合わせでスレーブアドレスを決定します + + @example + A1:GND,A0:GND → SLAVE_ADDR:0b10000000 + ***********************************************************************/ - myINA226(I2C &i2cBus); + myINA226(I2C &i2cBus,A1 celect_1 = A1_GND, A0 celect_0 = A0_GND); + /*********************************************************************** + 第一、第二引数がないとスレーブアドレスが0b10000000になるようになっている + + ***********************************************************************/ void set_callibretion(unsigned int val = 0x0AAA); + /*********************************************************************** + 電流を取得したいときに必要 + これをセットしないと電流は取れない + + @example + + float current; + + myINA226.set_callibretion(); + current = myINA226.get_current(); + ***********************************************************************/ int Connection_check(); + /*********************************************************************** + INA226の接続確認 + 0が返ってくればOK + 1が返ってくればError + ***********************************************************************/ void setup(int i); + /*********************************************************************** + シャント抵抗の電圧(よくわかんない)か,測りたい電圧の値、またはその両方の値を + 取得するかどうかを決める + i=0のとき、両方の値を取得 + i=1のとき、測りたい方の電圧のみ取得 + i=2のとき、シャント抵抗の電圧のみ取得 + 印加電圧は測りたい方の電圧なので基本的にはi=1 + デフォルトでは、両方の値を取得できるようになっている + ***********************************************************************/ void get_Voltage_current(float *V_bus, float *current); + /*********************************************************************** + INA226で測定したいだろう電圧と電流の値を + まとめて取得する + もしsetupでi=2、つまりシャント抵抗の電圧の値だけを取得するようにしていたら + 事前にi=0 or 1に設定しておかなければならない + + @example + + float V_bus,current; + + myINA226.setup(0) or myINA226.setup(1); + myINA226.get_Voltage_current(&V_bus,¤t); + ***********************************************************************/ float get_Shunt_voltage(); + /*********************************************************************** + シャント抵抗の電圧の値を取得 + もしsetupでi=1、つまり印加電圧の値だけを取得するようにしていたら + 事前にi=0 or 2に設定しておかなければならない + + @example + + float V_shunt; + + myINA226.setup(0) or myINA226.setup(2); + V_shunt = myINA226.get_Shunt_voltage(); + ***********************************************************************/ float get_Bus_voltage(); + /*********************************************************************** + 印加電圧の値を取得 + もしsetupでi=2、つまりシャント抵抗の電圧の値だけを取得するようにしていたら + 事前にi=0 or 1に設定しておかなければならない + + @example + + float V_bus; + + myINA226.setup(0) or myINA226.setup(1); + V_bus = myINA226.get_Bus_voltage(); + ***********************************************************************/ float get_current(); + /*********************************************************************** + 電流の値を取得 + 事前にset_callibretionをセットしておかないと + 0しか返ってこない + @example + + float current; + + myINA226.set_callibretion(); + current = myINA226.get_current(); + ***********************************************************************/ float get_power(); + /*********************************************************************** + 電力の値を取得 + 事前にset_callibretionをセットしておかないと + 0しか返ってこない + + @example + + float power; + + myINA226.set_callibretion(); + power = myINA226.get_power(); + ***********************************************************************/ private: I2C *i2c; + char _addr_1,_addr_0,_addr; + char SLV_WRITE_INA; + char SLV_READ_INA; float vlotage,current; unsigned int val[4]; char *cal,buff[4],reg,check[2];