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.

[参考译文] ADS1292:SPI通信问题???

Guru**** 2539500 points
Other Parts Discussed in Thread: ADS1298, ADS1299, ADS1294, ADS1292

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/623664/ads1292-spi-communication-problem

部件号:ADS1292
线程中讨论的其他部件:ADS1298ADS1299ADS1294

亲爱的同事们

我正在使用ADS1292IPBS制作2通道EEG设备。

实际上,我们的团队已经使用ADS1294,ADS1298和ADS1299开发了EEG器件。

所以我开始设计电路和固件代码。

我想先解释一下我的测试设置。

我的EEG设备改良了8位MCU,ATMEGA168和ADS1292IPBS。

MCU通过UART通信与主机PC上的LabVIEW软件通信。

在固件开始时,我初始化了SPI通信,设置了ADS1292寄存器,然后设置了UART通信。

MCU和主机PC之间的UART通信正常。

然后,我尝试验证SPI通信。

因此,我修改了ADS1292上的CONFIIG2寄存器,以便在两个通道上以1Hz的频率生成内部测试信号。

我们的数据采样率为250Hz。 (数据表显示默认值为500Hz。)

但是,测试信号似乎未正确生成。  

我打开设备并操作LabVIEW用户软件来收集测试信号

不幸的是,很难获得预期信号(方波测试信号)

在大多数情况下,ADS1292不会生成测试信号。 它只是随机发出类似噪音的信号。

此外,有时还会生成具有默认采样速率的信号... (我根本没有更改采样率)

如果我打开设备并再次尝试操作,则有时会出现正确的信号....但不会出现多次....

固件未更改...

我只是关闭/打开设备,但我的EEG设备上的ADS1292工作方式不同。

我怀疑在大部分个案中,注册纪录册的初始化或定义不正确,但我不能肯定。

我想知道此故障的根本原因。

我查看过数据表很多次,没有发现代码上有任何错误(我一开始对ADS1292设置充满信心)。

但问题仍然存在,我正在努力寻找解决方案...非常困难!!!

请问您能给我一些有用的建议吗??

如何解决这种现象??

为了解我的问题,请查看所附图片...

它显示测量的2通道方波测试信号。

遗憾的是,尽管第一个信道设置相同,但第二个信道仍无法正常工作...

(此时,通道1在正确的采样速率(250Hz)下运行良好。 x轴上的数字1000表示第1000点。

图中显示了精确频率的4秒测量值。)

我在等待您的帮助。

谢谢

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

    您好Heejin:

    感谢您的帖子!

    首先,您能否共享编程后从设备上读回的完整注册设置? 我们应确认这些设置与您要写入的内容匹配,并且设置内部测试信号的设置正确。

    此外,测试信号的振幅应该大得多。 我认为这可能是一个简单的计算错误或缩放错误。

    此致,

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

    你好,Andrews

    我很高兴看到你的答复。
    我将在此处介绍ADS1292的完整寄存器设置。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    [A]初始化ADS1292...

    -初始流量
    1) CLKSEL =高,表示使用内部时钟,然后等待10毫秒,等待振荡器唤醒
    2)重置=高,然后等待1秒进行开机重置
    3) CS =低
    4)复位=低以发出复位脉冲,然后等待1毫秒(18tclk)
    5)复位=高到端复位脉冲,然后等待1ms (18tclk)
    6) SPDR = SDATAC (SPDR:SPI数据寄存器)
    7) CS =高

    [B] ADS1292寄存器设置

    1) CS =低以启动SPI通信
    2)下面的特定设置

    SPDR = 0b100.0001万;while (!(SPSR和0x80));//使用起始地址01h (config1)写入寄存器
    SPDR = 0b0.0001万;while (!(SPSR和0x80));//要写入的寄存器数:2 (配置1,2)
    SPDR = 0b0.0001万;while (!(SPSR和0x80));// config1
    SPDR = 0b1010万;while (!(SPSR和0x80));// CONFI2.2

    SPDR = 0b100.01万;while (!(SPSR和0x80));//具有起始地址04h (ch1set)的写入寄存器
    SPDR = 0b0.0001万;while (!(SPSR和0x80));//要写入的寄存器数:2 (CH1SET,CH2SET)
    SPDR = 0b110万;while (!(SPSR和0x80));// CH1SET
    SPDR = 0b110万;while (!(SPSR和0x80));// CH2SET

    3)延迟1毫秒
    4) CS =高以停止SPI通信

    [C]测试信号设置

    1) CS =低以启动SPI通信
    2)下面的特定设置

    SPDR = 0b100.001万;while (!(SPSR和0x80));//使用起始地址02h (config2)写入寄存器
    SPDR = 0b0万;while (!(SPSR和0x80));//要写入的寄存器数:1.
    SPDR = 0b1010.0011万;while (!(SPSR和0x80));// CONFI2.2 -> 1Hz时的方波,+/-1mV幅度

    SPDR = 0b100.01万;while (!(SPSR和0x80));//具有起始地址04h (ch1set)的写入寄存器
    SPDR = 0b0.0001万;while (!(SPSR和0x80));//要写入的寄存器数:2 (输入值:1)

    SPDR = 0b1.0101万;while (!(SPSR和0x80));// CH1SET
    SPDR = 0b1.0101万;while (!(SPSR和0x80));// CH2SET

    3)延迟1毫秒
    4) CS =高以停止SPI通信

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    谢谢

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

    感谢您提供寄存器设置。

    最好在测试之前读取所有寄存器,以确认设置是否正确写入设备。 这包括ID寄存器,它可以告诉我们设备是否已正确通电。

    我看不到您写入设备的设置有任何问题。 是否在写入寄存器设置后再次启用RDATAC模式? 或者,您是否更喜欢在每次需要读取数据时发送RDATA命令?

    另一个要考虑的选择是这是否可能是一个沟通问题。 您是否可以访问逻辑分析仪以查看DOUT上的数据? 可能SPI计时存在问题,使您无法读取通道2上的数据。 如果可能,请在捕获数据时查看/CS,SCLK,DRDY和DOUT。

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

    你好,Andrews

    感谢您的帮助。

    事实上,问题似乎已解决。

    在正确测量两个通道上的每个命令和测试信号后,我插入了1毫秒延迟。

    下面的代码显示了解决方案。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  

    SPDR = 0b100.001万;while (!(SPSR和0x80));//使用起始地址02h (config2)写入寄存器

    delay_ms(1);// 1毫秒延迟。

    SPDR = 0b0万;while (!(SPSR和0x80));//要写入的寄存器数:1.  

    delay_ms(1);// 1毫秒延迟。

    SPDR = 0b1010.0011万;while (!(SPSR和0x80));// CONFI2.2 -> 1Hz时的方波,+/-1mV幅度  

    delay_ms(1);// 1毫秒延迟。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  

    我恐怕登记册写得不好,可能是因为没有足够的时间来应用新的命令

    我没有检查/CS,SCLK,DRDY和DOUT,因为我没有逻辑分析器。

    但是,我将反复操作测试信号功能,以确认问题是否再次出现。

    谢谢