- ベストアンサー
PICでのI2C通信でのマスタ、スレーブの切り替え
現在PIC18F2550同士で、I2C通信を行いたくアセンブラでプログラミングをしておりますが、教えていただきたい点があります。 ・マスターとスレーブは動作中に入れ替えることはできないのでしょうか? RS等から任意の信号を与えると、マスタとスレーブが切り替わるようなことがしたいのですが、どの書籍をみてもそのような事ができるとは書いてなく困っております。 ・PICだけでなくI2C通信を行うことのできるマイコンorCPU(プログラミングが簡単で高速動作できる)はあるのでしょうか?あればお教えいただきたいです。 以上よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>4つぐらいのPICを全てRS232CでPCと繋ぎ、また各PICをI2Cで繋ぎたいと考えております。そして、PICメモリ内のデータをI2Cで4つの PICとやり取りしたいと考えた時、I2Cではマスタとマスタのデータ送受信はできないと思いました。そのため、マスタとスレーブの入れ替えが必要かと思いました。 たしかにマスタ間は通信できません。通信できるのはマスタとスレーブ間だけです。しかし、この仕様だと4つが同時にマスタ要求する可能性があることを考えるとかなり難易度が高いですが大丈夫ですか? マスタがスレーブ間のデータをマスタ経由で再転送仕組みにするほうが圧倒的に楽です。速度的に許されるなら検討してみてください。 スレーブA→マスタ→スレーブBって感じでデータを受け渡します。スレーブ間は必ずマスタを経由するので、効率は悪いですが制御は圧倒的に楽です。 >お完全に知識不足および情報不足で申し訳ありません。PIC18Fシリーズより高速であればよいのですが・・・。8bitや16bitなどのbitの違いが私にはわかっていません。もっと学習する必要がありますね。 簡単にプログラムを組むならC言語でI2Cライブラリを使ったほうが圧倒的に楽です。C18というコンパイラを検討してみてはどうでしょうか? http://www.picfun.com/mccframe.html とりあえず高速化なら環境のさほど変わらない同じマイクロチップ社のPIC24FかdSPICを使えばC言語とI2Cのライブラリもあるので楽に組めると思います。 速度的には、コンパイラの最適化なしでもPIC18Fの数倍は楽に出ると思いますが、コンパイラの最適化が期限付きなので、必要ならコンパイラのライセンスを購入してください。 http://www.picfun.com/ でPIC(16bit)を参照のこと。
その他の回答 (1)
- zwi
- ベストアンサー率56% (730/1282)
>・マスターとスレーブは動作中に入れ替えることはできないのでしょうか? 何のために入れ替える必要があるかは疑問ですが、マスタがスレーブに対して入れ替えを要求する形にすれば大丈夫じゃないでしょうか? マスタとスレーブがSTOP状態にあるときに入れ替えれると思います。 >RS等から任意の信号を与えると、マスタとスレーブが切り替わるようなことがしたいのですが、どの書籍をみてもそのような事ができるとは書いてなく困っております。 RSって何の略号でしょう?RS232Cですかね? 結線を考える限りどちらがマスタでもかまわないハード仕様ですので、同時にマスタ化やスレーブ化しないように制御が出来れば問題ないと思いますので可能だと思いますが、RS232Cに接続されいていない側のマイコンをマスタにするとマスタとスレーブの入れ変えは面倒な手続きになると思いますが。 >・PICだけでなくI2C通信を行うことのできるマイコンorCPU(プログラミングが簡単で高速動作できる)はあるのでしょうか?あればお教えいただきたいです。 たいていのワンチップマイコンは、全てのバリエーションではないですがI2Cをサポートしています。 8bitならAVR、16bitならdSPICやR8C、32bitならARM7のLPC2214やSH2の7144Fなどです。 16bitや32biのマイコンを使えば、高速でC言語とライブラリでI2Cのプログラムは楽に組めると思いますが、どこまでの速度を出したいのか?コストパフォーマンスは気にしなくて良いのか?消費電力は何mWまで良いのか?コンパイラの値段は有料でも良いのか?など条件を決めないと推薦のしようが無いです。
補足
非常に丁寧な御解答ありがとうございます。 なにぶんマイコン初心者なもので、質問があやふやですいません。 4つぐらいのPICを全てRS232CでPCと繋ぎ、また各PICをI2Cで繋ぎたいと考えております。そして、PICメモリ内のデータをI2Cで4つのPICとやり取りしたいと考えた時、I2Cではマスタとマスタのデータ送受信はできないと思いました。そのため、マスタとスレーブの入れ替えが必要かと思いました。 >マスタがスレーブに対して入れ替えを要求する形にすれば大丈夫じゃないでしょうか? そのようなプログラムを作成すればできるのですね。頑張ってやってみます。 >条件を決めないと推薦のしようが無いです。 完全に知識不足および情報不足で申し訳ありません。PIC18Fシリーズより高速であればよいのですが・・・。8bitや16bitなどのbit の違いが私にはわかっていません。もっと学習する必要がありますね。
お礼
>マスタがスレーブ間のデータをマスタ経由で再転送仕組みにするほうが圧倒的に楽です。速度的に許されるなら検討してみてください。 的確なアドバイス本島にありがとうございます。まずはマスタ経由でデータの送受信を試みたいと思います。 >とりあえず高速化なら環境のさほど変わらない同じマイクロチップ社のPIC24FかdSPICを使えばC言語とI2Cのライブラリもあるので楽に組めると思います。 今現在PIC16Fを使用していまして、それをPIC18f等におきかえようとしております。PIC以外でも様々なマイコンがあるみたいですが、初心者の私にはやはりPICが一番使いやすそうに感じます。 ありがとうございました。