6568|11

13

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

使用定时器0来ad采样问题 [复制链接]

定时中断 ad采样问题

写了一个定时中断函数,将AD采样写在定时中断中,结果不能得到正确的AD值,定时时间为0.1ms,采用dsp2806,系统时钟为50MHz,外部引脚ADCIN已经连接到1.6V直流电压,为什么我的AD值却总是零呢?能够进入到定时器的中断里,就是AD=0,难道AD没启动吗?

请高手帮帮忙!!

void ADC_Init(void) 
{
    AdcRegs.ADCTRL1.bit.RESET = 1;    //Reset ADC module
    asm(" RPT #20||NOP");
    AdcRegs.ADCTRL3.all = 0x00E2;     // Power up bandgap/reference/ADC circuits  
    AdcRegs.ADCTRL1.bit.RESET = 0;
    AdcRegs.ADCTRL1.bit.SUSMOD = 1;   // 模式3
    AdcRegs.ADCTRL1.bit.ACQ_PS = 0x4; // SOC脉宽
    AdcRegs.ADCTRL1.bit.CPS = 1;      // ADCCLK=FCLK/2
    AdcRegs.ADCTRL1.bit.CONT_RUN =0;  // ???
    AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;
    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // cascade mode
   

    AdcRegs.ADCMAXCONV.all = 0x07;
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 as 1st SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0; // Setup ADCINB0 as 2nd SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8;
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x8;   
    AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x1;
    AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;   
    AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x9; // Setup ADCINA1 as 3st SEQ1 conv
    AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x9; // Setup ADCINB1 as 4st SEQ1 conv  
         
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0;  // disable SEQ1 interrupt (every EOS)
    AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 0;// disable SOCA from ePWM to start SEQ1
     
    AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
    asm(" RPT #4||NOP");
    AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;  
}

interrupt void  TINT0_ISR(void)      // CPU-Timer 0     P=0.1ms
{
     i= AdcRegs.ADCRESULT0;
     result[0]=i>>4;
     i= AdcRegs.ADCRESULT1;
     result[1]=i>>4;
     i= AdcRegs.ADCRESULT2;
     result[2]=i>>4;
     i= AdcRegs.ADCRESULT3;
     result[3]=i>>4;

     i= AdcRegs.ADCRESULT4;
     result[4]=i>>4;
     i= AdcRegs.ADCRESULT5;
     result[5]=i>>4;
     i= AdcRegs.ADCRESULT6;
     result[6]=i>>4;
     i= AdcRegs.ADCRESULT7;
     result[7]=i>>4;       
  i=result[0]+result[1]+result[2]+result[3];
     i=i>>2;
     g_uSample[g_uNum]=i;

  i=result[4]+result[5]+result[6]+result[7];
  i=i>>2;
  g_uSample1[g_uNum]=i;
  g_uNum++;
  if(g_uNum>255) g_uNum=0;
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;    //Restart the ADC
  asm(" RPT #4||NOP");
  CpuTimer0Regs.TCR.bit.TIF=1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 
        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
       EINT;  
}
void main(void)

{
    InitSysCtrl(); 
    Config_Gpio();
    ADC_Init();
    GPIO_Init();
    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl();
    InitPieVectTable();
    InitCpuTimers();   //Initialize the Cpu Timers
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;   //Timer0
    IER |= M_INT1;    //Timer0  1.7
    EINT;   // Enable Global interrupt INTM
    ERTM;   // Enable Global realtime interrupt DBGM
    ConfigCpuTimer(&CpuTimer0, 50, 100000);
    StartCpuTimer0();
 for(;;)
 {

 }
}

最新回复

是芯片坏掉了? 楼主你是不是换块芯片就好了,那块"坏掉"芯片不要丢了,那块芯片应该没有坏,很少会出现芯片上某一模块损坏,其他功能完好的现象。 我估计就是楼主的焊接问题。  详情 回复 发表于 2012-4-18 10:39
 
点赞 关注

回复
举报

569

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
用TI例程包中的例程试一下,如果还有问题就检查硬件。

否则比对例程检查软件。
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 hlx3012 的帖子

你好,我用例程ADCSOC试了一下,采集到的数据还是零,但是硬件应该没问题,我用万用表测试过,输入电压值为1.6V,为什么呢?
 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

4
 

如果程序没问题。那就只能是硬件问题。

 

 

比如焊接,比对一下芯片厂家的参考电路吧。

 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

5
 

硬件应该没问题吧?

我用万用表测试过ADCINA0  ADCINA1的电压值,是1.6V,这是不是就已经说明硬件没有问题了呢?
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

6
 
仔细看看,你实际硬件电路和你采样设置是否相同。另请检测下AD是否正常供电。一般不会是DSP的问题
 
个人签名工程 = 数学+物理+经济
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 安_然 的帖子

你好,我读AD的标志位可以发现AD的确启动了转换,但是结果却一直为0,为了防止我采样的管脚错了,我设置采样为级联顺序采样,采样通道为16,将所有管脚的值都读出来,但是一直是0,请问还有可能是哪方面的原因错了呢?
 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

8
 

我猜测就是硬件问题。

 

楼主可以看看ADCLO引脚是否有接地,ADC的ACDDREFBG,AVSSREFBG....有没有正确连接,如果用的是内部参考那么ADCREFP有没有按要求接地。

 

如果都有,那我建议楼主卸下芯片重新焊一下

 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

9
 
楼主,外部硬件确实有电压,但是采集的时候却采不到。那么我觉问题集中在DSP上。DSP 硬件及软件。楼主用例程也采不到,那说明很可能是硬件问题。看看DSP供电什么的。不行的话,换一块DSP试试
 
个人签名工程 = 数学+物理+经济
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

10
 
解决了,是我DSP芯片坏掉了。

赞赏

1

查看全部赞赏

 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

11
 
是芯片坏掉了?

楼主你是不是换块芯片就好了,那块"坏掉"芯片不要丢了,那块芯片应该没有坏,很少会出现芯片上某一模块损坏,其他功能完好的现象。

我估计就是楼主的焊接问题。
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 11楼 hlx3012 的帖子

应该是芯片的问题或者你说的焊接问题吧,我目前认为是芯片上的AD坏了,因为我的板子是焊死的,不方便直接更换芯片,我又重新换了一套板子,功能就正常了。软件程序没有改动过的。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表