M41T56 एक रियल टाइम क्लॉक चिप है, जो लोकप्रिय DS1307 का एक एनालॉग है। और हालांकि माइक्रोकिरिट का पिनआउट भी समान है, उनके बीच महत्वपूर्ण अंतर हैं, जिनके बारे में मैं बात करने की कोशिश करूंगा।
संक्षिप्त विवरण
मैं IIC बस के संचालन पर ध्यान केंद्रित नहीं करूंगा, मैं बस ध्यान देता हूं कि दोनों चिप्स का पता 0xd0 है। समय के साथ काम करने के लिए, microcircuit में सात खाता रजिस्टर और एक नियंत्रण रजिस्टर होता है। खाता रजिस्टर में बाइनरी दशमलव प्रारूप में नंबर होते हैं, हालांकि कुछ बिट्स का विशेष अर्थ होता है।
रजिस्टरोंxxx - बिट वैल्यू परिभाषित नहीं है।
बिट्सx - चालू करने के बाद, बिट की स्थिति कोई भी हो सकती है।
घड़ी रजिस्टर के बिट्स 7, 6 और 5 के असाइनमेंट में अंतर शुरू होता है। M41T56 में, बिट्स 7 और 6 का उपयोग नई सदी में संक्रमण को इंगित करने के लिए किया जाता है, और बिट्स 5 और 4 का उपयोग दसियों घंटे गिनने के लिए किया जाता है। इसके अलावा, केवल 24 की गिनती मोड 24 में संभव है, AM / PM मोड उपलब्ध नहीं है। DS1307 में, बिट 7 का उपयोग नहीं किया जाता है, बिट 6 में एक शून्य इंगित करता है कि गिनती मोड 24 का उपयोग किया जाता है, और इस मामले में, बिट्स 5 और 4 में दसियों घंटे होते हैं। यदि बिट 6 एक है, तो बिट 5 AM / PM ध्वज बन जाता है, और बिट 4 में दस घंटे होते हैं।
महत्वपूर्ण अंतर नियंत्रण रजिस्टर में होते हैं, जिसमें शब्द सुधार स्ट्रोक होता है।
पाठ्यक्रम सुधार
M41T56 आपको -62 से +124 पीपीएम तक की रेंज में क्वार्ट्ज गुंजयमान यंत्र की त्रुटि की भरपाई करने की अनुमति देता है, जो प्रति माह per 5 सेकंड से अधिक नहीं का विचलन देता है। मुआवजे के लिए, नियंत्रण रजिस्टर के छह सबसे महत्वपूर्ण बिट जिम्मेदार हैं। बिट्स 4-0 में सुधार मूल्य का अहस्ताक्षरित पूर्णांक होता है, और बिट 5 सुधार दिशा निर्धारित करता है। यदि बिट 5 में शून्य होता है, तो स्ट्रोक 2.034 पीपीएम की वृद्धि में धीमा हो जाता है, अन्यथा आरटीसी 4.068 पीपीएम की वेतन वृद्धि में तेजी लाता है। यह असुविधाजनक है, इसलिए मैंने पीपीएम से सुधार शब्द और इसके विपरीत में परिवर्तित करने के लिए सरल कार्यों के एक जोड़े को स्केच किया।
#define MASK_CALIBR ((1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0)) #define MASK_CALIBR_SIGN (1 << 5) int8_t caliber_to_ppm(uint8_t caliber) { int8_t result = caliber & MASK_CALIBR; result = (uint8_t) result * 2; if ((caliber & MASK_CALIBR_SIGN) != 0) { result = -result; } else { result = (uint8_t) result * 2; } return result; } uint8_t ppm_to_caliber(int8_t ppm) { uint8_t result; if (ppm < 0) { result = (uint8_t) (-ppm + 1) / 2; result |= MASK_CALIBR_SIGN; } else { result = (uint8_t) (ppm + 2) / 4; } return result; }
दोष का पता लगाना
न तो DS1307, लेकिन M41T56 पीढ़ी की त्रुटियों का पता लगा सकता है, लेकिन वे गारंटी देते हैं कि जब बिजली चालू होती है, तो कुछ बिट्स एक निश्चित स्थिति में होंगे। नियंत्रण कक्ष में सक्षम होने पर M41T56 10xxxxxx होगा। प्रोग्राम क्रैश को ट्रैक करने के लिए, आप निम्न एल्गोरिथम का उपयोग कर सकते हैं। यदि, जब माइक्रोकंट्रोलर को चालू किया जाता है, तो RTC कंट्रोल रजिस्टर में 10xxxxxx होता है, तब बिजली की विफलता होती है और मूल्य को रजिस्टर में लिखा जाना चाहिए, जिसके उच्च बिट्स 10 के बराबर नहीं हैं। सबसे सरल बात यह है कि बिट्स 7 और 6 के बराबर सुधार शब्द को शून्य पर लिखें।
साहित्य