ADC12 双通道采样 两者相互影响 改变其中一路输入 另一路采样电压也变化

2019-03-24 08:15发布


这几天一直再搞ADC12 和 DAC0832,昨晚测试的时候发现个挺严重的问题,ADC12双通道采样相互影响
我采样的是定时钟中断 双通道 多次采样,程序如下,
我用的是买的开发板,开始我以为是采样的两个通道相互影响可能是硬件的问题,于是我使用通道0 和 通道3 采样,结果
采样还是会受影响,数据如下,当通道0采样值由3750变到0时,另一路采样输出电压从2.32变到2.10V(我两路采样结果用数码管显示,一路经过ADC转化成电压,一路直接显示结果寄存器值)

大家有没有类似的情况,望指教!!!


//*************************************************************************
//        ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
  P6SEL|=0x03;                                    //选择ADC通道,设置对应IO口的功能模式
  ADC12CTL0|= ADC12ON + MSC + SHT0_2 + REF2_5V + REFON; //打开ADC;多路转换打开适合序列或重复;
                                                       //采样保持时间 ,16个CLK;ADC电源控制开,内部基准2.5V
  ADC12CTL1|= SHP + CONSEQ_3 + ADC12SSEL1 + ADC12SSEL0; //采样保持脉冲模式选择;多通道重复采样;SMCLK做时钟源;
  ADC12MCTL0= SREF0 + INCH_0;                     //参考电压源控制位及通道选择

  ADC12MCTL0=INCH_0;
  ADC12MCTL1=INCH_1+EOS;
  ADC12CTL0|= ENC;                                //使能转换器
}

//*************************************************************************
//        ADC中断服务程序
//*************************************************************************
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{


  uchar j;
  uint result[10];

  uint result1[10];

  result[count]=ADC12MEM0;                //读取ADC转换值,存入暂存区

  result1[count]=ADC12MEM1;

  count++;

   ADC12CTL0 |= ADC12SC;
   _NOP() ;
   while(count>8)
  {
    count=0;
    for(j=0;j<8;j++)
    {
      TEMP+=result[j];                    //求和,10次转换的结果相加
      TEMP1+=result1[j];
    }
    TEMP=TEMP>>3;                         //求平均值
    TEMP1=TEMP>>3;
    Data_do(TEMP);                        //处理ADC值,用于显示
    Data_do1(TEMP1);
    for(j=0;j<50;j++)
    {
      Display();                          //显示ADC的数据
    }


  }
}


void TIMERA_Init(void)                                   //UP模式计数,计数周期为CCR0+1
{
  TACTL |= TASSEL1 + TACLR + ID0 + ID1 + MC_1 ;     //SMCLK做时钟源,8分频,增加计数模式,开中断 + TAIE
  TACCR0 = 999;                                         //CCR0=999,1ms中断一次
  CCTL0 = CCIE;
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
英雄车
2019-03-25 18:39
这么强,长见识了,谢谢楼主

一周热门 更多>

相关问题

    相关文章