GROVE - 高精度RTC
GROVE - 高精度RTCは、GROVEコネクタを搭載したRTC(リアルタイムクロック)モジュールである。
PHILIPS PCF85063TP チップを搭載しており、I2C経由で読み書きが可能である。
使用する電池
上記スイッチサイエンスのページには、「CR1225ボタン電池ホルダー搭載」と書かれている。
Grove - High Precision RTC (Real Time Clock) - Seeed Wiki にも、「CR1225 battery-holder」と書かれている。
ここで指定されている電池のCR1225は、日本の一般的な店では売られていないようである。
ここで、回路図を見ると、電池ホルダーに相当する部分に「CR1220-15.06*13.00*H4.1mm
」との記載があった。
CR1220とCR1225は、厚さが0.5mm違い、容量も少し異なるが、ほぼ同じである。
よって、今回は入手が容易なCR1220を用いることにした。
データシート
データシートも Grove - High Precision RTC (Real Time Clock) - Seeed Wiki にリンクが掲載されている。
「Resources」の「PCF85063TP Datasheet」を参照する。
IchigoKamuy
IchigoKamuy は、IchigoJam の互換機である。
パソコンにUSBで直結して利用できるのに加え、GROVEのケーブルを直結してI2Cを利用できる端子を搭載している。
今回は、これを用いてRTCの読み書きを行う。
読み書きを行うプログラム
データシートに沿ってプログラムを作成した。
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]P ?"TEST "; ELSE ?"NORMAL";
50 ?"/";:IF [0] ?"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]P ?"COURSE"; ELSE ?"NORMAL";
110 ?" OFFSET ";:O=[1]F:IF O>#3F ?O-128 ELSE IF O=0 ?"0" ELSE ?"+";O
120 ?"RAM #";HEX$(([1]>>8)&#FF,2)
130 ?"CLOCK ";:IF [2]P ?"NG" ELSE ?"OK"
140 ?HEX$([5]&#FF,2);"/";HEX$(([4]>>8)F,2);"/";HEX$(([3]>>8)F,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]F,2);:GOTO 190
170 IF [3] ?"PM "; ELSE ?"AM ";
180 ?HEX$([3]F,2);
190 ?":";HEX$(([2]>>8)F,2);":";HEX$([2]F,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)F)<<8)|((S/10*16+S%10)F)
170 [1]=(H/10*16+H%10)F:IF G<>2 [1]=([1]F)|(G<<5)
180 [1]=[1]|(((D/10*16+D%10)F)<<8)
190 [2]=(((T/10*16+T%10)F)<<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時間モードで書き込む。
データを読み出せている。(時刻は進んでいる)
今度は、現在時刻を12時間モードで書き込む。
年は「2022」のような4桁で入力しても、「22」のような2桁で入力してもよい。(下位2桁以外は無視する)
12時間モードのデータを読み出せている。
おわりに
※IchigoJamはjig.jpの登録商標です。
※IchigoKamuyは株式会社syushuの登録商標です。