跳轉到內容

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*) ) )

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書