DS3231 चिप एक उच्च परिशुद्धता वाली RTC वास्तविक समय घड़ी है जिसमें एक अंतर्निर्मित तापमान-क्षतिपूर्ति क्वार्ट्ज ऑसिलेटर है, जिसके परिणामस्वरूप प्रति वर्ष केवल ±2 मिनट का समय बहाव होता है। इसके अतिरिक्त, एक अलार्म फ़ंक्शन कार्यान्वित किया जाता है, और एक इंटरप्ट आउटपुट भी होता है। घड़ी को स्ट्रैपिंग तत्वों और बैटरी डिब्बे के साथ तैयार Arduino मॉड्यूल के रूप में खरीदा जा सकता है।
मैंने यहां मॉड्यूल का ऑर्डर दिया। आरेख नीचे चित्र में दिखाया गया है:
माइक्रोक्रिकिट व्यापक रूप से उपयोग किया जाता है। मानक (100 kHz) और उच्च (400 kHz) डेटा दरों का समर्थन करता है। I2C बस पर माइक्रोसर्किट पता (7 बिट्स) 1101000 है। इसके अतिरिक्त, मॉड्यूल में I2C मेमोरी (24C32) है, जो चित्र में नहीं दिखाया गया है।
माइक्रोक्रिकिट की आपूर्ति वोल्टेज 2.3...5.5V की सीमा में हो सकती है, बाहरी स्रोत (Vcc लाइन) के लिए, साथ ही बैटरी (Vbat) के लिए दो बिजली लाइनें हैं। बाहरी स्रोत वोल्टेज की लगातार निगरानी की जाती है, और जब यह थ्रेशोल्ड Vpf=2.5V से नीचे चला जाता है, तो यह बैटरी लाइन पर स्विच हो जाता है। निम्न तालिका बिजली लाइनों के बीच स्विच करने की शर्तें दिखाती है:
परिवेश के तापमान की निगरानी करके घड़ी की सटीकता बनाए रखी जाती है। माइक्रोक्रिकिट घड़ी जनरेटर की आवृत्ति को समायोजित करने के लिए एक आंतरिक प्रक्रिया शुरू करता है; समायोजन की मात्रा आवृत्ति बनाम तापमान के एक विशेष ग्राफ का उपयोग करके निर्धारित की जाती है। बिजली लागू होने के बाद प्रक्रिया शुरू होती है और फिर हर 64 सेकंड में चलती है।
चार्ज को संरक्षित करने के लिए, जब बैटरी कनेक्ट होती है (वोल्टेज Vbat लाइन पर लागू होता है), क्लॉक जनरेटर तब तक शुरू नहीं होता है जब तक कि Vcc लाइन पर वोल्टेज थ्रेशोल्ड मान Vpf से अधिक न हो जाए, या माइक्रोक्रिकिट का सही पता इसके माध्यम से प्रसारित न हो जाए I2C इंटरफ़ेस. घड़ी जनरेटर का स्टार्टअप समय एक सेकंड से भी कम है। बिजली लागू होने (Vcc) के लगभग 2 सेकंड बाद, या I2C इंटरफ़ेस के माध्यम से पता प्राप्त होने के बाद, आवृत्ति सुधार प्रक्रिया शुरू होती है। एक बार जब घड़ी जनरेटर चालू हो जाता है, तो यह तब तक काम करता रहता है जब तक Vcc या Vbat मौजूद रहता है। जब पहली बार चालू किया जाता है, तो दिनांक और समय रजिस्टर रीसेट हो जाते हैं और निम्नलिखित मान होते हैं: 01/01/00 - 01 - 00/00/00 (दिन/माह/वर्ष/-सप्ताह का दिन - घंटा/मिनट) /सेकंड).
I2C इंटरफ़ेस के माध्यम से डेटा ट्रांसमिशन की अनुपस्थिति में, 3.63V बैटरी द्वारा संचालित होने पर वर्तमान खपत 3 μA है। बाहरी 5.5V बिजली आपूर्ति और उच्च I2C डेटा ट्रांसफर गति का उपयोग करते समय अधिकतम वर्तमान खपत 300 μA तक पहुंच सकती है।
आरएसटी लाइन का उपयोग बाहरी रीसेट के लिए किया जा सकता है और इसमें कम वोल्टेज अलार्म फ़ंक्शन भी है। लाइन को एक आंतरिक अवरोधक के माध्यम से ऊंचा खींचा जाता है; किसी बाहरी खिंचाव की आवश्यकता नहीं होती है। बाहरी रीसेट फ़ंक्शन का उपयोग करने के लिए, आरएसटी लाइन और सामान्य तार के बीच एक बटन जोड़ा जा सकता है; माइक्रोक्रिकिट में संपर्क बाउंस सुरक्षा होती है। अलार्म फ़ंक्शन तब सक्रिय होता है जब आपूर्ति वोल्टेज वीसीसी थ्रेशोल्ड मान वीपीएफ से नीचे चला जाता है, जबकि आरएसटी लाइन कम तर्क स्तर पर सेट होती है।
नीचे दी गई तालिका वास्तविक समय घड़ी रजिस्टरों की एक सूची दिखाती है:
पता | डी7 | डी6 | डी5 | डी4 | डी3 | डी2 | डी1 | डी0 | समारोह | सीमाएं |
0x00 | 0 | दस पल | सेकंड | सेकंड | 00-59 | |||||
0x01 | 0 | 10 मिनटों | मिनट | मिनट | 00-59 | |||||
0x02 | 0 | 12/24 | दोपहर से पूर्व दोपहर के बाद | 10 घंटे | घंटा | घड़ी | 1-12 + पूर्वाह्न/अपराह्न या 00-23 | |||
10 घंटे | ||||||||||
0x03 | 0 | 0 | 0 | 0 | 0 | दिन | सप्ताह का दिन | 1-7 | ||
0x04 | 0 | 0 | 10 वीं | संख्या | तारीख | 01-31 | ||||
0x05 | शतक | 0 | 0 | 10 महीना | महीना | महीने/शताब्दी | 01-12 + शतक | |||
0x06 | 10 वर्ष | वर्ष | साल | 00-99 | ||||||
0x07 | ए1एम1 | दस पल | सेकंड | सेकंड, पहला अलार्म | 00-59 | |||||
0x08 | ए1एम2 | 10 मिनटों | मिनट | मिनट, पहला अलार्म | 00-59 | |||||
0x09 | A1M3 | 12/24 | दोपहर से पूर्व दोपहर के बाद | 10 घंटे | घंटा | घड़ी, पहला अलार्म | 1-12 + पूर्वाह्न/अपराह्न या 00-23 | |||
10 घंटे | ||||||||||
0x0A | A1M4 | डीवाई/डीटी | 10 वीं | दिन | सप्ताह का दिन, पहला अलार्म | 1-7 | ||||
संख्या | दिनांक, पहला अलार्म | 01-31 | ||||||||
0x0बी | A2M2 | 10 मिनटों | मिनट | मिनट, दूसरा अलार्म | 00-59 | |||||
0x0C | A2M3 | 12/24 | दोपहर से पूर्व दोपहर के बाद | 10 घंटे | घंटा | घड़ी, दूसरा अलार्म | 1-12 + पूर्वाह्न/अपराह्न या 00-23 | |||
10 घंटे | ||||||||||
0x0D | A2M4 | डीवाई/डीटी | 10 वीं | दिन | सप्ताह का दिन, दूसरा अलार्म | 1-7 | ||||
संख्या | दिनांक, दूसरा अलार्म | 01-31 | ||||||||
0x0ई | ईओएससी | बीबीएसक्यूडब्ल्यू | रूपा | आरएस2 | आरएस1 | आईएनटीसीएन | A2IE | A1IE | सेटिंग्स रजिस्टर (नियंत्रण) | |
0x0F | ओ.एस.एफ. | 0 | 0 | 0 | EN32kHz | बीएसवाई | A2F | ए1एफ | स्थिति रजिस्टर | |
0x10 | संकेत | डेटा | डेटा | डेटा | डेटा | डेटा | डेटा | डेटा | एजिंग ऑफसेट रजिस्टर | |
0x11 | संकेत | डेटा | डेटा | डेटा | डेटा | डेटा | डेटा | डेटा | तापमान रजिस्टर, उच्च बाइट | |
0x12 | डेटा | डेटा | 0 | 0 | 0 | 0 | 0 | 0 | तापमान रजिस्टर, कम बाइट |
समय की जानकारी बाइनरी दशमलव प्रारूप में संग्रहीत की जाती है, अर्थात दशमलव संख्या के प्रत्येक अंक (0 से 9 तक) को 4 बिट्स के समूह के रूप में दर्शाया जाता है। एक बाइट के मामले में, कम निबल एक को गिनता है, उच्च निबल दसियों को गिनता है, आदि। समय की गणना 0x00-0x06 पते वाले रजिस्टरों में की जाती है; घंटों की गिनती के लिए, आप 12 या 24 घंटे के मोड का चयन कर सकते हैं। घड़ी रजिस्टर के छठे बिट (पता 0x02) को सेट करने से 12-घंटे का मोड सेट होता है, जिसमें 5वां बिट दिन के समय को इंगित करता है, मान 1 दोपहर (पीएम) से मेल खाता है, मान 0 दोपहर (एएम) से मेल खाता है। 6वें बिट का शून्य मान 24 घंटे के मोड से मेल खाता है, यहां 5वां बिट घंटों की गिनती में शामिल है (मान 20-23)।
सप्ताह रजिस्टर का दिन आधी रात को बढ़ाया जाता है, 1 से 7 तक गिनती की जाती है, महीने रजिस्टर (पता 0x05) में सेंचुरी बिट (7वां बिट) होता है, जो साल गिनती रजिस्टर (पता 0x06) ओवरफ्लो होने पर 99 से 00 तक स्विच हो जाता है। .
DS3231 चिप दो अलार्म घड़ियों को कार्यान्वित करती है, पहली अलार्म घड़ी 0x07-0x0A पते वाले रजिस्टरों का उपयोग करके कॉन्फ़िगर की गई है, दूसरी अलार्म घड़ी 0x0B-0x0D पते वाले रजिस्टरों का उपयोग करके कॉन्फ़िगर की गई है। A1Mx और A2Mx बिट्स का उपयोग अलार्म के लिए विभिन्न मोड को कॉन्फ़िगर करने के लिए किया जा सकता है; बिट सेट करने से संबंधित रजिस्टर तुलना ऑपरेशन से बाहर हो जाता है। नीचे दी गई तालिकाएँ विभिन्न अलार्म मोड के लिए बिट संयोजन दिखाती हैं:
तालिकाओं में निर्दिष्ट नहीं किए गए बिट संयोजन अलार्म के गलत कामकाज का कारण बनते हैं। यदि DY/DT बिट साफ़ हो जाता है, तो अलार्म घड़ी के लिए दिनांक मिलान (महीने का दिन) की निगरानी की जाती है; जब DY/DT बिट सेट किया जाता है, तो सप्ताह के दिन के मिलान की जाँच की जाती है।
अधिकांश फ़ंक्शन नियंत्रण रजिस्टर में कॉन्फ़िगर किए गए हैं। ईओएससी बिट घड़ी जनरेटर की शुरुआत को नियंत्रित करता है, बिट को रीसेट करने से घड़ी जनरेटर शुरू होता है। बिट सेट करने से जनरेटर केवल बैटरी मोड (Vbat) के लिए बंद हो जाता है। बाहरी स्रोत (Vcc) से संचालित होने पर, EOSC बिट की स्थिति की परवाह किए बिना ऑसिलेटर हमेशा चलता रहता है। सक्षम होने पर, डिफ़ॉल्ट बिट मान 0 होता है।
BBSQW बिट सेट करने से बाहरी पावर की अनुपस्थिति में, INT/SQW आउटपुट (तीसरा पिन) को बैटरी पावर मोड में काम करने की अनुमति मिलती है। जब बिट को शून्य पर सेट किया जाता है, तो बाहरी स्रोत वोल्टेज Vcc थ्रेशोल्ड मान Vpf से नीचे आने पर INT/SQW आउटपुट स्थिति 3 (निष्क्रिय) में चला जाता है। पावर लागू होने के बाद, डिफ़ॉल्ट बिट मान 0 है।
CONV बिट मजबूर तापमान माप के लिए जिम्मेदार है; बिट सेट करने से रूपांतरण प्रक्रिया शुरू होती है, जिसके दौरान घड़ी जनरेटर आवृत्ति को भी समायोजित किया जाता है; माप परिणाम 0x11, 0x12 पते वाले रजिस्टरों में स्थित होता है। प्रारंभ करना तभी संभव है जब पिछला रूपांतरण पूरा हो गया हो; प्रारंभ करने से पहले, आपको व्यस्त ध्वज बीएसवाई की जांच करनी होगी। जबरन तापमान रूपांतरण आंतरिक 64 सेकंड आवृत्ति समायोजन चक्र को प्रभावित नहीं करता है। CONV बिट सेट करने से 2 एमएस के लिए BSY ध्वज प्रभावित नहीं होता है। रूपांतरण पूरा होने के बाद CONV और BSY बिट्स स्वचालित रूप से साफ़ हो जाते हैं।
बिट्स RS2, RS1 INT/SQW आउटपुट पर आयताकार दालों (स्क्वायर वेव) की आवृत्ति निर्धारित करते हैं। डिफ़ॉल्ट रूप से, सक्षम होने पर, बिट्स 1 पर सेट होते हैं। नीचे दी गई तालिका बिट्स के संभावित संयोजन दिखाती है:
INTCN बिट INT/SQW आउटपुट को नियंत्रित करता है। यदि बिट को रीसेट किया जाता है, तो आउटपुट पर आयताकार पल्स (वर्ग तरंगें) दिखाई देती हैं, जिसकी आवृत्ति RS2, RS1 बिट्स द्वारा निर्धारित की जाती है। जब INTCN बिट सेट होता है, तो आउटपुट का उपयोग अलार्म इंटरप्ट उत्पन्न करने के लिए किया जाता है। डिफ़ॉल्ट रूप से, बिट मान 1 है। आउटपुट प्रकार INT/SQW है - खुली नाली, इसलिए इसे एक अवरोधक के माध्यम से उच्च तर्क स्तर तक खींचना आवश्यक है, सक्रिय स्तर कम है।
बिट्स A1IE, A2IE सेट करने से क्रमशः पहले और दूसरे अलार्म सिग्नल पर रुकावट आती है। बिट्स को रीसेट करें, व्यवधानों को अक्षम करें। डिफॉल्यू मूल्य शून्य है।
स्थिति रजिस्टर में इवेंट फ़्लैग होते हैं और 32 kHz आउटपुट को नियंत्रित करता है। OSF ध्वज घड़ी जनरेटर की स्थिति को दर्शाता है, 1 के मान का मतलब है कि घड़ी जनरेटर बंद हो गया है, यह घटना निम्नलिखित मामलों में हो सकती है:
एक बार सेट होने के बाद, बिट मान नहीं बदलता है; बिट को मैन्युअल रूप से रीसेट किया जाना चाहिए।
EN32kHz बिट सेट करने से 32kHz आउटपुट (प्रथम पिन) पर आयताकार पल्स (वर्ग तरंगें) उत्पन्न करने की अनुमति मिलती है, पल्स आवृत्ति निश्चित होती है और 32.768 kHz के बराबर होती है। बिट को रीसेट करने से यह फ़ंक्शन अक्षम हो जाता है और आउटपुट तीसरी स्थिति (उच्च इनपुट प्रतिबाधा) में चला जाता है। डिफ़ॉल्ट रूप से, बिट मान 1 है; बिजली लागू होने के बाद, आउटपुट पर पल्स दिखाई देते हैं। आउटपुट प्रकार 32kHz ओपन ड्रेन है, इसलिए इसे उच्च तर्क स्तर तक पुल-अप की आवश्यकता होती है।
बीएसवाई व्यस्त ध्वज तापमान रूपांतरण और घड़ी समायोजन प्रक्रिया के दौरान सेट किया गया है। रूपांतरण पूरा होने पर ध्वज रीसेट हो जाता है।
अलार्म घड़ी के झंडे A1F, A2F तब सेट किए जाते हैं जब समय गिनती रजिस्टर और अलार्म घड़ी रजिस्टर के मान मेल खाते हैं। यदि अलार्म A1IE को बाधित करता है, A2IE सक्षम है, और एक इंटरप्ट आउटपुट असाइन किया गया है (INTCN बिट सेट है), तो INT/SQW आउटपुट पर एक इंटरप्ट सिग्नल दिखाई देता है (उच्च से निम्न तर्क स्तर पर संक्रमण)। मान 0 लिखकर झंडों को मैन्युअल रूप से रीसेट किया जाना चाहिए।
एजिंग ऑफसेट रजिस्टर को घड़ी जनरेटर आवृत्ति को समायोजित करने के लिए डिज़ाइन किया गया है। यदि तापमान परिवर्तन का पता चलता है, और जब CONV बिट द्वारा तापमान रूपांतरण ट्रिगर किया जाता है, तो आंतरिक समायोजन प्रक्रिया के दौरान रजिस्टर मान को ऑसिलेटर आवृत्ति में जोड़ा जाता है। ऑफसेट मान हस्ताक्षरित है, अर्थात सकारात्मक मान (1-127) आवृत्ति को कम करते हैं, नकारात्मक मान (128-255) इसे बढ़ाते हैं। समान ऑफसेट के लिए, तापमान के आधार पर आवृत्ति परिवर्तन भिन्न होगा। +25°C पर, आवृत्ति परिवर्तन 0.1 पीपीएम/एलएसबी होगा।
वर्तमान तापमान मान क्रमशः 0x11 और 0x12 पते वाले रजिस्टरों में संग्रहीत किया जाता है, क्रमशः उच्च और निम्न बाइट, रजिस्टरों में तापमान मान समय-समय पर अद्यतन किया जाता है। बायां संरेखण सेट है, रिज़ॉल्यूशन 10 बिट्स या 0.25 डिग्री सेल्सियस/एलएसबी है, यानी, उच्च बाइट में तापमान का पूर्णांक भाग होता है, और कम रजिस्टरों में 6 वें, 7 वें बिट आंशिक भाग बनाते हैं। उच्च बाइट में, 7वां बिट तापमान के संकेत को इंगित करता है, उदाहरण के लिए, मान 00011011 01 +27.25 डिग्री सेल्सियस के तापमान से मेल खाता है, मान 11111110 10 -2.5 डिग्री सेल्सियस के तापमान से मेल खाता है।
समय रजिस्टरों को पढ़ते समय, एक अतिरिक्त बफर का उपयोग करने की सिफारिश की जाती है, अर्थात, एक साथ कई रजिस्टरों को पढ़ें, और अलग से नहीं, क्योंकि अलग-अलग पढ़ने के संचालन के बीच, समय रजिस्टर अपना मूल्य बदल सकते हैं। खाता रजिस्टरों में नया डेटा लिखते समय भी इस नियम का पालन करने की अनुशंसा की जाती है। सेकंड रजिस्टर में एक नया मान लिखने से घड़ी 1 सेकंड के लिए रुक जाती है, इस दौरान शेष रजिस्टरों को फिर से लिखना होगा।
मैंने घड़ी को PIC16F628A माइक्रोकंट्रोलर से कनेक्ट किया और उपयोग किया। कनेक्शन आरेख नीचे दिखाया गया है:
बिजली लागू होने के बाद, संकेतकों पर डैश (- - - - - -) प्रदर्शित होते हैं, फिर घड़ी को आरंभ किया जाता है, समय मान 1 सेकंड की देरी से संकेतकों पर दिखाई देता है, जो घड़ी जनरेटर को शुरू करने के लिए आवश्यक है। संकेतक घंटे, मिनट और सेकंड को दशमलव बिंदु से अलग करके प्रदर्शित करते हैं, और समय प्रारूप 24-घंटे है। SB1 "संकेत" बटन का उपयोग करके, आप डिस्प्ले प्रारूप को बदल सकते हैं, जहां संकेतक तापमान प्रदर्शित करेंगे, साथ ही दशमलव बिंदु द्वारा अलग किए गए घंटों और मिनटों का मान भी प्रदर्शित करेंगे, जो 2 हर्ट्ज की आवृत्ति पर झपकाता है। तापमान को आंशिक भाग के बिना प्रदर्शित किया जाता है; प्रोग्राम केवल पते 0x11 पर तापमान भंडारण के उच्च बाइट को पढ़ता है।
समय मान को घड़ी से SQW/INT लाइन पर एक इंटरप्ट के माध्यम से पढ़ा जाता है, जिसे पहले अलार्म सिग्नल द्वारा नियंत्रित किया जाता है; घड़ी आरंभीकरण के दौरान, अलार्म घड़ी को हर दूसरे सिग्नल पर सेट किया जाता है। HL1 LED एक संकेतक के रूप में कार्य करता है और हर सेकंड इंटरप्ट सिग्नल पर चमकता है। I2C इंटरफ़ेस के माध्यम से डेटा ट्रांसमिशन में कोई त्रुटि होने पर HL2 LED जलती है।
इसके अतिरिक्त, मैंने प्रोग्राम में SB2 "सेटिंग्स", SB3 "इंस्टॉलेशन" बटन का उपयोग करके घड़ी सेट करने की क्षमता जोड़ी। सेटअप मोड SB2 बटन दबाकर दर्ज किया जाता है; संकेतक मिनट और सेकंड (00 - - - -) के बजाय 00 घंटे और डैश प्रदर्शित करते हैं। SB3 बटन का उपयोग करके, आप घंटे का मान सेट करते हैं (प्रत्येक प्रेस के साथ वृद्धि), फिर SB2 बटन दबाने से मिनटों का संपादन शुरू हो जाता है; डैश के बजाय, 00 मिनट प्रदर्शित होंगे। बटन SB3 आवश्यक मान इत्यादि भी सेट करता है। सेकंड संपादित करने और SB2 बटन दबाने के बाद, घड़ी में समय फिर से लिखा जाता है, और अद्यतन समय संकेतकों पर प्रदर्शित होता है।
आंशिक प्रोग्राम कोड नीचे दिया गया है (पूर्ण संस्करण लेख के अंत में डाउनलोड किया जा सकता है):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #शामिल करना
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #शामिल करना CONFIG H"3F10" ;माइक्रोकंट्रोलर कॉन्फ़िगरेशन त्रुटिस्तर -302; सूची में 302 त्रुटि संदेश प्रदर्शित न करें Sec eq 0020h ;सहायक खाता रजिस्टर Sec1 eq 0021h ; Sec2 eq 0022h ; स्किटबिट इक्व 0024एच; बिट्स की सहायक रजिस्टर संख्या की गिनती पेरेम ईक्यू 0025एच; एसपीआई, आई2सी के माध्यम से सहायक बाइट रिसेप्शन/ट्रांसमिशन रजिस्टर तापमान समीकरण 0026h ;तापमान रजिस्टर perem_1 eq 0027h ;बीसीडी सहायक रजिस्टर परिणाम समान 0028h; बाइनरी-दशमलव कनवर्टर सहायक रजिस्टर dat_ind eq 0029h; एसपीआई प्रोटोकॉल के माध्यम से ट्रांसमिशन के लिए डेटा रजिस्टर adr_ind eq 002Ah; spi प्रोटोकॉल के माध्यम से ट्रांसमिशन के लिए पता रजिस्टर समय निर्धारित करने के लिए दूसरा ईक्यू 002बीएच; सेकंड स्टोरेज रजिस्टर समय निर्धारित करने के लिए मिनट समान 002Ch; मिनट भंडारण रजिस्टर समय निर्धारित करने के लिए घंटा समान 002Dh; घंटा भंडारण रजिस्टर adr_i2c eq 002Eh; i2c इंटरफ़ेस डेटा ट्रांसफर सबरूटीन के रजिस्टर tmp_i2c समान 002Fh स्लेव_एडीआर इक्व 0030एच डेटा_आई2सी इक्व 0031एच ध्वज समान 007Fh ;ध्वज रजिस्टर #DEFINE int PORTB,0 ;इंटरप्ट लाइन INT/SQW DS3231 #एसडीए पोर्टबी,1 को परिभाषित करें;डीएस3231 को जोड़ने के लिए एसडीए लाइन #DS3231 को जोड़ने के लिए SCL PORTB,2 ;SCL लाइन को परिभाषित करें #DEFINE डेटाई PORTB,5; MAX7219 ड्राइवर की डेटा इनपुट लाइन #DEFINE सीएस पोर्टबी,6; ड्राइवर चयन लाइन MAX7219 #DEFINE clk PORTB,7 ;MAX7219 ड्राइवर की क्लॉक लाइन #DEFINE LED PORTB,4 ;i2c त्रुटि LED #DEFINE LED_sec PORTB,3 ;LED क्लॉक प्रोग्रेस इंडिकेटर 1Hz #DEFINE रेगिम पोर्टा,2; इंडिकेशन बटन - डिस्प्ले मोड बदलता है #DEFINE nast PORTA,3 ;सेटिंग्स बटन - समय सेटिंग मोड में प्रवेश करता है #पोर्टा को परिभाषित करें,4; सेट बटन - घड़ी का मान सेट करें ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h; पता 0000h से प्रोग्राम निष्पादन प्रारंभ करें प्रारंभ करें; प्रारंभ लेबल पर जाएं ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;मुख्य कार्यक्रम Movlw b"00000000" प्रारंभ करें; पोर्ट A के आउटपुट लैच के मान सेट करें movlw b"01000000" ;पोर्ट बी के आउटपुट लैच के मान सेट करें movlw b"00000111"; तुलनित्र बंद करें बीएसएफ स्थिति, आरपी0; पहला बैंक चुनें movlw b"00000111"; पोर्ट बी की इनपुट/आउटपुट लाइनों को कॉन्फ़िगर करना movwf TRISB ;RB0-RB2 - इनपुट के लिए, बाकी आउटपुट के लिए movlw b"11111111"; पोर्ट ए की इनपुट/आउटपुट लाइनें सेट करना movwf TRISA; इनपुट के लिए सभी पंक्तियाँ बीसीएफ स्थिति, आरपी0; बैंक 0 चुनें सीएलआरएफ ध्वज; ध्वज रजिस्टर रीसेट करें init_lcd को कॉल करें; ड्राइवर इनिशियलाइज़ेशन रूटीन को कॉल करें (MAX7219) viv_not को कॉल करें; संकेतकों के लिए आउटपुट डैश प्रतीक "------"। ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw b"11010000" ;डिवाइस पता (DS3231) ;i2c के माध्यम से प्राप्त/संचारित रजिस्टरों में 4 बाइट्स लिखें movlw data_i2c; i2c के माध्यम से पहला प्राप्त/ट्रांसमिट रजिस्टर सेट करना movlw b"10000000" ;पहले अलार्म के सेकंड रजिस्टर के लिए डेटा movlw b"10000000" ;पहले अलार्म के मिनट रजिस्टर के लिए डेटा movlw b"10000000" ;पहले अलार्म क्लॉक रजिस्टर के लिए डेटा movlw b"10000000" ;पहले अलार्म के सप्ताह रजिस्टर की तारीख/दिन के लिए डेटा movlw .4; i2c के माध्यम से 4 बाइट्स स्थानांतरित करें movlw 0x07; पहली अलार्म घड़ी के सेकंड रजिस्टर का पता सेट करना |
विशिष्ट सुविधाएं:
आवेदन पत्र:
DS3231 के लिए विशिष्ट कनेक्शन आरेख:
सामान्य विवरण:
DS3231 एक उच्च-सटीक वास्तविक समय घड़ी (RTC) है जिसमें अंतर्निहित I 2 C इंटरफ़ेस, तापमान-क्षतिपूर्ति क्रिस्टल ऑसिलेटर (TCXO) और क्वार्ट्ज रेज़ोनेटर है। डिवाइस में बैकअप स्वायत्त पावर स्रोत को जोड़ने के लिए एक इनपुट है, जो मुख्य आपूर्ति वोल्टेज बंद होने पर भी टाइमकीपिंग और तापमान माप की अनुमति देता है। अंतर्निर्मित क्वार्ट्ज रेज़ोनेटर डिवाइस की सेवा जीवन को बढ़ाता है और बाहरी तत्वों की आवश्यक संख्या को कम करता है। DS3231 वाणिज्यिक और औद्योगिक तापमान संस्करणों में उपलब्ध है और इसे 300 मिल 16 पिन SO पैकेज में पैक किया गया है।
आरटीसी सेकंड, मिनट, घंटे, सप्ताह के दिन, महीने और वर्ष के दिनों की गिनती प्रदान करता है। महीने की अंतिम तिथि लीप वर्ष को ध्यान में रखते हुए स्वचालित रूप से निर्धारित की जाती है। वास्तविक समय घड़ी दिन के वर्तमान आधे हिस्से (एएम/पीएम) के संकेत के साथ 24 या 12 घंटे के प्रारूप में संचालित होती है। डिवाइस में दो दैनिक अलार्म और प्रोग्रामयोग्य आवृत्ति के साथ एक वर्ग तरंग आउटपुट है। डिवाइस के साथ डेटा का आदान-प्रदान अंतर्निहित सीरियल I 2 C संगत इंटरफ़ेस के माध्यम से किया जाता है।
". आइए DS3231 रीयल-टाइम क्लॉक मॉड्यूल से परिचित हों। लेख में डीएस परिवार से Arduino तक मॉड्यूल को जोड़ने के वीडियो निर्देश, प्रोग्राम लिस्टिंग, उद्देश्य और तरीके शामिल हैं।
DS3231 रियल टाइम क्लॉक मॉड्यूल
वास्तविक समय घड़ी मॉड्यूल- यह एक इलेक्ट्रॉनिक सर्किट है जिसे क्रोनोमेट्रिक डेटा (वर्तमान समय, तिथि, सप्ताह का दिन, आदि) रिकॉर्ड करने के लिए डिज़ाइन किया गया है, और यह एक प्रणाली है जिसमें एक स्वायत्त पावर स्रोत और एक रिकॉर्डिंग डिवाइस शामिल है।
DS3231 मॉड्यूलयह मूलतः एक साधारण घड़ी है। Arduino बोर्ड में पहले से ही एक अंतर्निहित टाइम सेंसर होता है मिली सेकंडहालाँकि, यह केवल तभी काम करता है जब बोर्ड पर बिजली लागू की जाती है। यदि आप बंद करते हैं और फिर Arduino चालू करते हैं, तो मिलिस समय शून्य पर रीसेट हो जाएगा। और DS3231 में बोर्ड पर एक बैटरी है, जो Arduino बोर्ड के डिस्कनेक्ट होने पर भी मॉड्यूल को "पावर" देती रहती है, जिससे यह समय मापने की अनुमति देता है।
मॉड्यूल का उपयोग Arduino बोर्डों पर आधारित घड़ी या अलार्म घड़ी के रूप में किया जा सकता है। या विभिन्न प्रणालियों के लिए अलर्ट के रूप में, उदाहरण के लिए स्मार्ट होम में।
DS3231 विशिष्टताएँ:
32K- बाहरी बिजली की आपूर्ति करने के लिए डिज़ाइन किया गया आउटपुट> 12V।
एस.क्यू.डब्ल्यू.- प्रोग्रामयोग्य स्क्वायर-वेव सिग्नल आउटपुट।
एससीएल– इस पिन के माध्यम से I2C इंटरफ़ेस के माध्यम से घड़ी के साथ डेटा का आदान-प्रदान किया जाता है।
एस.डी.ए.– घड़ी से डेटा इस पिन के माध्यम से प्रसारित होता है।
वी.सी.सी- वास्तविक समय घड़ी के लिए बिजली की आपूर्ति, 5 वोल्ट की आवश्यकता है। यदि इस पिन पर कोई वोल्टेज आपूर्ति नहीं की जाती है, तो घड़ी स्लीप मोड में चली जाती है।
जी.एन.डी- धरती।
विभिन्न Arduino बोर्डों पर SDA और SCL पिन:
एस.डी.ए. | एससीएल | |
संयुक्त राष्ट्र संघ | ए4 | ए5 |
छोटा | ए4 | ए5 |
नैनो | ए4 | ए5 |
मेगा2560 | 20 | 21 |
लियोनार्डो | 2 | 3 |
आइए वास्तविक समय घड़ी मॉड्यूल को Arduino UNO से कनेक्ट करें। एसडीए - पिन ए4, एससीएल - पिन ए5।
निम्नलिखित प्रोग्राम मॉडल के काम करने के लिए उपयुक्त है (आप बस प्रोग्राम को Arduino IDE में कॉपी कर सकते हैं):
#शामिल करना
व्यर्थ व्यवस्था() (
विलंब(300);
सीरियल.शुरू(9600);
समय.शुरू();
}
शून्य लूप()
}
}
इस स्केच में, समय बस गिन रहा है।
सबसे पहले sktech में लाइब्रेरी को कनेक्ट करें iarduino_RTC.h.
वहां, अपने मॉड्यूल के साथ सही ढंग से काम करने के लिए उसका सटीक नाम बताएं।
परिणामस्वरूप, हमें DS3231 मॉड्यूल से पोर्ट मॉनिटर तक टाइम आउटपुट मिलता है। घंटे, मिनट, सेकंड प्रदर्शित होते हैं।
अगले स्केच में हम एक फ़ंक्शन जोड़ेंगे निर्धारित समय, जो आपको प्रारंभिक उलटी गिनती का समय निर्धारित करने की अनुमति देता है।
#शामिल करना
iarduino_RTC समय(RTC_DS3231);
व्यर्थ व्यवस्था() (
विलंब(300);
सीरियल.शुरू(9600);
समय.शुरू();
समय.सेटटाइम(0,0,18,24,04,17,1); // 0 सेकंड, 0 मिनट, 18 घंटे, 24 अप्रैल 2017, सोमवार
}
शून्य लूप()
if(millis()%1000==0)( // यदि 1 सेकंड बीत चुका है
Serial.println(time.gettime('d-m-Y, H:i:s, D')); // समय दर्शायें
विलंब(1); // 1 एमएस के लिए रुकें ताकि 1 एमएस में कई बार समय प्रदर्शित न हो
}
}
उदाहरण में, समय की गिनती 0 सेकंड, 0 मिनट, 18 बजे, 24 अप्रैल, 2017, सोमवार से शुरू होती है।
पाठ पोस्ट:
आज हम सही रियल टाइम क्लॉक (आरटीसी) चिप की खोज जारी रखेंगे। के आधार पर हम घड़ियाँ बनाएंगे। डिस्प्ले विकास के लिए अधिक सुविधाजनक होगा - एक एलसीडी डिस्प्ले, जो सेटिंग्स को छोड़कर सभी जानकारी एक साथ प्रदर्शित करेगा। इस रूप में, घड़ी को डेस्कटॉप विकल्प के रूप में उपयोग करना सुविधाजनक है।
तो, आइए DS3231 चिप को ही देखें। DS3231 बेहद सटीक गति वाली एक वास्तविक समय की घड़ी है (निर्माताओं ने यह शब्द चुना है) तापमान क्षतिपूर्ति के साथ अंतर्निर्मित क्वार्ट्ज रेज़ोनेटर के कारण। डेटा ट्रांसफर इंटरफ़ेस I 2 C है। इस माइक्रोक्रिकिट में बैकअप बैटरी वोल्टेज के लिए एक इनपुट भी है; जब मुख्य बिजली बंद हो जाती है, तो माइक्रोक्रिकिट स्वचालित रूप से बैकअप बैटरी से संचालन पर स्विच हो जाता है, बैकअप बैटरी से संचालन की सटीकता नहीं होती है प्रभावित। यह बहुत सुखद है, है ना? DS3231 सेकंड, मिनट, घंटे, महीने के दिन (तारीख), सप्ताह के दिन, महीने और साल (महीनों के लिए लीप वर्ष सहित) की गिनती का समर्थन करता है। 12 और 24 घंटे के प्रारूप में काम का समर्थन करता है। उन्हें कॉन्फ़िगर करने और उनकी स्थिति की निगरानी करने की क्षमता वाली 2 अलार्म घड़ियाँ हैं। तापमान क्षतिपूर्ति सटीकता का समायोजन। और दो आउटपुट भी - 32 kHz पर (आउटपुट 32.768 kHz है) और 1 Hz से 8.192 kHz तक प्रोग्राम करने योग्य आउटपुट। एक रीसेट पिन भी है - आरएसटी। रीयल-टाइम क्लॉक चिप SO-16 पैकेज में उपलब्ध है। मामला काफी बड़ा है, लेकिन अगर आप मानते हैं कि अंदर पहले से ही क्वार्ट्ज है, और यह तापमान की भरपाई भी करता है, तो मुझे ऐसा लगता है कि आयामों के साथ सब कुछ ठीक है। DS3231 में DS3232 के रूप में एक जुड़वां है, हालाँकि, इसके 2 और पैर हैं। यह सब NXP उत्पादों - PCA2129 और PCF2129 क्लॉक चिप्स की बहुत याद दिलाता है। समान तापमान-क्षतिपूर्ति अंतर्निर्मित क्वार्ट्ज रेज़ोनेटर, दोनों एक ही जुड़वां हैं केवल एनसी की विभिन्न संख्या के साथ। टाइमकीपिंग के अलावा DS3231 से संबंधित पिन और समान कार्य।
RTC DS3231 आवश्यक वायरिंग के साथ-साथ EEPROM चिप के साथ मॉड्यूल के रूप में बिक्री के लिए उपलब्ध हैं, जिसकी अक्सर आवश्यकता नहीं होती है, यह केवल वजन बढ़ाता है:
आवश्यक भागों के अलावा, मॉड्यूल बोर्ड पर एक एलईडी भी है, जिसका कार्य टर्मिनलों को बिजली कनेक्शन का संकेत देना है। उन्होंने शायद इसे केवल सुंदरता के लिए वितरित किया है।
ऐसी वास्तविक समय घड़ी चिप के साथ काम करते समय यह जानना महत्वपूर्ण है कि इससे डेटा कैसे निकाला जाए या उसे वहां कैसे लिखा जाए। घड़ी में I 2 C इंटरफ़ेस है। डेटा लिखने के लिए (और डेटा को पढ़ने के लिए यह भी आवश्यक है), आपको प्रारंभ स्थिति को पारित करने की आवश्यकता है (ये आदेश I 2 C के लिए हार्डवेयर या सॉफ़्टवेयर का उपयोग करके किए जाते हैं) माइक्रोकंट्रोलर), फिर बिट रिकॉर्ड के साथ चिप का पता पास करें, फिर उस रजिस्टर का पता पास करें जिस तक हम पहुंचेंगे और फिर डेटा का एक बाइट इस रजिस्टर में ट्रांसफर करें, यदि आप फिर डेटा का एक और बाइट ट्रांसफर करते हैं, तो यह होगा अगले रजिस्टर में लिखा गया, इत्यादि। समाप्त होने पर, आपको रुकने की स्थिति से गुजरना होगा। चित्र में उपरोक्त का ग्राफिक प्रतिनिधित्व:
प्रारंभिक सेटअप के साथ-साथ वर्तमान समय निर्धारित करने के लिए डेटा रिकॉर्डिंग आवश्यक है। इसके बाद, हमें वर्तमान समय और तारीख के बारे में लगातार डेटा प्राप्त करने की आवश्यकता है। ऐसा करने के लिए, इस जानकारी को संग्रहीत करने वाले रजिस्टरों से पढ़ना आवश्यक है। पढ़ने में दो प्रक्रियाएँ शामिल हैं - वांछित रजिस्टर पर एक पॉइंटर सेट करना और उसे पढ़ना। वांछित रजिस्टर में एक पॉइंटर सेट करने के लिए, आपको स्टार्ट कंडीशन को पास करना होगा, फिर चिप के पते को राइट बिट के साथ और एक बाइट को रजिस्टर पते के साथ पास करना होगा। अगली स्थिति या तो रोकने की स्थिति है और फिर प्रारंभ की स्थिति है, या बस पुनः आरंभ करने की स्थिति है। अब दूसरी प्रक्रिया सीधे रजिस्टरों से पढ़ने की है। प्रारंभ प्रेषित होता है, फिर आपको रीड बिट के साथ माइक्रोक्रिकिट का पता भेजना होगा और फिर आवश्यक संख्या में रजिस्टरों को पढ़ना होगा, और पूरा होने पर, स्टॉप स्थिति संचारित करना होगा। यदि रजिस्टर से जानकारी पढ़ी गई है, तो माइक्रोकंट्रोलर (डिवाइस मास्टर) की ओर से अनावश्यक कार्रवाई के बिना पॉइंटर स्वचालित रूप से अगले रजिस्टर में चला जाता है। यह आंकड़ा I 2 C इंटरफ़ेस का उपयोग करके रजिस्टर पढ़ने के संबंध में ऊपर कही गई सभी बातों को दर्शाता है:
चिप पता:
C कोड इस तरह दिखेगा:
// घड़ी के साथ कार्य ============================================ =============== ================================= ================== ======== // प्रारंभिक सेटिंग्स आरंभ करना void RTC_init(void)( i2c_start_cond(); // i2c प्रारंभ करना i2c_send_byte(RTC_adr_write); // डिवाइस एड्रेस ट्रांसफर करना, रिकॉर्डिंग मोड i2c_send_byte(0x0E); // मेमोरी एड्रेस i2c_send_byte(0b00100000) ट्रांसफर करना; // 1 हर्ट्ज i2c_send_byte(0b00001000) पर तापमान रूपांतरण और आउटपुट शुरू करना; // 32 kHz आउटपुट i2c_stop_cond() सक्षम करना; // i2c रोकें) // समय और दिनांक प्राप्त करें शून्य RTC_read_time(void)( i2c_start_cond() ; // i2c प्रारंभ करें i2c_send_byte(RTC_adr_write); // डिवाइस पता स्थानांतरित करें, मोड i2c_send_byte(0x00) लिखें; // मेमोरी पता स्थानांतरित करें i2c_stop_cond(); // i2c i2c_start_cond() को रोकें; // i2c i2c_send_byte(RTC_adr_read) प्रारंभ करें; // डिवाइस एड्रेस ट्रांसमिट करना, रीडिंग मोड सेकंड = bcd(i2c_get_byte(0)); // सेकंड पढ़ना, ACK मिनट = bcd(i2c_get_byte (0)); // पढ़ने के मिनट, ACK घंटा = bcd(i2c_get_byte(0)); // पढ़ने की घड़ी, ACK wday = bcd(i2c_get_byte(0)); // सप्ताह का दिन पढ़ना, ACK दिन = bcd(i2c_get_byte(0)); // संख्या पढ़ना, ACK माह = bcd(i2c_get_byte(0)); // पढ़ने का महीना, ACK वर्ष = bcd(i2c_get_byte(1)); // पढ़ने का वर्ष, NACK i2c_stop_cond(); // i2c रोकें) // समय शून्य सेट करें RTC_write_time(unsigned char Hour1, unsigned char min1, unsigned char sec1)( i2c_start_cond(); // i2c शुरू करें i2c_send_byte(RTC_adr_write); // डिवाइस एड्रेस ट्रांसफर करें, रिकॉर्डिंग मोड i2c_send_byte( 0x00); // मेमोरी एड्रेस का स्थानांतरण i2c_send_byte(bin(sec1)); // 0x00 सेकंड (क्या सेकंड भी निर्दिष्ट करना उचित है?) i2c_send_byte(bin(min1)); // 0x01 मिनट i2c_send_byte(bin(hour1)) ; // 0x02 घड़ी i2c_stop_cond(); // i2c रोकें ) // दिनांक शून्य RTC_write_date सेट करें (अहस्ताक्षरित चार दिन, अहस्ताक्षरित चार दिन, अहस्ताक्षरित चार माह, अहस्ताक्षरित चार वर्ष) (i2c_start_cond(); // i2c प्रारंभ करें i2c_send_byte(RTC_adr_write ); // डिवाइस पते स्थानांतरित करें, रिकॉर्डिंग मोड i2c_send_byte(0x03); // मेमोरी पते का स्थानांतरण i2c_send_byte(bin(wday)); // 0x03 सप्ताह का दिन (रविवार - 1, सोमवार 2, मंगल 3, बुध 4, गुरु 5, शुक्र 6, शनि 7 ) i2c_send_byte(bin(day)); // 0x04 दिन महीना i2c_send_byte(bin(month)); // 0x05 महीना i2c_send_byte(bin(year)); // 0x06 वर्ष i2c_stop_cond(); // i2c रोकें) // तापमान शून्य पढ़ें RTC_read_temper(void)( i2c_start_cond(); // i2c शुरू करें i2c_send_byte(RTC_adr_write); // डिवाइस एड्रेस ट्रांसफर करें, मोड i2c_send_byte(0x11) लिखें; // मेमोरी एड्रेस i2c_stop_cond ट्रांसफर करें (); // i2c i2c_start_cond() को रोकें; // i2c i2c_send_byte(RTC_adr_read) प्रारंभ करें; // डिवाइस पता संचारित करें, रीड मोड t1 = i2c_get_byte(0); // MSB तापमान पढ़ें t2 = i2c_get_byte(1); // पढ़ें एलएसबी तापमान i2c_stop_cond (); // रोकें i2c t2=(t2/128); // 6 से बदलाव - परिशुद्धता 0.25 (2 बिट्स) // 7 से बदलाव - परिशुद्धता 0.5 (1 बिट) t2=t2*5; )
यह सभी स्रोत कोड है जिसका उपयोग माइक्रोसर्किट के साथ काम करने के लिए किया जाता है; घड़ी की गति को समायोजित करने से प्रभावित नहीं हुआ था, क्योंकि घड़ी ने कई दिनों में एक सेकंड भी नहीं खोया था।
हाँ - एक महान सुविधा DS3231 यह है कि एक ही चिप एक थर्मामीटर (अन्यथा तापमान क्षतिपूर्ति कैसे करें) और वर्तमान तापमान को पढ़ने की क्षमता का कार्य करती है। अधिकतम तापमान विभेदन 0.25 डिग्री सेल्सियस है। इसके अलावा, तापमान अद्यतन अवधि काफी लंबी है - लगभग 1 मिनट। हां, हमें इसे जल्दी से अपडेट करने की कोई जरूरत नहीं है।
संपूर्ण घड़ी संरचना का आरेख इस प्रकार दिखता है:
माइक्रोकंट्रोलर को इसकी व्यापक उपलब्धता और कम कीमत के लिए Atmega8 द्वारा चुना गया था। इस माइक्रोकंट्रोलर का उपयोग DIP-28 पैकेज और TQFP-32 पैकेज में SMD संस्करण दोनों में किया जा सकता है। PC6 पिन पर यादृच्छिक शोर की स्थिति में माइक्रोकंट्रोलर के सहज पुनरारंभ को रोकने के लिए रेसिस्टर R3 आवश्यक है। रेसिस्टर R3 इस पिन पर पावर प्लस खींचता है, जिससे विश्वसनीय रूप से इसके पार एक क्षमता पैदा होती है। डिस्प्ले के लिए लिक्विड क्रिस्टल डिस्प्ले (एलसीडी) का उपयोग किया जाता है। मैंने 2004ए डिस्प्ले का उपयोग किया - 20 अक्षरों की 4 पंक्तियाँ सुंदरता के लिए अधिक हैं, इसलिए आप अधिक परिचित डिस्प्ले का उपयोग कर सकते हैं - 16 अक्षरों की 2 पंक्तियाँ। एलसीडी डिस्प्ले चार-बिट सिस्टम का उपयोग करके माइक्रोकंट्रोलर से जुड़ा होता है। डिस्प्ले पर वर्णों के कंट्रास्ट को समायोजित करने के लिए वेरिएबल रेसिस्टर R2 आवश्यक है। इस अवरोधक के स्लाइडर को घुमाकर हम स्क्रीन पर हमारे लिए सबसे स्पष्ट रीडिंग प्राप्त करते हैं। एलसीडी डिस्प्ले की बैकलाइट को डिस्प्ले बोर्ड पर पिन "ए" और "के" के माध्यम से व्यवस्थित किया जाता है। बैकलाइट को वर्तमान-सीमित अवरोधक - R1 के माध्यम से चालू किया जाता है। मान जितना अधिक होगा, डिस्प्ले का बैकलिट उतना ही मंद होगा। हालाँकि, बैकलाइट को होने वाले नुकसान से बचने के लिए इस अवरोधक की उपेक्षा नहीं की जानी चाहिए। बटन S1 - S4 घड़ी सेटिंग्स को नियंत्रित करते हैं। एलईडी इंगित करती है कि अलार्म बंद हो गया है। एलईडी को किसी प्रकार के ध्वनि सर्किट से बदला जा सकता है। प्रतिरोधक R5 - R8 पुल-अप हैं और क्लॉक चिप के टर्मिनलों पर आयताकार पल्स के निर्माण के लिए आवश्यक हैं। यह I2C प्रोटोकॉल के सही संचालन के लिए भी आवश्यक है। सर्किट को पावर देने के लिए, एक लीनियर स्टेबलाइजर चिप L7805 का उपयोग किया जाता है; इसे पांच-वोल्ट लीनियर स्टेबलाइजर KR142EN5A के घरेलू एनालॉग से बदला जा सकता है, या आप सर्किट में इसके कनेक्शन के अनुसार किसी अन्य वोल्टेज स्टेबलाइजर चिप का उपयोग कर सकते हैं (उदाहरण के लिए, LM317 या स्विचिंग स्टेबलाइजर्स LM2576, LM2596, MC34063, इत्यादि)। इसके बाद, 5 वोल्ट को एक अन्य माइक्रोक्रिकिट - AMS1117 द्वारा एक संस्करण में स्थिर किया जाता है जो 3.3 वोल्ट का आउटपुट देता है। डेटाशीट के अनुसार क्लॉक चिप 3.3 वोल्ट के वोल्टेज द्वारा संचालित होती है। हालाँकि, अधिकतम वोल्टेज 5.5 वोल्ट है। इसलिए, इस स्टेबलाइज़र का उपयोग किया जा सकता है या नहीं, यह आपके विवेक पर निर्भर करता है। AMS1117 वोल्टेज स्टेबलाइज़र को ADJ संस्करण (AMS1117ADJ) से भी बदला जा सकता है - यानी, एक समायोज्य संस्करण, आपको इस विकल्प के साथ आवश्यक वोल्टेज सेट करने की आवश्यकता होगीइसकी डेटाशीट के अनुसार माइक्रोक्रिकिट से जुड़े दो प्रतिरोधकों का उपयोग करना।
ATmega8 माइक्रोकंट्रोलर के लिए एक विकास बोर्ड का उपयोग करके सर्किट को इकट्ठा और डिबग किया गया था:
बटनों का उद्देश्य:
क्रिस्टल आवृत्ति को नियंत्रित करने के लिए 32 kHz पिन का उपयोग किया जा सकता है। हम एक फ़्रीक्वेंसी मीटर या ऑसिलोस्कोप को इस पिन से जोड़ते हैं और फ़्रीक्वेंसी को नियंत्रित करते हैं:
जैसा कि ऑसिलोग्राम के स्क्रीनशॉट से देखा जा सकता है, आवृत्ति लगभग 32.768 kHz से मेल खाती है (लगभग आवृत्ति माप के रिज़ॉल्यूशन में सीमाओं के कारण, और "आंख से" इतनी सटीकता से निर्धारित करना मुश्किल है)।
परिणाम निम्नलिखित विशेषताओं वाली एक घड़ी थी:
आइए संक्षेप करें. DS3231 रीयल-टाइम क्लॉक चिप एक उत्कृष्ट समाधान है। सटीकता कुछ DS1307 या उच्चतर के बराबर है, लेकिन PCA/PCF2129 अभी भी इसके साथ प्रतिस्पर्धा कर सकता है। मेरे द्वारा समीक्षा की गई वास्तविक समय घड़ी चिप्स में, यह उदाहरण वर्तमान में कार्यक्षमता और सटीकता के मामले में पहले स्थान पर है।
Atmega8 माइक्रोकंट्रोलर को प्रोग्राम करने के लिए, आपको फ़्यूज़ बिट्स का कॉन्फ़िगरेशन जानना होगा (प्रोग्राम में लिया गया स्क्रीनशॉट):
लेख में Atmega8 माइक्रोकंट्रोलर के लिए फर्मवेयर, प्रोग्राम में एक सर्किट डिज़ाइन, साथ ही काम करने वाली घड़ी का एक वीडियो (शुरुआत में अलार्म बंद हो जाएगा - एलईडी जल जाएगी) शामिल है।
पद का नाम | प्रकार | मज़हब | मात्रा | टिप्पणी | दुकान | मेरा नोटपैड |
---|---|---|---|---|---|---|
आईसी1 | एमके एवीआर 8-बिट | ATmega8 | 1 | नोटपैड के लिए | ||
आईसी2 | वास्तविक समय घड़ी (आरटीसी) | डीएस3231 | 1 | नोटपैड के लिए | ||
VR1 | रैखिक नियामक | एल7805एबी | 1 | नोटपैड के लिए | ||
VR2 | रैखिक नियामक | AMS1117-3.3 | 1 | नोटपैड के लिए | ||
वीडी1 | दिष्टकारी डायोड | 1एन4148 | 1 | नोटपैड के लिए | ||
सी 1 | 470 μF | 1 | नोटपैड के लिए | |||
सी2, सी3, सी5, सी7 | संधारित्र | 100 एनएफ | 4 | नोटपैड के लिए | ||
सी 4 | विद्युत - अपघटनी संधारित्र | 220 μF | 1 | नोटपैड के लिए | ||
सी6, सी8 | विद्युत - अपघटनी संधारित्र | 10 μF | 2 | नोटपैड के लिए | ||
आर 1 | अवरोध | 22 ओम | 1 | नोटपैड के लिए | ||
आर2 | ट्रिमर रोकनेवाला | 10 कोहम | 1 | 3296W-1-103LF |
कई उपकरणों को क्रोनोमेट्रिक डेटा (तिथि, समय) की निरंतर रिकॉर्डिंग की आवश्यकता होती है; यह कार्य विशेष इलेक्ट्रॉनिक सर्किट द्वारा किया जाता है जिन्हें वास्तविक समय घड़ियां कहा जाता है। वर्तमान में, एक वास्तविक समय घड़ी को एक अलग माइक्रोक्रिकिट के रूप में लागू किया जाता है, जिसमें आपको एक क्वार्ट्ज रेज़ोनेटर और एक स्वायत्त बिजली आपूर्ति जोड़ने की आवश्यकता होती है। कुछ माइक्रो-सर्किट में, एक क्वार्ट्ज रेज़ोनेटर अंदर बनाया जाता है। इनमें से एक घड़ी चिप पर हैडीएस3231एसएन मैंने इसे अपने लिए खरीदापरियोजनाओं . उदाहरण में मैं एक वास्तविक समय की घड़ी को एक चीनी एनालॉग से जोड़ूंगाअरुडिनो यूएनओ।
वे एक पूर्ण ZS-042 मॉड्यूल हैं जिन्हें न केवल Arduino प्लेटफ़ॉर्म से, बल्कि विभिन्न उपकरणों से जोड़ा जा सकता है।
मॉड्यूल एक माइक्रोसर्किट पर बनाया गया हैडीएस3231एसएन जो मूलतः एक वास्तविक समय घड़ी है। पुराने घड़ी मॉडल के विपरीत, उदाहरण के लिए DS1307 चिप पर, इस घड़ी में एक आंतरिक क्वार्ट्ज रेज़ोनेटर होता है, जिसके कारण घड़ी का सटीक समय होता है।
आप DS3231SN के बिना Arduino पर एक घड़ी लागू कर सकते हैं, लेकिन फिर यदि बिजली खो जाती है, तो टाइमर मान रीसेट हो जाते हैं।इन्हीं घड़ियों में बैकअप पावर होती है, इसलिए अगर बिजली चली जाए तो भी ये काम करती रहती हैं।
घड़ी घंटे, मिनट, सेकंड, तारीखें, महीने, साल गिन सकती है (2100 तक लीप वर्ष को ध्यान में रखा जाता है)। वे 12 या 24 घंटे के मोड में काम करते हैं, उनमें दो अलार्म घड़ियाँ होती हैं, और -40 डिग्री सेल्सियस से + 85 डिग्री सेल्सियस तक की सीमा के साथ एक आंतरिक थर्मामीटर भी होता है। विभिन्न उपकरणों से कनेक्ट करने के लिए, घड़ी को इसके माध्यम से जोड़ा जाता है I2C इंटरफ़ेस.
ZS-042 मॉड्यूल पर पिन का स्थान और उद्देश्य:
एस.क्यू.डब्ल्यू.- प्रोग्रामयोग्य स्क्वायर-वेव सिग्नल आउटपुट।
एससीएल– इस पिन के माध्यम से, I2C इंटरफ़ेस के माध्यम से घड़ी के साथ डेटा का आदान-प्रदान किया जाता है।
एस.डी.ए.– घड़ी से डेटा इस पिन के माध्यम से प्रसारित होता है।
वी.सी.सी– वास्तविक समय घड़ी के लिए बिजली की आपूर्ति, 5 वोल्ट की आवश्यकता है। यदि इस पिन पर कोई वोल्टेज आपूर्ति नहीं की जाती है, तो घड़ी स्लीप मोड में चली जाती है।
जी.एन.डी- धरती।
से जुड़ने के लिएअरुडिनो यूएनओ, हम घड़ी के एसडीए पिन को ए4 पिन से और एससीएल पिन को ए5 से जोड़ते हैं। बिजली आपूर्ति के लिए GND(-) और VCC(+5v) पिन का उपयोग किया जाता है।
विभिन्न Arduino बोर्डों पर SDA और SCL पिन:
एस.डी.ए. | एससीएल | |
संयुक्त राष्ट्र संघ | ए4 | ए5 |
छोटा | ए4 | ए5 |
नैनो | ए4 | ए5 |
मेगा2560 | 20 | 21 |
लियोनार्डो | 2 | 3 |
आइए घड़ी में CR2032 बैटरी स्थापित करें; ऐसे तत्वों का उपयोग कंप्यूटर में BIOS को पावर देने के लिए किया जाता है।
जब आप USB केबल को Arduino से कनेक्ट करते हैं, तो घड़ी पर लगी LED जलनी चाहिए शक्ति"(लाल एलईडी)।
Arduino IDE के माध्यम से घड़ी को प्रोग्राम करने के लिए, आपको लाइब्रेरी स्थापित करने की आवश्यकता है।
लाइब्रेरी डाउनलोड करें समय और डीएस1307आरटीसी।
अंतिम लाइब्रेरी DS1307 चिप पर एक घड़ी के लिए लिखी गई थी, लेकिन इसके इंटरेक्शन प्रोटोकॉल DS3231 के साथ संगत हैं, इसलिए लाइब्रेरी हमारी घड़ी में फिट होगी।
पुस्तकालयों को डाउनलोड करने, अनपैक करने और फ़ोल्डर में रखने की आवश्यकता है "पुस्तकालय" Arduino IDE प्रारंभ करते समय, उन्हें उदाहरणों के साथ "में दिखना चाहिए" नमूने».
दिनांक और समय निर्धारित करें.
ऐसा करने के लिए, इस कोड को Arduino IDE में कॉपी करें।
सही सेटिंग्स के लिए आपको लाइन में डेटा बदलना होगा
सेटटाइम(13,35,0,22,12,2016);
अल्पविराम से अलग किए गए कोष्ठकों में, सही सेट करें: घंटे, मिनट, सेकंड, दिन, महीना, वर्ष। मेरे उदाहरण में, यह 22 दिसंबर 2016 को 13 घंटे 35 मिनट 0 सेकंड पर सेट है। स्केच को Arduino पर अपलोड करें।
अब, घड़ी से रीडिंग पढ़ने के लिए, आप उदाहरण का उपयोग कर सकते हैं: " फ़ाइल» - « नमूने» - « डीएस1307आरटीसी» - « पढ़ें परीक्षण" औरपीछे इसे Arduino पर अपलोड करें।
खुलने वाली विंडो वर्तमान दिनांक और समय प्रदर्शित करेगी। यदि आप Arduino से क्लॉक मॉड्यूल की बिजली बंद कर देते हैं, तो Arduino मानों को ट्रैक नहीं कर पाएगा और कुछ समय बाद संदेश " ...त्रुटि पढ़ें!"(लाल रंग में हाइलाइट किया गया)। बिजली बहाल होने के बाद, तारीख और समय की उल्टी गिनती जारी रहेगी। तारीख और समय को रीसेट नहीं किया गया था क्योंकि घड़ी इसकी CR2032 बैटरी द्वारा संचालित थी।