I2C通信を行う
マイコンの周辺装置として、色々なデバイスが販売されています。
マイコンを使うならI2C通信は必修です。
最初、外付けシリアルEEPROMをI2Cで読み書きを行う予定でしたが、
EEPROM1個しか搭載しない基板の設計をミスして・・・・馬鹿だね〜
部品箱をあさっていたら秋月電子で販売されている、ひとつの基板にRTCとEEPROMが搭載されている
部品が見つかったのでこれを利用することにしました。
DS1307 I2Cリアルタイムクロックモジュール(RTC)
通販コード M-09874
この基板に接続するするのは、VCC・GNDとSDA・SCLの4本だけです。
裏にEEPROMのR/Wアドレスを設定するジャンパー部分がありますので、写真のように半田付けしてください。
これでアドレスは’A0h’になります。
シリアル通信で、読み取ったデータをPCへ送ります。
I2Cデバイスを使う場合必ず確認しなければならないのは、読み書き時に使用する7ビットのアドレス、レジスターアドレス内容です。
今回シリアルEEPROMのアドレスはA0h、RTCはD0hとなります。
RTCのレジスタは時計の時刻設定と同じなので難しくは無いでしょう。
サンプルプログラムですが、
技術評論社、「電子工作のためのPIC16F1ファミリ活用ガイドブック(後閑哲也)」に紹介されている、’i2C_lib'を
PIC16F1938用に変更したものです。(文字化けもそのまま)
XC8ではI2C用の完全なライブラリーが有ると思っていましたが無く・・・、レジスタの監視をするプログラムも必要です。
他の方がI2Cのライブラリを紹介していましたので、それを参考に新たに作成も考えましたが、
変数名を変えるだけとかになる為・・・、活用ガイドブックの方をほとんどそのまま利用させていただきました。
プログラムはここ。
今回EEPROMとRTCの二つを使ってみましたが、他のI2Cデバイスを操作する場合は、
プログラムのRTC制御関数を参考にしてください。
解凍して、
新たにプロジェクトを作成し、そのフォルダーに3ファイルを入れてください。
Souce Files にてファイルを追加してください。3本まとめて追加出来ます。
このままビルドできます。 i2c_lib4.hだけ’Header Files’に移した方がいいかもしれません。
起動すると、EEPROMの読み書きテスト後、
1秒間隔で、秒、分、時間を呼び出しています。
ちなみに分、時間の表示が0分0時からで無いのは、バックアップ電池を接続していたからです。
他のI2Cデバイスを動かしたら追加していきます。(多分)
メイン