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.

[参考译文] DAC8760:DAC8760

Guru**** 2510095 points
Other Parts Discussed in Thread: DAC8760

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/668706/dac8760-dac8760

器件型号:DAC8760

尊敬的所有人:

    我已经开始设计一个将 DAC8760与 Renesas R5F104连接的项目。我遵循了一些参考设计、其中他们在 DAC8760和微控制器之间使用了 ISO7641 IC。。这些是一些查询

我们是否真的需要它们之间的 ISO7641???  

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

    尊敬的 Firoz:

    DAC8760和微控制器之间的通信不需要数字隔离器。 数字隔离器用于需要电隔离的应用。 数字隔离可提供安全和保护以及改进的抗噪性能。

    谢谢、

    Garrett

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

    您好、Garret、

           感谢您的回复、我正在处理代码。我已将 DAC8760 SPI 线路直接连接到 Renesas 微控制器。我有一个带 MSP430控制器的 DAC 8760库 、这是 Renesas 提供的任何库。

    或具有 SPI 读取、写入函数的标准库。

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

    e2e.ti.com/.../6087.DAC8760.cHiGarrett、

           我已经使用了 DACSPI 库并根据 Renesas SPI...I DAC 代码对其进行了转换所有函数都包含 SPI 写入并将接收的数据存储在 RCV 寄存器中。请在附件中找到代码...我们必须从 DAC 8760读取还是只在 IC 中写入。

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

    我不知道 Renesas 的任何特定 SPI 库。 假设头文件中的被调用函数正常工作、您提供的代码看起来相当简单。 您可以从大多数 DAC 寄存器进行读取和写入。 这在数据表的寄存器说明中指定。 在大多数应用中、需要读取以检查状态寄存器(警报条件)或其他寄存器、以确保正确配置。

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

    您好、Garret、

    我已经根据 Renesas 控制器转换了的代码,但是无论我发送到 DAC8760的数据如何,电压输出都保持为零。

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



    #include "r_cG_macrodriver.h"
    #include "r_cG_port.h"
    #include "externfunct.h"
    #include "externvar.h"
    #include "r_cG_serial.h"
    #include"dac22.h"

    静态无符号字符 RcvData[3];

    /
    * DAC8760_Write_Regs
    (二 /
    /*!
    *@简要写入 DAC8760上的寄存器。
    *
    *此函数将执行一个到 DAC8760的写入寄存器命令。 此函数可用于更新 DAC8760上的一个寄存器。
    *不执行错误检查、因此用户有责任确保他们不会尝试写入超过 DAC8760寄存器的末尾。
    *
    *@param[in] writeValues 要放置在 DAC8760中的16位寄存器值
    *@param[in]地址 要写入的寄存器地址
    *
    *@返回无
    *
    (二 /
    void DAC8760_WriteReg (uint16_t writeValues、uint8_t 地址)

    uint8_t outData[3];

    outData[0]=地址;

    //切换无尾功能
    outData[1]= writeValues >> 8;
    outData[2]= writeValues & 0xff;

    DAC8760_SPIWrite (outData、RcvData);



    /
    * DAC8760_Read_Regs
    (二 /
    /*!
    *@简要读取 DAC8760上的寄存器。
    *
    *此函数将对 DAC8760执行读取寄存器命令并返回生成的数据。 此函数可用于读取一个或多个
    *来自 DAC8760的寄存器。 不执行错误检查、因此用户有责任确保他们不会尝试读过
    * DAC8760寄存器的末尾。
    *
    *@param[out]* readValues 用于放置 DAC8760的8位寄存器值的指针
    *@param[in]地址 要读取的寄存器地址
    *
    *@返回无
    *
    (二 /
    void DAC8760_ReadReg (uint8_t * readValues、uint8_t 地址)

    uint8_t outData[3]={0x55、0x55、0x55};

    //设置读取命令的地址
    outData[0]= DAC8760_Read_register;
    outData[2]=地址;
    DAC8760_SPIWrite (outData、readValues);

    //实际读取前一个地址
    outData[0]= DAC8760_WRITE_NOP_register;
    DAC8760_SPIWrite (outData、readValues);



    /
    * SETUP_DAC8760
    (二 /
    /*!
    *@brief 会执行 DAC8760的设置。
    *
    *此函数将配置 DAC8760。
    *
    *@param[in] controlReg 写入 DAC8760_CONTRAL_REGISTER 的值
    *@param[in] 配置注册 写入 DAC8760_configuration_register 的值
    *@param[in] 卡利勒 写入 DAC8760_GAIN_CALIBRATY_REGISTER 的值
    *@param[in] zeroCalReg 写入 DAC8760_zero_calibration_register 的值
    *
    *@返回无
    *
    (二 /
    void DAC8760_Setup (uint16_t controlReg、uint16_t configurationReg、uint16_t gainCalReg、uint16_t zeroCalReg)

    unsigned char i;
    //DAC8760_SPISetupMaster();
    DAC8760_Reset ();
    // for (i=0;i<1000;i++);
    DAC8760_NOP ();
    // for (i=0;i<1000;i++);
    DAC8760_WriteReg (controlReg、DAC8760_WRITE_CONTROL_register);
    // for (i=0;i<1000;i++);
    DAC8760_WriteReg (配置寄存器、DAC8760_WRITE_CONFIGURAY_REGISTER);
    // for (i=0;i<1000;i++);
    DAC8760_WriteReg (gainCalReg、DAC8760_WRITE_GAIN_CALIBRATE_register);
    // for (i=0;i<1000;i++);
    DAC8760_WriteReg (zeroCalReg、DAC8760_WRITE_zero_calibration_register);




    /
    * DAC8760_Reset
    (二 /
    /*!
    *@brief 会向 DAC8760发送一条复位命令。
    *
    *此函数在 SPI 总线上向 DAC8760发送复位命令。
    *
    *@返回无
    *
    (二 /
    void DAC8760_Reset (void)

    uint8_t outData[3];

    DAC_CSn=1;/CS_ASIC=1;
    DAC_CLK=0;//SCLK_ASIC=0;
    DAC_OUT=0;//DOUT_ASIC=0;
    DAC_IN=1;//DIN_ASIC=1;

    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    outData[0]= DAC8760_WRITE_RESET_register;
    outData[2]= DAC8760_RESET;

    DAC8760_SPIWrite (outData、RcvData);



    /
    * DAC8760_NOP
    (二 /
    /*!
    *@brief 会向 DAC8760发送 Nop 命令。
    *
    *此函数在 SPI 总线上向 DAC8760发送 Nop 命令。 DAC8760将超时、如果它未接收到、则会进入错误状态
    * SPI 主器件的常规命令。 此命令可用于通知 DAC8760系统仍在运行、但未对进行更改
    *需要 DAC8760。
    *
    *@返回无
    *
    (二 /
    void DAC8760_Nop (void)

    uint8_t outData[3];
    outData[0]= DAC8760_WRITE_NOP_register;
    DAC8760_SPIWrite (outData、RcvData);



    /
    * DAC8760_SET_OUT_VALUE
    (二 /
    /*!
    *@简要设置 DAC8760的输出电流。
    *
    * DAC8760设计用于4-20mAmp 系统。 通过改变 DAC8760的电流输出来传送数据。 此函数设置
    *所需的输出电流。
    *
    *@param[in] 值 从 DAC8760输出的值
    *
    *@返回无
    *
    (二 /
    void DAC8760_SetOutValue (uint16_t 值)

    DAC8760_WriteReg (值、DAC8760_WRITE_DATA_register);


    /
    * DAC8760_Read_Status
    (二 /
    /*!
    *@简要从 DAC8760中读取状态寄存器。
    *
    *此函数返回 DAC8760状态寄存器中的当前值
    *
    *@返回 DAC8760状态 (DAC8760_ferr_STS、DAC8760_SPI_TIMEOUT_ERR、DAC8760_LOOP_STS、DAC8760_CURR_LOOP_STS)
    (二 /
    uint8_t DAC8760_ReadStatus (空)

    uint8_t returnValue[3];

    DAC8760_ReadReg (返回值、DAC8760_READ_STATUS_register);

    返回(返回值[2]);

    /********* SPI 写入函数 /
    void DAC8760_SPIWrite (uint8_t * outData、uint8_t * inData)

    uint8_t i;

    对于(i=0;i<3;i++)

    inData[i]= SPI_TransRec_BYTE (outData[i]);


    //加载 DAC 寄存器输入。
    //锁存引脚上的上升沿将输入移位寄存器数据加载到 DAC 数据和控制寄存器中并更新 DAC 输出。
    DAC_CSn=0;//DAC8760_LATCH_PORTOUT |= DAC8760_LATCH_PIN;
    NOP();//___delay_cycles (1); //延迟最小值40ns
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    DAC_CSn=1;//DAC8760_LATCH_PORTOUT &=~DAC8760_LATCH_PIN;

    / /
    /********* SPI_TRANSrec.********* /
    unsigned char SPI_TransRec_BYTE (unsigned char mtrs)

    unsigned char i、maskdata、ReadData;
    unsigned char m_rcv、m_TRS、opr_data;
    unsigned char temp0;

    m_TRS=mtrs;
    m_rcv = 0x00; /*初始化 m_rcv[] *


    DAC_CLK=0;//SCLK_ASIC=0;
    DAC_OUT=0;//DOUT_ASIC=0;

    DAC_CSn=0;/CS_ASIC=0;
    NOP();
    NOP();
    NOP();
    NOP();

    //对于(i=0;i<5;i++)

    maskdata=0x80;
    while (maskdata)

    CLR_Watchdog ();
    ReadData = m_rcv | maskdata;
    if (m_TRS& maskdata)//"H"输出?
    DAC_OUT=1;//DOUT_ASIC = 1;//是 SDA="H"
    其他
    DAC_OUT=0;//DOUT_ASIC = 0;
    如果(DAC_IN)// SDA="H"?
    m_rcv = ReadData;//是
    maskdata >=1;
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    DAC_CLK=1;//SCLK_ASIC =1;
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    DAC_CLK=0;//SCLK_ASIC=0;
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();


    DAC_CSn=1;/CS_ASIC=1;
    m_rcv=0;//(未知)字节在发送命令时接收

    //opr_data[3]= 0;
    //opr_data[2]= m_rcv[1];
    //opr_data[1]= m_rcv[2];
    opr_data = m_rcv;


    temp0 = opr_data;
    返回 temp0;

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

    尊敬的 Firoz:

    我看到您在论坛上向我发送了类似的直接消息、我想我会直接回复该主题。

    由于我们并不是 Renesas 的专家、调试代码并不是我们的理想选择。 相反、我建议我们从硬件的角度来看待问题。

    如果您可以提供锁存器、SDI、SDO 和 SCLK 引脚的示波器捕获、我们可以验证物理信号是否正确。

    此外、验证连接的原理图也会有所帮助。

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

    尊敬的 Kevin:

            请查找原理图、DAC8760 PCB 和 SCLK、LATCH、MISO、MOSI ANe2e.ti.com/.../dac8760_5F00_DATA.zipD警报引脚的波形...

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

    很抱歉、我没有具体说明。 我们需要检查数字信号的相对计时、而不是每个信号的单独特性。 具体而言-我们希望看到一个包含所有四个数字信号的单个示波器捕获、理想情况下、放大一点、以便我们可以查看设置和保持时间等元素的详细信息。

    我还想指出、警报引脚看起来很低、因此 DAC 触发了一些警报。 我不相信 IOUT 开路警报在 IOUT 被禁用时起作用-因此很可能这是一个热警报。 我很好奇、DAC 底部的外露散热焊盘是否可能接触到调试板上的焊盘、因为最有可能的是、此分线板上的焊盘布局并非在设计时就考虑到散热焊盘或 DAC8760。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Duke、

          很抱歉、我没有额外的探针来测量信号并对其进行补偿。我已解压输出部分、现在我能够在 DAC 写入寄存器中写入值并改变 VOUT 电压。但无论何时配置电流输出控制、我的电流部分仍然不工作 配置寄存器中的位 ALARM 引脚变为低电平。由于我已经用 IC 下方的绝缘胶带覆盖了散热焊盘、因此没有热问题。

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

    在不同时捕捉信号的情况下、很难确认正确的 SPI 传输。 至少在您测试电压输出时、SPI 似乎正在正确传输。

    1、在报警条件下、在 IOUT 测得的电压/电流是多少、您使用的负载是多少。 确保负载正确连接、因为开路会触发警报。

    2.您能读取状态寄存器吗? 该寄存器的低5位包含报警条件。 这将有助于识别触发警报的内容。

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

    您对此有任何更新吗?

    谢谢、
    Garrett