*[[Real Time Clock(RTC)>http://Real Time Clock(RTC)]] [#g463c150]
#freeze
*[[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]
>
>データシートからリファレンス回路を引用します。
>>
-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&amp;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&amp;reg; (UL) Recognized
<<
<
**I/O [#cde9feb9]
***GPIO/SPI/IIC/UART [#c6fbb882]
-Pin Layout(26pin/40pin)

>
#ref(Pi-GPIO-header-26-sm.png,around,zoom)
>3.3V~5Vで動作する、I2Cインタフェースの高精度なRTCといったところでしょうか。
<
***リファレンス回路 [#p61c4b70]
>
#ref(300px-Pi-GPIO-header.png,zoom)
>データシートからリファレンス回路を引用します。
>&ref(rtc-ds3231.JPG,,DS3231);
<
***購入先 [#r065d2e3]
>
|PIN#|Rev1&br;A,B |Rev1&br;A+,B+&br;Rev2&br;B|Rev3&br;B|PIN#|Rev1&br;A,B|Rev1&br;A+,B+&br;Rev2&br;B|Rev3&br;B|h
|01|>|>|CENTER:3.3 V&br; 50 mA max (01 &amp; 17)|CENTER:02|>|>|CENTER:5V0&br;Supply through input poly fuse |
|03|>|>|CENTER:GPIO 2&br;I2C SDA.1|CENTER:04|>|>|CENTER:5V0&br;Supply through input poly fuse|
|05|>|>|CENTER:GPIO 3&br;I2C SCL.1|CENTER:06|>|>|CENTER:GND |
|07|>|>|CENTER:GPIO 4&br;GPCLK|CENTER:08|>|>|CENTER:GPIO 14&br;TXD0|
|09|>|>|CENTER:GND |CENTER:10|>|>|CENTER:GPIO 15 &br;RXD0|
|11|>|>|CENTER:GPIO 17 |CENTER:12|>|>|CENTER:GPIO 18&br;PCM CLK|
|13|>|>|CENTER:GPIO 27 |CENTER:14|>|>|CENTER:GND |
|15|>|>|CENTER:GPIO 22 |CENTER:16|>|>|CENTER:GPIO23  |
|17|>|>|CENTER:3V3 |CENTER:18|>|>|CENTER:GPIO24 |
|19|>|>|CENTER:GPIO 10&br;SPI MOSI|CENTER:20|>|>|CENTER:GND |
|21|>|>|CENTER:GPIO 9&br;SPI MISO|CENTER:22|>|>|CENTER:GPIO25 |
|23|>|>|CENTER:GPIO 11&br;SPI SCLK|CENTER:24|>|>|CENTER:GPIO 8&br;SPI CE0|
|25|>|>|CENTER:GND |CENTER:26|>|>|CENTER:GPIO7&br;SPI CE1|
|27|CENTER: |>|CENTER:ID SDA.0&br;I2C ID EEPROM|CENTER:28|CENTER: |>|CENTER:ID SCL.0&br;I2C ID EEPROM|
|29|CENTER: |>|CENTER:GPIO 5 |CENTER:30|CENTER: |>|CENTER:GND |
|31|CENTER: |>|CENTER:GPIO 6 |CENTER:32|CENTER: |>|CENTER:GPIO 12 |
|33|CENTER: |>|CENTER:GPIO 13 |CENTER:34|CENTER: |>|CENTER:GND |
|35|CENTER: |>|CENTER:GPIO 19 |CENTER:36|CENTER: |>|CENTER:GPIO 16 |
|37|CENTER: |>|CENTER:GPIO 26 |CENTER:38|CENTER: |>|CENTER:GPIO 20 |
|39|CENTER: |>|CENTER:GND |CENTER:40|CENTER: |>|CENTER:GPIO 21 |

>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がマップされているかを確認します。
>>
>>>
>>>
>>>
>>>
>>>http://pc.watch.impress.co.jp/docs/column/nishikawa/1006048.html
<<<
 [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 ~]#
 
<<
<
***PWM [#j50cead1]
>
>PWM用のピンはチップ自体は複数のピンが用意されていますが、RaspberryPiのIOヘッダピンには1本のみ引き出されています。
|bcm2835&br;pin#|RaspberryPi&br;pin#|RaspberryPi&br;Signal Name|PWM&br;Channel|ALT&br;Function|h
|12| | |0|0|
|13| | |1|0|
|BGCOLOR(#ffff33):18|BGCOLOR(#ffff33):12|BGCOLOR(#ffff33):GPIO 18&br;PCM CLK|BGCOLOR(#ffff33):0|BGCOLOR(#ffff33):5|
|19| | |1|5|
|40| | |0|0|
|41| | |1|0|
|45| | |1|0|
|52| | |0|1|
|53| | |1|1|
| | | | | |

>0x68にマップされています。DataSheetの通りですね。
>&ref(ds3231-address.jpg);
<
***ブレッドボード [#j9061e75]
***ドライバの有効化 [#rb5eaa6d]
>
>初めてブレッドボードを使ってみました。Amazonさんです。~
cocopar Raspberry Pi model B+/raspberry pi 2B/3B 用 GPIOキット GPIOポート、ブレッドボード、40pinリボンケーブル、LED、抵抗、プッシュボタン、ジャンパーワイヤー付き Raspberry Pi model B+ GPIO board + Epansion Board set (Raspberry Pi B+)
#ref(bb.jpg,zoom)
>RaspberryPi 3 とのピン接続は以下のとおり
>I2Cインタフェースのドライバの有効化とDS3231ドライバを有効化します。
<
>
|GPIO|PIN#|Special IO|PullUp/PullDown|Breadboard PIN#|h
|GPIO 02|03|I2C SDA.1|UP|SDA|
|GPIO 03|05|I2C SCL.1|UP|SCL|
|GPIO 04|07|GPCLK|UP|P7|
|GPIO 05|29| |UP|P21|
|GPIO 06|31| |UP|P22|
|GPIO 07|26|SPI CE1|UP|CE1|
|GPIO 08|24|SPI CE0|UP|CE0|
|GPIO 09|21|SPI MISO|Down|MISO|
|GPIO 10|19|SPI MOSI|Down|MOSI|
|GPIO 11|23|SPI SCLK|Down|SCK|
|GPIO 12|32| |Down|P26|
|GPIO 13|33| |Down|P23|
|GPIO 14|08|TXD0|UP|TXD|
|GPIO 15|10|RXD0|UP|RXD|
|GPIO 16|36| |Down|P27|
|GPIO 17|11| |Down|P0|
|GPIO 18|12|PCM CLK|Down|P1|
|GPIO 19|35| |Down|P24|
|GPIO 20|38| |Down|P28|
|GPIO 21|40| |Down|P29|
|GPIO 22|15| |Down|P3|
|GPIO 23|16| |Down|P4|
|GPIO 24|18| |Down|P5|
|GPIO 25|22| |Down|P6|
|GPIO 26|37| |Down|P25|
|GPIO 27|13| |Down|P2|

-/boot/config.txt
<
>
>>

 #
 dtparam=i2c_arm=on
 dtparam=i2c1=on
 dtoverlay=i2c-rtc,ds3231
 
<<
<
>
>モジュールがロードされているか確認します。
>>
>>>
>>>
>>>
>>>こっちが見やすい?
|>|>|COLOR(#000000):CENTER:''Raspberry Pi 40Pin''|>|>|>|COLOR(#000000):CENTER:''ExtensionBoard''|>|>|COLOR(#000000):CENTER:''Raspberry Pi 40Pin''|
|COLOR(#000000):LEFT:GPIO 07|COLOR(#000000):CENTER:26|BGCOLOR(#FF99FF):COLOR(#000000):LEFT:SPI CE1|COLOR(#000000):LEFT:CE1|COLOR(#000000):CENTER:01|COLOR(#000000):CENTER:02|COLOR(#000000):LEFT:P0|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:11|COLOR(#000000):LEFT:GPIO 17|
|COLOR(#000000):LEFT:GPIO 08|COLOR(#000000):CENTER:24|BGCOLOR(#FF99FF):COLOR(#000000):LEFT:SPI CE0|COLOR(#000000):LEFT:CE0|COLOR(#000000):CENTER:03|COLOR(#000000):CENTER:04|COLOR(#000000):LEFT:P1|BGCOLOR(#F8CBAD):COLOR(#000000):LEFT:PCM CLK|COLOR(#000000):CENTER:12|COLOR(#000000):LEFT:GPIO 18|
|COLOR(#000000):LEFT:GPIO 11|COLOR(#000000):CENTER:23|BGCOLOR(#FF99FF):COLOR(#000000):LEFT:SPI SCLK|COLOR(#000000):LEFT:SCLK|COLOR(#000000):CENTER:05|COLOR(#000000):CENTER:06|COLOR(#000000):LEFT:P2|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:13|COLOR(#000000):LEFT:GPIO 27|
|COLOR(#000000):LEFT:GPIO 10|COLOR(#000000):CENTER:19|BGCOLOR(#FF99FF):COLOR(#000000):LEFT:SPI MOSI|COLOR(#000000):LEFT:MOSI|COLOR(#000000):CENTER:07|COLOR(#000000):CENTER:08|COLOR(#000000):LEFT:P3|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:15|COLOR(#000000):LEFT:GPIO 22|
|COLOR(#000000):LEFT:GPIO 09|COLOR(#000000):CENTER:21|BGCOLOR(#FF99FF):COLOR(#000000):LEFT:SPI MISO|COLOR(#000000):LEFT:MISO|COLOR(#000000):CENTER:09|COLOR(#000000):CENTER:10|COLOR(#000000):LEFT:P4|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:16|COLOR(#000000):LEFT:GPIO 23|
|COLOR(#000000):LEFT:GPIO 15|COLOR(#000000):CENTER:10|BGCOLOR(#FFFF00):COLOR(#000000):LEFT:RXD0|COLOR(#000000):LEFT:RXD|COLOR(#000000):CENTER:11|COLOR(#000000):CENTER:12|COLOR(#000000):LEFT:P5|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:18|COLOR(#000000):LEFT:GPIO 24|
|COLOR(#000000):LEFT:GPIO 14|COLOR(#000000):CENTER:08|BGCOLOR(#FFFF00):COLOR(#000000):LEFT:TXD0|COLOR(#000000):LEFT:TXD|COLOR(#000000):CENTER:13|COLOR(#000000):CENTER:14|COLOR(#000000):LEFT:P6|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:22|COLOR(#000000):LEFT:GPIO 25|
|COLOR(#000000):LEFT:GPIO 02|COLOR(#000000):CENTER:03|BGCOLOR(#66FFFF):COLOR(#000000):LEFT:I2C SDA.1|COLOR(#000000):LEFT:SDA|COLOR(#000000):CENTER:15|COLOR(#000000):CENTER:16|COLOR(#000000):LEFT:P7|BGCOLOR(#F8CBAD):COLOR(#000000):LEFT:GPCLK0|COLOR(#000000):CENTER:07|COLOR(#000000):LEFT:GPIO 04|
|COLOR(#000000):LEFT:GPIO 03|COLOR(#000000):CENTER:05|BGCOLOR(#66FFFF):COLOR(#000000):LEFT:I2C SCL.1|COLOR(#000000):LEFT:SCL|COLOR(#000000):CENTER:17|COLOR(#000000):CENTER:18|COLOR(#000000):LEFT:P21|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:29|COLOR(#000000):LEFT:GPIO 05|
|COLOR(#000000):LEFT:GPIO 26|COLOR(#000000):CENTER:37|COLOR(#000000):RIGHT: |COLOR(#000000):LEFT:P25|COLOR(#000000):CENTER:19|COLOR(#000000):CENTER:20|COLOR(#000000):LEFT:P22|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:31|COLOR(#000000):LEFT:GPIO 06|
|COLOR(#000000):LEFT:GPIO 12|COLOR(#000000):CENTER:32|COLOR(#000000):RIGHT: |COLOR(#000000):LEFT:P26|COLOR(#000000):CENTER:21|COLOR(#000000):CENTER:22|COLOR(#000000):LEFT:P23|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:33|COLOR(#000000):LEFT:GPIO 13|
|COLOR(#000000):LEFT:GPIO 16|COLOR(#000000):CENTER:36|COLOR(#000000):RIGHT: |COLOR(#000000):LEFT:P27|COLOR(#000000):CENTER:23|COLOR(#000000):CENTER:24|COLOR(#000000):LEFT:P24|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:35|COLOR(#000000):LEFT:GPIO 19|
|COLOR(#000000):LEFT:GPIO 20|COLOR(#000000):CENTER:38|COLOR(#000000):RIGHT: |COLOR(#000000):LEFT:P28|COLOR(#000000):CENTER:25|COLOR(#000000):CENTER:26|COLOR(#000000):LEFT:P29|COLOR(#000000):RIGHT: |COLOR(#000000):CENTER:40|COLOR(#000000):LEFT:GPIO 21|
|COLOR(#000000):LEFT:ID_SC|COLOR(#000000):CENTER:28|BGCOLOR(#00FF00):COLOR(#000000):LEFT:ID_SC|COLOR(#000000):LEFT:ID_SC|COLOR(#000000):CENTER:27|COLOR(#000000):CENTER:28|COLOR(#000000):LEFT:ID_SD|BGCOLOR(#00FF00):COLOR(#000000):LEFT:ID_SD|COLOR(#000000):CENTER:27|COLOR(#000000):LEFT:ID_SD|

<<<
 [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じゃないんですね
<
***電流容量 [#kc81094d]
***確認 [#n07ac47a]
>
-GPIOピン1本あたりの最大電流は16mA
-複数本のGPIOピンを使用する場合、同時に流せる電流の合計は50mAまで
-5Vピンは、マイクロUSBの電源 - 1400mA - IOピンの電流 と考えましょう
-3.3Vはレギュレータの本体の余りなので、100mA程度と考えましょう。
>リブートしてから確認
>>
 [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 ~]#
 
<<
<
**リンク [#g6bb247e]
***I/O [#f2c9640c]
-[[RPi Low-level peripherals>http://elinux.org/RPi_Low-level_peripherals]] -- Raspberry PiのローレベルI/Oに関する記事
-[[C library for Broadcom BCM 2835 as used in Raspberry Pi>http://www.airspayce.com/mikem/bcm2835/]] -- C(C++)用のIOライブラリ
-[[RPiconfig >http://elinux.org/RPiconfig]]-- bootパラメータ
>
>ちなみに、通常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を使用してます。
<<
<

お疲れ様でした。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS