TI论坛
直播中

李勇

8年用户 1391经验值
私信 关注
[问答]

ADS8364Y无EOC信号产生是怎么回事?


  • 1. 程序如下:
    #include
    #include "math.h"
    #define uchar unsigned char
    #define uint unsigned int
    #define ulint unsigned long int
    uint tta1 = 0;
    uint data1 = 0;
    uint data2 = 0;
    uint count = 0;
    long float total = 0;
    ulint output = 0;
    uchar chuan1[] = {0XCC,0X33,0XC3,0X3C};
    uchar chuan2[]={0XAA,0XC0,0X00,0X00,0X63,0X05,0X00,0X0A,0X00,0X0A,0XF8,0X00,0X00,0X1F};
    uchar chuan3[]={0XCC,0X33,0XC3,0X3C,0XAA,0XC1,0X08,0X00,0X00,0X01,0XCC,0X33,0XC3,0X3C};
    //串口0发送函数
    void UART0_send_data(uchar data0)
      {
      while(!(IFG2&UCA0TXIFG));
      UCA0TXBUF = data0;
      }
    //时钟初始化
    void sys_clock_init (void)                //万用表侧时钟正常
      {int i;
      WDTCTL = WDTPW + WDTHOLD;
      BCSCTL1 &= ~XT2OFF;
      BCSCTL2 |= SELM_2 + SELS + DIVS_1;
      BCSCTL3 |= XT2S_2;
      while((IFG1&OFIFG))
        {
        IFG1 &= ~OFIFG;
        for(i=0;i<0xff;i++);
        }
      P5DIR = 0X70;
      P5SEL = 0X70;
      P1SEL = 0X10;          //p1.4设置为外围模式,smclk
      P1DIR = 0X10;
      }
    //串口初始化
    void sys_UART0_init(void)      //串口与液晶屏通讯正常
      {
      UCA0CTL1 |= UCSSEL_2;
      UCA0BR0=34;
      UCA0BR1=0;
      UCA0MCTL |= UCBRS2 + UCBRS1;
      UCA0CTL1 &= ~UCSWRST;
      UCA0MCTL &= ~UCOS16;
      P3DIR |= 0X10;
      P3SEL |= 0X10;
    //  __bis_SR_register(GIE);
      _BIS_SR(GIE);
      }
    //采样IO口初始化
    void sys_IO_init()
      {
      P1IE |= 0X08;               //p1.3中断允许开启
      P1IES |= 0X08;              //p1.3下降沿触发中断
      P1IFG &= ~0X08;             //清除中断标志
      P1OUT &= ~0X20;
      P1OUT |= 0X20;            //ADC_RST,先8364复位,再置位

      P1DIR |= 0XF5;              //p1的012 456位设置为输出方向
      P1OUT &= ~0X01;             //清零,cs片选信号
      P1OUT |= 0X04;              //置1,8364读取信号停止
      P1OUT &= ~0X40;             //HOLDA B C=0

      P2DIR |= 0X87;              //p2的012和7位设置为输出
      P2OUT &= ~0X07;             //P2.0 1 2,设置读取模式为0,CHA0输出
      P2OUT |= 0X80;

      __bis_SR_register(GIE);
      }
    //定时器A初始化
    void sys_timerA_init(void)
      {
      TACCR0 = 200;
      TACCTL0 |= CCIE;
      TACTL |= TASSEL_2 + MC_1;   //ta2,即p1.4产生5k方波
      }

    //主函数
    void main (void)
      {
      uint i,j,k;
      WDTCTL = WDTPW + WDTHOLD;
      sys_clock_init();
      sys_UART0_init();
      sys_TimerA_init();
      sys_IO_init();
      while(1)                    //液晶界面切换程序。
       {
        for(i=0;i<21;i++)
        {
        UART0_send_data(0XAA);
        UART0_send_data(0X70);
        UART0_send_data(i);
        for(j=0;j<4;j++)
          UART0_send_data(chuan1[j]);
        for(j=0xffff;j>0;j--)
          for(k=0;k<5;k++);
        }
       }
      }
    #pragma vector = PORT1_VECTOR
    __interrupt void PORT_1 (void)  //进入中断,用指示灯闪烁表明EOC信号是否产生
      {
      count++;
      if(count == 600)
        {
        P2OUT ^= 0X80;
        count=0;
        }
      P1IFG &= ~0X08;
    /*
      uchar i;
      uint c ,d;
      P1IFG &= ~0X08;           //中断标志清零
      count++;
      P1OUT ^= 0X04;            //P1.2取反(变为低电平)
      for(i=0;i<10;i++);        //延时,等待读取数据
      data1 = P4IN;
      P1OUT ^= 0x04;            //p1.2取反(变为高电平)
      P1OUT ^= 0x04;            //p1.2取反(变为低电平)
      for(i=0;i<5;i++);         //延时,等待读取数据
      data2 = P4IN;         
      total += pow(data2*256+data1,2);
      if(count==5000)
        {
        P2OUT ^= 0X80;
        output = sqrt(total/2500);
        d = output % 255*4;
        c = output /255*4;
        for(i=0;i<14;i++)
          UART0_send_data(chuan2);
        UART0_send_data(0X00);
        UART0_send_data(0X00);
        UART0_send_data(c);
        UART0_send_data(d);
        for(i=0;i<14;i++)
          UART0_send_data(chuan3);
        count=0;
        }
      P1OUT ^= 0X04;            //p1.2取反(高电平),停止读取数据
    */
    }
    #pragma vector = TIMERA0_VECTOR                    //万用表测HOLDX信号1khz正常
    __interrupt void Timer_A(void)
      {
      tta1++;
      if(tta1 == 10)
        {
          P1OUT ^= 0X40;            //HOLDA HOLDB HOLDC 使用p1.6共同控制
          tta1 = 0;
        }
      }


    2 测试EOC信号是否输出:将msp430f2619单片机的P1.3脚接EOC。如果产生中断,则p2.7即led闪烁。
    3. 实验:一直没有看到led闪烁。
    4. 中断是否相应:将clk接入p1.3,led闪烁正常。

回帖(1)

熊本熊

2025-1-17 17:30:52
ADS8364Y是一款高速模数转换器(ADC),用于将模拟信号转换为数字信号。EOC(End of Conversion)信号是ADS8364Y的一个输出信号,表示转换完成。如果EOC信号没有产生,可能是由以下几个原因导致的:

1. 硬件连接问题:请检查ADS8364Y与微控制器之间的硬件连接是否正确,包括电源、地线、数据线和时钟线等。

2. 时钟信号问题:ADS8364Y需要一个时钟信号来同步转换过程。请检查时钟信号是否正确连接和配置。

3. 配置问题:请检查ADS8364Y的配置是否正确。根据您的代码,您已经发送了一些配置命令,但请确保这些命令是正确的,并且已经正确地设置了ADS8364Y的工作模式。

4. 程序问题:请检查您的程序是否正确地初始化了串口,并且正确地发送了配置命令。此外,还需要检查程序是否正确地处理了EOC信号。

以下是您代码的一些建议:

1. 确保包含正确的头文件和库文件,例如`#include `(根据您的微控制器型号)。

2. 确保串口初始化函数`UART0_init()`已经正确配置,并且波特率等参数设置正确。

3. 在发送配置命令之前,确保ADS8364Y已经正确复位。

4. 在发送配置命令之后,检查ADS8364Y的响应,确保它已经正确地接收和执行了这些命令。

5. 如果您使用的是中断方式来处理串口通信,请确保中断服务函数已经正确配置,并且能够正确地处理EOC信号。

6. 调试程序时,可以使用示波器或逻辑分析仪来观察EOC信号的波形,以确定信号是否正确产生。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

×
20
完善资料,
赚取积分