python mcp3202 b 连接到 raspberry pi 2 的代码
python code for mcp3202 b connected to raspberry pi 2
下面给出的是连接到 raspberry pi 的 10 位 adc (mcp3002) 的 python 代码。我应该做哪些更改才能将此代码用于 12 位 adc (mcp3202-b)?
如果有人也能向我解释这段代码,那将非常有帮助。
提前致谢。
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 1) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low
commandout = adcnum << 1;
commandout |= 0x0D # start bit + single-ended bit + MSBF bit
commandout <<= 4 # we only need to send 4 bits here
for i in range(4):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0
# read in one null bit and 10 ADC bits
for i in range(11):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout /= 2 # first bit is 'null' so drop it
return adcout
您或许可以尝试更改行:
for i in range(11):
for i in range(13):
也使用 xrange 而不是 range 会更好。
在循环中,您读取 GPIO 引脚 10 次并捕获其值。 adcout
被左移(<<=
(ilshift
) 是整数左移),用零填充下一个 (LSB) 位。所以一开始adcout
是二进制0b1
,然后是0b10
,0b100
,0b1000
,0b10000
等等(假设只有第一个位被设置)。如果给定的引脚设置为 1,则将最近附加的 0 切换为 1。这就是读取值的方式。
下面给出的是连接到 raspberry pi 的 10 位 adc (mcp3002) 的 python 代码。我应该做哪些更改才能将此代码用于 12 位 adc (mcp3202-b)?
如果有人也能向我解释这段代码,那将非常有帮助。
提前致谢。
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 1) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low
commandout = adcnum << 1;
commandout |= 0x0D # start bit + single-ended bit + MSBF bit
commandout <<= 4 # we only need to send 4 bits here
for i in range(4):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0
# read in one null bit and 10 ADC bits
for i in range(11):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout /= 2 # first bit is 'null' so drop it
return adcout
您或许可以尝试更改行:
for i in range(11):
for i in range(13):
也使用 xrange 而不是 range 会更好。
在循环中,您读取 GPIO 引脚 10 次并捕获其值。 adcout
被左移(<<=
(ilshift
) 是整数左移),用零填充下一个 (LSB) 位。所以一开始adcout
是二进制0b1
,然后是0b10
,0b100
,0b1000
,0b10000
等等(假设只有第一个位被设置)。如果给定的引脚设置为 1,则将最近附加的 0 切换为 1。这就是读取值的方式。