Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

ADC12采样读取数据错误

$
0
0

芯片:MSP430FR6972

IDE:IAR6.14

问题描述:

我的程序平时在一直采集电流,接收到读取电池电压指令后关闭采样定时器,重新配置ADC通道采集电池电压。调试过程发现采集完后读取的电压值老是不正确,进入IAR调试定位到temp = ADC12MEM0;这一句发现此时ADC12MEM0的值是对的,但是全速跑然后将断电定位到Indicator_Status.Voltage_Bat = temp;这一句发现temp值不正确,通过调试框看寄存器值ADC12MEM0值却对的。这是什么原因导致的呢?

相关程序:

{

  TimerB0_Stop();  //暂停电流采样
  For_Real_Sample();
  while(ADC12IFGR0 & ADC12IFG1 == 0);
  temp = ADC12MEM0;//这里

  Indicator_Status.Voltage_Bat = temp;

}

void For_Real_Sample(void)
{
 PowerSwitch(ADC_CAP,ENABLE); 
 PowerSwitch(ADC_BAT,ENABLE);
 while(REFCTL0 & REFGENBUSY);                 // If ref generator busy, WAIT
 REFCTL0 |= REFVSEL_2 | REFON;                // Select internal ref = 2.5V, Internal Reference ON
 
 ADC12CTL0 &= ~ADC12ENC;
 ADC12CTL0 = ADC12ON | ADC12SHT0_2 | ADC12MSC;       // Turn on ADC12, 采样周期64 ADC12CLK,采样保持时间尽量长
 ADC12CTL1 = ADC12SHP |ADC12SHS_0 | ADC12CONSEQ_1 | ADC12SSEL_3 | ADC12PDIV_1; // ADC12SC触发采样,序列通道采样 0-1,SMCLK/4
 ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_14;     //ADC_BAT
 ADC12MCTL1 = ADC12VRSEL_1 | ADC12INCH_15 | ADC12EOS; //ADC_CAP
 ADC12IER0 = 0;           //关闭中断
 
 while(!(REFCTL0 & REFGENRDY));                // Wait for reference generator to settle 
 ADC12CTL0 |= ADC12ENC + ADC12SC;        
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles