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.

[参考译文] OPT4060DTSEVM:Opt4060不工作

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1456278/opt4060dtsevm-opt4060-dont-work

器件型号:OPT4060DTSEVM
主题中讨论的其他器件:OPT4048

工具与软件:

  1. 垃圾值
    无论测量环境如何、传感器都会输出垃圾值。 值与 GUI 中显示的结果有很大差异。
  2. 寄存器0x0B 问题
    当从地址0x0B 的寄存器读取时、位15-7的值不符合预期128。 相反、它始终读作35。 我认为这种差异可能是传感器未能提供正确测量值的原因。

下面是我将用于读取寄存器的执行代码片段

使用 CSharp 代码

 

       VAR 测试= 器件。 ReadRegister (0x0B);

 

       公共 int ReadRegister (字节地址)

       {

           字符串命令=$"REGRx{address:X2}";

           var check = SendPacket (命令、"I2C Register Read");

           返回转换。 ToInt32 (SendPacket (命令、"I2C 寄存器读取")、16);

       }

 

       公共字符串 SendPacket (字符串命令、字符串操作="器件操作")

       {

 

               字符串数据包=命令+"\r";

               SerialPort。 写入(数据包);

 

               字符串响应= SerialPort。 readline();

               string[] responseParts =响应。 分割(分隔符);

 

               if (responseParts. 长度> 1)

               {

                   char statusCode = responseParts[1][0];

 

                   if (statusCode == SuccessCode)

                   {

                       返回响应部件。 长度> 2? ResponseParts[2].split('\r')[0]:"成功";

                   }

               }

               设计

               {

                   抛出新的异常("无效的响应格式");

               }

       }

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

    您好、Lee:

    您能否在 GUI 的脚本窗口中运行以下命令:

    十六进制(regProg.readReg (0x0B))

    根据数据表、这个命令应该为头8位返回0x80h。

    如果您发现您的命令返回的值与器件 GUI 上显示的值不同、则可能是您的代码错误地返回了寄存器内容。

    谢谢!

    Daniel

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

    谢谢 Daniel。

    GUI 正确输出预期值0x80h。 除了屏幕截图中所示的代码外、是否需要任何额外的序列或步骤?

    尽管 GUI 按预期工作、但我的实现方案似乎无法正确读取寄存器。 我不确定是什么原因导致了这种差异。 您能帮助确定我的方法中缺少的步骤或问题吗?

    为了便于参考、ReadRegister我在程序的前面已经定义了该函数、上文已对此进行了介绍。

    另外、所展示的代码片段是我程序的第一部分、意味着在此序列之前不会执行任何操作或配置。

    BR

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

    您好、Lee:

    在初始检查后、初始化以及用于与器件通信的命令看起来是正确的。 您能否分享成功交易的屏幕截图? 相反、器件输出什么?

    谢谢!
    Daniel

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

    读取数据为0x1180  

    该值0x1180会频繁返回。

    我怀疑这可能是由于初始化或读取寄存器的方式有问题。 您能否提供指导、说明为什么会出现这一特定价值、以及我可能需要采取哪些步骤来解决此问题?

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

    추가적으로 μ A、저는 OPT4048EVM도 가지고 있으며 μ A、이 보드에서도 동일한 문제가 발생하여 0x1180이 지속적으로 읽힙니다 μ A。

    명확히 말씀드리면 μ A、이는 센서를 교체한 동일한 보드가 아니라 μ A、완전히 다른 보드와 다른 센서를 사용하는 경우입니다 μ A。 두 설정 모두에서 문제가 지속됩니다 μ A。 이러한 현상이 발생하는 이유에 대해 조언을 받을 수 있을까요 μ A?

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

    抱歉、  

    此外、我还有 OPT4048EVM、此板上也会出现相同问题、其中会不断读取0x1180。 为了说明这并不是更换传感器时使用的同一个板、而是更换了不同传感器时使用的完全不同的板。 两种设置中的问题仍然存在。 您能否提供有关导致此行为的原因的见解?

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

    要解释当前情况:

    检索当前返回的 RGB 值的函数 RGB 全部为零 、因此、 CRC 校验通过 . (这似乎是因为 CRC 和结果值都为零 )

    此外、线路device.SendPacket("GPIOx13x1");导致 用于关闭的绿色 LED .

    一直是这样 两周内没有任何沟通进展 和我正在努力解决这个问题。 作为初学者,我非常感谢您的帮助。

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

    嗨、Lee、

    看起来您正在正确地从器件读取数据。 我看到、您首先将器件复位为默认值、然后根据数据表从寄存器0x0B 读取默认寄存器值0x8011。

    读取0x1180而不是0x8011的这种行为是由于读取寄存器的方式所致。 若要解决此问题、您可以在 ReadRegister 函数中添加一些附加代码、以将这些字节交换为正确读取。 OPT4048也是如此。

    至于 LED 关断的原因、好像您已将 GPIO 引脚设为高电平、这会关闭 LED、因为二极管的另一端已连接到 VDD。 相反、将引脚设置为低电平会使 LED 亮起:

    设备。 SendPacket ("GPIOx13x0")

    关于器件输出为零、您是否配置了寄存器0x0A 来捕获器件测量值? 上电时、该器件将在 SHUTDOWN 模式下运行、该模式下不进行任何测量。 尝试将设备设置为连续模式:

    谢谢!

    Daniel