จะใช้ชิป FDTI ในโหมด VCP ได้อย่างไร

ฉันกำลังพยายามรับบอร์ดรีเลย์ SainSmart USB ที่ใช้ชิป FT245RL ทำงานและมีช่วงเวลาที่แย่มาก ฉันรู้สึกว่าสามารถควบคุมรีเลย์จากบรรทัดคำสั่งได้ดังนี้:

echo -e -n "\xFF\x1\x1" > /dev/ttyUSB1

ในขณะที่อุปกรณ์ติดตั้งโดยอัตโนมัติและฉันคิดว่าฉันได้ตั้งค่าอัตรารับส่งข้อมูลและการอนุญาตแล้ว แต่ไม่มีอะไรเกิดขึ้นกับเครื่อง Debian squeeze หรือ CentOS 5 ของฉัน การสนับสนุนของ SainSmart นั้นไร้ค่า

ฉันตัดสินใจลองใช้ Windows ดังนั้นฉันจึงติดตั้งไดรเวอร์และเขียนโปรแกรมขนาดเล็กใน Python:

import serial
ser = serial.Serial(2) #COM3
ser.write(chr(255) + chr(0) + chr(1))
ser.close

ยังคงไม่มีอะไร. บางทีอาจเป็นปัญหาฮาร์ดแวร์ ดังนั้นฉันจึงติดตั้งโปรแกรม Windows ที่ให้มา มันเห็นอุปกรณ์และทำงานเมื่อฉันคลิกที่ปุ่มรีเลย์ ด้วยความท้อแท้ ฉันจึงออกจากโปรแกรมของพวกเขา มองหาจุดบกพร่องในตัวฉัน (หาไม่เจอ) แต่ยังไงก็ลองดู และมันก็ใช้งานได้! ฉันเขียนโปรแกรมที่ใหญ่กว่ามากเพื่อทำสิ่งดีๆ ทุกประเภท และสิ่งดีๆ จะเกิดขึ้นจนกว่าฉันจะถอดปลั๊กอุปกรณ์ เมื่อฉันเสียบกลับเข้าไปใหม่ก็ไม่มีอะไรทำงาน ฉันต้องเรียกใช้และออกจากโปรแกรมควบคุมรีเลย์ก่อนที่โค้ดของฉันจะทำอะไร

ฉันสงสัยว่าฉันต้องทำอะไรบางอย่างกับไดรเวอร์ d2xx เช่น FT_SetBitMode() มีวิธีใดบ้างที่จะใช้เพียงโหมด VCP? PyUSB จะไม่ติดตั้งบนคอมพิวเตอร์ของฉัน และไม่พร้อมใช้งานสำหรับ Linux

สิ่งที่ฉันต้องการคือวิธีง่ายๆ ในการควบคุมรีเลย์บน Linux โดยใช้ Python


person RyanN    schedule 23.04.2013    source แหล่งที่มา
comment
ฉันด้วย. คุณได้รับอะไรเพิ่มเติมอีกบ้างนับตั้งแต่โพสต์คำถามนี้ นี่ กระทู้สนับสนุนของคุณใช่ไหม ฉันได้โพสต์ความคิดเห็นบน Facebook ของ SainSmart; ฉันจะอัปเดตที่นี่หากฉันได้รับการตอบกลับ ฉันสงสัยว่าเอกสารข้อมูล FT245R คือคำตอบหรือไม่ บางทีเราอาจจำเป็นต้องค้นหาเอกสารประกอบของอุปกรณ์เทคโนโลยีแห่งอนาคต แทนที่จะเป็นเอกสารของ SainSmart   -  person Rich    schedule 11.09.2013
comment
มีใครอีกบ้างที่มีโชคพยายามแก้ไขปัญหานี้? ดูเหมือนว่าควรทำผ่าน VCP อย่างตรงไปตรงมา แต่ฉันไม่สามารถทำงานได้ คำแนะนำหรือตัวอย่างบางส่วนจะดีมาก   -  person GrizzlyGuru    schedule 13.03.2015
comment
ฉันยอมแพ้และย้ายไปทำโครงการอื่นต่อไป ฉันไม่คิดว่ามันจะเป็นปัญหาเรื่องอัตรารับส่งข้อมูลเนื่องจากฉันกำหนดค่านี้ผ่านระบบปฏิบัติการ ฉันคิดว่าคุณจะต้องสอดแนมสาย USB และดูว่าโปรแกรม windows กำลังส่งอะไร   -  person RyanN    schedule 14.03.2015


คำตอบ (4)


ฉันมีปัญหาเดียวกัน ฉันคิดว่าคุณพูดถูกเกี่ยวกับ FT_SetBitMode() ในที่สุดฉันก็ใช้งานได้โดยใช้ ftd2xx (ซึ่งคุณสามารถรับได้จาก pip) คุณจะต้องติดตั้ง ไดรเวอร์ ของ D2XX ด้วย

import ftd2xx
if ftd2xx.listDevices() < 1:
    print "No relays found. Exiting..."
    exit()
else: print "Initializing relays..."
relays = ftd2xx.open(0)
relays.setBitMode(255,1) # I think this uses FT_SetBitMode()
relays.write(b'\01\01')  # relay one on
relays.write(b'\01\01')  # relay two on
relays.write(b'\00\00')  # all relays off
relays.close()
person Octavi Escala Semonin    schedule 11.10.2017

ฉันขอแนะนำให้คุณลองใช้ hyperterminal ก่อน

จากข้อมูลโค้ดของคุณ ดูเหมือนว่าคุณไม่มีบอดเรต (สมมติว่าส่วนที่เหลือจะเป็นค่าเริ่มต้น) และฉันไม่รู้จริง ๆ ว่ามันสำคัญหรือไม่ แต่ฉันมักจะตั้งค่าพอร์ตอย่างชัดเจนเป็น Serial('COM3') ซึ่งเป็นจุดความล้มเหลวที่เป็นไปได้น้อยกว่าด้วยวิธีนี้ :)

person Alex    schedule 23.04.2013

คุณอาจไม่มีปัญหากับ Python แต่ด้วยการควบคุมอุปกรณ์เช่นนี้

คุณควรลองค้นหาว่าอุปกรณ์นั้นมีข้อกำหนดพิเศษเกี่ยวกับสถานะของสายควบคุมหรือไม่ (DST, DTR ฯลฯ)

และอย่าลืมความเร็วการสื่อสารที่ Alex กล่าวถึงแล้ว

person glglgl    schedule 23.04.2013

การใช้พอร์ต com เสมือนบน Windows ฉันพบว่าต้องใช้บอด 115k

person johnlon    schedule 19.01.2021