Calibrate and get energy readings from ADE7758 IC from Analog Devices
Fork of ADE7758 by
Currently this library can be used to calibrate and get VRMS, IRMS, active, and apparent energy. I havent worked on reactive energy measurement.
ade7758.cpp@1:f5e8c8591449, 2015-04-10 (annotated)
- Committer:
- bonchenko
- Date:
- Fri Apr 10 03:58:10 2015 +0000
- Revision:
- 1:f5e8c8591449
- Parent:
- 0:cf3dc3c5156b
- Child:
- 2:ea36884772ae
ADE7758 can read VRMS and IRMS, need energy calibration
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bonchenko | 0:cf3dc3c5156b | 1 | #include "mbed.h" |
bonchenko | 0:cf3dc3c5156b | 2 | #include "ade7758.h" |
bonchenko | 0:cf3dc3c5156b | 3 | #include "SWSPI.h" |
bonchenko | 0:cf3dc3c5156b | 4 | |
bonchenko | 0:cf3dc3c5156b | 5 | // public |
bonchenko | 1:f5e8c8591449 | 6 | ADE7758::ADE7758(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName interrupt): |
bonchenko | 1:f5e8c8591449 | 7 | _ADE7758SPI(mosi, miso, sclk), _ADESS(cs), _ADEINT(interrupt) |
bonchenko | 0:cf3dc3c5156b | 8 | { |
bonchenko | 0:cf3dc3c5156b | 9 | _ADESS = 1; |
bonchenko | 0:cf3dc3c5156b | 10 | } |
bonchenko | 0:cf3dc3c5156b | 11 | |
bonchenko | 0:cf3dc3c5156b | 12 | void ADE7758::begin() |
bonchenko | 0:cf3dc3c5156b | 13 | { |
bonchenko | 0:cf3dc3c5156b | 14 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 15 | //normal mode |
bonchenko | 1:f5e8c8591449 | 16 | _ADE7758SPI.format(8, 1); // pha 0, pol 1 |
bonchenko | 1:f5e8c8591449 | 17 | _ADE7758SPI.frequency(1000000); |
bonchenko | 1:f5e8c8591449 | 18 | write8bits(OPMODE, 0x04); |
bonchenko | 1:f5e8c8591449 | 19 | } |
bonchenko | 1:f5e8c8591449 | 20 | |
bonchenko | 1:f5e8c8591449 | 21 | void ADE7758::CalibrateVI(uint8_t numSamples) |
bonchenko | 1:f5e8c8591449 | 22 | { |
bonchenko | 1:f5e8c8591449 | 23 | write8bits(LCYCMODE, 0x38); |
bonchenko | 1:f5e8c8591449 | 24 | write24bits(MASK, 0xE00); |
bonchenko | 1:f5e8c8591449 | 25 | long AVRMSBuffer = 0, BVRMSBuffer = 0, CVRMSBuffer = 0; |
bonchenko | 1:f5e8c8591449 | 26 | long AIRMSBuffer = 0, BIRMSBuffer = 0, CIRMSBuffer = 0; |
bonchenko | 1:f5e8c8591449 | 27 | for (uint8_t i=0; i<numSamples; i++) { |
bonchenko | 1:f5e8c8591449 | 28 | read24bits(RSTATUS); |
bonchenko | 1:f5e8c8591449 | 29 | while ( _ADEINT != 0 ) { } // wait until INT go low |
bonchenko | 1:f5e8c8591449 | 30 | AVRMSBuffer += VRMS(PHASE_A); |
bonchenko | 1:f5e8c8591449 | 31 | BVRMSBuffer += VRMS(PHASE_B); |
bonchenko | 1:f5e8c8591449 | 32 | CVRMSBuffer += VRMS(PHASE_C); |
bonchenko | 1:f5e8c8591449 | 33 | AIRMSBuffer += IRMS(PHASE_A); |
bonchenko | 1:f5e8c8591449 | 34 | BIRMSBuffer += IRMS(PHASE_B); |
bonchenko | 1:f5e8c8591449 | 35 | CIRMSBuffer += IRMS(PHASE_C); |
bonchenko | 1:f5e8c8591449 | 36 | } |
bonchenko | 1:f5e8c8591449 | 37 | AVRMSCalib = AVRMSBuffer/numSamples; |
bonchenko | 1:f5e8c8591449 | 38 | BVRMSCalib = BVRMSBuffer/numSamples; |
bonchenko | 1:f5e8c8591449 | 39 | CVRMSCalib = CVRMSBuffer/numSamples; |
bonchenko | 1:f5e8c8591449 | 40 | AIRMSCalib = AIRMSBuffer/numSamples; |
bonchenko | 1:f5e8c8591449 | 41 | BIRMSCalib = BIRMSBuffer/numSamples; |
bonchenko | 1:f5e8c8591449 | 42 | CIRMSCalib = CIRMSBuffer/numSamples; |
bonchenko | 0:cf3dc3c5156b | 43 | } |
bonchenko | 0:cf3dc3c5156b | 44 | |
bonchenko | 0:cf3dc3c5156b | 45 | int ADE7758::getWattHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 46 | { |
bonchenko | 0:cf3dc3c5156b | 47 | return read16bits(AWATTHR+phase); |
bonchenko | 0:cf3dc3c5156b | 48 | } |
bonchenko | 0:cf3dc3c5156b | 49 | |
bonchenko | 0:cf3dc3c5156b | 50 | int ADE7758::getVARHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 51 | { |
bonchenko | 0:cf3dc3c5156b | 52 | return read16bits(AVARHR+phase); |
bonchenko | 0:cf3dc3c5156b | 53 | } |
bonchenko | 0:cf3dc3c5156b | 54 | |
bonchenko | 0:cf3dc3c5156b | 55 | int ADE7758::getVAHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 56 | { |
bonchenko | 0:cf3dc3c5156b | 57 | return read16bits(AVAHR+phase); |
bonchenko | 0:cf3dc3c5156b | 58 | } |
bonchenko | 0:cf3dc3c5156b | 59 | |
bonchenko | 0:cf3dc3c5156b | 60 | int ADE7758::WattHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 61 | { |
bonchenko | 0:cf3dc3c5156b | 62 | return getWattHR(phase); |
bonchenko | 0:cf3dc3c5156b | 63 | } |
bonchenko | 0:cf3dc3c5156b | 64 | |
bonchenko | 0:cf3dc3c5156b | 65 | int ADE7758::VARHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 66 | { |
bonchenko | 0:cf3dc3c5156b | 67 | return getVARHR(phase); |
bonchenko | 0:cf3dc3c5156b | 68 | } |
bonchenko | 0:cf3dc3c5156b | 69 | |
bonchenko | 0:cf3dc3c5156b | 70 | int ADE7758::VAHR(char phase) |
bonchenko | 0:cf3dc3c5156b | 71 | { |
bonchenko | 0:cf3dc3c5156b | 72 | return getVAHR(phase); |
bonchenko | 0:cf3dc3c5156b | 73 | } |
bonchenko | 0:cf3dc3c5156b | 74 | |
bonchenko | 0:cf3dc3c5156b | 75 | long ADE7758::VRMS(char phase) |
bonchenko | 0:cf3dc3c5156b | 76 | { |
bonchenko | 0:cf3dc3c5156b | 77 | char i=0; |
bonchenko | 0:cf3dc3c5156b | 78 | long volts=0; |
bonchenko | 0:cf3dc3c5156b | 79 | getVRMS(phase);//Ignore first reading |
bonchenko | 0:cf3dc3c5156b | 80 | for(i=0;i<10;++i){ |
bonchenko | 0:cf3dc3c5156b | 81 | volts+=getVRMS(phase); |
bonchenko | 0:cf3dc3c5156b | 82 | wait_us(50); |
bonchenko | 0:cf3dc3c5156b | 83 | } |
bonchenko | 0:cf3dc3c5156b | 84 | //average |
bonchenko | 0:cf3dc3c5156b | 85 | return volts/10; |
bonchenko | 0:cf3dc3c5156b | 86 | } |
bonchenko | 0:cf3dc3c5156b | 87 | |
bonchenko | 0:cf3dc3c5156b | 88 | long ADE7758::IRMS(char phase) |
bonchenko | 0:cf3dc3c5156b | 89 | { |
bonchenko | 0:cf3dc3c5156b | 90 | char i=0; |
bonchenko | 0:cf3dc3c5156b | 91 | long current=0; |
bonchenko | 0:cf3dc3c5156b | 92 | getIRMS(phase);//Ignore first reading |
bonchenko | 0:cf3dc3c5156b | 93 | for(i=0;i<10;++i){ |
bonchenko | 0:cf3dc3c5156b | 94 | current+=getIRMS(phase); |
bonchenko | 0:cf3dc3c5156b | 95 | wait_us(50); |
bonchenko | 0:cf3dc3c5156b | 96 | } |
bonchenko | 0:cf3dc3c5156b | 97 | //average |
bonchenko | 0:cf3dc3c5156b | 98 | return current/10; |
bonchenko | 0:cf3dc3c5156b | 99 | } |
bonchenko | 0:cf3dc3c5156b | 100 | |
bonchenko | 1:f5e8c8591449 | 101 | |
bonchenko | 1:f5e8c8591449 | 102 | float ADE7758::CalculateIRMS(char phase) { |
bonchenko | 1:f5e8c8591449 | 103 | if ( phase == PHASE_A ) { |
bonchenko | 1:f5e8c8591449 | 104 | return IRMS(phase) * 0.00000967; |
bonchenko | 1:f5e8c8591449 | 105 | } |
bonchenko | 1:f5e8c8591449 | 106 | else if ( phase == PHASE_B ) { |
bonchenko | 1:f5e8c8591449 | 107 | return IRMS(phase) * 0.00000955; |
bonchenko | 1:f5e8c8591449 | 108 | } |
bonchenko | 1:f5e8c8591449 | 109 | else if ( phase == PHASE_C ) { |
bonchenko | 1:f5e8c8591449 | 110 | return IRMS(phase) * 0.00000958; |
bonchenko | 1:f5e8c8591449 | 111 | } |
bonchenko | 1:f5e8c8591449 | 112 | } |
bonchenko | 1:f5e8c8591449 | 113 | |
bonchenko | 1:f5e8c8591449 | 114 | float ADE7758::CalculateVRMS(char phase) { |
bonchenko | 1:f5e8c8591449 | 115 | if ( phase == PHASE_A ) { |
bonchenko | 1:f5e8c8591449 | 116 | return VRMS(phase) * 0.000158; |
bonchenko | 1:f5e8c8591449 | 117 | } |
bonchenko | 1:f5e8c8591449 | 118 | else if ( phase == PHASE_B ) { |
bonchenko | 1:f5e8c8591449 | 119 | return VRMS(phase) * 0.000157; |
bonchenko | 1:f5e8c8591449 | 120 | } |
bonchenko | 1:f5e8c8591449 | 121 | else if ( phase == PHASE_C ) { |
bonchenko | 1:f5e8c8591449 | 122 | return VRMS(phase) * 0.000156; |
bonchenko | 1:f5e8c8591449 | 123 | } |
bonchenko | 1:f5e8c8591449 | 124 | } |
bonchenko | 1:f5e8c8591449 | 125 | |
bonchenko | 0:cf3dc3c5156b | 126 | void accumulateEnergy() |
bonchenko | 0:cf3dc3c5156b | 127 | { |
bonchenko | 0:cf3dc3c5156b | 128 | |
bonchenko | 0:cf3dc3c5156b | 129 | } |
bonchenko | 0:cf3dc3c5156b | 130 | |
bonchenko | 0:cf3dc3c5156b | 131 | long ADE7758::waveform(char phase,char source) |
bonchenko | 0:cf3dc3c5156b | 132 | { |
bonchenko | 0:cf3dc3c5156b | 133 | return 1; |
bonchenko | 0:cf3dc3c5156b | 134 | } |
bonchenko | 0:cf3dc3c5156b | 135 | |
bonchenko | 0:cf3dc3c5156b | 136 | void ADE7758::powerOff() |
bonchenko | 0:cf3dc3c5156b | 137 | { |
bonchenko | 0:cf3dc3c5156b | 138 | |
bonchenko | 0:cf3dc3c5156b | 139 | } |
bonchenko | 0:cf3dc3c5156b | 140 | |
bonchenko | 0:cf3dc3c5156b | 141 | void ADE7758::powerON() |
bonchenko | 0:cf3dc3c5156b | 142 | { |
bonchenko | 0:cf3dc3c5156b | 143 | |
bonchenko | 0:cf3dc3c5156b | 144 | } |
bonchenko | 0:cf3dc3c5156b | 145 | |
bonchenko | 0:cf3dc3c5156b | 146 | void ADE7758::sleep() |
bonchenko | 0:cf3dc3c5156b | 147 | { |
bonchenko | 0:cf3dc3c5156b | 148 | |
bonchenko | 0:cf3dc3c5156b | 149 | } |
bonchenko | 0:cf3dc3c5156b | 150 | |
bonchenko | 0:cf3dc3c5156b | 151 | void ADE7758::wakeUp() |
bonchenko | 0:cf3dc3c5156b | 152 | { |
bonchenko | 0:cf3dc3c5156b | 153 | |
bonchenko | 0:cf3dc3c5156b | 154 | } |
bonchenko | 0:cf3dc3c5156b | 155 | |
bonchenko | 0:cf3dc3c5156b | 156 | long ADE7758::getInterruptStatus(void){ |
bonchenko | 0:cf3dc3c5156b | 157 | return read24bits(STATUS); |
bonchenko | 0:cf3dc3c5156b | 158 | } |
bonchenko | 0:cf3dc3c5156b | 159 | |
bonchenko | 0:cf3dc3c5156b | 160 | |
bonchenko | 0:cf3dc3c5156b | 161 | long ADE7758::getResetInterruptStatus(void){ |
bonchenko | 0:cf3dc3c5156b | 162 | return read24bits(RSTATUS); |
bonchenko | 0:cf3dc3c5156b | 163 | } |
bonchenko | 0:cf3dc3c5156b | 164 | |
bonchenko | 0:cf3dc3c5156b | 165 | |
bonchenko | 0:cf3dc3c5156b | 166 | int ADE7758::lineFreq(char phase){ |
bonchenko | 0:cf3dc3c5156b | 167 | uint8_t mmode; |
bonchenko | 0:cf3dc3c5156b | 168 | mmode = read8bits(MMODE); |
bonchenko | 0:cf3dc3c5156b | 169 | write8bits(MMODE,(mmode&0x11111100 )| phase); |
bonchenko | 0:cf3dc3c5156b | 170 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 171 | return read16bits(FREQ); |
bonchenko | 0:cf3dc3c5156b | 172 | } |
bonchenko | 0:cf3dc3c5156b | 173 | // private |
bonchenko | 0:cf3dc3c5156b | 174 | |
bonchenko | 0:cf3dc3c5156b | 175 | void ADE7758::enableChip() |
bonchenko | 0:cf3dc3c5156b | 176 | { |
bonchenko | 0:cf3dc3c5156b | 177 | _ADESS = 0; |
bonchenko | 0:cf3dc3c5156b | 178 | } |
bonchenko | 0:cf3dc3c5156b | 179 | |
bonchenko | 0:cf3dc3c5156b | 180 | void ADE7758::disableChip() |
bonchenko | 0:cf3dc3c5156b | 181 | { |
bonchenko | 0:cf3dc3c5156b | 182 | _ADESS = 1; |
bonchenko | 0:cf3dc3c5156b | 183 | } |
bonchenko | 0:cf3dc3c5156b | 184 | |
bonchenko | 0:cf3dc3c5156b | 185 | void ADE7758::write8bits(char reg, unsigned char data) |
bonchenko | 0:cf3dc3c5156b | 186 | { |
bonchenko | 0:cf3dc3c5156b | 187 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 188 | |
bonchenko | 0:cf3dc3c5156b | 189 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 190 | _ADE7758SPI.write(REG_WRITE(reg)); |
bonchenko | 0:cf3dc3c5156b | 191 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 192 | |
bonchenko | 0:cf3dc3c5156b | 193 | _ADE7758SPI.write(data); |
bonchenko | 0:cf3dc3c5156b | 194 | |
bonchenko | 0:cf3dc3c5156b | 195 | wait_ms(1); |
bonchenko | 0:cf3dc3c5156b | 196 | |
bonchenko | 0:cf3dc3c5156b | 197 | disableChip(); |
bonchenko | 0:cf3dc3c5156b | 198 | } |
bonchenko | 0:cf3dc3c5156b | 199 | |
bonchenko | 0:cf3dc3c5156b | 200 | void ADE7758::write16bits(char reg, unsigned int data) |
bonchenko | 0:cf3dc3c5156b | 201 | { |
bonchenko | 0:cf3dc3c5156b | 202 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 203 | |
bonchenko | 0:cf3dc3c5156b | 204 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 205 | _ADE7758SPI.write(REG_WRITE(reg)); |
bonchenko | 0:cf3dc3c5156b | 206 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 207 | _ADE7758SPI.write((unsigned char)((data>>8)&0xFF)); |
bonchenko | 0:cf3dc3c5156b | 208 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 209 | _ADE7758SPI.write((unsigned char)(data&0xFF)); |
bonchenko | 0:cf3dc3c5156b | 210 | wait_ms(1); |
bonchenko | 0:cf3dc3c5156b | 211 | |
bonchenko | 0:cf3dc3c5156b | 212 | disableChip(); |
bonchenko | 0:cf3dc3c5156b | 213 | } |
bonchenko | 0:cf3dc3c5156b | 214 | |
bonchenko | 1:f5e8c8591449 | 215 | void ADE7758::write24bits(char reg, unsigned int data) |
bonchenko | 1:f5e8c8591449 | 216 | { |
bonchenko | 1:f5e8c8591449 | 217 | enableChip(); |
bonchenko | 1:f5e8c8591449 | 218 | |
bonchenko | 1:f5e8c8591449 | 219 | wait_ms(10); |
bonchenko | 1:f5e8c8591449 | 220 | _ADE7758SPI.write(REG_WRITE(reg)); |
bonchenko | 1:f5e8c8591449 | 221 | wait_ms(2); |
bonchenko | 1:f5e8c8591449 | 222 | _ADE7758SPI.write((unsigned char)((data>>16)&0xFF)); |
bonchenko | 1:f5e8c8591449 | 223 | wait_ms(2); |
bonchenko | 1:f5e8c8591449 | 224 | _ADE7758SPI.write((unsigned char)((data>>8)&0xFF)); |
bonchenko | 1:f5e8c8591449 | 225 | wait_ms(2); |
bonchenko | 1:f5e8c8591449 | 226 | _ADE7758SPI.write((unsigned char)(data&0xFF)); |
bonchenko | 1:f5e8c8591449 | 227 | wait_ms(1); |
bonchenko | 1:f5e8c8591449 | 228 | |
bonchenko | 1:f5e8c8591449 | 229 | disableChip(); |
bonchenko | 1:f5e8c8591449 | 230 | } |
bonchenko | 1:f5e8c8591449 | 231 | |
bonchenko | 0:cf3dc3c5156b | 232 | unsigned char ADE7758::read8bits(char reg) |
bonchenko | 0:cf3dc3c5156b | 233 | { |
bonchenko | 0:cf3dc3c5156b | 234 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 235 | |
bonchenko | 0:cf3dc3c5156b | 236 | unsigned char ret; |
bonchenko | 0:cf3dc3c5156b | 237 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 238 | _ADE7758SPI.write(REG_READ(reg)); |
bonchenko | 0:cf3dc3c5156b | 239 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 240 | ret=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 241 | wait_ms(1); |
bonchenko | 0:cf3dc3c5156b | 242 | |
bonchenko | 0:cf3dc3c5156b | 243 | disableChip(); |
bonchenko | 0:cf3dc3c5156b | 244 | |
bonchenko | 0:cf3dc3c5156b | 245 | return ret; |
bonchenko | 0:cf3dc3c5156b | 246 | } |
bonchenko | 0:cf3dc3c5156b | 247 | |
bonchenko | 0:cf3dc3c5156b | 248 | unsigned int ADE7758::read16bits(char reg) |
bonchenko | 0:cf3dc3c5156b | 249 | { |
bonchenko | 0:cf3dc3c5156b | 250 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 251 | unsigned int ret=0; |
bonchenko | 0:cf3dc3c5156b | 252 | unsigned char ret0=0; |
bonchenko | 0:cf3dc3c5156b | 253 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 254 | _ADE7758SPI.write(REG_READ(reg)); |
bonchenko | 0:cf3dc3c5156b | 255 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 256 | ret=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 257 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 258 | ret0=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 259 | wait_ms(1); |
bonchenko | 0:cf3dc3c5156b | 260 | |
bonchenko | 0:cf3dc3c5156b | 261 | disableChip(); |
bonchenko | 0:cf3dc3c5156b | 262 | ret= (ret<<8)|ret0; |
bonchenko | 0:cf3dc3c5156b | 263 | return ret; |
bonchenko | 0:cf3dc3c5156b | 264 | } |
bonchenko | 0:cf3dc3c5156b | 265 | |
bonchenko | 0:cf3dc3c5156b | 266 | unsigned long ADE7758::read24bits(char reg) |
bonchenko | 0:cf3dc3c5156b | 267 | { |
bonchenko | 0:cf3dc3c5156b | 268 | enableChip(); |
bonchenko | 0:cf3dc3c5156b | 269 | unsigned long ret=0; |
bonchenko | 0:cf3dc3c5156b | 270 | unsigned int ret1=0; |
bonchenko | 0:cf3dc3c5156b | 271 | unsigned char ret0=0; |
bonchenko | 0:cf3dc3c5156b | 272 | wait_ms(10); |
bonchenko | 0:cf3dc3c5156b | 273 | _ADE7758SPI.write(REG_READ(reg)); |
bonchenko | 0:cf3dc3c5156b | 274 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 275 | ret=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 276 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 277 | ret1=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 278 | wait_ms(2); |
bonchenko | 0:cf3dc3c5156b | 279 | ret0=_ADE7758SPI.write(0x00); |
bonchenko | 0:cf3dc3c5156b | 280 | wait_ms(1); |
bonchenko | 0:cf3dc3c5156b | 281 | |
bonchenko | 0:cf3dc3c5156b | 282 | disableChip(); |
bonchenko | 1:f5e8c8591449 | 283 | ret= (ret<<16)|(ret1<<8)| ret0; |
bonchenko | 0:cf3dc3c5156b | 284 | return ret; |
bonchenko | 0:cf3dc3c5156b | 285 | } |
bonchenko | 0:cf3dc3c5156b | 286 | |
bonchenko | 0:cf3dc3c5156b | 287 | long ADE7758::getIRMS(char phase) |
bonchenko | 0:cf3dc3c5156b | 288 | { |
bonchenko | 0:cf3dc3c5156b | 289 | return read24bits(AIRMS+phase); |
bonchenko | 0:cf3dc3c5156b | 290 | } |
bonchenko | 0:cf3dc3c5156b | 291 | |
bonchenko | 0:cf3dc3c5156b | 292 | long ADE7758::getVRMS(char phase) |
bonchenko | 0:cf3dc3c5156b | 293 | { |
bonchenko | 0:cf3dc3c5156b | 294 | return read24bits(AVRMS+phase); |
bonchenko | 0:cf3dc3c5156b | 295 | } |
bonchenko | 0:cf3dc3c5156b | 296 | |
bonchenko | 0:cf3dc3c5156b | 297 | // ADE7758 ADE(mosi, miso, sclk, cs); |