I2CについてはPICのことを知っている方なら必ず目にしたことでしょう。 提唱はフィリップスです。 マイクロチップ社はシリアルROM等にも使用しています。 マイクロワイアーとも呼ばれている様ですが正確にはI2Cです。 いったいこれで何ができるのでしょうか? 答えは、半二重でマルチノード指定のシリアル通信ができます。
I2Cの特徴
- 高速100KHz(400KHz)シリアル通信仕様です。
フィリップス社は自社のビデオチップ等の制御に使用しています。 ハードの構成から見てオンボード内のインテリジェントモジュールを相互接続することが主な目的でしょう。 仕様書にはマックのADBやUSBのような位置付けをしていますが、現在USB等が普及している時代にはちょっと苦しい様に感じられます。 とは言え、簡単な考え方で上記特徴が出るのですからとても良い方法と感じました。
ロボット製作では各PICを接続する信号として使用してみました。 ただし今回私が使用している16F84はこのポートをハード的に持っていません。 そこでプログラムで強引に疑似I2Cを行っています。
どのような考え方で構成されているか
- 各ノードはそれぞれ2本の信号をオープンコレクタでワイアードORで接続します。
- 各ノードは信号を出す時は’L’を出すだけで’H’は終端で実現されます
- マスターが送信する時はデータとクロックを出します。
- スレーブからデータを受ける時はマスターがクロックを出します。
- クロックの’H’区間でデータを変化させてスタート、ストップをあらわします。
- 通常データの変化はクロックが’L’の時に限ります。
- 1ワード9ビット構成で8ビットデータを送ると必ず1ビットACKを受け取ります。
- マスターどうしの競合は’L’を出した方が勝ちとする
以上の基本が理解できれば十分です。 難しいことはあまり無くマルチマスターの半二重通信ラインが確立するわけです。
|