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.

[参考译文] BOOST-DAC8568:使用带有 Raspberry Pi 的 SPIDEV python 接口向意外的 Vout 发送电压

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/608756/boost-dac8568-sending-voltage-to-unexpected-vout-using-spidev-python-interface-with-raspberry-pi

器件型号:BOOST-DAC8568
主题中讨论的其他器件:DAC8568

您好!

我在使用升压 DAC8568以及连接 Raspberry Pi 方面遇到了一些困难。  简而言之、我能够照亮升压封装上的 LED、但不能按照8568数据表中的要求照亮这些 LED。  

我将封装通过3.3V 电源、5V 电源(LED 所需)和接地线连接到 Raspberry Pi。 DAC 的 SCLK 连接到 Pi SCLK、DAC /SYNC (实际上是芯片选择)连接到 Pi CE1、DAC /LDAC 连接到 Pi GND、DAC MOSI 连接到 Pi MOSI。 我不连接 DAC/CLR、但如果需要、我可以将其物理连接到接地以复位芯片。

我认为我的接线是好的、因为我可以使用 python 脚本或使用 sudo echo -ne "\xxx\xxx\xxx">/dev/spidev0.1从终端点亮 LED

我通过以下视频了解了终端技巧: https://www.youtube.com/watch?v=iwzXh2V1SP4

不过、我的问题是 LED 没有按照数据表中的预期点亮。 我应该是照明 A、而是照明 B。我应该点亮 B、而应该点亮 D 等 我已经尝试充分利用所有这些功能、可以调暗 LED 并打开新 LED、但绝不会按照数据表的方式真正期望 LED 正常工作。

例如、在第35页的表11中、我认为为 DAC_A 提供完整输出应该能够通过:0000 0000 1111 1111 1111 1111 1111、这是十六进制的0x00、0x0F、0xFF、0xFF。  但是、当我这么做时、LED B 亮起。  我能够通过写入0x00 0x02 0xFF、0xFF 使 LED A 打开(对于第二个字节0x02、我可以通过写入0x02-9来调节 LED 亮度、但在0x0A 时、LED B 打开)。

下面是我的 python 脚本--很抱歉我没有任何示波器读数。 在我提到的注释中、我在数据表中的哪个位置查找要发送的位。 我很不熟悉使用模拟组件、也不是 EE、因此可能我没有正确执行时序、或者产生一些其他愚蠢的错误。 感谢您的帮助!

# -*- coding: utf-8 -*-
"""
Created on Sat Jul  8 16:33:05 2017

@author: pi

for texas instruments BOOST DAC8568
for BOOST schematic showing LEDs www.ti.com/.../boost-dac8568
for DAC8568 datasheet:  www.ti.com/.../dac8568
"""


import spidev
import time

spi = spidev.SpiDev()  #create spi object
spi.open(0,1)  #open spi port 0, device (CS) 1
#spi.bits_per_word = 8  does not seem to matter
#spi.max_speed_hz = 50000000  #does not seem to matter

#you have to power the DAC, you can write to the buffer and later power on if you like
power_up = spi.xfer2([0x04, 0x00, 0x00, 0xFF]) #p.37 Table11 in datasheet: powers all DACS

voltage_write = spi.xfer2([0x00, 0x0F, 0xFF, 0xFF ]) #p.35 Table11 in datasheet supposed write A--but lights B
voltage_write = spi.xfer2([0x00, 0x1F, 0xFF, 0xFF ]) #supposed write B--but lights D
voltage_write = spi.xfer2([0x00, 0x2F, 0xFF, 0xFF ]) #supposed write C--but lights F
voltage_write = spi.xfer2([0x00, 0x3F, 0xFF, 0xFF ]) #supposed write D--but lights H
voltage_write = spi.xfer2([0x00, 0x4F, 0xFF, 0xFF ]) #supposed write E--but does nothing

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

    欢迎使用 E2E、感谢您的提问。

    在写入过程中、似乎会发生左移。

    当您写入0b 0000 1111时、它变为0b 0001 1111
    当您写入0b 0001 1111时、它变为0b 0011 1111
    当您写入0b 0010 1111时、它变为0b 0101 1111

    等等...

    您能否检查时钟相位和时钟极性设置? 捕获波形是一个好主意-它将使调试速度更快。

    此致、
    Uttam Sahu
    精密 DAC 应用工程师
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Uttam、

    感谢您的回答。  我还注意到、该位似乎有一个移位。  在进行更多的测试后、我非常确定极性是正确的、因为我已经将我的特性位设置为"1"。  如果极性被切换并首先读取、那么第一个位为"1"将是 DAC 的保留位、并导致其根据数据表无法正常工作。  

    我还对我的原始陈述进行了一些编辑。  我可以使'A' LED 以0x00、0x02、0xFF、0xFF 点亮。  第二个字节实际上可以是0x02到0x07、以点亮"A" LED。  在0x08时、我认为 B LED 亮起、但非常微弱、在0x09时 B LED 肯定亮起但非常暗、在0x0A 时、B LED 相当亮。  也许这些信息可以提供有关正在发生什么情况的线索?  但是、当我观察到这一点时、我没有看到极性相反的方法、并得到这种行为。  唯一有意义的是位是否移位。  

    您知道我如何补偿移位或消除移位吗?  这是否与 Raspberry PI SPI 接口的速度有关?

    正如您说过的、使用示波器可能会有所帮助、我将尝试获取一个示波器。  谢谢、

    Collin

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

    正如您提到的、示波器捕获以及在可能的情况下、原理图将让我了解实际问题。

    此致、
    Uttam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Uttam、
    如果有助于将来的读者、我的问题通过使用 spidev 模块中的 spi.mode = 2来校正时钟相位来解决。 可以阅读有关 stackoverflow 的完整讨论: stackoverflow.com/.../spidev-on-raspberry-pi-for-ti-dac8568-not-behaving-as-expected

    感谢您的帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供相关信息。 很高兴知道它已经解决。

    此致、
    Uttam
x 出现错误。请重试或与管理员联系。