|
楼主 |
发表于 2016-9-9 16:37:49
|
显示全部楼层
ADC 有校准呀,按照应用手册里面的进行校准的。
至于那个代理,简直不能忍,技术支持约等于0。 现在准备找其他的义隆代理拿芯片,有没有推荐的义隆代理呢?
void AdcInit(void)
{
AISR = 0X0C;
//ADCON = 0X0B;
//ADCON = 0X4B;
//ADCON = 0X4A;
/* internal vref vdd, clk = 1:64, power down, adc load channel */
ADCON = 0X42;
/* cali disable, vref = 3.0v, adc internal channel disable */
ADOC = 0X04;
/* use internal vref need 50us in the first time */
Delay50us();
/* adc power on */
ADPD = 1;
AdcCali();
}
void AdcCali(void)
{
uint8_t cnt;
cnt = 0x0F;
//ADOC = 0XFC;
ADOC |= 0XF8;
/* use internal vref need 50us in the first time */
//Delay50us();
do
{
ADRUN = 1;
while (ADRUN == 1);
cnt--;
if (!SIGN)
{
ADOC += 0X08;
}
else
{
ADOC -= 0X08;
}
if (cnt == 0)
{
cnt = 0x0F;
if (SIGN)
{
//ADOC = 0X82;
ADOC = 0X84;
}
else
{
CALI = 0;
}
}
} while (ADDATA1H || ADDATA1L && CALI);
CALI = 0;
}
void AdcChanLoad(void)
{
ADCON &= 0XF8;
ADCON |= 0X02;
//ADCON |= 0x04;
//ADOC |= 0X01;
}
void AdcLoadAver(void)
{
adcLoadSum -= adcLoadBuffer[adcLoadIndex];
adcLoadBuffer[adcLoadIndex] = adcTmp;
adcLoadSum += adcTmp;
adcLoad = adcLoadSum >> ADC_LOAD_BUFFER_BITS;
adcLoadIndex++;
if (adcLoadIndex >= ADC_LOAD_BUFFER_MAX)
{
adcLoadIndex = 0;
}
}
|
|