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.

[参考译文] ADS1298:无法使用 MSP430F67751对 ADS1298的寄存器进行写入

Guru**** 664280 points
Other Parts Discussed in Thread: MSP430F67751, ADS1298
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/778622/ads1298-not-able-to-write-registers-of-ads1298-with-msp430f67751

器件型号:ADS1298
主题中讨论的其他器件:MSP430F67751

您好!

我 无法使用 MSP430F67751对 ADS1298的寄存器进行写入、我已按照数据表中的上电初始流程进行了操作。

但我可以同时读取寄存器、下面是我写入读取其中一个寄存器的序列、工作正常。

请帮助我并建议我编写寄存器、以便我可以从通道中捕获数据。

while (1)

if (cFrame_Received_Flag==1)

fSend_Char ('p');

_DELAY_CYCLES (8196721);             //1秒延迟、18 tclk
P4OUT ^= BIT6;                     //设置 P4.6、ADC_RST
_DELAY_CYCLES (50);                 //4us 延迟(7.2us =延迟(50))、2 tclk
P4OUT ^= BIT6;
_DELAY_CYCLES (110);                 //16tclk
SEND_SPI (0x11);                     //器件在 RDATAC 模式下唤醒、因此发送 SDATAC 命令以便可以写入寄存器
_DELAY_CYCLES (8196);                 //1ms


//unsigned char dataArray[4]={0x41、0x02、0x86、0x00};
//SPISend (dataArray、4);

RREG (0x21、0x01);
_DELAY_CYCLES (81967);


P4OUT |= BIT5;                              //start=1


SEND_SPI (0x10);                              //Put the Device Back in RDATAC Mode

_DELAY_CYCLES (1);


cFrame_Received_Flag=0;

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

    欢迎来到我们的 e2e 论坛! 您对 ADS1298查询没有太多的帮助。 让我们从硬件开始-如何安装并为 ADS1298供电? 您能否提供原理图? MSP430F67751如何连接到您的 ADS1298设置? 这一切都在一个 PCB 上、还是将控制信号动态地连接到 ADS1298? 您能否提供 ADS1298通信线路的示波器捕获?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    以下是所需的信息:

    您能否提供原理图?   MSP430F67751如何 连接到  的 ADS1298设置?  这一切都在一个 PCB 上、还是将控制信号动态地连接到  ADS1298

    是的、请在上面找到、请注意安装在不同 PCB 上的 MSP430、我将使用它是 ADS1298的 SPI 通道之一。 信号通过5 C.M.导线从 uC 传输到 ADS1298。

    您能否提供 ADS1298通信线路的示波器捕获 

    是、请在下面找到读取序列

    和写入序列

    希望我提供了所有需要的信息。

    谢谢、

    Ashish Jain

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

    你好,Ashish!

    感谢您提供的更多详细信息!  这真的很有帮助!  请查看 ADS1298数据表中的图1、并查看其下方的注释。  SPI 时钟应保持低电平、数据应在 SCLK 下降沿有效(上升沿发生变化)。  接下来、查看您提供的屏幕截图-尤其是您尝试读取寄存器03h 的屏幕截图、并注意 MISO 和 MOSI 之间的相位关系差异。  尝试更改 SPI 时钟和相位参数、看看这是否会清除您遇到的问题。

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

    尊敬的 Tom:

    我已设置 CPOL = 0和 CPHA = 1。 在此模式下、我无法读取寄存器、

    我可以在  CPOL = 1和 CPHA = 0的情况下读取寄存器。  CPOL = 0且 CPHA = 0。

    我认为关于 CLK 极性、由于我能够使用现有设置读取寄存器、因此对寄存器进行写入也是如此。 请建议。

    此外、如果您有任何用于 ADS1298初始化的代码示例、请与我们分享。 我卡住了。

    此外、从我的屏幕截图中可以看到、我有2MHz 的 SPI 时钟、就像我的序列中的任何延迟都是错误的一样供您考虑。

    我想我会在 error.please 上提供一些定序帮助

    此致、

    Ashish Jain

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

    我已设置 CPOL = 0和 CPHA = 1。 在此模式下、我无法读取寄存器、

    我可以在 CPOL = 1和 CPHA = 0的情况下读取寄存器。 CPOL = 0且 CPHA = 0。

    我认为关于 CLK 极性、由于我能够使用现有设置读取寄存器、因此对寄存器进行写入也是如此。 请建议。

    此外、如果您有任何用于 ADS1298初始化的代码示例、请与我们分享。 我卡住了。

    此外、从我的屏幕截图中可以看到、我有2MHz 的 SPI 时钟、就像我的序列中的任何延迟都是错误的一样供您考虑。

    我想我会在 error.please 上提供一些定序帮助

    此致、

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

    某些 MSP430文档与"典型"SPI 外设不遵循相同的惯例、因此我们暂时不会对此有所了解-只要您按数据表图1所示写入器件、您就应该没有问题了。 您正在使用/CS 引脚执行什么操作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复、

    我现在已将 CS 引脚连接到低电平、以进行初始化和首次通信。

    此外、我还想让您知道、我的 DRDY 引脚在将启动信号设置为高电平后不会变为低电平。以下是数据表中的序列:在发出 RDATAC 命令后、DRDY 信号应变为高电平至低电平。

     

    while (1)

    if (cFrame_Received_Flag==1)


    fSend_Char ('p');

    P4OUT |= BIT5;                                //start=1
     //__delay_cycles (8196721);                         //1秒延迟、18 tclk
    _DELAY_CYCLES (12295081);
    P4OUT ^= BIT6;                                 //设置 P4.6、ADC_RST
    _DELAY_CYCLES (8);                               //4us 延迟(7.2us =延迟(50))、2 tclk
    P4OUT ^= BIT6;

    _DELAY_CYCLLES (60);                             //16tclk
    SEND_SPI (0x11);                                //器件在 RDATAC 模式下唤醒、因此发送 SDATAC 命令以便可以写入寄存器
    _DELAY_CYCLES (8197);                           //1ms

    unsigned char dataArray[14]={0x41、0x0C、0x86、0x00、0xC0、0x00、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01、0x01};
    SPISend (dataArray、14);
    _DELAY_CYCLES (819672);                         //100ms

    // RREG (0x21、0x01);

    _DELAY_CYCLES (81967);

    P4OUT |= BIT5;                                //start=1

    SEND_SPI (0x10);                               //Put the Device Back in RDATAC Mode

    _DELAY_CYCLES (819672);

    cFrame_Received_Flag=0;


    此致、

    Ashish Jain

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

    这里没有 DRDY 可能是一个线索-如何控制 PWDN 和复位引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    正如您在先前提供的电路图像中看到的、复位具有上拉电阻、并由 MSP430 I/O 控制、PWDN 连接至高电平。

    嘿,我每2ms 得到一次 DRDY 引脚脉冲,现在根据数据表,它显示问题'24+n*24 SCLKs'

    请建议如何执行此操作。

    谢谢、

    Ashish Jain

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

    进度! 好极了! 使用 DRDY 作为 MSP430的中断。 当 DRDY 处于活动状态时,您必须向 ADS1298 - 24发送时钟以读取状态寄存器和24*n (其中'n'是已启用通道的数量)。 由于 MSP430是 SPI 主器件、因此获取时钟的唯一方法是将某个内容移至传输缓冲区-如果您所做的只是读取数据、则可以发送0x000000 (三个零字节) 要获得24个时钟以获取状态字-继续发送零、直到您读出所有通道数据。 这必须在 DRDY 输出脉冲之间的2ms 时间段内完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    是的、现在它正在答复27字节(216位)的数据、并且它与数据表 C00和8乘以800匹配。

    非常感谢您的帮助。

    现在、我将开始测试要测量的实际值。

    此致、

    Ashish Jain