芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 4972|回复: 0

【实验说明】基于PCF8563 RTC案例日期显示异常原因及解决方法

[复制链接]
  • TA的每日心情
    开心
    2021-12-31 09:03
  • 71

    主题

    78

    帖子

    977

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    977
    发表于 2022-2-8 17:00:19 | 显示全部楼层 |阅读模式
    问题描述:
            有部分用户在进行PCF8563实验时,会遇到如下实验现象:当时间值运行到某一特定区间时,时间显示错误。例如每当每分钟运行到第40秒时,时间的小时显示开始异常。以下为ACX720开发板运行该案例时的效果图,其他运行类似案例的开发板也会有该现象。
    0001A.png

    0002a.png


    上面的两幅图是连续2秒时间内抓拍的结果,可以看到:在11时18分39秒后,下一秒钟却显示51时18分40秒,当时间显示到达51时18分59秒后,下一秒又回归正常,显示11时19分00秒。同时,随着秒数的变化,年,月,日的显示,也会呈现时间区间显示异常和正常交替进行的问题。

    问题原因:
    经过仔细分析,发现该现象的原因如下:
    PCF8563的时间寄存器表如下:

    003.png

    由于PCF8563的生产厂家以及生产批次和版本不同,该芯片在生产出厂时对时间无效位的输出处理,并不是统一按给0进行处理。而我们在读取时间寄存器时,却默认相信读出的每一个8位寄存器都是时间值的真实反映,因此,出现了违背国际标准计时规则的时间输出显示结果。
    比如,在秒值(BCD)为0~39秒时,04h号寄存器的bit[6]这一位为0,在40~59秒时,04h号寄存器的bit[6]这一位为1,导致出现前述内容的时间显示异常。
    当然,因为这个原因,导致了读出的年,月,日也有类似情况发生,究其根本,都是无效位处理不当造成的结果。

    解决方案:

        解决这个问题,可以将读到的时间日期值无效位强制置0来处理。具体来说,就是在我们提供案例的pcf8563_ctrl.v文件中,对每个读取到的值进行无效位强制置0的屏蔽处理,如下图所示。

    004.png

    通过将读到的时间日期值和对应需要生效的位取1作按位与,读到的时间日期值和对应无效需要屏蔽的位取0作按位与,即可将无效位强制置0,以避免前述分析的无效位干扰了时间日期的显示。这样处理以后,无论rddata读到什么值,都实现了无效位强制置0。处理后效果如下:显示正常。

    0003a.png

    注意事项:

    进行程序设计时,从外部接收或者从存储器读出的值,无关位的处理也很重要,不能完全寄希望于从外部接收或者从寄存器中读出的值都是理想值0或1,实际应用中应在设计策略上尽可能保证读到的值精确可控。


    acx720_uart_rtc8563_hex8_improve.rar

    50.76 KB, 下载次数: 303

    这是改进后的版本

    acx720_uart_rtc8563_hex8_org.rar

    42.05 KB, 下载次数: 252

    这是原始版本。有可能有的开发板使用此版本也可以正常显示

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-12-4 01:28 , Processed in 0.110174 second(s), 33 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表