我正在尝试使用受RPi 3监视的CN-0179设备创建4-20mA电流发生器。 我在Python3.5中使用了基于spidev_module.c的spidev库(请参见https://github.com/doceme/py-spidev)。 这是我的代码:
import spidev
import time
from adapterModule import CurrentAdapter
def send_current(value,mode = None):
if not mode:
cmd = adapter.encode(value)
print("Mise à {}mA, mode normal".format(value))
else:
cmd = adapter.encode(value,mode)
if mode == 1:
print("Mise à {}mA, shut-down mode: 1kOhm to GND".format(value))
elif mode == 100:
print("Mise à {}mA, shut-down mode: 100kOhm to GND".format(value))
elif mode == 11:
print("Mise à {}mA, shut-down mode: three-state".format(value))
resp = spi.xfer3(cmd)
print("cmd = {}".format(cmd))
bus = 0 #on utilise les pin SPI 0
device = 0 # on place l'injecteur sur le CS0 (CE0)
spi = spidev.SpiDev()
spi.open(bus, device)
#spi.threewire = True
spi.max_speed_hz = 1000000 #10MHz (max 30MHz)
spi.mode = 0
adapter = CurrentAdapter()
send_current(4)
print("Vitesse: {}".format(spi.max_speed_hz))
#print("Attente 5s")
#time.sleep(5)
#
#send_current(20)
当我取消注释行
spi.threewire = True
它向我返回此错误:
resp = spi.xfer3(cmd)
OSError:[Errno 22]无效参数
我尝试了其他功能(xfer,xfer2),这些似乎都不起作用。我总是得到同样的错误。我使用的CN-0179设备仍然以3线方式连接(RBPi的MOSI和MISO在从设备的SDIN(SerialDataIn)线上具有相同的电位)。 当我尝试通过添加
来更改消息的字节序时,出现相同的错误spi.lsbfirst = True
似乎库spidev遇到了一些问题,但是如何解决呢?
我还注意到,当我重新启动脚本并通过这种方式创建新对象'spi'时,它将保留threewire属性的最后一个值。
有什么想法吗?