打印

28335 AD转换问题

[复制链接]
1752|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luoqiang10605|  楼主 | 2014-5-5 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:下载程序后只能进行一次AD转换 调节所测电压不会改变显示 重新下载程序后会改变数值 求解 不知是哪个配置出了问题

while(1)
   {
            //AdcRegs.ADCTRL2.all = 0x4000; //reset
     //AdcRegs.ADCTRL2.all = 0x2000; //software begin
            adc_set( );
            AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
     AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
    display(result*3.0/4096.0);
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
     
    delay();
   
   }      
}  
void  adc_set(void )
{
    InitAdc();  // For this example, init the ADC   
   AdcRegs.ADCTRL1.bit.ACQ_PS = 0x01;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x3;
   AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;        // 1  Cascaded mode
   AdcRegs.ADCTRL1.bit.CONT_RUN=1;
   AdcRegs.ADCTRL1.bit.SEQ_OVRD=1;
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x04;
         // Setup continuous run
  
    // Step 5. User specific code, enable interrupts:

   // Start SEQ1        
        AdcRegs.ADCTRL2.all = 0x2800; //software begin
        while  (AdcRegs.ADCST.bit.INT_SEQ1== 0) { }   // Wait for interrupt
        
        AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
      
        result =((AdcRegs.ADCRESULT0>>4) );
        //display(result*3.3/4096.0);
         AdcRegs.ADCTRL1.bit.RESET = 1;
}  

相关帖子

沙发
zhangmangui| | 2014-5-5 22:30 | 只看该作者
板凳
zhangmangui| | 2014-5-5 22:30 | 只看该作者
有一个很重要的问题   你的ADC时钟打开了吗

使用特权

评论回复
地板
luoqiang10605|  楼主 | 2014-5-6 09:42 | 只看该作者
要是没打开怎么进行转换 我的能转换一次

使用特权

评论回复
5
luoqiang10605|  楼主 | 2014-5-6 09:42 | 只看该作者
EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK;        // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;

使用特权

评论回复
6
chengdongx| | 2014-5-6 16:11 | 只看该作者
仿真看下啊,看看变量

使用特权

评论回复
7
wang_2003| | 2014-5-7 14:45 | 只看该作者
是不是这里有问题呢?
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x04;  这里选择的是4这个寄存器;
但是你的取值 result =((AdcRegs.ADCRESULT0>>4) ),取的是ADCRESULT0?

使用特权

评论回复
8
luoqiang10605|  楼主 | 2014-5-8 10:09 | 只看该作者
这里没问题

使用特权

评论回复
9
NWPU_CHEN| | 2014-5-8 17:05 | 只看该作者
看完后程序写的太乱了,描述问题也不是很清楚,写入程序第一次显示的数值是不是你第一个输入的电压值?再次下载程序后数值显示能变化与输入是否匹配?AD转化频率是多少?程序中WHILE(1)应该是主函数中的死循环吧,你的adc_set这个函数应该是对ADC的初始化加上得到转化后结果,不过你在主函数中竟然无数次初始化ADC?多次硬件初始化极易跑飞,这点就是程序的一个大问题,其次你使用了序列1的中断,不过你的中断好像啥事也没做,没看到你的中断函数内容,仅仅看到了你adc_set中等待中断,有了中断立马清除标志,表示很不理解,其次你在adcset函数中算result,但是你的AD转化是由SOC_SEQ1=1触发的,但是你的result却是在adc_set中算的,转换完成result数据还是前一次的,你的adc工作于连续模式,应该一直在转化数据,好多配置也没有贴出来,所有ADC配置放入初始化中,建议将初始化放到循环外边,循环中先转化然后计算结果,最后显示,最好用将这部分放到中断函数中,工作于启停模式

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

448

帖子

3

粉丝