STC8G1K08-20,ADC采样的数据不稳定
用了示例程序,收←◆ADC01=0539
收←◆ADC02=0334
ADC15=0241
收←◆ADC00=0615
收←◆ADC01=0585
ADC15=0240
收←◆ADC00=0560
收←◆ADC01=0669
ADC15=0241
收←◆ADC00=0535
收←◆ADC01=0721
ADC15=0240
收←◆ADC00=0553
收←◆ADC01=0721
ADC15=0241
收←◆ADC00=0633
收←◆ADC01=0680
ADC15=0240
收←◆ADC00=0701
收←◆ADC01=0621
ADC15=0240
收←◆ADC00=0733
收←◆ADC01=0563
ADC15=0240
收←◆ADC00=0698
收←◆ADC01=0530
ADC15=0240
收←◆ADC00=0645
收←◆ADC01=0557
ADC15=0240
收←◆ADC00=0573
收←◆ADC01=0651
ADC15=0240
收←◆ADC00=0536
收←◆ADC01=0728
ADC15=0240
收←◆ADC00=0564
收←◆ADC01=0715
ADC15=0240
收←◆ADC00=0662
收←◆ADC01=0664
ADC15=0240
收←◆ADC00=0722
收←◆ADC01=0588
ADC15=0240
收←◆ADC00=0711
收←◆ADC01=0537
ADC15=0242
收←◆ADC00=0645
收←◆ADC01=0552
ADC15=0240
收←◆ADC00=0577
收←◆ADC01=0654
ADC15=0241
ADC0和ADC1是短接的,读回来的值,很不稳定。
收←◆ADC01=0002
ADC15=0254
收←◆ADC00=0001
ADC15=0255
收←◆ADC00=0003
ADC15=0255
收←◆ADC00=0001
ADC15=0255
收←◆ADC00=0003
ADC15=0254
收←◆ADC00=0001
ADC15=0254
收←◆ADC00=0002
ADC15=0283
收←◆ADC00=0003
ADC15=0254
收←◆ADC00=0002
ADC15=0254
收←◆ADC00=0001
ADC15=0255
收←◆ADC00=0002
ADC15=0269
收←◆ADC00=0003
ADC15=0254
收←◆ADC00=0005
ADC15=0254
收←◆ADC00=0001
ADC15=0254
收←◆ADC00=0003
ADC15=0255
而且如果是用USB供电时,ADC15的值,都是不稳定的。
ADC15,是内部的1.19V电压,这个值怎么会不稳?。
ADC0和ADC1是直接短接,接的外部采样,采样我用示波器看了,波动不大,但数据却相差非常大。 先将采样时间设到最长
void InitADC()
{
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16| ADC_SPEEDLL
// ADC_CONTR = 0x80; //使能ADC模块
ADC_RES = 0; //清ADC转化结果
ADC_CONTR = ADC_POWER; //使能ADC电源
delayms(2); //ADC power-on delay and Start A/D conversion
}
时间已经是最长了,感觉好象是电源哪有不稳定情况,但我都已经是照推荐的配置了
电源部分照推荐的,应该也没有错。
采集回来的数据 10%左右一直跳动。
示波器上看波纹并不大
mzh00 发表于 2023-5-15 10:43
采集回来的数据 10%左右一直跳动。
示波器上看波纹并不大
初始化时打开ADC电源,等待1ms后进行采集
每次打开ADC电源,至少等待1ms以上才启动ADC转换。
楼主转换15通道看看,这个是内部BandGap电压,读数会稳定的,前提是VCC要稳定。 /*----------------------------
ADC 中断处理
----------------------------*/
void adc_isr() interrupt 5
{
ADC_CONTR &= !ADC_FLAG; //Clear ADC interrupt flag
ADC_LOW2= ADC_RES;
ADC_LOW2 <<= 2;
ADC_LOW2 |= ADC_RESL;
ADC_JS++;
ADC_O=1;
// if (++ch > 7) ch = 0; //switch to next channel
ADC_CONTR = ADC_POWER| ch;
}