यहाँ हम एक ATmega8 microcontroller और Arduino Uno के बीच संचार स्थापित करने जा रहे हैं । यहाँ स्थापित संचार UART (यूनिवर्सल एसिंक्रोनस रिसिवर ट्रांसमीटर) प्रकार है। यह धारावाहिक संचार है। इस धारावाहिक द्वारा संचार डेटा को दो नियंत्रकों के बीच साझा किया जा सकता है, जो विभिन्न एम्बेडेड सिस्टम अनुप्रयोगों में आवश्यक है।
एम्बेडेड सिस्टम में हमें सिस्टम संचार के बारे में बुनियादी जानकारी होनी चाहिए, इसलिए इसके लिए हम यह प्रोजेक्ट कर रहे हैं। इस परियोजना में हम बुनियादी संचार प्रणाली पर चर्चा करेंगे और हम ट्रांसमीटर से रिसीवर में सीरियल में कुछ डेटा भेजेंगे।
इस परियोजना में ATMEGA8 एक ट्रांसमीटर के रूप में और ARDUINO UNO एक RECECIVER के रूप में कार्य करता है। सीरियल कम्युनिकेशन में हम BIT BY BIT को तब तक डेटा भेजेंगे, जब तक डेटा का BYTE पूरी तरह से ट्रांसफर नहीं हो जाता। डेटा 10bit आकार का हो सकता है, लेकिन हम अभी 8BITS के लिए रखेंगे।
अवयव आवश्यक
हार्डवेयर: ATMEGA8, ARDUINO UNO, बिजली की आपूर्ति (5v), AVR-ISP PROGRAMMER, 100uF संधारित्र (बिजली की आपूर्ति से जुड़े), 1KΩ रोकनेवाला (दो टुकड़े), LED, बटन।
सॉफ्टवेयर: Atmel स्टूडियो 6.1, progisp या फ़्लैश मैजिक, ARDUINO NIGHTLY।
सर्किट आरेख और स्पष्टीकरण
इससे पहले कि हम ट्रांसमीटर और रिसीवर के लिए सर्किट आरेख और प्रोग्रामिंग पर चर्चा करें, हमें धारावाहिक संचार के बारे में समझने की आवश्यकता है । ATMEGA यहां पहले से चर्चा किए गए अनुसार सीरियल में UNO को डेटा भेजता है।
इसके पास संचार के अन्य साधन हैं जैसे MASTER SLAVE संचार, JTAG संचार लेकिन आसान संचार के लिए हम RS232 का चयन कर रहे हैं । यहाँ हम ARDINO RO के RXD (रिसीवर) पिन के लिए ATMEGA8 का TXD (ट्रांसमीटर) पिन कनेक्ट करेंगे
स्थापित डेटा संचार के लिए क्रमादेशित है:
- आठ डेटा बिट्स
- दो बंद बिट्स
- कोई समता नहीं जाँचता
- 9600 बीपीएस की बिट दर (प्रति सेकंड बिट्स)
- एसिंक्रोनस संचार (ATMEGA8 और UNO के बीच कोई घड़ी का हिस्सा नहीं है (दोनों की अलग-अलग घड़ी इकाइयाँ हैं))
Arduino Uno और ATMEGA8 के बीच UART की स्थापना के लिए हमें सेटिंग को सटीक रूप से प्रोग्राम करने की आवश्यकता है। इसके लिए हमें उपर्युक्त मापदंडों को दोनों सिरों पर समान रखने की आवश्यकता है। इसमें एक ट्रांसमीटर और अन्य कार्य RECEIVER के रूप में कार्य करता है। हम नीचे प्रत्येक साइड सेटिंग्स पर चर्चा करेंगे।
अब RS232 इंटरफ़ेस के लिए, निम्नलिखित सुविधाओं को ट्रांसमीटर पक्ष (ATMEGA8) के लिए संतुष्ट होना चाहिए:
1. पहले नियंत्रक के TXD पिन (डेटा प्राप्त करने की सुविधा) को ट्रांसमीटर के लिए सक्षम किया जाना चाहिए।
2. चूंकि संचार धारावाहिक है, हमें यह जानने की आवश्यकता है कि जब भी डेटा बाय प्राप्त होता है, ताकि हम प्रोग्राम को पूर्ण बाइट प्राप्त होने तक रोक सकें। यह डेटा को पूर्ण व्यवधान प्राप्त करने में सक्षम करके किया जाता है।
3. DATA को 8bit मोड में नियंत्रक को प्रेषित और प्राप्त किया जाता है। इसलिए एक बार में दो अक्षर कंट्रोलर को भेजे जाएंगे।
4. कोई समता बिट्स नहीं हैं, मॉड्यूल द्वारा भेजे गए डेटा में एक स्टॉप बिट है।
उपरोक्त विशेषताएं नियंत्रक रजिस्टरों में सेट की गई हैं; हम उनसे संक्षेप में चर्चा करने जा रहे हैं:
DARK GRAY (UDRE): यह बिट स्टार्टअप के दौरान सेट नहीं किया गया है, लेकिन इसका उपयोग यह जांचने के लिए किया जाता है कि ट्रांसमीटर ट्रांसमिट करने के लिए तैयार है या नहीं। अधिक जानकारी के लिए TRASMITTER SIDE पर कार्यक्रम देखें।
VOILET (TXEN): यह बिट TRASMITTER SIDE पर ट्रांसमीटर पिन को सक्षम करने के लिए निर्धारित है।
YELLOW (UCSZ0, UCSZ1, और UCSZ2): इन तीन बिट्स का उपयोग हम डेटा बिट्स की संख्या प्राप्त करने या एक ही बार में भेजने के लिए किया जाता है।
दो SIDES के बीच संचार को आठ बिट संचार के रूप में स्थापित किया गया है। हमारे पास तालिका के साथ संचार का मिलान करके, UCSZ0, UCSZ1 को एक और UCSZ2 को शून्य कर दिया।
ORANGE (UMSEL): यह बिट इस आधार पर सेट होता है कि क्या सिस्टम एसिंक्रोनस रूप से संचार कर रहा है (दोनों अलग-अलग घड़ी का उपयोग करते हैं) या सिंक्रोनाइज़ (दोनों एक ही घड़ी का उपयोग करते हैं)।
दोनों SYTEMS किसी भी घड़ी को साझा नहीं करते हैं। चूंकि दोनों अपनी-अपनी आंतरिक घड़ी का उपयोग करते हैं। इसलिए हमें दोनों नियंत्रकों में यूएमएसईएल को 0 पर सेट करने की आवश्यकता है।
GREEN (UPM1, UPM0): ये दोनों बिट्स बिट समता के आधार पर समायोजित किए जाते हैं जिनका हम संचार में उपयोग कर रहे हैं।
यहां डेटा ATMEGA को बिना समानता के डेटा भेजने के लिए प्रोग्राम किया गया है, क्योंकि डेटा ट्रांसमिशन की लंबाई छोटी है, हम स्पष्ट रूप से डेटा हानि या त्रुटि की उम्मीद नहीं कर सकते हैं। इसलिए हम यहां कोई समता स्थापित नहीं कर रहे हैं। इसलिए हम दोनों UPM1, UPM0 को शून्य पर सेट करते हैं या उन्हें छोड़ दिया जाता है, क्योंकि सभी बिट्स डिफ़ॉल्ट रूप से 0 होते हैं।
BLUE (USBS): इस बिट का उपयोग संचार के दौरान हमारे द्वारा उपयोग किए जाने वाले स्टॉप बिट्स की संख्या को चुनने के लिए किया जाता है।
उसके द्वारा स्थापित संचार अतुल्यकालिक प्रकार का है, इसलिए अधिक सटीक डेटा ट्रांसमिशन और रिसेप्शन प्राप्त करने के लिए, हमें दो स्टॉप बिट्स का उपयोग करने की आवश्यकता है, इसलिए हमने USB को ट्रांसमीटर साइड में '1' पर सेट किया है।
बॉड दर को उचित यूबीआरआरएच चुनकर नियंत्रक में सेट किया गया है:
UBRRH मान बॉड दर और सीपीयू क्रिस्टल आवृत्ति को संदर्भित करते हुए चुना जाता है:
इसलिए क्रॉस संदर्भ द्वारा UBRR मान को '6' के रूप में देखा जाता है, और इसलिए बॉड दर निर्धारित है।
इसके साथ हमने ट्रांसमीटर साइट पर सेटिंग्स स्थापित की हैं; अब हम RECEIVING SIDE के बारे में बात करेंगे।
UNO में सक्षम धारावाहिक संचार एक एकल आदेश का उपयोग करके किया जा सकता है।
|
हमने जो संचार स्थापित करने के लिए अनुमान लगाया है वह 9600 बिट्स प्रति सेकंड की बीएयूडी दर से किया जाता है। यूएनओ के लिए इस तरह की बॉड दर को स्थापित करने और धारावाहिक संचार शुरू करने के लिए हम कमांड "सीरियल" (9600) का उपयोग करते हैं। यहाँ 9600 बॉड रेट है और परिवर्तनशील है।
अब यदि डेटा प्राप्त करने के लिए सभी को छोड़ दिया जाता है, तो एक डेटा UNO द्वारा प्राप्त किया जाता है, यह लेने के लिए उपलब्ध होगा। यह डेटा कमांड "मैडटाटा = सीरियलियल ()" द्वारा उठाया गया है। इस कमांड द्वारा सीरियल डेटा को पूर्णांक नामक 'प्राप्तकटा' पर ले जाया जाता है।
जैसा कि सर्किट में एक बटन को ट्रांसमीटर की तरफ से जुड़ा हुआ दिखाया गया है, जब एक आठ बिट डेटा दबाए गए इस बटन को ट्रांसमीटर (ATMEGA8) द्वारा भेजा जाता है और यह डेटा RECEIVER (ARDUINO UNO) को प्राप्त होता है। इस डेटा को सफलतापूर्वक प्राप्त करने पर, यह दो कंट्रोलर के बीच सफल डेटा ट्रांसफर दिखाने के लिए ON और OFF से जुड़े LED को टॉगल करता है।
ATMEGA8 नियंत्रक और ARDUINO UNO के बीच इस UART संचार द्वारा सफलतापूर्वक स्थापित किया गया है।