为什么实时时钟芯片使用BCD

电器工程 实时时钟
2022-01-14 08:00:40

我在市场上见过几十种不同的实时时钟芯片,以及一些内置独立供电的实时时钟模块的处理器。

几乎所有这些不仅将时间存储为年-月-日-小时-分钟-秒,而且甚至各个字段都以 BCD 格式而不是二进制格式存储。

这有什么根本原因吗?

是否有任何微处理器应用程序比简单地显示时钟更复杂,其中 BCD 格式比二进制更有用,或者年-月-日-时-分-秒格式比直接 47 位计数更有用振荡器状态变化?

据我所知,RTCC 制造商似乎添加了许多额外的电路来降低他们的芯片的用处。我认为处理器中的 RTCC 模块具有这种行为的唯一原因是处理器供应商使用一些预先存在的 BCD 实现而不是自己生产。

4个回答

所有 RTC 都使用 BCD 编码吗?

Philips/NXP 的 RTC(独立和集成到 ARM7 或 Cortex-M3 芯片中)不使用 BCD 编码。

BCD RTC 有什么问题?

与平面计数器相比,使用拆分 BCD 时钟更困难的唯一操作是时差计算(添加秒数或计算经过的时间)。时间比较如:“当前时间是否大于用户设置的闹钟时间”同样简单。

BCD(通常是分裂场)RTC 有什么好处?

当您关心日历日期时,拆分字段非常好。人类日历有一些有趣的东西,比如不同长度的月份和闰年。尝试在单个计数器中执行此操作(您可以获得几乎不使用电源的奖励积分)。哦,试着用这个来支持工作日(在各种用于人类的设备中非常有用:从闹钟到加热器控制器)。

BCD 方法还有一个附加功能:您可以免费获得“每秒”或“每十秒”中断,而无需对时间或日期进行任何计算。

对于记录闰年计算在 NXP RTC 中有点偏离,因为它只关心被 4 整除的规则,而不检查被 100 和 400 的除法。如果它将年份计数器保持在 BCD 中,这将是微不足道的,而且很可能做得对。

概括

  1. 如果你想要一个单调的时钟,那就用一个。您可以购买带有“RTC 计数器”的 PIC 或 AVR(它只是一个带有自主 32kHz 振荡器的异步计数器)。请记住,简单地显示日期会很困难。:)

  2. 当您需要显示时间和日期并根据用户输入的时间和日期设置警报时,请使用 RTC。请记住,当用户更改当前时间和日期时,基于 RTC 的中断可能不准确。

最后使用时钟时,您更有可能对分钟和数十秒(显示它们)感兴趣,而不仅仅是秒、分钟等的总和。如果您对单独的数字不感兴趣,那么您可能也不关心单独的分钟或秒值,并且您不妨像您建议的那样使用长二进制计数器。
在软件中从 BCD 转换为二进制比其他方式更容易。由于 BCD 计数器不需要比二进制计数器那么多的额外空间,因此选择 BCD 是有意义的。

我怀疑有几个原因:

历史性的——他们这样做已经有一段时间了。如果您希望您的新零件替换其他零件,那么它必须或多或少地工作相同。所以你继续使用 BCD。

应用程序 - 如果有人使用小型微型计算机的 RTC(8 位范围内的东西,如低端 PIC),那么处理大量数字(例如您的 47 位计数器)是一件很头疼的事情。处理 BCD 数字要容易得多,因为您不必努力分解。

没那么难 - 做 BCD 计数器并不难,事实上我认为这并不比做二进制数多多少。

可以想象一个系统,您可以在其中以二进制而不是 BCD 获得单独的小时、分钟等计数器(从而避免“分解 47 位数字”的问题),但这并没有那么容易,你要做一些无论如何显示事物时的转换。

我同意 Michael Kohne 的观点,即有很多历史动力。

早期的 MCU 用于代码和数据的空间也少得多(例如 128 字节的 RAM)。由于时间信息通常用于人机交互目的,因此保持数据最接近用于向人类显示/从人类输入的格式更有意义。

一些具有更多代码和数据空间的较新 MCU 有时会实现硬件实时计数器——这些设备通常保持 32kHz 滴答的二进制计数。