福野泰介の一日一創 - create every day

IchigoJamで温度表示付きオリジナル時計作りに、245円の4KBメモリ&RTCモジュールが便利!

2016/06/19
#IchigoJam #maker 

I2Cに対応しているIchigoJam、トラ技の連載「学生エンジニア応援企画 園児が組み込み開発?子供向け1,500円パソコンIchigoJam誕生」最新号で紹介されていた「DS3231搭載RTCモジュール」が便利でした!

時刻設定をボタン電池CR2032で保存してくれるRTC(リアルタイムクロック)機能に、温度センサー、フリーに使える4KBの外部メモリ(EEPROM)もついて、なんと税抜245円!


テレビやプロジェクターだけでなく、7セグLED、サーボ、モーターなどで電子工作したオリジナル時計づくりに使えます!

ブレッドボードと2.4kΩの抵抗2つ、ジャンパー線を用意して、下記のようにつなぎます。
- SCLをIchigoJamのEX1へ(新基板のSCL(CN5)でも可)
- SDAをIchigoJamのIN3へ(新基板のSDA(CN5)でも可)
- VCCをIchigoJamのVCCへ
- GNDをIchigoJamのGNDへ
- SCLとVCCを2.4kΩの抵抗でつなぐ(2.4kΩでプルアップ)
- SDAとVCCを2.4kΩの抵抗でつなぐ(2.4kΩでプルアップ)
* 2.4kΩのプルアップ抵抗は不要でした(シンプル版の作り方

ハードができたら、こちらのプログラムで時刻設定

300 P=#707 310 INPUT"Y:20",X:GOSUB400 320 INPUT"M:",X:GOSUB400 330 INPUT"D:",X:GOSUB400 340 X=0:GOSUB400 350 INPUT"H:",X:GOSUB400 360 INPUT"M:",X:GOSUB400 370 INPUT"S:",X:GOSUB400 375 POKE #700,0 380 IF I2CW(#68,#700,1,#701,7) ERR 390 END 400 X=X/10*16+X%10:POKE P,X:P=P-1:RETURN RUN

入力された年か秒までを二進化十進表現(BCD)にしてメモリにPOKEで書いておき、I2CWコマンドで送信! #68がI2C上のアドレス、これが重ならない限りいろいろ同時に並べて使えるのがI2Cのいいところ!#700から1byteで書き込み先を指定して、#701から7byteを送信して、失敗したらERRという存在しないコマンドでエラー停止させています。

次に、現在の日付と時刻を読みだして表示するシンプルなプログラム

10 GOSUB200 20 CLS 30 LC10,10:?"20";DEC$([0],2);"/";DEC$([1],2);"/";DEC$([2],2) 40 LC10,12:?" ";DEC$([4],2);":";DEC$([5],2);":";DEC$([6],2) 50 WAIT 60:GOTO 10 200 POKE#700,0 210 IF I2CR(#68,#700,1,#701,7) ERR 220 FOR I=0 TO 6:[I]=PEEK(#707-I):[I]=[I]>>4*10+[I]&15:NEXT 230 RTN

時計の完成です!
SAVE0して、ボタンを押しながら電源をいれてみると、ちゃんと時刻を覚えてます!
時間帯に合わせて挨拶する時計なんかも楽しそうです。


温度センサーの値を取得するプログラムはこんな感じ

500 GOSUB600 510 ?T/10;".";T%10 520 WAIT60:GOTO 500 600 POKE#700,17:IF I2CR(#68,#700,1,#701,2) ERR 602 T=PEEK(#701)<<2|PEEK(#702)>>6:IF T& #200 T=T|#FC00 610 T=(T*25+5)/10:RETURN GOTO 500

1秒おきに温度を表示します(数としては0.25度刻みですが、精度がプラスマイナス3度と粗いので、小数点2桁目を四捨五入)
詳しく知りたい方は、DS3231データシートを読むといいです。 アラームとSQW信号を使って、温度に合わせて鳴き声が変わる鳩時計みたいなものできるかも!?

最後にEEPROMの使い方。下記でプログラムの保存、読み出しができます(AT24C32の仕様上、書き込みは一度に32byteまで)

'SAVE to EEPROM N=0 '0-3 FORI=0TO1023STEP32:POKE#700,(1024*N+I)>>8,I:R=I2CW(#57,#700,2,#C00+I,32):NEXT 'LOAD from EEPROM (N:0-3) N=0 '0-3 FORI=0TO1023STEP32:POKE#700,(1024*N+I)>>8,I:R=I2CR(#57,#700,2,#C00+I,32):NEXT

このアドレスのまま外部不揮発メモリとして活用するのもありですが、モジュール上のA0〜A3をジャンパーでつないで、アドレスを#50にすると、IchigoJam標準のEEPROM保存、SAVE100〜SAVE103/LOAD100〜LOAD103として使うこともできます。 (ちょっと、はんだブリッジがしづらいのが残念、0Ωチップ抵抗があると楽そうです)


ブレッドボードでの配線が手間なので、接続基板をつくってみました(左接続基板、右RTCモジュール)


適当な小さなユニバーサル基板と2.4kΩの抵抗2つ、L字ピンヘッダーとピンソケットをはんだづけ。


完成です!

いろいろ使えてお得なRTCモジュール、電子パーツ販売@Hana道場にも、近日入荷予定!
RTCモジュール - aitendo

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像