मेरे पास मेरे माइक्रोकंट्रोलर पर कोई UART नहीं है तो मैं कैसे जोड़ सकता हूं?


13

मैं एक ATMEGA32HVB माइक्रोकंट्रोलर का उपयोग कर रहा हूं जिसमें सेल बैलेंसिंग की सुविधा है जिसके द्वारा हम श्रृंखला में 4 बैटरी को जोड़ सकते हैं और एक समय में एक का उपयोग कर सकते हैं। बिजली प्रबंधन के लिए यह बहुत उपयोगी है इसलिए मैं एक अलग माइक्रोकंट्रोलर का उपयोग नहीं कर सकता। कृपया इसमें UART जोड़ने के लिए कुछ तरीके सुझाएं ताकि मैं आसानी से धारावाहिक उपकरणों के लिए इंटरफ़ेस कर सकूं।


11
उपयोगकर्ता U12129 द्वारा वर्णित सॉफ़्टवेयर UART का तरीका बिट- बैंगिंग कहलाता है ।
जोहान।

4
बस मेरा बहुत व्यक्तिपरक $ 0.02 है, लेकिन मैं आमतौर पर एक अलग समर्पित बैटरी नियंत्रक और यूसी-एकीकृत यूएआरटी के बजाय अन्य तरीके से पसंद करूंगा। आपको यूसी में बैटरी प्रबंधन को एकीकृत करने की आवश्यकता क्यों है?
Mels

मुझे रिचार्जेबल बैटरी का उपयोग करना होगा जो एक सौर पैनल का उपयोग करके चार्ज किया जाएगा, इसलिए मुझे श्रृंखला में 4 बैटरियों की आवश्यकता है जो एक समय में उपयोग की जाएगी
user27475

4
एक प्रश्न यह है कि आप UART का उपयोग किस दिशा में और किन दिशाओं में करना चाहते हैं। यदि आप केवल एक सामयिक डीबग या स्थिति संदेश उत्पन्न करना चाहते हैं, तो ऐसे समय में जब आपका प्रोसेसर बहुत अधिक अतिरिक्त मांग के अधीन नहीं है, तो बिट बैंगिंग सीरियल आउटपुट बहुत आकर्षक लग सकता है। पिन-चेंज इंटरप्ट का उपयोग करने जैसे टिक होते हैं जो एक इनपुट चैनल के औसत लोड को भी कम कर सकते हैं, लेकिन यदि आप ऐसे समय में उच्च बॉड दर पर वर्ण प्राप्त करने की अपेक्षा करते हैं, जब आपके पास अन्य रीयल-टाइम प्रतिबद्धताएँ हों, तो यह हो सकता है एक मुद्दा।
क्रिस स्ट्रैटन

जवाबों:


17

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

डेटाशीट पर एक नज़र से, यह प्रतीत होता है कि आपके माइक्रोकंट्रोलर में SPI और I2C (जिसे Atmel टू-वायर इंटरफ़ेस (TWI) कहते हैं) दोनों हैं। बाहरी UART को संलग्न करने के लिए ये संभवतः सबसे अच्छा इंटरफेस होगा। कहा गया कि डिवाइस कई निर्माताओं से उपलब्ध हैं। कुछ उदाहरण:

  • Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts ) के पास SPI / I2C 1- की लाइन है और 2-चैनल UART डिवाइस उपलब्ध हैं, जो ~ 1.6- को कवर करते हैं। 3.3V ऑपरेटिंग रेंज। मैंने इनमें से किसी भी भाग का विशेष रूप से उपयोग नहीं किया है, लेकिन मैंने अतीत में एक्सार उपकरणों का उपयोग किया है (समानांतर मेमोरी-बस इंटरफेस के साथ), और उन्होंने अच्छी तरह से काम किया है।

  • NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ ) में SPI / I2C UART / IrDA / GPIO की एक पंक्ति उपलब्ध है, वह भी 1- और 2 में। -एक जोड़े वोल्टेज पर्वतमाला पर चैनल किस्मों। मैंने अतीत में इन भागों (विशेष रूप से SC16IS762) का बड़ी सफलता के साथ उपयोग किया है।

  • मैक्सिम ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 ) में MAX3110E और MAX3111E उपकरण हैं, जो SPI से जुड़े UART हैं। इन उपकरणों की एक अनूठी विशेषता यह है कि इनमें एक एकीकृत RS-232 लाइन ड्राइवर है। इसलिए, यदि आपको तर्क-स्तर के बजाय RS-232 लाइन वोल्टेज का उपयोग करने वाले डिवाइस के लिए अपने UART की आवश्यकता है (उदाहरण के लिए PC), तो यह उपयोगी हो सकता है, क्योंकि यह आपको अपने बोर्ड में एक और लाइन चालक IC जोड़ने से बचाएगा।


वाह, कभी नहीं पता था कि मैक्सिम में वे आइटम थे, अगर मैं कर सकता था +2।
टेवो डी

10

यदि आप एक हार्डवेयर समाधान की तलाश कर रहे हैं, तो मैक्सिम में माइक्रो-कंट्रोलर (जो आपके हिस्से में शामिल है) में एक SPI इंटरफ़ेस के साथ कई UART IC हैं। MAX3100 या अन्य विकल्पों को यहाँ देखें: http://www.maximintegrated.com/products/interface/controllers-expanders/uart.cfm


8

आपको एक सॉफ्टवेयर UART ड्राइवर का उपयोग करना होगा। इस UART से आप जो अपेक्षा करते हैं, उसके आधार पर, आप AVR305 (बेहद कॉम्पैक्ट, लेकिन हाफ-डुप्लेक्स सेंड / रिसीव करने से परे कोई फीचर नहीं) का उपयोग कर सकते हैं , AVR274 (बाधित चालित, काफी सुविधा पूर्ण), आप अपने खुद के सॉफ्टवेयर UART3 ड्राइवर लिख सकते हैं उदाहरण के लिए, आप इंटरनेट पर मिलने वाले एक का उपयोग कर सकते हैं, उदाहरण के लिए 'एवर सॉफ्टवेयर uart'


3

सॉफ़्टवेयर "UART" डिज़ाइन के बारे में एक संक्षिप्त टिप्पणी: आवश्यकताओं के आधार पर कम से कम गुणात्मक रूप से अलग-अलग दृष्टिकोण हो सकते हैं:

  • एक "सब कुछ ले लो" बिट-बैंग ड्राइवर सभी व्यवधानों को अक्षम करेगा और प्रत्येक बिट को देखने के लिए चक्र-गिनती कोड का उपयोग करेगा। "सब कुछ ले लो" ड्राइवर के साथ डेटा प्राप्त करने के लिए आवश्यक है कि जब डेटा आता है तो नियंत्रक कुछ भी नहीं कर रहा है लेकिन इसके लिए इंतजार कर रहा है।

  • एक "लेट ओवर मेन लूप" बिट-बैंग ड्राइवर उपरोक्त के समान व्यवहार करेगा, सिवाय इसके कि यह चक्र गणना के बजाय बिट टाइमिंग के लिए टाइमर संसाधन का उपयोग करेगा। जिन व्यवधानों को सेवा में अधिक समय नहीं लगता, उन्हें सक्षम किया जा सकता है। सीरियल ट्रांसमिशन के लिए, निश्चित दर टाइमर संसाधन को अन्य उद्देश्यों के साथ साझा किया जा सकता है; हालांकि, सीरियल रिसेप्शन के लिए, बिट-बैंग ड्राइवर को टाइमर को फिर से लोड करने में सक्षम होना होगा जब प्रारंभ बिट आता है ताकि प्रत्येक आने वाले बिट समय के बीच में समाप्त हो सके।

  • पूरी तरह से बाधित-चालित बिट-बैंग ड्राइवर एक निश्चित-दर टाइमर का उपयोग करता है जो कि कुछ डेटा दर के कुछ बहुतायत से चल रहा है (3x और 5x दोनों 4x से बेहतर हैं), और उस टाइमर के माध्यम से सब कुछ करता है। ऐसा ड्राइवर सब कुछ के साथ-साथ चला सकता है, लेकिन पूर्व ड्राइवर प्रकारों की आवश्यकता होगी की तुलना में तेजी से सीपीयू की आवश्यकता होगी।

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

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

एक बिदाई नोट: एक नियंत्रक जो डेटा प्राप्त करने के लिए बिट-बैंग उर्ट की पहली दो शैलियों में से एक का उपयोग करता है, डेटा हानि से बचने के लिए अगले बाइट्स के प्रारंभ बिट के गिरने से पहले डेटा के प्रत्येक बाइट को संसाधित करना चाहिए। यदि कंट्रोलर को पता है कि प्रोसेसिंग में कम से कम आधा समय लगेगा, तो स्टॉप बिट के लिए प्रतीक्षा करने के बजाय, अंतिम बाइट डेटा को हथियाने के साथ ही प्रत्येक बाइट को स्वीकार करते हुए प्रोसेसिंग के लिए उपलब्ध समय को अधिकतम किया जा सकता है। नियंत्रक को अधिक समय देने के एक और साधन के रूप में, हालांकि, यह उस उपकरण के लिए सहायक हो सकता है जो इसे एक के बजाय दो स्टॉप बिट्स के साथ संचारित डेटा दे रहा है। यदि "मार्क समानता" को कॉन्फ़िगर किया जा सकता है, तो यह एक अतिरिक्त अतिरिक्त समय जोड़ देगा। उदाहरण के लिए 115200-8-M-2 पर ट्रांसमिशन 57600-8-N-1 से अधिक प्रसंस्करण समय की अनुमति देगा, भले ही यह तेजी से 1.6 गुना से अधिक डेटा खिलाएगा।


1

आप बस यूसी के आई / ओ पिन का उपयोग कर सकते हैं। केवल तभी जब इन पिनों पर डेटा स्विच या ट्रांसफर किया जाए, आपको पिन की आवृत्ति बॉड दर से दोगुनी होनी चाहिए। यह UART आम तौर पर कैसे काम करता है, यह बीच में बिट सिग्नल का नमूना लेगा।

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