ข้อมูลพอร์ตอนุกรม 9 บิตจริงหรือไม่


10

ฉันมีโปรเจ็กต์เครื่องหยอดเหรียญที่มีอยู่แล้วครึ่งหนึ่งที่ทำงานอยู่บน Atmel UTC ซึ่งฉันต้องการพอร์ตไปยัง Pi

เพื่อที่จะพูดคุยกับอุปกรณ์ต่อพ่วงเช่นตัวรับเหรียญมันต้องรองรับ Multi-Drop Busซึ่งมีอินเตอร์เฟสพอร์ตอนุกรม 9 บิตของข้อมูล (รวมถึงบิตเริ่มหยุดและพาริตีบิต)

ฉันได้เรียนรู้วิธีที่ยากลำบากกับ Atmel board ที่แฮ็คสิ่งใดที่พบบนเน็ตซึ่งพึ่งพาการใช้พาริตี้บิตเนื่องจากบิตข้อมูลที่ 9 อาจทำให้เกิดปัญหาเวลาไม่ดี - ยากต่อการตรวจจับและแก้ไข (ดังนั้นโปรดอย่า แนะนำให้ฉันนี้หรือคล้ายกันขอบคุณ)

ไม่มีใครรู้ว่า / ที่ฉันสามารถซื้อพอร์ตอนุกรม 9 บิตจริงสำหรับ Pi (คะแนนโบนัสถ้ามันสามารถทำงานกับ Pi ศูนย์อย่างใด)

มีหมวกไหม? หรือฉันสามารถทำได้อย่างง่ายดาย (ฉันเป็นคนที่แต่งตัวประหลาด / มีความรู้น้อยของ h / w) ใช้บอร์ดอื่นเพื่อจัดการ UART บิตข้อมูล 9 และควบคุมที่จาก Pi?


1
มีอินเทอร์เฟซแบบอนุกรมบนภาพ GPIO - บน Raspbian และอื่น ๆ ที่ได้รับการตั้งค่าให้ส่งออกจาก Pi ดังนั้นคุณต้องปิดการใช้งานก่อน แต่คุณจะยังคงมีปัญหากับบิตที่ไม่ได้อยู่ในช่วงมาตรฐาน โพสต์ในฟอรัมนี้อาจช่วยได้เช่นกัน
วิลฟ์

1
คุณสามารถเพิ่มฮาร์ดแวร์เข้ากับโครงการได้หรือไม่ เกราะที่มี UART จะไม่ยากเกินกว่าจะสร้างได้และจะให้สิ่งที่คุณต้องการอย่างแน่นอนแม้ว่ามันอาจใช้ I / O มากเกินความคุ้มค่า ซีพียู PIC ต่ำสุดจริง ๆ อาจถูกตั้งโปรแกรมให้แปลอย่างรวดเร็วระหว่างอนุกรมอนุกรม 8 ถึง 9 บิตโดยไม่คิดต้นทุนมากเกินไปหรือทำงานมากเกินไปสำหรับคุณ
Michael Kohne

คุณรู้ไหมว่าฉันจะซื้อได้ที่ไหน
Mawg กล่าวว่าคืนสถานะโมนิก้า

คำตอบ:


7

ห้องสมุดpigpioของฉันรองรับการอ่านและเขียนข้อมูลอนุกรม 9 บิต มันใช้การชนบิตเพื่อให้คุณสามารถใช้ GPIO ที่มีอยู่

ถ้าฉันจำอย่างถูกต้องความเร็ว 19.2 kbps หรือช้ากว่านั้นค่อนข้างเสถียร

คุณต้องการบิตใดต่อวินาที

การอ่าน ( C , Python ) ง่ายกว่าการเขียนเล็กน้อย ( C , Python )


1
คุณแน่ใจ 100 * เมื่อฉันเริ่มพัฒนาฉันถูกเตือนว่า "แฮ็ก" และบอกว่าจะมีปัญหาเรื่องเวลา คุณรู้หรือไม่ว่ามีใครลองด้วยเครื่องขายแสตมป์อัตโนมัติหรือไม่? en.wikipedia.org/wiki/Multidrop_bus และcoin-acceptor.com.cn/Upload/EditorFiles/technicalfile/ขออภัย (ฉันไม่สามารถระบุหมายเลขสมาชิกได้เนื่องจากฉันอยู่หลังไฟร์วอลล์ บริษัท )
Mawg พูดว่า reinstate Monica

3
ประสบการณ์เดียวที่ฉันมีคือการใช้ห้องสมุดระหว่าง Pi และแล็ปท็อปที่มีดองเกิล USB แบบอนุกรม การทดสอบที่ฉันไม่ได้รับการบันทึกในraspberrypi.stackexchange.com/questions/27488/... ซอฟต์แวร์ของฉันใช้ RX / TX และกราวด์เท่านั้นดังนั้นหากคุณทำสิ่งที่แปลกใหม่กับสัญญาณอนุกรมอื่น ๆ คุณอาจมีปัญหา
joan

ฟังดูเข้าท่า. : ให้ฉันตรวจสอบรายละเอียดและกลับไปหาคุณ
Mawg พูดว่าคืนสถานะโมนิก้า

2
@Mawg: คุณได้ยอมรับสิ่งนี้ หมายความว่าโซลูชันที่เสนอนั้นทำงานได้อย่างน่าเชื่อถือหรือไม่
โธมัสเวลเลอร์

3

ฉันได้รับมอบหมายโครงการให้เรียกใช้เครื่องจำหน่ายขนมขบเคี้ยวที่ใช้โปรโตคอล MDB สำหรับการชำระเงินและฉันเสร็จสิ้นโครงการโดยใช้ Pi Zero (สีส้ม)

ฉันลองไลบรารีอนุกรมฮาร์ดแวร์และซอฟต์แวร์อนุกรม 9 บิตแล้วและมีปัญหาเกี่ยวกับจังหวะใน Pi Zero การสื่อสารต่อเนื่องแบบ 9 บิตของ MDB กลายเป็นความเจ็บปวด โปรโตคอล MDB กล่าวว่าอุปกรณ์ต่อพ่วงควรมีความอดทน% 5 สำหรับการกำหนดเวลาการสื่อสารแบบอนุกรม แต่ผู้ค้าอุปกรณ์ต่อพ่วงที่แตกต่างกันมีความคลาดเคลื่อนต่างกันไม่สอดคล้องกับโปรโตคอล MDB เมื่อคุณคิดว่าคุณประสบความสำเร็จในการสื่อสารแบบอนุกรม แต่ลองใช้อุปกรณ์ต่อพ่วงชำระเงินของผู้ผลิตรายอื่นมันก็ไม่ทำงาน ดังนั้นอย่าพึ่งพาแผ่นข้อมูลโปรโตคอล MDB ฉันป่วยและเบื่อที่จะใช้ตัวควบคุม MDB สำหรับผู้ขายรถเข็น นอกจากนี้อุปกรณ์ต่อพ่วงบางตัวยังสามารถระบายกระแสแอมโมเนียที่มากเกินไปจากพิน uart ในระหว่างกระบวนการบู๊ตภายในและอาจทำให้ชั้นการสื่อสารแบบอนุกรมเสียหายได้ ดังนั้นคุณควรใช้สิ่งที่เป็นนามธรรม Optocouplers นั้นใช้ได้ แต่ฉันก็ยังไม่ต้องการ ' ไม่แนะนำให้จัดการการสื่อสารแบบอนุกรม MDB โดยใช้ Pi Zero วิธีที่ดีกว่าคือการใช้วิธีเลเยอร์กลางโดยใช้ AVR

แทนที่จะใช้ Uart บน Pi Zero สำหรับการสื่อสาร MDB ฉันใช้ Atmega328 AVR สำหรับการจัดการ MDB การสำรวจ ฯลฯ Atmega328 ควบคุมอุปกรณ์ต่อพ่วง MDB โดยใช้ไลบรารี Serial Software และส่งข้อมูลมนุษย์ที่อ่านได้ไปยัง Pi Zero บนฮาร์ดแวร์อนุกรม ชุดรูปแบบอิเล็กทรอนิกส์แหล่งที่มาและรูปภาพ Pi Zero Armbian รหัส Python สำหรับการใช้งานหยอดเหรียญมีให้ที่นี่:

http://eliverse.com/content/vendiverse/

คุณสามารถตรวจสอบหน้า wiki เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับการควบคุมมอเตอร์เซ็นเซอร์การนำส่งผลิตภัณฑ์ตัวระบายความร้อนและการแสดงผล LCD ได้ มันเป็นโครงการควบคุมเครื่องจำหน่ายสินค้าอัตโนมัติที่สมบูรณ์และมีการใช้งานโดยผู้ผลิตเครื่องจำหน่ายสองเครื่อง


นี่เป็นคำตอบที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งมันเป็นคำตอบแรก ก่อนหน้านี้ฉันเคยประสบความสำเร็จกับ Atmel board ที่มี UART ขนาด 9 บิตจริงและหวังว่าจะประหยัดเงินโดยใช้ Raspberry Pi แต่โซลูชันของคุณครอบคลุมมากจนฉันเป็นคนโง่ที่จะไม่ใช้มัน อนิจจาฉันเป็นซอฟต์แวร์เพียงคนเดียวดังนั้นสำหรับต้นแบบฉันต้องการโซลูชันที่ไม่ต้องบัดกรี คุณช่วยแนะนำบอร์ด COTS ได้ไหม?
Mawg กล่าวว่าคืนสถานะโมนิก้า

หน้าเว็บไซต์ของคุณบอกว่า "ถ้าคุณทำตามขั้นตอนในการทำบอร์ด VMC ของผู้จำหน่ายหรือถ้าคุณได้รับบอร์ด VMC ของผู้จำหน่าย" ฉันสามารถซื้อจากคุณได้ไหม ราคาเท่าไหร่ นอกจากนี้หากคุณแนะนำอุปกรณ์ต่อพ่วง MDB ใด ๆ คุณสามารถเพิ่มสิ่งนั้นลงในไซต์ของคุณได้หรือไม่? ขอบคุณ
Mawg พูดว่าคืนสถานะโมนิก้า

ดูเหมือนว่าอีเมลของฉันติดอยู่ในจดหมายขยะ คุณสามารถติดต่อฉันได้ไหม คุณมีที่อยู่อีเมลของฉันและฉันยังอยู่ในเบรเมน
Mawg พูดว่าคืนสถานะโมนิก้า

ตอนนี้ดูเหมือนว่าหน้าจะตายและโครงการถูกทอดทิ้ง :-(
Mawg พูดว่าคืนสถานะโมนิก้า

2

ฉันยังทำการสาธิตที่สมบูรณ์สำหรับการจำลอง UART 9 บิต (อิงจากคู่ / คี่) คุณสามารถค้นหาได้http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html

แหล่งที่มาทั้งหมดมีอยู่ในคอมไพล์

คุณสามารถปรับให้เข้ากับอุปกรณ์ของคุณได้อย่างง่ายดาย หวังว่าคุณจะชอบมัน.


1

ข้อมูลอนุกรมทั้งหมดเป็นแบบ จำกัด 1 บิต มันขึ้นอยู่กับอินเทอร์เฟซการอ่านและการเขียนข้อมูลว่าจะเห็นด้วยกับวิธีการที่พวกเขาตีความบิตไปยังและจากข้อมูลที่มีความหมาย
ถ้าคุณต้องการข้อมูล 9 บิตและพาริตี้บิตและหยุดและบิตเริ่มต้น จากนั้นขึ้นอยู่กับคุณในการแปลงข้อมูลเป็นรูปแบบนั้นและเพื่อตีความข้อมูลที่คุณอ่านในรูปแบบนั้น โมดูล pigpio ที่กล่าวถึงในคำตอบอื่นจะให้ฮาร์ดแวร์ที่คุณต้องการหรือคุณสามารถเขียนของคุณเอง หากคุณกำลังพัฒนาในหลามฉันขอแนะนำให้ดูที่โมดูล bitString.py โดย Scott Griffiths เป็นห้องสมุดที่ทำให้จัดการข้อมูลบิตได้ง่าย


5
ปัญหาเกี่ยวกับการส่งข้อมูลอนุกรมอยู่ในช่วงเวลา ข้อมูลไม่ใช่การตอกบัตรด้วยตนเองและการเปลี่ยนระดับการรับประกันเพียงอย่างเดียวอยู่ในบิตหยุด / เริ่ม ปลายทั้งสองจะต้องรักษาระยะเวลาที่แน่นหนาและต่อเนื่องเพื่อให้ได้ตำแหน่งที่เป็นบิต นั่นคือเหตุผลที่โดยทั่วไปจะใช้ฮาร์ดแวร์เฉพาะในการส่งและรับข้อมูล มีระยะเวลาน้อยมาก
joan

1

ฉันชอบฮาร์ดแวร์ UART มากกว่าการติดตั้งซอฟต์แวร์เช่นเดียวกับ pigpio

คุณสามารถใช้พาริตีบิตเพื่อการสื่อสาร 9 บิต มีปัญหาเล็กหนึ่งปัญหา: เคอร์เนลปัจจุบันไม่มีการสนับสนุน CMSPAR (เว้นวรรค / เครื่องหมายพาริตี)
แต่คุณสามารถสลับคู่ / คี่พาริตี้เพื่อรับค่าบิตที่ต้องการแม้จะเป็นเคอร์เนลปัจจุบันตัวอย่าง:

unsigned char check_parity(unsigned char v)
{
    v ^= v >> 4;
    v &= 0xf;
    return (0x6996 >> ((v ^ (v >> 4)) & 0xf)) & 1;
}

/* send 9 bits - 8 bits of byte + 1 bit of parity */
send_byte_with_parity(unsigned char byte, unsigned char parity)
{
    if (check_parity(byte) == parity) {
        options.c_cflag &= ~PARODD;
    } else {
        options.c_cflag |= PARODD;
    }
    tcsetattr(fd, 0, &options);
    write(fd, &byte, 1);
}


วิธีที่ดีกว่า IMHO คือการใช้เคอร์เนลขนาดเล็กสำหรับการรองรับ CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
เพิ่มการสนับสนุนเครื่องหมาย / ช่องว่างซึ่งช่วยให้โค้ดง่ายขึ้นเล็กน้อย

PS ฉันนำ MDB ไปใช้แบบอนุกรมด้วยวิธีการนี้ มันใช้ได้กับ Pi อย่างไม่มีที่ติ
PPS Patch ได้รับการอนุมัติและ CMSPAR จะทำงานนอกกรอบเริ่มต้นด้วยเคอร์เนล 4.6


หากไม่มีแพทช์หรืออย่างน้อยลิงค์และรายละเอียดที่สมบูรณ์ยิ่งขึ้นนี่ไม่ใช่คำตอบหรือแม้แต่ความคิดเห็นที่เป็นประโยชน์ - นอกเหนือจากที่ระบุว่าเป็นไปได้ในทางทฤษฎี
Steve Robillard

มันยังมีคำถามมากกว่าคำตอบ: ฉันจะใช้ MDB ได้อย่างไรฉันจะใช้เคอร์เนลแพตช์ได้อย่างไรจะทำงานกับ Pi ทั้งหมดหรือบางส่วนเท่านั้น อะไรจะหยุดพักนี้อีก? ฉันจะยกเลิกสิ่งนี้ได้อย่างไรถ้าจำเป็น? โปรแกรมแก้ไขนี้ปลอดภัยหรือไม่ โปรดจำไว้ว่าคุณรู้เรื่องนี้เพราะคุณใช้มัน OP ไม่ได้
Steve Robillard

1
ฉันได้ยกเลิกการลบคำตอบของคุณในขณะที่คุณยอมรับคำตอบของคุณจะดีกว่า ฉันหวังว่าคุณจะใช้โอกาสในการปรับปรุง
Steve Robillard

ฉันต้องการเพิ่มอะไรอีก การใช้ MDB หรือไม่ ฉันไม่ได้รับอนุญาตให้โอเพนซอร์สจากนายจ้างของฉัน
edo1

ดูความคิดเห็นก่อนหน้าของฉันและจำไว้ว่าผู้ใช้ปลายทางไม่ทราบทุกสิ่งที่คุณทำ
Steve Robillard

1

คุณไม่สามารถเชื่อมต่ออนุกรม RPi ที่เชื่อถือได้โดยตรงกับบัส MDB ได้เนื่องจากรูปแบบ 9 บิตและการกำหนดเวลา MDB ที่เข้มงวด ข้อความระหว่างอุปกรณ์ต่อพ่วง MDB และ RPi จำเป็นต้องแปลงแบบ on-the-fly และแบบเรียลไทม์ ตรวจสอบลิงค์นี้มันจะช่วย: DIY ตัวแปลง MDB-UART


0

คำตอบที่ได้รับการยอมรับซึ่งใช้หน่วยประมวลผล Atmel พร้อมด้วยข้อมูล 9 บิตที่แท้จริงการสื่อสาร URT กับ Pi นั้นดูเหมือนว่าจะถูกทอดทิ้งหรือถูกใช้ในเชิงพาณิชย์

ดังนั้นฉันจะไปกับhttps://www.vendingtools.ro/enสำหรับ Eur 70 และนั่นจะเชื่อมต่อ Pi ของฉันกับบัสบิตข้อมูล MDB 9


[Update]

ดูสิ่งนี้ด้วย

https://www.qibixx.com/en/products/mdb-interface/

https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.