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

Raspberry pi adc:MPC3001使用python和spidev

欧阳嘉年
2023-03-14

我试图使用一个MPC3001 ADC与树莓派在SPI使用Python。在这样做的时候,我得到了一些奇怪的结果:

我正在使用的代码:

import sys
import spidev

spi = spidev.SpiDev()
spi.open(0,0)

def readAdc(channel):
    r = spi.xfer2([1, 8 + channel << 4, 0])
    return ((r[1]&3) << 8) + r[2]

while True:
    print readAdc(0)
    time.sleep(0.5)

运行上面的脚本,同时测量分压器的中心点,产生2个值之间的随机切换:504和1016。

因为504是我期望正确的值,结合两个结果的二进制表示;

504 --

1016 --

我假设我不小心在某个地方“创造”了一个1。

有人能给我指一下正确的方向吗。提前谢谢

顺便说一句:是我,还是spidev lib没有像样的留档?

共有1个答案

滕令雪
2023-03-14

数据表图5-2显示了问题所在。从设备逐位返回的数据如下所示(其中X=不在乎,Bx是数据的位号X;B0是LSB,B9是MSB):

BYTE0:  X  X  0 B9 B8 B7 B6 B5 
BYTE1: B4 B3 B2 B1 B0 B1 B2 B3
BYTE2: B4 B5 B6 B7 B8 B9  X  X

如果将返回语句更改为:

return ((r[0] & 0x1F) << 5) | ((r[1] >> 3) & 0x1F)

它可能会工作。

但如果我是你,我就不会相信我(我不再有可以测试任何东西的硬件设置)。我认为最好打印r中字节的单个值,并仔细考虑结果,直到它开始有意义为止。请注意,某些SPI实现允许您在上升沿或下降沿读取数据。如果你弄错了,你的数据就永远不会有意义。

这里的另一个线索是,对于一次又一次的读取,A/D转换器读取的三个LSB不应始终为000。几乎总是在最低有效位存在噪声,至少,如果不是两个或三个位的话。

顺便说一句,我同意你关于spidev的看法。我切换到quick2wire,然后事情就顺利多了。它写得更好,记录得也更好。

 类似资料:
  • 问题内容: Node.js非常适合我们的Web项目,但是很少有需要Python的计算任务。我们已经为他们准备了Python代码。我们非常关心速度,如何以异步非阻塞方式从node.js调用Python“工人”的最优雅方法是什么? 问题答案: 对于node.js和Python服务器之间的通信,如果两个进程都在同一服务器上运行,则我将使用Unix套接字,否则将使用TCP / IP套接字。对于封送处理协议

  • 问题内容: websockets有趣的部分是从服务器向浏览器发送本质上未经请求的内容,对吗? 好吧,我正在使用GregorMüllegger的django-websocket。使Websockets在Django中工作确实是一个很棒的早期尝试。 我完成了“ hello world”。它的工作方式是:当请求是websocket时,会将对象websocket附加到请求对象。因此,在解释websocke

  • 1.1.1 Python环境搭建 Python可应用于多平台包括Windows、 Linux/Unix 和 Mac OS。 Python下载 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:http://www.python.org/ 你可以在以下链接中下载 Python 的文档,你可以下载 HTML、PDF 和 PostScript 等格式的文档。

  • 问题内容: 我正在尝试将服务器端Ajax响应脚本转换为,但显然无法正常工作。 这是服务器端脚本: 这是转换后的代码 我正在使用simplejson对Python列表进行编码(因此它将返回JSON数组)。我还不能弄清楚问题所在。但是我认为我对“回声”做错了。 问题答案: 我通常使用字典,而不是列表来返回JSON内容。 在Django 1.7之前的版本中,你将像这样返回它: 对于Django 1.7+

  • 问题内容: Python-使用args和*kwargs[副本] 问题答案: 1650 语法为和。名称和仅是约定,但没有使用它们的硬性要求。 你会使用,当你确定不是多少个参数可能会被传递给你的函数,也就是说,它允许你传递的参数任意数量给你的函数。例如: 同样,允许你处理尚未预先定义的命名参数: 你也可以将它们与命名参数一起使用。显式参数首先获取值,然后将其他所有值传递给argsand *kwargs

  • 问题内容: 这是一个纯Python特定的设计问题: 和 Python让我们可以用任何一种方式来做。如果要设计Python程序,将使用哪种方法,为什么? 问题答案: 首选属性。这就是他们在那里的目的。 原因是所有属性在Python中都是公共的。以一两个下划线开头的名称只是警告,给定属性是实现细节,在将来的代码版本中可能会保持不变。它不会阻止您实际获取或设置该属性。因此,标准属性访问是访问属性的常规P