सच 9-बिट सीरियल पोर्ट डेटा?


10

मेरे पास Atmel UTC पर चलने वाली एक मौजूदा, आधी पूर्ण, वेंडिंग मशीन परियोजना है, जिसे मैं Pi में पोर्ट करना चाहता हूं।

सिक्का स्वीकर्ता जैसे परिधीय से बात करने के लिए, इसे मल्टी-ड्रॉप बस का समर्थन करना होगा जिसमें 9-डेटा बिट सीरियल पोर्ट इंटरफ़ेस (प्लस स्टार्ट, स्टॉप और पैरिटी बिट्स) है।

मैंने Atmel बोर्ड के साथ कठिन तरीका सीखा, जो हैक का पता लगाता है, जो नेट पर सुझाया गया है, जो 9 बिट डेटा बिट के रूप में समता बिट का उपयोग करने पर निर्भर करता है, जिससे खराब समय की समस्या हो सकती है - पता लगाने में मुश्किल और सही करने के लिए (इसलिए, कृपया नहीं। मुझे इस या इसी तरह के लिए धन्यवाद। धन्यवाद)।

किसी को पता है कि क्या / जहां मैं पाई के लिए एक सच्चे 9 बिट सीरियल पोर्ट खरीद सकता हूं (बोनस अंक अगर यह किसी तरह से शून्य शून्य के साथ काम कर सकता है)।

क्या कोई हाट उपलब्ध है? या मैं आसानी से (मैं के रूप में / डब्ल्यू आदमी है, एच / डब्ल्यू का थोड़ा ज्ञान के साथ) 9 डेटा बिट UART को संभालने और एक पाई से नियंत्रित करने के लिए दूसरे बोर्ड का उपयोग कर सकता है?


1
GPIO पर एक सीरियल इंटरफ़ेस है - रास्पियन आदि छवियों पर इसे पाई से आउटपुट प्रदान करने के लिए सेट किया गया है, इसलिए आपको पहले इसे अक्षम करना होगा, लेकिन आपके पास बिट्स के साथ एक समस्या होगी जो मानक सीमा में नहीं है। मंचों पर इस पोस्ट के रूप में अच्छी तरह से मदद कर सकता है।
विल्फ नो

1
क्या आप प्रोजेक्ट में हार्डवेयर जोड़ सकते हैं? एक UART के साथ एक ढाल भी बनाने में बहुत मुश्किल नहीं होगा, और आपको इसकी वही आवश्यकता होगी जो आपको इसकी आवश्यकता है, हालांकि यह इसके लायक होने की तुलना में अधिक I / O का उपयोग कर सकता है। बहुत कम लागत या आपके लिए अत्यधिक मात्रा में काम किए बिना 8-9 बिट सीरियल के बीच अनुवाद करने के लिए वास्तव में कम-अंत पीआईसी सीपीयू को जल्दी से प्रोग्राम किया जा सकता है।
माइकल कोहेन

क्या आपको पता है कि मैं एक कहां खरीद सकता हूं?
मावग का कहना है कि

जवाबों:


7

मेरी पिगियो लाइब्रेरी 9-बिट सीरियल डेटा को पढ़ने और लिखने का समर्थन करती है। यह बिट पीटने का उपयोग करता है ताकि आप किसी भी उपलब्ध GPIO का उपयोग कर सकें।

अगर मुझे सही से याद है तो 19.2 kbps या धीमे की कोई भी गति बहुत स्थिर थी।

आपको प्रति सेकंड किन बिट्स की आवश्यकता है?

पढ़ना ( सी , पायथन ) लेखन ( सी , पायथन ) की तुलना में थोड़ा आसान है ।


1
क्या आप 100 * सुनिश्चित हैं? जब मैंने पहली बार विकास करना शुरू किया, तो मुझे ऐसे "हैक्स" से दूर कर दिया गया और बताया गया कि समय की समस्या होगी। क्या आप जानते हैं कि किसी ने इसे वेंडिंग मशीन के साथ आज़माया है? en.wikipedia.org/wiki/Multidrop_bus और coin-acceptor.com.cn/Upload/EditorFiles/technicalfile/… (क्षमा करें, मैं एक कंपनी नंबर नहीं दे सकता हूं क्योंकि मैं एक कंपनी फ़ायरवॉल के पीछे हूं)
Mawg कहते हैं, मोनिका

3
एकमात्र अनुभव जो मेरे पास है वह पाई और लैपटॉप के बीच लाइब्रेरी का उपयोग USB सीरियल डोंगल के साथ कर रहा है। मैंने जो परीक्षण किए, वे raspberrypi.stackexchange.com/questions/27488/… में प्रलेखित हैं । मेरा सॉफ्टवेयर केवल RX / TX और ग्राउंड का उपयोग करता है इसलिए यदि आप अन्य धारावाहिक संकेतों के साथ कुछ फैंसी करते हैं तो आपको समस्या हो सकती है।
जोहान २ j

बढ़िया है। : मैं कल्पना की जाँच
करूं

2
@Mawg: आपने इसे स्वीकार कर लिया है। क्या इसका मतलब है कि प्रस्तावित समाधान मज़बूती से काम किया?
थॉमस वेलर

3

मुझे एक स्नैक वेंडिंग मशीन चलाने के लिए एक प्रोजेक्ट सौंपा गया था जो भुगतान के लिए एमडीबी प्रोटोकॉल का उपयोग करता है और मैंने पीआई ज़ीरो (ऑरेंज) का उपयोग करके परियोजना को पूरा किया है।

मैंने 9 बिट हार्डवेयर सीरियल और सॉफ्टवेयर सीरियल लाइब्रेरी की कोशिश की है और पाई जीरो पर टाइमिंग की समस्या है। एमडीबी के 9bit सीरियल संचार एक दर्द बन गया। एमडीबी प्रोटोकॉल का कहना है कि धारावाहिक संचार समय के लिए बाह्य उपकरणों में 5% सहिष्णुता होनी चाहिए, लेकिन विभिन्न परिधीय विक्रेताओं में अलग सहिष्णुता होती है, एमडीआर प्रोटोकॉल के अनुरूप नहीं। जब आपको लगता है कि आपने धारावाहिक संचार को पूरा कर लिया है, लेकिन एक अलग विक्रेता के भुगतान परिधीय का प्रयास करें, तो यह काम नहीं करता है। तो एमडीबी प्रोटोकॉल डेटाशीट पर भरोसा मत करो। मैं बीमार हो गया और छोटी गाड़ी विक्रेताओं के लिए एमडीबी नियंत्रक लागू करने से थक गया। इसके अलावा कुछ परिधीय अपने आंतरिक बूट प्रक्रिया के दौरान uart पिंस से करंट के अत्यधिक मात्रा में निकास कर सकते हैं और आपके सीरियल संचार परत को नुकसान पहुंचा सकते हैं। तो, आप बेहतर रूप से एक अमूर्त का उपयोग करें। ऑप्टोकॉपर्स ठीक हैं लेकिन फिर भी मैं नहीं करूंगा ' पीआई शून्य का उपयोग करके एमडीबी सीरियल संचार को संभालने की सलाह देते हैं। बेहतर तरीका एक AVR का उपयोग करके एक मध्य परत दृष्टिकोण का उपयोग करना है।

एमडीबी संचार के लिए पाइ ज़ीरो पर Uart का उपयोग करने के बजाय, मैंने MDB हैंडलिंग, मतदान आदि के लिए एक Atmega328 AVR का उपयोग किया। Atmega328 सॉफ्टवेयर सीरियल लाइब्रेरी का उपयोग करके MDB बाह्य उपकरणों को नियंत्रित करता है और हार्डवेयर धारावाहिक के लिए Pi Zero को मानव पठनीय डेटा भेजता है। सभी इलेक्ट्रॉनिक्स योजना, स्रोत और पाई जीरो आर्मबियन छवि, वेंडिंग संचालन के लिए पायथन कोड यहां उपलब्ध हैं:

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

आप मोटर्स, उत्पाद वितरण सेंसर, कूलर और चरित्र एलसीडी डिस्प्ले को नियंत्रित करने के बारे में अधिक जानकारी के लिए विकी पेज की जांच कर सकते हैं। यह एक पूर्ण वेंडिंग मशीन नियंत्रक परियोजना है और इसका उपयोग कुछ वेंडिंग मशीन उत्पादकों द्वारा किया जा रहा है।


यह एक शानदार उत्तर है, विशेष रूप से यह पहला उत्तर है। मुझे पहले एक Atmel बोर्ड के साथ एक सच्चे 9-बिट UART के साथ सफलता मिली है और रास्पबेरी पाई का उपयोग करके पैसे बचाने की उम्मीद की थी, लेकिन आपका समाधान इतना व्यापक है कि मैं इसका उपयोग न करने के लिए मूर्ख हूं। काश, मैं एक सॉफ्टवेयर केवल लड़का हूं, इसलिए एक प्रोटोटाइप के लिए मैं दृढ़ता से एक आवश्यक समाधान नहीं करना पसंद करूंगा। क्या आप एक COTS बोर्ड सुझा सकते हैं?
मावग का कहना है कि

आपकी वेब साइट का यह पृष्ठ कहता है, "यदि आपने एक Vendiverse VMC बोर्ड बनाने में कदम पूरा कर लिया है या यदि आपने एक Vendiverse VMC बोर्ड प्राप्त कर लिया है"। क्या मैं आपसे एक खरीद सकता हूं? इसकी कीमत कितनी होगी? इसके अलावा, यदि आप किसी विशेष एमडीबी बाह्य उपकरणों की सिफारिश करते हैं, तो क्या आप इसे अपनी साइट पर जोड़ सकते हैं? धन्यवाद
मावग का कहना है कि मोनिका

ऐसा लगता है कि मेरे ईमेल आपके स्पैम में फंस गए हैं। क्या आप मुझसे संपर्क कर सकते हैं? आपके पास मेरा ईमेल पता है, और मैं अभी भी ब्रेमेन में हूँ
Mawg कहते हैं मोनिका

अब ऐसा लग रहा है कि पेज मर चुका है, और इस परियोजना को छोड़ दिया गया है :-(
मावग का कहना है कि मोनिका

2

मैंने 9-बिट UART इम्यूलेशन (सम / विषम समता पर आधारित) के लिए पूर्ण डेमो भी बनाया। आप इसे http://bohdan-danishevsky.blogspot.com/2016/10/9-bit-serial-communication-in-linux.html पर देख सकते हैं ।

Git पर उपलब्ध सभी स्रोत।

आप इसे आसानी से अपने डिवाइस के लिए अनुकूलित कर सकते हैं। उम्मीद है आप इसे पसंद करते हैं।


1

सभी सीरियल डेटा परिभाषा के अनुसार, 1 बिट है। यह उस डेटा को पढ़ने और लिखने वाले इंटरफेस पर निर्भर है कि वे कैसे सार्थक डेटा से बिट्स की व्याख्या करते हैं।
यदि आप 9 बिट डेटा चाहते हैं, और एक समता बिट, और एक स्टॉप और एक स्टार्ट बिट। फिर यह आपके ऊपर है कि आप अपने डेटा को उस प्रारूप में परिवर्तित करें, और उस प्रारूप में आपके द्वारा पढ़े गए डेटा की व्याख्या करें। एक अन्य उत्तर में उल्लिखित पिगपियो मॉड्यूल आपको आपकी आवश्यकता के अनुसार हार्डवेयर इंटरफेस प्रदान करेगा, या आप अपना स्वयं का लिख ​​सकते हैं। यदि आप अजगर में विकसित हो रहे हैं, तो मेरा सुझाव है कि स्कॉट ग्रिफिथ्स द्वारा बिटस्ट्रिंगडोमोक्स मॉड्यूल पर एक नजर डालें जो एक पुस्तकालय के रूप में है जो बिट आधारित डेटा में हेरफेर करना काफी आसान बनाता है।


5
सीरियल डेटा ट्रांसमिट करने में समस्या टाइमिंग में है। डेटा स्व क्लॉकिंग नहीं है और स्टॉप / स्टार्ट बिट्स में एकमात्र गारंटीकृत स्तर संक्रमण है। दोनों सिरों को तंग, निर्बाध समय को बनाए रखने के लिए काम करना पड़ता है जहां बिट्स होते हैं। यही कारण है कि समर्पित हार्डवेयर का उपयोग आम तौर पर डेटा प्रसारित करने और प्राप्त करने के लिए किया जाता है। थोड़ा समय लेवे है।
joan

1

मैं निश्चित रूप से सॉफ्टवेयर कार्यान्वयन पर हार्डवेयर UART पसंद करता हूं जैसे कि पिगियो करता है।

आप 9-बिट संचार के लिए समता बिट का उपयोग कर सकते हैं। एक छोटा सा मुद्दा है: वर्तमान कर्नेल में CMSPAR समर्थन (स्थान / चिह्न समता) नहीं है।
लेकिन आप वर्तमान कर्नेल के साथ वांछित 9 वें बिट मूल्य प्राप्त करने के लिए भी / विषम समता स्विच कर सकते हैं, उदाहरण:

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
यह मार्क / स्पेस पैरिटी सपोर्ट जोड़ता है, जो कोड को थोड़ा सरल बनाने की अनुमति देता है।

पीएस I ने इस दृष्टिकोण के साथ एमडीबी को धारावाहिक पर लागू किया। यह पाई पर दोषपूर्ण तरीके से काम करता है।
PPS पैच को मंजूरी दे दी गई है और CMSPAR 4.6 कर्नेल के साथ शुरू होने वाले बॉक्स से बाहर काम करेगा।


पैच के बिना या कम से कम एक लिंक, और अधिक पूर्ण विवरण यह एक उत्तर नहीं है, और न ही यह एक सहायक टिप्पणी भी है - इसके अलावा यह कहता है कि यह सैद्धांतिक रूप से संभव है।
स्टीव रोबिलार्ड

यह अभी भी उत्तर से अधिक प्रश्न छोड़ता है: मैं एमडीबी कैसे लागू करूं, मैं कर्नेल पैच कैसे लागू करूं, क्या यह सभी पीआई या उनमें से कुछ पर काम करेगा? यह और क्या टूट सकता है? जरूरत पड़ने पर मैं इसे पूर्ववत कैसे कर सकता हूं? क्या यह पैच सुरक्षित है? याद रखें कि आप इसे जानते हैं क्योंकि आपने इसे लागू किया है ओपी ने नहीं।
स्टीव रोबिलार्ड

1
मैंने आपके उत्तर को हटा दिया है, क्योंकि आप स्वीकार करते हैं कि आपका उत्तर बेहतर हो सकता है। मुझे आशा है कि आप इसे सुधारने का अवसर लेंगे।
स्टीव रोबिलार्ड

मुझे और क्या चाहिए? MDB कार्यान्वयन? मुझे अपने नियोक्ता से इसे ओपन-सोर्स करने की अनुमति नहीं मिली।
edo1

मेरी पिछली टिप्पणी देखें और याद रखें कि अंतिम उपयोगकर्ता वह सब नहीं जानता जो आप करते हैं।
स्टीव रोबिलार्ड

1

आप नहीं कर सकते हैं विश्वसनीय कनेक्ट आरपीआई एमडीबी बस को सीधे धारावाहिक 9-बिट प्रारूप और सख्त एमडीबी समय की वजह से। एमडीबी परिधीय और आरपीआई के बीच के संदेशों को ऑन-द-फ्लाई और वास्तविक समय में परिवर्तित करने की आवश्यकता है। इस लिंक की जाँच करें यह मदद करेगा: DIY MDB-UART कनवर्टर


0

स्वीकृत उत्तर, जिसमें एक एटम प्रोसेसर का उपयोग किया गया था जिसमें 9 बिट डेटा यूआरटी के साथ एक पीआई के साथ संचार किया गया था या तो छोड़ दिया गया था, या कॉमर्जिकल लिया गया था।

इसलिए मैं Eur 70 के लिए https://www.vendingtools.ro/en के साथ जा रहा हूं , और वह मेरे Pi को MDB 9 डेटा बिट बस के लिए इंटरफ़ेस करेगा।


[अपडेट करें]

यह सभी देखें

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.