INA226 Library
Dependents: HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN
Diff: INA226.cpp
- Revision:
- 5:76dc889ffe3c
- Parent:
- 4:6e48af29852f
- Child:
- 7:5c1d19898020
diff -r 6e48af29852f -r 76dc889ffe3c INA226.cpp --- a/INA226.cpp Mon Jul 17 09:38:13 2017 +0000 +++ b/INA226.cpp Wed May 02 18:12:21 2018 +0000 @@ -3,8 +3,22 @@ //Serial pc(USBTX, USBRX); //tx, rx -myINA226::myINA226(I2C &i2cBus){ +myINA226::myINA226(I2C &i2cBus,A1 celect_1,A0 celect_0){ i2c = &i2cBus; + + if(celect_1 == A1_GND) _addr_1 = 0b10000000; + else if(celect_1 == A1_VDD) _addr_1 = 0b10000100; + else if(celect_1 == A1_SDA) _addr_1 = 0b10001000; + else if(celect_1 == A1_SCL) _addr_1 = 0b10001100; + + if(celect_0 == A0_GND) _addr_0 = 0b00000000; + else if(celect_0 == A0_VDD) _addr_0 = 0b00000001; + else if(celect_0 == A0_SDA) _addr_0 = 0b00000010; + else if(celect_0 == A0_SCL) _addr_0 = 0b00000011; + + _addr = _addr_1 | _addr_0; + SLV_WRITE_INA = _addr; + SLV_READ_INA = _addr | 1; i2c->frequency(400000); } @@ -27,7 +41,7 @@ cmd[1] = static_cast<char>(val>>8 & 0x00FF); cmd[2] = static_cast<char>(val & 0x00FF); - i2c->write(SLV_WRITE, cmd, 3); + i2c->write(SLV_WRITE_INA, cmd, 3); } /************* @@ -40,19 +54,19 @@ char reg = check_reg; char check[2]; - i2c->write(SLV_WRITE, ®, 1); - i2c->read(SLV_READ, check, 2); + i2c->write(SLV_WRITE_INA, ®, 1); + i2c->read(SLV_READ_INA, check, 2); if(check[0] == 0x54 && check[1] == 0x49){return 0;} else{return 1;} } /************* -0x01か,0x02の値、またはその両方の値を +シャント抵抗の電圧か,印加電圧の値、またはその両方の値を 取得するかどうかを決める i=0のとき、両方の値を取得 -i=1のとき、0x02のみ取得 -i=2のとき、0x01のみ取得 -印加電圧は0x02に入っているので基本的にはi=1 +i=1のとき、印加電圧のみ取得 +i=2のとき、シャント抵抗の電圧のみ取得 +印加電圧が測りたい電圧なので基本的にはi=1 デフォルトでは、両方の値を取得できるようになっている *************/ void myINA226::setup(int i) @@ -64,13 +78,13 @@ for(j=0;j<3;j++){cmd[j][0]=reg; cmd[j][1]=0x41;} cmd[0][2]=0xFF;cmd[1][2]=0xFE;cmd[2][2]=0xFD; - i2c->write(SLV_WRITE, cmd[i], 3); + i2c->write(SLV_WRITE_INA, cmd[i], 3); } /******************* INA226で測定したいだろう電圧と電流の値を まとめて取得する -もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら -事前に設定しておかなければならない +もしsetupでi=2、つまりシャント抵抗の電圧の値だけを取得するようにしていたら +事前にi=0 or 1に設定しておかなければならない @example @@ -87,9 +101,9 @@ //setup(0); - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; @@ -99,9 +113,9 @@ reg = current_reg; - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; @@ -110,9 +124,9 @@ *current = *current;//1.25; } /************** -0x01の値を取得 -もしsetupでi=1、つまり0x02の値だけを取得するようにしていたら -事前に設定しておかなければならない +シャント抵抗の電圧の値を取得 +もしsetupでi=1、つまり印加電圧の値だけを取得するようにしていたら +事前にi=0 or 2に設定しておかなければならない @example @@ -130,9 +144,9 @@ //setup(2); - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; @@ -143,13 +157,13 @@ return V_shunt; } /************** -0x01の値を取得 -もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら -事前に設定しておかなければならない +印加電圧の値を取得 +もしsetupでi=2、つまりシャント抵抗の電圧にの値だけを取得するようにしていたら +事前i=0 or 1に設定しておかなければならない @example - float V_bus; + float V_bus; myINA226.setup(0) or myINA226.setup(1); V_bus = myINA226.get_Bus_voltage(); @@ -163,9 +177,9 @@ //setup(1); - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; @@ -194,9 +208,9 @@ unsigned int val[2]; float current; - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; @@ -224,9 +238,9 @@ unsigned int val[2]; float power; - i2c->write(SLV_WRITE, ®, 1); + i2c->write(SLV_WRITE_INA, ®, 1); wait_ms(10); - i2c->read(SLV_READ, buff, 2, false); + i2c->read(SLV_READ_INA, buff, 2, false); val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1];