hattori&ide

Dependencies:   mbed

Committer:
hattori_atsushi
Date:
Sun Dec 18 08:16:01 2022 +0000
Revision:
0:f77369cabd75
hattori

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hattori_atsushi 0:f77369cabd75 1 /**
hattori_atsushi 0:f77369cabd75 2 * @section LICENSE
hattori_atsushi 0:f77369cabd75 3 * Released under the MIT License: http://mbed.org/license/mit
hattori_atsushi 0:f77369cabd75 4 * Copyright (C) 2012 tosihisa
hattori_atsushi 0:f77369cabd75 5 *
hattori_atsushi 0:f77369cabd75 6 * @section DESCRIPTION
hattori_atsushi 0:f77369cabd75 7 * INA226 - Bi-Directional CURRENT/POWER MONITOR with I2C
hattori_atsushi 0:f77369cabd75 8 * http://strawberry-linux.com/catalog/items?code=12031
hattori_atsushi 0:f77369cabd75 9 *
hattori_atsushi 0:f77369cabd75 10 */
hattori_atsushi 0:f77369cabd75 11 #include "mbed.h"
hattori_atsushi 0:f77369cabd75 12 #include "INA226.hpp"
hattori_atsushi 0:f77369cabd75 13
hattori_atsushi 0:f77369cabd75 14 INA226::INA226(I2C &i2c_,int addr_,int freq_) : i2c(i2c_),i2c_addr(addr_),freq(freq_)
hattori_atsushi 0:f77369cabd75 15 {
hattori_atsushi 0:f77369cabd75 16 i2c.frequency(freq);
hattori_atsushi 0:f77369cabd75 17 }
hattori_atsushi 0:f77369cabd75 18
hattori_atsushi 0:f77369cabd75 19 int INA226::isExist(void)
hattori_atsushi 0:f77369cabd75 20 {
hattori_atsushi 0:f77369cabd75 21 char p_addr = 0; //Select Configuration Register.
hattori_atsushi 0:f77369cabd75 22 i2c.frequency(freq);
hattori_atsushi 0:f77369cabd75 23 if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
hattori_atsushi 0:f77369cabd75 24 return 1;
hattori_atsushi 0:f77369cabd75 25 }
hattori_atsushi 0:f77369cabd75 26 return 0;
hattori_atsushi 0:f77369cabd75 27 }
hattori_atsushi 0:f77369cabd75 28
hattori_atsushi 0:f77369cabd75 29 int INA226::rawWrite(char pointer_addr,unsigned short val_)
hattori_atsushi 0:f77369cabd75 30 {
hattori_atsushi 0:f77369cabd75 31 char val[3];
hattori_atsushi 0:f77369cabd75 32 val[0] = pointer_addr;
hattori_atsushi 0:f77369cabd75 33 val[1] = static_cast<char>((val_ >> 8) & 0x00ff);
hattori_atsushi 0:f77369cabd75 34 val[2] = static_cast<char>(val_ & 0x00ff);
hattori_atsushi 0:f77369cabd75 35 i2c.frequency(freq);
hattori_atsushi 0:f77369cabd75 36 if(i2c.write(i2c_addr | 0,val,sizeof(val)) == 0){
hattori_atsushi 0:f77369cabd75 37 return 0;
hattori_atsushi 0:f77369cabd75 38 }
hattori_atsushi 0:f77369cabd75 39 return 1;
hattori_atsushi 0:f77369cabd75 40 }
hattori_atsushi 0:f77369cabd75 41
hattori_atsushi 0:f77369cabd75 42 int INA226::rawRead(char pointer_addr,unsigned short *val_)
hattori_atsushi 0:f77369cabd75 43 {
hattori_atsushi 0:f77369cabd75 44 char p_addr = pointer_addr;
hattori_atsushi 0:f77369cabd75 45 char val[2];
hattori_atsushi 0:f77369cabd75 46 i2c.frequency(freq);
hattori_atsushi 0:f77369cabd75 47 if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){
hattori_atsushi 0:f77369cabd75 48 if(i2c.read(i2c_addr | 0x01,val,sizeof(val)) == 0){
hattori_atsushi 0:f77369cabd75 49 *val_ = static_cast<unsigned short>(val[0]);
hattori_atsushi 0:f77369cabd75 50 *val_ = (*val_ << 8) | static_cast<unsigned short>(val[1]);
hattori_atsushi 0:f77369cabd75 51 return 0;
hattori_atsushi 0:f77369cabd75 52 }
hattori_atsushi 0:f77369cabd75 53 }
hattori_atsushi 0:f77369cabd75 54 return 1;
hattori_atsushi 0:f77369cabd75 55 }
hattori_atsushi 0:f77369cabd75 56
hattori_atsushi 0:f77369cabd75 57 int INA226::getVoltage(double *V_)
hattori_atsushi 0:f77369cabd75 58 {
hattori_atsushi 0:f77369cabd75 59 unsigned short val;
hattori_atsushi 0:f77369cabd75 60 if(rawRead(0x02,&val) == 0){
hattori_atsushi 0:f77369cabd75 61 *V_ = static_cast<double>(val) * 1.25 / 1000;
hattori_atsushi 0:f77369cabd75 62 return 0;
hattori_atsushi 0:f77369cabd75 63 }
hattori_atsushi 0:f77369cabd75 64 return 1;
hattori_atsushi 0:f77369cabd75 65 }
hattori_atsushi 0:f77369cabd75 66
hattori_atsushi 0:f77369cabd75 67 int INA226::getCurrent(double *I_)
hattori_atsushi 0:f77369cabd75 68 {
hattori_atsushi 0:f77369cabd75 69 unsigned short val;
hattori_atsushi 0:f77369cabd75 70 if(rawRead(0x04,&val) == 0){
hattori_atsushi 0:f77369cabd75 71 char *s_p = reinterpret_cast<char *>(&val);
hattori_atsushi 0:f77369cabd75 72 short d_s;
hattori_atsushi 0:f77369cabd75 73 char *d_p = reinterpret_cast<char *>(&d_s);
hattori_atsushi 0:f77369cabd75 74 *(d_p + 0) = *(s_p + 0);
hattori_atsushi 0:f77369cabd75 75 *(d_p + 1) = *(s_p + 1);
hattori_atsushi 0:f77369cabd75 76 *I_ = static_cast<double>(d_s) / 1000;
hattori_atsushi 0:f77369cabd75 77 return 0;
hattori_atsushi 0:f77369cabd75 78 }
hattori_atsushi 0:f77369cabd75 79 return 1;
hattori_atsushi 0:f77369cabd75 80 }
hattori_atsushi 0:f77369cabd75 81
hattori_atsushi 0:f77369cabd75 82 int INA226::setCurrentCalibration(unsigned short val)
hattori_atsushi 0:f77369cabd75 83 {
hattori_atsushi 0:f77369cabd75 84 return rawWrite(0x05,val);
hattori_atsushi 0:f77369cabd75 85 }
hattori_atsushi 0:f77369cabd75 86
hattori_atsushi 0:f77369cabd75 87 int INA226::setConfiguration(unsigned short val){
hattori_atsushi 0:f77369cabd75 88 return rawWrite(0x00, val); // 設定レジスタに書き込む
hattori_atsushi 0:f77369cabd75 89 }