#include "mcc_generated_files/mcc.h"
uint32_t u32AdcCount = 0;
static uint16_t u16AD_GetData(void)
{
uint32_t u32Count = 0;
uint16_t i;
for(i=0;i<10;i++)
{
u32Count += ADC_GetConversion(channel_AN0);
}
return u32Count/10;
}
void main(void)
{
uint16_t i,u16AD,u16Temp;
/*引脚配置*/
LATA = 0x00;
TRISA = 0x19;
ANSELA = 0x17;
WPUA = 0x00;
OPTION_REGbits.nWPUEN = 1;
APFCON = 0x00;
/*ADC配置*/
ADCON0 = 0x01;
ADCON1 = 0x10;
ADRESL = 0x00;
ADRESH = 0x00;
/*时钟配置*/
OSCCON = 0x68;
OSCTUNE = 0x00;
BORCON = 0x00;
while (1)
{
for(i=0;i<1000;i++)
{
u32AdcCount += u16Proximity_GetData();//对AN0通道一千次采样
}
u16AdcValue = u32AdcCount/1000;//取平均值
u16AD = u16AD_GetData();//对AN3通道采样
if(u16AD > 0xB332)
u16AD = 0xB332;
else
if(u16AD < 0x5000)
u16AD = 0x5000;
u16Temp = (float)u16AD*1.72 - 13591;//模拟函数转换数值
u32AdcCount = 0;
}
}
遇到了很头疼的问题。
u16AD = u16AD_GetData();
这个函数只进行一次采样,而且采样的数据不准确,按道理进行10次采样后取平均值。
在我将这个函数内部 u32Count += ADC_GetConversion(channel_AN0);前面加了一句 ADCON0bits.ADON = 0;
也就是
static uint16_t u16AD_GetData(void)
{
uint32_t u32Count = 0;
uint16_t i;
for(i=0;i<10;i++)
{
ADCON0bits.ADON = 0;/*加了一句这个*/
u32Count += ADC_GetConversion(channel_AN0);
}
return u32Count/10;
}
,才能继续出数据。为什么要关一下再开才能出数据。。。而且数据也是不准确的。。。
0.0人类迷惑行为。
|