搜索
bottom↓
回复: 1

msp430 SD16A 多通道AD采集?

[复制链接]

出50入4汤圆

发表于 2011-1-17 13:50:14 | 显示全部楼层 |阅读模式
//看门狗定时器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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出50入4汤圆

 楼主| 发表于 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第四次采样中断)  
}

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

在二个通道切换时就出了这问题,,,,每次在切换通道时,同时把这个也重新设置一下就可以了,纳闷哈,,,做一个通道时,我也没重新设置呀,,难道改变通道,会改变哪个寄存器吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 15:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表