Raspberry Pi – 使用DS1302 作為 RealTime Clock (RTC)

近日因為工作上需要, 想用QR Code及 RFID/NFC 記錄時間而制作一個Proof of Concept環境. 我選用平價而abandent了一段時間的Raspberry Pi作為一個平台. 當然大家也知道Raspberry Pi是沒有內置Realtime clock/RTC的, 一般人如果在可以情況下可以跟time server作Synchonization. 而因為我對時間有要求, 所以就選上了極平價的DS1302 module.

先說說這個DS1302, 在淘寶上打上 “Raspberry Pi RTC” 就已經有不下一百幾十個item. 大部份都只是$20內, 在價錢上真的很合理及實用.

而因為我這個PoC除了RTC外, 還是需求RFID reader的, 所以在不知不覺下就走進了一定叫 深圳树莓派1号店 的店, 分別買了 RFID-RC522 及 DS1302, 另外還有少量線材及breadboards.

剛剛才說$20左右一個RTC module是很抵, 誰不知這個DS1302 module 只需 $0.5(不包CR2032電池) 或 $1.8(包CR2032電池).

硬件

好了, 入正題吧! 其實大家只要隨手google “Raspberry Pi DS1302” 也有不少 blogger 教您如何安裝 DS1302 RTC 至 Raspberry Pi 板上, 而個人來說因為要同時安裝 RFID Reader及外置 1602 LCD, 所以決定用自己喜好走線方便跟進及下半部份的GPIO interface programming.

先看看Raspberry Pi GPIO 排線吧

我選用上 pin2 (5V), pin9 (ground), pin11 (GPIO17), pin12 (GPIO18)及 pin13 (GPIO27) 來對應 DS1302 的5條線.

VCC - pin2
GND - pin9
CLK - pin13
DAT - pin12
RST - pin11

軟件

簡單了, 對嗎? 既然Cabling 這部份已經完成, 那我們就跳到 software 部份吧. 在Operating System 上我是通過WiringPi來跟DS1302作communication, 但是不論您用什麼infrastructure作為介面也好, 首先是要開通raspberry 的 I2C interface. 流程如下:

sudo raspi-config

在介面上選 “Interfacing Option” -> “ARM I2C interface”
raspi-config

I2C

Active

所以先要install下面這個package來給我的C program需要的 header file. 請download我的RTC program.

apt-get install wiringpi

如果係想修改我的program, 請記得compile/build個binary

gcc mhwclock.c -o mhwclock -lwiringPi -lwiringPiDev

我的program – mhwclock使用如下:
./mhwclock -test <– 測試interface及memory status

root@raspberrypi:~/hwclock1302# ./mhwclock -test
DS1302 RAM TEST
-- DS1302 RAM TEST: OK
root@raspberrypi:~/hwclock1302#

./mhwclock -now <– 顯示DS1302內的時間

root@raspberrypi:~/hwclock1302# ./mhwclock -now
current time on RTC: 18/10/2019 - 14:58:46

./mhwclock -load <– Sync DS1302內的時間至RaspbianOS

root@raspberrypi:~/hwclock1302# date -s "2 OCT 2006 18:00:00"
Mon 2 Oct 18:00:00 HKT 2006
root@raspberrypi:~/hwclock1302# date
Mon 2 Oct 18:00:04 HKT 2006
root@raspberrypi:~/hwclock1302# ./mhwclock -load
Refresh Clock from RTC...
Fri 18 Oct 15:01:19 HKT 2019
root@raspberrypi:~/hwclock1302# date
Fri 18 Oct 15:01:21 HKT 2019

./mhwclock -set <– update DS1302內的時間至RaspbianOS

root@raspberrypi:~/hwclock1302# date -s "2 OCT 2006 18:00:00"
Mon 2 Oct 18:00:00 HKT 2006
root@raspberrypi:~/hwclock1302# ./mhwclock -set
Setting the RTC from live [6-10-2 18:0:4]...
OK
root@raspberrypi:~/hwclock1302# date
Mon 2 Oct 18:00:11 HKT 2006
root@raspberrypi:~/hwclock1302# ./mhwclock -now
current time on RTC: 2/10/2006 - 18:00:17
root@raspberrypi:~/hwclock1302# date -s "18 OCT 2019 15:06:30"
Fri 18 Oct 15:06:30 HKT 2019
root@raspberrypi:~/hwclock1302# ./mhwclock -set
Setting the RTC from live [19-10-18 15:6:36]...
OK

成品

Author: Adrian

Just a fxxking moron who see bad money drives out good!

Leave a Reply