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.

[参考译文] DAC8.0004万:DAC8.0004万

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/648894/dac80004-dac80004

部件号:DAC8.0004万

您好,

我正在尝试评估DAC8.0004万EVM并将其连接到SPI0的RPI3模块。

我使用python来控制DAC8.0004万,但没有成功。

我没有使用信号CLR~或LDAC~

我的代码如下:

导入spidev
导入时间
导入OS,sys

SPI = spidev.spiDev()
SPI.open(0,0)      # open bus 0,ce0。
SPI.max_speed_Hz = 97.6万

# CLR~ =1 => JP7=打开
# LDAC~=0 => JP6=短

RESP = SPI.xfer ([0x08,0x00,0x00,0x0f])#启用SDO
RESP = SPI.xfer ([0x04,0xf0,0x00,0x0f])#开机
RESP = SPI.xfer ([0x06,0xf0,0x00,0x0f])#通过SCK的32下降沿更新控制
RESP = SPI.xfer ([0x05,0x00,0x00,0x00])# Cler模式注册零刻度
RESP = SPI.xfer ([0x1d,0x00,0x00,0x00])#读取状态注册
RESP = SPI.xfer ([0x0E,0x00,0x00,0x00])# print ('NOP命令')
打印('状态={:02x}{:02x}{:02x}{:02x}'。格式(resp[0],resp[1],res[2],resp[3])
RESP = SPI.xfer ([0x14,0x00,0x00,0x00])#读取电源稳压器
RESP = SPI.xfer ([0x0E,0x00,0x00,0x00])# print ('NOP命令')
打印('功率={:02x}{:02x}{:02x}{:02x}'。格式(resp.[0],res[1],resp.2],resp.3])
RESP = SPI.xfer(0x03,0x0f,0xff,0x00)#写入通道A的值0xFFF0

设备的输出卡在零。

请帮助。

此致,

Asher

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

    您的!CLR和!LDAC插针的配置听起来是正确的。 您能否还描述为EVM供电的硬件连接以及JP1和JP2的配置? 也许一个简单的测试还可以在由JP3控制的POR引脚上快速切换电源和另一种状态。 在2-3位置时,POR值应为中等刻度代码。 这样,我们至少可以测试模拟信号链是否处于正常状态,然后继续调试通信。

    我看不到此代码片段中SPI总线是如何配置的。 也许“开放总线0和,ce0”意味着时钟极性为0,第一个边缘作为关键边缘(上升边缘)? 看起来像976 kHz SCLK。 速度应该不是问题,实际上很慢,所以我不觉得有时间细微的差别会影响通信,但是,如果我对时钟极性和相位的配置的猜测是正确的,可能是问题所在。 根据数据表中的计时图,设置和保持时间是根据下降的SCLK边缘测量的,因此极性0时钟的设置应为CPOL = 0,CPHA = 1。

    另一种调试方法是提供SPI事务的示波器捕获,包括!SYNC,SCLK和SDIN行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Kevin,

    我将检查您的所有建议并更新。

    1.关于断电模式寄存器:
    XXX W/R | 0 1 0 | xxxx | xxxx | xxxx | xx PD1 PD0 | xxxx | Ch-D Ch-C Ch-B Ch-A -- Power Up/Down DAC n (XXX W/R | 0 1 0 | xxxx | xxxx | xxxx | xx PD1 PD0 | xxxx | xxxx | Ch-D Ch-C Ch-B Ch

    我是否必须向此寄存器写入4次? 每个信道一次? 为其通电
    例如
    答 0x04,0x00,0x00,0x01
    B. 0x04,0x00,0x00,0x02
    C. 0x04,0x00,0x00,0x04
    D. 0x04,0x00,0x00,0x08

    或仅一次
    答 0x04,0x00,0x00,0x0F


    2.关于第4个寄存器:写入缓冲器并更新DACn
    假设针脚:!LDAC=0和!CLR=1
    写入第四个寄存器(0x03.)时是否立即更改DAC输出?
    LDAC寄存器对其有何影响?

    3.在软件模式下操作设备所需的最低写入操作是什么?写入什么寄存器?
    (假设针脚:!LDAC=0和!CLR=1)?

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

    您好Asher:

    [报价用户="Asher Shtekel"]1. 关于断电模式寄存器:
    XXX W/R | 0 1 0 | xxxx | xxxx | xxxx | xx PD1 PD0 | xxxx | Ch-D Ch-C Ch-B Ch-A -- Power Up/Down DAC n (XXX W/R | 0 1 0 | xxxx | xxxx | xxxx | xx PD1 PD0 | xxxx | xxxx | Ch-D Ch-C Ch-B Ch

    我是否必须向此寄存器写入4次? 每个信道一次? 为其通电
    例如
    答 0x04,0x00,0x00,0x01
    B. 0x04,0x00,0x00,0x02
    C. 0x04,0x00,0x00,0x04
    D. 0x04,0x00,0x00,0x08

    或仅一次
    答 0x04,0x00,0x00,0x0F[/报价]

    只需向LSB中的寄存器wtih 0x0F写入一次(将逻辑高写入所有4通道X位)就足够了。

    [报价用户="Asher Shtekel"]2. 关于第4寄存器:写入缓冲器并更新DACn
    假设针脚:!LDAC=0和!CLR=1
    写入第四个寄存器(0x03.)时是否立即更改DAC输出?
    LDAC寄存器对其有何影响?[/QUOT]

    LDAC机制有多种操作模式,可将数据从缓冲寄存器传输到DAC数据寄存器。 默认情况下,LDAC寄存器配置为所有0,这意味着所有通道都通过HW !LDAC信号控制其更新机制。 在这种情况下,如果!LDAC与GND绑定,则设备将在所谓的“同步模式”下运行,这意味着所有DAC数据寄存器写入都将同步更新到第32 SCLK下降沿。

    [报价用户="Asher Shtekel"]3. 在软件模式下操作设备所需的最低写入操作是什么?写入什么寄存器?
    (假设针脚:!LDAC=0和!CLR=1)?[/QUOT]

    为了发出明确命令,您只需用"不在乎"数据写入"软件清除"寄存器。

    对于LDAC功能,有几个选项将!LDAC引脚连接高。 在这种情况下,您可以使用“写入缓冲区n并更新所有DAC (软件!LDAC”命令,“写入缓冲区并更新DAC n”命令,也可以在写入缓冲区后使用“update dac n”命令单独写入。 您还可以在“LDAC寄存器”中的相应通道寄存器中写入1,以便在内部将LDAC降低,从而使这些通道以同步方式运行。

    基本上,对于纯软件定义的与设备的交互,!LDAC和!CLR引脚将被绑定到较高的位置,您可以使用命令机制来提供此信息。

    如果您还有其他问题,请告诉我,以及我上一篇帖子中测试的结果。

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

    1.发现SCLK极性问题-已解决。
    2. EVM原理图误导信道1预期连接到A0+,但实际上原理图中有叉号,A0+连接到VOUTB。
    3.下面有一个工作代码,但问题是只有第一个写入加载了DAC所需的值(SPI.xfer2([0x03,0x1f,0xff,0x00]),而不是第二次加载,直到重新运行代码。 有什么想法吗?
    如果我更改了DAC的值并重新运行,它工作正常,但再次只能写入1次。

    导入spidev
    导入时间
    导入OS,sys

    SPI = spidev.spiDev()
    #SPI.open(0,0)将打开总线0,ce0。
    #SPI.open(0,1)将打开总线0,CE1。
    #SPDIV模式= 2
    SPI.open(0,0)
    SPI.max_speed_hz = 390万
    #*`mode`- SPI模式,作为时钟极性和相位的两位模式[CPOL|CPHA],最小值:0b00 = 0,最大值:0b11 = 3
    SPI.mode = 0b01

    # CLR~=上拉
    # LDAC = 0

    打印('启用SDO')
    RESP = SPI.xfer2 ([0x08,0x00,0x00,0x02])# Enable SDO (启用SDO)
    打印('ResponseRead ={:02x}{:02x}{:02x}{:02x}'.format (resP[0],resP[1],res[2],resP[3]))
    print()函数
    RESP = SPI.xfer2 ([0x14,0x00,0x00,0x00])#读取电源稳压器
    RESP = SPI.xfer2 ([0x0E,0x00,0x00,0x00])# print ('NOP命令')
    打印('功率={:02x}{:02x}{:02x}{:02x}'.format (resp [0],resp [1],resp [2],resp [3]))

    RESP = SPI.xfer2([0x1d,0x00,0x00,0x00])#读取状态注册
    RESP = SPI.xfer2 ([0x0E,0x00,0x00,0x00])# print ('NOP命令')
    打印('状态={:02x}{:02x}{:02x}{:02x}'.format (resp[0],resp[1],res[2],resp[3]))
    高=0x10
    为True时:
    RESP = SPI.xfer2([0x03,0x1f,0xff,0x00])#将0xFFFFFFF0写入通道1
    时间睡眠(2)
    RESP = SPI.xfer2([0x03,0x10,0x00,0x00])#将0x0000写入通道1
    时间睡眠(2)


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

    只需查看代码/解密您发送的单词,这些单词似乎与您的注释中的预期命令是准确的。

    您能否为连续两次写入DAC数据寄存器的总线事务提供示波器捕获?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Asher,

    此线程是否有任何更新?