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.

[参考译文] DAC8574:问题:从 DAC8574读回值

Guru**** 2393725 points
Other Parts Discussed in Thread: DAC8574

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1459775/dac8574-problem-reading-back-a-value-from-dac8574

器件型号:DAC8574

工具与软件:

尊敬的先生/女士

问题:从 DAC8574读回值

我们在 PCB 上使用多个 DAC8574
我们在总线上使用了多个 DAC8574、如数据表中所述:"支持多达十六个 DAC8574s 地址"
我们在芯片 A3、A2、A1和 A0上使用地址线
              AA- AA
              10 32.
U10:地址1001100-01
U12:地址1001101-01
U16:地址1001110-01
U18:adres 1001111-01
U11:adres 1001100-10.
U13:adres 1001101-10
U15:地址1001110-10
U17:adres 1001111-10.

我正在使用其中一个芯片进行测试以读回某个值?
当我向芯片写入一个值时(在本例中为0x11)、我读回0。

我知道它肯定在读取某些内容、因为 uPWD 字节显示的是0x3F

数字是十六进制的

"测试计划"给了我


写入 DAC8574 Oke
地址:98 50 Data 0 11
读取 DAC8574 Oke
地址:98 51数据[3F] 0 0

写入序列

ACK ACK
从主器件

I2C_Start 程序
写入地址0x98 SACK 10011000
写入控制0x50 SACK 01010000
写入 MSB 0x00 SACK 00000000
写入 LSB 0x11 SACK 00010001
I2C_Stop


读取序列

ACK ACK
从主器件

I2C_Start 程序
写入地址0x98 SACK 10011000
写入控制0x51 SACK PD0=1 01010001

重新启动
写入 Address+1 0x99 sack
读取 uPWD Mack 00111111
读取 MSB Mack 00000000
读取 LSB mNACK 00000000
I2C_Stop


SACK =从器件 ACK
MACK -主器件 ACK
mNACk =主器件无确认

fprintf (MASTER_DEBUG_STREAM、"Write DAC8574 Oke\r\n");
fprintf(master_debug_stream、"Address:%X %X Data %X %X \r\n"、ADDRReg、CTRLReg、MSB、LSB );

fprintf (MASTER_DEBUG_STREAM、"Read DAC8574 Oke\r\n");
fprintf (MASTER_DEBUG_STREAM、"地址:%X %X 数据[%X]%X %X\r\n"、ADDRReg、CTRLReg、uPWD、MSB、 LSB );

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

    尊敬的 Marcel:  

    您是否能够通过设置 DAC 输出值并测量输出来确认写入正常工作?

    您能否测量 SCOP 上的 SDA 和 SCL 并共享尝试读取序列的屏幕截图?

    此致!

    Katlynne Jones

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

    你好 Katlynne

    我们以前在几个产品上都用过这个芯片。

    在我们的电路板上、我们根据它来设置16个芯片上的多个通道 A 到 D 并运行。 我们将获得 DAC 输出。

    这是我第一次尝试从芯片读回一个值。

    现在我感觉不到从芯片返回的数据是有效的。

    一定是我做错了什么?

    是否可以写入 所选通道 A 的临时寄存器并回读该值?

    您能否向我介绍一下我必须为1个芯片和1个通道写入然后读回值的序列示例。

    此致

    Marcel Loos

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

    尊敬的 Marcel:  

    您能否请在示波器上测量 SDA 和 SCL 并共享尝试读取序列的屏幕截图、以便我验证您实际在做什么并检查是否正确?  

    该过程在数据表中以可视化形式表示和示例序列。  

    起始位、R/W 为低电平的 I2C 地址、控制字节地址、重复启动、R/W 为高电平的 I2C 地址、时钟2或3个字节的数据直至 DAC NAK、停止位。

    此致!

    Katlynne Jones

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

    您好、Ketlynne

    我制作了一个简单的程序来写入和读出1个芯片

    硬件地址行 A3=0、A2=1、A1=0、A0=0

    写入序列为  

    启动0x98、0x41、0x80、0x00停止

    读取序列  

    启动0x98、0x41、重新启动0x99、读取、读取、 读取

    返回的数据为0x3F 0x00 0x00

    此致

    Marcel Loos

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

    尊敬的 Marcel:  

    这看起来是正确的、如果您已将00写入 PD1和 PD2位、则回读是正确的。 也许写的不需要。 您能否在硬件上验证输出实际上已设置为100k 至 GND 而不是高阻抗?

    您能否尝试写入0x40、 0x55、0x55并重复读取序列、以查看我们是否至少得到正确的数据?  

    此致!

    Katlynne Jones

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

    你好 Katlynne。

    如果我将0x80写入器件中的 Power Down 寄存器、 那么我应该读回0xBF 而不是0x3F。

    此致

    Marcel

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

    你好 Katlynne

    上传图像似乎不起作用。

    我停止了尝试

    此致

    Marcel

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

    尊敬的 Marcel:  

    是的。 这就是为什么我想知道对断电寄存器的写入实际上是否有效的原因。  

    我预计回读值为0xBF 而不是0x3F
     

    尝试通过验证 DAC 输出实际上处于 100k 至 GND 而非高阻抗来确认写入有效。  

    您还可以尝试向数据寄存器写入一些内容、并查看读取操作是否生成了正确的数据。 我建议写入0x40、 0x55、0x55并重复您的读取序列。

    您应该能够将过去的图像直接复制到文本框中、将图像直接拖动到文本框中、或使用文本框底部下拉框选项中的插入>图像/视频/文件。  

    此致!

    Katlynne Jones

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

    你好 Katlynne

    芯片的基准电压为3V3

    目前、我已将1芯片通道 A 设置为大约1伏。 我已经使用万用表测量输出来确认这一点。 我还在通道 A 上测量了其他几个芯片、它们的电压全部为0伏。

    写入序列

    读取序列

    输出相连

    写入 DAC8574 Oke
    地址:98 50 Data 4D 94
    读取 DAC8574 Oke
    地址:98 51数据[3F] 0 0

    逻辑分析仪中的地址为7位、因此4C +读/写位为0x98或0x99

    写入的 DAC 值为 19860 * 3.3 / 65535可以为我提供大约1V 的电压

    此致

    Marcel

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

    你好 Katlynne  

    你的同事保罗·弗罗斯特一段时间前回答:

    尊敬的 Marcel:

    这实际上是预期行为。  由于该器件具有相同的前两个地址位(A1、A0)、因此器件无法知道命令字节(A3、A2)中的两位是否有效、因此必须仅确认第一个字节。  如果 A3+A2位与命令匹配、那么该器件实际上不会更新寄存器或 DAC、因此我们将支持16个器件。

    为了检测缺少的器件、我建议向其中一个 DAC 寄存器发出广播写入命令、然后为每个器件发出回读命令。   

    谢谢!

    Paul

    如何在上一个示例中执行此操作?

    此致

    Marcel  

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

    尊敬的 Marcel:

    Paul 的回应是回答一个与写入相关的问题、在这个问题中、写操作的第一个字节是 ACKed、但下面不是由错误的地址位引起的。 您通过测量 DAC 输出验证了数据寄存器写入成功。  

    使用广播模式时、将 LOA 位设置为0b11、以便器件忽略本地地址(A3/A2):

    在该序列中、您会看到 DAC 输出变为1V 吗? 使用命令0x50时、您将加载临时寄存器中的数据、因此您不应看到此命令的 DAC 更新。  

    在读取序列中、您使用命令0x51读取数据寄存器。 此时、您不会将任何内容加载到数据寄存器中、因此0x3F、0x0000的回读是正确的。  

    此致!

    Katlynne Jones

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

    你好 Katlynne  

    关于我发送的0x50、我得到的值是我预期的1V。

    因为我再次理解清楚

    位  

    76543210

    AALLXSSP

    3210X100

    01010000 bin 提供0x50十六进制

    AXx = 01取决于硬件中的 ADRES 线路 A3和 A2  

    Lxx = 01 ->  

    使用 I2C 数据更新选定的 DAC。 最常用的模式。 MS 字节和的内容
    LS 字节(或断电信息)存储在的临时寄存器和 DAC 寄存器中
    所选通道。 该模式使用新数据更改所选通道的 DAC 输出

    x 表示不用考虑

    Sxx = 00 ->通道选择位:已选择通道 A

    P = PD0 = 0 -> 断电标志、0 = 正常运行

    那么、我认为 DAC 通道 A 使用来自 MSB 和 LSB 的数据进行更新。

    那么、现在输出为1V

    我可以读回此值吗? 它对我还不起作用。

    什么是临时寄存器? 它是只写寄存器吗? 是否在每次完成写入或读取时复位?

    关于图像

    我添加了一些逻辑分析仪的图片、但当我将它们复制并粘贴到其中时、它们大幅缩小。  

    照片变得不清楚,我认为?

    当我尝试插入图像/视频/文件以包括在表单上的图片时,每次我收到一条消息:"文件或 URL 不允许插入"是因为文件不是螺旋桨大小? 320 x 240像素?

    此致、

    Marcel

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

    尊敬的 Marcel:  

    我可以很好地看到您昨天发布的逻辑分析仪图像。 如果您单击这些图像、它们会展开。  

    我的错误、没错、命令0x50应该会立即更新、0x51应该会读回断电数据和 DAC 代码。  

    临时寄存器将写入0x40。 临时寄存器会更新、但 DAC 输出寄存器不会更新、因此输出不会更新。  

    我来订购一个 EVM、让 I2C 读取在我的终端开始工作、然后我将与您分享该序列。 您似乎按照数据表执行了正确的序列、因此我将仔细检查 EVM。  

    此致!

    Katlynne Jones  

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

    将 DAC8574 Oke 写入 DAC8574、不会出错
    地址:98 80数据0 E 数据的写入 u11存储 I2C
    将 DAC8574 Oke 写入 DAC8574、不会出错
    地址:98 40数据0 7写入数据 U10存储 I2C
    阅读 DAC8574 Oke Read OK
    地址:98 41数据[3F] 0 9读取数据 U10存储 I2C、逻辑分析仪上首次输出的数据是0x00
    A-DAC:9错误:测试 A 结束

    写入 DAC8574 Oke
    地址:98 90数据0 B 数据写入 U11更新通道 A
    写入 DAC8574 Oke
    地址:98 50数据0 D 数据写入 U10更新通道 A
    读取 DAC8574 Oke
    地址:98 51数据[3F] 0 9读取数据 U10、更新通道 A
    B-DAC:9错误:测试 b 结束

    写入 DAC8574 Oke
    地址:98 80数据0 E 数据的写入 u11存储 I2C
    写入 DAC8574 Oke
    地址:98 40数据0 7写入数据 U10存储 I2C
    读取 DAC8574 Oke
    地址:98 41数据[3F] 0 9读取数据 U10存储 I2C
    C-DAC:9错误:0测试结束 c

    使用与 U10或 U11相同的"地址字节"向芯片写入 DAC8574 Oke
    地址:98 0数据0 E 所有数据都已确认?
    写入 DAC8574 Oke
    地址:98 0 Data 0 7 All data is acked?
    读取 DAC8574 Oke
    地址:98 1数据[3F] 0 9所有数据都已升级?
    D-DAC:9错误:0测试结束 d

    环路回到测试 A

    返回0的第一次测试、所以温度寄存器是只写寄存器?
    测试 A:E & 7 = 6 nOK

    测试 b:B & D = 9正常

    测试 c:E & 7 = 6 nOK

    测试 d:E & 7 = 6 nOK


    结果是、我认为临时寄存器是只写寄存器
    如果"地址字节"正确、则芯片回读所有其他数据。
    如果芯片在总线上并行、则所有数据都是"与"逻辑的

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

    写入 DAC8574 Oke
    地址:98 80 Data 0 E
    写入 DAC8574 Oke
    地址:98 40 Data 0 7
    读取 DAC8574 Oke
    地址:98 41数据[3F] 0 9.
    A-DAC:9错误:0

    写入 DAC8574 Oke
    地址:98 90 Data 0 B
    写入 DAC8574 Oke
    地址:98 50 Data 0 D
    读取 DAC8574 Oke
    地址:98 51 Data [3F] 0 9.
    B-DAC:9错误:0

    写入 DAC8574 Oke
    地址:98 80 Data 0 E
    写入 DAC8574 Oke
    地址:98 40 Data 0 7
    读取 DAC8574 Oke
    地址:98 41数据[3F] 0 9.
    C-DAC:9误差:0

    写入 DAC8574 Oke
    地址:98 0 Data 0 E
    写入 DAC8574 Oke
    地址:98 0 Data 0 7
    读取 DAC8574 Oke
    地址:98 1数据[3F] 0 9
    D-DAC:9误差:0

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

    尊敬的 Marcel:  

    我将尝试在 EVM 上确认此行为。

    此致!

    Katlynne Jones

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

    你有没有发现?

    在我看来、如果在接收到正确的"地址字节"后、DAC8574会接收到所有其他数据。

    此外、如果电路板上有多个具有相同基本 "地址字节"的 DAC8574、它们都将确认更多数据。

    文件夹

    我们在芯片 A3、A2、A1和 A0上使用地址线
                  AA- AA
                  10 32.
    U10:地址1001100-01
    U12:地址1001101-01
    U16:地址1001110-01
    U18:adres 1001111-01
    U11:adres 1001100-10.
    U13:adres 1001101-10
    U15:地址1001110-10
    U17:adres 1001111-10.

    例如  

    在同一个 基础上 、"Address Byte"是

    U10和 U11、

    U12和 U13

    U16和 U15

    U18和 U17

    此致

    Marcel Loos

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

    尊敬的 Marcel:  

    我在实验中使用了两个 EVM、并尝试将它们整合在一起、以便我可以测试两个具有相同地址字节(A0和 A1)且具有不同 A3和 A2的器件。 应在一周结束前确认这一点。  

    此致!

    Katlynne Jones

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

    尊敬的 Marcel:  

    到目前为止、我看到了共享 A0和 A1且 A2和 A3不同的两个 EVM 的结果相似。 我将并排重复测试、并将仅使用一个 EVM 时的行为与两个 EVM 使用相同 A0和 A1时的结果进行比较。  

    此致!

    Katlynne Jones

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

    尊敬的 Marcel:  

    需要注意两点。

    即使总线上只有一个设备、无论加载位如何、读取命令都始终读回数据寄存器(DRX)中的数据。 临时寄存器(TRx)为只写寄存器。  

    如果数据总线上有多个器件具有相同的 A2和 A3、则该器件为只写状态。 PD = 0时的读取返回值始终为0x0000、PD = 1时的读取返回值始终为0x3F00。 在本例中、当我查看示波器时、总线上的数据可能来自两个控制器。 因此上拉电阻和数据的组合可能允许一些数据 位通过。 我已经确认使用单个器件时、DAC 将使用 A2和 A3的其他组合来响应读取。  

    此致!

    Katlynne Jones

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

    你好 Katlynne

    在器件 1上将0xFF 写入通道 A、在器件2上将0x42写入通道 A 时、当读取器件1通道 A 时、会得到什么结果?

    此致、

    Marcel Loos

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

    尊敬的 Marcel:  

    我明天会回到实验室、再试一次。  

    此致!

    Katlynne Jones

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

    尊敬的 Marcel:  

    返回值为0x42。  器件1在输出0xFF 时未下拉总线、因此我们可以看到 器件2中的实际数据。  

    此致!

    Katlynne Jones