- सामग्री की आवश्यकता
- STM8S103F3P6 पर ADC
- सर्किट आरेख STM8S पर ADC मान पढ़ें और एलसीडी पर प्रदर्शित करें
- STM8S103F3P6 के लिए ADC लाइब्रेरी
- STM8S एलसीडी पर एनालॉग वोल्टेज और डिस्प्ले को पढ़ने का कार्यक्रम
- STM8S का उपयोग करके दो पोटेंशियोमीटर से एनालॉग वोल्टेज पढ़ना
यदि आप एक नियमित पाठक हैं जो हमारे STM8S माइक्रोकंट्रोलर ट्यूटोरियल का अनुसरण कर रहे हैं, तो आपको पता होगा कि हमारे अंतिम ट्यूटोरियल में, हमने सीखा कि STM8s के साथ 16x2 एलसीडी कैसे इंटरफ़ेस करें। अब, इस ट्यूटोरियल पर आगे बढ़ते हुए, हम सीखेंगे कि हमारे STM8S103F3P6 माइक्रोकंट्रोलर पर ADC सुविधा का उपयोग कैसे करें। एक एडीसी एक माइक्रोकंट्रोलर पर एक बहुत ही उपयोगी परिधीय है जो अक्सर एम्बेडेड प्रोग्रामर द्वारा इकाइयों को मापने के लिए उपयोग किया जाता है जो निरंतर परिवर्तन में होते हैं जैसे कि अलग वोल्टेज, वर्तमान, तापमान, आर्द्रता, आदि।
जैसा कि हम जानते हैं कि "हम डिजिटल उपकरणों के साथ एक एनालॉग दुनिया में रहते हैं", जिसका अर्थ है हमारे आसपास की हर चीज जैसे हवा की गति, प्रकाश की तीव्रता, तापमान और हर चीज जो हम गति, वेग, दबाव आदि से निपटते हैं, प्रकृति में अनुरूप हैं। लेकिन हमारे माइक्रोकंट्रोलर और माइक्रोप्रोसेसर डिजिटल उपकरण हैं और वे एनालॉग से डिजिटल कन्वर्टर्स (एडीसी) नामक एक महत्वपूर्ण परिधीय के बिना इन मापदंडों को मापने में सक्षम नहीं होंगे। तो इस लेख में, हम सीखते हैं कि COMC C संकलक के साथ STM8S माइक्रोकंट्रोलर पर ADC का उपयोग कैसे करें ।
सामग्री की आवश्यकता
इस लेख में, हम दो पोटेंशियोमीटर से दो एनालॉग वोल्टेज मान पढ़ रहे होंगे और 16x2 एलसीडी डिस्प्ले पर इसका एडीसी मान प्रदर्शित करेंगे। ऐसा करने के लिए, हमें निम्नलिखित घटकों की आवश्यकता होगी।
- STM8S103F3P6 विकास बोर्ड
- ST- लिंक V2 प्रोग्रामर
- 16x2 एलसीडी
- तनाव नापने का यंत्र
- तारों को जोड़ना
- 1k रोकनेवाला
STM8S103F3P6 पर ADC
कई प्रकार के एडीसी हैं और प्रत्येक माइक्रोकंट्रोलर के अपने विनिर्देश हैं। STM8S103F3P6 पर, हमारे पास 5 चैनल और 10-बिट रिज़ॉल्यूशन वाला ADC है ; 10-बिट रिज़ॉल्यूशन के साथ, हम डिजिटल मान को 0 से 1024 तक मापने में सक्षम होंगे और 5 चैनल एडीसी इंगित करता है कि हमारे पास माइक्रोकंट्रोलर पर 5 पिन हैं जो एडीसी का समर्थन कर सकते हैं, इन 5 पिनों को नीचे दी गई तस्वीर में हाइलाइट किया गया है।
जैसा कि आप देख सकते हैं, इन सभी पांच पिनों (AIN2, AIN3, AIN4, AIN5, और AIN6) को अन्य परिधीयों के साथ गुणा किया जाता है, जिसका अर्थ है कि केवल ADC पिन के रूप में कार्य करने के अलावा, इन पिनों का उपयोग अन्य संचार जैसे उदाहरण के लिए भी किया जा सकता है।, पिन 2 और 3 (एआईएन 5 और एआईएन 6) का उपयोग न केवल एडीसी के लिए किया जा सकता है, बल्कि इसका उपयोग धारावाहिक संचार और जीपीआईओ कार्यों के लिए भी किया जा सकता है। ध्यान दें कि तीनों उद्देश्यों के लिए एक ही पिन का उपयोग करना संभव नहीं होगा, इसलिए यदि हम एडीसी के लिए इन दो पिनों का उपयोग कर रहे हैं, तो हम धारावाहिक संचार नहीं कर पाएंगे। STM8S103P36 के लिए अन्य महत्वपूर्ण ADC विशेषताओं को डेटाशीट से ली गई तालिका में पाया जा सकता है।
उपरोक्त तालिका में, Vdd ऑपरेटिंग वोल्टेज का प्रतिनिधित्व करता है और Vss जमीन का प्रतिनिधित्व करता है। तो हमारे विकास बोर्ड पर हमारे मामले में, हमारे पास 3.3V पर संचालित माइक्रोकंट्रोलर है, आप STM8S ट्यूटोरियल के साथ शुरू होने से विकास बोर्ड सर्किट आरेख की जांच कर सकते हैं। ऑपरेटिंग वोल्टेज के रूप में 3.3V के साथ, हमारी एडीसी घड़ी आवृत्ति 1 से 4MHz के बीच सेट की जा सकती है और हमारी रूपांतरण वोल्टेज सीमा 0V से 3.3V के बीच है। इसका मतलब यह है कि हमारे 10-बिट एडीसी 0 तब पढ़ेगा जब 0 वी (वीएसएस) प्रदान किया जाएगा और अधिकतम 1024 पढ़ेगा जब 3.3 वी (वीडीडी) प्रदान किया जाएगा। आवश्यकता पड़ने पर MCU के ऑपरेटिंग वोल्टेज को बदलकर हम इस 0-5V को आसानी से बदल सकते हैं।
सर्किट आरेख STM8S पर ADC मान पढ़ें और एलसीडी पर प्रदर्शित करें
इस परियोजना में प्रयुक्त पूर्ण सर्किट आरेख नीचे दिया गया है, यह STM8S LCD ट्यूटोरियल के समान है जिसकी हमने पहले चर्चा की थी।
जैसा कि आप देख सकते हैं, एलसीडी के अलावा एकमात्र अतिरिक्त घटक दो पोटेंशियोमीटर POT_1 और POT_2 हैं । ये बर्तन पोर्ट पीसी 4 और पीडी 6 से जुड़े हैं, जो एएनआई 2 और एएनआई 6 पिन हैं जैसा कि पहले पिनआउट छवि पर चर्चा की गई थी।
पोटेंशियोमीटर इस तरह से जुड़े होते हैं कि जब हम इसे बदलते हैं, तो हम अपने एनालॉग पिंस पर 0-5 वी प्राप्त करेंगे। हम डिजिटल मूल्य (0 से 1024) में इस एनालॉग वोल्टेज को पढ़ने के लिए और एलसीडी स्क्रीन पर प्रदर्शित करने के लिए अपने नियंत्रक को प्रोग्रामिंग करेंगे। फिर हम समतुल्य वोल्टेज मान की गणना करेंगे और एलसीडी पर प्रदर्शित करेंगे, याद रखें कि हमारा नियंत्रक 3.3V द्वारा संचालित है, इसलिए यदि हम ADV पिन को 5V प्रदान करते हैं, तो यह केवल 0V से 3.3V तक ही पढ़ा जा सकेगा ।
एक बार कनेक्शन हो जाने के बाद, मेरा हार्डवेयर इस तरह दिखता है जैसा कि नीचे दिखाया गया है। आप दाईं ओर दो पोटेंशियोमीटर और बाईं ओर एसटी-लिंक प्रोग्रामर देख सकते हैं।
STM8S103F3P6 के लिए ADC लाइब्रेरी
STM8S पर ADC फ़ंक्शंस के लिए प्रोग्राम करने के लिए, हम SPL लाइब्रेरीज़ के साथ कॉस्मिक C कंपाइलर का उपयोग करेंगे। लेकिन प्रक्रियाओं को आसान बनाने के लिए, मैंने एक और हेडर फ़ाइल बनाई, जिसे नीचे दिए गए लिंक से GitHub पर पाया जा सकता है।
STM8S103F3P6 के लिए ADC लाइब्रेरी
यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप उपरोक्त कोड का उपयोग करके एक हेडर फ़ाइल बना सकते हैं और इसे अपने प्रोजेक्ट पेज पर "फाइलों को शामिल करें" निर्देशिका में जोड़ सकते हैं। अपने एसटीएम 8 एस ट्यूटोरियल के साथ शुरुआत करने के बाद, यह जानने के लिए कि आपके प्रोग्रामिंग वातावरण और संकलक को कैसे सेट किया जाए। एक बार आपका सेटअप तैयार हो जाने के बाद, आपकी आईडीई में निम्नलिखित हेडर फाइलें होनी चाहिए, कम से कम लाल रंग में घिरी हुई।
उपरोक्त शीर्ष लेख फ़ाइल में ADC_Read () नामक एक फ़ंक्शन होता है । किसी भी पिन पर ADC मान प्राप्त करने के लिए इस फ़ंक्शन को आपके मुख्य कार्यक्रम में बुलाया जा सकता है। उदाहरण के लिए, ADC_Read (AN2) परिणाम के रूप में पिन AN2 पर ADC मान लौटाएगा। फ़ंक्शन नीचे दिखाया गया है।
अहस्ताक्षरित int ADC_Read (ADC_CHANNEL_TypeDef ADC_Channel_Number) {अहस्ताक्षरित int परिणाम = 0; ADC1_DeInit (); ADC1_Init (ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel_Number, ADC1_PRESSEL_FCPU_D18, ADC1_EXTUSIGIGIMIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTR ADC1_Cmd (सक्षम); ADC1_StartConversion (); जबकि (ADC1_GetFlagStatus (ADC1_FLAG_EOC) == FALSE); परिणाम = ADC1_GetConversionValue (); ADC1_ClearFlag (ADC1_FLAG_EOC); ADC1_DeInit ();
जैसा कि आप देखते हैं, हम इस फ़ंक्शन को आठ पैरामीटर पास कर सकते हैं और यह परिभाषित करता है कि एडीसी कैसे कॉन्फ़िगर किया गया है। ऊपर हमारे पुस्तकालय कोड में, हमने रूपांतरण मोड को निरंतर और फिर चैनल संख्या को एक पैरामीटर पास करने के लिए सेट किया है। और फिर हमें अपने नियंत्रक की सीपीयू आवृत्ति को डिफ़ॉल्ट रूप से सेट करना होगा (यदि आपने बाहरी क्रिस्टल कनेक्ट नहीं किया है), तो आपका एसटीएम 8 एस 16Mhz आंतरिक थरथरानवाला के साथ काम करेगा। इसलिए हमने " ADC1_PRESSEL_FCPU_D18 " को पूर्व-स्केलर मान के रूप में उल्लेख किया है । इस फ़ंक्शन के अंदर, हम SPL stm8s_adc1.h हेडर फ़ाइल द्वारा परिभाषित अन्य विधियों का उपयोग कर रहे हैं । हम एडीसी पिन को डी-इनिशियलाइज़ करके शुरू करते हैं और फिर एडीसी परिधीय को इनिशियलाइज़ करने के लिए ADC1_Init () । एसपीएल उपयोगकर्ता मैनुअल से इस फ़ंक्शन की परिभाषा नीचे दी गई है।
इसके बाद, हम एक टाइमर का उपयोग करके बाहरी ट्रिगर सेट करते हैं और बाहरी ट्रिगर को अक्षम करते हैं क्योंकि हम यहां इसका उपयोग नहीं करेंगे। और फिर हमारे पास दाईं ओर संरेखण सेट है और अंतिम दो मापदंडों का उपयोग श्मिट ट्रिगर को सेट करने के लिए किया जाता है, लेकिन हम इसे इस ट्यूटोरियल के लिए अक्षम कर देंगे। इसलिए, इसे छोटा करने के लिए, हम अपने एडीसी को बाहरी ट्रिगर और शमित ट्रिगर अक्षम के साथ आवश्यक एडीसी पिन पर निरंतर रूपांतरण मोड में काम करेंगे। यदि आप बाहरी ट्रिगर या श्मिट ट्रिगर विकल्प का उपयोग करने के बारे में अधिक जानकारी चाहते हैं, तो आप डेटाशीट की जांच कर सकते हैं, हम इस ट्यूटोरियल में चर्चा नहीं करेंगे।
STM8S एलसीडी पर एनालॉग वोल्टेज और डिस्प्ले को पढ़ने का कार्यक्रम
Main.c फ़ाइल में उपयोग किया गया पूरा कोड इस पृष्ठ के नीचे पाया जा सकता है। आवश्यक हेडर फ़ाइलों और स्रोत फ़ाइलों को जोड़ने के बाद, आपको मुख्य फ़ाइल को सीधे संकलित करने में सक्षम होना चाहिए। मुख्य फ़ाइल में कोड की व्याख्या इस प्रकार है। मैं STM8S एलसीडी कार्यक्रम की व्याख्या नहीं करूंगा क्योंकि हम पहले ही ट्यूटोरियल में चर्चा कर चुके हैं।
कोड का उद्देश्य दो पिन से एडीसी मूल्यों को पढ़ना और इसे वोल्टेज मान में बदलना होगा। हम LCD पर ADC मान और वोल्ट मान दोनों प्रदर्शित करेंगे। इसलिए, मैंने LCD_Print Var नामक एक फ़ंक्शन का उपयोग किया है जो पूर्णांक प्रारूप में एक चर में लेता है और इसे एक चरित्र में परिवर्तित करता है ताकि इसे एलसीडी पर प्रदर्शित किया जा सके। हमने सरल मापांक (%) और डिवाइड (/) ऑपरेटरों का उपयोग चर से प्रत्येक अंक प्राप्त करने के लिए किया है और नीचे दिखाए गए अनुसार d1, d2, d3, और d4 जैसे चर में रखा है। फिर हम LCD पर इन वर्णों को प्रदर्शित करने के लिए LCD_Print_Char फ़ंक्शन का उपयोग कर सकते हैं ।
void LCD_Print_Var (int var) {char d4, d3, d2, d1; d4 = var% 10 + '0'; d3 = (var / 10)% 10 + '0'; d2 = (var / 100)% 10 + '0'; d1 = (var / 1000) + '0'; Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); }
मुख्य फ़ंक्शन के तहत, हमारे पास चार चर घोषित किए गए हैं। उनमें से दो का उपयोग एडीसी मूल्य (0 से 1024) को बचाने के लिए किया जाता है और अन्य दो का उपयोग वास्तविक वोल्टेज मान प्राप्त करने के लिए किया जाता है।
अहस्ताक्षरित int ADC_value_1 = 0; अहस्ताक्षरित int ADC_value_2 = 0; int ADC_voltage_1 = 0; int ADC_voltage_2 = 0;
अगला, हमें एनालॉग वोल्टेज को पढ़ने के लिए GPIO पिन और घड़ी कॉन्फ़िगरेशन तैयार करना होगा। यहां हम पिंस AIN2 और AIN6 से एनालॉग वोल्टेज पढ़ रहे हैं जो क्रमशः पीसी 4 और पीडी 6 हैं। हमें इन पिन को एक फ्लोटिंग स्थिति में परिभाषित करना होगा जैसा कि नीचे दिखाया गया है। हम ADC के लिए घड़ी परिधीय को भी सक्षम करेंगे।
CLK_PeripheralClockConfig (CLK_PERIPHERAL_ADC, सक्षम); // ADC GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT) के लिए परिधीय घड़ी सक्षम करें; GPIO_Init (GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_IT);
अब जब पिन तैयार हो जाते हैं, तो हमें एनालॉग वोल्टेज को पढ़ने के लिए लूप जबकि अनंत में उतरना पड़ता है। चूंकि हमारे पास हमारी हेडर फ़ाइल है, इसलिए हम नीचे की पंक्तियों का उपयोग करके पिन AIN2 और AIN 6 से एनालॉग वोल्टेज को आसानी से पढ़ सकते हैं।
ADC_value_1 = ADC_Read (AIN2); ADC_value_2 = ADC_Read (AIN6);
अगला कदम इस एडीसी रीडिंग (0 से 1023) को एनालॉग वोल्टेज में बदलना है। इस तरह, हम AIN2 और AIN6 को पिन करने के लिए दिए गए सटीक वोल्टेज मान को प्रदर्शित कर सकते हैं। एनालॉग वोल्टेज की गणना करने के सूत्र निम्नानुसार दिए जा सकते हैं-
एनालॉग वोल्टेज = एडीसी रीडिंग * (3300/1023)
STM8S103F3 नियंत्रकों पर हमारे मामले में, हमारे पास 10-बिट रिज़ॉल्यूशन वाला ADC है, इसलिए हमने 1023 (2 ^ 10) का उपयोग किया है । हमारी विकास शक्तियों पर भी 3.3V के साथ कंट्रोलर जो कि 3300 है, इसलिए हमने उपरोक्त फॉर्मूले में 3300 को 1023 से विभाजित किया। लगभग 3300/1023 हमें 3.226 देगा, इसलिए हमारे कार्यक्रम पर, एडीसी वोल्टेज का उपयोग करके वास्तविक एडीसी वोल्टेज को मापने के लिए हमारे पास निम्न पंक्तियां हैं।
ADC_voltage_1 = ADC_value_1 * (3.226); // / (3300/1023 = ~ 3.226) ADC मान 1 से 0 को 3300mV ADC_voltage_2 = ADC_value_2 * (3.226) में परिवर्तित करें; // ADC मान को 1 से 0 से 3300mV में बदलें
कोड का शेष भाग केवल एलसीडी स्क्रीन पर इन चार मूल्यों को प्रदर्शित करने के लिए उपयोग किया जाता है। हमारे पास 500ms की देरी भी है ताकि LCD हर 500mS के लिए अपडेट हो जाए। यदि आपको तेज़ अपडेट की आवश्यकता है, तो आप इसे और कम कर सकते हैं।
STM8S का उपयोग करके दो पोटेंशियोमीटर से एनालॉग वोल्टेज पढ़ना
कोड संकलित करें और इसे अपने विकास बोर्ड में अपलोड करें। यदि आपको कोई संकलित त्रुटि मिलती है, तो सुनिश्चित करें कि आपने पहले की गई सभी हेडर फ़ाइलों और स्रोत फ़ाइलों को जोड़ा है। एक बार कोड अपलोड होने के बाद, आपको "ADC STM8S पर" एक छोटे से स्वागत संदेश को देखना चाहिए और फिर आपको नीचे दी गई स्क्रीन को देखना चाहिए।
D1 और D2 का मान क्रमशः पिन A22 और AIN6 से ADC मान को दर्शाता है। दाईं ओर, हमारे पास समान वोल्टेज मान भी प्रदर्शित होते हैं। यह मान क्रमशः पिन एआईएन 2 और एआईएन 6 पर दिखने वाले वोल्टेज के बराबर होना चाहिए। हम मल्टीमीटर का उपयोग करके उसी के लिए जांच कर सकते हैं, हम यह जांचने के लिए भी पोटेंशियोमीटर बदल सकते हैं कि क्या वोल्टेज का मूल्य भी तदनुसार बदलता है।
नीचे दिए गए वीडियो में भी पूरी तरह से काम किया जा सकता है। आशा है कि आपने ट्यूटोरियल का आनंद लिया है और कुछ उपयोगी सीखा है, यदि आपके कोई प्रश्न हैं, तो उन्हें नीचे टिप्पणी अनुभाग में छोड़ दें। आप चर्चा शुरू करने या अन्य तकनीकी प्रश्नों को पोस्ट करने के लिए हमारे मंचों का उपयोग कर सकते हैं।