आप कंप्यूटर के साथ संचार के लिए USB का उपयोग करना चाहते हैं। यदि आपके पास कई माइक्रोकंट्रोलर हैं, तो आप शायद केवल एक माइक्रोकंट्रोलर को सीधे कंप्यूटर से कनेक्ट करेंगे। अन्य माइक्रोकंट्रोलर्स को अपने आदेशों को मुख्य माइक्रोकंट्रोलर से प्राप्त करने की आवश्यकता होगी।
आपके द्वारा चुना गया संचार कई कारकों पर निर्भर करेगा:
- आवश्यक बैंडविड्थ (हम मान लेंगे कि आप उन्हें 16 मेगाहर्ट्ज पर चला रहे हैं)
- जटिलता (तारों और कोडिंग)
- द्वि-दिशात्मक, या मास्टर-दास
लगभग सभी विकल्पों में एवीआर माइक्रोकंट्रोलर पर अंतर्निहित समर्थन है। ऐसा कोई विकल्प नहीं है जिसे आप यथोचित रूप से निर्मित विकल्पों पर पसंद कर सकते हैं जिन्हें अतिरिक्त हार्डवेयर की आवश्यकता होगी। क्योंकि उनके पास अंतर्निहित समर्थन है, सॉफ्टवेयर जटिलता सभी समान है, इसमें आप केवल पोर्ट (रजिस्टरों का उपयोग करके) कॉन्फ़िगर करते हैं, डेटा को दूसरे रजिस्टर में संचारित करने के लिए डालते हैं, फिर दूसरे रजिस्टर में थोड़ा सा सेट करके ट्रांसमिशन को ट्रिगर करें। प्राप्त कोई भी डेटा किसी अन्य रजिस्टर में पाया जाता है, और एक बाधा उत्पन्न होती है जिससे आप इसे संभाल सकते हैं। आप जो भी विकल्प चुनते हैं, एकमात्र अंतर रजिस्टर स्थानों में परिवर्तन और कॉन्फ़िगरेशन रजिस्टरों में कुछ परिवर्तन है।
एक USART लूप में निम्नलिखित विशेषताएं हैं:
- सीएलके की अधिकतम बॉड दर / 16 = 1 मेगाहर्ट्ज (16 मेगाहर्ट्ज घड़ी पर) जो लगभग 90KB / s की अंतरण दर है
- पूरी तरह से द्वि-दिशात्मक संचार (कोई मास्टर या दास पदनाम)
- माइक्रोकंट्रोलर्स की प्रत्येक जोड़ी के बीच अलग-अलग तारों की आवश्यकता होती है - Atmega32u4 दो USART पोर्ट का मूल रूप से समर्थन करता है, माइक्रोकंट्रोलर की संख्या को सीमित करता है जिसे आप अभ्यास में नेटवर्क से कनेक्ट कर सकते हैं (या फिर आप माइक्रो-सर्किटर्स के लंबे स्ट्रिंग के साथ समाप्त होते हैं - यानी एक लिंक की गई सूची में जुड़ा हुआ है)। तौर तरीका)
नोट: यह वह भी है जिसे आप RS232 संचार प्राप्त करने के लिए उपयोग करेंगे, सिवाय इसके कि RS232 को 10V की आवश्यकता होती है, इसके लिए उन वोल्टेज स्तरों को प्राप्त करने के लिए ड्राइवर की आवश्यकता होती है। माइक्रोकंट्रोलर्स के बीच संचार के लिए, यह उपयोगी नहीं है (केवल वोल्टेज का स्तर बदल जाता है)।
485 रुपये:
- अनिवार्य रूप से, आप एक अलग मोड में USART पोर्ट का उपयोग करते हैं - बैंडविड्थ में कोई फायदा नहीं है, और यह केवल तारों को थोड़ा सरल कर सकता है, लेकिन यह इसे जटिल भी करता है। यह अनुशंसित नहीं है।
दो-तार इंटरफ़ेस:
इसे I2C भी कहा जाता है। इसका मतलब है कि सभी डिवाइस समान दो तारों को साझा करते हैं।
आपको दोनों तारों पर पुल-अप रोकनेवाला चाहिए
यह धीमा है (क्योंकि पुल-अप प्रतिरोधों को मूल्य में सीमित किया गया है, और बढ़ती समाई है क्योंकि उपकरणों की संख्या बढ़ जाती है, और तार की लंबाई बढ़ जाती है)। इस AVR माइक्रोकंट्रोलर के लिए, गति 400 kHz तक है - USART की तुलना में धीमी (लेकिन यह गति आपके समाई को सीमित करने पर निर्भर करती है)। कारण यह है कि यद्यपि एक उपकरण डेटा तार को कम ड्राइव करता है, विपरीत संक्रमण तार को फिर से उच्च गति (पुल-अप रोकनेवाला) की अनुमति देकर पूरा किया जाता है।
यह तब भी धीमा है जब आप समझते हैं कि सभी संचार समान सीमित बैंडविड्थ को साझा करते हैं। क्योंकि सभी संचार एक ही सीमित बैंडविड्थ को साझा करते हैं, संचार में देरी हो सकती है जहां डेटा को तब तक इंतजार करना होगा जब तक नेटवर्क निष्क्रिय न हो जाए। यदि अन्य डेटा लगातार भेजा जा रहा है, तो यह कभी भी भेजे जाने वाले डेटा को अवरुद्ध भी कर सकता है।
यह एक मास्टर-दास प्रोटोकॉल पर निर्भर करता है, जहां एक मास्टर एक दास को संबोधित करता है, फिर एक आदेश / अनुरोध भेजता है, और दास आगे की ओर जवाब देता है। एक समय में केवल एक उपकरण संचार कर सकता है, इसलिए दास को मास्टर के समाप्त होने की प्रतीक्षा करनी चाहिए।
कोई भी उपकरण गुरु और / या दास दोनों के रूप में कार्य कर सकता है, जिससे यह काफी लचीला हो जाता है।
एसपीआई
यह वही है जो मैं माइक्रोकंट्रोलर्स के बीच सामान्य संचार के लिए सुझा / उपयोग करूंगा।
यह उच्च गति है - सीएलके / 2 = 8 मेगाहर्ट्ज (16 मेगाहर्ट्ज पर सीएलके के लिए), यह सबसे तेज विधि है। यह पूरी तरह से घड़ी के लिए अलग तार की वजह से प्राप्त करने योग्य है।
MOSI, MISO डेटा और SCK घड़ी के तारों को पूरे नेटवर्क पर साझा किया जाता है, जिसका अर्थ है कि इसमें सरल वायरिंग है।
यह एक मास्टर-स्लेव प्रारूप है, लेकिन कोई भी उपकरण मास्टर और / या दास हो सकता है। हालाँकि, दास चयन जटिलताओं के कारण, साझा वायरिंग (नेटवर्क के भीतर) के लिए, आपको इसका उपयोग केवल एक पदानुक्रमित तरीके से (दो-तार इंटरफ़ेस के विपरीत) करना चाहिए। अर्थात। यदि आप सभी उपकरणों को एक पेड़ में व्यवस्थित करते हैं, तो एक उपकरण केवल अपने बच्चों के लिए मास्टर होना चाहिए, और केवल अपने माता-पिता के लिए एक दास होना चाहिए। इसका मतलब है कि दास मोड में, एक उपकरण में हमेशा एक ही मास्टर होगा। इसके अलावा, इसे सही ढंग से करने के लिए, आपको अपस्ट्रीम मास्टर के लिए MISO / MOSI / SCK के लिए प्रतिरोधकों को जोड़ने की जरूरत है, ताकि यदि डिवाइस डाउनस्ट्रीम (जब एक गुलाम के रूप में नहीं चुना जाता है) से संचार कर रहा है, तो संचार अन्य भागों में संचार को प्रभावित नहीं करेगा। नेटवर्क (प्रतिरोधों का उपयोग करके आप यह कर सकते हैं स्तरों की संख्या सीमित है, दोनों SPI बंदरगाहों का उपयोग कर बेहतर समाधान के लिए नीचे देखें)।
AVR माइक्रोकंट्रोलर स्वचालित रूप से MOSI सिग्नल को त्रि-राज्य कर सकता है जब यह गुलाम-चयनित होता है, और स्लेव मोड में स्विच होता है (यदि मास्टर में)।
भले ही इसके लिए एक पदानुक्रमित नेटवर्क की आवश्यकता हो, लेकिन अधिकांश नेटवर्क को पेड़ की तरह से व्यवस्थित किया जा सकता है, इसलिए यह आमतौर पर महत्वपूर्ण स्वच्छता नहीं है
उपरोक्त को थोड़ा आराम दिया जा सकता है, क्योंकि प्रत्येक एवीआर माइक्रोकंट्रोलर दो अलग-अलग एसपीआई पोर्ट का समर्थन करता है, इसलिए प्रत्येक डिवाइस में दो अलग-अलग नेटवर्क में अलग-अलग स्थिति हो सकती है।
यह कहने के बाद, यदि आपको अपने पेड़ / पदानुक्रम (2 से अधिक) में कई स्तरों की आवश्यकता होती है, तो प्रतिरोधों का उपयोग करने वाले उपरोक्त समाधान को काम करने के लिए बहुत अधिक सावधानी से प्राप्त किया जाता है। इस मामले में, आपको पेड़ की प्रत्येक परत के बीच SPI नेटवर्क को बदलना चाहिए। इसका मतलब है कि प्रत्येक डिवाइस एक एसपीआई नेटवर्क पर अपने बच्चों से जुड़ेगा, और दूसरे एसपीआई नेटवर्क पर उसके माता-पिता। हालांकि इसका मतलब है कि आपके पास केवल कनेक्शन का एक ही पेड़ है, लाभ यह है कि एक उपकरण एक ही समय में अपने बच्चों और उसके माता-पिता दोनों के साथ संवाद कर सकता है और आपके पास फ़िडली प्रतिरोधक नहीं हैं (हमेशा सही मान चुनने में कठिन) ।
क्योंकि इसमें अलग MOSI और MISO तार हैं, दोनों मास्टर और दास एक ही समय में संचार कर सकते हैं, जिससे यह गति में दो वृद्धि का संभावित कारक है। प्रत्येक अतिरिक्त दास के लिए दास-चयन के लिए एक अतिरिक्त पिन की आवश्यकता होती है, लेकिन यह एक बड़ा बोझ नहीं है, यहां तक कि 10 अलग-अलग दासों को केवल 10 अतिरिक्त पिनों की आवश्यकता होती है, जिसे एक विशिष्ट एवीआर माइक्रोकंट्रोलर पर आसानी से समायोजित किया जा सकता है।
आपके द्वारा निर्दिष्ट AVR माइक्रोकंट्रोलर द्वारा CAN का समर्थन नहीं किया जाता है। जैसा कि अन्य अच्छे विकल्प हैं, वैसे भी इस मामले में यह महत्वपूर्ण नहीं है।
सिफारिश एसपीआई है , क्योंकि यह तेज है, वायरिंग बहुत जटिल नहीं है, और इसके लिए फिडली पुल-अप प्रतिरोधों की आवश्यकता नहीं है। दुर्लभ मामले में जहां SPI आपकी आवश्यकताओं को पूरा नहीं करता है (शायद अधिक जटिल नेटवर्क में), आप कई विकल्पों का उपयोग कर सकते हैं (जैसे, दो SPI पोर्ट का उपयोग करें, दो-तार इंटरफ़ेस के साथ-साथ कुछ माइक्रोकंट्रोलर की जोड़ी भी। एक USART लूप का उपयोग कर! "
आपके मामले में, SPI का उपयोग करने का अर्थ है कि स्वाभाविक रूप से, कंप्यूटर के लिए USB कनेक्शन वाला माइक्रोकंट्रोलर मास्टर हो सकता है, और यह कंप्यूटर से प्रत्येक दास डिवाइस के लिए प्रासंगिक आदेशों को अग्रेषित कर सकता है। यह प्रत्येक दास से अपडेट / माप भी पढ़ सकता है और इन्हें कंप्यूटर पर भेज सकता है।
8MHz, और 0.5m तार की लंबाई पर, मुझे नहीं लगता कि यह एक समस्या बन जाएगी। लेकिन अगर ऐसा है, तो कैपेसिटेंस से अधिक सावधान रहने की कोशिश करें (ग्राउंड और सिग्नल तारों को बहुत पास रखें, और विभिन्न कंडक्टरों के बीच कनेक्शन से सावधान रहें), और सिग्नल समाप्ति भी। अप्रत्याशित घटना में कि यह एक समस्या बनी हुई है, आप घड़ी की दर को कम कर सकते हैं, लेकिन मुझे नहीं लगता कि यह आवश्यक है।