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.

[参考译文] INA228:无法在多个器件上设置 EN_ALERT 位(MASK_ENABLE[14])

Guru**** 2483985 points
Other Parts Discussed in Thread: INA228

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1495617/ina228-unable-to-set-en_alert-bit-mask_enable-14-on-multiple-devices

器件型号:INA228

工具与软件:

尊敬的 TI 团队:

我正在使用 INA228、并尝试在检测到总线欠压条件时使用 ALERT 引脚将 ESP32从睡眠状态唤醒。

根据数据表、我需要:

  1. 设置欠压限制(BUVL、寄存器0x0F)

  2. 启用中的警报功能ALERT_ENABLE(寄存器0x06、位3 = VBUS_UV)

  3. 启用中的相应位MASK_ENABLE(寄存器0x03、位3 = VBUS_UV)

  4. 通过设置EN_ALERT中的第14位()全局启用 ALERT 引脚 MASK_ENABLE

I2C 写入到MASK_ENABLE似乎成功(endTransmission()返回0)、但当我读回寄存器时、仅设置了位3。 位14保持清零。

下面是一个最低的写入工作示例:

//将0x4008写入 MASK_ENABLE (0x03)
Wire.beginTransmission(0x40);
wire.write (0x03);// MASK_ENABLE
wire.write (0x40);// MSB:位14 = EN_ALERT
wire.write (0x08);// LSB:位3 = VBUS_UV
Wire.endTransmission ();

//读回
Wire.beginTransmission(0x40);
wire.write (0x03);
wire.endTransmission (假);
wire.requestFrom (0x40、2);
uint16_t mask =(Wire.Read ()<< 8)| Wire.Read ();//始终返回0x0008

我已在同一卷带中的6个独立 INA228芯片上进行了这方面的尝试、和 都显示了相同的行为 :EN_ALERT从未设置、即使VBUS_UV是。

对 INA228寄存器的其他写入都可以正常工作、我已经验证相同的 I2C 代码适用于其他器件(如 MPU6050)上的16位可写寄存器。 因此、这似乎特定于 INA228。

问题:

  • 是否存在EN_ALERTMASK_ENABLE无法设置中的第14位()的任何情况?

  • 是否存在可能导致该行为的已知器件修订版本或勘误表?

  • INA228是否需要任何其他寄存器配置(例如CONFIGALERT_LATCH等)才能EN_ALERT被写入?

非常感谢您提供任何帮助或见解。 谢谢!

此致

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

    安德斯、您好!

    您可能在查看错误的数据表、或者说器件错误。 下面是 INA228数据表的链接: https://www.ti.com/lit/ds/symlink/ina228.pdf

    要在 INA228上配置警报、请执行以下操作:

    1.在寄存器中设置限制。 (BUVL 的寄存器0x0F)

    今天内容到此为止。 INA228可以有多个警报、因此您可以为想要使用的所有警报配置限制、然后您可以查看 DIAG_ALRT 寄存器(寄存器0x0B)的位2-7、来查看 ALERT 引脚触发的警报。 INA228没有 MASK_ENABLE 寄存器。  

    此致、

    Mitch