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.

[参考译文] MSP430FR5969:通过 I2C 配置 PGA302

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1332951/msp430fr5969-configuring-pga302-through-i2c

器件型号:MSP430FR5969
主题中讨论的其他器件:PGA302ENERGIAUSB2ANYPGA305、INA128

我正在尝试通过 I2C 协议使用 MSP430FR5969 (主站) Launchpad 配置 PGA302 (从站)。 我需要设置 P 增益、以便根据增益放大输入电压。 我将向 VINPP 和 VINPN 引脚提供输入电压并检查 Vout 端子上的输出。 我已将 P1.6 (SDA)连接到引脚13、将 P1.7 (SCL)连接到引脚14。 我将为 PGA302提供5V 的 VDD。 我已经将 VINTP 和 VINTn 接地。 我已将公共接地连接到这两个器件。

在 CCS 代码中、我通过向从器件地址0x40的寄存器地址0x0C 发送0x03、将 PGA302置于复位模式。 然后、我通过发送0x01 (增益为2V/V)来设置 P 增益。 最后、我向从器件地址0x40的寄存器地址0x0C 发送0x00、从而使从器件退出复位模式。 我正在使用轮询模式(检查是否清除标志以使 Tx 缓冲器准备就绪)。

我无法在示波器中查看 SDA 和 SCL 的波形。 改变 P 增益值不会改变 Vout 值。 我可以看到 TXBUF 正在获取我发送的值、因此我假设从器件正在响应。

我没有执行某些步骤、或者连接有问题吗? 如果可能、请提供 MSP430FR5969的 I2C 通信示例代码以设置 PGA302的 P 增益。

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

    您好!

    我认为下面的链接会为您提供一些指导:

    https://dev.ti.com/tirex/explore/node?a=a3PaaoK__1.10.01.05&node=A__ACc7lX7U0.5TNrrSHLAXDQ__msp430ware__IOGqZri__LATEST&r=a3PaaoK__1.20.00.05&r=a3PaaoK__1.20.01.06&search=i2c 

    https://dev.ti.com/tirex/explore/node?a=a3PaaoK__1.10.01.05&node=A__AL2dmw21b-kJdwBXB2JdHw__msp430ware__IOGqZri__LATEST&r=a3PaaoK__1.20.00.05&r=a3PaaoK__1.20.01.06&search=i2c 

    我无法在示波器中查看 SDA 和 SCL 的波形

    确保电路板上的 SCL/SDA 线路中有上拉电阻器。

    B.R.

    萨尔

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

    您好!
    我无法在使用这些代码时看到 SCL 和 SDA 波形。 此外、这些代码并不容易理解。 我从特定寄存器读取时未在 Rx 缓冲区中获取任何数据。 Energia 代码是一种简单的方法。 我可以获得它的示例代码吗?

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

    您好!

    即使没有从器件、如果您也正确配置 MCU、则应该有一些波形(开始信号和写入地址信号)。

    Energia 是用于 MSP 快速运行和评估的第三方开发环境。 并且 TI 不再维护 Energia。

    B.R.

    萨尔

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

    对于 PGA3、人们似乎对这款器件没有太多看法。 她似乎很害怕。  

    Energia.nu 似乎仍然是活的。 我没有看到 PGA302的 Arduino/Energia 库的证据。  mikroe.com 销售的是一块上面带有 PGA302的"点击"板;他们可能有一些 相关软件。

    这里有一些人可能能够从"第一原则"中获得帮助。 但你需要给我们一些线索。

    1)您的平台是什么? EVM+Launchpad? 它们是如何连线的?

    2) 2)您使用的代码是什么?

    3) 3)如何确定您已(成功)写入寄存器0x40/0x0C 和0x42/0x47? 读回? 示波器跟踪?

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

    EVM 上有 MSP430、但我最后看到的是、TI 不会发布固件。 这确实限制了 EVM 的实用性。

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

    根据 EVM 用户手册(SLDU031)、这是一个运行 USB2ANY 的 F5510 (不是 FR5969); 我不知道 USB2ANY 是什么秘密、但我认为它是用于 GUI 的、因此他们可能不想让人们把它弄得一团糟。

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

    可以、但 F5510会通过 I2C *或* OWI 将所有 GUI 资料发送到 PGA302。 对于开发人员来说、此通信代码将非常有用。

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

    我希望 USB2ANY 使用普通的 MSP430 I2C 代码、这很难理解但不可理解。 我不确定是否能提供这么多信息。

    对于我来说、不透明的是寄存器设置-需要将哪个寄存器设置为完成任何任务。 GUI 似乎知道这一点[请参阅 EVM UG 图23]。 GUI 也是仅对象代码。

    总之、我不是想劫持这个线程。 也许原来的海报已经解决了一切。

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

    不、到目前为止、我还没有解决过这个问题。

    我将 PGA302用作从设备、将 MSP430FR5969 Launchpad 用作主设备、以通过 I2C 配置从设备。

    我当前正在尝试以下代码以写入 P_GAIN_SEL 寄存器:

    #包含

    #define PGA302_ADDRESS 0x42 // PGA302 I2C 地址

    void setup(){
     Wire.begin(); //初始化 I2C 通信
     Serial.begin(9600); //初始化串行通信


    void loop(){
     //将 PGA302设置为复位模式
     setResetMode (true);

     //配置 PGA302设置(例如,设置 P 增益)
     setPGAGain (0x02);//对于增益=4

     //使 PGA302退出复位模式
     setResetMode (false);

     //监视 PGA302输出
     //此处显示用于读取和监控 PGA302输出的代码

     延迟(1000); //出于演示目的延迟


    void setResetMode (bool 模式){
     Wire.beginTransmission(0x40);
     Wire.write (0x0C); // RESET_MODE 的寄存器地址(必要时调整)
     Wire.write (模式? 0x03:0x00); //设置/复位模式位
     Wire.endTransmission ();


    void setPGAGain (uint8_t gain){
     Wire.beginTransmission(PGA302_ADDRESS);
     Wire.write (0x47); //用于 P_GAIN_SELECT 的寄存器地址(必要时调整)
     Wire.write (gain); //设置 P gain 值
     Wire.endTransmission ();

    我看到的一篇文章解释了 PGA302必须首先置于复位模式才能访问测试寄存器以外的寄存器。 必须使其退出 复位模式才能看到实际的 Vout。  

    但我认为这些值并不写入寄存器、因为当我读回寄存器时、它始终显示255 (我读取的任何寄存器)。 通常、即使我不写入任何内容、它也应该为0。 我已将引脚14 (PGA302的)连接到 launchpad 的 P3.5 (SCL)、并将引脚13 (PGA302的)连接到 launchpad 的 P3.6 (SDA)。 其余所有连接均与原帖中所述的相同。

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

    我当时也在尝试使用 PGA302EVM、但出现了同样的问题。 即使直接向寄存器写入后、也未观察到 Vout 发生变化。

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

    如果 Available ()=0 , Arduino Wire.read ()返回0xFF (really -1),例如如果 requestFrom()失败。 您可能需要检查 Wire.endTransmission ()的结果以查看写入是否也失败。

    听起来您(现在)好像未在使用 EVM。 您正在使用什么平台? 我提出的问题是、有些商业输出板包含 I2C 上拉电阻、有些则没有。 Launchpad 本身没有。 如果您没有示波器、应用到 SCL/SDA 引脚的电压表可能会提示一些问题。

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

    我只将 PGA302独立 IC 与 MSP430FR5969 Launchpad 配合使用。 我还在 SDA 和 SCL 线上连接了5k 上拉电阻器。 我确实有一个示波器、但我无法理解这些波形。 在起始位(SDA 下拉为低电平)之后、必须发送从地址0x40、但线路在4处为高电平还是低电平? 喜欢 LHLL LLLL 或 HHHH?  

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

    一个1位为高电平。 地址(SLA)字节将是 HLLL LLLr、其中 r=1用于读取。

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

    不过、代码是否在逻辑上正确?

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

    代码看起来不管怎样都正常。 我怀疑失败是其他地方。 您是否能在示波器跟踪中看到 ACK/NACK 位?

    如果您使用裸芯片、您将如何处理3V/5V 转换? 能否判断芯片是否正在加电?

    更笼统地说:您没有使用 EVM 是有原因的吗? 我希望该 EVM 可以回避一些启动问题、这样您就可以一次解决一个问题。

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

    https://dev.ti.com/tirex/explore/node?node=A__Adzfc.4g4jo4J768dzo1TA__MSP430-ACADEMY__8HaEUeq__LATEST&placeholder=true

    我使用过此代码(由我其他人在本文中提供)、现在能够对寄存器进行读取和写入。 我还没有尝试写入 P_GAIN_SELECT 寄存器并观察 Vout 的变化。  

    在 EVM 中、即使更改寄存器中的值也未观察到变化。 假设它直接编程到 PGA302中、它应该能够正常工作。 或者是否有任何其他寄存器需要更改? 我还将检查 PADC 寄存器中存储的值。

    此外、EVM 只是随机停止工作(无法通过 USB 进行检测)、所以除了仅使用 IC、我别无选择。

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

    我不知道还需要进行哪些设置才能使器件运行。 通过查看数据表表11和14、可以发现其设计为在 Vout 加电后立即生成相应的输出电压。 您能为这种情况做些什么吗?

    您是否需要连接电桥才能获得 Vout? EVM (开箱即用)似乎有一个通过 J5-7连接的"桥接仿真器"。 您可以使用跳线引脚插入该引脚(即使没有 USB)[参考 EVM UG 图6]。

    另一个线索可能是 EVM 用户指南中的图23。 这显示了(假设)实际的配置序列。 我只计算7个事务(寄存器设置);如果您需要执行其中的任何一个、也许值得弄清楚这些事务会看到什么。

    对于 USB:EVM UG 显示 F5510 MCU 正在运行 USB2ANY 固件。 USB2ANY 也是一款独立的 TI 产品(我认为使用的是 F5529);可以通过论坛寻找一下其他 USB2ANY 用户是否遇到了 USB 突然失败的问题。

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

    我连接了一个外部惠斯通电桥、该电桥会提供0.5V 的差分输出以连接到 VINPN 和 VINPP 引脚(提供来自 VBRGP 和 VBRGN 的激励电压)。 EVM 上的桥式仿真器未给出适当的差分电压。 即使 EVM 在工作时、使用 GUI 更改数字电阻器的值也不会更改差分电压。  

    图中所示的顺序并不表示任何内容。 至于从 DI 页地址0x02访问寄存器(从器件地址= 0x42)、器件必须处于复位模式(0x40的0x0C 中为0x03)、但根据该命令、它处于运行模式。 此外、大多数在该之后配置的寄存器甚至在数据表中未提及(例如:0x42从器件中没有提到寄存器0x67)。  

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

    如果只为器件加电而不执行任何操作(连接网桥)、您在 Vout 上看到了什么吗? (我假设它大约是1.3*0.5=~0.6V。) 您看到过任何电桥激励吗?

    在与新器件建立通信后、我所做的一个相当标准的练习是、仅读取所有寄存器、并将它们与数据表中的复位值进行比较。  

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

    即使 VINPN 和 VINPP 未连接、我也会得到4.5V 的电压。 但它会不断变化、而不会对连接进行任何更改。

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

    我想直接对 EEPROM P_GAIN_SELECT 寄存器进行编程。 但数据表中给出的步骤可能有点令人困惑。 假设写入7位 EEPROM 地址的高6位、但 P_GAIN_SELECT 的地址为0x40000026。 这是一个7位地址吗? 我假设在2字节 EEPROM 高速缓存中、首先我们必须发送 EEPROM 地址的最后两位(本例中为0x26)、然后是我们要存储在其中的数据。 我想它应该反映在数字接口中(即、在0x42的0x47中)。 或者、我们如何回读 P 增益呢?

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

    我对这种描述有点怀疑,特别是因为它看起来自相矛盾。

    我认为 EEPROM_cache[]、EEPROM_PAGE_ADDRESS 和 EEPROM_CTRL 连续是没有问题的。 我猜、您应该写入(可能作为单个事务):0x80、data1、Data0、address (=0x26)、Program (=0x01)。 我假设设置一个单个字节(data1)、您将使用两个事务:(1) 0x80、data1 (2) 0x82、address、Program。 或者、您可能总是必须写入2个字节(提前知道第二个字节是什么)。

    数据表第7.19节指出、EEPROM 写入需要8ms。

    我想我在论坛的其中一个线程中读到过、想法是在复位中写入 EEPROM、然后在退出复位后、EEPROM 会加载到寄存器中。

    ----------------

    您可能已经看到过这一点、但 MikroE 具有用于其 PGA302 click 板的 Github 存储库。 这有点启发,但没有回答所有的问题(包括这个):

    https://github.com/MikroElektronika/mikrosdk_click_v2/tree/master/clicks/loadcell3

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

    我觉得0x26 (EEPROM 中用于 P_GAIN_SELECT 的寄存器地址)进入0x80、然后我们要存储的数据(例如:0x01用于2V/V 增益)进入0x81。 对于页地址、 0x40000026的前6位可以是 010000 (将十六进制地址转换为二进制)、因此可能在0x82中变为0x10。 然后在0x83中选择0x01。 但顺序必须为0x82 -> 0x80 -> 0x81 -> 0x83、才能按照典型 I2C 写入操作的时序进行操作(从器件地址->寄存器地址->数据)。 你怎么看?

    此外、如果该值在您结束复位后存储在寄存器中、我必须再次将其设置为复位、以查看0x42的0x47中的值? 就像复位-> EEPROM 编程->正在运行->复位->读取相应的寄存器?  

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

    我还没有了解该序列的流程、例如 VINPN 和 VINPP 引脚转至 P 增益 PGA、然后是 ADC、接着是 DAC (某种传感器补偿、两者之间采用 IIIR 滤波器)。 因此、PADC 的值是 Vout 处值的二进制补码? DAC 的缓冲器增益为4V/V、其基准电压为0.25*Vddp (数据表 PG:10)。 Vddp 究竟是什么? 老实说,这是如此令人困惑,没有正确的解释的顺序流。

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

    所有 EEPROM 地址都有0x40作为高字节、因此我不知道将其放入 eeprom_page_address 是如何提供任何信息的。 我想如果用户习惯了从右侧计数位(低位是 bit-0)、则调用低位"优先"是自然的。 (无论哪种方式、这似乎都是一个不幸的词语选择。)

    数据表第7.19节涉及一个"2字节页"、图29显示了到 EEPROM 阵列的16位路径。 这就是我不想写一个字节(这是我熟悉的大多数 EEPROM 的标准)的地方。 您可能会发现、您也必须(重新)写入相邻字节中的一个字节。

    ----------------

    我从此处获得了 EEPROM 加载周期描述:

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/933212/pga302-operation-mode-di-eeprom-dac-output/3448299

    我仍在梳理如何更改参数(至少有一个具有 EEPROM 默认值的参数)的"实时"值。 也许没有人会在实践中这么做吗?

    ----------------

    我仍然坚持使用 EVM UG 图23、即使您已对此进行了说明。 这似乎仍然可能是实际的配置序列、否则作者为什么会手动键入它?

    两个未记录的寄存器写入(0x38)中的一个显然是对 DAC_CTRL_STATUS;我没有找到(0x67)的解释。

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1131716/pga302-pga302-dac_ctrl_status/4202230

    然后、您会观察到(显然)配置是在器件未处于复位状态(0x42/0x47为0x00)时发生的。 也许写其他页面的禁令没有真正执行? 也许这就是"实时"更新的实现方式? (我怀疑只有 GUI 知道这一点。)

    --------

    我没有这些器件之一。 (我想我可能在5年前在一个项目中使用过一个。)  鉴于 PGA3人员明显缺乏响应、您可能只需要进行实验。 特别是在重置之外尝试"实时"更新似乎无害。

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

    根据第8.2节中的图、VDDP 只是 VDD、但位于保护电路之后。

    结合图31 + 33 +{Sec 8.2}、PADC 是 VINPx 输入的输出。  由于 ADC 的输入是差分的、因此认为它可以是+/-。 [参考第8.3.10.2节]

    在 ADC 之前应用 P_GAIN (模拟)。 之后应用温度补偿增益/失调电压(数字)。  为 DAC 提供补偿输出。

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

    因此、如果不应用补偿、PADC 值应该与 DAC 代码相同? 但 ADC 是16位、而 DAC 是14位。 也许转换必须是根据这... Like 对于全电压 ADC 将具有代码7FFF (2.5V、如第7.13节所述)、而 DAC 将具有代码3FFF (5V、第7.18节)。 但接下来的问题是、为什么 ADC 的范围是-2.5V 至2.5V、DAC 的范围是0至5V? 翻译的确切方式是什么?

    对于数字补偿、PADC_GAIN 和 PADC_OFFSET 是 EEPROM 寄存器、因此对它进行编程时遇到了同样的问题、无法读取它。

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

    将16位值转换(线性转换)为14位值需要非常简单的算术运算、但我不知道此芯片中的微处理器是如何实现的。 第8.3.20.2节和第8.3.20.4节中可能有一些提示。

    我不确定您是否可以关闭补偿。 本主题建议如何(有效的)击败它:

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1326335/pga302-disable-temperature-compensation

    您在此期间发现了什么?

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

    我不知道-2.5V 到2.5V 如何转换为0到5V…… 2.5V 是否表示 DAC 中的0V?  

    根据您发送的线程、应该有一个存储在 g0中的值、使输出为非零值。 这是我目前所推断的:

    P=a0 (PADC +b0)

    输出=h0+g0*P

    我尚未对4个参数(a0、b0、h0、g0)中的任何一个进行编程、因此它们必须为零、但我应该获得0作为输出、但我在 Vout 处确实得到了一些值。

    我想我不需要另外干扰 DAC 寄存器。

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

    我想某个器件(MCU/Compensation/IIR/Other)添加了2.5V 偏置电压来为单端 DAC 提供。 但我想它可能会在某个位置颠倒。 如果您更改桥中的(im)平衡、您会看到什么?

    我重新阅读了第8.3.18.1.2节、在我的上述建议中、地址字节可能应为(0x26 >> 1)。 这进一步表明、您 必须一次写入2个字节、写入 P_GAIN 单元格也会写入 T_GAIN 单元(0x27)。

    您是否尝试在器件处于活动状态(未处于复位状态)时"实时"更新 P_GAIN 寄存器?

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

    我想在 eeprom_page_address 寄存器中、要写入0x26 (即0x13)的高6位。 由于 EEPROM 地址从0变为7F (因此最多为7位)、 0x400000对于所有 EEPROM 寄存器是通用的。 但我的问题是、它如何识别它是0x26还是0x27、作为0x27也会在  EEPROM_PAGE_ADDRESS 寄存器中写入0x13?

    如本图所示、在高速缓存寄存器中、第一个字节应为高速缓存地址、第二个字节应为要写入寄存器的数据。 数据表中未提及缓存地址。 它可能会指示是否必须写入0x26或0x27。 但究竟应该写入0x45的0x80寄存器中呢?

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

    我认为您(始终)必须写入2个字节。 这意味着写入一个1字节的设置也包括写入一个相邻的字节。 相邻地址应为共享6位地址的地址(addr >> 1);对于 P_GAIN (0x26)、该地址应为 T_GAIN (0x27)。

    在这种解释下、您将两个字节写入 EEPROM_CACHE、地址(addr >>1)至 EEPROM_PAGE_ADDRESS、然后将0x01 (程序)写入 EEPROM_CTRL。 您可以在单个事务中编写所有这些内容。

    不明显的是 EEPROM_CACHE 中预期的字节顺序、因为图51/52中没有线索。 合理的第一猜测是假设字节顺序/小端字节序。 在这种情况下、您可以将 P_GAIN (0x26)写入 EEPROM_CACH[0]、然后将所选的 T_GAIN (0x27)写入 EEPROM_CACH[1]。

    我建议您尝试一下并寻找。 选择一个不同于 P_GAIN 所需值的 T_GAIN 值(已将 Temp 输入接地、所以任何 T_GAIN_SEL 值都不会这样)、将值写入0x80-0x83、等待8ms、使器件退出复位状态、然后读取 P_GAIN 和 T_GAIN 的(有效)值。 如果它们向后看、那么您知道字节顺序是相反的方法、因此请在代码中反转它们、然后再次写入。 (弄错了、成本非常低。)

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

    感谢你的帮助。 我能够对 EEPROM 0x26寄存器进行编程、它也可以在控制寄存器(0x42的0x47)中看到。 我在 PADC 值上标出了相应的输入值、这些值确实正在被放大、因此 ADC 之前的路径是清晰的。 需要注意的是、放大的值不能超过2.5V。 但我无法以相同的方式对 g0值进行编程(它被读取为0x00)。 我应该擦除寄存器、然后尝试对其进行编程吗?  

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

    EEPROM 的工作方式(通常)是写入单元格时会先隐式擦除它、因此我认为设置 ERASE+PROGRAM 会将其擦除为0xFF (或可能为0x00)。

    表10显示,没有办法阅读 G0的"实时"(DI)副本。 存在 EEPROM_ARRAY[](第5页,寄存器0x00-0x7F),它应该包含 EEPROM 的内容[请参阅表25]。 我想内部 MCU 在复位后自动执行读取、因为我没有看到请求的方法。 在一定程度上查看可以确信您的 G0写入成功。

    更一般地说:该线程包含一个 EEPROM 设置列表、我想这些设置是从 TI 的实际芯片中(通过 EEPROM_ARRAY[])提取的。 (第一个列表看起来不太正确、因此使用第二个列表。) 值得注意的是、其中一些值与数据表中规定的值有所不同。 他还建议您可以在复位时直接写入 DAC 输出寄存器(我想为 DAC_REG0)、 这可能 会带来启发:

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/933212/pga302-operation-mode-di-eeprom-dac-output/3448299

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

    无论我写入 G0寄存器中的值是0x05还是0x0D。 这在其他线性化系数中也似乎是个问题。 另外、寄存器描述提到系数是二进制补码、所以如果我想存储0x01、我是否必须写入0xFF? 即使这样、存储的值也是0x05或0x0D。  

    在第38页、有2个 IIR 滤波器公式、我无法辨别它到底是如何实现的。 在 PADC 之后、该值进入数字补偿、然后进入钳位、接着进入 IIR 滤波器、最后进入 DAC 增益。 钳位的作用是什么? 我希望能够有一个更清晰的顺序来明确如何准确地达到 Vout 引脚9上的放大输出。  

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

    您如何读取 G0? 您是否正在查看 EEPROM 值? G0是16位、您是否全部显示了它们? 也就是说、我不知道为什么在写入0x01后会看到0x05。 我链接到的该线程中的 EEPROM 列表显示 G0=0x1000、这是值得的。

    二进制补码只是正常的"整数"表示。 +2将为0x0002;-2将为0xFFFE。

    钳位(尽我所能)会限制可提供给 DAC 的值范围;也可能称为"饱和"。 如果结果超出[NORMAL_LOW、NORMAL_HIGH]范围、将根据需要替换 CLAM_LOW 或 CLAM_HIGH 值。 有一点(我想)就是要避免 DAC 输出0x4005的结果、就好像它是0x0005一样。 人为减小输出范围可能还有其他原因。

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

    是的、我正在读取 G0的 EEPROM 值0x08和0x45的0x09。 当我第一次读取它而不做更改时、它显示为0x1000、但增益难道不是8吗? 如果我将所有与钳位相关的寄存器保持为0x00、输出应该是 DAC 上的任何值、对吧?

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

    我不确定您的 G0更改会发生什么情况。 我还没有完成所有的算术运算;为什么 G0=0x1000意味着增益为8?

    我预计在新的芯片中、NORMAL_HIGH 和 CLAM_HIGH (两者)=0x3FFF、因此为 DAC 提供的值始终可以放入14位中。 这也是我在链接到的主题的 EEPROM 列表中看到的内容。 如果您的值为=0、那么(根据我的理解) DAC 值将始终为=0。 您在那里看到了什么值?

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

    对于 G0= 0x1000、您有什么了解? 我通常在输出端看到4.3V。 但它会有所变化、但与输入或增益相关的方式不同。

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

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/913917/pga305-read-eeprom-register/3384575?tisearch=e2e-sitesearch&keymatch=crc%252525252520pga#3384575

    本主题中提到、每次修改 EEPROM 寄存器时、都必须使用新的 CRC 值对 EEPROM 的最后一个字节(7F、EEPROM_CRC)进行编程。 但当 EEPROM_CRC 寄存器被修改时、CRC 值会发生变化(因为它也是 EEPROM 寄存器)。 在这种情况下、我们绝不能在 EEPROM_CRC 寄存器中保留相同的 EEPROM_CRC_VALUE (0x86或0x45)值。 因此、EEPROM_CRC_STATUS 始终显示0x00。 这个循环的结束方式是什么?

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

    SEC 8.3.18.1.4声称 CRC 是"自动"计算和验证的、因此您似乎不需要执行任何操作。  PGA305数据表(SLDS231章节7.3.16.1.4) 包含相同的文本;我不知道为什么其他线程似乎建议您计算和存储它。

    我假设 EEPROM_CRC_VALUE 是使用 calculate_crc 后的结果、因此可能正是如此设置 EEPROM_CRC_STATUS、而自动验证不会设置任何内容。

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

    嗨、  

    我将 EEPROM 编程为原始设置、并且可以正常工作! 我能够在引脚9看到针对相应增益 I 设置的正确放大输出电压。 但问题似乎永远不会结束。。。 我之前使用与 Launchpad 的3.3V 电源相连的电位器提供输入、工作正常。 但我必须将该系统连接到应变放大设置、那里的输入来自函数发生器、结果不是非常准确。 由于我的主要目标是应变放大器的设计、因此输入电压电平非常低(在1mV 至3mV 的范围内)。  

    6½电压(由2 μ V 数字万用表测量)约为29mV、即使将输入施加到零也是如此。 因此、对于较低的输入、输出为该恒定电压(当 P_GAIN =1.33、2、4时)。 对于超过100mV 的电压、增益会不断降低。 对于更高的增益(例如40,100v/v)、我甚至不会观察到任何类型的放大、只是这个约为29到40mV 的恒定电压。  

    首先、我认为偏移校正可能是这里的问题。 但是、即使我设置该特定寄存器(OFFSET_CANCEL:EEPROM ADDRESS=0x29)、我也没有看到任何显著的输出变化。 使用电位计时电路工作正常的奇怪、但使用函数发生器时有问题。 如果您对此有任何想法、请与我们分享。

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

    函数发生器是如何融入您的系统的? 它是否提供电桥激励? 我已经看到、许多函数发生器无法提供太多电流、但数据表测试案例表明1mA (5V/5Kohm)对 ADC 是合适的。

    您是否能够读取 PADC_DATA (0x40/0x10-0x11)? 这可能有助于区分这两种情况之间的差异。

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

    我只使用直流函数发生器输入直接连接到 VINPN 和 VINPP 引脚。 PADC_DATA 和 DAC 代码的值对应于我在万用表上看到的任何输出。

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

    函数发生器接地端的负端是悬空的还是悬空的? 将电桥的一侧接地会使其失衡。

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

    但是、来自函数发生器的 PADC_DATA 是否与等效电桥不平衡相匹配? 如果是、这意味着(正如您建议的)更正中的某些内容。  

    EEPROM 中的 NORMAL_x 和 CLAM_x 值是什么?

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

    函数发生器的负极已连接 VINPN 并接地(引脚15)

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

    我没有检查输入0V 的 PADC 值、但检查输入100mV (增益=4)。 PADC 给出了相当于114mV 的值、DAC 代码也显示了相同的值。 但万用表上的值是250mV。

    我现在不知道出了什么问题。

    NORMAL_x 和 CLAM_x 的值为0x00

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

    OFFSET_CANCEL 寄存器具有一个用于确定正偏移或负偏移的 OFFSET_SELECT 位。 当我设置位(正偏移)时... 偏移会增加、但当 I CLEAR (负偏移)时、偏移没有变化... 电压保持在至少21mV、不会低于该值。

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

    我希望 NORMAL_HIGH 和 CLAM_HIGH =0x3FFF (如另一线程所示)。 否则、它将(始终)检测"过高"并尝试输出0、无论是否采用算术运算。

    我(模糊)记得 DAC 不是轨至轨、因此250mV 可能低至可以达到。