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.

[参考译文] ADS1158:使用 Arduino IDE 的单端输入的 ADS1158和 ESP32示例代码

Guru**** 2393725 points
Other Parts Discussed in Thread: ADS1158, ADS1148

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/886535/ads1158-ads1158-and-esp32-sample-code-for-single-ended-inputs-using-arduino-ide

器件型号:ADS1158
主题中讨论的其他器件: ADS1148

您好!

默认情况 下、希望使用自动扫描模式通道直接读取(无命令)。

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 要求)。