下面 msp430 的AD转换设定有问题吗?测得数据不太对啊?
//===================void init_ad(void)
{
//ADC12CTL0 = ADC12ON+MSC+SHT0_8; // 开启ADC12, 设置采样时间
//ADC12CTL1 = SHP+CONSEQ_3; // 多次采样
ADC12CTL0 = ADC12ON+SHT1_6+SHT0_6+MSC+REFON; // 开启ADC12, 设置采样时间
ADC12CTL0|= REF2_5V;
ADC12CTL1 = SHP+CONSEQ_3; // 多次采样
//ADC12MCTL3 = INCH_3; // ref+=AVcc, channel = A2
//ADC12MCTL4 = INCH_4+EOS; // ref+=AVcc, channel = A3, end seq.
//ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A2
ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A2
ADC12MCTL1 = INCH_1+EOS+SREF_5; // ref+=AVcc, channel = A3, end seq.
}
//=======================下面需要改
void close_ad(void)
{
ADC12CTL0 &= ~ENC;
// ADC12CTL0 &= ~ADC12ON;
}
void data_convert(void)
{
ADC12CTL0 |=ENC +ADC12SC;
P6SEL |= 0x03; // P6.0 ADC option select
while( 1 == (ADC12IFG&ADC12BUSY))
{
ad_data0 = ADC12MEM0;
ad_data1 = ADC12MEM1;
}
close_ad();
端口0实际电压为:0.7250.725/2.5*4096=1187,msp430给出数据880;
端口1实际电压为:1.9 1.9/2.5*4096=3112,msp430给出数据3967;
参考源为 :2.5吧 (我设定成 2.0数据也没有变化,不知道什么原因?)
上面数据差距很大啊,是不适哪里设定有问题?
为何设定 SREF_5与否 采集到的数据都是一样的? 说实话,没发现什么问题,就是拿不定 参考电压源应该用SREF_5么?
SREF_5 :正选ref+,负选ref-/eREF-、
SREF_1: 正选ref+,负选AVss。
我用F169的片子,也是2.5内部参考电压,用的都是SREF_1,相当准确。
当时用的AD初始化:
void init_AD(void)
{
P6SEL = 0x0F; // Pin P6 used by ADC module
REFCTL0 &= ~REFMSTR; // Reset REFMSTR to hand over control to
// ADC12_A ref control registers
ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT03+ADC12REFON+ADC12REF2_5V; // ADC12 on, extend sampling time
// to avoid overflow of results
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; // Use sampling timer, repeated seq
ADC12MCTL0 = ADC12SREF_1+ADC12INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = ADC12SREF_1+ADC12INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = ADC12SREF_1+ADC12INCH_2; // ref+=AVcc, channel = A2
ADC12MCTL3 = ADC12SREF_1+ADC12INCH_3+ADC12EOS; // ref+=AVcc, channel = A3, end seq.
} 同样MCTL0与MCTL1为什么不用同样的SREF,上边的程序 MCTL0用的是SREF_0 :正 AVcc,负 ACss;MCTL1用的是SREF_5
页:
[1]