Interfacing ADE9000 with mbed platform

Dependencies:   mbed

Committer:
ksnjth
Date:
Fri Apr 20 08:45:34 2018 +0000
Revision:
0:32e7a5fadacc
ADE9000 SPI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ksnjth 0:32e7a5fadacc 1 #include "mbed.h"
ksnjth 0:32e7a5fadacc 2 #include "ADE9000.h"
ksnjth 0:32e7a5fadacc 3 DigitalOut CS(p14);
ksnjth 0:32e7a5fadacc 4 #define MOSI_pin p11
ksnjth 0:32e7a5fadacc 5 #define MISO p12
ksnjth 0:32e7a5fadacc 6 #define SCLK_pin p13
ksnjth 0:32e7a5fadacc 7 SPI spi(p11, p12, p13); // mosi, miso, sclk
ksnjth 0:32e7a5fadacc 8
ksnjth 0:32e7a5fadacc 9 DigitalOut myled(LED1);
ksnjth 0:32e7a5fadacc 10
ksnjth 0:32e7a5fadacc 11 #define ADE9000_Reset_wait_ms_Value 10000
ksnjth 0:32e7a5fadacc 12 #define ADE9000_SS_wait_ms_Value 1000
ksnjth 0:32e7a5fadacc 13 #define ADE9000_Comu_Delay_Value 1
ksnjth 0:32e7a5fadacc 14 #define ADE9000_Start_Delay_Value 10
ksnjth 0:32e7a5fadacc 15
ksnjth 0:32e7a5fadacc 16 void Init_ADE9000(void);
ksnjth 0:32e7a5fadacc 17 void Read_ADE9000_SPI(uint16_t us_ADE_Addr, uint16_t us_Nr_Bytes, uint8_t *puc_Reg_Data);
ksnjth 0:32e7a5fadacc 18 uint16_t Read_ADE9000_CRC_SPI(uint16_t us_ADE_Addr, uint16_t us_Nr_Bytes, uint8_t *puc_Reg_Data);
ksnjth 0:32e7a5fadacc 19 void Write_ADE9000_SPI(uint16_t us_ADE_Addr, uint8_t uc_Nr_Bytes, uint8_t *puc_Reg_Data);
ksnjth 0:32e7a5fadacc 20 void Read_OTest_ADE9000_SPI(uint16_t us_ADE_Addr, uint16_t us_Nr_Bytes, uint8_t *puc_Reg_Data);
ksnjth 0:32e7a5fadacc 21
ksnjth 0:32e7a5fadacc 22 void printReadData(uint8_t length);
ksnjth 0:32e7a5fadacc 23 void int2bin( int value, char* buffer, int bufferSize);
ksnjth 0:32e7a5fadacc 24 long decConvert(uint8_t length);
ksnjth 0:32e7a5fadacc 25 void readData();
ksnjth 0:32e7a5fadacc 26 //uint8_t IsADE9078OrADE9000(void);
ksnjth 0:32e7a5fadacc 27 uint8_t uc_ADEChipID;
ksnjth 0:32e7a5fadacc 28
ksnjth 0:32e7a5fadacc 29 uint8_t uc_Read_Data[4];
ksnjth 0:32e7a5fadacc 30 uint8_t uc_Write_Data[4];
ksnjth 0:32e7a5fadacc 31
ksnjth 0:32e7a5fadacc 32 // const byte CS = 53;
ksnjth 0:32e7a5fadacc 33 // const byte MOSI_pin=51;
ksnjth 0:32e7a5fadacc 34 // const byte SCLK_pin = 52;
ksnjth 0:32e7a5fadacc 35
ksnjth 0:32e7a5fadacc 36 long data = 0;
ksnjth 0:32e7a5fadacc 37
ksnjth 0:32e7a5fadacc 38
ksnjth 0:32e7a5fadacc 39
ksnjth 0:32e7a5fadacc 40 void configure()
ksnjth 0:32e7a5fadacc 41 {
ksnjth 0:32e7a5fadacc 42 // uint8_t bitRead;
ksnjth 0:32e7a5fadacc 43
ksnjth 0:32e7a5fadacc 44 //wait for reset after power on
ksnjth 0:32e7a5fadacc 45 printf("Initializing ADE\n");
ksnjth 0:32e7a5fadacc 46 wait_ms(2000);
ksnjth 0:32e7a5fadacc 47
ksnjth 0:32e7a5fadacc 48 //Read PGA gain
ksnjth 0:32e7a5fadacc 49 printf("2. PGA gain\n");
ksnjth 0:32e7a5fadacc 50 Read_ADE9000_SPI(ADDR_PGA_GAIN,0x2,uc_Read_Data);
ksnjth 0:32e7a5fadacc 51 printReadData(0x02);
ksnjth 0:32e7a5fadacc 52
ksnjth 0:32e7a5fadacc 53 // Read config0
ksnjth 0:32e7a5fadacc 54 printf("4-7 Config0\n");
ksnjth 0:32e7a5fadacc 55 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 56 uc_Write_Data[1]=0b0;
ksnjth 0:32e7a5fadacc 57 uc_Write_Data[2]=0b0;
ksnjth 0:32e7a5fadacc 58 uc_Write_Data[3]=0b0;
ksnjth 0:32e7a5fadacc 59 Write_ADE9000_SPI(ADDR_CONFIG0,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 60 Read_ADE9000_SPI(ADDR_CONFIG0,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 61 printReadData(0x04);
ksnjth 0:32e7a5fadacc 62
ksnjth 0:32e7a5fadacc 63 //read config 2
ksnjth 0:32e7a5fadacc 64 printf("CONFIG2\n");
ksnjth 0:32e7a5fadacc 65 Read_ADE9000_SPI(ADDR_CONFIG2,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 66 printReadData(0x04);
ksnjth 0:32e7a5fadacc 67
ksnjth 0:32e7a5fadacc 68 // Write dynamic range adjustment
ksnjth 0:32e7a5fadacc 69 printf("VLEVEL\n");
ksnjth 0:32e7a5fadacc 70 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 71 uc_Write_Data[1]=0b00001000;
ksnjth 0:32e7a5fadacc 72 uc_Write_Data[2]=0b11000010;
ksnjth 0:32e7a5fadacc 73 uc_Write_Data[3]=0b01011010;
ksnjth 0:32e7a5fadacc 74 Write_ADE9000_SPI(ADDR_VLEVEL,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 75 Read_ADE9000_SPI(ADDR_VLEVEL,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 76 printReadData(0x04);
ksnjth 0:32e7a5fadacc 77
ksnjth 0:32e7a5fadacc 78 // vconsel adjust
ksnjth 0:32e7a5fadacc 79 printf("VCONSEL IN ACCMODE\n");
ksnjth 0:32e7a5fadacc 80 Read_ADE9000_SPI(ADDR_ACCMODE,0x02,uc_Read_Data);
ksnjth 0:32e7a5fadacc 81 printReadData(0x02);
ksnjth 0:32e7a5fadacc 82
ksnjth 0:32e7a5fadacc 83
ksnjth 0:32e7a5fadacc 84
ksnjth 0:32e7a5fadacc 85 //Callibrate AIGAIN
ksnjth 0:32e7a5fadacc 86 printf("AIGAIN\n");
ksnjth 0:32e7a5fadacc 87 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 88 uc_Write_Data[1]=0b11001100;
ksnjth 0:32e7a5fadacc 89 uc_Write_Data[2]=0b11001100;
ksnjth 0:32e7a5fadacc 90 uc_Write_Data[3]=0b11001101;
ksnjth 0:32e7a5fadacc 91 Write_ADE9000_SPI(ADDR_AIGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 92 Read_ADE9000_SPI(ADDR_AIGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 93 printReadData(0x04);
ksnjth 0:32e7a5fadacc 94
ksnjth 0:32e7a5fadacc 95
ksnjth 0:32e7a5fadacc 96 //Callibrate BIGAIN
ksnjth 0:32e7a5fadacc 97 printf("BIGAIN\n");
ksnjth 0:32e7a5fadacc 98 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 99 uc_Write_Data[1]=0b10001110;
ksnjth 0:32e7a5fadacc 100 uc_Write_Data[2]=0b01111010;
ksnjth 0:32e7a5fadacc 101 uc_Write_Data[3]=0b10110111;
ksnjth 0:32e7a5fadacc 102 Write_ADE9000_SPI(ADDR_BIGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 103 Read_ADE9000_SPI(ADDR_BIGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 104 printReadData(0x04);
ksnjth 0:32e7a5fadacc 105
ksnjth 0:32e7a5fadacc 106 //Callibrate CIGAIN
ksnjth 0:32e7a5fadacc 107 printf("CIGAIN\n");
ksnjth 0:32e7a5fadacc 108 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 109 uc_Write_Data[1]=0b11111011;
ksnjth 0:32e7a5fadacc 110 uc_Write_Data[2]=0b11001000;
ksnjth 0:32e7a5fadacc 111 uc_Write_Data[3]=0b10010110;
ksnjth 0:32e7a5fadacc 112 Write_ADE9000_SPI(ADDR_CIGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 113 Read_ADE9000_SPI(ADDR_CIGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 114 printReadData(0x04);
ksnjth 0:32e7a5fadacc 115
ksnjth 0:32e7a5fadacc 116 //Callibrate NIGAIN
ksnjth 0:32e7a5fadacc 117 printf("NIGAIN\n");
ksnjth 0:32e7a5fadacc 118 uc_Write_Data[0]=0b10;
ksnjth 0:32e7a5fadacc 119 uc_Write_Data[1]=0b01010110;
ksnjth 0:32e7a5fadacc 120 uc_Write_Data[2]=0b00101101;
ksnjth 0:32e7a5fadacc 121 uc_Write_Data[3]=0B10111001;
ksnjth 0:32e7a5fadacc 122 Write_ADE9000_SPI(ADDR_NIGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 123 Read_ADE9000_SPI(ADDR_NIGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 124 printReadData(0x04);
ksnjth 0:32e7a5fadacc 125
ksnjth 0:32e7a5fadacc 126
ksnjth 0:32e7a5fadacc 127 //Callibrate AVGAIN
ksnjth 0:32e7a5fadacc 128 printf("AVGAIN\n");
ksnjth 0:32e7a5fadacc 129 uc_Write_Data[0]=0b00000010;
ksnjth 0:32e7a5fadacc 130 uc_Write_Data[1]=0b10001111;
ksnjth 0:32e7a5fadacc 131 uc_Write_Data[2]=0b00000001;
ksnjth 0:32e7a5fadacc 132 uc_Write_Data[3]=0b10010011;
ksnjth 0:32e7a5fadacc 133 Write_ADE9000_SPI(ADDR_AVGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 134 Read_ADE9000_SPI(ADDR_AVGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 135 printReadData(0x04);
ksnjth 0:32e7a5fadacc 136
ksnjth 0:32e7a5fadacc 137 //Callibrate BVGAIN
ksnjth 0:32e7a5fadacc 138 printf("BVGAIN\n");
ksnjth 0:32e7a5fadacc 139 uc_Write_Data[0]=0b00000010;
ksnjth 0:32e7a5fadacc 140 uc_Write_Data[1]=0b10000000;
ksnjth 0:32e7a5fadacc 141 uc_Write_Data[2]=0b11000000;
ksnjth 0:32e7a5fadacc 142 uc_Write_Data[3]=0b10101011;
ksnjth 0:32e7a5fadacc 143 Write_ADE9000_SPI(ADDR_BVGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 144 Read_ADE9000_SPI(ADDR_BVGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 145 printReadData(0x04);
ksnjth 0:32e7a5fadacc 146
ksnjth 0:32e7a5fadacc 147 //Callibrate BVGAIN
ksnjth 0:32e7a5fadacc 148 printf("CVGAIN\n");
ksnjth 0:32e7a5fadacc 149 uc_Write_Data[0]=0b00000010;
ksnjth 0:32e7a5fadacc 150 uc_Write_Data[1]=0b10010000;
ksnjth 0:32e7a5fadacc 151 uc_Write_Data[2]=0b10000001;
ksnjth 0:32e7a5fadacc 152 uc_Write_Data[3]=0b11010001;
ksnjth 0:32e7a5fadacc 153 Write_ADE9000_SPI(ADDR_CVGAIN,0x04,uc_Write_Data);
ksnjth 0:32e7a5fadacc 154 Read_ADE9000_SPI(ADDR_CVGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 155 printReadData(0x04);
ksnjth 0:32e7a5fadacc 156
ksnjth 0:32e7a5fadacc 157 // RUN
ksnjth 0:32e7a5fadacc 158 printf("run\n");
ksnjth 0:32e7a5fadacc 159 uc_Write_Data[0]=0b0;
ksnjth 0:32e7a5fadacc 160 uc_Write_Data[1]=0b1;
ksnjth 0:32e7a5fadacc 161
ksnjth 0:32e7a5fadacc 162 Write_ADE9000_SPI(ADDR_RUN,0x02,uc_Write_Data);
ksnjth 0:32e7a5fadacc 163 Read_ADE9000_SPI(ADDR_RUN,0x02,uc_Read_Data);
ksnjth 0:32e7a5fadacc 164 printReadData(0x02);
ksnjth 0:32e7a5fadacc 165
ksnjth 0:32e7a5fadacc 166 //TEMP CONFIG READ
ksnjth 0:32e7a5fadacc 167 Read_ADE9000_SPI(ADDR_CVGAIN,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 168 printf("TEMP_TRIM CONFIG\n");
ksnjth 0:32e7a5fadacc 169 printReadData(0x04);
ksnjth 0:32e7a5fadacc 170
ksnjth 0:32e7a5fadacc 171 }
ksnjth 0:32e7a5fadacc 172
ksnjth 0:32e7a5fadacc 173 void printReadData(uint8_t length)
ksnjth 0:32e7a5fadacc 174 {
ksnjth 0:32e7a5fadacc 175 for(int k=0;k<length;k++){
ksnjth 0:32e7a5fadacc 176 // printf(uc_Read_Data[k],BIN);
ksnjth 0:32e7a5fadacc 177 char binaryBuffer[9]; // 8 bits plus null terminator
ksnjth 0:32e7a5fadacc 178 int2bin(uc_Read_Data[k], binaryBuffer, 9) ;
ksnjth 0:32e7a5fadacc 179 printf("%s \n",binaryBuffer);
ksnjth 0:32e7a5fadacc 180 }
ksnjth 0:32e7a5fadacc 181 }
ksnjth 0:32e7a5fadacc 182
ksnjth 0:32e7a5fadacc 183 void int2bin( int value, char* buffer, int bufferSize) {
ksnjth 0:32e7a5fadacc 184 char *nextChar = buffer + bufferSize-2; // location to write the least significant bit
ksnjth 0:32e7a5fadacc 185
ksnjth 0:32e7a5fadacc 186 for (int i = 0; i<(bufferSize-1); i++) { // for each bit
ksnjth 0:32e7a5fadacc 187 (value & (1<<i)) ? *nextChar = '1' : *nextChar = '0'; // if set set to '1' else '0'
ksnjth 0:32e7a5fadacc 188 nextChar --;
ksnjth 0:32e7a5fadacc 189 }
ksnjth 0:32e7a5fadacc 190
ksnjth 0:32e7a5fadacc 191 *(buffer + bufferSize-1) = 0; // add the null terminator
ksnjth 0:32e7a5fadacc 192 }
ksnjth 0:32e7a5fadacc 193
ksnjth 0:32e7a5fadacc 194 long decConvert(uint8_t length)
ksnjth 0:32e7a5fadacc 195 {
ksnjth 0:32e7a5fadacc 196 long temp_data =0;
ksnjth 0:32e7a5fadacc 197 for(int i=0;i<length;i++ )
ksnjth 0:32e7a5fadacc 198 {
ksnjth 0:32e7a5fadacc 199 temp_data = temp_data*256+ uc_Read_Data[i];
ksnjth 0:32e7a5fadacc 200 }
ksnjth 0:32e7a5fadacc 201 return temp_data;
ksnjth 0:32e7a5fadacc 202 }
ksnjth 0:32e7a5fadacc 203
ksnjth 0:32e7a5fadacc 204
ksnjth 0:32e7a5fadacc 205
ksnjth 0:32e7a5fadacc 206
ksnjth 0:32e7a5fadacc 207 void Read_ADE9000_SPI(uint16_t us_ADE_Addr, uint16_t us_Nr_Bytes, uint8_t *puc_Reg_Data)
ksnjth 0:32e7a5fadacc 208 {
ksnjth 0:32e7a5fadacc 209 uint16_t us_iCounter;
ksnjth 0:32e7a5fadacc 210 uint16_t us_iAddress;
ksnjth 0:32e7a5fadacc 211 uint8_t *puc_TempData;
ksnjth 0:32e7a5fadacc 212 uint8_t uc_LS_Addr,uc_MS_Addr;
ksnjth 0:32e7a5fadacc 213
ksnjth 0:32e7a5fadacc 214 //printf("address to read");
ksnjth 0:32e7a5fadacc 215 //printf(us_ADE_Addr,HEX);
ksnjth 0:32e7a5fadacc 216 us_iAddress = us_ADE_Addr;
ksnjth 0:32e7a5fadacc 217 us_iAddress = (us_iAddress << 4);
ksnjth 0:32e7a5fadacc 218 us_iAddress = (us_iAddress | 0x08);
ksnjth 0:32e7a5fadacc 219 puc_TempData = puc_Reg_Data;
ksnjth 0:32e7a5fadacc 220
ksnjth 0:32e7a5fadacc 221 uc_LS_Addr = (uint8_t) us_iAddress; //captures the least sig 8 bits only
ksnjth 0:32e7a5fadacc 222 uc_MS_Addr =(uint8_t) (us_iAddress >> 8); //flush the lsbs and capture the rest
ksnjth 0:32e7a5fadacc 223
ksnjth 0:32e7a5fadacc 224 wait_ms(ADE9000_Start_Delay_Value);
ksnjth 0:32e7a5fadacc 225 CS=0;
ksnjth 0:32e7a5fadacc 226 wait_ms(ADE9000_Start_Delay_Value);
ksnjth 0:32e7a5fadacc 227 /* printf("Address read");
ksnjth 0:32e7a5fadacc 228 printf("MS addr");
ksnjth 0:32e7a5fadacc 229 printf(uc_MS_Addr,BIN);
ksnjth 0:32e7a5fadacc 230 printf("LSAddr");
ksnjth 0:32e7a5fadacc 231 printf(uc_LS_Addr,BIN);*/
ksnjth 0:32e7a5fadacc 232 spi.write(uc_MS_Addr);
ksnjth 0:32e7a5fadacc 233
ksnjth 0:32e7a5fadacc 234
ksnjth 0:32e7a5fadacc 235 //send LS byte of address
ksnjth 0:32e7a5fadacc 236 spi.write(uc_LS_Addr);
ksnjth 0:32e7a5fadacc 237
ksnjth 0:32e7a5fadacc 238 //MOSI_pin = 1; //ADE90xx comm data format: MSB--LSB ; So need send out the MSB first.
ksnjth 0:32e7a5fadacc 239 // puc_TempData=puc_TempData+(us_Nr_Bytes-1);
ksnjth 0:32e7a5fadacc 240
ksnjth 0:32e7a5fadacc 241 for (us_iCounter=0;us_iCounter<us_Nr_Bytes;us_iCounter++)
ksnjth 0:32e7a5fadacc 242 {
ksnjth 0:32e7a5fadacc 243 *puc_TempData=spi.write(0);
ksnjth 0:32e7a5fadacc 244 puc_TempData++;
ksnjth 0:32e7a5fadacc 245 }
ksnjth 0:32e7a5fadacc 246 // MOSI_pin=1;
ksnjth 0:32e7a5fadacc 247 //Disable_ADE_CS;;
ksnjth 0:32e7a5fadacc 248 CS=1;
ksnjth 0:32e7a5fadacc 249 wait_ms(ADE9000_Comu_Delay_Value);
ksnjth 0:32e7a5fadacc 250 //enable back the interrupts because the communcation has finished
ksnjth 0:32e7a5fadacc 251 //__enable_interrupt();
ksnjth 0:32e7a5fadacc 252
ksnjth 0:32e7a5fadacc 253 }
ksnjth 0:32e7a5fadacc 254
ksnjth 0:32e7a5fadacc 255 uint8_t IsADE9078OrADE9000(void)
ksnjth 0:32e7a5fadacc 256 {
ksnjth 0:32e7a5fadacc 257
ksnjth 0:32e7a5fadacc 258 uint8_t uc_Read_Data[4];
ksnjth 0:32e7a5fadacc 259 uint8_t uc_iChipID = 0;
ksnjth 0:32e7a5fadacc 260
ksnjth 0:32e7a5fadacc 261 Read_ADE9000_SPI(0x472,0x4,uc_Read_Data);
ksnjth 0:32e7a5fadacc 262
ksnjth 0:32e7a5fadacc 263 for(int k=0;k<4;k++){
ksnjth 0:32e7a5fadacc 264 printf("Return Byte");
ksnjth 0:32e7a5fadacc 265 //printf(k);
ksnjth 0:32e7a5fadacc 266 // printf(uc_Read_Data[k],BIN);
ksnjth 0:32e7a5fadacc 267 }
ksnjth 0:32e7a5fadacc 268 if(uc_Read_Data[2] == 0x10)
ksnjth 0:32e7a5fadacc 269 uc_iChipID = 1;
ksnjth 0:32e7a5fadacc 270
ksnjth 0:32e7a5fadacc 271
ksnjth 0:32e7a5fadacc 272
ksnjth 0:32e7a5fadacc 273 return uc_iChipID;
ksnjth 0:32e7a5fadacc 274
ksnjth 0:32e7a5fadacc 275 }
ksnjth 0:32e7a5fadacc 276
ksnjth 0:32e7a5fadacc 277 void Write_ADE9000_SPI(uint16_t us_ADE_Addr, uint8_t uc_Nr_Bytes, uint8_t *puc_Reg_Data)
ksnjth 0:32e7a5fadacc 278 {
ksnjth 0:32e7a5fadacc 279 uint8_t uc_iCounter;
ksnjth 0:32e7a5fadacc 280 uint16_t us_iAddress;
ksnjth 0:32e7a5fadacc 281 uint8_t uc_MS_Addr;
ksnjth 0:32e7a5fadacc 282 uint8_t uc_LS_Addr;
ksnjth 0:32e7a5fadacc 283
ksnjth 0:32e7a5fadacc 284 us_iAddress = us_ADE_Addr;
ksnjth 0:32e7a5fadacc 285 us_iAddress = (us_iAddress << 4);
ksnjth 0:32e7a5fadacc 286 us_iAddress = (us_iAddress & 0xFFF7);
ksnjth 0:32e7a5fadacc 287
ksnjth 0:32e7a5fadacc 288
ksnjth 0:32e7a5fadacc 289 uc_LS_Addr = (uint8_t) us_iAddress;
ksnjth 0:32e7a5fadacc 290 uc_MS_Addr =(uint8_t) (us_iAddress >> 8);
ksnjth 0:32e7a5fadacc 291
ksnjth 0:32e7a5fadacc 292 wait_ms(ADE9000_Start_Delay_Value);
ksnjth 0:32e7a5fadacc 293 //Enable_ADE_CS;
ksnjth 0:32e7a5fadacc 294 CS=0;
ksnjth 0:32e7a5fadacc 295 wait_ms(ADE9000_Start_Delay_Value);
ksnjth 0:32e7a5fadacc 296
ksnjth 0:32e7a5fadacc 297
ksnjth 0:32e7a5fadacc 298 //send MS byte of address
ksnjth 0:32e7a5fadacc 299 spi.write(uc_MS_Addr);
ksnjth 0:32e7a5fadacc 300
ksnjth 0:32e7a5fadacc 301 //send LS byte of address
ksnjth 0:32e7a5fadacc 302 spi.write(uc_LS_Addr);
ksnjth 0:32e7a5fadacc 303
ksnjth 0:32e7a5fadacc 304
ksnjth 0:32e7a5fadacc 305 //ADE90xx comm data format: MSB--LSB ; So need send out the MSB first.
ksnjth 0:32e7a5fadacc 306 puc_Reg_Data=puc_Reg_Data;
ksnjth 0:32e7a5fadacc 307 for(uc_iCounter=0;uc_iCounter<uc_Nr_Bytes;uc_iCounter++)
ksnjth 0:32e7a5fadacc 308 {
ksnjth 0:32e7a5fadacc 309 spi.write(*puc_Reg_Data);
ksnjth 0:32e7a5fadacc 310 puc_Reg_Data++;
ksnjth 0:32e7a5fadacc 311 }
ksnjth 0:32e7a5fadacc 312
ksnjth 0:32e7a5fadacc 313 // Disable_ADE_CS;
ksnjth 0:32e7a5fadacc 314 CS=1;
ksnjth 0:32e7a5fadacc 315 wait_ms(ADE9000_Start_Delay_Value);
ksnjth 0:32e7a5fadacc 316 //enable back the interrupts because the communcation has finished
ksnjth 0:32e7a5fadacc 317 //__enable_interrupt();
ksnjth 0:32e7a5fadacc 318
ksnjth 0:32e7a5fadacc 319 }
ksnjth 0:32e7a5fadacc 320
ksnjth 0:32e7a5fadacc 321 static unsigned char SPI_MCUReadByte(void)
ksnjth 0:32e7a5fadacc 322 {
ksnjth 0:32e7a5fadacc 323
ksnjth 0:32e7a5fadacc 324 unsigned char i,rbyte=0;
ksnjth 0:32e7a5fadacc 325 /*
ksnjth 0:32e7a5fadacc 326 for(i=0;i<8;i++) //8 bit read
ksnjth 0:32e7a5fadacc 327 {
ksnjth 0:32e7a5fadacc 328 Low_ADE_SCLK; //Simulate clock signal
ksnjth 0:32e7a5fadacc 329 SPI_Delay(ADE9000_Comu_Delay_Value);
ksnjth 0:32e7a5fadacc 330 High_ADE_SCLK;
ksnjth 0:32e7a5fadacc 331 SPI_Delay(ADE9000_Comu_Delay_Value);
ksnjth 0:32e7a5fadacc 332 rByte<<=1;
ksnjth 0:32e7a5fadacc 333 rByte|=ADE_MISO_Data; //get read bit from MISO port
ksnjth 0:32e7a5fadacc 334 } */
ksnjth 0:32e7a5fadacc 335 rbyte = spi.write(0);
ksnjth 0:32e7a5fadacc 336 return rbyte; //return data
ksnjth 0:32e7a5fadacc 337
ksnjth 0:32e7a5fadacc 338 }
ksnjth 0:32e7a5fadacc 339
ksnjth 0:32e7a5fadacc 340 void readData(){
ksnjth 0:32e7a5fadacc 341 // printf("AVRMS");
ksnjth 0:32e7a5fadacc 342 Read_ADE9000_SPI(ADDR_AVRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 343 //printReadData(0x04);
ksnjth 0:32e7a5fadacc 344 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 345 //printf(data);
ksnjth 0:32e7a5fadacc 346 printf("\nAVRMS: ");
ksnjth 0:32e7a5fadacc 347 // printf(data);
ksnjth 0:32e7a5fadacc 348 float data1 = data*13.416/1000000;
ksnjth 0:32e7a5fadacc 349 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 350 // delay(500);
ksnjth 0:32e7a5fadacc 351
ksnjth 0:32e7a5fadacc 352 // printf("BVRMS");
ksnjth 0:32e7a5fadacc 353 Read_ADE9000_SPI(ADDR_BVRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 354 //printReadData(0x04);
ksnjth 0:32e7a5fadacc 355 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 356 //printf(data);
ksnjth 0:32e7a5fadacc 357 printf("BVRMS: ");
ksnjth 0:32e7a5fadacc 358 // printf(data);
ksnjth 0:32e7a5fadacc 359 data1 = data*13.417/1000000;
ksnjth 0:32e7a5fadacc 360 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 361 // delay(500);
ksnjth 0:32e7a5fadacc 362
ksnjth 0:32e7a5fadacc 363
ksnjth 0:32e7a5fadacc 364 // printf("CVRMS");
ksnjth 0:32e7a5fadacc 365 Read_ADE9000_SPI(ADDR_CVRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 366 //printReadData(0x04);
ksnjth 0:32e7a5fadacc 367 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 368 //printf(data);
ksnjth 0:32e7a5fadacc 369 printf("CVRMS: ");
ksnjth 0:32e7a5fadacc 370 // printf(data);
ksnjth 0:32e7a5fadacc 371 data1 = data*13.417/1000000;
ksnjth 0:32e7a5fadacc 372 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 373 // delay(500);
ksnjth 0:32e7a5fadacc 374
ksnjth 0:32e7a5fadacc 375 // printf("AIRMS");
ksnjth 0:32e7a5fadacc 376 Read_ADE9000_SPI(ADDR_AIRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 377 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 378 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 379 printf("Current A RMS : ");
ksnjth 0:32e7a5fadacc 380 // printf(data);
ksnjth 0:32e7a5fadacc 381 data1 = data*2.945/1000000;
ksnjth 0:32e7a5fadacc 382 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 383 wait_ms(250);
ksnjth 0:32e7a5fadacc 384
ksnjth 0:32e7a5fadacc 385 // printf("IRMS");
ksnjth 0:32e7a5fadacc 386 Read_ADE9000_SPI(ADDR_BIRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 387 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 388 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 389 // printf(data);
ksnjth 0:32e7a5fadacc 390 printf("Current B RMS : ");
ksnjth 0:32e7a5fadacc 391 // printf(data);
ksnjth 0:32e7a5fadacc 392 data1 = data*2.8238/1000000;
ksnjth 0:32e7a5fadacc 393 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 394 wait_ms(250);
ksnjth 0:32e7a5fadacc 395
ksnjth 0:32e7a5fadacc 396 // printf("IRMS");
ksnjth 0:32e7a5fadacc 397 Read_ADE9000_SPI(ADDR_CIRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 398 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 399 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 400 // printf(data);
ksnjth 0:32e7a5fadacc 401 printf("Current C RMS : ");
ksnjth 0:32e7a5fadacc 402 // printf(data);
ksnjth 0:32e7a5fadacc 403 data1 = data*2.8869/1000000;
ksnjth 0:32e7a5fadacc 404 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 405 wait_ms(250);
ksnjth 0:32e7a5fadacc 406
ksnjth 0:32e7a5fadacc 407 // printf("IRMS");
ksnjth 0:32e7a5fadacc 408 Read_ADE9000_SPI(ADDR_NIRMS,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 409 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 410 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 411 printf("Current N RMS : ");
ksnjth 0:32e7a5fadacc 412 //printf(data);
ksnjth 0:32e7a5fadacc 413 data1 = data*6.8815/1000000;
ksnjth 0:32e7a5fadacc 414 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 415 wait_ms(250);
ksnjth 0:32e7a5fadacc 416
ksnjth 0:32e7a5fadacc 417 // printf("IRMS");
ksnjth 0:32e7a5fadacc 418 Read_ADE9000_SPI(ADDR_CWATT,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 419 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 420 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 421 // printf(data);
ksnjth 0:32e7a5fadacc 422 printf("ACTIVE : ");
ksnjth 0:32e7a5fadacc 423 data1 = data*11.97/1000;
ksnjth 0:32e7a5fadacc 424 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 425 wait_ms(250);
ksnjth 0:32e7a5fadacc 426
ksnjth 0:32e7a5fadacc 427 // printf("IRMS");
ksnjth 0:32e7a5fadacc 428 Read_ADE9000_SPI(ADDR_CVAR,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 429 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 430 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 431 // printf(data);
ksnjth 0:32e7a5fadacc 432 printf("REACTIVE : ");
ksnjth 0:32e7a5fadacc 433 data1 = data*11.97/1000;
ksnjth 0:32e7a5fadacc 434 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 435 wait_ms(250);
ksnjth 0:32e7a5fadacc 436
ksnjth 0:32e7a5fadacc 437 // printf("IRMS");
ksnjth 0:32e7a5fadacc 438 Read_ADE9000_SPI(ADDR_CVA,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 439 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 440 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 441 // printf(data);
ksnjth 0:32e7a5fadacc 442 printf("APPARENT : ");
ksnjth 0:32e7a5fadacc 443 data1 = data*11.97/1000;
ksnjth 0:32e7a5fadacc 444 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 445 wait_ms(250);
ksnjth 0:32e7a5fadacc 446
ksnjth 0:32e7a5fadacc 447 // printf("IRMS");
ksnjth 0:32e7a5fadacc 448 Read_ADE9000_SPI(ADDR_APERIOD,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 449 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 450 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 451 // printf(data);
ksnjth 0:32e7a5fadacc 452 printf("AV FREQUENCY : ");
ksnjth 0:32e7a5fadacc 453 data1 = (8000.00*65536.00)/(data+1);
ksnjth 0:32e7a5fadacc 454 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 455
ksnjth 0:32e7a5fadacc 456 Read_ADE9000_SPI(ADDR_BPERIOD,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 457 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 458 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 459 // printf(data);
ksnjth 0:32e7a5fadacc 460 printf("BV FREQUENCY : ");
ksnjth 0:32e7a5fadacc 461 data1 = (8000.00*65536.00)/(data+1);
ksnjth 0:32e7a5fadacc 462 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 463
ksnjth 0:32e7a5fadacc 464 Read_ADE9000_SPI(ADDR_CPERIOD,0x04,uc_Read_Data);
ksnjth 0:32e7a5fadacc 465 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 466 data = decConvert(0x04);
ksnjth 0:32e7a5fadacc 467 // printf(data);
ksnjth 0:32e7a5fadacc 468 printf("CV FREQUENCY : ");
ksnjth 0:32e7a5fadacc 469 data1 = (8000.00*65536.00)/(data+1.00);
ksnjth 0:32e7a5fadacc 470 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 471 wait_ms(250);
ksnjth 0:32e7a5fadacc 472
ksnjth 0:32e7a5fadacc 473 uc_Write_Data[0]= 0b01110000;
ksnjth 0:32e7a5fadacc 474 uc_Write_Data[1]=0b0;
ksnjth 0:32e7a5fadacc 475 Write_ADE9000_SPI(ADDR_TEMP_CFG,0X02,uc_Write_Data);
ksnjth 0:32e7a5fadacc 476 Read_ADE9000_SPI(ADDR_TEMP_RSLT,0x02,uc_Read_Data);
ksnjth 0:32e7a5fadacc 477 // printReadData(0x04);
ksnjth 0:32e7a5fadacc 478 data = decConvert(0x02);
ksnjth 0:32e7a5fadacc 479 // printf(data);
ksnjth 0:32e7a5fadacc 480 printf("TEMPERATURE : ");
ksnjth 0:32e7a5fadacc 481 data1 = data*(-33233.00/65536.00)+656.00/32.00;
ksnjth 0:32e7a5fadacc 482 printf("%f \n",data1);
ksnjth 0:32e7a5fadacc 483 wait_ms(250);
ksnjth 0:32e7a5fadacc 484
ksnjth 0:32e7a5fadacc 485
ksnjth 0:32e7a5fadacc 486 printf("************************");
ksnjth 0:32e7a5fadacc 487
ksnjth 0:32e7a5fadacc 488 }
ksnjth 0:32e7a5fadacc 489
ksnjth 0:32e7a5fadacc 490
ksnjth 0:32e7a5fadacc 491
ksnjth 0:32e7a5fadacc 492
ksnjth 0:32e7a5fadacc 493
ksnjth 0:32e7a5fadacc 494
ksnjth 0:32e7a5fadacc 495 int main() {
ksnjth 0:32e7a5fadacc 496
ksnjth 0:32e7a5fadacc 497 configure();
ksnjth 0:32e7a5fadacc 498
ksnjth 0:32e7a5fadacc 499 while(1){
ksnjth 0:32e7a5fadacc 500 readData();
ksnjth 0:32e7a5fadacc 501 myled=!myled;
ksnjth 0:32e7a5fadacc 502 }
ksnjth 0:32e7a5fadacc 503 }