10770|5

8

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

28335的ADC问题 [复制链接]

我的28335 AD采集的代码为:
void Ad_init(void)
{
      InitAdc();        
   
       AdcRegs.ADCTRL1.bit.ACQ_PS =1;
       AdcRegs.ADCTRL1.bit.CPS = 0;
       AdcRegs.ADCTRL3.bit.ADCCLKPS =0;  //25Mhz
       AdcRegs.ADCTRL1.bit.SUSMOD=3; //3:仿真器停立即停

       AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  级联
       AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //不(覆盖由MAX_CONV1设置的最大通道数,在整个模块通道内循环转换 )
       AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

      AdcRegs.ADCCHSELSEQ1.all = 0x0;  //初始化所有的ADC同通道到A0
      AdcRegs.ADCTRL3.bit.SMODE_SEL=1;    //同步采样
       AdcRegs.ADCMAXCONV.bit.MAX_CONV1=1;
       AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//采样 ADCINA0
       AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;      
}
void InitAdc(void)
{
    extern void DSP28x_usDelay(Uint32 Count);
    EALLOW;
         SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
         ADC_cal();
     EDIS;
     AdcRegs.ADCTRL3.all = 0x00E0;  // Power up bandgap/reference/ADC circuits
     DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels
}
void main(void)
{
    InitSysCtrl();
    EALLOW;
     SysCtrlRegs.HISPCP.all = 0x3;
     EDIS;
    Ad_init();
    while(1)
    {
                ADResult0 = (AdcRegs.ADCRESULT0 >>4);
                  ADResult1 =  (( ADResult0  * 3) / 4096);
                DELAY_US(5000L);
              AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
    }
}
我把第一通道接了GND。调试时,在主程序的while中的 AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;加了断点,发现前两次采集到的ADResult为0,后面再采集时,值逐渐增到,直到为2.99999V。
请问大师们,我是哪里错了?

最新回复

应该除以4096.0,这样的结果会包含小数的,这是c语言中"/"的基本的用法  详情 回复 发表于 2016-3-24 16:49
点赞 关注
 

回复
举报

3243

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
会不会是其他通道的影响?其他通道怎么接的?悬空吗?
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

8

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
本帖最后由 dfsmile 于 2015-6-4 21:11 编辑

谢谢回复!
我采集的是第1通道(接了GND),第2通道确实是悬空了,第3通道和第4通道接了信号,第5通道接了GND,其余通道均悬空。我把第2通道也接到了GND,调试发现:前两次采集的是0,从第三次起,每次采集到的都是0.85v,一直都是,没有再出现2.999999v的情况。
请问大师,现在的问题是?和从第6通道开始的悬空有关吗?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
ADResult1 =  (( ADResult0  * 3) / 4096);你这个地方/是整数,前两次的分母要是小于分子的话,相除(/)的结果肯定为零

点评

那应该怎么计算它的值?你说的问题实际上是取余了,所以会是0对吧?  详情 回复 发表于 2016-2-28 09:19
 
 
 

回复

22

帖子

1

TA的资源

一粒金砂(中级)

5
 
晨曦清茗 发表于 2015-12-20 20:11
ADResult1 =  (( ADResult0  * 3) / 4096);你这个地方/是整数,前两次的分母要是小于分子的话,相除(/)的 ...

那应该怎么计算它的值?你说的问题实际上是取余了,所以会是0对吧?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
love科比精神 发表于 2016-2-28 09:19
那应该怎么计算它的值?你说的问题实际上是取余了,所以会是0对吧?

应该除以4096.0,这样的结果会包含小数的,这是c语言中"/"的基本的用法
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表