LoginSignup
1
0

More than 1 year has passed since last update.

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

Posted at

GROVE - 高精度RTC

GROVE - 高精度RTC — スイッチサイエンス

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

GROVE - 高精度RTC

使用する電池

上記スイッチサイエンスのページには、「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を用いることにした。

CR1220

データシート

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

IchigoKamuy

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

IchigoKamuyに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]&#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)

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

情報の読み出し 1

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

現在時刻の書き込み (12H)

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

情報の読み出し 2

おわりに

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0