初学430单片机,在调试使用ADC12模块时遇到几个小问题,请大家帮忙看一下,谢谢!
以下为ADC初始化函数
- void ADC_Init()
- {
- P6SEL = 0x0F; // Enable A/D channel inputs
- ADC12CTL0 = ADC12ON+MSC+SHT0_8; // Turn on ADC12, extend sampling time to avoid overflow of results
- ADC12CTL1 = ADC12SSEL_2+CSTARTADD_0+SHP+CONSEQ_3;// Use sampling timer, repeated sequence
- ADC12MCTL0 =SREF_0 + INCH_0; // ref+=AVcc, channel = A0
- ADC12MCTL1 =SREF_0 + INCH_1+EOS; // ref+=AVcc, channel = A1, end seq.
- ADC12IE = 0x02; // Enable ADC12IFG.1
- ADC12CTL0 |= ENC; // Enable conversions
- }
以下为ADC中断服务函数内容
- #pragma vector=ADC_VECTOR
- __interrupt void ADC12ISR(void)
- {
- static unsigned int index = 0;
-
- A0Results[index] = ADC12MEM0; // Move A0 results, IFG is cleared
- A1Results[index] = ADC12MEM1; // Move A1 results, IFG is cleared
- if(index++ >= (Num_of_Results-1))
- {
- ADC_Flag = 1; //ADC取样完成标志位置位
- index = 0; //清零索引
- }
- }
编译环境:IAR5.50.2
A0,A1作为ADC输入,基准源AVcc(3.3v) ,ADC为序列通道多次转换,
Num_of_Results设置为5
A0悬空,A1接Vcc时,显示转换后电压3.15V
A0悬空,A1接GND时,显示电压0.45V
A0接Vcc,A1接电位器中间引脚,电位器两端(最大阻值)引脚串接在Vcc和GND之间
电位器调整过程中,A1电压值在0.43V-3.3V之间,A0电压值也会变,在3.3V-2.6V之间
如果把Num_of_Results 增大为 32
A0悬空,A1接Vcc时,显示转换后电压3.25V
A0悬空,A1接GND时,显示电压0.05V
A0接Vcc,A1接电位器中间引脚,电位器两端(最大阻值)引脚串接在Vcc和GND之间
电位器调整过程中,A1电压值在0.06V-3.3V之间,A0电压值在3.3V-3.2V之间
{输出时会对
A0Results数组取平均值再转化成电压值}
这两种情况下的差别仅是因为数据的多少造成的吗?
还有这种看起来好像“通道间能相互影响”的原因是什么?
另外已经试过单通道单次,序列通道单次,ADC取样值均能在0.04--3.3V之间变化,且A0,A1互不影响,只有序列通道多次转换会有这种“通道间能相互影响”的现象。
还有一个为偶然发现就是当Num_of_Results 为1的时候,也就是序列通道多次取样设置成一次取样,A1,A0输出竟然完全一样,这是为什么?
说的有些啰嗦,感谢知道的dalao帮忙解答
本帖最后由 DQHWX 于 2016-10-8 19:28 编辑