INA226 Library

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN

Revision:
1:9c367d227582
Parent:
0:ad712ebc38d6
Child:
2:eccb118370eb
--- a/INA226.cpp	Mon Jul 10 10:50:39 2017 +0000
+++ b/INA226.cpp	Tue Jul 11 05:16:45 2017 +0000
@@ -8,7 +8,17 @@
     i2c->frequency(400000);
 }
 
+/************
+電流を取得したいときに必要
+これをセットしないと電流は取れない
 
+@example
+
+   float current;
+   
+   myINA226.set_callibretion();
+   current = myINA226.get_current();
+************/
 void myINA226::set_callibretion(unsigned int val)
 {
     char reg = cal_reg;
@@ -20,10 +30,15 @@
     i2c->write(SLV_WRITE, cmd, 1);
 }
 
+/*************
+INA226の接続確認
+0が返ってくればOK
+1が返ってくればError
+*************/
 int myINA226::Connection_check()
 {
     char reg = check_reg;
-    char check;
+    char check[2];
     
     i2c->write(SLV_WRITE, &reg, 1);
     i2c->read(SLV_READ, check, 2);
@@ -31,7 +46,15 @@
     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
+デフォルトでは、両方の値を取得できるようになっている
+*************/
 void myINA226::setup(int i)
 {
     char reg = Ctrl_reg;
@@ -43,14 +66,26 @@
     
     i2c->write(SLV_WRITE, cmd[i], 3);
 }
+/*******************
+INA226で測定したいだろう電圧と電流の値を
+まとめて取得する
+もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら
+事前に設定しておかなければならない
 
+@example
+
+    float V_bus,current;
+    
+    myINA226.setup(0) or myINA226.setup(1);
+    myINA226.get_Voltage_current(&V_bus,&current);
+*******************/
 void myINA226::get_Voltage_current(float *V_bus, float *current)
 {
     char reg = V_bus_reg;
     char buff[2];
     unsigned int val[2];
     
-    setup(0);
+    //setup(0);
     
     i2c->write(SLV_WRITE, &reg, 1);
     wait_ms(10);
@@ -74,14 +109,26 @@
     *current = (float)(val[0] | val[1]);
     *current = *current;//1.25;
 }
+/**************
+0x01の値を取得
+もしsetupでi=1、つまり0x02の値だけを取得するようにしていたら
+事前に設定しておかなければならない
 
-void myINA226::get_Shunt_voltage(float *V_shunt)
+@example
+
+    float V_shunt;
+    
+    myINA226.setup(0) or myINA226.setup(2);
+    V_shunt = myINA226.get_Shunt_voltage();
+**************/
+float myINA226::get_Shunt_voltage()
 {
     char reg = V_shunt_reg;
     char buff[2];
     unsigned int val[2];
+    float V_shunt;
     
-    setup(2);
+    //setup(2);
     
     i2c->write(SLV_WRITE, &reg, 1);
     wait_ms(10);
@@ -90,17 +137,31 @@
     val[0] = (unsigned int)buff[0]<<8;
     val[1] = (unsigned int)buff[1];
     
-    *V_shunt = (float)(val[0] | val[1]);
-    *V_shunt = *V_shunt*1.25;
+    V_shunt = (float)(val[0] | val[1]);
+    V_shunt = V_shunt*1.25;
+
+    return V_shunt;
 }
+/**************
+0x01の値を取得
+もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら
+事前に設定しておかなければならない
 
-void myINA226::get_Bus_voltage(float *V_bus)
+@example
+
+    float V_bus;
+    
+    myINA226.setup(0) or myINA226.setup(1);
+    V_bus = myINA226.get_Bus_voltage();
+**************/
+float myINA226::get_Bus_voltage()
 {
     char reg = V_bus_reg;
     char buff[2];
     unsigned int val[2];
+    float V_bus;
     
-    setup(1);
+    //setup(1);
     
     i2c->write(SLV_WRITE, &reg, 1);
     wait_ms(10);
@@ -109,16 +170,29 @@
     val[0] = (unsigned int)buff[0]<<8;
     val[1] = (unsigned int)buff[1];
     
-    *V_bus = (float)(val[0] | val[1]);
-    *V_bus = *V_bus*1.25;
+    V_bus = (float)(val[0] | val[1]);
+    V_bus = V_bus*1.25;
+
+    return V_bus;
 }
+/***********
+電流の値を取得
+事前にset_callibretionをセットしておかないと
+0しか返ってこない
+@example
 
-void myINA226::get_current(float *current)
+   float current;
+   
+   myINA226.set_callibretion();
+   current = myINA226.get_current();
+************/
+float myINA226::get_current()
 {
 
     char reg = current_reg;
     char buff[2];
     unsigned int val[2];
+    float current;
     
     i2c->write(SLV_WRITE, &reg, 1);
     wait_ms(10);
@@ -127,15 +201,28 @@
     val[0] = (unsigned int)buff[0]<<8;
     val[1] = (unsigned int)buff[1];
     
-    *current = (float)(val[0] | val[1]);
-    *current = *current;//*1.25;
+    current = (float)(val[0] | val[1]);
+    current = current;//*1.25;
+
+    return current;
 }
-        
-void myINA226::get_power(float *power)
+/***********
+電力の値を取得
+事前にset_callibretionをセットしておかないと
+0しか返ってこない
+@example
+
+   float power;
+   
+   myINA226.set_callibretion();
+   power = myINA226.get_power();
+************/
+float myINA226::get_power()
 {
     char reg = power_reg;
     char buff[2];
     unsigned int val[2];
+    float power;
     
     i2c->write(SLV_WRITE, &reg, 1);
     wait_ms(10);
@@ -144,5 +231,7 @@
     val[0] = (unsigned int)buff[0]<<8;
     val[1] = (unsigned int)buff[1];
     
-    *power = (float)(val[0] | val[1]);
+    power = (float)(val[0] | val[1]);
+
+    return power;
 }