CC2430单片机标称AD转换精度为14位,在单片机中算是比较高的了,CC2430最广泛的用途是作为传感器来使用的,而传感器测量的物理量的原理多半是将物理量转换成电流、电压等模拟信号,再通过AD转换进入单片机处理。所有用好CC2430的AD是使用好CC2430的一项基本技能。
一、CC2430的ad的几个重要参数
二、单通道AD转换
二、差分通道转换
三、使用差分通道转换时如何进行补偿
四、使用DMA通道进行AD采样;
float getseadc (uint8 channel, uint8 refvolt)
{
volatile uint16 reading = 0;
uint8 resbits;
volatile uint16
volatile uint8 tmp;
uint8 adcChannel = 1;
volatile float sum,sum1;
int tmp1,max,m,n,X,lst;//m为大数,n为小数
ADCCFG |= adcChannel;
{
};
resbits=0x30;
tmp = ADCL;
tmp = ADCH;
osal_int_disable( INTS_ALL );
//配置dma
adcdma.srcAddrH=0xDF;
adcdma.srcAddrL=0xBA;
adcdma.dstAddrH=(uint8)((uint16)&adctab>>8);
adcdma.dstAddrL=(uint8)&adctab;
adcdma.xferLenV=0x03;
adcdma.xferLenL=0x20;
adcdma.ctrlA=0xd7;
adcdma.ctrlB=0x10;
DMA0CFGL=(uint8)&adcdma;
DMA0CFGH=(uint8)((uint16)&adcdma>>8);
DMAARM=0x01;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
adctemp = channel | resbits | (refvolt<<6);
ADCCON2 = adctemp;
ADC_SAMPLE_CONTINUOUS();
tmp=0;
while (!(DMAIRQ & 0x01));
DMAARM|=(1<<7);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
DMAIRQ=0;
ADC_STOP();
tmp=ADCL;
tmp=ADCH;
ADCCFG &= ~adcChannel;
sum=0;
sum1=0;
max=0;
tmp1=0;
X=-1;
lst=-1;
for(i=0;i<800;i++)
{
//int AdtoInt(uint16 adctmp,int offset)
}
osal_int_enable(INTS_ALL);
// 最大值如果小于 0x2000的5%则有可能杂波干扰比较大,真正的过零点难找,而又因为只有5%,所以累加后求平均值对最后的计算结果影响很小
if(max<410)
{
}
else
{
}
};
//将无符号整数转换为int 大于0x1fff的为负数
int AdtoInt(volatile uint16 adctmp,int offset)
{
}
五、至此我使用cc2430AD转换的心得已经讲完了,希望对大家的开发工作有点帮助。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』