読者です 読者をやめる 読者になる 読者になる

Nov11’s diary(自宅での開発環境作り )

3Dプリンタと切削加工機で工作した事をアップして行きます

開発環境ツールを自作する(電圧電流モニター作成)(その6)/PICを使用して開発する事にした(シリアル通信/I2C通信)(その4)

電圧電流モニター通信モジュールをBluetoothでI2C接続方式の形式で自作する事にした
最初は、UARTを2チャンネル使用してPICをマルチ接続する方式で考えていたのだけれど、このやり方だとPIC24Fのピンを4本使用する事になりI/Oの残りが15本(28本中9本はI/Oに使用できない)になってしまうし通信速度も最高で100kbps程度なのでI2C接続を選択する事にした
ただ、BluetoothドングルをPIC24Fで制御する訳ではなく、数年前に購入していたマイクロテクニカさまのBluetoothモジュール(RBT-001)を使用した簡単方式で行う事にした
RBT-001はUARTしか無いので、PIC24Fを経由してI2C変換する事になるが、PIC24FのI2Cスレーブデバイスが作れる様になっておきたかった事もあって、この方式にした
全体の接続は、PC<=>RBT-001<=>PIC24F<=>電圧電流モニターとなる
それにしても今回のI2Cのスレーブ側のプログラムには苦労してしまった
I2Cのマスター側が悪いのかスレーブ側が悪いのか判断が付かずに双方のプログラムをグルグルと確認しながらネットでググりながらの日々が数日続いて、ネットのプログラムを流用しようかと考えたがMPLAB X版のサンプルは見つからないし、MPLAB版はサンプルプログラムだけあって割込みの処理の中などで無限ループになる可能性がありそうな予感のする物ばかりに思えたので、流用する事は諦めマニュアル片手の手探りとなってしまった...が、分かってしまえば「えっ!たったこれだけの事!」と思わず叫んでしまうぐらい単純な事だった
んで、全体を以下の手順で構築し動作確認を行ったところ、おぉ~上手くゆきました
苦労はしたが、これでI2Cデバイスを自由に作成できる奴になれました!

[作成手順]
1)RBT-001のマニュアルを以下のURLからダウンロードする
  http://www.microtechnica.tv/support/manual/rbt-001_man.pdf
2)パソコンにRBT-001を認識させる
  RBT-001に80FG990アダプタをを接続し、ブレットボードに配置する
  マニュアルに従い、パソコンにドライバーをインストールする
3)RBT-001動作確認
  FTDI社のFT232RとRBT-001をブレットボード上に配置しTera Termで通信出来るか確認する
  FT232RとTera Termのインストールは、PICを使用して開発する事にした(UART通信)を参照する
4)PIC24FJ64GA002とのUART接続
  PICを使用して開発する事にした(UART通信)を参照しPICと接続する
5)I2Cスレーブを追加する
  PICを使用して開発する事にした(I2C通信)を参考してI2Cスレーブを追加する
  I2Cスレーブの設定は、全てにチェックを入れてスレーブアドレスを設定する
  Code Configuratorでプログラムが自動生成されるが、EEPROM仕様になっているので一部修正する
  修正する個所は、mcc_generated_filesフォルダーのi2c1.cファイル中の_SI2C1Interruptと
  I2C1_StatusCallbackを今回の仕様に合わせて修正する
  注意点は、データ受信時の処理に時間が掛かり過ぎるとマスターが異常と判断しNACKを返して
  処理を中断してしまう事だ
  なので、I2Cマスターからの受信割込み時に複雑な処理をせず、バッファーに格納しておいて
  定周期でバッファー監視を行い格納されていれば処理を行う様にコーディングする
6)I2Cマスターを作成する
  PICを使用して開発する事にした(I2C通信)を参考にして作成する
  使用する関数は、mcc_generated_filesフォルダーのi2c1.cファイル中のI2C1_MasterWriteと
  I2C1_MasterReadを使用して送受信する

[BluetoothでI2C接続写真]

f:id:Nov11:20160417184359j:plain

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい