搜索
bottom↓
回复: 6

AD单通道单词不断采集、显示的问题,真心纠结啊~~求解啊

[复制链接]

出0入0汤圆

发表于 2012-7-21 08:27:44 | 显示全部楼层 |阅读模式
下面是我写的一段代码?我想用1602显示AD值,unsigned int AD_capture(unsigned char s)这个函数是要采集那个通道的AD,显示在LCD的结果是只有AD0的是动态的,就是
说是while(1)中不断执行采集AD,但是其他通道的就是一直不动啊。。。。我是想就采集了一次,我吧AD0接到不同的电压会变的,其他通道就还是不变,,,好纠结啊
是不是AD初始化什么地方配置的不对呢?????真心希望大家一起讨论讨论~~~是哪里与问题呢???


#include <msp430x14x.h>
#include"1602.h"
#define uchar unsigned char
#define uint unsigned int
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
unsigned int AD_in0,AD_in1,AD_in2;

void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                     //高速晶振开启
  BCSCTL2|=SELM1+SELS;                 //MCLK=LFXT1
  do{
    IFG1&=~OFIFG;                     //清除振荡器失效标志
    for(i=0;i<100;i++)                //稳定时间
       _NOP();
  }
  while((IFG1&OFIFG)!=0);            //检查振荡器失效标志是否存在
    IFG1&=~OFIFG;
}
void INIT_AD(void)
{ uint i;
   P6SEL&=0X00;
   P6SEL|=0XFF;
   P6DIR&=0X00;
  
   ADC12CTL0 &= ~ENC;//设置ENC为0,从而修改ADC12寄存器的值,只有其为零时,才可以修改
   ADC12CTL0|=REFON+REF2_5V+ADC12ON+SHT0_2;   //参考电压开,选择2.5V   
   ADC12CTL1|=SHP;
   ADC12MCTL0 |= INCH_0;     
   ADC12MCTL1 |= INCH_1;
   ADC12MCTL2 |= INCH_2;   
   
   ADC12MCTL0|=0X10;                         //选择基准源
   for ( i=0; i<0x3600; i++) ;        //延时等待基准源确定
   ADC12MCTL1|=0X10;         
   for (i=0; i<0x3600; i++)  ;//选择基准源
   ADC12MCTL2|=0X10;         
   for (i=0; i<0x3600; i++)  ;//选择基准源
                     
   ADC12CTL0|=ENC  ;                  //使能AD转换
}   

/*************************************************************/
/*                        起动AD转换                         */
/*************************************************************/
unsigned int AD_capture(unsigned char s)
{
unsigned int AD_data;

switch(s)
{
   case 0:               
      ADC12CTL0|=ADC12SC;    //开始转换AD00
      while((ADC12CTL1 & 0X01) ==1);//等待转换完毕   
      AD_data = ADC12MEM0;    //读取AD0
   break;

  case 1:   
      ADC12CTL0|=ADC12SC;             //转换AD01     
      while((ADC12CTL1 & 0X01) ==1); //等待转换完毕
      AD_data = ADC12MEM1;      //读取AD1     
   break;
   
   case 2:   //转换AD02
      ADC12CTL0|=ADC12SC;
      while((ADC12CTL1 & 0X01) ==1);      //等待转换完毕
      AD_data = ADC12MEM2;     //读取AD1  
   break;
}
return(AD_data);
}
void main( void )
{   
    WDTCTL = WDTPW + WDTHOLD;
    Clock_Init();
    IO();  
    INIT_AD();   
    yj1602();
   
   
  while(1)
    {
         AD_in0 = AD_capture(0);          //只有通道0 这个可以显示动态的
        ad_show(0,AD_in0);           
         AD_in1 = AD_capture(1);     //其他通道是不动的,就是采集一次就没采集了吗?
         ad_show(6,AD_in1);
    }
}

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-21 09:02:39 | 显示全部楼层
你好好看看TI提供的历程吧,现在使用的是序列通道的单次采样。
ADC程序写的很烂,先自学然后提高,不要在网上炒来炒去的!

出0入0汤圆

 楼主| 发表于 2012-7-21 09:19:52 | 显示全部楼层
lvyunzeng 发表于 2012-7-21 09:02
你好好看看TI提供的历程吧,现在使用的是序列通道的单次采样。
ADC程序写的很烂,先自学然后提高,不要在网 ...

谢谢你的建议~~程序是我自己写的,可能确实有点烂,因为初学430,但是这个为什么是序列通道到此转换呢?我没有配置CONSEQ位,是默认的00,也就是单路单词转换,ADC12MCTL1|=INCH1是对应的通道,我不太懂,TI的例程都是在中断中读取寄存器的AD值了,我不想在中断中处理,想通过调用哪个函数来进行AD转换

出0入0汤圆

 楼主| 发表于 2012-7-21 09:56:25 | 显示全部楼层
可以了,搞出来了~~

出0入0汤圆

发表于 2012-7-21 14:32:57 | 显示全部楼层
yebobo 发表于 2012-7-21 09:56
可以了,搞出来了~~

lz哪里出问题了呢~?分享一下~

出0入0汤圆

发表于 2012-7-21 14:43:57 | 显示全部楼层
  case 0:               
      ADC12CTL0|=ADC12SC;    //开始转换AD00
      while((ADC12CTL1 & 0X01) ==1);//等待转换完毕   
      AD_data = ADC12MEM0;    //读取AD0
   break;

  case 1:   
     * ADC12CTL0|=ADC12SC;             //转换AD01     
      while((ADC12CTL1 & 0X01) ==1); //等待转换完毕
      AD_data = ADC12MEM1;      //读取AD1     
   break;
   
   case 2:   //转换AD02
      *ADC12CTL0|=ADC12SC;
      while((ADC12CTL1 & 0X01) ==1);      //等待转换完毕
      AD_data = ADC12MEM2;     //读取AD1

压根都没转换采集通道,我汗

出0入0汤圆

 楼主| 发表于 2012-7-21 14:56:07 | 显示全部楼层
Soul.art 发表于 2012-7-21 14:43
case 0:               
      ADC12CTL0|=ADC12SC;    //开始转换AD00
      while((ADC12CTL1 & 0X01) ...

我一开始是在AD初始化里配置了转换通道,后来在case里~~一样的结果,还是不行
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-3 09:28

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

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