我试图用python从ADC读取一些数据,但不幸的是,它不起作用。我希望有人能给我一个提示,因为我的脚本只创建混乱数据。但我看不出有什么错误。。。在
我已经更新了下面的脚本,因为我正在阅读16位和前3位和后3位的剪辑。我需要数据的10个中间位-如果我正确理解数据表。。。在
产品介绍MCP3001:(第15页)http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
HIGH = True
LOW = False
def readAnalogData(SCLKPin, MOSIPin, MISOPin, CSPin):
GPIO.output(CSPin, HIGH)
GPIO.output(CSPin, LOW)
GPIO.output(SCLKPin, LOW)
adcvalue = 0
for i in range(16):
GPIO.output(SCLKPin, HIGH)
GPIO.output(SCLKPin, LOW)
adcvalue <<= 1
if(GPIO.input(MISOPin)):
adcvalue |= 0x01
adcvalue >>= 3
adcvalue &= 0x3ff
time.sleep(0.5)
return adcvalue
SCLK = 11 # Serial-Clock
MOSI = 10 # Master-Out-Slave-In
MISO = 9 # Master-In-Slave-Out
CS = 17 # Chip-Select
GPIO.setup(SCLK, GPIO.OUT)
GPIO.setup(MOSI, GPIO.OUT)
GPIO.setup(MISO, GPIO.IN)
GPIO.setup(CS, GPIO.OUT)
while True:
print readAnalogData(SCLK, MOSI, MISO, CS)
从数据表和代码的粗略阅读来看,您似乎试图通过转换为
str
并使用str
切片来丢弃最初3个时钟周期的数据如果是这样,这就行不通了。
adcvalue
是int
,将其转换为str
将生成十进制(以10为基数)字符串。相反,要么不在前三个周期中采样数据,要么使用位掩码从整数中剥离数据(即adcvalue &= 0x1ff
)此外,您似乎是在负时钟边缘采样数据,但这是在数据处于瞬态状态时。我想你要么需要在这里加一个延迟,要么在数据稳定后在+ve时钟边缘采样。在
编辑
在时钟边缘进行采样。数据表第16页的图6-1显示了这一点。而且它看起来像是以MSB格式输出9位,然后以LSB格式重复数据(参见图6-2),所以我认为您不希望保留10位。你可能只需要打卡总共12位,然后丢弃前3位。在
类似(未经测试):
^{pr2}$相关问题 更多 >
编程相关推荐