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.

[参考译文] DAC53202:使用十六进制值更新了 DAC 固定电压中的问题。

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1301552/dac53202-issue-in-updated-fix-voltage-on-dac-using-hex-values

器件型号:DAC53202
主题中讨论的其他器件: DAC63204

很抱歉、重新跳回到 DAC 项目需要一些时间。 如前所述、我将使用以下代码。 但 DAC 值似乎未更新。

我是用于更新 DAC 电压的十六进制值。 例如 (对于7.44v 为0x708、对于8.3v 为0x604、等等)

这里是我的代码;;;;;;;;

//用于配置 DAC53202RTER 上的 OUT0的函数
void configure_out0 (void){
RET_CODE_t err_code;

//为 OUT0配置 DAC53202RTER
uint8_t common_config_data[2]={0x1F、0x03FF};//将 OUT0设置为电压输出模式
uint8_t gain_config_data[2]={0x15、0x0400};//设置 OUT0的增益(使用 VDD 作为基准)

//发送 I2C 启动条件并写入 COMMON-CONFIG 寄存器数据
err_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、common_config_data、sizeof (common_config_data)、false);
if (err_code!= nrf_Success)
{
nrf_log_error ("I2C 事务失败、错误代码:%d"、err_code)
nrf_log_flush ();


//发送 I2C 启动条件并写入 DAC-0-I2C VOUT-CMP-CONFIG 寄存器数据
err_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、gain_config_data、sizeof (gain_config_data)、false);
if (err_code!= nrf_Success)
{
nrf_log_error ("I2C 事务失败、错误代码:%d"、err_code)
nrf_log_flush ();

//可选择添加延迟以使 DAC 稳定
nrf_delay_ms (10);

//用于更新 OUT0输出值的函数
void update_out0 (uint16_t output_value)//output_value 是十六进制代码(例如、对于7.44V 为0x708、对于16V 为0x00)

{
RET_CODE_t err_code;

//使用 DAC-0-DATA 寄存器更新 OUT0输出
uint8_t DATA_REGISTER_DATA[3]={0x1C、(output_value >>8)& 0xFF、output_value & 0xFF};

//发送 I2C 启动条件并写入 DAC-0-DATA 寄存器数据
ERR_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、data_register_data、sizeof (data_register_data)、false);
if (err_code!= nrf_Success)
{
nrf_log_error ("I2C 事务失败、错误代码:%d"、err_code)
nrf_log_flush ();

//可选择添加延迟以使 DAC 稳定
nrf_delay_ms (10);

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

    尊敬的 Vishal:  

    此器件的最大电源为5.5V。 是否要为 VDD 或 VREF 引脚提供更多电源? 此器件无法获得7.44V 或8.3V 电压。  

    此致!

    K·琼斯

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

    Jones、您好!

    我很抱歉让你困惑。

    是的、我正以 MCU 的3.3V 正常电压运行 DAC。

    我期望升压控制器上的电压不在 DAC 上、抱歉。

    我用 SMARTGUI 软件检查了 DAC、它能够正确提供相应的十六进制输出。 例如 对于十六进制0x708、输出为2.138v。

    唯一的问题是我的软件是正确的、我缺少任何要启用的东西。。。

    谢谢。

    维沙尔

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

    尊敬的 Vishal:  

    明白了、感谢您的澄清。  

    写入寄存器0x1C 时、数据应先左移为16位。 我假设0x708只是10位数据、因此您需要将数据左移6位至0xB100。 10位 DAC53202将接受寄存器中的最高有效10位数据(位15:6)

    您能尝试一下吗?  

    此致!

    卡琳恩

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

    当然...! 测试完成后、我将更新您的信息。

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

    您好!

    我尝试进行更改、但它不起作用。 似乎是 DAC-OUT0未处于输出模式。  

    I2C 通信就足够了。 它工作正常。  

    请检查以下行:

    uint8_t common_config_data[2]={0x1F、0x03FF};//将 OUT0设置为电压输出模式
    uint8_t gain_config_data[2]={0x15、0x0000};//设置 OUT0的增益

    //发送 I2C 启动条件并写入 COMMON-CONFIG 寄存器数据
    err_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、common_config_data、sizeof (common_config_data)、false);

    //发送 I2C 启动条件并写入 DAC-0-I2C VOUT-CMP-CONFIG 寄存器数据
    err_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、gain_config_data、sizeof (gain_config_data)、false);

    void update_out0 (uint16_t output_value)//output_value   为十六进制代码

    {
    RET_CODE_t err_code;

    //将10位数据左移6位
    uint16_t Shifted_data = output_value << 6;

    //为 DAC-0-DATA 寄存器准备数据数组
    uint8_t data_register_data[3]={0x1C、(Shift_data >> 8)和0xFF、Shift_data 和0xFF};

    //发送 I2C 启动条件并写入 DAC-0-DATA 寄存器数据
    ERR_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、data_register_data、sizeof (data_register_data)、false);

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

    尊敬的 Vishal:  

    您能否分享一下其中一次 I2C 写入的示波器屏幕截图以便我进行检查?  

    我注意到、这里的增益配置寄存器设置为0。 这样会选择外部基准作为基准。 您是否有任何元件连接到 VREF 引脚?  

    uint8_t gain_config_data[2]={0x15、0x0000};//为 OUT0[/报价]设置增益

    此致!

    K·琼斯

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

    Jones、您好!  

    我误解了几件事情,现在我 发现了几个问题,并改正了它们。  

    更改如下:  

    我使用的是 DAC53202RTER 、而不是 DAC63204。

    我的 I2C 通信地址为0x48 (GND)

    我使用 SMART-DAC-GUI 进行跟踪的地址和值

    1. common config --> addr 0x1F,  数据0x0FF9

    2. DAC0-Vout-CMP-CONFIG --> addr 0x03, data 0x0400 (VDD 作为参考) 同样,这在 GUI 中没有发挥任何作用,请告诉我应该在我的软件中使用此功能。

    3. dac0-data --> addr 0x19, data 0x7080 (任意十六进制值)

    感谢您在整个过程中提供意见、这些是我的最终发现。 请为我提供相关指导。 这些是使用 DAC63204在 smart-GUI 上跟踪的值。

    但在实际的外形板上是 DAC53202RTER。  

    谢谢。

    Vishal.

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

    尊敬的 Vishal:  

    外部基准引脚上拉至 EVM 上的 VDD、因此如果您将  DAC0-Vout-CMP-CONFIG 保留为0x0000、则器件将使用连接到 VDD 的外部基准。 您是否将外部基准连接到电路板上的任何地方? 如果不是这样的话、您应该将  DAC0-Vout-CMP-CONFIG 设置为0x0400、以选择 VDD 作为基准。  

    DAC53202上的通道0具有与 DAC63204上的通道0不同的寄存器位置、因此请确保使用正确的地址/数据:  

    1. common config --> addr 0x1F,  数据 0x03FF

    2. DAC0-Vout-CMP-CONFIG --> 地址0x15 , 数据0x0400 (VDD 作为参考) 另外,这在 GUI 中也没有发挥任何作用,请让我知道我应该在我的软件中使用此模块。

    3. DAC0-DATA ---->  地址 0x1C , 数据0x7080 (任何十六进制值)

    还要确保测量 DAC53202上的正确引脚。 通道0位于引脚1、2上。 OUT0和 FB0应短接在一起。  

    此致!

    K·琼斯

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

    Jones、您好!

    感谢您的回复、是的、我已经短接了 OUT0和 FB0...!

    那么、对于 DAC63204、我的地址正确吗?  (0x1f、0x0FF9)(0x03、0x0400)和(0x19、十六进制值)  

    和 DAC53202能够解决您提到的问题。  

    我很困惑、因为我尝试了所有的组合。 现在、我将尝试通过 Pico 跟踪我的数据。

    请用地址和值对 DAC63204和 DAC53202进行少量说明

    谢谢。

    维沙尔  

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

    尊敬的 Vishal:  

    请分享您的设置原理图和对 DAC 的一次写入的示波器屏幕截图、以便我进行仔细检查。  

    DAC63204: (0x1f、0x0FF9)(0x03、0x0400)和(0x19、十六进制值)

    输出引脚11、12:

    您还可以将控制器连接到 DAC63204 EVM、并尝试写入上述值以检查是否可以获得输出。 这可以帮助确定问题与您的代码还是与您使用的 DAC53202板有关。   

     

    DAC53202:  (0x1f、0x03FF)(0x15、0x0400)和(0x1C、十六进制值)

    输出引脚1、2:

    此致!

    K·琼斯  

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

    Jones、您好!

    感谢您的输入、  

    我能够 configure_out0并更新值。  

    在 DAC53202RTER 上 、我 使用"(0x1F、0x03FF)(0x15、0x0400)和(0x1C、十六进制值)"进行了测试、但测试结果不起作用。  

    但是对于 DAC63204和 DAC53202RTER   "(0x1F、0x0FF9)(0x03、0x0400)和(0x19、十六进制值)"都 运行良好。

    尝试更新值(0x19、0x708 (十六进制代码))的问题仍然很少  

    更新0x19 (out0引脚)上的十六进制值时要遵循任何特定格式...???

    我正在使用以下软件:

    void update_out0 (uint16_t output_value)//output_value 为十六进制代码

    {

    //提取16位值的12个最低有效位
    uint16_t DATA_VALUE = output_value & 0x0FFF;

    //为 DAC-0-DATA 寄存器准备数据数组
    uint8_t data_register_data[3]={0x19、 (DATA_value >>8)、 (DATA_VALUE & 0xFF)};

    谢谢。

    Vishal.

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

    尊敬的 Vishal:  

    如果以下内容正确、则您会查看错误的输出引脚、实际上可以查看 DAC53202上的通道1。 现在没问题、因为您只是想让器件启动并运行、但您能共享您的原理图吗?我可以确认一下。

    但对于 DAC63204和 DAC53202RTER   "(0x1F、0x0FF9)(0x03、0x0400)&(0x19、hex values)"都 能很好地工作[/报价]

    您能否说明更新寄存器0x19中的输出值时发现了什么问题? 您应该提取16位值的最高12个有效位、而不是16个最低有效位。 例如、16位0x8000相当于12位0x800。 如果您采用12个 LSB、那么您将得到数据0x000、它会提供0V 输出。 我想这是你的问题。 如果没有、请详细说明您看到的行为。  

    此致!

    K·琼斯

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

    Jones、您好!

    是的、我应该重新验证该器件。 但目前、这两个 EVM 都已正常运行。

    "您应该提取16位值中的最高12个有效位、而不是16个最低有效位。 例如、16位0x8000相当于12位0x800。 如果您采用12个 LSB、那么您将得到数据0x000、它会提供0V 输出。 我想这是你的问题。 如果没有、请详细说明您看到的行为"

    该行可以解决大部分问题、它是一个小的校准问题。  考虑到上述指南、我可以重新检查逻辑。

    谢谢。

    Vishal.

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

    尊敬的 Vishal:  

    是的、如果您遇到更多问题、请重新检查并告知我。  

    此致!

    K·琼斯

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

    Jones、您好!

    我认为2个字节无法正确传输、我尝试调试/读取更新后的值、但只能读取第一个字节。 您能否在以下逻辑中跟踪任何问题。

    "

    void update_out0 (uint16_t output_value)//output_value 为十六进制代码

    {
    RET_CODE_t err_code;
    uint8_t reg_address = 0x19;

    //提取16位值的最高有效12位
    uint16_t DATA_VALUE =(output_value >>4)& 0x0FFF;
    nrf_log_info ("data:%x"、data_value")
    nrf_log_flush ();

    //为 DAC-0-DATA 寄存器准备数据数组(大端字节序格式)
    uint8_t data_register_data[3]={
    0x19、// DAC-0-DATA 寄存器地址
    (DATA_VALUE >> 8)// MSB
    (DATA_VALUE & 0xFF)// LSB

    };

    //发送 I2C 启动条件并写入 DAC-0-DATA 寄存器数据
    ERR_code = nrf_drv_twi_tx (&m_twi、DAC53202RTER_I2C_address、data_register_data、sizeof (data_register_data)、false);
    if (err_code!= nrf_Success)
    {
    nrf_log_error ("I2C 事务失败、错误代码:%d"、err_code);
    nrf_log_flush ();

    while (m_xfer_done == false);
    nrf_delay_ms (10);  "

    谢谢。

    Vishal.

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

    尊敬的 Vishal:  

    数据应在寄存器中进行16位对齐。  

    写入寄存器0x1C 时、数据应先左移为16位。 我假设0x708只是10位数据、因此您需要将数据左移6位至0xB100。 10位 DAC53202将接受寄存器中的最高有效10位数据(位15:6)

    [/报价]

    在这里、您要将其移位到12位。  

    uint16_t data_value =(output_value >> 4)& 0x0FFF;

    因此您的 电压输出可能除以16。 可以将数据保持为16位格式。 DAC63204将忽略4个 LSB、DAC53202将自动忽略6个 LSB。 我们这样做是为了简化对这些器件的所有分辨率变体的写入操作、而无需重新处理数据。  

    我将完全删除这一行代码、并将数据保留为16位。  

    uint16_t data_value =(output_value >> 4)& 0x0FFF;

    此致!

    K·琼斯

    [/quote]