📄 calibrate.c
字号:
/********************************************
公司名称:
文 件 名:
版 本 号:
程序设计:
说 明:
完成日期:
修改日期:
功能摘要:
**********************************************/
#define _Calibration
#include "includes.h"
void Calibrate(void);
void SetKey(void);
void Calibrate(void)
{
DispBuf[ROW_5] = HIDE; //左面第一个数码管消隐
uchar AD_Buf[4];
uint16 i;
Start_Calibrate:
TaskID = 1;
IO_HighAlarm = ON;
fH_Alarm = OFF;
IO_LowAlarm = ON;
fL_Alarm = OFF; //关闭报警
Rest5460A();
Initi5460A();
CS_AD_A = 0;
_delay_us(3);
CS_AD_B = 0;
Wr_ADByte(0xa0); //发校准命令
_delay_us(3);
CS_AD_A = 1;
CS_AD_B = 1;
Dis_info(&DispBuf[ROW_4],"adj ");
fDispNow = 1;
DispProcess();
while (!UP_KEY) wdt_reset();
SetKey(); //等待SET键按下
//--------------------------------------
Dis_info(&DispBuf[ROW_4],"in-1");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_A = 0;
CS_AD_B = 0;
_delay_us(3);
Wr_ADByte(0xDE); //发同时增益校准命令
_delay_us(3);
CS_AD_A = 1;
CS_AD_B = 1;
Dis_info(&DispBuf[ROW_4],"run ");
fDispNow = 1;
DispProcess();
i = 500;
do{
_delay_ms(10);
wdt_reset();
}while(--i);
Clear5460A();
Dis_info(&DispBuf[ROW_4],"in-0");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_A = 0;
_delay_us(3);
CS_AD_B = 0;
Wr_ADByte(0xDD); //发同时偏移校准命令
_delay_us(3);
CS_AD_A = 1;
CS_AD_B = 1;
Dis_info(&DispBuf[ROW_4],"run ");
fDispNow = 1;
DispProcess();
i = 500;
do{
_delay_ms(10);
wdt_reset();
}while(--i);
Clear5460A();
//-----------------------------------
#if 1
CS_AD_A = 0;
CS_AD_B = 0;
Wr_ADByte(0xe8); //启动CS5460A
CS_AD_A = 1;
CS_AD_B = 1;
Dis_info(&DispBuf[ROW_4],"in-1");
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," ua ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_A = 0;
Rd5460A(AD_Buf,0x18); //读A相电压值
CS_AD_A = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x8234)); //0x411a=16 666
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," ia ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_A = 0;
Rd5460A(AD_Buf,0x16); //读A相电流值
CS_AD_A = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x208d)); //0x208d=8 333
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," pa ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_A = 0;
Rd5460A(AD_Buf,0x14); //读A相电压值
CS_AD_A = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x6f20)); //0x6f20=28 448
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," uc ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_B = 0;
Rd5460A(AD_Buf,0x18); //读A相电流值
CS_AD_B = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x411a)); //0x411a=16 666
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," ic ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_B = 0;
Rd5460A(AD_Buf,0x16); //读A相功率值
CS_AD_B = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x208d)); //0x208d=8 333
fDispNow = 1;
DispProcess();
SetKey();
Dis_info(&DispBuf[ROW_4]," pc ");
fDispNow = 1;
DispProcess();
SetKey();
CS_AD_B = 0;
Rd5460A(AD_Buf,0x14); //读A相功率值
CS_AD_B = 1;
DoPot(&DispBuf[0],DealRms(AD_Buf,0x6f20)); //0x6f20=28 448
fDispNow = 1;
DispProcess();
SetKey();
#endif
//------------------------------------------------
Dis_info(&DispBuf[ROW_4],"end ");
fDispNow = 1;
DispProcess();
while (1)
{
while (1) {
wdt_reset();
if (!SET_KEY)
break;
}
i = 100;
do {
wdt_reset();
_delay_ms(10);
_delay_ms(10);
if (SET_KEY)
goto Start_Calibrate;
} while (--i);
Save_Calibrate();
while (1);
}
}
//-------------------------------------------
void SetKey(void)
{
while (1) {
wdt_reset();
if (!SET_KEY)
{
_delay_ms(10);
if (!SET_KEY)
{
while (1){
if (SET_KEY)
return;
wdt_reset();
}
}
}
}
}
//----------------------------------------------
/*
校准控制:
B7 B6 B5 B4 B3 B2 B1 B0
1 1 0 V I R G O
[V.I]:指定校准通道。
00=禁止
01=校准电流通道
10=校准电压通道
11=同时校准
R:交,直流校准选项
0=DC直流校准
1=AC交流校准
G:指定增益校准
0=正常运行
1=执行增益校准
O:指定偏移量校准
0=正常运行
1=执行偏移量校准
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -