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.
INA260.cpp@0:a1b8d2c9420d, 2017-12-10 (annotated)
- Committer:
- Waynan
- Date:
- Sun Dec 10 14:44:24 2017 +0000
- Revision:
- 0:a1b8d2c9420d
First commit of INA260 Library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Waynan | 0:a1b8d2c9420d | 1 | /** |
Waynan | 0:a1b8d2c9420d | 2 | * @section DESCRIPTION |
Waynan | 0:a1b8d2c9420d | 3 | * INA260 - Bi-Directional 15A CURRENT/POWER MONITOR with I2C |
Waynan | 0:a1b8d2c9420d | 4 | * |
Waynan | 0:a1b8d2c9420d | 5 | */ |
Waynan | 0:a1b8d2c9420d | 6 | #include "mbed.h" |
Waynan | 0:a1b8d2c9420d | 7 | #include "INA260.hpp" |
Waynan | 0:a1b8d2c9420d | 8 | |
Waynan | 0:a1b8d2c9420d | 9 | INA260::INA260(I2C &i2c_,int addr_,int freq_) : i2c(i2c_),i2c_addr(addr_),freq(freq_) |
Waynan | 0:a1b8d2c9420d | 10 | { |
Waynan | 0:a1b8d2c9420d | 11 | i2c.frequency(freq); |
Waynan | 0:a1b8d2c9420d | 12 | } |
Waynan | 0:a1b8d2c9420d | 13 | |
Waynan | 0:a1b8d2c9420d | 14 | int INA260::isExist(void) |
Waynan | 0:a1b8d2c9420d | 15 | { |
Waynan | 0:a1b8d2c9420d | 16 | char p_addr = 0; //Select Configuration Register. |
Waynan | 0:a1b8d2c9420d | 17 | i2c.frequency(freq); |
Waynan | 0:a1b8d2c9420d | 18 | if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){ |
Waynan | 0:a1b8d2c9420d | 19 | return 1; |
Waynan | 0:a1b8d2c9420d | 20 | } |
Waynan | 0:a1b8d2c9420d | 21 | return 0; |
Waynan | 0:a1b8d2c9420d | 22 | } |
Waynan | 0:a1b8d2c9420d | 23 | |
Waynan | 0:a1b8d2c9420d | 24 | int INA260::rawWrite(char pointer_addr,unsigned short val_) |
Waynan | 0:a1b8d2c9420d | 25 | { |
Waynan | 0:a1b8d2c9420d | 26 | char val[3]; |
Waynan | 0:a1b8d2c9420d | 27 | val[0] = pointer_addr; |
Waynan | 0:a1b8d2c9420d | 28 | val[1] = static_cast<char>((val_ >> 8) & 0x00ff); |
Waynan | 0:a1b8d2c9420d | 29 | val[2] = static_cast<char>(val_ & 0x00ff); |
Waynan | 0:a1b8d2c9420d | 30 | i2c.frequency(freq); |
Waynan | 0:a1b8d2c9420d | 31 | if(i2c.write(i2c_addr | 0,val,sizeof(val)) == 0){ |
Waynan | 0:a1b8d2c9420d | 32 | return 0; |
Waynan | 0:a1b8d2c9420d | 33 | } |
Waynan | 0:a1b8d2c9420d | 34 | return 1; |
Waynan | 0:a1b8d2c9420d | 35 | } |
Waynan | 0:a1b8d2c9420d | 36 | |
Waynan | 0:a1b8d2c9420d | 37 | int INA260::rawRead(char pointer_addr,unsigned short *val_) |
Waynan | 0:a1b8d2c9420d | 38 | { |
Waynan | 0:a1b8d2c9420d | 39 | char p_addr = pointer_addr; |
Waynan | 0:a1b8d2c9420d | 40 | char val[2]; |
Waynan | 0:a1b8d2c9420d | 41 | i2c.frequency(freq); |
Waynan | 0:a1b8d2c9420d | 42 | if(i2c.write(i2c_addr | 0,&p_addr,sizeof(p_addr)) == 0){ |
Waynan | 0:a1b8d2c9420d | 43 | if(i2c.read(i2c_addr | 0x01,val,sizeof(val)) == 0){ |
Waynan | 0:a1b8d2c9420d | 44 | *val_ = static_cast<unsigned short>(val[0]); |
Waynan | 0:a1b8d2c9420d | 45 | *val_ = (*val_ << 8) | static_cast<unsigned short>(val[1]); |
Waynan | 0:a1b8d2c9420d | 46 | return 0; |
Waynan | 0:a1b8d2c9420d | 47 | } |
Waynan | 0:a1b8d2c9420d | 48 | } |
Waynan | 0:a1b8d2c9420d | 49 | return 1; |
Waynan | 0:a1b8d2c9420d | 50 | } |
Waynan | 0:a1b8d2c9420d | 51 | |
Waynan | 0:a1b8d2c9420d | 52 | int INA260::getVoltage(double *V_) |
Waynan | 0:a1b8d2c9420d | 53 | { |
Waynan | 0:a1b8d2c9420d | 54 | unsigned short val; |
Waynan | 0:a1b8d2c9420d | 55 | if(rawRead(0x02,&val) == 0){ |
Waynan | 0:a1b8d2c9420d | 56 | *V_ = static_cast<double>(val) * 0.00125; |
Waynan | 0:a1b8d2c9420d | 57 | return 0; |
Waynan | 0:a1b8d2c9420d | 58 | } |
Waynan | 0:a1b8d2c9420d | 59 | return 1; |
Waynan | 0:a1b8d2c9420d | 60 | } |
Waynan | 0:a1b8d2c9420d | 61 | |
Waynan | 0:a1b8d2c9420d | 62 | int INA260::getCurrent(double *I_) |
Waynan | 0:a1b8d2c9420d | 63 | { |
Waynan | 0:a1b8d2c9420d | 64 | unsigned short val; |
Waynan | 0:a1b8d2c9420d | 65 | if(rawRead(0x01,&val) == 0){ //current register 0X1 |
Waynan | 0:a1b8d2c9420d | 66 | char *s_p = reinterpret_cast<char *>(&val); |
Waynan | 0:a1b8d2c9420d | 67 | short d_s; |
Waynan | 0:a1b8d2c9420d | 68 | char *d_p = reinterpret_cast<char *>(&d_s); |
Waynan | 0:a1b8d2c9420d | 69 | *(d_p + 0) = *(s_p + 0); |
Waynan | 0:a1b8d2c9420d | 70 | *(d_p + 1) = *(s_p + 1); |
Waynan | 0:a1b8d2c9420d | 71 | *I_ = static_cast<double>(d_s) * 1.25; |
Waynan | 0:a1b8d2c9420d | 72 | return 0; |
Waynan | 0:a1b8d2c9420d | 73 | } |
Waynan | 0:a1b8d2c9420d | 74 | return 1; |
Waynan | 0:a1b8d2c9420d | 75 | } |
Waynan | 0:a1b8d2c9420d | 76 | |
Waynan | 0:a1b8d2c9420d | 77 | |
Waynan | 0:a1b8d2c9420d | 78 | int INA260::getPower(double *P_) |
Waynan | 0:a1b8d2c9420d | 79 | { |
Waynan | 0:a1b8d2c9420d | 80 | unsigned short val; |
Waynan | 0:a1b8d2c9420d | 81 | if(rawRead(0x03,&val) == 0){ //power register 0x3 |
Waynan | 0:a1b8d2c9420d | 82 | char *s_p = reinterpret_cast<char *>(&val); |
Waynan | 0:a1b8d2c9420d | 83 | short d_s; |
Waynan | 0:a1b8d2c9420d | 84 | char *d_p = reinterpret_cast<char *>(&d_s); |
Waynan | 0:a1b8d2c9420d | 85 | *(d_p + 0) = *(s_p + 0); |
Waynan | 0:a1b8d2c9420d | 86 | *(d_p + 1) = *(s_p + 1); |
Waynan | 0:a1b8d2c9420d | 87 | *P_ = static_cast<double>(d_s) * 10; |
Waynan | 0:a1b8d2c9420d | 88 | return 0; |
Waynan | 0:a1b8d2c9420d | 89 | } |
Waynan | 0:a1b8d2c9420d | 90 | return 1; |
Waynan | 0:a1b8d2c9420d | 91 | } |
Waynan | 0:a1b8d2c9420d | 92 | |
Waynan | 0:a1b8d2c9420d | 93 | int INA260::setConfig(unsigned short val) |
Waynan | 0:a1b8d2c9420d | 94 | { |
Waynan | 0:a1b8d2c9420d | 95 | return rawWrite(0x00,val); //config register 0x00 |
Waynan | 0:a1b8d2c9420d | 96 | } |
Waynan | 0:a1b8d2c9420d | 97 | |
Waynan | 0:a1b8d2c9420d | 98 | int INA260::setAlert(unsigned short val1) |
Waynan | 0:a1b8d2c9420d | 99 | { |
Waynan | 0:a1b8d2c9420d | 100 | return rawWrite(0x06,val1); //config register 0x00 |
Waynan | 0:a1b8d2c9420d | 101 | } |
Waynan | 0:a1b8d2c9420d | 102 | |
Waynan | 0:a1b8d2c9420d | 103 | int INA260::setLim(unsigned short val2) |
Waynan | 0:a1b8d2c9420d | 104 | { |
Waynan | 0:a1b8d2c9420d | 105 | return rawWrite(0x07,val2); //config register 0x00 |
Waynan | 0:a1b8d2c9420d | 106 | } |
Waynan | 0:a1b8d2c9420d | 107 | |
Waynan | 0:a1b8d2c9420d | 108 | void INA260::readAlert(void) |
Waynan | 0:a1b8d2c9420d | 109 | { |
Waynan | 0:a1b8d2c9420d | 110 | unsigned short val4; |
Waynan | 0:a1b8d2c9420d | 111 | rawRead(0x06,&val4); |
Waynan | 0:a1b8d2c9420d | 112 | |
Waynan | 0:a1b8d2c9420d | 113 | } |