M41T56 هي شريحة Real Time Clock ، وهي تناظرية DS1307 الشهيرة. وعلى الرغم من أن pinout من microcircuit هو نفسه ، لديهم اختلافات كبيرة ، والتي سأحاول التحدث عنها.
وصف قصير
لن أتطرق إلى تشغيل ناقل IIC ، لكنني ألاحظ فقط أن كلتا الرقيتين لديهما عنوان 0xd0. للعمل مع مرور الوقت ، يحتوي microcircuit على سبعة سجلات حساب وسجل مراقبة. تحتوي سجلات الحساب على أرقام بالتنسيق العشري الثنائي ، ولكن بعض البتات لها معنى خاص.
سجلاتلم يتم تعريف قيمة xxx - بت.
بتس - بعد التبديل ، يمكن أن تكون حالة البت موجودة.
تبدأ الاختلافات في تخصيص البتات 7 و 6 و 5 من سجل الساعة. في M41T56 ، تستخدم البتات 7 و 6 للإشارة إلى الانتقال إلى القرن الجديد ، وتستخدم البتات 5 و 4 لحساب عشرات الساعات. علاوة على ذلك ، فإن عدد الساعات ممكن فقط في الوضع 24 ، وضع AM / PM غير متوفر. في DS1307 ، لا يتم استخدام البتة 7 ، ويشير صفر في البتة 6 إلى أن وضع العد 24 يُستخدم ، وفي هذه الحالة تحتوي البتات 5 و 4 على عشرات الساعات. إذا كانت البتة 6 واحدة ، فإن البتة 5 تصبح إشارة AM / PM ، بينما البتة 4 تحتوي على عشرات الساعات.
توجد فروق ذات دلالة إحصائية في سجل التحكم ، والذي يحتوي على كلمة تصحيح الكلمات.
تصحيح المسار
يسمح لك M41T56 بالتعويض عن خطأ مرنان الكوارتز في النطاق من -62 إلى +124 جزء في المليون ، مما يعطي انحرافًا لا يزيد عن seconds 5 ثوانٍ في الشهر. للحصول على تعويض ، تكون البتات الستة الأقل أهمية في سجل المراقبة مسؤولة. تحتوي البتات 4-0 على عدد صحيح غير موقَّع لقيمة التصحيح ، وتضبط البتة 5 اتجاه التصحيح. إذا كانت البتة 5 تحتوي على صفر ، فإن السكتة الدماغية تبطئ بزيادة قدرها 2.034 جزء في المليون ، وإلا فإن RTC يتسارع بزيادات 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 تساوي الصفر.
أدب