Я пытаюсь создать генератор тока 4-20 мА, используя устройство CN-0179, контролируемое RPi 3.
Я использую библиотеку spidev в Python3.5, которая основана на spidev_module.c (см. 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, которое я использую, тем не менее подключено трехпроводным способом (MOSI и MISO RBPi имеют одинаковый потенциал на линии SDIN (SerialDataIn) подчиненного устройства).
Я получаю ту же ошибку, когда пытаюсь изменить порядок своих сообщений, добавив
spi.lsbfirst = True
Похоже, у библиотеки spidev есть некоторые проблемы, но как их исправить?
Я также заметил, что когда я перезапускаю свой скрипт и таким образом создаю новый объект 'spi', он сохраняет последнее значение атрибута трехпроводного.
Есть идеи?