当前位置: 首页 > 知识库问答 >
问题:

AD7705-在Python中通过bitbanged SPI与Raspberry Pi进行设置和通信时出现问题

谭志用
2023-03-14

我是新来的,正在拼命寻找解决我问题的办法。我目前正在尝试使用Python使我的Raspberry Pi与AD7705 16位ADC通信。但不幸的是,事情并没有按预期进行。。。电路如下所示:AD7705电路

我做了大量的研究,并仔细研究了数据表,以选择满足AD7705所有要求的部件。
为了保持我的PCB尽可能简单,我不能使用硬件SPI,所以我一定要bitbanging。由于CS与GND绑定,通信减少到MOSI、MISO和CLK。我想我在实现AD7705的SPI时犯了一个错误。在使用bitbanged SPI之前,我曾使用过MPC3008,并使其正常工作,因此我认为我在AD7705的实现中存在巨大的逻辑思维错误。

此刻,我的例行公事是这样的:

send 0010 0000 -> request write access to clock register
send 0000 0100 -> configure clock register for 2.4576MHz operation
send 0001 0000 -> request write access to setup register
send 0100 0010 -> set gain = 1, buffered mode and perform self-calibration
send 0000 1000 -> request read access to communiation register
read 1 byte

这与数据表中的AD7705设置和读取流程图非常相似,写入时钟寄存器的数据差异很小(我使用的是另一个频率的谐振器)。

问题是,我只接收某种随机的、不可复制的字节。我甚至还没有尝试读取实际数据。你能发现错误吗?

我试图提供有关我的方法的所有信息,尽管我无法解释整个数据表。不过,问题不应该是硬件方面的。

def send(sendcmd):
    for i in range(8):
        GPIO.output(CLK, 0)
        time.sleep(0.0001)
        if (sendcmd & 0x80):
            GPIO.output(MOSI, 1)
        else:
            GPIO.output(MOSI, 0)
        GPIO.output(CLK, 1)
        time.sleep(0.0001)
        sendcmd <<= 1

def read():
    readbyte=0
    for i in range(8):
        GPIO.output(CLK, 0)
        time.sleep(0.0001)
        GPIO.output(CLK, 1)
        time.sleep(0.0001)
        readbit = GPIO.input(MISO)
        readbyte |= readbit
        readbyte <<= 1
    return readbyte >> 1

共有2个答案

孙星鹏
2023-03-14

“发送0000 0100-

林辰钊
2023-03-14

我借了一个数字示波器(很棒的仪器!)从一个朋友那里,我发现CLK信号切换得太快了,所以我将CLK HI/LO开关之间的等待时间增加到0.001。
后来,我发现我没有从ADC的DOUT引脚收到任何适当的信号,尽管我的字节发送正确,所以我更换了芯片。

现在一切都按预期进行了,所以我给大家的建议是:记住在BitBang SPI时要慷慨地遵守时间标准!)

 类似资料:
  • 使用java-version:1.8.0_171,我试图连接到API网关,但使用java8却得到一个SSL handshake_failure。已经运行的命令: 启用时,我得到了以下信息: 更新

  • Tomcat在我的localhost标准8080端口上运行。当tomcat调用在同一服务器中运行的服务(sop/rest)时,我想通过fiddler捕获它。 基本上,tomcat发出的任何请求都应该通过Fiddler捕获。目前,它向运行同一台机器的另一个服务发送请求,该服务反过来调用Amazon AWS,我也想捕获它。 有人能帮忙吗?请注意,这与通过代理向服务器发送的传统web请求相反。 我也愿意

  • 我在一台linux机器上用C语言编写了一个对串行端口进行读写的程序。它连接到一个运行模拟器的Windows XP机器,该模拟器正在发送我的程序数据。 有人知道为什么会这样吗?我尝试过在fd上执行读写操作时使用互斥,但这似乎没有什么不同。如果另一个线程正在从端口运行/读取,这似乎也无关紧要。欢迎任何意见或建议,谢谢

  • 我们的应用程序运行在8节点Weblogic集群中,并尝试与RMI服务器通信。由于RMI服务器中的错误,执行此操作的线程被卡住。我们正试图解决这个问题,但问题是在那之前,卡住的线程会减慢应用程序的速度,最终导致整个集群瘫痪。 我的问题是‘我们如何从客户端确保线程被释放?’ 任何帮助都非常感谢。 实现细节:-Weblogic 10.0MP2,具有8个节点的集群-Java 1.5 线程转储代码段: 应用

  • 本文向大家介绍Python通过4种方式实现进程数据通信,包括了Python通过4种方式实现进程数据通信的使用技巧和注意事项,需要的朋友参考一下 python提供了4种方式来满足进程间的数据通信 1. 使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建的进程间进行通信 2. 使用multiprocessing.Manager.Queue可以在Pool进程池创建的进

  • 问题内容: 我正在考虑AJAX应用程序必须轮询轮询更新有多大限制,而最理想的是javascript能够建立与服务器的真正双向连接。我想知道是否存在将javascript与可以建立tcp连接的浏览器插件集成的方法,以便可以将数据传入和传出浏览器插件。 问题答案: 这是具有类似方法的实现: 套接字 它使用Java Applet,并将其API桥接到JavaScript,有趣的是… 这里是另一个: 套接字