इस ट्यूटोरियल में हम दो ATMEGA8 माइक्रोकंट्रोलर्स के बीच एक धारावाहिक संचार स्थापित करने जा रहे हैं । यहाँ स्थापित संचार UART (यूनिवर्सल एसिंक्रोनस रिसिवर ट्रांसमीटर) प्रकार है। इस धारावाहिक द्वारा संचार डेटा को दो माइक्रोकंट्रोलर्स के बीच साझा किया जा सकता है, जिसकी आवश्यकता विभिन्न एम्बेडेड सिस्टम्स में होती है।
अवयव आवश्यक
हार्डवेयर: ATMEGA8 (2 टुकड़े), बिजली की आपूर्ति (5v), AVR-ISP PROGRAMMER, 100uF संधारित्र (बिजली की आपूर्ति से जुड़े), 1KΩ रोकनेवाला (दो टुकड़े), LED, बटन।
सॉफ्टवेयर: Atmel स्टूडियो 6.1, progisp या फ़्लैश मैजिक।
सर्किट आरेख और स्पष्टीकरण
आइए हम AVR माइक्रोकंट्रोलर्स में सीरियल संचार को समझते हैं । यहाँ ATMEGA दूसरे ATMEGA को सीरियल में डेटा भेजता है। इसमें संचार की अन्य विधा है लेकिन आसान संचार के लिए हम RS232 को चुन रहे हैं। पहला ATMEGA8 का RS232 पिन दूसरे ATMEGA8 के RXD पिन से जुड़ा है।
स्थापित डेटा संचार के लिए क्रमादेशित है:
- आठ डेटा बिट्स
- दो बंद बिट्स
- कोई समता नहीं जाँचता
- 2400 BPS की दर (प्रति सेकंड बिट्स)
- अतुल्यकालिक संचार (दो ATMEGA8 के बीच कोई घड़ी का हिस्सा नहीं)
इसलिए हमारे पास दो ATMEGA8 के लिए अलग-अलग दो सेट रजिस्टर हैं, जहां एक ट्रांसमीटर के रूप में और दूसरा RECEIVER के रूप में कार्य करता है।
अब RS232 दो ATmega माइक्रोकंट्रोलर के बीच अंतर करने के लिए, निम्नलिखित सुविधाओं को ट्रांसमीटर और RECEIVER के लिए संतुष्ट होना चाहिए:
1. पहले नियंत्रक के TXD पिन (डेटा प्राप्त करने की सुविधा) को ट्रांसमीटर के लिए सक्षम किया जाना चाहिए और दूसरे नियंत्रक के RXD पिन को RECEIVER के लिए सक्षम किया जाना चाहिए।
2. चूंकि संचार धारावाहिक है, हमें यह जानने की आवश्यकता है कि जब भी डेटा बाइट प्राप्त होता है, ताकि हम पूर्ण बाइट प्राप्त होने तक कार्यक्रम को रोक सकें। यह डेटा को पूर्ण व्यवधान प्राप्त करने में सक्षम करके किया जाता है।
3. DATA को 8bit मोड में नियंत्रक को प्रेषित और प्राप्त किया जाता है। इसलिए एक बार में दो अक्षर कंट्रोलर को भेजे जाएंगे।
4. कोई समता बिट्स नहीं हैं, मॉड्यूल द्वारा भेजे गए डेटा में एक स्टॉप बिट है।
उपरोक्त विशेषताएं नियंत्रक रजिस्टरों में सेट की गई हैं; हम उनकी संक्षिप्त चर्चा करने जा रहे हैं,
DARK GRAY (UDRE): (TRASMITTER SIDE) यह बिट स्टार्टअप के दौरान सेट नहीं किया गया है, लेकिन इसका उपयोग यह जांचने के लिए किया जाता है कि ट्रांसमीटर ट्रांसमिशन के लिए तैयार है या नहीं। अधिक जानकारी के लिए TRASMITTER SIDE पर कार्यक्रम देखें।
LIGHT GRAY (RXC): (प्राप्त करने की विधि) यह बिट स्टार्टअप के दौरान सेट नहीं किया जाता है, लेकिन इसका उपयोग यह जांचने के लिए किया जाता है कि रिसीवर डेटा प्राप्त करने के लिए तैयार है या नहीं। अधिक जानकारी के लिए RECEIVING SIDE पर कार्यक्रम देखें।
VOILET (TXEN): (TRASMITTER SIDE) यह बिट TRASMITTER SIDE पर ट्रांसमीटर पिन को सक्षम करने के लिए निर्धारित है।
RED (RXEN): (RECEIVING SIDE) यह बिट डेटा फीचर को दर्शाता है, इस बिट को कंट्रोलर द्वारा प्राप्त किए जाने वाले मॉड्यूल से डेटा के लिए सेट किया जाना चाहिए, यह कंट्रोलर के RXD पिन को भी सक्षम करता है।
BROWN (RXCIE): सफल डेटा रिसेप्शन के बाद एक अंतर प्राप्त करने के लिए इस बिट को सेट किया जाना चाहिए। इस बिट को सक्षम करके हमें पता चलता है, 8 बिट डेटा प्राप्त होने के ठीक बाद। हम इस बिट का उपयोग यहां नहीं करने वाले हैं इसलिए इसे अकेला छोड़ दिया गया है।
PINK (URSEL): UCSRC में अन्य बिट्स को सक्षम करने से पहले यह सेट किया जाना चाहिए, UCSRC में अन्य आवश्यक बिट्स सेट करने के बाद; URSEL को निष्क्रिय किया जाना चाहिए या शून्य पर रखा जाना चाहिए। हम इस बिट का उपयोग यहां नहीं करने वाले हैं इसलिए इसे अकेला छोड़ दिया गया है।
YELLOW (UCSZ0, UCSZ1, UCSZ2): (प्राप्त वीडियो और परीक्षण साइट) इन तीन बिट्स हम एक ही बार में प्राप्त कर रहे हैं या भेज रहे डेटा बिट्स की संख्या का चयन करने के लिए उपयोग किया जाता है।
दो ATMEGA के बीच संचार को आठ बिट संचार के रूप में स्थापित किया गया है। हमारे पास तालिका के साथ संचार का मिलान करके, UCSZ0, UCSZ1 को एक और UCSZ2 को शून्य कर दिया।
हमें इन्हें प्राप्त करने और प्रसारित करने दोनों ओर सेट करना होगा।
ORANGE (UMSEL): (SIDE & TRASMITTER SIDE प्राप्त करना) यह बिट इस बात पर आधारित है कि क्या सिस्टम एसिंक्रोनस रूप से संचार कर रहा है (दोनों अलग-अलग घड़ी का उपयोग करते हैं) या सिंक्रोनाइज़ (दोनों एक ही घड़ी का उपयोग करते हैं)।
दोनों नियंत्रक किसी भी घड़ी को साझा नहीं करते हैं। चूंकि दोनों अपनी-अपनी आंतरिक घड़ी का उपयोग करते हैं। इसलिए हमें दोनों नियंत्रकों में यूएमएसईएल को 0 पर सेट करने की आवश्यकता है।
GREEN (UPM1, UPM0): (SIDE & TRASMITTER SIDE प्राप्त करना) ये दोनों बिट्स बिट समता के आधार पर समायोजित किए गए हैं जिनका हम संचार में उपयोग कर रहे हैं।
ATMEGA को बिना समता के डेटा भेजने के लिए प्रोग्राम किया जाता है, क्योंकि डेटा ट्रांसमिशन की लंबाई छोटी है, हम स्पष्ट रूप से डेटा हानि या त्रुटि की उम्मीद नहीं कर सकते हैं। इसलिए हम यहां कोई समता स्थापित नहीं कर रहे हैं। इसलिए हम दोनों UPM1, UPM0 को शून्य पर सेट करते हैं या उन्हें छोड़ दिया जाता है, क्योंकि सभी बिट्स डिफ़ॉल्ट रूप से 0 होते हैं।
BLUE (USBS): (प्राप्त वीडियो और TRASMITTER SIDE) इस बिट का उपयोग संचार के दौरान हमारे द्वारा उपयोग किए जाने वाले स्टॉप बिट्स की संख्या को चुनने के लिए किया जाता है।
यहां स्थापित संचार अतुल्यकालिक प्रकार का है, इसलिए अधिक सटीक डेटा ट्रांसमिशन और रिसेप्शन प्राप्त करने के लिए, हमें दो स्टॉप बिट्स का उपयोग करने की आवश्यकता है, इसलिए हम दोनों नियंत्रकों में यूएसबी को '1' पर सेट करते हैं।
बॉड दर को उचित UBRRH चुनकर नियंत्रक में सेट किया गया है।
UBRRH मान को बॉड दर और CPU क्रिस्टल आवृत्ति को संदर्भित करके चुना जाता है।
इसलिए क्रॉस संदर्भ द्वारा UBRR मान को '25' के रूप में देखा जाता है, और इसलिए बॉड दर निर्धारित है।
जैसा कि सर्किट में दिखाया गया है एक बटन ट्रांसमीटर की तरफ से जुड़ा हुआ है। जब एक आठ बिट डेटा दबाया गया यह बटन ट्रांसमीटर द्वारा भेजा जाता है और यह डेटा RECEIVER द्वारा प्राप्त किया जाता है। इस डेटा को सफलतापूर्वक प्राप्त करने पर, यह चालू और बंद एलईडी से जुड़ा हुआ है, जो दो नियंत्रक के बीच सफल डेटा स्थानांतरण दिखाता है।