*[[Real Time Clock(RTC)]] [#g463c150] **はじめに [#o8c4826e] > >Raspberry Pi 3にRTCを接続します。 < **使用デバイス [#e311fea4] ***概要 [#t748e177] > >使用したデバイスはMaximのDS3231です。I2CインタフェースのRTCですので、Arduino/Raspberry PiのRTCとしてポピュラーな石です。 >特徴をデータシートから引用すると < > >> -Real-Time Clock Counts Seconds, Minutes, Hours, Date of the Month, Month, Day of the Week, and Year, with Leap-Year Compensation Valid Up to 2100 -Accuracy ±2ppm from 0°C to +40°C -Accuracy ±3.5ppm from -40°C to +85°C -Digital Temp Sensor Output: ±3°C Accuracy -Register for Aging Trim&bull; RST Output/Pushbutton Reset Debounce Input -Two Time-of-Day Alarms -Programmable Square-Wave Output Signal -Simple Serial Interface Connects to Most Microcontrollers -Fast (400kHz) I2C Interface -Battery-Backup Input for Continuous Timekeeping -Low Power Operation Extends Battery-Backup Run Time -3.3V Operation -Operating Temperature Ranges: Commercial (0°C to +70°C) and Industrial (-40°C to +85°C) -Underwriters Laboratories&reg; (UL) Recognized << < > >3.3V~5Vで動作する、I2Cインタフェースの高精度なRTCといったところでしょうか。 < ***リファレンス回路 [#p61c4b70] > >データシートからリファレンス回路を引用します。 >&ref(rtc-ds3231.JPG,,DS3231); < ***購入先 [#r065d2e3] > >Amazonでモジュールを購入しました。 >2個 ¥430 です。 < **ハードウェア構成 [#cde9feb9] ***購入したモジュールの構成 [#x35bc8a9] > >実際に購入したモジュールは >> -バックアップ電池 -電源用パスコン -SCK、SDAのプルアップ(4.7KΩ) << >のみ実装されていました。プルアップ抵抗は、今後のモジュール増設に応じ、削除の検討が必要です。 < ***実装方法 [#c6fbb882] > >秋月電子で購入した「Raspberry Pi Model B プロトタイプ基板」です。(申し訳ありません。正式な販売名は忘れました) >今後、LCDモジュール等を増設予定で、3.3Vバスの各種モジュールを混載できるように考えておきます。 >&ref(rtc-universal-pcb.jpg,,RTC-Unversal Board); < **ソフトウェア [#pf37f415] > >では、実際にCentOSから使用できるようにしましょう。 < ***アドレス [#udad94f6] > >まず、どこにRTCがマップされているかを確認します。 >> [root@akari ~]# /opt/i2cdetect/bin/i2cdetect 0x03 : 0x06 : Unknown device 0x68 : 0xD0 : Unknown device 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- [root@akari ~]# << < > >0x68にマップされています。DataSheetの通りですね。 >&ref(ds3231-address.jpg); < ***ドライバの有効化 [#rb5eaa6d] > >I2Cインタフェースのドライバの有効化とDS3231ドライバを有効化します。 < > -/boot/config.txt < > >> # dtparam=i2c_arm=on dtparam=i2c1=on dtoverlay=i2c-rtc,ds3231 << < > >モジュールがロードされているか確認します。 >> [root@akari ~]# lsmod Module Size Used by dm_mirror 15332 0 dm_region_hash 13392 1 dm_mirror dm_log 11207 2 dm_mirror,dm_region_hash dm_mod 115340 2 dm_mirror,dm_log rtc_ds1307 13844 0 hwmon 10552 1 rtc_ds1307 brcmfmac 289093 0 brcmutil 9863 1 brcmfmac cfg80211 543000 1 brcmfmac rfkill 20896 1 cfg80211 i2c_bcm2835 7103 0 bcm2835_gpiomem 3940 0 fixed 3285 0 uio_pdrv_genirq 3923 0 uio 10268 1 uio_pdrv_genirq i2c_dev 6913 0 i2c_bcm2708 5994 0 ip_tables 13161 0 x_tables 20830 1 ip_tables ipv6 418247 33 crc_ccitt 1771 1 ipv6 [root@akari ~]# << >rtc_ds1307がロードされています。ds3231じゃないんですね < ***確認 [#n07ac47a] > >リブートしてから確認 >> [root@akari ~]# hwclock -r 2001年01月01日 00時00分15秒 -0.476564 秒 [root@akari ~]# hwclock --systohc [root@akari ~]# hwclock -r 2020年06月13日 14時35分23秒 -0.543832 秒 [root@akari ~]# timedatectl Local time: 土 2020-06-13 14:35:26 JST Universal time: 土 2020-06-13 05:35:26 UTC RTC time: 土 2020-06-13 05:35:26 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: yes RTC in local TZ: no DST active: n/a [root@akari ~]# << < > >ちなみに、通常NW接続ではNTP同期です。 >> [root@akari ~]# timedatectl Local time: 土 2020-06-13 14:38:51 JST Universal time: 土 2020-06-13 05:38:51 UTC RTC time: 土 2020-06-13 05:38:51 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a [root@akari ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *192.168.0.xxx 219.164.211.137 5 u 28 64 1 0.559 0.014 0.008 [root@akari ~]# << < > >> >>頑固にntpdを使用してます。 << < お疲れ様でした。