विषयसूची:

Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना: 3 चरण
Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना: 3 चरण

वीडियो: Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना: 3 चरण

वीडियो: Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना: 3 चरण
वीडियो: Tiny RTC i2c Module- DS1307 How to set date and time- By Manmohan pal 2024, जुलाई
Anonim
Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना
Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना
Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना
Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करना

हमें विभिन्न स्रोतों से Arduino के साथ DS1307 और DS3231 रीयल-टाइम क्लॉक मॉड्यूल का उपयोग करने के तरीके के बारे में अनुरोध मिलते रहते हैं - इसलिए यह उनका उपयोग करने के तरीके पर दो भाग ट्यूटोरियल में से पहला है। इस Arduino ट्यूटोरियल के लिए हमारे पास उपयोग करने के लिए दो रीयल-टाइम क्लॉक मॉड्यूल हैं, एक मैक्सिम DS1307 (स्क्वायर मॉड्यूल) और DS3231 (आयताकार मॉड्यूल) पर आधारित है।

रीयल-टाइम क्लॉक मॉड्यूल पर IC के बीच दो मुख्य अंतर हैं, जो कि टाइम-कीपिंग की सटीकता है। पहले मॉड्यूल में प्रयुक्त DS1307 बहुत अच्छी तरह से काम करता है, हालांकि बाहरी तापमान थरथरानवाला सर्किट की आवृत्ति को प्रभावित कर सकता है जो DS1307 के आंतरिक काउंटर को चलाता है।

यह एक समस्या की तरह लग सकता है, हालांकि आमतौर पर इसका परिणाम होगा कि घड़ी प्रति माह लगभग पांच या इतने मिनट बंद हो जाती है। DS3231 अधिक सटीक है, क्योंकि इसमें एक आंतरिक थरथरानवाला है जो बाहरी कारकों से प्रभावित नहीं होता है - और इस प्रकार प्रति वर्ष कुछ मिनटों के लिए अधिक से अधिक सटीक होता है। यदि आपके पास DS1307 मॉड्यूल है- बुरा मत मानो, यह अभी भी एक महान मूल्य बोर्ड है और आपकी अच्छी सेवा करेगा। दोनों मॉड्यूल के साथ, एक बैकअप बैटरी की आवश्यकता होती है।

नई CR2032 बैटरी खरीदना और इसे मॉड्यूल में फिट करना एक अच्छा विचार है। समय और तारीख पर नज़र रखने के साथ, इन मॉड्यूल में एक छोटा EEPROM, एक अलार्म फ़ंक्शन (केवल DS3231) और विभिन्न आवृत्तियों की एक वर्ग-तरंग उत्पन्न करने की क्षमता भी होती है - ये सभी एक दूसरे ट्यूटोरियल का विषय होंगे।

चरण 1: अपने मॉड्यूल को एक Arduino से कनेक्ट करना

दोनों मॉड्यूल I2C बस का उपयोग करते हैं, जो कनेक्शन को बहुत आसान बनाता है।

सबसे पहले आपको यह पहचानने की आवश्यकता होगी कि आपके Arduino या संगत बोर्डों पर कौन से पिन I2C बस के लिए उपयोग किए जाते हैं - इन्हें SDA (या डेटा) और SCL (या घड़ी) के रूप में जाना जाएगा। Arduino Uno या संगत बोर्डों पर, ये पिन डेटा और घड़ी के लिए A4 और A5 हैं; Arduino मेगा पर डेटा और घड़ी के लिए पिन D20 और D21 हैं; और यदि आप प्रो मिनी-संगत का उपयोग कर रहे हैं तो पिन A4 और A5 हैं डेटा और घड़ी के लिए, जो मुख्य पिन के समानांतर हैं।

DS1307 मॉड्यूल

यदि आपके पास DS1307 मॉड्यूल है, तो आपको तारों को बोर्ड में मिलाप करना होगा, या कुछ इनलाइन हेडर पिन पर मिलाप करना होगा ताकि आप जम्पर तारों का उपयोग कर सकें। फिर SCL और SDA पिन को अपने Arduino, और Vcc पिन को 5V पिन और GND को GND से कनेक्ट करें।

DS3231 मॉड्यूल

इस मॉड्यूल को जोड़ना आसान है क्योंकि कारखाने में बोर्ड पर हेडर पिन लगाए जाते हैं। आप बस SCL और SDA से Arduino तक और फिर से मॉड्यूल के Vcc और GND पिन से अपने बोर्ड के 5V या 3.3. V और GND में जम्पर वायर चला सकते हैं। हालाँकि ये आपके अपने तारों को टांका लगाने के लिए दूसरी तरफ दोहराए जाते हैं। इन दोनों मॉड्यूल में आवश्यक पुल-अप प्रतिरोधक हैं, इसलिए आपको अपना खुद का जोड़ने की आवश्यकता नहीं है। I2C बस से जुड़े सभी उपकरणों की तरह, कोशिश करें और एसडीए और एससीएल तारों की लंबाई कम से कम रखें।

चरण 2: अपने आरटीसी मॉड्यूल से समय पढ़ना और लिखना

एक बार जब आप अपने आरटीसी मॉड्यूल को तार-तार कर लेते हैं। निम्नलिखित स्केच दर्ज करें और अपलोड करें। हालाँकि स्केच में नोट्स और फ़ंक्शन केवल DS3231 को संदर्भित करते हैं, कोड DS1307 के साथ भी काम करता है।

#include "Wire.h"#define DS3231_I2C_ADDRESS 0x68 // सामान्य दशमलव संख्याओं को बाइनरी कोडेड दशमलव बाइट decToBcd (बाइट वैल) में बदलें {रिटर्न ((वैल/10 * 16) + (वैल% 10)); } // बाइनरी कोडेड दशमलव को सामान्य दशमलव संख्या बाइट bcdToDec (बाइट वैल) में बदलें {रिटर्न ((वैल/16 * 10) + (वैल% 16)); } शून्य सेटअप () {वायर.बेगिन (); सीरियल.बेगिन (९६००); // यहां प्रारंभिक समय निर्धारित करें: // DS3231 सेकंड, मिनट, घंटे, दिन, तिथि, महीना, वर्ष // setDS3231time (30, 42, 21, 4, 26, 11, 14); } शून्य सेटDS3231time (बाइट सेकंड, बाइट मिनट, बाइट घंटे, बाइट डेऑफवीक, बाइट डेऑफ़मंथ, बाइट महीना, बाइट वर्ष) {// DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS) पर समय और दिनांक डेटा सेट करता है; वायर.राइट (0); // सेकंड में शुरू करने के लिए अगला इनपुट सेट करें Wire.write रजिस्टर करें (decToBcd (सेकंड)); // सेट सेकंड वायर।राइट (decToBcd (मिनट)); // सेट मिनट वायर.राइट (decToBcd (घंटा)); // सेट घंटे वायर.राइट (decToBcd (dayOfWeek)); // सप्ताह का निर्धारित दिन (1=रविवार, 7=शनिवार) Wire.write(decToBcd(dayOfMonth)); // निर्धारित तिथि (1 से 31) वायर.राइट (decToBcd (माह)); // सेट माह वायर.राइट (decToBcd (वर्ष)); // सेट वर्ष (0 से 99) Wire.endTransmission (); } शून्य readDS3231time (बाइट * दूसरा, बाइट * मिनट, बाइट * घंटा, बाइट * दिनऑफवीक, बाइट * दिनऑफ़मंथ, बाइट *माह, बाइट * वर्ष) {वायर.बेगिनट्रांसमिशन (DS3231_I2C_ADDRESS); वायर.राइट (0); // DS3231 रजिस्टर पॉइंटर को 00h Wire.endTransmission () पर सेट करें; Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // रजिस्टर से शुरू होने वाले DS3231 से डेटा के सात बाइट्स का अनुरोध करें 00h *second = bcdToDec(Wire.read() & 0x7f); *मिनट = bcdToDec(वायर.रीड ()); * घंटा = bcdToDec (वायर.रीड () और 0x3f); *dayOfWeek = bcdToDec (वायर.रीड ()); *dayOfMonth = bcdToDec (वायर.रीड ()); *माह = bcdToDec (वायर.रीड ()); *वर्ष = bcdToDec (वायर.रीड ()); } शून्य प्रदर्शन समय () {बाइट सेकंड, मिनट, घंटा, दिनऑफवीक, दिनऑफ़मंथ, महीना, वर्ष; // DS3231 readDS3231time(&second, &मिनट, &hour, &dayOfWeek, &dayOfMonth, &month, &year) से डेटा पुनर्प्राप्त करें; // इसे सीरियल मॉनिटर सीरियल.प्रिंट (घंटा, डीईसी) पर भेजें; // प्रदर्शित होने पर बाइट चर को दशमलव संख्या में बदलें Serial.print(":"); अगर (मिनट<10) { सीरियल.प्रिंट ("0"); } सीरियल.प्रिंट (मिनट, डीईसी); सीरियल.प्रिंट (":"); अगर (दूसरा <10) {सीरियल.प्रिंट ("0"); } सीरियल.प्रिंट (दूसरा, डीईसी); सीरियल.प्रिंट (""); Serial.print(dayOfMonth, DEC); सीरियल.प्रिंट ("/"); सीरियल.प्रिंट (माह, डीईसी); सीरियल.प्रिंट ("/"); सीरियल.प्रिंट (वर्ष, डीईसी); सीरियल.प्रिंट ("सप्ताह का दिन:"); स्विच (दिनऑफवीक) {केस 1: सीरियल.प्रिंट्लन ("रविवार"); टूटना; केस 2: सीरियल.प्रिंट्लन ("सोमवार"); टूटना; केस 3: सीरियल.प्रिंट्लन ("मंगलवार"); टूटना; केस 4: सीरियल.प्रिंट्लन ("बुधवार"); टूटना; केस 5: सीरियल.प्रिंट्लन ("गुरुवार"); टूटना; केस 6: सीरियल.प्रिंट्लन ("शुक्रवार"); टूटना; केस 7: सीरियल.प्रिंट्लन ("शनिवार"); टूटना; }} शून्य लूप () {डिस्प्लेटाइम (); // सीरियल मॉनिटर पर रीयल-टाइम क्लॉक डेटा प्रदर्शित करें, देरी (1000); // हर पल }

बहुत सारे कोड हो सकते हैं, हालांकि यह प्रबंधनीय भागों में अच्छी तरह से टूट जाता है।

इसमें पहले वायर लाइब्रेरी शामिल है, जिसका उपयोग I2C बस संचार के लिए किया जाता है, इसके बाद RTC के लिए बस पते को 0x68 के रूप में परिभाषित किया जाता है। इसके बाद दो कार्य होते हैं जो दशमलव संख्याओं को बीसीडी (बाइनरी-कोडेड दशमलव) में परिवर्तित करते हैं और इसके विपरीत। ये आवश्यक हैं क्योंकि RTC IC दशमलव में नहीं बल्कि BCD में काम करते हैं।

फ़ंक्शन setDS3231time() घड़ी सेट करने के लिए प्रयोग किया जाता है। इसका उपयोग करना बहुत आसान है, साल-दर-साल मूल्यों को सम्मिलित करना आसान है, और आरटीसी उस समय से शुरू हो जाएगा। उदाहरण के लिए यदि आप निम्नलिखित तिथि और समय निर्धारित करना चाहते हैं - बुधवार 26 नवंबर, 2014 और 9:42 बजे और 30 सेकंड - आप इसका उपयोग करेंगे:

setDS3231time(30, 42, 21, 4, 26, 11, 14);

चरण 3:

ध्यान दें कि 24 घंटे के समय का उपयोग करके समय निर्धारित किया गया है, और चौथा पैरामीटर "सप्ताह का दिन" है। यह 1 और 7 के बीच आता है जो क्रमशः रविवार से शनिवार है। यदि आप अपने स्वयं के चरों को प्रतिस्थापित कर रहे हैं तो ये पैरामीटर बाइट मान हैं।

एक बार जब आप फ़ंक्शन चला लेते हैं तो इसे // के साथ उपसर्ग करना और अपना कोड फिर से अपलोड करना बुद्धिमानी है, इसलिए यह एक बार पावर साइकिल या माइक्रोकंट्रोलर रीसेट होने के बाद समय को रीसेट नहीं करेगा। समय को पढ़ना आपका आरटीसी उतना ही सरल है, वास्तव में इस प्रक्रिया को फंक्शन डिस्प्लेटाइम () के अंदर बड़े करीने से पालन किया जा सकता है। आपको आरटीसी से डेटा स्टोर करने के लिए सात बाइट वेरिएबल्स को परिभाषित करने की आवश्यकता होगी, और फिर इन्हें फ़ंक्शन readDS3231time() में डाला जाता है। उदाहरण के लिए यदि आपके चर हैं:

बाइट सेकंड, मिनट, घंटा, दिनऑफवीक, दिनऑफ़मंथ, महीना, वर्ष;

… आप उन्हें RTC से वर्तमान डेटा का उपयोग करके ताज़ा करेंगे:

readDS3232 समय (और दूसरा, और मिनट, और घंटा, और दिन का सप्ताह, और दिन का महीना, और महीना, और वर्ष);

फिर आप वेरिएबल्स का उपयोग कर सकते हैं जैसा कि आप फिट देखते हैं, सीरियल मॉनिटर को समय और तारीख भेजने से लेकर उदाहरण के स्केच में - डेटा को सभी प्रकार के आउटपुट डिवाइसों के लिए उपयुक्त रूप में परिवर्तित करने के लिए।

बस यह जांचने के लिए कि सब कुछ काम कर रहा है, प्रदर्शन स्केच में उपयुक्त समय और तारीख दर्ज करें, इसे अपलोड करें, setDS3231time() फ़ंक्शन पर टिप्पणी करें और इसे फिर से अपलोड करें। फिर सीरियल मॉनिटर खोलें, और आपको वर्तमान समय और तारीख का एक रनिंग डिस्प्ले प्रदान किया जाना चाहिए।

इस बिंदु से अब आपके पास अपने रीयल-टाइम क्लॉक मॉड्यूल से डेटा सेट करने और इसे पुनर्प्राप्त करने के लिए सॉफ़्टवेयर टूल हैं, और हम आशा करते हैं कि आपको इन सस्ते मॉड्यूल का उपयोग करने की समझ होगी।

आप निर्माता की वेबसाइट - DS1307 और DS3231 से विशेष रीयल-टाइम घड़ी IC के बारे में अधिक जान सकते हैं।

यह पोस्ट आपके लिए pmdway.com द्वारा लाया गया है - निर्माताओं और इलेक्ट्रॉनिक्स के प्रति उत्साही लोगों के लिए, दुनिया भर में मुफ्त डिलीवरी के साथ।

सिफारिश की: