Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of INA226 by
Revision 0:3a05c5755625, committed 2012-11-24
- 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 // }
