📄 ade7758.c
字号:
void main()
{
1. char *ptr3;
2. SYSTEM_init();
3. UART_1_CPutString(" ADE 7758 Measurement\n\n\r");
4. ADE7758_init();
while(1)
{
//phaseA();
1. write_8bit(0x97,0x0D);// LCYMODE reg for Pahse A
delay(20);
2. write_16bit(0x9C,100); // No of Half Line cycles
delay(20);
3. read_24bit(0x1A);// Restting the Status Register
4. while( !((read_24bit(0x19)) & 0x1000)); // Checking the LENGRY bit ie energy accumulted
5. read_16value = read_16bit(0x01);
awatt = read_16value;
6. read_16value = read_16bit(0x07);
ava = read_16value;
7. UART_1_CPutString(" AWEnergy:");
UART_1_PutSHexInt(awatt);
UART_1_PutCRLF();
8. UART_1_PutSHexInt(ava);
UART_1_PutCRLF();
9. /*f1 = awatt;
f1 = ((f1/60192.00)*115600.00);
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}*/
read_24bit(0x1A); //Restting the Status Register
UART_1_PutCRLF();
}
}
void SYSTEM_init(void)
{
M8C_EnableGInt;
I2C_CFG &= 0xFC;
UART_1_Start(UART_1_PARITY_EVEN);
SPIM_1_Start(SPIM_1_SPIM_MODE_0 | SPIM_1_SPIM_MSB_FIRST);
Timer16_1_EnableInt ();
Timer16_1_WritePeriod(2000);
Timer16_1_WriteCompareValue(0);
Timer16_1_Start();
}
void ADE7758_init(void)
{
PRT0DR &= (~4);// salve select P0.3
1. write_8bit(0xA3,0x00);// 00000000b - intergrator disable,0.5v ref // Gain Reg
delay(50);
2. write_8bit(0xC2,0x00);// Making The WDIV for ZERO for accumulation reg at .524 sec
delay(50);
3. write_16bit(0xAA,0x000);// writing the WGAN for 000
delay(50);
4. write_16bit(0xB9,0x00);// writing the AWATTOS for 000
delay(50);
5. write_8bit(0xC4,0x00);//Making The VADIV for ZERO for accumulation reg at 1.05 sec
delay(50);
6. write_16bit(0xB0,0x000);// writing the AVAG for 000
delay(50);
7. write_16bit(0xBC,0x00);// writing the AVASOS for 000
delay(50);
8. write_16bit(0xA7,0x00);// writing the VRMSOSfor 000
delay(50);
9.write_8bit(0x93,0x04);// 00000100b Enable HPF and LPF is selected
delay(50);
10. write_8bit(0x96,0x00);//COMPMODE Reg for AWATTHR FOR VA*IA..ABS disabled and No load Disabled
delay(50);
}
void phaseA(void)
{
1. write_8bit(0x94,0x04);
2. read_24bitvalue = read_24bit(0x0D); // To read the VRMS Reg
3. f1 = (((read_24bitvalue * 500.00)/0x193504)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_CPutString("\n\rVRMS A : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
f1 =0.0;
}
1.write_8bit(0x93,0x04);// 00000100b Enable HPF and default LPF is selected .//OPMODE Reg
2. read_24bitvalue = read_24bit(0x0A); // to Read the IRMS reg
3. f1 = (((read_24bitvalue * 500.00)/0x1D51C1)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1); // converting to floating string
if(!sta1)
{
UART_1_CPutString("\n\rIRMS A : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}
}
void phaseB(void)
{
write_8bit(0x94,0x04);
read_24bitvalue = read_24bit(0x0E); // To read the VRMS Reg
f1 = (((read_24bitvalue * 500.00)/0x193504)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1);
if(!sta1)
{
UART_1_CPutString("\n\rVRMS B : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
f1 =0.0;
}
write_8bit(0x93,0x04);// 00000100b Enable HPF and default LPF is selected .//OPMODE Reg
read_24bitvalue = read_24bit(0x0B); // to Read the IRMS reg
f1 = (((read_24bitvalue * 500.00)/0x1D51C1)/1.4145);// for 50 Hz 193504 // 60Hz- 1902BD
ptr1 = ftoa(f1,&sta1); // converting to floating string
if(!sta1)
{
UART_1_CPutString("\n\rIRMS B : ");
UART_1_PutString(ptr1);
UART_1_PutCRLF();
}
}
void intoa(unsigned char *p,int value,int base)
{
int i=0,j=0,t=0,bit=0;
if(value & 8000)
value = 0x10000 - value,bit=1;
while(value)
{
p[j++]=value%10+'0';
value /= 10;
}
if(bit)
p[j] = '-';
p[j+1] =0;
while(i<j)
t=p[i],p[i]=p[j],p[j]=t,++i,--j;
}
void transmit_read(unsigned char cmd)
{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_TX_BUFFER_EMPTY ) );
SPIM_1_SendTxData(cmd);
}
void transmit_write(unsigned char cmd)
{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_TX_BUFFER_EMPTY ) );
SPIM_1_SendTxData(0);
SPIM_1_SendTxData(cmd);
}
unsigned char receive ()
{
while( ! (SPIM_1_bReadStatus() & SPIM_1_SPIM_RX_BUFFER_FULL ) );
rxvalue = SPIM_1_bReadRxData();
return rxvalue;
}
void write_8bit(unsigned char reg,unsigned char value)
{
unsigned char rv=0;
timeoutcnt=0;
while(1)
{
write_8bit1(reg,value);
delay(100);
rv = read_8bit(reg);
if( (rv == value) || (timeoutcnt > 50))
break;
}
}
void write_8bit1(unsigned char reg1,unsigned char value1)
{
transmit_write(reg1);
delay(20);
receive();
transmit_write(value1);
delay(20);
receive();
delay(10);
}
unsigned char read_8bit(unsigned char reg)
{
unsigned char regvalue0=0;
transmit_read(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue0 = receive();
return(regvalue0);
}
void write_16bit(unsigned char reg,unsigned int value1)
{
unsigned int read_16value = 0;
timeoutcnt=0;
while(1)
{
write_16bit1(reg,value1);
delay(100);
read_16value = read_16bit(reg);
if((read_16value == value1) || (timeoutcnt > 50))
break;
}
}
void write_16bit1(unsigned char reg,unsigned int value1)
{
unsigned int read_16value;
unsigned char a1,a2;
a1 = value1 >> 8;
a2 = (unsigned char)value1;
transmit_write(reg);
delay(10);
transmit_read(a1);
delay(10);
transmit_read(a2);
delay(10);
receive();
delay(10);
}
void write_24bit(unsigned char reg,long value1)
{
unsigned int read_16value;
unsigned char a1,a2,a3;
a1 = value1 >> 16;
a2 = value1 >> 8;
a2 = (unsigned char)value1;
transmit_write(reg);
delay(10);
transmit_read(a1);
delay(10);
transmit_read(a2);
delay(10);
transmit_read(a3);
delay(10);
receive();
delay(10);
}
unsigned int read_16bit(unsigned char reg)
{
unsigned int read_16value=0;
unsigned char read_value,regvalue1,regvalue2;
transmit_read(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue1 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue2 = receive();
read_16value = regvalue1;
read_16value <<= 8;
read_16value |= regvalue2;
regvalue1 = 0;
regvalue2 = 0;
return(read_16value);
}
unsigned long read_24bit(unsigned char reg)
{
unsigned char regvalue0,regvalue1,regvalue2;
long read_24bitvalue = 0;
transmit_write(reg);
delay(10);
receive();
transmit_read(0x00);
delay(10);
regvalue0 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue1 = receive();
delay(10);
transmit_read(0x00);
delay(10);
regvalue2 = receive();
read_24bitvalue = regvalue0 ;
read_24bitvalue <<= 16;
read_24bitvalue |= (((unsigned int)regvalue1) << 8);
read_24bitvalue |= regvalue2;
regvalue0 = 0;
regvalue1 = 0;
regvalue2 = 0;
return (read_24bitvalue);
}
void delay(long wait)
{
while(wait--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -