IchigoJam (IchigoKamuy) で GROVE - 高精度RTC を読み書き

# GROVE - 高精度RTC

[GROVE - 高精度RTC — スイッチサイエンス](https://www.switch-science.com/products/3134)

**GROVE - 高精度RTC**は、GROVEコネクタを搭載したRTC(リアルタイムクロック)モジュールである。
PHILIPS PCF85063TP チップを搭載しており、I2C経由で読み書きが可能である。

![GROVE - 高精度RTC](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/24600e1d-887d-b760-9293-3a883ef8aa01.jpeg)

## 使用する電池

上記スイッチサイエンスのページには、「CR1225ボタン電池ホルダー搭載」と書かれている。
[Grove - High Precision RTC (Real Time Clock) - Seeed Wiki](https://wiki.seeedstudio.com/Grove_High_Precision_RTC/) にも、「CR1225 battery-holder」と書かれている。

ここで指定されている電池のCR1225は、日本の一般的な店では売られていないようである。

ここで、回路図を見ると、電池ホルダーに相当する部分に「`CR1220-15.06*13.00*H4.1mm`」との記載があった。
CR1220とCR1225は、厚さが0.5mm違い、容量も少し異なるが、ほぼ同じである。
よって、今回は入手が容易なCR1220を用いることにした。

![CR1220](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/f5c7284c-f12b-c016-826a-fddc9bf3ee0e.jpeg)

## データシート

データシートも [Grove - High Precision RTC (Real Time Clock) - Seeed Wiki](https://wiki.seeedstudio.com/Grove_High_Precision_RTC/) にリンクが掲載されている。
「Resources」の「PCF85063TP Datasheet」を参照する。

# IchigoKamuy

[IchigoKamuy](https://www.ichigokamuy.net/) は、[IchigoJam](https://ichigojam.net/) の互換機である。
パソコンにUSBで直結して利用できるのに加え、GROVEのケーブルを直結してI2Cを利用できる端子を搭載している。
今回は、これを用いてRTCの読み書きを行う。

![IchigoKamuyにRTCを接続した様子](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/49263010-d8c3-9c09-400c-189bb2c3653d.jpeg)

# 読み書きを行うプログラム

データシートに沿ってプログラムを作成した。
IchigoJam BASIC の `I2CR`/`I2CW`命令で指定するアドレスは、7ビットのものである。

今回は、時刻(12時間/24時間モードの切り替えを含む)およびCLKOUTの動作の設定を実装した。
読み込みは、定義された全情報に対応した。

## 読み込みプログラム

```
10 ' RTC PCF85063TP ﾘｰﾄﾞ
20 A=`1010001
30 [8]=0:X=I2CR(A,#810,1,#800,11)
40 IF [0]&#80 ?"TEST  "; ELSE ?"NORMAL";
50 ?"/";:IF [0]&#20 ?"STOP"; ELSE ?"RUN ";
60 ?"/CIE=";([0]&4)>>2;"/";24-6*([0]&2);"H/";
70 IF [0]&1 ?"12.5pF" ELSE ?"7pF"
80 ?"MI=";([0]>>13)&1;"/HMI=";([0]>>12)&1;"/TF=";([0]>>11);"/";
90 C=([0]>>8)&7:IF C=7 ?"OFF" ELSE IF C=6 ?"1Hz" ELSE IF C=0 ?"32768Hz" ELSE ?16384>>(C-1);"Hz"
100 IF [1]&#80 ?"COURSE"; ELSE ?"NORMAL";
110 ?" OFFSET ";:O=[1]&#7F:IF O>#3F ?O-128 ELSE IF O=0 ?"0" ELSE ?"+";O
120 ?"RAM #";HEX$(([1]>>8)&#FF,2)
130 ?"CLOCK ";:IF [2]&#80 ?"NG" ELSE ?"OK"
140 ?HEX$([5]&#FF,2);"/";HEX$(([4]>>8)&#1F,2);"/";HEX$(([3]>>8)&#3F,2);" ";
150 W=[4]&7:IF W=0 ?"Sun" ELSEIF W=1 ?"Mon" ELSEIF W=2 ?"Tue" ELSEIF W=3 ?"Wed" ELSEIF W=4 ?"Thu" ELSEIF W=5 ?"Fri" ELSEIF W=6 ?"Sat" ELSE ?"Day ";W
160 IF ([0]&2)=0 ?HEX$([3]&#3F,2);:GOTO 190
170 IF [3]&#20 ?"PM "; ELSE ?"AM ";
180 ?HEX$([3]&#1F,2);
190 ?":";HEX$(([2]>>8)&#7F,2);":";HEX$([2]&#7F,2)
```

## 書き込みプログラム

```
10 ' RTC PCF85063TP ﾗｲﾄ
20 A=`1010001
30 ?"1:ｼﾞｺｸ ｾｯﾃｲ / 2:CLKOUT ｾｯﾃｲ":INPUT S
40 IF S=1 GOTO 70
50 IF S=2 GOTO 280
60 END
70 INPUT "ﾄｼ  :",Y
80 INPUT "ﾂｷ  :",T
90 INPUT "ﾋ   :",D
100 ?"0:Sun. 1:Mon. 2:Tue. 3:Wed."
110 ?"4:Thu. 5:Fri. 6:Sat.":INPUT "ﾖｳﾋﾞ:",W
120 INPUT "0:ｺﾞｾﾞﾝ 1:ｺﾞｺﾞ 2:24H >",G
130 IF G<0 OR 2<G GOTO 120
130 INPUT "ｼﾞ  :",H
140 INPUT "ﾌﾝ  :",M
150 INPUT "ﾋﾞｮｳ:",S
160 [0]=(((M/10*16+M%10)&#7F)<<8)|((S/10*16+S%10)&#7F)
170 [1]=(H/10*16+H%10)&#3F:IF G<>2 [1]=([1]&#1F)|(G<<5)
180 [1]=[1]|(((D/10*16+D%10)&#3F)<<8)
190 [2]=(((T/10*16+T%10)&#1F)<<8)|(W&7)
200 [3]=Y/10%10*16+Y%10
210 ?"ｷｰ ｦ ｵｽ ﾄ ｶｷｺﾐ ｼﾞｯｺｳ"
220 IF INKEY()=0 GOTO 220
230 [8]=0:X=I2CR(A,#810,1,#808,1)
240 [4]=([4]&#FD)|((G<>2)<<1):X=I2CW(A,#810,1,#808,1)
250 [8]=4:X=I2CW(A,#810,1,#800,7)
260 ?"ｶｷｺﾐ ｼﾏｼﾀ"
270 END
280 ?"0:32768Hz 1:16384Hz 2:8192Hz"
290 ?"3:4096Hz  4:2048Hz  5:1024Hz"
300 ?"6:1Hz     7:OFF"
310 INPUT S
320 [8]=1:X=I2CR(A,#810,1,#800,1)
330 [0]=([0]&#F8)|(S&7)
340 X=I2CW(A,#810,1,#800,1)
350 ?"ｶｷｺﾐ ｼﾏｼﾀ"
```

# 実行結果例

現在時刻を24時間モードで書き込む。

![現在時刻の書き込み (24H)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/7b681e28-7b62-d1d0-d4f9-63c7d2182b60.png)

データを読み出せている。(時刻は進んでいる)

![情報の読み出し 1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/95ff3db1-05ce-00c8-e699-10cb108b486c.png)

今度は、現在時刻を12時間モードで書き込む。
年は「2022」のような4桁で入力しても、「22」のような2桁で入力してもよい。(下位2桁以外は無視する)

![現在時刻の書き込み (12H)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/9554ffb7-4145-b8a3-3dda-90a2001e56d0.png)

12時間モードのデータを読み出せている。

![情報の読み出し 2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99656/4c7fd676-c3ca-87b8-aac3-a256fdfe288a.png)

# おわりに

※IchigoJamはjig.jpの登録商標です。
※IchigoKamuyは株式会社syushuの登録商標です。