- आवश्यक घटक:
- सर्किट आरेख:
- आवृत्ति मापने के लिए 8051 के समय का उपयोग करना:
- 555 टाइमर आवृत्ति स्रोत के रूप में:
- काम और कोड स्पष्टीकरण:
आवृत्ति को प्रति सेकंड चक्र की संख्या के रूप में परिभाषित किया गया है। इसे कुल समय 'टी' के पारस्परिक के रूप में भी परिभाषित किया जा सकता है। इस परियोजना में हम 8051 माइक्रोकंट्रोलर के पोर्ट 3.5 में प्रवेश करने वाली दालों की संख्या की गणना करने जा रहे हैं और इसे 16 * 2 एलसीडी डिस्प्ले पर प्रदर्शित करते हैं। इसलिए मूल रूप से हम 8051 के पोर्ट 3.5 पर सिग्नल की आवृत्ति को मापते हैं। यहां हमने AT89S52 8051 चिप का उपयोग किया है, और प्रदर्शन के लिए नमूना पल्स उत्पन्न करने के लिए 555 IC का उपयोग Astable मोड में किया जाता है। हमने पहले Arduino का उपयोग करके फ़्रिक्वेंसी काउंटर का निर्माण किया है।
आवश्यक घटक:
- 8051 माइक्रोकंट्रोलर (AT89S52)
- 16 * 2 एलसीडी डिस्प्ले
- फ्रीक्वेंसी सोर्स (555 टाइमर)
- तनाव नापने का यंत्र
- तारों को जोड़ना
सर्किट आरेख:
आवृत्ति मापने के लिए 8051 के समय का उपयोग करना:
8051 माइक्रोकंट्रोलर एक 8 बिट माइक्रोकंट्रोलर है जिसमें चिप रैम पर 128 बाइट्स, चिप रॉम पर 4K बाइट्स, दो टाइमर, एक सीरियल पोर्ट और चार 8 बिट पोर्ट हैं। 8052 माइक्रोकंट्रोलर माइक्रोकंट्रोलर का एक विस्तार है। पोर्ट 3.5 को काउंटर के रूप में कॉन्फ़िगर करने के लिए, TMOD रजिस्टर मान 0x51 पर सेट है। नीचे आंकड़ा TMOD रजिस्टर दिखाता है।
द्वार | सी / टी | एम 1 | एम 0 | द्वार | सी / टी | एम 1 | एम 2 |
समय १ | समय ० |
GATE - जब GATE सेट किया जाता है, तो टाइमर या काउंटर केवल तभी सक्षम होता है जब INTx पिन हाई होता है और TRx कंट्रोल पिन सेट होता है। जब गेट साफ़ हो जाता है, तो टाइमर को सक्षम किया जाता है जब भी TRx नियंत्रण बिट सेट होता है।
सी / टी - जब सी / टी = 0, यह टाइमर के रूप में कार्य करता है। जब C / T = 1 होता है, तो यह काउंटर के रूप में कार्य करता है।
M1 और M0 ऑपरेशन के मोड को इंगित करता है।
TMOD = 0x51 के लिए, टाइमर 1 काउंटर के रूप में कार्य करता है और यह मोड 1 (16 बिट) में संचालित होता है।
16 * 2 एलसीडी का उपयोग हर्ट्ज (हर्ट्ज) में सिग्नल की आवृत्ति प्रदर्शित करने के लिए किया जाता है। यदि आप 16x2 LCD पर नए हैं, तो यहाँ 16x2 LCD के पिन और उसके कमांड्स की जाँच करें। यह भी जांचें कि 8051 के साथ एलसीडी कैसे इंटरफ़ेस करें।
555 टाइमर आवृत्ति स्रोत के रूप में:
आवृत्ति स्रोत को चौकोर तरंगों का उत्पादन करना चाहिए और अधिकतम आयाम 5V तक सीमित है, क्योंकि 8051 माइक्रोकंट्रोलर के पोर्ट 5V से अधिक वोल्टेज को संभाल नहीं सकते हैं। TH1 और TL1 रजिस्टर (प्रत्येक 8bit) की मेमोरी सीमा के कारण इसकी अधिकतम आवृत्ति 655.35 KHz मापी जा सकती है । 100 मिलीसेकंड में, TH1 और TL1 65535 मायने रखता है। इसलिए मापी जा सकने वाली अधिकतम आवृत्ति 65535 * 10 = 655.35 KHz है ।
इस 8051 फ़्रीक्वेंसी मीटर प्रोजेक्ट में, मैं वैरिएबल मोड में 555 टाइमर का उपयोग कर रहा हूं, जो वेरिएबल फ़्रीक्वेंसी स्क्वायर वेव्स का उत्पादन करता है। 555 आईसी द्वारा उत्पन्न सिग्नल की आवृत्ति, इस परियोजना के अंत में दिए गए वीडियो में दिखाए गए अनुसार पोटेंशियोमीटर को समायोजित करके भिन्न हो सकती है ।
इस परियोजना में, टिमर 1 (टी 1) 100 मिलीसेकंड के लिए 8051 माइक्रोकंट्रोलर के पोर्ट 3.5 में प्रवेश करने वाली दालों की संख्या को गिना जाता है। गणना मूल्यों को क्रमशः TH1 और TL1 रजिस्टरों में संग्रहीत किया जाएगा। टीएच 1 और टीएल 1 रजिस्टर के मूल्यों को संयोजित करने के लिए, निम्न सूत्र का उपयोग किया जाता है।
दलहन = TH1 * (0x100) + TL1
अब pulse पल्स’में 100 मिलीसेकंड में चक्रों की संख्या होगी। लेकिन सिग्नल की आवृत्ति को प्रति सेकंड साइकिल की संख्या के रूप में परिभाषित किया गया है। इसे फ़्रीक्वेंसी में बदलने के लिए, फॉर्मूला के नीचे इस्तेमाल किया जाता है।
दालें = दालें * १०
काम और कोड स्पष्टीकरण:
पूरा सी कार्यक्रम इस आवृत्ति के लिए मीटर इस परियोजना के अंत में दिया जाता है। कोड को छोटे अर्थों में विभाजित किया गया है और नीचे समझाया गया है।
8051 माइक्रोकंट्रोलर के साथ 16 * 2 एलसीडी इंटरफेसिंग के लिए, हमें पिंस को परिभाषित करना होगा, जिस पर 16 * 2 एलसीडी 8051 माइक्रोकंट्रोलर से जुड़ा है। 16 * 2 एलसीडी का RS पिन P2.7 से जुड़ा है, 16 * 2 का RW पिन P2.6 से जुड़ा है और 16 * 2 का E पिन P2.5 से जुड़ा है। डेटा पिन 8051 माइक्रोकंट्रोलर के पोर्ट 0 से जुड़े हैं।
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit en = P2 ^ 5;
आगे हमें कुछ कार्यों को परिभाषित करना होगा जो कार्यक्रम में उपयोग किए जाते हैं। विलंब फ़ंक्शन का उपयोग निर्दिष्ट समय विलंब बनाने के लिए किया जाता है। Cmdwrt फ़ंक्शन का उपयोग 16 * 2 एलसीडी डिस्प्ले पर कमांड भेजने के लिए किया जाता है। डेटावार्ट फ़ंक्शन का उपयोग 16 * 2 एलसीडी डिस्प्ले पर डेटा भेजने के लिए किया जाता है।
शून्य विलंब (अहस्ताक्षरित int); शून्य cmdwrt (अहस्ताक्षरित चार); शून्य डेटावार्ट (अहस्ताक्षरित चार);
कोड के इस भाग में, हम 16 * 2 एलसीडी को कमांड भेज रहे हैं । स्पष्ट डिस्प्ले, इंक्रीमेंट कर्सर जैसे कमांड्स, कर्सर को 1 सेंट लाइन की शुरुआत के लिए मजबूर करते हैं, कुछ निर्दिष्ट समय देरी के बाद एक-एक करके 16 * 2 एलसीडी डिस्प्ले पर भेजे जाते हैं।
for (i = 0; i <5; i ++) {cmdwrt (cmd); देरी (1); }
कोड के इस भाग में, टाइमर 1 को काउंटर के रूप में कॉन्फ़िगर किया गया है और ऑपरेशन का मोड 1 मोड पर सेट किया गया है।
टाइमर को टाइमर के रूप में कॉन्फ़िगर किया गया है और ऑपरेशन का मोड 1 मोड पर सेट किया गया है । टाइमर 1 का उपयोग दालों की संख्या की गणना के लिए किया जाता है और टाइमर 0 का उपयोग समय की देरी उत्पन्न करने के लिए किया जाता है। TH1 और TL1 मान 0 पर सेट हैं, यह सुनिश्चित करने के लिए कि गिनती 0 से शुरू होती है।
टीएमओडी = 0x51; टीएल 1 = 0; TH1 = 0;
कोड के इस भाग में, 100 मिलीसेकंड के लिए टाइमर बनाया जाता है। देरी फ़ंक्शन के उपयोग से 100 मिलीसेकंड विलंब उत्पन्न होता है । TR1 = 1 टाइमर शुरू करने के लिए है और TR1 = 0 100 मिलीसेकंड के बाद टाइमर को रोकने के लिए है।
TR1 = 1; देरी (100); TR1 = 0;
कोड के इस भाग में, TH1 और TL1 रजिस्टर में मौजूद गणना मान संयुक्त होते हैं और फिर 1 सेकंड में कुल चक्र प्राप्त करने के लिए इसे 10 से गुणा किया जाता है ।
दलहन = TH1 * (0x100) + TL1; दालें = दालें * 10;
कोड के इस भाग में, 16 * 2 एलसीडी डिस्प्ले पर प्रदर्शित करने के लिए आवृत्ति मान को एकल बाइट्स में परिवर्तित किया जाता है ।
d1 = दालें% 10; s1 = दालें 100%; s2 = दालों% 1000; s3 = दालें% 10000; s4 = दालें% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1000; d5 = (s4-s3) / 10000; डी 6 = (दाल-एस 4) / 100000;
कोड के इस भाग में, आवृत्ति मान के व्यक्तिगत अंकों को ASCII प्रारूप में बदल दिया जाता है और इसे 16 * 2 एलसीडी डिस्प्ले पर प्रदर्शित किया जाता है।
यदि (दालों> = 100000) डेटावार्ट (0x30 + d6); if (दालों> = 10000) datawrt (0x30 + d5); अगर (दालें> = 1000) डेटावार्ट (0x30 + d4); अगर (दालें> = 100) डेटावार्ट (0x30 + d3); अगर (दालों> = 10) डेटावार्ट (0x30 + d2); डेटावार्ट (0x30 + d1);
कोड के इस भाग में, हम 16 * 2 एलसीडी डिस्प्ले को कमांड भेज रहे हैं। कमांड को 8051 माइक्रोकंट्रोलर के पोर्ट 0 पर कॉपी किया जाता है। RS को कमांड लिखने के लिए कम किया जाता है। राइट ऑपरेशन के लिए आरडब्ल्यू को कम किया जाता है। कमांड राइट ऑपरेशन शुरू करने के लिए हाई (लो) पल्स इनेबल (E) पिन पर लगाया जाता है।
शून्य cmdwrt (अहस्ताक्षरित चार x) {P0 = x; rs = 0; आरडब्ल्यू = 0; एन = 1; देरी (1); एन = 0; }
कोड के इस भाग में, हम 16 * 2 एलसीडी डिस्प्ले पर डेटा भेज रहे हैं । डेटा को 8051 माइक्रोकंट्रोलर के पोर्ट 0 पर कॉपी किया जाता है। RS को कमांड लिखने के लिए उच्च बनाया जाता है। राइट ऑपरेशन के लिए आरडब्ल्यू को कम किया जाता है। डेटा राइट ऑपरेशन शुरू करने के लिए सक्षम (ई) पिन पर उच्च से निम्न पल्स लागू किया जाता है।
शून्य डेटावार्ट (अहस्ताक्षरित चार y) {P0 = y; rs = 1; आरडब्ल्यू = 0; एन = 1; देरी (1); एन = 0; }
यह है कि हम 8051 माइक्रोकंट्रोलर का उपयोग करके किसी भी सिग्नल की आवृत्ति को कैसे माप सकते हैं । नीचे पूर्ण कोड और डेमो वीडियो देखें।