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.

[参考译文] ADS122U04:从寄存器中恢复数据时出现问题

Guru**** 2553440 points
Other Parts Discussed in Thread: ADS122U04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/935860/ads122u04-problem-with-reciving-data-from-register

器件型号:ADS122U04
主题中讨论的其他器件: MSP430FR6043

你好
从 ADC μ`s 寄存器中恢复数据时遇到问题。 代码可 通过 MCU 的 UART 向 ADS122U04发送命令。 但是、当我使用数据表中的命令来设置寄存器或读取它们的值时、不会发生任何情况。 代码放置在较低的位置。


#include
#include
#include
#include

//------------ 全局变量-------------------------------------------------------

unsigned int rcv;

//------------ 初始化---

void CS_init (void);
void UART_init (void);
void UART_transmit (void);

//-------------- 主--------------------------------------

int main (空)

   WDTCTL = WDTPW | WDTHOLD;  //停止看门狗计时器

   //禁用 GPIO 上电默认高阻抗模式以激活
   //先前配置的端口设置
   PM5CTL0 &=~LOCKLPM5;
   FRCTL0 = FRCTLPW | NWAITS_1;

   CS_init ();

   UART_INIT();

   UART_Transmit ();



//------------ 函数-------------------------------------------------------

void CS_init (void)

   CSCTL0_H = CSKKEY_H;
   CSCTL1 = DCOFSEL_3 | DCORSEL;
   CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
   CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
   CSCTL0_H = 0;


void UART_init (void)

   P4SEL0 |= BIT1 | BIT2;
   P4SEL1 |= BIT1 | BIT2;//它在 RX/TX 模式下切换引脚 P4.1和 P4.2

   UCA3CTLW0 = UCSWRST;                   //将 eUSCI 置于复位状态
   UCA3CTLW0 |= UCSSEL_SMCLK;            // CLK = SMCLK
   UCA3BRW = 54;                          // 8000000/16/9600
   UCA3MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
   UCA3CTLW0 &=~UCSWRST;                 //初始化 eUSCI


void UART_transmit (void)

   UCA3TXBUF = 0x55;
   while (!(UCA3IFG & UCTXIFG));
   UCA3TXBUF = 0x06;
   _DELAY_CYCLES (80);
//   }

   while (!(UCA3IFG & UCTXIFG));
   //设置寄存器2
   UCA3TXBUF = 0x55;
   while (!(UCA3IFG & UCTXIFG));
   UCA3TXBUF = 0x44;
   while (!(UCA3IFG & UCTXIFG));
   UCA3TXBUF = 0x40;
   //接收寄存器2
   while (!(UCA3IFG & UCTXIFG));
   UCA3TXBUF = 0x55;
   while (!(UCA3IFG & UCTXIFG));
   UCA3TXBUF = 0x24;
   while (!(UCA3IFG & UCTXIFG));
   while (!(UCA3IFG & UCRXIFG));
   RCV = UCA3RXBUF;






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

    尊敬的用户6244799:

    除了一些潜在的时序违规外、我看不到会在您的代码中引起问题的任何东西。  以下是需要检查的一些事项:

    • 确保 ADS122U04的 RESET 引脚被拉高。
    • 您的延迟时间不清楚、可能不够长。  如果我假设一个周期为1us、则解码 RESET 命令后、您至少需要80us。  在您的代码中、您会显示80的延迟、如果我的假设是正确的、则会等待80us、但您需要确保命令已完全传输、并且不在 FIFO 中或仍在传输过程中。  延迟应晚于"while (!(UCA3IFG 和 UCTXIFG));"之后、而不是之前。
    • 如果您有逻辑分析仪、则应检查通信并验证您使用的是正确的协议。
    • 如果您无法访问逻辑分析仪、则应监控与示波器的通信时序、以确保不会违反任何时序。

    此致、

    Bob B

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

    我听从您的建议、并面临问题。
    我已检查复位。 它被拉高。 我n`t RESET 命令(0000011x)、之后进入延迟、RESET 信号确实下降了一个位、如8页的图2所示。 我认为这个问题就像第一个书面问题。
    UART 被 `s 8-N-1且协议`s 正确(通过比较寄存器`s 值以及数据表寄存器映射中的参数进行检查)。 我不n`t 示波器检查的正确方式、但根据数据表认为也是正确的。

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

    我将延迟`s 值固定、因为它是n`t 正确的、但问题仍然存在

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

    尊敬的用户6244799:

    在不使用协议分析器的情况下、验证 UART 通信并不容易。  这些分析仪随逻辑分析仪软件一起提供。  很难确定使用示波器传输的数据、但可以确定传输之间的时间。  此方法有助于验证 RESET 命令和下一个 SYNC 命令之间是否发送了足够的延迟时间。  此外、由于通信不是全双工的(不能同时发送和接收)、您可以确保微控制器不会与从 ADS122U04发回的数据同时传输。  如果 RX/TX 同时发生、ADS122U04将停止通信、并需要手动(切换 RESET 引脚)或上电复位。

    另一个考虑因素是您接收的数据可能来自 FIFO 缓冲区。  如果是这种情况、您需要确保从 RX 缓冲区读取的数据是从最后一个寄存器读取请求传输的数据、而不是缓冲区中的某些先前数据。

    此致、

    Bob B  

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

    您可以为 ADS122U04或 MSP430推荐分析仪吗? 当我n`t 互联网时、我n`t 找到了一个分析仪(CCS 有n`t μ A 的分析仪、器件有第三方应用程序)

    我观察过在示波器中发送信号。 TX 代码 被放置在循环中。 数据显示自微控制器`s 和 ADC`s 英尺。

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

    尊敬的用户6244799:

    您可以向我发送原理图吗?  确保微控制器的 TX 进入 ADS122U04的 RX 引脚、而 ADS122U04的 TX 进入微控制器的 RX 引脚。

    我重新阅读了您之前发送的帖子、但我没有完全回答这些问题。  关于复位、有两种方法可对器件进行复位。  一种方法是切换 RESET 引脚。  在这种情况下、将使用微 GPIO 来切换引脚的状态、从而将器件置于复位状态。  如果该引脚未用于此目的、则必须从外部将该引脚上拉为高电平。  第二种方法是使用 RESET 命令。  该命令将对 RESET 引脚的逻辑状态没有影响。  ADS122U04数据表中的图2仅显示了时序。

    就逻辑分析仪而言、我通常使用 Saleae、但我也使用 了 Digilent Analog Discovery 套件。

    此致、

    Bob B

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

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

     尊敬的用户6244799:

    我还有几个问题。  首先、微控制器和 ADS122U04的电源电压电平是否相同?  第二个问题是、您是在微控制器和 ADS122U04之间使用隔离、还是直接连接引脚?

    您能否为寄存器写入序列和寄存器读取序列发送一些示波器截图来说明 TX 和 RX?  我可以看到每个字节传输的足够详细信息、以便与已知的工作解决方案进行比较。

    此致、

    Bob B

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

    轨道 已放置在 MCU 和 ADC 英尺之间。

    此时、我无法更正有关电源电压电平的说法。

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

    cloud.mail.ru/.../3zds3Bic6
    该参考具有一个包含示波器图片的 fild。 第一个脉冲是 TX、第二个脉冲是 RX、第三个脉冲是示波器线路的默认位置。

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

    尊敬的用户6244799:

    很遗憾、我被阻止使用基于云的文件共享。  您可以使用回形针图标压缩图像并附加到帖子吗?

    谢谢、

    Bob B

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

    e2e.ti.com/.../ADS_5F00_signal.rar

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

    尊敬的用户6244799:

    从示波器截图中、似乎存在与 TX 线相关的通信。  该 TX 来自微控制器吗?  正在发送哪个命令?   我还会看到两条迹线。  您能解释一下蓝色迹线是什么吗?

    对于 RX 线、我根本看不到计时、而只是一条直线。  如果之前的命令是寄存器读取命令、那么一些数据应该已经从 ADS122U04中计时。

    我仍然怀疑可能存在时序问题。  我会首先尝试在程序开始时不发送 RESET 命令、然后发送寄存器读取、并查看 ADS122U04中是否有一些数据、而不是发送寄存器写入。  对于示波器、您可能需要将触发器从自动更改为单个触发序列、以在示波器上捕获数据。

    此致、

    Bob B

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

    我检测到了错误。 这是一组不同的小误差。 此时代码按照数据表中的说明正确工作。
    感谢你的帮助。
    但我还有一个问题。 我想n`t 代码延迟、不要使用 delay-function。 计时器如何做到这一点?    

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

    尊敬的用户6244799:

    感谢您的更新。  我很高兴听到您正在取得进展。  通过访问 CCS 中的 Resource Explorer、应该可以获得一些有关您所使用的微控制器的计时器使用的示例。  在 MSP430Ware->Library->Driver Library->MSP430FR5xx_6xx->示例项目中,您可以使用计时器 A 或计时器 B 查找项目

    我建议创建一个全局布尔变量、用作状态标志。  最初将此变量设置为 false、然后初始化您的计时器、当它溢出时、使用计时器中断将状态标志设置为 true。  

    在主循环中、检查状态标志是否为 true、如果为 true、则执行并读取转换结果。  完成读取转换结果后、将状态标志设置回 false。

    此致、

    Bob B