[讨论] msp430f24x ADC采样问题

XiaoChuan   2016-3-29 15:01 楼主
ADC采样数据总是不对,不知道是不是设置不对,构思是这样的,定时器定时156.25us采样一个点,需要采样四组
外接晶振8M
void initTA(void) //156.25us
{
   CCTL0 = CCIE;                             // CCR0 interrupt enabled
   CCR0 = 1247;
   TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode
}
/*===========================================================================
扫描采样AN0-AN5共6个通道模拟信号
=============================================================================*/
void initAdc1(void)
{
   ADC12CTL0 &= ~ENC;
   P6SEL = BIT4 | BIT5 | BIT6 ;                           // Enable A/D channel inputs
   ADC12CTL0 |= ADC12ON+MSC+SHT0_2;          // Turn on ADC12, extend sampling time采样时间?  MSC次采样和转换
   ADC12CTL1 |= SHP+CONSEQ_1+ADC12SSEL_3;
   ADC12MCTL0 |= SREF_0;                      // 模拟参考电压
   ADC12MCTL4 |= INCH_4;                      // ref+=AVcc, channel = A4
   ADC12MCTL5 |= INCH_5;                      // ref+=AVcc, channel = A5
   ADC12MCTL6 |= INCH_6+EOS;                      // ref+=AVcc, channel = A6,end seq
   ADC12IE=0X40;
   ADC12CTL0 |= ENC;                          // Enable conversions
}
/*------------------------------------------------------------------------------
ADC采样6次后中断,读取转换结果并关闭自动采样
-------------------------------------------------------------------------------*/
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void) //关闭自动采样
{
                              // Enable conversions
   sambuffh[IC][phase]=ADC12MEM4;
   sambuffh[IB][phase]=ADC12MEM5;
  sambuffh[IA][phase]=ADC12MEM6;
// ADC12IFG=0;


}
void main(void)
{
int i;
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
  BCSCTL1 &=~XT2OFF;//启动XT2时钟
   do
   {
   IFG1 &= ~OFIFG;                           // Clear OSCFault flag
   for (i = 0xFF; i > 0; i--);               // Time for flag to set
   }
   while ((IFG1 & OFIFG));                   // OSCFault flag still set?
  BCSCTL2 |= SELM_2+SELS ;                        //  MCLK  SMCLK = XT2模式      SELM_2 + SELS

    initTA();
    initAdc1();
    _EINT();
while(1)
{
;
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)  //156.25us
{
     phase++;
     ADC12CTL0 |= ENC+ADC12SC;
CCR0 = 1247;
}

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复