PM publish

Fork of PowerMonlib2 by Sippakorn Saeng-aroon

Committer:
worasuchad
Date:
Mon Aug 13 11:39:08 2018 +0000
Revision:
2:01b627381f0d
Parent:
1:7a6a568c5c34
hormone v.1 for optimizing COT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
worasuchad 2:01b627381f0d 1 #define i2c2_sda D3 //D14
worasuchad 2:01b627381f0d 2 #define i2c2_scl D6 //D15
sippasaeng 0:6615da7486d0 3
sippasaeng 0:6615da7486d0 4 #define SourceVH 0x58
sippasaeng 0:6615da7486d0 5 #define SourceVL 0x59
sippasaeng 0:6615da7486d0 6 #define SenseVH 0x54
sippasaeng 0:6615da7486d0 7 #define SenseVL 0x55
sippasaeng 0:6615da7486d0 8 #define PowerH 0x5B
sippasaeng 0:6615da7486d0 9 #define PowerL 0x5C
sippasaeng 0:6615da7486d0 10
worasuchad 2:01b627381f0d 11 I2C i2c2_PM(i2c2_sda, i2c2_scl);
sippasaeng 0:6615da7486d0 12
worasuchad 2:01b627381f0d 13 class powerMon
worasuchad 2:01b627381f0d 14 {
worasuchad 2:01b627381f0d 15 private:
worasuchad 2:01b627381f0d 16 int w_addr,r_addr;
sippasaeng 0:6615da7486d0 17
worasuchad 2:01b627381f0d 18 public:
worasuchad 2:01b627381f0d 19 powerMon(int addr_sel)
worasuchad 2:01b627381f0d 20 {
worasuchad 2:01b627381f0d 21 switch(addr_sel)
worasuchad 2:01b627381f0d 22 {
worasuchad 2:01b627381f0d 23 case 0: w_addr=0x98; break;
worasuchad 2:01b627381f0d 24 case 100: w_addr=0x9A; break;
worasuchad 2:01b627381f0d 25 case 180: w_addr=0x9C; break;
worasuchad 2:01b627381f0d 26 case 300: w_addr=0x9E; break;
worasuchad 2:01b627381f0d 27 case 430: w_addr=0x90; break;
worasuchad 2:01b627381f0d 28 case 560: w_addr=0x92; break;
worasuchad 2:01b627381f0d 29 case 750: w_addr=0x94; break;
worasuchad 2:01b627381f0d 30 case 1270: w_addr=0x96; break;
worasuchad 2:01b627381f0d 31 case 1600: w_addr=0x50; break;
worasuchad 2:01b627381f0d 32 case 2000: w_addr=0x52; break;
worasuchad 2:01b627381f0d 33 case 2700: w_addr=0x54; break;
worasuchad 2:01b627381f0d 34 case 3600: w_addr=0x56; break;
worasuchad 2:01b627381f0d 35 case 5600: w_addr=0x58; break;
worasuchad 2:01b627381f0d 36 case 9100: w_addr=0x58; break;
worasuchad 2:01b627381f0d 37 case 20000: w_addr=0x5A; break;
worasuchad 2:01b627381f0d 38 case -1: w_addr=0x30; break;
worasuchad 2:01b627381f0d 39 }
worasuchad 2:01b627381f0d 40 r_addr = w_addr + 0x01;
sippasaeng 0:6615da7486d0 41 }
sippasaeng 0:6615da7486d0 42
worasuchad 2:01b627381f0d 43 double V_Sense()
worasuchad 2:01b627381f0d 44 {
worasuchad 2:01b627381f0d 45 double volt=0,mult_fac=1,offset=0;
worasuchad 2:01b627381f0d 46 char buffer[2];
worasuchad 2:01b627381f0d 47 buffer[0]=SenseVL;
worasuchad 2:01b627381f0d 48 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 49 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 50 volt=buffer[0]/16;
worasuchad 2:01b627381f0d 51 buffer[0]=SenseVH;
worasuchad 2:01b627381f0d 52 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 53 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 54 volt += (buffer[0] & 0x7f)*16;
worasuchad 2:01b627381f0d 55 volt = (volt*mult_fac)+offset;
worasuchad 2:01b627381f0d 56 return (buffer[0]&0x80)?-volt:volt;
worasuchad 2:01b627381f0d 57 }
worasuchad 2:01b627381f0d 58
worasuchad 2:01b627381f0d 59 double V_Source()
worasuchad 2:01b627381f0d 60 {
worasuchad 2:01b627381f0d 61 double volt=0;
worasuchad 2:01b627381f0d 62 char buffer[2];
worasuchad 2:01b627381f0d 63 buffer[0]=SourceVL;
worasuchad 2:01b627381f0d 64 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 65 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 66 volt=buffer[0]/32;
worasuchad 2:01b627381f0d 67 buffer[0]=SourceVH;
worasuchad 2:01b627381f0d 68 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 69 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 70 volt += buffer[0]*8;
worasuchad 2:01b627381f0d 71
worasuchad 2:01b627381f0d 72 return (volt/2048.0000)*23.9883;
worasuchad 2:01b627381f0d 73 }
worasuchad 2:01b627381f0d 74
worasuchad 2:01b627381f0d 75 double Current()
worasuchad 2:01b627381f0d 76 {
worasuchad 2:01b627381f0d 77 return (V_Sense()/2047.0000)*(8.0000);
worasuchad 2:01b627381f0d 78 }
worasuchad 2:01b627381f0d 79
worasuchad 2:01b627381f0d 80 long Power_Ratio()
worasuchad 2:01b627381f0d 81 {
worasuchad 2:01b627381f0d 82 long power_r=0;
worasuchad 2:01b627381f0d 83 char buffer[2];
worasuchad 2:01b627381f0d 84 buffer[0]=PowerL;
worasuchad 2:01b627381f0d 85 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 86 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 87 power_r=buffer[0];
worasuchad 2:01b627381f0d 88 buffer[0]=PowerH;
worasuchad 2:01b627381f0d 89 i2c2_PM.write(r_addr,buffer, 1,true);
worasuchad 2:01b627381f0d 90 i2c2_PM.read(r_addr, buffer,1);
worasuchad 2:01b627381f0d 91 power_r += buffer[0]*256;
worasuchad 2:01b627381f0d 92
worasuchad 2:01b627381f0d 93 return power_r;
worasuchad 2:01b627381f0d 94 }
worasuchad 2:01b627381f0d 95
worasuchad 2:01b627381f0d 96 double Power()
worasuchad 2:01b627381f0d 97 {
worasuchad 2:01b627381f0d 98 return (Power_Ratio()/65535.0000)*(8.0000*23.9883);
worasuchad 2:01b627381f0d 99 }
sippasaeng 0:6615da7486d0 100 };