ADC采集方法

/***************************************************************************
*File: ADC.c

  • Description: Interface driver for the 500 Series Z-Wave Single Chip
  •          built-in ADC sample data
    
  • Author: pandy
  • Revision: V1.0
  • Date: 2018-5-22

****************************************************************************/
#include <ZW_typedefs.h>
#include “zw050X.h”
#include <INTRINS.H>
#include “ZW_appltimer_api.h”
/IO control/
#include <ZW_pindefs.h>
#include <ZW_evaldefs.h>
#include “zw_uart_api.h”
#include “ISD51.h”
#include “zw_timer_api.h”
#include “zw_adcdriv_api.h”
#include “eeprom.h”

#define Vbg 1230
#define batterLowWarningValue 2750
#define ZW_DEBUG_ADC_MON 0xff
/-------------------------private data-----------------------/
#ifdef ZW_DEBUG_ADC_MON
#define ZW_DEBUG_BATT_ADC_SEND_BYTE(data) ZW_DEBUG_SEND_BYTE(data)
#define ZW_DEBUG_BATT_ADC_SEND_STR(STR) ZW_DEBUG_SEND_STR(STR)
#define ZW_DEBUG_BATT_ADC_SEND_NUM(data) ZW_DEBUG_SEND_NUM(data)
#define ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(data) ZW_DEBUG_SEND_WORD_NUM(data)
#define ZW_DEBUG_BATT_ADC_SEND_NL() ZW_DEBUG_SEND_NL()
#else
#define ZW_DEBUG_BATT_ADC_SEND_BYTE(data)
#define ZW_DEBUG_BATT_ADC_SEND_STR(STR)
#define ZW_DEBUG_BATT_ADC_SEND_NUM(data)
#define ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(data)
#define ZW_DEBUG_BATT_ADC_SEND_NL()
#endif

WORD adc_value=0;
static WORD battLevel;
WORD SumBatt;
static WORD battVol;
static BYTE battState;
BOOL startBatteryVoltageMeasurement=TRUE;
BOOL awatingBatteryVoltageMeasurement=TRUE;
BYTE getBattPercent; //µç³Ø°Ù·Ö±È
WORD tempVal,getAdcValue=0xffff;
extern XBYTE battValve;
void ADC_Init()
{
// Set ADC to battery monitoring mode, other parameters are ignored ADC_BATT_MULTI_MODE ADC_BATT_SINGLE_MODE
ZW_ADC_init(ADC_BATT_MULTI_MODE, ADC_REF_U_VDD, ADC_REF_L_VSS, 0);
// Set auto zero period
ZW_ADC_auto_zero_set(ADC_AZPL_128);
// Set ADC resolution
ZW_ADC_resolution_set(ADC_12_BIT);

}
/*================================================================*/
/16ת»»10½øÖÆ/
WORD decChangeOc(WORD inputDigit)
{
WORD re=0;//
WORD n=1;//
while(inputDigit!=0)
{
re += (inputDigit%10)*n;
inputDigit /= 10;
n *= 16;
}
return re;
}

/*=ADC_actor===============/
/adc start sample/
void ADC_actor(BOOL bState,BOOL pSample)
{
WORD tempVal;
if (bStatestartBatteryVoltageMeasurement)
{
// Power up ADC
ZW_ADC_power_enable(TRUE);
// Start ADC
ZW_ADC_enable(TRUE);
// battState=awatingBatteryVoltageMeasurement;
}
if(pSample
awatingBatteryVoltageMeasurement)
{
do{battLevel=ZW_ADC_result_get();}
while ( battLevel == ADC_NOT_FINISHED );
// battLevel=ZW_ADC_result_get();
ZW_DEBUG_BATT_ADC_SEND_STR("\r\n----battLevel= ");
ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(battLevel);
// if((battLevel!= ADC_NOT_FINISHED))
{
// Calc battery level in mV (Vbg is the band gab voltage)
battVol=(DWORD)Vbg
4096/(DWORD)battLevel; // Return battery voltage in mV
ZW_DEBUG_BATT_ADC_SEND_STR("\r\n----adc volage= ");
ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(decChangeOc(battVol));
if(battVol>=3000)
{
getBattPercent=100;
}
if((battVol>batterLowWarningValue)&&(battVol<2998))
{

			tempVal=((battVol-batterLowWarningValue));//3000-2750=250
			getBattPercent=(BYTE)(tempVal*0.4);//100/250=0.25
		}
		 if(battVol<=batterLowWarningValue)
		{
		
		  getBattPercent=0xff;
		}
		MemoryPutByte((WORD)&EEOFFSET_BATTER_far,getBattPercent);//batterlevel saves eeprom
		ZW_DEBUG_BATT_ADC_SEND_STR("\r\n----getBattPercent= ");
		ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(getBattPercent);
		ZW_DEBUG_BATT_ADC_SEND_STR("\r\n");
		// Power down ADC
		ZW_ADC_power_enable(FALSE); 
	}
}

}
/*=ADC_Get===============*/
/adc sample/
void ADC_Get()
{
BYTE i,j,z;
BYTE Max = 1,Min = 1;
WORD Adc_Buf[11];

	// Power up ADC
	ZW_ADC_power_enable(TRUE);
	// Start ADC
	ZW_ADC_enable(TRUE);
  for(z=0;z<200;z++);
	for(i=0;i<11;i++)//»ñÈ¡5 ADCÖµ
	{
	getAdcValue=ZW_ADC_result_get();
	if((getAdcValue!= ADC_NOT_FINISHED))
	{

// ZW_DEBUG_BATT_ADC_SEND_STR("\r\n—ii= ");
// ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(i);

	 Adc_Buf[i] = getAdcValue;
	 ZW_DEBUG_BATT_ADC_SEND_STR("\r\n---getAdcValue= ");
	 ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(getAdcValue);	
	// Power down ADC

// ZW_ADC_power_enable(FALSE);
}

	}
	for(j=1;j<11;j++)
	{
		if(Adc_Buf[Max] < Adc_Buf[j])
		{
		  Max = j;
		}
		if(Adc_Buf[Min] > Adc_Buf[j])
		{
		  Min = j;
		}
		SumBatt +=Adc_Buf[j];
	ZW_DEBUG_BATT_ADC_SEND_STR("\r\n----SumBatt= ");
	ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(SumBatt);
	}

// battLevel=(SumBatt-Adc_Buf[Max]-Adc_Buf[Min]);
battLevel=SumBatt/10;

	ZW_DEBUG_BATT_ADC_SEND_STR("\r\n----battLevel= ");
	ZW_DEBUG_BATT_ADC_SEND_WORD_NUM(battLevel);

	// Calc battery level in mV (Vbg is the band gab voltage)
	battVol=(DWORD)Vbg*4096/(DWORD)battLevel;	// Return battery voltage in mV		
	ZW_DEBUG_SEND_STR("\r\n-adc volage=");
	ZW_DEBUG_SEND_WORD_NUM(decChangeOc(battVol));
	if(battVol>=3000)
	{
	 getBattPercent=100;
	}
	 if((battVol>batterLowWarningValue)&&(battVol<2998))
	{ 
		
		tempVal=((battVol-batterLowWarningValue));//3000-2750=250
		getBattPercent=(BYTE)(tempVal*0.4);//100/250=0.25
	}
	 if(battVol<=batterLowWarningValue)
	{
	
		getBattPercent=0xff;
	}
	battValve=getBattPercent;

// MemoryPutByte((WORD)&EEOFFSET_BATTER_far,getBattPercent);//batterlevel saves eeprom
ZW_DEBUG_SEND_STR("\r\n-getBattPercent=");
ZW_DEBUG_SEND_WORD_NUM(getBattPercent);
ZW_DEBUG_SEND_STR("\r\n");
// Power down ADC
// ZW_ADC_power_enable(FALSE);
// ZW_ADC_enable(FALSE);

}

//--------------------------------------------------------------------------
//È¥µô×î´óÖµ×îСֵÔÙƽ¾ù
WORD AdcSmpAvg(WORD getADC)
{
DWORD ADCData;
BYTE i;
BYTE Max = 0,Min = 0;
WORD Adc_Buf[10];
ADCData = getADC;
for(i=0;i<10;i++)
{
Adc_Buf[i] = 0;
}
for(i=0;i<10;i++)
{
if(Adc_Buf[Max] < Adc_Buf[i])
{
Max = i;
}

        if(Adc_Buf[Min] > Adc_Buf[i])
        {
            Min = i;
        }
        ADCData +=Adc_Buf[i];
    }
ADCData=(ADCData-Adc_Buf[Max]-Adc_Buf[Min])/8;
return (WORD)ADCData;

}
//----------------------------------------------------------------------------
/------------------------------------------------------
**parameter: Null
** return£º µçÁ¿°Ù·Ö±È
------------------------------------------------------
/

BYTE getBatteryValue()
{
// battValve=MemoryGetByte((WORD)&EEOFFSET_BATTER_far);//getBattPercent;
// battValve=getBattPercent;
return (battValve);

}

/------------------------------------------------------
**parameter: benble------TRUE STOP
** FALSE …
------------------------------------------------------
/
void ADC_Stop()
{

ZW_ADC_enable(FALSE);
}

/****************************************************************
**File: adc.h
**auther:pandy
**date: 2018-3-14
**chagne:
******************************************************************/
#ifndef _ADC__H
#define _ADC__H

void ADC_Init();
void ADC_actor(BOOL bState,BOOL pSample);
BYTE getBatteryValue();
void ADC_Get();

#endif

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值