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.

[参考译文] DAC81416EVM:DAC81416

Guru**** 2537310 points
Other Parts Discussed in Thread: DAC81416

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/986608/dac81416evm-dac81416

器件型号:DAC81416EVM
主题中讨论的其他器件:DAC81416

您好!

我是否可以通过映射 DACtransfer 来设置特定电压?我无法在 Vref 为5V、VDD=5V 且 VSS=-5V 的情况下扫描 DAC 输出

此致、

Samarth Jain

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

    您好、Samarth、

    Akhilesh 可以帮助您快速完成此操作。  谢谢、

    Paul

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

    我尝试了以下针对 teensy 4.1的代码来将所有通道切换为+5V、DAC81416为-5V、但它不起作用。我仍然读取所有通道0。

    /*在错误检查禁用访问周期(24位长)中,SDI 的第一个字节输入是
     *将请求标识为读取或写入命令的指令周期和
     *要访问的6位地址。周期中的最后16位构成数据周期。
    *

    #include


    #define NUM_Bytes 3 // SPI 帧中的字节数
    const int slaveSelectPin = 2;

    SPI 设置设置 A (2000000、MSBFIRST、SPI_MODE1);

    void setup(){

    uint8_t initTx0[NUM_bytes];
    int8_t ret;
    uint8_t * initPtr;

    Serial.begin(9600);
    serial.print ("启动 DAC81416示例");


    SPI.begin();

    PinMode (slaveSelectPin、输出);//将 PD2配置为 CLR

    digitalWrite (slaveSelectPin、HIGH);//默认将 CLR 设置为高电平
    //范围:+/- 5V
    initTx0[0]= 0x0A;
    initTx0[1]= 0x99;
    initTx0[2]= 0x99;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);// 0 1 010000 00110011001100110011
                                                             //WITE DAC6、带001100110011
    /*位 字段描述
    23 RW 将通信标识为地址寄存器的读取或写入命令。R/W= 0设置写入操作。R/W= 1设置读取操作
    22 x 注意事项位
    21-16 A[5:0] 寄存器地址。指定在读取或写入操作期间要访问的寄存器
    15-0 DI[15:0] 数据周期位。 如果是写命令、则数据周期位是要写入地址 A[5:0]的寄存器的值。
    如果是 readcommand、则数据周期位无关值
    *


    //范围:+/- 5V
    initTx0[0]= 0x0B;//address
    initTx0[1]= 0x99;//data
    initTx0[2]= 0x99;//data
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
    //范围:+/- 5V
    initTx0[0]= 0x0C;
    initTx0[1]= 0x99;
    initTx0[2]= 0x99;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);


    //范围:+/- 5V
    initTx0[0]= 0x0D;
    initTx0[1]= 0x99;
    initTx0[2]= 0x99;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);

    //加电设备
    initTx0[0]= 0x03;
    initTx0[1]= 0x0A;
    initTx0[2]= 0x84;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);


    //为所有通道加电
    initTx0[0]= 0x09;
    initTx0[1]= 0x00;
    initTx0[2]= 0x00;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);

    //为所有通道启用广播
    initTx0[0]= 0x05;
    initTx0[1]= 0xFF;
    initTx0[2]= 0xFF;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);

    //将代码写入所有通道
    initTx0[0]= 0x0F;
    initTx0[1]= 0xFF;
    initTx0[2]= 0xFF;
    initPtr =&initTx0[0];

    RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);


    void loop(){
    SPI.beginTransaction(settingsA);

    int8_t rv;

    uint8_t *txPtr;
    uint8_t spiTx0[NUM_bytes];

    //编写中间代码
    spiTx0[0]= 0x0F;
    spiTx0[1]= 0xFF;
    spiTx0[2]= 0xFF;
    txPtr =&spiTx0[0];

    RV = DACtransfer ((uint8_t*) txPtr、(uint8_t)(NUM_bytes);

    延迟(100);

    //编写完整代码
    spiTx0[0]= 0x0F;
    spiTx0[1]= 0x00;
    spiTx0[2]= 0x00;
    txPtr =&spiTx0[0];

    RV = DACtransfer ((uint8_t*) txPtr、(uint8_t)(NUM_bytes);
    延迟(100);


    //添加到 SPI.cpp
    unsigned long rxtxData[3];



    int8_t DACtransfer (uint8_t* datapeinter、uint8_t numBytes){



    if (datapeinter =NULL){
    返回-1;


    for (int byteCount=0;byteCount < numBytes;byteCount++){
    rxtxData[byteCount]=数据使码[byteCount];


    digitalWrite (slaveSelectPin、low);
    for (int byteCount=0;byteCount < numBytes;byteCount++){
    spi.transfer ((uint8_t) rxtxData[byteCount]);

    digitalWrite (slaveSelectPin、HIGH);


    返回(INT8_t) 0;

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

    您好!

    您能否分享您的 SPI 帧的示波器截图? 探头信号靠近器件

    请包含 SDI、CS 和 SCLK

    此致、

    AK

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

    您好、Akhilesh、SCLK、CS 和。 分别为 SDI

    SCLKCSSDI

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

    您好、Samarth、

    我需要一个清晰显示 SCLK、CS 和 SDI 的 SPI 事务帧。 (使用 3个示波器通道)

    此致、

    AK

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

    您好、Akhilesh、

    由于 我只有两个通道可用,下面是 SDI (黄色)和 SCLK (第一个图像中为绿色)。

    第二个图像是 SDI (黄色)和 CS (绿色)

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

    我看到的是输出上的零伏:(

    J2、J3 =开路

    J9 =已关闭

    J10 = 1-2

    J11 = 1-2

    J12 = 1-2

    VCC = 5V、VSS=-5、VDD = 5V、VIO = 3.3、GND = REFGND

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

    您好!

    我可以看到 SCLK 不在示波器屏幕截图。 它一直处于低电平。 如果没有 SCLK、如何进行 SPI 通信?

    您可以先对其进行调试吗?

    此致、

    AK

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

    您好、AK、

    时钟速度和模式的配置是否正常?

    SPI 设置设置 A (2000000、MSBFIRST、SPI_MODE1);

    其中2000000是时钟速度

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

    您好、AK、

    第一张图片 SCK (黄色)和 Cs (绿色)

    第二个图像 SCK (黄色) 和 SDI (绿色)

    上面的代码显示了我在循环中写入的数据。

    但我不确定 写入的数据是否正确?

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

    您好、Samarth、

    为什么 CS 信号中存在大量振铃? 这是在 DAC 侧测量的吗?

    您可以分享您的原理图吗?

    此致、

    AK

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

    我在温度控制器侧测量、可能是因为探头为10倍、所以它具有一些电阻

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

    您好!

    即使是10倍、我也认为这种振铃在设计中是不可接受的。 我还看到 SCLK 的干净信号(两个都是使用10x 探头测量的?)

    您能否使用示波器检查输出电压?

    此致、

    AK

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

    您好、AK、

    一个探头是10倍、另一个是1倍探头。上图中、我交换了它们、现在振铃进入 SCLK 并从 SDI 消失(黄色)

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

    您好、Samarth、

    单击"已解决问题"。 是这样吗? 请更新。

    此致、

    AK