This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS8331 工作流程问题

Other Parts Discussed in Thread: ADS8332, ADS8331

请教各位

  8331在开发时 使用手动模式(程序如task1),连续100次采集单通道数据 是没有问题的;但是现在想循环采集4个通道的数据,改写成task2,采集回来的数据是每通道采两次(描述成通道形式就是 channel0、0、1、1、2、2、3、3、0、0......),如果将ADS8331X_CFR_config(ads833xHandle) 配置CFR这句放在循环里,则采回来单次数据,不过不是从0通道开始(3、0、1、2、3、0...),也尝试过采用自动模式 但是采集的通道顺序都是乱的。

  请问 1.8331在开发 标准的工作流程是什么?  2.上述问题该怎么改进呢?3.采用自动模式的话 要怎么配置CFR?  如有回复 万分感谢!

void Task1 (UArg arg0, UArg arg1)
{
    int j;
    uint16_t Buf[100];
    uint16_t channel[0] = {0x0000,0x1000,0x2000,0x3000};
    uint32_t EOC_State;

    //ads833xHandle = ADS833X_Open(); //打开SPI(写在TASK初始化下)
    ADS8331X_CFR_config(ads833xHandle);//配置CFR模式为: E3FD, 手动选择通道&手动触发转换

    //while(1)
    for(j=0;j<100;j++)
    {
            int i;
            ADS8331X_Select_Channel(ads833xHandle,&channel[0],1);//设置采集通道为channel 0
            pin_set(CC2640R2DK_4XS_PIN_Convst ,0);//启动convst转换
            for(i=1;i<=1000;i++)
            {
            }
            pin_set(CC2640R2DK_4XS_PIN_Convst ,1);//转换信号复位

            //EOC_State = PIN_getOutputValue(CC2640R2DK_4XS_PIN_EOC); //读EOC状态
            Buf[j] = ADS8331X_ReadData(ads833xHandle);//采集数据
           
    }
}



void Task2 (UArg arg0, UArg arg1)
{
    int j,m=0;
    uint16_t Buf[100];
    uint16_t channel[4] = {0x0000,0x1000,0x2000,0x3000};
    uint32_t EOC_State;

    //ads833xHandle = ADS833X_Open(); //打开SPI(写在TASK初始化下)
    ADS8331X_CFR_config(ads833xHandle);//配置CFR模式为: E3FD, 手动选择通道&手动触发转换

    //while(1)
    for(j=0;j<100;j++)
    {
            int i;
            //ADS8331X_CFR_config(ads833xHandle);//配置CFR
            ADS8331X_Select_Channel(ads833xHandle,&channel[m],1);//设置采集通道为channel m
            m++;
            pin_set(CC2640R2DK_4XS_PIN_Convst ,0);//启动convst转换
            for(i=1;i<=1000;i++)
            {
            }
            pin_set(CC2640R2DK_4XS_PIN_Convst ,1);//转换信号复位

            //EOC_State = PIN_getOutputValue(CC2640R2DK_4XS_PIN_EOC); //读EOC状态
            Buf[j] = ADS8331X_ReadData(ads833xHandle);//采集数据
  
            if (m==4)
            {
                m=0;
            }
    }
}

  • 您好,
    感谢您对TI产品的关注!
    手动选择模式通过配置寄存器(CFR)启用,方法是将CFR_D11位设置为0(见数据手册table 5)。采集过程从选择输入通道开始,该选择通过将所需信道号写入命令寄存器(CMR)来完成;详情见数据手册table 4。
    如果设备编程为自动通道选择模式,则所有通道的信号将按固定顺序采集。在自动选择模式下,进入此模式后的第一次转换总是来自启用此模式之前完成的最后一次转换的通道。然后这些通道依次扫描到最后一个信道(即,对于ADS8331,是通道3,对于ADS8332,是通道7),然后返回到开始序列的通道。例如,如果在启用自动选择模式之前转换中使用的最后一个通道是通道2,那么ADS8332的序列将是:2、3、4、5、6、7、2等等,如数据手册图39所示。如果手动选择模式中的最后一个通道碰巧是通道7,则顺序将是:7、7、7,依此类推。图40显示了在自动通道选择模式下序列中的下一个通道何时激活。这个时序允许下一个通道在被采集之前稳定下来。在CFR_D11设置为0后,该自动排序停止循环。
  • 你好,我是按照手册上的寄存器命令写的,手动模式3FD,在循环中写入通道号j ,启动convst  ,250微妙后发送0xD000,在示波器上看到 读转换结果时EOC处于高电平,,,遇到的问题是 每个循环我要读两次才可以 , 如果每个循环读一次转换结果 下一次循环的转换结果还是上一个通道的;另外 有一点是循环前四次的读数结果是一个通道的  

  • 您配置寄存器(CFR)配置为3FD,则为手动通道选择和手动触发模式。EOC/INT状态输出引脚可编程。它可用作EOC输出(CFR_D[7:6]=11),其中低时间等于转换时间。当状态引脚编程为EOC且极性设置为低激活状态时,引脚的工作方式如下:在手动触发模式启用的情况下,CONVST变低后,EOC输出立即变低。EOC在整个转换过程中保持低水平,在转换结束时返回高水平。因此,在示波器上看到 读转换结果时EOC处于高电平是正常的。
    因为您采用的是Deep Power Down,需要在SDI管脚上发送wake-up 和将转换器置于Deep Power Down模式的命令,查看数据手册Figure 44时序图