|
430F5438A的ADC内部参考电压问题 最近在搞ADC,把5438的ADC这章看了一遍,然后用例程去仿真了一下,发现一个问题,就是用内部参考电压的时候在寄存器CTL0设置了2.5V,REFON也置1了,然后MCTL1里的SREF为1,这都是按例程里来设置的,结果在A0输入的时候,得到的仿真结果是0X0FFF,也就是4095,这说明我的输入是超过或者是等于参考电压,但我实际测的A0的输入电压为1.1V左右,跟2.5V都差很多啊,为什么是满的值。
我把参考电压选择SREF改为0,也就是参考电压为AVCC跟AVSS,这样转换的值就正确了,3.3V的参考转换后在1453左右,误差不大,就是内部参考2.5V或者1.5V都不行,始终转换为满值4095,不知道问题出在哪,请大大指教
下面是调试程序:
#include
volatile long temp;
void AD_Init(void)
{
int i;
P6SEL |= 0x01; // Enable A/D channel A0
ADC12CTL0 = ADC12ON+ADC12SHT0_4+ADC12REFON+ADC12REF2_5V; // Turn on ADC12, set sampling time,选用内部参考2.5V
ADC12CTL1 = ADC12SHP; // Use sampling timer, set mode
ADC12MCTL0 = ADC12SREF_1+ADC12INCH_0; // Vr+=Vref+ and Vr-=AVss
for ( i=0; i<0x30; i++); // Delay for reference start-up
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
void AD_Start(void)
{
ADC12CTL0 |= ADC12SC; // Start conversion
}
int main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
AD_Init(); //AD初始化
while(1)
{
AD_Start(); //开始AD转换
while (!(ADC12IFG & BIT0)); //判断转换完成与否
temp = ADC12MEM0; //读取转换数据,IFG自动清零
__no_operation(); // For debugger
}
}
在修改ADCMCTL0中的ADC12SREF_1这个参数,当为0时,转换数据正常,当为1时,得到的结果就是4095,而不管CTL0中的REF_2.5V置1与否。
不知道是不是芯片的AVCC跟AVSS始终有输入,所以就内部参考电压设置不了?还望大大们指导下。
|
|