📄 leddim.c
字号:
if(((BYTE_P)&ReadPower)[1]&0x80)
{
ReadPower=0x00;
}
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
G_KWH_Power =(C_Standard_Powr*ReadPower)/(G_Calibration_Max_Power);
((BYTE_P)&G_KWH_Power)[0]=0x99;
// User_RF_Send_ZW_Data(G_KWH_Power);
// User_Heguijin_SEND("G_KWH_Power=",&G_KWH_Power,sizeof(G_KWH_Power));
// User_Heguijin_SEND("KW_NOT_H_ReadPower=",&ReadPower,sizeof(ReadPower));
}
}
/************************************************************/
/* Meter Report 3byte command class structs */
/************************************************************/
//typedef struct _ZW_METER_REPORT_3BYTE_FRAME_
//{
// BYTE cmdClass; /* The command class */
// BYTE cmd; /* The command */
// BYTE meterType; /**/
// BYTE properties1; /* masked byte */
// BYTE meterValue1; /* MSB */
// BYTE meterValue2;
// BYTE meterValue3; /* LSB */
//} ZW_METER_REPORT_3BYTE_FRAME;
BYTE User_Read_Power_Value() // read ok is 1,fial 0
{
BYTE Data_H,Data_M,Data_L;
DWORD ReadPower ;
DWORD ReadPower1 ;
if(Wait_DRDY_High())
{
ReadPower1=0x89123456;
// F_WriteCS5460(0x40,0x01,0x01,0x01);
F_ReadCS5460(Command_Read_Power,&((BYTE_P)&ReadPower1)[1],&((BYTE_P)&ReadPower1)[2],&((BYTE_P)&ReadPower1)[3]); // Command_Read_Power Read Power Value
if(((BYTE_P)&ReadPower1)[1]&0x80)
{
ReadPower=0x00;
}
// F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
// ReadPower1=0x12345678;
// F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
// F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
User_RF_Send_ZW_Data(ReadPower1);
return 1;
}
else
{
return 0;
}
}
BYTE Wait_DRDY_High() // success i,fial 0
{
DWORD ReadPower;
F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
// User_RF_Send_ZW_Data(ReadPower);
User_Heguijin_SEND("Calibration:CMD_Read_Config_DRDY=",(BYTE_P)&ReadPower,sizeof(ReadPower));
if(((BYTE_P)&ReadPower)[1]&C_Bit_DRDY)
{
// F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
return 1;
}
else
{
return(0);
}
}
void F_Enter_Calibrate_Task()
{
if(Calibration_Task_Mode==0)
{
CS5460_Reset();
F_SYNC_COMMAND();
F_WriteCS5460(Command_Write_Confgig_R,0x01,0x00,0x01);
ZW_UART_SEND_STRING("Enter calibrate Mode \n");
statusLED = 1;
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
F_Write_CMD_CS5460(0xA0); // Halt
Relay_1;
T_Calibration_Cnt=0;
Calibration_Task_Mode=1;
}
else if(Calibration_Task_Mode==1)
{
Relay_1 ;
ZW_UART_SEND_STRING("Prepare calibrate Command \n");
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
F_Write_CMD_CS5460(C_CMD_Calibration);
Calibration_Task_Mode=2;
}
else if(Calibration_Task_Mode==2)
{
Relay_1 ;
if(T_Calibration_Cnt++==10)
{
if(Wait_DRDY_High())
{
User_Calibration_Read_Save_IgnVgn();
Calibration_Task_Mode=3;
T_Calibration_Cnt=0;
}
}
}
else if(Calibration_Task_Mode==3)
{
Relay_1 ;
ZW_UART_SEND_STRING(" Reading AD form CS5460 \n");
if(F_Read_Calibration_Power())
{
if(T_Calibration_Cnt++==15)
{
statusLED = 0xff;
ZW_UART_SEND_STRING(" Reading AD form CS5460 and write to Eeprom Completed ! \n");
LED_ON(2);
Calibration_Task_Mode=4;
Relay_0;
if (LedTimerPollHandle)
{
ZW_TIMER_CANCEL(LedTimerPollHandle);
LedTimerPollHandle = 0;
}
}
}
}
}
void User_Calibration_Read_Save_IgnVgn()
{
DWORD Test_Temp=0;
DWORD Test_Temp_1=0;
DWORD ReadPower=0;
ZW_UART_SEND_STRING("Reading Calibrate Ign and Vgn \n");
F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);
F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);
User_Heguijin_SEND("Read_Calibration_From_CS5460_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
User_Heguijin_SEND("Read_Calibration_From_CS5460_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
User_Heguijin_SEND("Read_cali_Mode_From_Eeprom_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
User_Heguijin_SEND("Read_cali_Mode_From_Eeprom_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
// F_WriteCS5460(Command_WriteCalib_Lgn,((BYTE_P)&G_Calibration_Max_Ign)[1],((BYTE_P)&G_Calibration_Max_Ign)[2],((BYTE_P)&G_Calibration_Max_Ign)[3]);
// F_WriteCS5460(Command_WriteCalib_Vgn,((BYTE_P)&G_Calibration_Max_Vgn)[1],((BYTE_P)&G_Calibration_Max_Vgn)[2],((BYTE_P)&G_Calibration_Max_Vgn)[3]);
// F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
// F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]); // Command_Read_Power Read Power Value
ZW_UART_SEND_STRING(" CS5460 Vgn and Ign Rewritting \n");
User_Ign_Vgn_ReloadFromandRewriteToCS5460();
ZW_UART_SEND_STRING(" CS5460 configration completed \n");
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
F_Write_CMD_CS5460(CMD_Start_ADC);
ZW_UART_SEND_STRING(" Sended Start_ADC Command done and prepare to Read KW AD\n");
// ZW_TIMER_START(User_Read_Power_Value, 100, TIMER_FOREVER);
/*
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power,&Test_Temp,sizeof(Test_Temp));
if(Test_Temp_1==G_Calibration_Max_Vgn)
{
User_RF_Send_ZW_Data(Test_Temp);
LED_ON(2);
}
else
{
User_RF_Send_ZW_Data(G_Calibration_Max_Vgn);
LED_OFF(2);
}
*/
}
BYTE F_Read_Calibration_Power()
{
DWORD ReadPower;
if(Wait_DRDY_High())
{
G_Calibration_Max_Power=0;
F_ReadCS5460(Command_Read_Power,&((BYTE_P)&G_Calibration_Max_Power)[1],&((BYTE_P)&G_Calibration_Max_Power)[2],&((BYTE_P)&G_Calibration_Max_Power)[3]);
ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);
ZW_MEM_PUT_BYTE(C_FlashAddr_Calibration_OK,C_Calibration_Flag); // Marked that it have calibrated.
User_RF_Send_ZW_Data(G_Calibration_Max_Power);
User_Heguijin_SEND(" Mode Calbraion G_Calibration_Max_Power=",(BYTE_P)&G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
// Relay_0;
Relay_1 ;
return 1;
}
else
{
return 0;
}
}
void User_Load_CS5460_Configraiton()
{
DWORD Test_Temp;
if(ZW_MEM_GET_BYTE(C_FlashAddr_Calibration_OK)==C_Calibration_Flag )
{
ZW_UART_SEND_STRING("Enter User Load CS5460 Configration \n");
User_Ign_Vgn_ReloadFromandRewriteToCS5460();
ZW_UART_SEND_STRING(" Load Ign and Vgn completed \n");
//-----------------------------------------------------------------------------------------------------------
// ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power,&Test_Temp,sizeof(Test_Temp));
User_RF_Send_ZW_Data(G_Calibration_Max_Power);
if(G_Calibration_Max_Power==0)
G_Calibration_Max_Power=0x26ff85;
// G_Calibration_Max_Vgn=0x88345678;
// F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);
// User_RF_Send_ZW_Data(G_Calibration_Max_Vgn);
// G_Calibration_Max_Ign=0x88123456;
// F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);
// User_RF_Send_ZW_Data(G_Calibration_Max_Ign);
}
else
{
ZW_UART_SEND_STRING(" CS5460 Not Calibrate \n");
G_Calibration_Max_Power=0x26ff85;
}
}
/*
txBuf.ZW_MeterReport8byteFrame.cmdClass = COMMAND_CLASS_METER ;
txBuf.ZW_MeterReport8byteFrame.cmd = METER_REPORT;
txBuf.ZW_MeterReport8byteFrame.meterType = 0x01;
txBuf.ZW_MeterReport8byteFrame.properties1 = 0x64 ; // Precision=3 bit,scale = 2 bit 00,size =3 bit =0x02
txBuf.ZW_MeterReport8byteFrame.meterValue1 = 8;
txBuf.ZW_MeterReport8byteFrame.meterValue2 = 8; // ((BYTE_P)&G_KWH_Power)[2];
txBuf.ZW_MeterReport8byteFrame.meterValue3 = G_TEST ; //((BYTE_P)&G_KWH_Power)[1];
txBuf.ZW_MeterReport8byteFrame.meterValue4 = 8 ; // ((BYTE_P)&G_KWH_Power)[0];
txBuf.ZW_MeterReport8byteFrame.meterValue1 = ((BYTE_P)&G_Last_Power_Value)[3];
txBuf.ZW_MeterReport8byteFrame.meterValue2 = ((BYTE_P)&G_Last_Power_Value)[2];
txBuf.ZW_MeterReport8byteFrame.meterValue3 = ((BYTE_P)&G_Last_Power_Value)[1];
txBuf.ZW_MeterReport8byteFrame.meterValue4 = ((BYTE_P)&G_Last_Power_Value)[0];
ZW_SEND_DATA(NODE_BROADCAST, (BYTE *)&txBuf, sizeof(txBuf.ZW_MeterReport8byteFrame), TRANSMIT_OPTION_NO_ROUTE, NULL);
*/
void User_Ign_Vgn_ReloadFromandRewriteToCS5460()
{
CS5460_Reset();
F_SYNC_COMMAND();
F_WriteCS5460(Command_Write_Confgig_R,0x01,0x00,0x01);
ZW_UART_SEND_STRING(" CS5460 Reset done \n");
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Power=",(BYTE_P)&G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
F_WriteCS5460(Command_WriteCalib_Lgn,((BYTE_P)&G_Calibration_Max_Ign)[1],((BYTE_P)&G_Calibration_Max_Ign)[2],((BYTE_P)&G_Calibration_Max_Ign)[3]);
F_WriteCS5460(Command_WriteCalib_Vgn,((BYTE_P)&G_Calibration_Max_Vgn)[1],((BYTE_P)&G_Calibration_Max_Vgn)[2],((BYTE_P)&G_Calibration_Max_Vgn)[3]);
F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);
F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);
User_Heguijin_SEND("Read_From_CS5460_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
User_Heguijin_SEND("Read_From_CS5460_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
}
void Write8BitData(BYTE WrDataBuff)
{
int i;
for(i=0;i<8;i++)
{
if(WrDataBuff&0x80)
SET_1(P_MOSI); // P_MOSI=1;
else
SET_0(P_MOSI) ; // P_MOSI=0;
CLK_UPandDown();
WrDataBuff<<=1;
}
delay(30);
}
void Read8BitData( BYTE_P pWrDataBuff)
{
int i;
BYTE Rx_Temp=0;
SET_1(P_MOSI) ; //CS5460A SPI's SDI=1
for(i=0;i<8;i++)
{
Rx_Temp<<=1;
if(PIN_GET(P_MISO)!=0)
{
Rx_Temp|=1;
}
CLK_DownandUP();
}
delay(30);
*pWrDataBuff=Rx_Temp;
}
/*
void Read8BitData( BYTE_P pWrDataBuff)
{
int i;
*pWrDataBuff=0;
SET_1(P_MOSI) ; //CS5460A SPI's SDI=1
for(i=0;i<8;i++)
{
*pWrDataBuff<<=1;
// if(MISO==1)
if(PIN_GET(P_MISO)!=0)
{
*pWrDataBuff|=1;
}
// CLK_DownandUP();
DELAY_US();
SET_0(P_SCK);
DELAY_US();
if(i==6)
{
SET_0(P_MOSI) ;
}
SET_1(P_SCK);
DELAY_US();
}
delay(30);
}
*/
void F_WriteCS5460(BYTE Command,BYTE Data_H,BYTE Data_M,BYTE Data_L)
{
SET_0(P_SCK);
SET_0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -