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.

[参考译文] ADS1243:带MSP432P401R控制器的ADS1243接口

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/649579/ads1243-ads1243-interface-with-msp432p401r-controller

部件号:ADS1243

您好,

  我想将 ADS1243与  MSP432P401R 处理器连接。ADS1243 运行于@4.9152MHz外部晶振。ADC在3.3V电源上工作。 Vref+为+2.5V,Vref-为0V (GND)。 如果给ADC的输入电压为1V,那么输出数据代码应该是什么?(输出数据代码=Vin/(Vref/2^n-1)=66.6666万H是正确还是错误??)

 我正在寄存器设置中使用默认条件,除了速度位和范围位设置为1。SPI在750kHz频率下工作。

请检查我在下面附上的代码和代码sequence.e2e.ti.com/.../1145.main.c

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

    Sayali


    输入电压为1V,参考电压为2.5V且PGA增益= 1时,输出代码为:

    6666.6666万h,范围位= 1或
    3333.3333万h,范围位=0

    范围位是ACR寄存器中的位2。

    您在读取设备时是否遇到问题? 如果是,请描述一下您遇到的问题吗? 数据是否完全错误,或者您是否存在增益或偏移问题?


    吴若瑟

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Joseph:
    我想写入和读取设置寄存器值。但是,我没有获得ADC的读写寄存器的序列。我尝试使用以下顺序写入和读取设置寄存器值:-
    1)-cs为低
    写入设置寄存器
    - TXBUF中的值为0x50
    - TXBUF= 0x00 (要寄存器的字节写入数)
    -TXBUF= 0x01 (禁用缓冲区,PGA为2)
    -cs为高
    2)-CS低
    -sedsync命令,即TXBUF中的0xFC
    -CS高
    3)等待单调的低音变低
    4)-CS LOW (CS低)
    读取设置寄存器:-
    - TXBUF=0x10
    -TXBUF=0x00
    -检查接收标志是否清除,并在变量"temp"中传输接收数据
    当我调试代码时,0x01值(设置寄存器中的值写入)应在接收缓冲区中,但值未得到。请告诉我确切的代码序列?? 是否需要检查针脚是否变低?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sayali


    首先,我想说,您应该使用示波器或逻辑分析器来查看SPI线路。 了解SPI线路正在执行什么操作非常重要,而且调试通信问题要容易得多。

    我还想说,我不是最了解代码的人。 根据您的解释,我认为您的顺序是正确的。 但是,在开始时,我会先插入一个STOPC命令,这样SPI通信就不会因读取新数据而中断。

    我仔细查看了您的代码,注意到了两件事。 首先,我认为您将CKPL设置为高。 我认为这应该是0。 对于ADS1243,SCLK会降低。 其次,我看不到CKPH的设置。 由于数据是在SCLK的下降边缘读取的,我认为您要将CKPH设置为1。 您应该能够使用示波器确认此设置。 只需查看数据表第6页上的计时图即可。


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

    您好,Joseph:

       根据您的建议,我对我的代码进行了更改。 我还是看不出注册 资料。 请检查我在下面附上的代码:-

    e2e.ti.com/.../8446.main.c

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


    要调试这个,我首先要读回所有的寄存器,而不仅仅是您已更改的寄存器。 这首先测试您是否获得了任何合理的值(而不仅仅是所有的1或0)。 阅读您期望的内容也很重要。 如果您阅读了FSR0,1和2,您就会知道预期值为59 55 55。 不管怎样,请在此处读回所有寄存器并发布您从设备读取的内容。 如果您没有从设备获得任何合理的反馈,则您的SPI通信中断。 如果是这种情况,则写入设备也可能不起作用。

    此外,获取示波器并确保主控器正在发送和接收任何SPI传输。 您可以在这段时间内处理代码,如果问题出在硬件上,您永远不会发现问题。 查看进出设备的SPI线路非常重要。

    我在您的代码中没有看到任何具体的错误,但正如我前面提到的,我不是一个经验丰富的程序员。 但是,如果需要,请在下一篇文章中包含.h文件。


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

    我只在传输数据时检查DSO上的SPI信号:-

    -CS是高/低的,具体取决于代码。

    -脉冲显示在SCLK引脚上

    -我尝试在TXBUF中传输0x50值并检查DSO上ADS1243的Din引脚上的信号。该值是传输的successfully.it表示,该值是用ADC写入的??

    -DRDY引脚在DSO上显示为低电平有效。此引脚是只读引脚,因此不需要通过软件达到高电平或低电平(只需等待drdy变低)?

    我正在尝试读取寄存器值,但它在RXBUF中显示随机值,我是为了读取寄存器而传输的。是否需要传输dsync和stop命令来读取寄存器。如何读取寄存器?? 请告诉我确切的顺序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sayali


    在您的下一篇文章中,您能否提供SPI通信的范围快照,以便我可以使用ADS1243读取该事务? 显示/CS,DIN,DOUT和SCLK行并显示足够的详细信息,以便我可以查看位事务。

    在写入寄存器之前,请先阅读它们。 要读取寄存器,应该相当简单。 首先发出STOPC命令。 然后读回前三个寄存器:

    交易应:
    降低/CS
    发送10 02 00 00 00 00
    在00 00 00 00的最后三个字节中,读取数据。
    将/CS调高。

    使用此事务并使用示波器记录此事务,然后将其发布在此处。

    如果可以执行此操作,则写入设备的操作应与以下操作类似:
    降低/CS
    发送50 00 xx (其中xx是要写入设置寄存器的数据)
    将/CS调高。

    除非一切正常,否则请将收银器的示波器截面张贴到阅读中。


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

    您好,
    我遵循读取默认寄存器值的顺序。当我运行代码时,RxBUF中的值receive d是0x0F (stopc值)。是否需要在读取寄存器之前提供一些延迟??如果是,则我们必须提供多少延迟??
    我的SPI在750kHz频率下工作是对的?? 因为在数据表中,它们未指定SPI频率。

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


    请您发布通信的范围快照吗? 我想查看每个图解的SCLK,DIN,DOUT和CS线。 我想查看STOPC命令和我请求的RDATA的事务。 如果您正在向设备写入数据,也请发布。 我需要能够查看数据的回读并验证DOUT上的内容。

    0Fh的输出不会转换为设备中任何寄存器的默认值,如果您尚未将其写入设备,则我不确定它来自何处。

    通常,在向寄存器写入数据和从寄存器读取数据之间不存在必需的延迟。 注册表应立即更新。 对于SPI频率,这在第6页的计时图规格中的数据表中。 SCLK最小周期为4托斯。 如果时钟为4.9152MHz,则在一段时间内转换为0.813us,最大SCLK频率为1.23MHz。 如果在写入设备时出现问题,则T10和T11会在/CS返回高电平后,将SCLK低电平至SCLK高电平的最小时间控制在SCLK低电平至SCLK高电平之间。 这两种规格往往被忽视。 但是,请查看正时图并检查是否存在其他可能的问题。 我不认为这是您所面临问题的根源,但重要的是要回顾这些价值观。

    我再次希望看到这些信函的范围。


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

    您好;

    我移除了外部晶体并将MSP.MCLK.WFP 2.4 直接连接到ADS.XIN。PDWN,CS,DRDY连接到GPIO引脚。ADC以3MHz (MCLK)运行,串行通信时钟频率为SMCLK= 1.5MHz (MCLK/2)。

    我正在附加 PDWN和DRDY信号的波形,在DSO上进行检查:-

    1)断电信号设置为高电平。

    2)在DRDy上  ,每54毫秒后会给出引脚脉冲:-


    3)当我尝试发送连续数据时,SCLK会发出脉冲。

    我正在附加代码和头文件:-

    e2e.ti.com/.../ads1243.h.doce2e.ti.com/.../main.doc

    您可以向任何代码专家咨询并帮助我解决此问题吗?  

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


    使用3MHz的振荡器时钟,默认数据速率将为18.31SPS。 等效数据周期为54.6ms。 与您发布的/DRDY图相比,它看起来ADC正在运行,而不是处于任何类型的关闭或重置模式。

    但是,正如我在上一篇文章中提到的,SCLK的最小期限是4*TOSCO。 主时钟频率为3MHz时,振荡器周期为333ns,最小SCLK周期为1.333us。 这将转换为最大SCLK频率750kHz。 如果您使用的SCLK频率为1.5MHz,则速度仍然太快。 您需要更改此设置。

    正如我在上一篇文章中提到的,仍然值得浏览数据表第6页上的计时特性表。 即使其他人查看了代码,您也需要知道您的SPI通信是否违反了零件的任何计时。

    此外,我仍然认为,从示波器看到的设备发布SPI通信非常重要。 这包括向设备写入数据和从设备读取数据时的SCLK,DIN,DOUT和/CS通信。 您需要能够看到信号并能够从示波器图中读取数据。 此时,设备似乎正在转换。 我认为你应该能够读写寄存器。 使用示波器图,您应该能够查看所有寄存器事务,这将验证来自设备的数据。 我认为设备可能正在工作,但MSP432发送或接收数据时存在问题。 范围图可以证明这一点。

    但是,如果您需要其他人来审核您的代码,我会在这里发布到MSP低功耗微控制器论坛:

    e2e.ti.com/.../166

    您可以通过复制链接来参考此帖子。


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

    嗨,bobb,

      在我的代码中,我根据您的建议更改SPI频率@750kHz。我尝试读取mux寄存器的默认值为0x01。但是,接收缓冲区中未接收到该值。我正在附加SCLK,DIN,DOUT波形的屏幕截图。

    1) SCLK (黄色)和Din (绿色)

    2) SCLK (黄色)和DOUT (绿色)

    请告诉我为什么我不能读取寄存器值??

    这是代码:-

    pin_init();
    dev_init_48M();
    dev_init_32k();
    P4DIR || BIT3;// P4->3设置为输出方向
    P4->SEL0 || BIT3;// MCLK引脚组@3MHz频率
    InitSPI();


    P10OUT &=~(ADS1243_CS);// CS LOW
    while (!(UCB3IFG&UCTXIFG));//确保TX缓冲区中没有任何内容
    UCB3TXBUF =0x11;//读取设置寄存器
    __DELAY周期(50);
    while (!(UCB3IFG&UCTXIFG));//确保TX缓冲区中没有任何内容
    UCB3TXBUF =0x00;//读取的寄存器字节数
    __DELAY周期(50);
    while (!(UCB3IFG&UCTXIFG));//确保TX缓冲区中没有任何内容
    UCB3TXBUF =0x00;//00以初始化clk
    __DELAY周期(50);
    while (!(UCB3IFG&UCRXIFG));//等待直到传输(接收)所有数据
    Result = UCB3RXBUF;//捕获接收缓冲区并返回结果
    P10OUT ||(ADS1243_CS);// CS HIGH

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


    感谢您张贴示波器照片,我希望在同一图上看到所有四张/CS,DIN,DOUT和SCLK,但这现在仍然有效。

    我已经看到您从MSP432设置了错误类型的SPI通信。 在您的第一个图中,DIN的上升边缘与SCLK的下降边缘重合。 这意味着您已将MSP432设置为使用CPOL=0和CPHA=0的SPI与ADS1243通信。

    这需要更改,以便DIN的上升边缘与SCLK的上升边缘重合。 您应该使用CPOL=0和CPHA=1。 这在数据表第6页的计时图1中显示。

    按照您的设置方式,MSP432正在更改DIN,就像ADS1243试图将其锁定一样。 ADS1243不太可能捕获正确的位。

    我首先要更改MSP432设置以正确写入设备。 我还要验证整个SPI事务的/CS是否为低。 如果/CS在字节事务之间返回HIGH,则SPI通信将被重置,您仍然无法获得正确的数据。


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

    您好,Joseph:

        我将CKPL位设置更改为0 (非活动状态为低),将CKPH设置为0 (数据在第一个UCLK边缘上更改,并在下一个边缘上捕获)。 我正在附加SCLK (yello)的波形和ADC (绿色)的DIN:-

    但我仍然无法从ads1243获取任何数据?? 请帮助我??

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


    我仍然看不出问题是什么。 最后一幅示波器照片显示了SCLK和DIN,它们应该从ADS1243获得响应。 但是,您不会在图解上显示DOUT或/CS。 我真的认为显示所有SPI通信以验证计时非常重要。 您是否有一个四通道范围可同时显示所有SPI线路?

    如果SCLK和DIN一起显示,则RREG命令看起来应该正确。 问题可能不是具体的代码问题,而是物理问题,如连接中断或计时错误,而程序中没有特别注明。

    但是,我们现在可以查看哪些是有效的,哪些是无效的。

    首先,设备似乎正在运行和转换。 在/DRDY行的帖子中,您可以看到设备每55毫秒发出一次脉冲。 这表示设备已启用,未处于睡眠或重置状态。

    第二,您能够根据您的第一篇文章读取数据。 这意味着DOUT连接到主控制器,并且它似乎对SCLK作出响应。 这意味着DOUT和SCLK似乎都已连接并正常工作。 但是,我还没有看到示波器的图解。 您是否仍能读取数据? 在示波器上绘制此图,以便我可以看到正时。 我想确保SCLK和DOUT仍然正常。

    第三,我不确定DIN是否可以运行。 如果您以前在没有RDATA的情况下对数据进行了计时,然后发出STOPC,然后数据停止,那么DIN很可能会工作。 但是,我没有在示波器上看到这一点,我无法验证DIN是否工作正常。 您也可以尝试读取不同的寄存器。 如果出现计时问题且SCLK偏移,则可能会错过读取寄存器。 01h寄存器的默认值为01h,如果您错过了SCLK,则不会看到最后一个位。

    您是否有可以分享的示意图? 另一件可能有帮助的事情是查看所有连接,看看是否有任何可能中断通信的事情。 我将验证所有SPI线路的通信连接是否有效。 同样,这可能不是编程问题。 我已经浏览了您的代码,此时我们确实应该验证有关SPI连接和通信计时的所有信息。


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

    您好,Joseph:

     我要附上电路图的镜头:-

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

    Sayali

    您能否提供您的示意图的更高分辨率副本? 我无法读取电路中的任何引脚或节点名称。

    正如我在上一篇文章中提到的,我仍然认为显示SPI的所有通信非常重要。 我希望您能够同时获得一个四通道示波器来显示/CS,DIN,DOUT和SCLK。 到目前为止,您只显示了两条SPI线的元素,似乎什么都没有,但重要的是显示所有这些线。


    吴若瑟

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


    我从其他人那里得到了另一个关于使用ADS1243进行通信的问题。 最后,我能够与设备通信,但我确实遇到了两个障碍。 首先,我错过了DIN上的焊接连接,这使设备看起来好像接收DIN,但实际上并没有得到(与SCLK的连接不正确也会执行同样的操作)。 第二个问题是我有一个时间违规。 T6的计时(向DOUT读取SCLK的REG SCLK)必须大于50TOSCO。 这意味着,如果时钟频率为2.45MHz,则命令的第一个字节和第二个字节之间的时间必须大于20.4us。

    我不能和我的师父一起控制这个,但我提高了时钟频率来补偿。 在您的控制下,您应该能够使用微控制器设置此时间。

    不管怎样,我在下面的帖子中概述了用于调试此问题的方法:

    e2e.ti.com/.../241.4272万


    吴若瑟