- UART संचार की मूल बातें
- हार्डवेयर की आवश्यकता और सेटअप
- Nuvoton N76E003 UART संचार के लिए सर्किट आरेख
- नुवोटन N76E003 माइक्रोकंट्रोलर पर UART पिन
- UART रजिस्टर Nuvoton N76E003 माइक्रोकंट्रोलर में
- N76E003 में UART ऑपरेटिंग मोड
- UART संचार के लिए प्रोग्रामिंग Nuvoton N76E003
UART का मतलब यूनिवर्सल एसिंक्रोनस रिसिवर / ट्रांसमीटर है और यह किसी भी माइक्रोकंट्रोलर यूनिट में एक उपयोगी हार्डवेयर फीचर है। एक माइक्रोकंट्रोलर को डेटा प्राप्त करने, इसे संसाधित करने और इसे अन्य उपकरणों पर भेजने की आवश्यकता होती है। माइक्रोकंट्रोलर में विभिन्न प्रकार के संचार प्रोटोकॉल उपलब्ध हैं, हालांकि, SPI और I2C जैसे अन्य संचार प्रोटोकॉल में UART का सबसे अधिक उपयोग किया जाता है। यदि किसी को धारावाहिक रूप से डेटा प्राप्त करना या प्रसारित करना है, तो UART हमेशा सबसे सरल और सामान्य विकल्प है। UART का लाभ यह है कि उपकरणों के बीच डेटा संचारित करने के लिए केवल दो तारों की आवश्यकता होती है। हमारे Nuvoton माइक्रोकंट्रोलर ट्यूटोरियल के साथ जारी रखना, इस लेख में, हम सीखेंगे कि N76E003 माइक्रोकंट्रोलर का उपयोग करके धारावाहिक संचार कैसे करें।
UART संचार की मूल बातें
अब, जैसा कि हम जानते हैं कि UART क्या है, UART के संबंधित मापदंडों को जानना महत्वपूर्ण है।
दो UART उपकरण समान आवृत्ति पर डेटा प्राप्त करते हैं और संचारित करते हैं। जब UART डिवाइस प्राप्त करने वाला स्टार्ट बिट का पता लगाता है, तो यह आने वाली बिट्स को बॉड दर के रूप में ज्ञात एक विशिष्ट आवृत्ति पर पढ़ना शुरू करता है। UART संचार के लिए बॉड दर एक महत्वपूर्ण चीज है और इसका उपयोग बिट्स प्रति सेकंड (बीपीएस) में डेटा ट्रांसफर की गति को मापने के लिए किया जाता है। यह बॉड दर गति, संचारित और प्राप्त करने के लिए, उसी बॉड दर पर होनी चाहिए। बिट्स के समय से बहुत दूर होने से पहले UARTs को प्रेषित करने और प्राप्त करने के बीच बॉड दर में अंतर केवल 10% हो सकता है। सबसे लोकप्रिय बॉड दर गति 4800, 9600, 115200 बीपीएस, आदि हैं। पहले हमने कई अन्य माइक्रोकंट्रोलर में UART संचार का उपयोग किया है जो नीचे सूचीबद्ध हैं।
- ATmega8 और Arduino Uno के बीच UART संचार
- दो ATmega8 माइक्रोकंट्रोलर्स के बीच UART संचार
- UART संचार PIC Microcontrollers का उपयोग कर
- UART STM8S माइक्रोकंट्रोलर पर संचार
N76E003 में दो UARTs - UART0 और UART1 हैं । इस ट्यूटोरियल में, हम N76E003 माइक्रोकंट्रोलर यूनिट पर UART के परिधीय का उपयोग करेंगे । ज्यादा समय बर्बाद किए बिना, आइए मूल्यांकन करें कि इस एप्लिकेशन के लिए हमें किस प्रकार के हार्डवेयर सेटअप की आवश्यकता है।
हार्डवेयर की आवश्यकता और सेटअप
इस परियोजना के लिए आवश्यक प्रमुख घटक USB से UART या TTL कनवर्टर मॉड्यूल है जो पीसी या लैपटॉप के बीच आवश्यक इंटरफ़ेस को माइक्रोकंट्रोलर मॉड्यूल के साथ बनाएगा। इस परियोजना के लिए, हम CP2102 आधारित USB का उपयोग UART मॉड्यूल के लिए करेंगे जो नीचे दिखाया गया है।
उल्लेख करने के लिए नहीं, उपरोक्त घटक के अलावा, हमें N76E003 माइक्रोकंट्रोलर आधारित विकास बोर्ड के साथ-साथ नू- लिंकमर की आवश्यकता है । यदि प्रोग्रामर को पावर स्रोत के रूप में उपयोग नहीं किया जाता है तो अतिरिक्त 5V बिजली आपूर्ति इकाई की आवश्यकता हो सकती है।
Nuvoton N76E003 UART संचार के लिए सर्किट आरेख
जैसा कि हम नीचे विकास बोर्ड योजनाबद्ध में देख सकते हैं, माइक्रोकंट्रोलर यूनिट के 2 और 3 पिन क्रमशः UART0 Tx और Rx के रूप में उपयोग किया जाता है। चरम बाईं ओर, प्रोग्रामिंग इंटरफ़ेस कनेक्शन दिखाया गया है।
नुवोटन N76E003 माइक्रोकंट्रोलर पर UART पिन
N76E003 में 20 पिन हैं, जिसमें से 4 पिन का उपयोग UART संचार के लिए किया जा सकता है। नीचे दी गई छवि UART के पिन को लाल वर्ग बॉक्स (Rx) और ब्लू स्क्वायर बॉक्स (Tx) में दिखाया गया है।
UART0 के लिए, पिन 2 और 3 का उपयोग UART संचार के लिए किया जाता है, और UART1 के लिए, पिन 8 और पिन 18 का उपयोग संचार के लिए किया जाता है।
UART रजिस्टर Nuvoton N76E003 माइक्रोकंट्रोलर में
N76E003 में दो पूर्ण-द्वैध UARTs हैं जिनमें स्वचालित पता पहचान और फ़्रेमिंग त्रुटि का पता लगाना है - UART0 और UART1। इन दो UART को दो अलग UART में वर्गीकृत रजिस्टरों का उपयोग करके नियंत्रित किया जाता है। UART के संचालन के लिए N76E003 में RX और TX पिन के दो जोड़े उपलब्ध हैं। इस प्रकार संचालन के लिए वांछित UART पोर्ट का चयन करना पहला कदम है।
इस ट्यूटोरियल में, हम UART0 का उपयोग करेंगे , इस प्रकार कॉन्फ़िगरेशन केवल UART0 के लिए दिखाया जाएगा। UART1 का विन्यास समान होगा लेकिन रजिस्टर अलग होंगे।
एक UART (इस मामले में UART0) का चयन करने के बाद, RX / TX संचार के लिए उपयोग किए जाने वाले I / O पिन को इनपुट और आउटपुट के रूप में कॉन्फ़िगर करने की आवश्यकता होती है। UART0 का RX पिन माइक्रोकंट्रोलर का पिन 3 है जो पोर्ट 0.7 है। जैसा कि यह एक सीरियल पोर्ट पिन है, पोर्ट 0.7 को इनपुट के रूप में सेट करने की आवश्यकता है। दूसरी ओर, पोर्ट 0.6 जो कि माइक्रोकंट्रोलर का दूसरा पिन है, एक ट्रांसमिटेड पिन या आउटपुट पिन है। इसे क्वैसी बिडायरेक्शनल मोड के रूप में सेट करने की आवश्यकता है। इन्हें PxM1 और PxM2 रजिस्टर का उपयोग करके चुना जा सकता है। ये दो रजिस्टर I / O मोड सेट करते हैं जहां x पोर्ट नंबर के लिए खड़ा है (उदाहरण के लिए, पोर्ट P1.0 रजिस्टर P1M1 और P1M2 होगा, P3.0 के लिए यह P3M1 और P3M2, आदि होगा) कॉन्फ़िगरेशन हो सकता है निचे इमेज में देखे-
N76E003 में UART ऑपरेटिंग मोड
फिर, अगला चरण UART के संचालन के मोड को निर्धारित करना है । दो UARTs 4 मोड में काम कर सकते हैं। मोड हैं-
जैसा कि हम देख सकते हैं, SM0 और SM1 (SCON रजिस्टर का 7 वां और 6 वां बिट) UART ऑपरेशन के मोड का चयन करते हैं। मोड 0 सिंक्रोनस ऑपरेशन है और अन्य तीन मोड एसिंक्रोनस ऑपरेशन हैं । हालांकि, बौड रेट जनरेटर और फ़्रेम बिट्स प्रत्येक सीरियल पोर्ट मोड के लिए अलग-अलग हैं। किसी भी मोड को आवेदन की आवश्यकता के अनुसार चुना जा सकता है और UART1 के लिए भी यही है। इस ट्यूटोरियल के लिए, 32 या 16 से विभाजित टाइमर 3 ओवरफ्लो दर के साथ 10 बिट्स ऑपरेशन का उपयोग किया जाता है।
अब, यह जानकारी प्राप्त करने और UART0 के लिए SCON रजिस्टर (UART1 के लिए SCON_1) को कॉन्फ़िगर करने का समय है ।
6 और 7 बिट थोड़ा UART मोड सेट करेगा जैसा कि पहले चर्चा किया गया था। विकल्पों को सक्षम करने के लिए मल्टीप्रोसेसर संचार मोड को सेट करने के लिए बिट 5 का उपयोग किया जाता है। हालांकि, यह प्रक्रिया उस पर निर्भर है जिस पर UART मोड का चयन किया गया है। इनके अतिरिक्त, ren सा स्वागत सक्षम करने के लिए 1 पर सेट हो जाएगा और टीआई ध्वज के लिए 1 पर सेट हो जाएगा printf समारोह कस्टम UART0 संचारित समारोह के स्थान पर प्रयोग किया जाना है।
अगला महत्वपूर्ण रजिस्टर पावर कंट्रोल रजिस्टर (PCON) (टाइमर 3 बिट 7 और UART1 के लिए 6) रजिस्टर है। यदि आप टाइमर के लिए नए हैं, तो N76E003 माइक्रोकंट्रोलर पर टाइमर का उपयोग करने के तरीके को समझने के लिए Nuvoton N76E003 टाइमर ट्यूटोरियल देखें।
UART0 मोड 1 में डबल बॉड दर का चयन करने के लिए SMOD बिट महत्वपूर्ण है। अब, जैसा कि हम टाइमर 3 का उपयोग कर रहे हैं, टाइमर 3 नियंत्रण रजिस्टर T3CON को कॉन्फ़िगर करने की आवश्यकता है। हालांकि, बिट 7 वें और 6 वें UART1 के लिए दोहरी डेटा दर सेटिंग के लिए आरक्षित हैं।
और टाइमर 3 पूर्व-स्केलर मूल्य-
5 वीं बिट बीआरसीके यूएआर 1 के लिए बॉडर रेट घड़ी स्रोत के रूप में 3 टाइमर सेट करेगा। अब, N76E003 की डेटशीट को वांछित बॉड दर और साथ ही टाइमर 3 (16-बिट्स) हाई और लो रजिस्टरों के लिए नमूना सेट मान की गणना के लिए सूत्र दिया गया है।
16 मेगाहर्ट्ज घड़ी स्रोत के लिए नमूना मूल्य-
इस प्रकार बॉड दर को उपरोक्त सूत्र का उपयोग करके टाइमर 3 रजिस्टर में कॉन्फ़िगर करने की आवश्यकता है। हमारे मामले के लिए, यह फॉर्मूला 4 होगा। इसके बाद, TR3 रजिस्टर को 1 पर सेट करके टाइमर 3 शुरू करने से UART0 इनिशियलाइज़ेशन खत्म हो जाएगा। 3. नीचे दिए गए रजिस्टर का उपयोग करने के लिए UART0 डेटा प्राप्त करना और भेजना-
SBUF रजिस्टर स्वचालित रूप से प्राप्त करें और संचारित के लिए कॉन्फ़िगर हो जाता है। UART से डेटा प्राप्त करने के लिए, RI ध्वज के लिए 1 सेट करने के लिए प्रतीक्षा करें और SBUF रजिस्टर पढ़ें और UART0 को डेटा भेजने के लिए, SBUF को डेटा भेजें और TI ध्वज की प्रतीक्षा करें 1 को सफल डेटा ट्रांसमिशन की पुष्टि करने के लिए प्राप्त करें।
UART संचार के लिए प्रोग्रामिंग Nuvoton N76E003
कोडिंग भाग सरल है और इस ट्यूटोरियल में उपयोग किया गया पूरा कोड इस पृष्ठ के नीचे पाया जा सकता है। कोड की व्याख्या इस प्रकार है, मुख्य समारोह में कथन का उपयोग करते हुए UART0 को 9600 बॉड दरों पर आरम्भ किया गया है-
आरम्भिक UART0_Timer3 (9600);
उपरोक्त फ़ंक्शन को सामान्य . c फ़ाइल में परिभाषित किया गया है और यह UART0 को टाइमर 3 के साथ बॉड दर स्रोत के रूप में, मोड 1 में और बॉड दर 9600 के साथ कॉन्फ़िगर कर रहा है। फ़ंक्शन की परिभाषा इस प्रकार है-
void InitialUART0_Timer3 (UINT32 u32Baudrate) // टाइमर 3 का उपयोग बॉड्रेट जनरेटर { P06_Quasi_Mode के रूप में करें; // P07_Input_Mode संचारित करने के लिए क्वैसी मोड के रूप में UART पिन सेट करना ; // SCON = 0x50 प्राप्त करने के लिए इनपुट मोड के रूप में UART पिन सेट करना ; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 डबल दर सक्षम करें T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 बॉड दर घड़ी स्रोत = टाइमर 3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 मेगाहर्ट्ज * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16.6 मेगाहर्ट्ज * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /* 16.6 मेगाहर्ट्ज * / #endif set_TR3; // ट्रिगर टाइमर 3 set_TI; // प्रिंटफ फ़ंक्शन के लिए TI = 1 } सेट करना होगा
घोषणा कदम से कदम के रूप में पहले चर्चा की है और रजिस्टर तदनुसार कॉन्फ़िगर कर रहे हैं। हालाँकि, N76E003 के बीएसपी पुस्तकालय में, P07_Input_Mode के बजाय एक बग है ; वहाँ P07_Quasi_Mode । इसके कारण, UART प्राप्त फ़ंक्शन काम नहीं करेगा।
बॉड दर भी बॉड दर इनपुट के अनुसार कॉन्फ़िगर किया गया है और डेटाशीट द्वारा दिए गए सूत्र का उपयोग कर रहा है। अब, मुख्य फ़ंक्शन या जबकि लूप में , प्रिंटफ फ़ंक्शन का उपयोग किया जाता है। Printf फ़ंक्शन का उपयोग करने के लिए, TI को 1 के रूप में सेट करने की आवश्यकता है। इसके अलावा, लूप में , एक स्विच केस का उपयोग किया जाता है और UART के प्राप्त आंकड़ों के अनुसार, मूल्य मुद्रित होता है।
जबकि (1) { प्रिंटफ ("\ r \ n टिप 1 या प्रेस 2 या प्रेस 3 या प्रेस 4"); oper = Receive_Data_From_UART0 (); स्विच (ऑपरेशन) { केस '1': प्रिंटफ ("\ r \ n1 दबाया जाता है"); टूटना; मामला '2': प्रिंटफ ("\ r \ n2 दबाया जाता है"); टूटना; मामला '3': प्रिंटफ ("\ r \ n3 दबाया जाता है"); टूटना; मामला '4': प्रिंटफ ("\ r \ n4 दबाया जाता है"); टूटना; डिफ़ॉल्ट: प्रिंटफ ("\ r \ nWrong कुंजी दबाया गया"); } टाइमर0_देल 1ms (300); } }
खैर, UART0 के लिए Receive_Data_From_UART0 () प्राप्त करें ; फ़ंक्शन का उपयोग किया जाता है। इसे सामान्य सी । लाइब्रेरी में भी परिभाषित किया गया है।
UINT8 Receive_Data_From_UART0 (शून्य) { UINT8 c; जबकि (आरआई); c = SBUF; आरआई = 0; वापसी (ग); }
यह RI ध्वज के लिए 1 प्राप्त करने और चर c का उपयोग करके प्राप्त डेटा को वापस करने का इंतजार करेगा।
कोड और आउटपुट चमकती
कोड 0 चेतावनी और 0 त्रुटियां लौटाता है और Keil द्वारा डिफ़ॉल्ट चमकती विधि का उपयोग करके फ्लैश किया जाता है। यदि आप सुनिश्चित नहीं हैं कि कोड को कैसे संकलित और अपलोड किया जाए, तो nuvoton लेख के साथ आरंभ करना देखें। नीचे की पंक्तियाँ पुष्टि करती हैं कि हमारा कोड सफलतापूर्वक अपलोड किया गया है।
पुनर्निर्माण शुरू किया: प्रोजेक्ट: प्रिंटफ_यूआरटीई 0 का पुनर्निर्माण लक्ष्य 'GPIO' संकलन PUTCHAR.C… Print_UART0.C संकलित करना… Delay.c संकलित करना… संकलित करना संकलन… STARTUP.A51… संयोजन … कार्यक्रम का आकार: डेटा = 54.2 xdata = 0 कोड = 2341 ""। \ आउटपुट \ Printf_UART1 "… "। \ आउटपुट \ Printf_UART1 "से 0x फ़ाइल बनाना - 0 त्रुटि (ओं), 0 चेतावनी (ओं)। बिल्ड टाइम बीता हुआ समय: 00:00:02 लोड "G: \\ n76E003 \\ सॉफ्टवेयर \\ N76E003_BSP_Keil_C51_V1.0.6 \\ नमूना_कोड \\ UART0 -प्रिंसफ \\ आउटपुट \\ Printf_UART1" फ़्लैश मिटाएँ। फ्लैश लिखें पूरा: 2341 बाइट्स क्रमादेशित। फ्लैश सत्यापित करें: 2341 बाइट्स सत्यापित। 15:48:08 पर फ्लैश लोड समाप्त हुआ
विकास बोर्ड प्रोग्रामर और लैपटॉप के माध्यम से यूएसबी से यूएआरटी मॉड्यूल का उपयोग करके बिजली स्रोत में जुड़ा हुआ है। UART डेटा को प्रदर्शित करने या भेजने के लिए, एक सीरियल मॉनिटर सॉफ्टवेयर की आवश्यकता होती है। मैं इस प्रक्रिया के लिए तेरा शब्द का उपयोग कर रहा हूं ।
जैसा कि आप नीचे दी गई छवि में देख सकते हैं, मैं हमारे nuvoton नियंत्रक से भेजे गए तारों को प्रदर्शित करने और सीरियल मॉनीटर सॉफ़्टवेयर पर प्रदर्शित करने में सक्षम था। साथ ही धारावाहिक मॉनिटर से मूल्यों को पढ़ने में सक्षम था।
आप इस ट्यूटोरियल के संपूर्ण प्रदर्शन के लिए नीचे दिए गए वीडियो को देख सकते हैं। आशा है कि आपको लेख अच्छा लगा और कुछ उपयोगी सीखा। यदि आपके कोई प्रश्न हैं, तो आप उन्हें नीचे टिप्पणी अनुभाग में छोड़ सकते हैं या अन्य तकनीकी प्रश्नों को पोस्ट करने के लिए हमारे मंचों का उपयोग कर सकते हैं।