Saya memiliki proyek mesin penjual otomatis setengah jalan yang berjalan di Atmel UTC, yang ingin saya port ke Pi.
Untuk dapat berbicara dengan periferal, seperti akseptor koin, ia harus mendukung Multi-Drop Bus yang memiliki antarmuka port serial 9-data bit (plus bit start, stop, dan bit paritas).
Saya belajar dengan cara yang sulit dengan papan Atmel bahwa peretasan yang ditemukan disarankan di internet, yang mengandalkan penggunaan bit paritas karena bit data ke-9 dapat menyebabkan masalah waktu yang buruk - sulit untuk dideteksi dan diperbaiki (jadi, tolong jangan rujuk saya ke ini , atau serupa. Terima kasih).
Apakah ada yang tahu jika / di mana saya dapat membeli port serial 9 bit yang benar untuk Pi (poin bonus jika entah bagaimana dapat bekerja dengan nol Pi).
Apakah mungkin ada Topi? Atau bisakah saya dengan mudah (saya memiliki sebagai / w guy, dengan sedikit pengetahuan tentang h / w) menggunakan papan lain untuk menangani bit data 9 UART dan mengendalikannya dari Pi?
Jawaban:
Perpustakaan Pigpio saya mendukung membaca dan menulis data serial 9-bit. Ini menggunakan bit banging sehingga Anda dapat menggunakan GPIO yang tersedia.
Jika saya ingat benar setiap kecepatan 19,2 kbps atau lebih lambat cukup stabil.
Bit per detik apa yang Anda butuhkan?
Membaca ( C , Python ) sedikit lebih mudah daripada menulis ( C , Python ).
sumber
Saya ditugaskan proyek untuk menjalankan mesin penjual makanan ringan yang menggunakan protokol MDB untuk pembayaran dan saya telah menyelesaikan proyek menggunakan Pi Zero (Orange).
Saya telah mencoba 9 bit hardware serial dan software serial library dan mengalami masalah waktu pada Pi Zero. Komunikasi serial 9bit MDB menjadi menyebalkan. Protokol MDB mengatakan periferal harus memiliki toleransi% 5 untuk waktu komunikasi serial namun vendor periferal yang berbeda memiliki toleransi yang berbeda, tidak sesuai dengan protokol MDB. Ketika Anda berpikir bahwa Anda telah menyelesaikan komunikasi serial tetapi mencoba perangkat pembayaran vendor yang berbeda, itu tidak berfungsi. Jadi jangan mengandalkan lembar data protokol MDB. Saya muak dan lelah menerapkan pengontrol MDB untuk vendor kereta. Juga beberapa periferal dapat mengalirkan amont arus berlebih dari pin uart selama proses boot internal dan dapat merusak lapisan komunikasi serial Anda. Jadi, Anda lebih baik menggunakan abstraksi. Optocoupler baik-baik saja tetapi saya tetap tidak akan t merekomendasikan penanganan komunikasi serial MDB menggunakan Pi Zero. Cara yang lebih baik adalah dengan menggunakan pendekatan lapisan tengah menggunakan AVR.
Alih-alih menggunakan Uart pada Pi Zero untuk komunikasi MDB, saya menggunakan Atmega328 AVR untuk penanganan, pemungutan suara dll. Atmega328 mengontrol perangkat MDB menggunakan perpustakaan Serial Perangkat Lunak dan mengirimkan data yang dapat dibaca manusia ke Pi Zero pada serial perangkat keras. Semua skema elektronik, sumber, dan gambar Pi Zero Armbian, kode Python untuk operasi Vending tersedia di sini:
http://eliverse.com/content/vendiverse/
Anda dapat memeriksa halaman wiki untuk perincian lebih lanjut tentang mengendalikan motor, sensor pengiriman produk, pendingin dan tampilan LCD karakter. Ini adalah proyek pengontrol mesin penjual otomatis yang lengkap dan sedang digunakan oleh beberapa produsen mesin penjual otomatis.
sumber
Saya juga membuat demo lengkap untuk emulasi UART 9-bit (berdasarkan paritas genap / ganjil). Anda dapat menemukannya http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html .
Semua sumber tersedia di git.
Anda dapat dengan mudah menyesuaikannya untuk perangkat Anda. Harap Anda menyukainya.
sumber
Semua data serial menurut definisi, 1 bit. Terserah antarmuka membaca dan menulis data bagaimana menyepakati bagaimana mereka menafsirkan bit ke dan dari data yang bermakna.
Jika Anda ingin 9 bit data, dan bit paritas, dan berhenti dan bit mulai. Maka terserah kepada Anda untuk mengubah data Anda ke dalam format itu, dan untuk menafsirkan data yang Anda baca dalam format itu. Modul pigpio yang disebutkan dalam jawaban lain akan memberi Anda antarmuka perangkat keras yang Anda butuhkan, atau Anda dapat menulis sendiri. Jika Anda mengembangkan python, saya sarankan untuk melihat modul bitString.py oleh Scott Griffiths sebagai pustaka yang membuatnya cukup mudah untuk memanipulasi data berbasis bit.
sumber
Saya pasti lebih suka perangkat keras UART daripada implementasi perangkat lunak seperti pigpio.
Anda dapat menggunakan bit paritas untuk komunikasi 9-bit. Ada satu masalah kecil: kernel saat ini tidak memiliki dukungan CMSPAR (spasi / paritas tanda).
Tetapi Anda dapat mengganti genap / ganjil untuk mendapatkan nilai bit ke-9 yang diinginkan bahkan dengan kernel saat ini, contoh:
Pendekatan yang lebih baik IMHO adalah dengan menggunakan patch kernel kecil untuk dukungan CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Ia menambahkan dukungan parity tanda / ruang, yang memungkinkan kode menjadi sedikit lebih sederhana.
PS Saya mengimplementasikan MDB melalui serial dengan pendekatan ini. Ini bekerja pada Pi dengan sempurna.
Patch PPS telah disetujui dan CMSPAR akan bekerja di luar kotak dimulai dengan kernel 4.6.
sumber
Anda tidak dapat DIANDALKAN menghubungkan serial RPi langsung ke bus MDB karena format 9-bit dan timing MDB yang ketat. Pesan antara perangkat MDB dan RPi perlu dikonversi saat itu juga dan dalam waktu nyata. Periksa tautan ini, ini akan membantu: Konverter MDB-UART DIY
sumber
Jawaban yang diterima, yang menggunakan prosesor Atmel dengan data 9 bit sejati URT yang berkomunikasi dengan Pi tampaknya telah ditinggalkan, atau dianggap komersial.
Jadi saya akan menggunakan https://www.vendingtools.ro/en untuk Eur 70, dan itu akan menghubungkan Pi saya ke bus bit data MDB 9.
[Memperbarui]
Lihat juga
https://www.qibixx.com/en/products/mdb-interface/
https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/
sumber