⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calibrate.c

📁 cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表
💻 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 + -