Calibrate and get energy readings from ADE7758 IC from Analog Devices

Fork of ADE7758 by Emma

Currently this library can be used to calibrate and get VRMS, IRMS, active, and apparent energy. I havent worked on reactive energy measurement.

Committer:
bonchenko
Date:
Wed Apr 08 13:25:39 2015 +0000
Revision:
0:cf3dc3c5156b
Child:
1:f5e8c8591449
Initial commit - Can talk to ADE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bonchenko 0:cf3dc3c5156b 1 #ifndef MBED_ADE7758_H
bonchenko 0:cf3dc3c5156b 2 #define MBED_ADE7758_H
bonchenko 0:cf3dc3c5156b 3
bonchenko 0:cf3dc3c5156b 4 #include "mbed.h"
bonchenko 0:cf3dc3c5156b 5 #include "SWSPI.h"
bonchenko 0:cf3dc3c5156b 6
bonchenko 0:cf3dc3c5156b 7 #define AWATTHR 0x01
bonchenko 0:cf3dc3c5156b 8 #define BWATTHR 0x02
bonchenko 0:cf3dc3c5156b 9 #define CWATTHR 0x03
bonchenko 0:cf3dc3c5156b 10 #define AVARHR 0x04
bonchenko 0:cf3dc3c5156b 11 #define BVARHR 0x05
bonchenko 0:cf3dc3c5156b 12 #define CVARHR 0x06
bonchenko 0:cf3dc3c5156b 13 #define AVAHR 0x07
bonchenko 0:cf3dc3c5156b 14 #define BVAHR 0x08
bonchenko 0:cf3dc3c5156b 15 #define CVAHR 0x09
bonchenko 0:cf3dc3c5156b 16 #define AIRMS 0x0A
bonchenko 0:cf3dc3c5156b 17 #define BIRMS 0x0B
bonchenko 0:cf3dc3c5156b 18 #define CIRMS 0x0C
bonchenko 0:cf3dc3c5156b 19 #define AVRMS 0x0D
bonchenko 0:cf3dc3c5156b 20 #define BVRMS 0x0E
bonchenko 0:cf3dc3c5156b 21 #define CVRMS 0x0F
bonchenko 0:cf3dc3c5156b 22 #define FREQ 0x10
bonchenko 0:cf3dc3c5156b 23 #define TEMP 0x11
bonchenko 0:cf3dc3c5156b 24 #define WFORM 0x12
bonchenko 0:cf3dc3c5156b 25 #define OPMODE 0x13
bonchenko 0:cf3dc3c5156b 26 #define MMODE 0x14
bonchenko 0:cf3dc3c5156b 27 #define WAVMODE 0x15
bonchenko 0:cf3dc3c5156b 28 #define COMPMODE 0x16
bonchenko 0:cf3dc3c5156b 29 #define LCYCMODE 0x17
bonchenko 0:cf3dc3c5156b 30 #define MASK 0x18
bonchenko 0:cf3dc3c5156b 31 #define STATUS 0x19
bonchenko 0:cf3dc3c5156b 32 #define RSTATUS 0x1A
bonchenko 0:cf3dc3c5156b 33 #define ZXTOUT 0x1B
bonchenko 0:cf3dc3c5156b 34 #define LINECYC 0x1C
bonchenko 0:cf3dc3c5156b 35 #define SAGCYC 0x1D
bonchenko 0:cf3dc3c5156b 36 #define SAGLVL 0x1E
bonchenko 0:cf3dc3c5156b 37 #define VPINTLVL 0x1F
bonchenko 0:cf3dc3c5156b 38 #define IPINTLVL 0x20
bonchenko 0:cf3dc3c5156b 39 #define VPEAK 0x21
bonchenko 0:cf3dc3c5156b 40 #define IPEAK 0x22
bonchenko 0:cf3dc3c5156b 41 #define GAIN 0x23
bonchenko 0:cf3dc3c5156b 42 #define AVRMSGAIN 0x24
bonchenko 0:cf3dc3c5156b 43 #define BVRMSGAIN 0x25
bonchenko 0:cf3dc3c5156b 44 #define CVRMSGAIN 0x26
bonchenko 0:cf3dc3c5156b 45 #define AIGAIN 0x27
bonchenko 0:cf3dc3c5156b 46 #define BIGAIN 0x28
bonchenko 0:cf3dc3c5156b 47 #define CIGAIN 0x29
bonchenko 0:cf3dc3c5156b 48 #define AWG 0x2A
bonchenko 0:cf3dc3c5156b 49 #define BWG 0x2B
bonchenko 0:cf3dc3c5156b 50 #define CWG 0x2C
bonchenko 0:cf3dc3c5156b 51 #define AVARG 0x2D
bonchenko 0:cf3dc3c5156b 52 #define BVARG 0x2E
bonchenko 0:cf3dc3c5156b 53 #define CVARG 0x2F
bonchenko 0:cf3dc3c5156b 54 #define AVAG 0x30
bonchenko 0:cf3dc3c5156b 55 #define BVAG 0x31
bonchenko 0:cf3dc3c5156b 56 #define CVAG 0x32
bonchenko 0:cf3dc3c5156b 57 #define AVRMSOS 0x33
bonchenko 0:cf3dc3c5156b 58 #define BVRMSOS 0x34
bonchenko 0:cf3dc3c5156b 59 #define CVRMSOS 0x35
bonchenko 0:cf3dc3c5156b 60 #define AIRMSOS 0x36
bonchenko 0:cf3dc3c5156b 61 #define BIRMSOS 0x37
bonchenko 0:cf3dc3c5156b 62 #define CIRMSOS 0x38
bonchenko 0:cf3dc3c5156b 63 #define AWAITOS 0x39
bonchenko 0:cf3dc3c5156b 64 #define BWAITOS 0x3A
bonchenko 0:cf3dc3c5156b 65 #define CWAITOS 0x3B
bonchenko 0:cf3dc3c5156b 66 #define AVAROS 0x3C
bonchenko 0:cf3dc3c5156b 67 #define BVAROS 0x3D
bonchenko 0:cf3dc3c5156b 68 #define CVAROS 0x3E
bonchenko 0:cf3dc3c5156b 69 #define APHCAL 0x3F
bonchenko 0:cf3dc3c5156b 70 #define BPHCAL 0x40
bonchenko 0:cf3dc3c5156b 71 #define CPHCAL 0x41
bonchenko 0:cf3dc3c5156b 72 #define WDIV 0x42
bonchenko 0:cf3dc3c5156b 73 #define VADIV 0x44
bonchenko 0:cf3dc3c5156b 74 #define VARDIV 0x43
bonchenko 0:cf3dc3c5156b 75 #define APCFNUM 0x45
bonchenko 0:cf3dc3c5156b 76 #define APCFDEN 0x46
bonchenko 0:cf3dc3c5156b 77 #define VARCFNUM 0x47
bonchenko 0:cf3dc3c5156b 78 #define VARCFDEN 0x48
bonchenko 0:cf3dc3c5156b 79 #define CHKSUM 0x7E
bonchenko 0:cf3dc3c5156b 80 #define VERSION 0x7F
bonchenko 0:cf3dc3c5156b 81
bonchenko 0:cf3dc3c5156b 82 #define REG_READ(reg) reg
bonchenko 0:cf3dc3c5156b 83 #define REG_WRITE(reg) (unsigned char)((reg) | 0x80)
bonchenko 0:cf3dc3c5156b 84
bonchenko 0:cf3dc3c5156b 85 //PHASE_SEL
bonchenko 0:cf3dc3c5156b 86 #define PHASE_A 0
bonchenko 0:cf3dc3c5156b 87 #define PHASE_B 1
bonchenko 0:cf3dc3c5156b 88 #define PHASE_C 2
bonchenko 0:cf3dc3c5156b 89
bonchenko 0:cf3dc3c5156b 90 //WAV_SEL
bonchenko 0:cf3dc3c5156b 91 #define CURRENT 0
bonchenko 0:cf3dc3c5156b 92 #define VOLTAGE 1
bonchenko 0:cf3dc3c5156b 93 #define ACT_PWR 2
bonchenko 0:cf3dc3c5156b 94 #define REACT_PWR 3
bonchenko 0:cf3dc3c5156b 95 #define APP_PWR 4
bonchenko 0:cf3dc3c5156b 96
bonchenko 0:cf3dc3c5156b 97 //interrupt mask/status bit
bonchenko 0:cf3dc3c5156b 98 #define AEHF 0
bonchenko 0:cf3dc3c5156b 99 #define REHF 1
bonchenko 0:cf3dc3c5156b 100 #define VAEHF 2
bonchenko 0:cf3dc3c5156b 101 #define SAGA 3
bonchenko 0:cf3dc3c5156b 102 #define SAGB 4
bonchenko 0:cf3dc3c5156b 103 #define SAGC 5
bonchenko 0:cf3dc3c5156b 104 #define ZXTOA 6
bonchenko 0:cf3dc3c5156b 105 #define ZXTOB 7
bonchenko 0:cf3dc3c5156b 106 #define ZXTOC 8
bonchenko 0:cf3dc3c5156b 107 #define ZXA 9
bonchenko 0:cf3dc3c5156b 108 #define ZXB 10
bonchenko 0:cf3dc3c5156b 109 #define ZXC 11
bonchenko 0:cf3dc3c5156b 110 #define LENERGY 12
bonchenko 0:cf3dc3c5156b 111 #define RESET 13
bonchenko 0:cf3dc3c5156b 112 #define PKV 14
bonchenko 0:cf3dc3c5156b 113 #define PKI 15
bonchenko 0:cf3dc3c5156b 114 #define WFSM 16
bonchenko 0:cf3dc3c5156b 115 #define REVPAP 17
bonchenko 0:cf3dc3c5156b 116 #define REVPRP 18
bonchenko 0:cf3dc3c5156b 117 #define SEQERR 19
bonchenko 0:cf3dc3c5156b 118
bonchenko 0:cf3dc3c5156b 119
bonchenko 0:cf3dc3c5156b 120 #define WAVMODE_VALUE(phase, wave) (((wave)<<2)|(phase))
bonchenko 0:cf3dc3c5156b 121
bonchenko 0:cf3dc3c5156b 122 class ADE7758
bonchenko 0:cf3dc3c5156b 123 {
bonchenko 0:cf3dc3c5156b 124 public:
bonchenko 0:cf3dc3c5156b 125 ADE7758 (PinName mosi, PinName miso, PinName sclk, PinName cs);
bonchenko 0:cf3dc3c5156b 126 void begin();
bonchenko 0:cf3dc3c5156b 127 int WattHR(char phase);
bonchenko 0:cf3dc3c5156b 128 int VARHR(char phase);
bonchenko 0:cf3dc3c5156b 129 int VAHR(char phase);
bonchenko 0:cf3dc3c5156b 130 long VRMS(char phase);
bonchenko 0:cf3dc3c5156b 131 long IRMS(char phase);
bonchenko 0:cf3dc3c5156b 132 long waveform(char phase,char source);
bonchenko 0:cf3dc3c5156b 133 int lineFreq(char phase);
bonchenko 0:cf3dc3c5156b 134
bonchenko 0:cf3dc3c5156b 135 void accumulateEnergy();
bonchenko 0:cf3dc3c5156b 136
bonchenko 0:cf3dc3c5156b 137 void powerOff();
bonchenko 0:cf3dc3c5156b 138 void powerON();
bonchenko 0:cf3dc3c5156b 139 void sleep();
bonchenko 0:cf3dc3c5156b 140 void wakeUp();
bonchenko 0:cf3dc3c5156b 141
bonchenko 0:cf3dc3c5156b 142 long getInterruptStatus(void);
bonchenko 0:cf3dc3c5156b 143 long getResetInterruptStatus(void);
bonchenko 0:cf3dc3c5156b 144 void enableChip();
bonchenko 0:cf3dc3c5156b 145 void disableChip();
bonchenko 0:cf3dc3c5156b 146 void write8bits(char reg, unsigned char data);
bonchenko 0:cf3dc3c5156b 147 void write16bits(char reg, unsigned int data);
bonchenko 0:cf3dc3c5156b 148 unsigned char read8bits(char reg);
bonchenko 0:cf3dc3c5156b 149 unsigned int read16bits(char reg);
bonchenko 0:cf3dc3c5156b 150 unsigned long read24bits(char reg);
bonchenko 0:cf3dc3c5156b 151
bonchenko 0:cf3dc3c5156b 152
bonchenko 0:cf3dc3c5156b 153 private:
bonchenko 0:cf3dc3c5156b 154 long getIRMS(char phase);
bonchenko 0:cf3dc3c5156b 155 long getVRMS(char phase);
bonchenko 0:cf3dc3c5156b 156 int getWattHR(char phase);
bonchenko 0:cf3dc3c5156b 157 int getVARHR(char phase);
bonchenko 0:cf3dc3c5156b 158 int getVAHR(char phase);
bonchenko 0:cf3dc3c5156b 159
bonchenko 0:cf3dc3c5156b 160 SWSPI _ADE7758SPI;
bonchenko 0:cf3dc3c5156b 161 DigitalOut _ADESS;
bonchenko 0:cf3dc3c5156b 162 long accuWattHRA;
bonchenko 0:cf3dc3c5156b 163 long accuWattHRB;
bonchenko 0:cf3dc3c5156b 164 long accuVARHRA;
bonchenko 0:cf3dc3c5156b 165 long accuVARHRB;
bonchenko 0:cf3dc3c5156b 166 long accuVAHRA;
bonchenko 0:cf3dc3c5156b 167 long accuVAHRB;
bonchenko 0:cf3dc3c5156b 168 };
bonchenko 0:cf3dc3c5156b 169
bonchenko 0:cf3dc3c5156b 170 extern ADE7758 ADE;
bonchenko 0:cf3dc3c5156b 171 #endif