跳转到内容

Hempl/RTC

来自维基教科书,开放的世界,开放的书籍

Mizar32 附加以太网板上的实时时钟芯片跟踪时间和日期,无论 Mizar32 是否通电。它通过一个小型可充电电池和一个以每秒 32768 个周期振动的晶体来实现,它将这些振动降级以获得每秒精确跳动一次的脉冲,并使用该信号来保持秒、分、时以及日期、月和年最新。

硬件视图

[编辑 | 编辑源代码]

以太网板有一个 32768 赫兹晶体和一个 DS1337 或 PCF8563 芯片,该芯片连接在 I2C 总线上。这两种不同的芯片具有相同的引脚排列和几乎相同的功能;我们支持这两种芯片的原因是,我们的一家供应商在 PCF8563 芯片的批次外壳上印上了 DS1337,从而导致了生产错误。

实际存在的芯片可以通过它在主 I2C 总线上响应的从机地址来识别:DS1337 响应 7 位十进制地址 104,而 PCF8563 响应从机地址 81。

两种芯片都响应 I2C 总线上高达 400kHz 的速度。我们建议使用 100kHz,即 Hempl 中设置的默认 I2C。

有关寄存器布局以及如何使用原始 I2C 协议寻址设备,请参阅他们的数据表。

软件视图

[编辑 | 编辑源代码]

SimpleMachines 已在 Hempl 中添加了一个模块来设置时间并读取时间。

设置时间

[编辑 | 编辑源代码]

您可以使用以下函数设置时间

 (mizar32-rtc-set param value)

其中,param 可以是以下任何全局 PicoLisp 符号

字段 含义
*mizar32-rtc-sec* 0-59
*mizar32-rtc-min* 0-59 分钟
*mizar32-rtc-hour* 0-23 小时(24 小时制)
*mizar32-rtc-day* 1-31 月中的日期
*mizar32-rtc-month* 1-12 日历月份
*mizar32-rtc-year* 1900-2099 年份
*mizar32-rtc-wday* 1-7 星期几

param 是要设置的字段,value 是设置 param 的值。

在 PicoLisp 中,

(mizar32-rtc-set *mizar32-rtc-year* 2014)
(mizar32-rtc-set *mizar32-rtc-hour* 20)

星期几字段 wday 使用以下值来表示一周中的七天

1 2 3 4 5 6 7
含义 星期日 星期一 星期二 星期三 星期四 星期五 星期六

如果您希望使用该字段,则需要自己写入正确的值;它不会从日期自动设置。

读取当前时间和日期

[编辑 | 编辑源代码]

以下函数可用于读取时间

函数 返回值 示例:打印年份
(mizar32-rtc-get) 包含上面七个字段的列表 (prinl "年份:" (car (nth (mizar32-rtc-get) 3)) )

以下代码示例在 LCD 显示屏上显示一个时钟。

(de rtc-get (L N)
   (car (nth L N)) )

(mizar32-lcd-reset)

(loop
   (setq time (mizar32-rtc-get))
   (mizar32-lcd-goto 1 5)
   (mizar32-lcd-prinl 
      (rtc-get time *mizar32-rtc-hour*) ":"
      (rtc-get time *mizar32-rtc-min*) ":"
      (rtc-get time *mizar32-rtc-sec*) )
   (mizar32-lcd-goto 2 4)
   (mizar32-lcd-prinl
      (rtc-get time *mizar32-rtc-day*) "/"
      (rtc-get time *mizar32-rtc-month*) "/"
      (rtc-get time *mizar32-rtc-year*) ) )

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书