特点RTC M41T56

M41T56是实时时钟芯片,与流行的DS1307类似。 尽管微电路的引脚排列相同,但它们之间还是存在很大差异,我将尝试讨论这些差异。

简短说明


我不会详细介绍IIC总线的工作,我只注意到两个芯片的地址均为0xd0。 为了处理时间,微电路包含七个帐户寄存器和一个控制寄存器。 帐户寄存器包含二进制十进制格式的数字,但是某些位具有特殊含义。

寄存器
xxx-未定义位值。
机能索引可能的值
7654321个0
0x00ST几十秒秒单位0-59
分钟0x01xxx几十分钟分钟单位0-59
手表0x02塞布SB数十小时小时单位0-23
0x03xxxxxxxxxxxxxxx星期几1-7
一个月中的某天0x04xxxxxx几十天一天的单位1-(28 | 29 | 30 | 31)
0x05xxxxxxxxxdes本月的单位1-12
年份0x06几十年年度单位0-99
控制寄存器0x07金融时报小号校正量--


x-接通后,该位的状态可以为任意。
有点重置后说明
STX向该位写入1时,生成器停止
中央银行X当CEB(世纪使能位)位置1时,则达到新的世纪时,CB(世纪位)位会将值更改为相反的值。
认证机构X
1个当OUT(输出电平)和FT(频率测试)位等于零时,FT / OUT引脚接地。 FT = 1时,输出FT / OUT为512 Hz,并且OUT位无关紧要。
金融时报0
小号XRTC行程校准标记。

区别从时钟寄存器的位7、6和5的分配开始。 在M41T56中,位7和6用于指示向新世纪的过渡,位5和4用于计数数十小时。 此外,小时计数仅在模式24下可用,而AM / PM模式不可用。 在DS1307中,未使用位7,位6中的零表示使用了计数模式24,在这种情况下,位5和4包含数十小时。 如果第6位为1,则第5位成为AM / PM标志,第4位包含数十小时。

在控制寄存器中有很大的不同,其中包含了字校正笔划。

课程修正


M41T56允许您在-62至+124 ppm的范围内补偿石英谐振器的误差,该误差每月不超过±5秒。 为了补偿,控制寄存器的六个最低有效位负责。 位4-0包含校正值的无符号整数,位5设置校正方向。 如果位5包含零,则冲程以2.034 ppm的增量减速,否则RTC以4.068 ppm的增量加速。 这很不方便,因此我绘制了一些简单的函数,用于将ppm转换为校正字,反之亦然。

/*        . */ #define MASK_CALIBR ((1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0)) /*        . */ #define MASK_CALIBR_SIGN (1 << 5) /** *    . * @param caliber    RTC. * @return    ppm. */ 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; } /** *   . * @param ppm    ppm. * @return    RTC. */ 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位等于零的方式写入校正字。

文学作品


Source: https://habr.com/ru/post/zh-CN457796/


All Articles