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,然后是0b100b1000b10000b10000等等(假设只有第一个位被设置)。如果给定的引脚设置为 1,则将最近附加的 0 切换为 1。这就是读取值的方式。