इस परियोजना में हम ATMEGA32 टाइमर का उपयोग करके एक साधारण अलार्म घड़ी डिजाइन करने जा रहे हैं । ATmega32A माइक्रोकंट्रोलर में 16 बिट टाइमर है, और हम उस टाइमर का उपयोग सेकंड की गणना करने और एक डिजिटल घड़ी विकसित करने के लिए करेंगे।
सभी डिजिटल घड़ियों में एक क्रिस्टल होता है जो घड़ी का दिल होता है। यह क्रिस्टल न केवल घड़ी में, बल्कि सभी कंप्यूटिंग वास्तविक समय प्रणालियों में मौजूद है। यह क्रिस्टल घड़ी दालों को उत्पन्न करता है, जिसकी समय गणना के लिए आवश्यकता होती है। हालाँकि घड़ी की दाल पाने के कुछ अन्य तरीके भी हैं लेकिन सटीकता और उच्च आवृत्ति के लिए क्रिस्टल आधारित घड़ी सबसे अधिक पसंद की जाती है। हम सटीक घड़ी पाने के लिए ATMEGA32 में एक क्रिस्टल को जोड़ने जा रहे हैं।
अवयव आवश्यक
हार्डवेयर: ATmega32 माइक्रोकंट्रोलर, 11.0592MHz क्रिस्टल, 22pF कैपेसिटर (2 टुकड़े), पावर सप्लाई (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), 100uF कैपेसिटर (पावर सप्लाई से जुड़े), बटन (चार टुकड़े), 10KΩ रेसिस्टर। (छह टुकड़े), 100nF कैपेसिटो आर (चार टुकड़े), तीन पिन स्विच (2 टुकड़े), 2N2222 ट्रांजिस्टर, बजर, 200Ω रेसिस्टर।
सॉफ्टवेयर: Atmel स्टूडियो 6.1, progisp या फ़्लैश मैजिक।
सर्किट आरेख और कार्य स्पष्टीकरण
सटीक समय के लिए, हमने घड़ी के लिए 11.0592MHz क्रिस्टल कनेक्ट किया है। अब ATMEGA की आंतरिक घड़ी को अक्षम करने के लिए हमें इसके LOW FUSE BITS को बदलना होगा। याद रखें कि हम उच्च फ्यूज बिट्स को नहीं छू रहे हैं, इसलिए JTAG संचार अभी भी सक्षम होगा।
ATMEGA को आंतरिक घड़ी को अक्षम करने और बाहरी कार्य करने के लिए हमें यह बताने की आवश्यकता है:
LOW USE BYTE = 0xFF या 0b11111111।
ATMEGA32 के सर्किट पोर्ट में डेटा पोर्ट एलसीडी से जुड़ा है। यहाँ एक को उच्च फ्यूज बाइट्स को बदलकर ATMEGA के PORTC में JTAG संचार को निष्क्रिय करना याद रखना चाहिए, यदि कोई PORTC को सामान्य संचार पोर्ट के रूप में उपयोग करना चाहता है। 16x2 एलसीडी में 16 पिंस होते हैं अगर ब्लैक लाइट होती है तो बैक लाइट नहीं होने पर 14 पिन होते हैं। एक बिजली या वापस प्रकाश पिन छोड़ सकते हैं। अब 14 पिनों में 8 डेटा पिन (7-14 या D0-D7), 2 पावर सप्लाई पिन (1 & 2 या VSS & VDD या gnd & + 5v), कंट्रास्ट कंट्रोल के लिए 3 rd पिन (VEE- नियंत्रण हैं कि पात्रों को कितना मोटा होना चाहिए दिखाया गया है, और 3 नियंत्रण पिन (रुपये और आरडब्ल्यू और ई)
सर्किट में, आप देख सकते हैं कि मैंने केवल दो नियंत्रण पिन लिए हैं। यह बेहतर समझ का लचीलापन देता है, इसके विपरीत बिट और आरईएडी / राइट का उपयोग अक्सर नहीं किया जाता है, ताकि उन्हें जमीन पर छोटा किया जा सके। यह एलसीडी को कंट्रास्ट और रीड मोड में डालता है। हमें केवल वर्ण और डेटा भेजने के लिए सक्षम और आरएस पिन को नियंत्रित करने की आवश्यकता है।
एलसीडी के लिए जो कनेक्शन दिए गए हैं, वे नीचे दिए गए हैं:
PIN1 या VSS जमीन पर
PIN2 या VDD या VCC से + 5v पावर
पिन 3 या वीईई को ग्राउंड (शुरुआती के लिए अधिकतम विपरीत देता है)
पिन 4 या आरएस (रजिस्टर चयन) को यूसी के पीडी 6 में
पिन 5 या आरडब्ल्यू (पढ़ें / लिखें) को जमीन पर रखें (रीड मोड में एलसीडी लगाता है उपयोगकर्ता के लिए संचार को आसान बनाता है)
पिन 6 या uC के PD5 के लिए E (सक्षम करें)
पिन 7 या U0 से PBC का P0
PIN8 या U1 के PB1 को D1
PIN9 या U2 के PB2 को D2
पिन 10 या यूसी के पीबी 3 से 3 डी
PIN11 या U4 के PB4 को D4
PIN12 या U5 के PB5 को D5
PIN13 या U6 के PB6 को D6
पिन 14 या U7 के PB7 को D7
सर्किट में आप देख सकते हैं कि हमने 8bit संचार (D0-D7) का उपयोग किया है लेकिन यह अनिवार्य नहीं है, हम 4bit संचार (D4-D7) का उपयोग कर सकते हैं लेकिन 4 बिट संचार कार्यक्रम थोड़ा जटिल हो जाता है। तो जैसा कि ऊपर की तालिका में दिखाया गया है, हम एलसीडी के 10 पिनों को नियंत्रक से जोड़ रहे हैं जिसमें 8 पिन डेटा पिन और नियंत्रण के लिए 2 पिन हैं।
स्विच एक अलार्म और समय के बीच समायोजन सुविधा को सक्षम करने के लिए है। यदि पिन कम है, तो हम बटन दबाकर अलार्म समय को समायोजित कर सकते हैं। अगर इसके हाई बटन सिर्फ TIME को एडजस्ट करने के लिए हैं। यहाँ चार बटन मौजूद हैं, पहले अलार्म या समय में वेतन वृद्धि के लिए है। दूसरा अलार्म या समय में घटाव के लिए है। तीसरा अलार्म या समय में वृद्धि के लिए है। चार घंटे अलार्म या समय में वेतन वृद्धि के लिए है।
यहां मौजूद कैपेसिटर बटन के उछलते प्रभाव को कम करने के लिए है। यदि वे निकाल दिए जाते हैं, तो नियंत्रक प्रत्येक बार बटन दबाए जाने पर एक से अधिक गणना कर सकता है। पिन के लिए जुड़े प्रतिरोधों को वर्तमान को सीमित करने के लिए होता है, जब बटन को पिन को जमीन पर खींचने के लिए दबाया जाता है।
जब भी कोई बटन दबाया जाता है, तो नियंत्रक का संबंधित पिन जमीन पर खिंच जाता है और इस प्रकार नियंत्रक पहचानता है कि निश्चित बटन दबाया गया है और इसी पर कार्रवाई की गई है।
सबसे पहले, हम यहां जो घड़ी चुनते हैं वह 11059200 हर्ट्ज है, इसे 1024 से विभाजित करके 10800 मिलते हैं। इसलिए हर दूसरे के लिए हमें 10800 दालें मिलती हैं। इसलिए हम काउंटर क्लॉक को 10800 हर्ट्ज के रूप में प्राप्त करने के लिए 1024 प्रीस्कूलर के साथ एक काउंटर शुरू करने जा रहे हैं। दूसरा हम ATMEGA के CTC (क्लियर टाइमर काउंटर) मोड का उपयोग करने जा रहे हैं। एक 16 बिट रजिस्टर होगा जहां हम एक मूल्य (तुलना मूल्य) को स्टोर कर सकते हैं, जब काउंटर की गणना मूल्य से तुलना करने के लिए एक बाधा उत्पन्न करने के लिए सेट है।
हम तुलना मूल्य को 10800 पर सेट करने जा रहे हैं, इसलिए मूल रूप से हमारे पास प्रत्येक सेकंड में एक ISR (इंटरप्ट सर्विस रूटीन हर तुलना पर) होगा। तो हम इस समय का उपयोग करने जा रहे हैं, जिस घड़ी की हमें ज़रूरत है।
ब्राउन (WGM10-WGM13): ये बिट्स टाइमर के लिए ऑपरेशन के मोड का चयन करने के लिए हैं।
अब चूंकि हम OCR1A बाइट में मूल्य की तुलना के साथ CTC मोड चाहते हैं, हमें बस WGM12 को एक पर सेट करना है, शेष बचे हुए हैं क्योंकि वे डिफ़ॉल्ट रूप से शून्य हैं।
RED (CS10, CS11, CS12): ये तीन बिट्स प्रिस्कलर चुनने के लिए हैं और इसलिए उपयुक्त काउंटर क्लॉक मिल रही हैं।
चूँकि हम एक 1024 को प्रिस्क्रिप्शन के रूप में चाहते हैं, इसलिए हमें CS12 और CS10 दोनों को सेट करना होगा।
अब एक और रजिस्टर है जिस पर हमें विचार करना चाहिए:
GREEN (OCIE1A): यह बिट काउंटर मूल्य और OCR1A मान (10800) के बीच तुलना मैच पर एक रुकावट प्राप्त करने के लिए निर्धारित किया जाना चाहिए।
OCR1A मान (काउंटर तुलना मूल्य), ऊपर रजिस्टर में लिखा गया है।
प्रोग्रामिंग स्पष्टीकरण
अलार्म घड़ी के काम को नीचे दिए गए कोड में चरण दर चरण समझाया गया है:
#include // हेडर पिन पर डेटा फ्लो कंट्रोल को सक्षम करने के लिए #define F_CPU 1000000 // कंट्रोलर क्रिस्टल फ्रिक्वेंसी बता रहा है #include