大家好、支持者
我想使用自动序列模式每1ms 持续时间扫描一次 AIN0~AIN7 (AUTO_REPEAT = 0)、如图46所示:
根据我的理解、第一次(第一个1ms)、我们应发送 Auto-SEQ_CH 和 SEQ-start 命令、并按顺序读取8个通道 AD 值。
但我不清楚、下次(第二次1ms)、是否需要再次发送 AUTO_SEQ_CH 和 SEQ_START 命令 以启动新的 AD 读取过程?
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.
大家好、支持者
我想使用自动序列模式每1ms 持续时间扫描一次 AIN0~AIN7 (AUTO_REPEAT = 0)、如图46所示:
根据我的理解、第一次(第一个1ms)、我们应发送 Auto-SEQ_CH 和 SEQ-start 命令、并按顺序读取8个通道 AD 值。
但我不清楚、下次(第二次1ms)、是否需要再次发送 AUTO_SEQ_CH 和 SEQ_START 命令 以启动新的 AD 读取过程?
您好!
是的、您需要在第一次(第一个1ms)之后清除 SEQ_START 位(设置为0)、然后在您希望下次(第二个1ms)扫描时将 SEQ_START 设置为1。 如果您不清除(设置为0)、然后设置为1、则在第一个8个通道序列之后、您将始终从 AIN0读取数据。
您无需为第二个1ms 扫描发送 AUTO_SEQ_CH (SEQ_MODE[1:0]=10b)、并且可以将其配置为自动序列模式。
请告诉我您是否能够使其正常工作。
此致、
Keith Nicholas
精密 ADC 应用
感谢您的回答、 我的客户电路板没有、我只编写 ADC 代码、 稍后我们可以在开发板中对其进行测试。
每次我读取14个通道并 将其分为前8个通道和后6个通道时、这意味着6个通道应使用相同的 AIN0~AIN5、我们设计了一个开关多路复用器来实现它。 我的应用如下所示、您能给出一些意见
1.初始化 ADC、发送 AUTO_SEQ_CH (SEQ_MODE[1:0]=10b)
2.在1ms 内中断:
2.1,读取 前8个通道
MuxSwitch_8_Channels ();
AdcWriteReg (SEQ_START、0x01);//开始通道序列
WaitForAdcBusySignal();
read_8_channels();
AdcWriteReg (SEQ_START、0x00); //停止通道序列
2.2 ,读取第2 个6 个通道
MuxSwitch_6_通道();
AdcWriteReg (SEQ_START、0x01);//开始通道序列
WaitForAdcBusySignal();
read_6_channels();
AdcWriteReg (SEQ_START、0x00); //停止通道序列
// AdcWriteReg (SEQ_ABORT、0x01);//通过 SEQ_ABORT 停止通道序列
2.3.
重复执行到2. 1ms 中断
根据您的建议、在读取8个或6个通道后、我 向 SEQ_START 发送0x00。 并将0x01发送到 SEQ_START 进行下一步操作。
我不确定在2.2中、我只读取6个通道(AIN0~AIN5)、如果该操作正确、直接停止通道序列?
我检查 ADC 转换是否通过 ADC_BUSY 起义信号完成。
所以、请给我一些关于我的想法的评论。
谢谢!
您好!
我假设前6个通道(AIN0至 AIN5)的每个通道都有一个额外的2:1多路复用器。
请注意、ADS8166内部没有内部 FIFO、您必须读取每个通道的结果。 自动序列仅会更改内部多路复用器通道。 在/CS 变为高电平后、ADS8166将递增到下一个通道、并开始上一个通道的转换过程。 此外、在/CS 变为高电平后、您可以监控 READY 引脚是否为低电平至高电平、然后将/CS 拉至低电平并读取前一通道的转换结果。 在读取转换结果数据之前、每次/CS 变为高电平时、您都需要监控就绪引脚。 另一个不监控 READY 引脚的选项是在 ADS8166的最大转换时间 t conv-max=2500ns 内保持/CS 引脚高电平。 在此延迟之后、ADC 转换过程将完成、您可以将/CS 置为低电平来准备结果。
读取第一组8个通道的示例:
将/CS 设为低电平;
发送0x081C02h;写入 DEVICE_CFG 寄存器、SEQ_MODE=10b 用于自动序列模式
将/CS 设为高电平;
将/CS 设为低电平;
发送0x081E01h;写入 SEQ_START 寄存器、SEQ_START=1b 以开始通道扫描
将/CS 设为高电平;
对于 AIN0到 AIN7、为9次
{
等待2500ns;(完成转换所需的最长时间)
将/CS 设为低电平;
发送0x0000h;写入 NOP 命令并读取16b ADC 转换结果;第一次转换将是 AINx、然后是 AIN0、AIN1、AIN2、AIN3、 AIN4、AIN5、AIN6、AIN7
存储或处理 SPI 模块中接收到的16b 数据;
将/CS 设为高电平;
}
将/CS 设为低电平;
发送0x081E00h;将 SEQ_START 寄存器 SEQ_START=0b 写入清零位
将/CS 设为高电平;
当您读取第二组通道(6个通道)时、我建议您总共读取8个通道、并丢弃来自未使用通道(AIN6和 AIN7)的数据。 否则、序列发生器将不同步。 如果您不想读取额外的2个通道、则需要设置并清除 SEQ_ABORT 位以停止当前扫描序列。
读取第2组6 个通道的示例
将/CS 设为低电平;
发送0x081E01h;写入 SEQ_START 寄存器、SEQ_START=1b 以开始通道扫描
将/CS 设为高电平;
对于 AIN0到 AIN5为7次
{
等待2500ns;(完成转换所需的最长时间)
将/CS 设为低电平;
发送0x0000h;写入 NOP 命令并读取16b ADC 转换结果;第一次转换将是 AIN0、然后是 AIN0、AIN1、AIN2、AIN3、 AIN4、AIN5
存储或处理 SPI 模块中接收到的16b 数据;
将/CS 设为高电平;
}
将/CS 设为低电平;
发送0x081E00h;将 SEQ_START 寄存器 SEQ_START=0b 写入清零位
将/CS 设为高电平;
将/CS 设为低电平;
发送0x081F01h;写入 SEQ_ABORT 寄存器、SEQ_ABORT=1b 以停止通道扫描
将/CS 设为高电平;
将/CS 设为低电平;
发送0x081F00h;将 SEQ_ABORT 寄存器 SEQ_ABORT=0b 写入 清零位
将/CS 设为高电平;
此致、
Keith