主题中讨论的其他器件: ADS1148
您好!
默认情况 下、希望使用自动扫描模式通道直接读取(无命令)。
2.能够通过 SPI 总线发送数据、在 DSO 上观察到相同情况
但 MISO 引脚始终为零
4.用软件控制启动、但 DRDY 始终处于高级状态
请帮助我完成工作、我已经花了将近2周时间、但没有取得任何成果。
谢谢、此致、
Maharudra Bade
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.
您好!
默认情况 下、希望使用自动扫描模式通道直接读取(无命令)。
2.能够通过 SPI 总线发送数据、在 DSO 上观察到相同情况
但 MISO 引脚始终为零
4.用软件控制启动、但 DRDY 始终处于高级状态
请帮助我完成工作、我已经花了将近2周时间、但没有取得任何成果。
谢谢、此致、
Maharudra Bade
您好、Maharudra、
如果 DRDY 始终处于高电平、则表示 ADS1158未启动。 这通常表示时钟问题、但可能还有其他问题。 此 E2E 帖子 更详细地解释了此问题的可能原因。
您是将晶体与 ADS1158配合使用还是使用外部振荡器? 调整晶体驱动电路可能是一项挑战、您可以从 这些 其他 E2E 文章中看到有关该问题的信息。
如果您愿意、您可以发布原理图并提供寄存器设置、以便我们进行审阅。 但是、如果您使用的是晶体、这很可能是问题的根源。
布莱恩
谢谢 Bryan、
根据您的建议、观察了以下要点。
没有来自晶体振荡器的时钟信号、我正在使用具有22pF 电容的8MHz 晶体作为负载。
2.我使用的是所有默认设置,而不是更改任何配置。
3.请查找随附的原理图以分析任何其他问题。
我想通过脉冲转换命令获取所有单端通道读数、请指导我发送命令、以便在没有/有状态字节的情况下获取通道 AIN0至 AIN15读数。
再次感谢您的宝贵指导。
Maharudrae2e.ti.com/.../Schematics-_2D00_ida-controller-card.pdf
您好、Maharudra、
感谢您发送此信息。
您发送的原理图显示了一个具有4.7pF 负载电容器的16MHz 晶体、与上述情况不同。 无论采用哪种方法、建议的晶振频率为32.768kHz、并且您不能将8或16MHz 晶振与 ADS1158配合使用。 不过、您可以使用频率为16MHz 的外部时钟振荡器、但这不是您所描述或原理图中显示的系统。 需要通过 CLKIO 引脚连接振荡器、如 ADS1148数据表中的图27所示。
我建议为您的应用使用正确的时钟源(32kHz 晶体或16MHz 振荡器)、否则器件将无法正常工作。 鉴于我在之前的响应中链接到的 e2e 帖子中描述的问题、建议在晶体上使用振荡器。
布莱恩
尊敬的 Bryan:
感谢您的回复。
根据您的建议进行了修改。
将晶振更改为32.768kHz、电容负载为14.7pf
开始从 ADS1158获取 MISO 信号。
>现在、我想在固定模式下测量通道
>用于配置 CONFIG0和 MUXSCH 寄存器的命令
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x60); //寄存器写入命令写入 config0
SPI.transfer (0x22);
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x62); 针对 muxsch 的//register write 命令
SPI.transfer (0x01);
digitalWrite (adc_ss、HIGH);
>然后、为了确保向寄存器写入任何内容、会发出以下命令来读取电阻器的默认值
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x40);
字节 CONFIG0 = SPI.transfer (0);
serial.print ("config0:");serial.println (config0、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x41);
字节 conF1 = SPI.transfer (0);
serial.print ("config1:");serial.println (conf1、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x42);
字节 MUXSCH = SPI.transfer (0);
serial.print ("MUXSCH:");serial.println (MUXSCH、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x43);
字节 muxdif = SPI.transfer (0);
serial.print ("muxdif:");serial.println (muxdif、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x44);
字节 muxsg0 = SPI.transfer (0);
serial.print ("muxsg0:");serial.println (muxsg0、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x45);
字节 muxsg1 = SPI.transfer (0);
serial.print ("muxsg1:");serial.println (muxsg1、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x46);
字节 sysred = spi.transfer (0);
serial.print ("sysred:");serial.println (sysred、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x47);
字节 gpioc = spi.transfer (0);
serial.print ("gpioc:");serial.println (gpioc、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x48);
字节 gpiod = SPI.transfer (0);
serial.print ("gpio:");serial.println (gpiod、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
digitalWrite (adc_ss、low);delay (5);//切换 ss 信号以根据 ADS1158数据表复位 SPI 接口
digitalWrite (adc_ss、HIGH);
digitalWrite (adc_ss、low);
delayMicroseconds (1);
SPI.transfer (0x49);
字节 id = SPI.transfer (0);
serial.print ("id:");serial.println (id、hex);
digitalWrite (adc_ss、HIGH);
延迟(1000);
>找到了与大多数寄存器不匹配的以下结果。
请参阅随附的图像文件以了解寄存器状态。
您好、Maharudra、
您如何配置 SPI 外设?
我将再次检查您的 MCU 的 SPI 外设是否配置为 SPI 模式1 (CPOL = 0 -> SCLK 在未激活时为低电平、CPHA = 0 ->数据在 SCLK 的上升沿有效)、以及 SCLK 频率是否不超过 ADC 主时钟的0.5倍 (请参阅 数据表第7页上的 tSCLK 要求)。