zhuyi25762 发表于 2011-1-17 13:50:14

msp430 SD16A 多通道AD采集?

//看门狗定时器1秒 进入启动一次AD采集,,AD采集分二个通道0和6,当第6通道采集完后,再次进入低功耗模式3

main()
{
while(1)
{
    if(CH0_Finish)
    {
      CH0_Finish=0;
      Tx_Pack(DATA);//取出第0通道数据发送
      Choose_CH(6);   //切换通道   
    }
    if(CH6_Finish)
    {
       CH6_Finish=0;
       Tx_Pack(DATA);//取第6通道数据
       AD_RUN=0;   //AD转换完成,进入低功耗模式       
    }
   if(AD_RUN==0) LPM3;               // 进入低功耗模式3,只有ACLK工作,最省电模式_BIS_SR(LPM3_bits + GIE);
}
}

/********************************************************************************/
void Choose_CH(uchar ch)
{
adc_ch_inf=ch;    //记录当前通道号
SD16INCTL0 |=ch; //选择通道

SD16CTL |= SD16REFON;               // 只打开1.2V参考源
Delay_us(500);                     
SD16CCTL0 |=(SD16SC + SD16IE);      // 启动 SD16 进行转换并且允许 SD16 中断。
AD_RUN=1;                               // AD已启动标志置位
}

/******************************************************************************/
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
   SD16CCTL0 &= ~(SD16SC + SD16IE);      // SD16 停止转换及禁止中断。      
   adc_last_val = SD16MEM0; // 保存 ADC 最后的结果.
   if(adc_ch_inf==0)CH0_Finish=1;
   else if(adc_ch_inf==6)CH6_Finish=1;
}

/*******************************************************************************
看门狗中断函数:watchdog_timer(); //1秒中断
******************************************************************************
#pragma vector=WDT_VECTOR      
__interrupt void watchdog_timer(void)
{
Taken_time++;         
if(Taken_time>=1)   
{
    Taken_time=0;
    Choose_CH(0);            //先由通道0开始转换       
    LPM3_EXIT;          //退出低功耗模式,在AD完成后重新开启
}
}



有错吗??当通道采集时,不切换,没有问题,一切换就采集不到了,上来的数据全7FFF

zhuyi25762 发表于 2011-1-17 14:37:32

很纳闷呀

我在上电时配置了这么个函数

void Config_SD16(void)
{
SD16CTL = SD16SSEL_1 + SD16DIV_1;               // SLCK=MCLK=1M   2分频 f=500KHz,OSR=1024,参考电源暂不开启,转换前开,转换后关。节能!
SD16CCTL0 = SD16DF + SD16OSR_1024 + SD16SNGL;   // + SD16UNI // 输出格式为2的补码(8000--7FFF)+过采样速率1024+单次转换 双极性模式(默认模式)
SD16INCTL0 = SD16INTDLY_0;                      // 中断延时(4第四次采样中断)
}

这函数,我想是不用老变的,就只在上电初始化了一次,,,在单通道实验时也没发现什么不对

在二个通道切换时就出了这问题,,,,每次在切换通道时,同时把这个也重新设置一下就可以了,纳闷哈,,,做一个通道时,我也没重新设置呀,,难道改变通道,会改变哪个寄存器吗?
页: [1]
查看完整版本: msp430 SD16A 多通道AD采集?