1月13日パブリッシュ

Dependents:   INA226TEST

Fork of INA226 by Toshihisa T

Files at this revision

API Documentation at this revision

Comitter:
tosihisa
Date:
Sat Nov 24 18:15:16 2012 +0000
Child:
1:e0ebc6af5e04
Commit message:
1st

Changed in this revision

INA226.cpp Show annotated file Show diff for this revision Revisions of this file
INA226.hpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/INA226.cpp	Sat Nov 24 18:15:16 2012 +0000
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011 Toshihisa T
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+
+#include "mbed.h"
+#include "INA226.hpp"
+
+INA226::INA226(I2C &i2c_,int addr_,int freq_) : i2c(i2c_),i2c_addr(addr_),freq(freq_)
+{
+    i2c.frequency(freq);
+}
+
+int INA226::isExist(void)
+{
+    char p_addr = 0;   //Select Configuration Register.
+    i2c.frequency(freq);
+    if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
+        return 1;
+    }
+    return 0;
+}
+
+int INA226::rawWrite(char pointer_addr,unsigned short val_)
+{
+    char val[3];
+    val[0] = pointer_addr;
+    val[1] = static_cast<char>((val_ >> 8) & 0x00ff);
+    val[2] = static_cast<char>(val_ & 0x00ff);
+    i2c.frequency(freq);
+    if(i2c.write(i2c_addr | 0,val,sizeof(val)) == 0){
+        return 0;
+    }
+    return 1;
+}
+
+int INA226::rawRead(char pointer_addr,unsigned short *val_)
+{
+    char p_addr = pointer_addr;
+    char val[2];
+    i2c.frequency(freq);
+    if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
+        if(i2c.read(i2c_addr | 0x01,val,sizeof(val)) == 0){
+            *val_ = static_cast<unsigned short>(val[0]);
+            *val_ = (*val_ << 8) | static_cast<unsigned short>(val[1]);
+            return 0;
+        }
+    }
+    return 1;
+}
+
+int INA226::getVoltage(double *V_)
+{
+    unsigned short val;
+    if(rawRead(0x02,&val) == 0){
+        *V_ = static_cast<double>(val) * 1.25;
+        return 0;
+    }
+    return 1;
+}
+
+int INA226::getCurrent(double *I_)
+{
+    unsigned short val;
+    if(rawRead(0x04,&val) == 0){
+        char *s_p = reinterpret_cast<char *>(&val);
+        short d_s;
+        char *d_p = reinterpret_cast<char *>(&d_s);
+        *(d_p + 0) = *(s_p + 0);
+        *(d_p + 1) = *(s_p + 1);
+        *I_ = static_cast<double>(d_s) /* * 1.25 */;
+        return 0;
+    }
+    return 1;
+}
+
+int INA226::setCurrentCalibration(unsigned short val)
+{
+    return rawWrite(0x05,val);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/INA226.hpp	Sat Nov 24 18:15:16 2012 +0000
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2011 Toshihisa T
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+#ifndef __INA226_INCLUDE    // {
+#define __INA226_INCLUDE
+#include "mbed.h"
+class INA226 {
+    public:
+        INA226(I2C &i2c_,int addr_ = 0x80,int freq_ = 100000);
+        int isExist(void);
+        int rawRead(char pointer_addr,unsigned short *val_);
+        int rawWrite(char pointer_addr,unsigned short val_);
+        int getVoltage(double *V_);
+        int getCurrent(double *I_);
+        int setCurrentCalibration(unsigned short val = 0x0A00);
+
+    private:
+        I2C &i2c;
+        int i2c_addr;
+        int freq;
+};
+#endif  // }