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

📄 cs5463.c

📁 著名的CS5463抄表模块
💻 C
📖 第 1 页 / 共 4 页
字号:
						Calibration(0xce, IGN, &pADCoefTemp->dwIACGain, iIndex); //0xce=IAC gain
						Print("标定成功...");
						Print("\r\n 如果要保存以上的标定参数,请键入 'y';否则复位系统:");
						while (GetChar() != 'y')  OSTimeDly(10);
						SaveParam((DWORD)&p_gcSysParam->sADCoef[3],(BYTE*)pADCoefTemp,sizeof(SADCoef));
						break;			
					case 'x':
						break;
					default:
						break;
                  	}
					if(i == 'x')
		            {
						break;
	                } 
	            }
				break;
		case '3':
			    InitAdc_cs5460();	
				while(1)
		        {
		            Print("\r\n << 直流量的标定 >>");
                    Print("\r\n 1  0V的标定");
		            Print("\r\n 2. 5V的标定");
		            Print("\r\n x. 退出标定");	
                 //   pADCoefTemp = pADCoef +3;;
				    i = GetChar();
				    iIndex =3;
				    switch(i)
					{

					case '1':
						Print("\r\n 0V的标定");
						Print("\r\n直流电压输入为0.00V,就绪后键入'g':");
						while (GetChar() != 'g')  OSTimeDly(10); 
						Print("\r\n 请等待几秒钟...");
						GetAdcValue_cs5460(dwValue);
						iValue = dwValue[0] & 0x00ffffff;
					    if(dwValue[0] & 0x00800000 )  //AD的原始数据为负数
                            iValue |= 0xff000000;  //符号位扩展
						SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw0Value,(BYTE*)&iValue,sizeof(DWORD));
                        Print("标定成功...");
						break;
					case '2':
						Print("\r\5V的标定 ");
						Print("\r\n直流电压输入为5.00V,就绪后键入'g':");
						while (GetChar() != 'g')  OSTimeDly(10); 
						Print("\r\n 请等待几秒钟...");
						GetAdcValue_cs5460(dwValue);
						iValue = dwValue[0] & 0x00ffffff;
					    if(dwValue[0] & 0x00800000 )  //AD的原始数据为负数
                            iValue |= 0xff000000;  //符号位扩展
						SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw5Value,(BYTE*)&iValue,sizeof(DWORD));
                        Print("标定成功...");
						break;   
					case 'x':
						break;
					default:
						break;
                  	}
					if(i == 'x')
		            {
						break;
	                } 
	            }
				break;
		case '4':
			    InitAdc_cs5460();	
				while(1)
		        {
		            Print("\r\n << PT100温度传感器的标定 >>");
                    Print("\r\n 1  100欧姆的标定");
		            Print("\r\n 2. 200欧姆的标定");
		            Print("\r\n x. 退出标定");	
                 //   pADCoefTemp = pADCoef +3;;
				    i = GetChar();
				    iIndex =3;
				    switch(i)
					{

					case '1':
						Print("\r\n 100欧姆的标定");
						Print("\r\n接入电阻约为100欧姆,就绪后键入'g':");
						while (GetChar() != 'g')  OSTimeDly(10); 
						Print("\r\n 请等待几秒钟...");
						GetAdcValue_cs5460(dwValue);
						iValue = dwValue[1] & 0x00ffffff;
					    if(dwValue[1] & 0x00800000 )  //AD的原始数据为负数
                            iValue |= 0xff000000;  //符号位扩展
						SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw100Value,(BYTE*)&iValue,sizeof(DWORD));
                        Print("标定成功...");
						break;
					case '2':
						Print("\r\n200欧姆的标定 ");
						Print("\r\n接入电阻约为200欧姆,就绪后键入'g':");
						while (GetChar() != 'g')  OSTimeDly(10); 
						Print("\r\n 请等待几秒钟...");
						GetAdcValue_cs5460(dwValue);
						iValue = dwValue[1] & 0x00ffffff;
					    if(dwValue[1] & 0x00800000 )  //AD的原始数据为负数
                            iValue |= 0xff000000;  //符号位扩展
						SaveParam((DWORD)&p_gcSysParam->sCs5460Coef.dw200Value,(BYTE*)&iValue,sizeof(DWORD));
                        Print("标定成功...");
						break;  
					case 'x':
						break;
					default:
						break;
                  	}
					if(i == 'x')
		            {
						break;
	                } 
	            }
				break;
		  case 'x':
		        Print("\r\n 请复位系统...");
		        while(1)
		        {
		           OSTimeDly(10);
		        }
			    return FALSE;
		  default:
			    break;
	   }
  }
}


void InitAdcSelCommand(void) /*初始化AD的片选命令*/ /*mod,lyq,2007-03-07 采用const方式的定义,则该函数没有必要了*/
{
   /*  BYTE i;
	 //********针对读取有效值时,在中断中需要用到的片选命令*******
	for(i=0; i<8; i++)  //片选A
	{
        dwregSet_RMS[i] = ADCSB | ADCSC | ADCSO;
        dwregClr_RMS[i] = ADCSA;
	}
	for(; i<14; i++)//片选B
	{
        dwregSet_RMS[i] = ADCSA | ADCSC | ADCSO;
        dwregClr_RMS[i] = ADCSB;
	}
	for(; i<20; i++)//片选C
	{
        dwregSet_RMS[i] = ADCSA | ADCSB | ADCSO;
        dwregClr_RMS[i] = ADCSC;
	}
	for(; i<24; i++)//片选O
	{
        dwregSet_RMS[i] = ADCSA | ADCSB | ADCSC;
        dwregClr_RMS[i] = ADCSO;
	}
    for(; i<26; i++)  //片选A
	{
        dwregSet_RMS[i] = ADCSB | ADCSC | ADCSO;
        dwregClr_RMS[i] = ADCSA;
	}
	dwregClr_RMS[i] = 0;
	dwregSet_RMS[i] = ADCSA | ADCSB | ADCSC | ADCSO;

    //****针对读取波形时,在中断中需要用到的片选命令***********
    for(i=0; i<2; i++)  //片选A
	{
        dwregSet_Wav[i] = ADCSB | ADCSC | ADCSO;
        dwregClr_Wav[i] = ADCSA;
	}
	for(; i<4; i++)//片选B
	{
        dwregSet_Wav[i] = ADCSA | ADCSC | ADCSO;
        dwregClr_Wav[i] = ADCSB;
	}
	for(; i<6; i++)//片选C
	{
        dwregSet_Wav[i] = ADCSA | ADCSB | ADCSO;
        dwregClr_Wav[i] = ADCSC;
	}
	for(; i<9; i++)  //片选A
	{
        dwregSet_Wav[i] = ADCSB | ADCSC | ADCSO;
        dwregClr_Wav[i] = ADCSA;
	}
	dwregClr_Wav[i] = 0;
	dwregSet_Wav[i] = ADCSA | ADCSB | ADCSC | ADCSO;
*/
}
void InitAdcCommand(void) /*mod,lyq,2007-03-07 采用const方式的定义,则该函数没有必要了*/
{
	byAdcSampleType =0;
    byAdcCommandIndex = 0;
	byStartWaveSample =0;
 /*   dwWaveSampleCount = 0;
	AdcCommandData[0] = SR; //视在功率
	AdcCommandData[1] = Pactive;//有功功率
    AdcCommandData[2] = Qavg;//平均无功功率(90°移相)
	AdcCommandData[3] = PF;   //功率因数   
	AdcCommandData[4] = VRMSR; //电压有效值 
    AdcCommandData[5] = IRMSR; //电流有效值 
	AdcCommandData[6] = TR;   //温度
	AdcCommandData[7] =  FrequencyR;  //频率
    //B相读命令对应的寄存器
    AdcCommandData[8] = SR; //视在功率                
	AdcCommandData[9] = Pactive;//有功功率            
	AdcCommandData[10] = Qavg;//平均无功功率(90°移相) 
    AdcCommandData[11] = PF;    //功率因数                       
    AdcCommandData[12] = VRMSR;  //电压有效值                  
    AdcCommandData[13] = IRMSR;  //电流有效值                    
    //C相读命令对应的寄存器
    AdcCommandData[14] = SR; //视在功率                
	AdcCommandData[15] = Pactive;//有功功率            
	AdcCommandData[16] = Qavg;//平均无功功率(90°移相) 
    AdcCommandData[17] = PF;   //功率因数                              
    AdcCommandData[18] = VRMSR;  //电压有效值                      
    AdcCommandData[19] = IRMSR;  //电流有效值 
	//零序读命令对应的寄存器
    AdcCommandData[20] = VRMSR;  //电压有效值                       
    AdcCommandData[21] = IRMSR;  //电流有效值 
    AdcCommandData[22] = STATUSR;  // 状态寄存器 读          
    AdcCommandData[23] = STATUSR;  // 状态寄存器(写)             
    //A相写命令对应的寄存器
    AdcCommandData[24] = STATUSR;  // 状态寄存器     (写)              
    AdcCommandData[25] = MASKR;    // 中断屏蔽 (写)       
	for(i=0; i<23; i++)
	{
         ptr =(BYTE*)&dwReadAdcCommand[i];
		 ptr +=3;
         *ptr --= ((AdcCommandData[i] <<1) & 0x3e);
		 *ptr --=  SYNC0;
   	     *ptr --=  SYNC0;
   	     *ptr --=  SYNC0;
	}
	//写状态寄存器,清除中断标志
    ptr =(BYTE*)&dwReadAdcCommand[23];
    ptr +=3;          
    *ptr --= ( (AdcCommandData[23] <<1) | 0x40 ) ;
    *ptr --= 0xff;
    *ptr --= 0xff;
    *ptr --= 0xff;
    //写状态寄存器,清除中断标志
    ptr =(BYTE*)&dwReadAdcCommand[24];
    ptr +=3;          
    *ptr --= ( (AdcCommandData[24] <<1) | 0x40 ) ;
    *ptr --= 0xff;
    *ptr --= 0xff;
    *ptr --= 0xff;
	//写屏蔽寄存器,清除DRDY中断使能位,设置CRDY位
    ptr =(BYTE*)&dwReadAdcCommand[25];
    ptr += 3;          
    *ptr --= ( (AdcCommandData[25] <<1) | 0x40 ) ;
   // *ptr --= 0x10;  //CRDY =1,enable
    *ptr --= 0x80;
	*ptr --= 0x00;
    *ptr --= 0x00;
*/
    //********对波形采集中断的命令初始化******************************
   /* AdcRealCommandData[0] = VR; //电压瞬时值(读) A相 
    AdcRealCommandData[1] = IR; //电流瞬时值 (读) A相 
    AdcRealCommandData[2] = VR; //电压瞬时值 (读)B相 
    AdcRealCommandData[3] = IR; //电流瞬时值 (读)B相 
    AdcRealCommandData[4] = VR; //电压瞬时值 (读)C相 
    AdcRealCommandData[5] = IR; //电流瞬时值 (读)C相 
    AdcRealCommandData[6] = STATUSR;  // 状态寄存器(写) A相
	AdcRealCommandData[7] = FrequencyR;  //频率(读)A相 
    AdcRealCommandData[8] = MASKR;    // 中断屏蔽 (写) A相   
    
	for(i=0; i<8; i++)  
	{
		if(i==6)continue; //第6项单独初始化
        ptr =(BYTE*)&dwReadAdcWaveCommand[i];
		ptr += 3;
        *ptr --= ((AdcRealCommandData[i] <<1) & 0x3e);
		*ptr --=  SYNC0;
   	    *ptr --=  SYNC0;
   	    *ptr --=  SYNC0;
	}
	//写状态寄存器 A相
    ptr =(BYTE*)&dwReadAdcWaveCommand[6];
    ptr += 3;          
    *ptr --= ( (AdcRealCommandData[6] <<1) | 0x40 ) ;
    *ptr --= 0xff;  
    *ptr --= 0xff;
    *ptr --= 0xff;
	//写屏蔽寄存器,清除CRDY中断使能位,设置DRDY位
    ptr =(BYTE*)&dwReadAdcWaveCommand[8];
    ptr += 3;          
    *ptr --= ( (AdcRealCommandData[8] <<1) | 0x40 ) ;
    *ptr --= 0x80;//DRDY =1, enable
   // *ptr --= 0x10;  //CRDY =1,enable
    *ptr --= 0x00;
    *ptr --= 0x00;
    */
    //InitAdcSelCommand();/*初始化AD的片选命令*/
}
void TestAdc(void)
{
	DWORD dwTemp;
	BYTE byFlag =1;
		BYTE cArray[5]={0x30,0x31,0x32,0x33,'\0'};
	SCommInfo sComm;
	SADCoef  sADCoef[3];
	INT32 i;
   // DWORD dwArray[6];
	sComm.byCommNo=0;
	sComm.byDataBits=8;
	sComm.byStopBits=1;
	sComm.byParity=UART_PARITY_NONE;
	sComm.dwBaudrate=9600;
    
	InitCom(&sComm,18000000,INT_MODE_RX);
	while(1)
    {
      byFlag = strlen(cArray);
      WriteCom(0,(BYTE*)&byFlag,1);
      byFlag = strlen(cArray);
      WriteCom(0,(BYTE*)&byFlag,1);
     // Print(cArray);
      Led(10,100000);
      OSTimeDly(10);
    }
	for(i=0; i<3; i++)sADCoef[i].dwVACOffset =0;
    for(i=0; i<3; i++)sADCoef[i].dwIACOffset =0;	
    sADCoef[0].dwVDCOffset = 0x054ac5;
    sADCoef[1].dwVDCOffset = 0x054ac5;
    sADCoef[2].dwVDCOffset = 0x054ac5;
    
    sADCoef[0].dwVACGain =0x561cef;
    sADCoef[1].dwVACGain = 0x56de8a;
    sADCoef[2].dwVACGain = 0x563021;
    
    sADCoef[0].dwIACGain =0x4425c2;
    sADCoef[1].dwIACGain =0x563021;    
    sADCoef[2].dwIACGain =0x43eaa3;
    
   // InitAdc(sADCoef,4);
    dwTemp = 10;

    while(1)
    {
	     Delay(10);
		pgsFPort1->regOutClr=P25;
		Delay(10);
			pgsFPort1->regOutSet=P25;
     if(flag_int ==3)
     {
        dwTemp =3;
       WriteCom(0,(BYTE*)&dwTemp,1);
       WriteCom(0,(BYTE*)&g_sRealCode.dwUa,4);
         flag_int =0;
    //     WriteCom(0,(BYTE*)Test,4);
     }
 
     if(flag_int_w ==4)
     {
         dwTemp = 4;
        WriteCom(0,(BYTE*)&dwTemp,1);
         flag_int_w =0;
     }
     if(flag==2)
     {
         dwTemp = 2;
         WriteCom(0,(BYTE*)&dwTemp,1);
         flag =0;
     }
    
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -