0. はじめに |
データを I2C 出力するセンサは通常、製品固有の同一アドレスを持ちます。 I2C を 2ch 持つマイコンがあれば、任意のアドレスを割り振ることができて便利です(図1)。 R8C/16 マイコン(Renesas Technology 株式会社)の I2C モジュールは 1ch ですが、 I2C のマスタ機能ならばソフトウェア的にもう 1ch 実装することができます1)。 ソフト的にやる場合、問題となるのはセンサ推奨の通信速度をクリアできるかどうかです。 例えば手元のセンサでは、50 kHz 〜 700 kHz が推奨されています。 ここでは、R8C/16 がどこまで高速にポートを駆動できるかを調べます。 部品数を減らすため、高速オンチップオシレータ (8MHz) のみでチャレンジします。 図1 センサの複数接続。センサアドレス= 1111 111 の場合。 I2C_1 側でアドレスが重複しないようにしている。 |
1. セットアップ |
1-1. プログラム
タイマ X のカウントにより P1_4 の HIGH/LOW を切り替える。(test_timer_x.c)
ポートに出力するパルス波形の周期 T [s] は以下のように与えられる。
ここで n は、prex レジスタと tx レジスタで設定するカウント数である。
#pragma INTERRUPT /B timer_x_int (vect=22)
/B はスタックの代わりに裏レジスタを使うことで高速化するオプション。
1-2. 回路
プログラムをマイコンに書き込んだ後、(プログラム書き込みは「R8C/Tiny 開発環境」参照)
図2のような回路基板に取り付け、スタンドアローンで動作させた。
(RESET 端子の保護抵抗を省略したが、入れておくほうが無難)
図2 回路図。P1_4 からパルス波形が出力される。
プログラム書き込み用と動作確認用の基板は別々に作った。
マイコンはセロファンテープで仮止めし、その上からクリップで固定する(図3)。
こうしておくと複数個、複数回のプログラム書き換えが手軽にできる。
ただし位置合わせには要注意。
図3 マイコンを基板にクリップで固定。
2. 実験結果 |
n を 10000 から 1 まで減らしながら、P1_4 から出力されるパルス波形を測定した。
結果を図4に示す。
この実験で以下のようなことが観察された。
1. n = 170 までは理論式どおりの直線を描きながら減少した。
2. 170 以下では直線から外れ、その変化も単調ではなかった。
3. パルス波形が出るのは n = 16 までで、それ以下では出なかった。
図4 カウント数nと周期Tの関係。右は原点付近を拡大したもの。
グラフをクリックすると拡大図。
縦軸の逆数をとって周波数にしたものを図5に示す。
25 kHz 以上のパルス波形が出せないことがわかる。
図5 カウント数nと周波数の関係。グラフをクリックすると拡大図。
3. おわりに |
8 MHz クロックでは、25 kHz まででしかポートを駆動できないことがわかりました。 理由としては、周波数が高くなると命令処理時間の影響が大きくなることが考えられます。 例えば p1_4 = ~p1_4; (アセンブラでは BNOT) は 6 サイクル(= 750ns)かかります2)。 I2C 通信プロトコルを実装すると処理内容が増え、可能な周波数はさらに低くなります。 なお、理論式を外れた後の n に対する不規則な変化についてはよくわかりません。 結論として、R8C/16 ではセンサ推奨の通信速度(50 kHz 〜)は実現できないようです。 数 kHz の用途なら十分使えそうです。 他の手段としては、以下のようなものが考えられます。 1. I2C を 2ch 搭載するマイコンを使う。(PIC24F、PIC18F(Microchip Technology 社)など) 2. 数 10 〜数 100 MHz のクロックを搭載するマイコンを使う。 3. I2C バッファ IC を使う。(LTC4302、LTC4305 (Linear Technology 社) など) |
4. 参考文献 |
1) トランジスタ技術 2006 年 6 月号, CQ 出版社, 2006.
2) R8C/Tinyシリーズソフトウェアマニュアル, ルネサステクノロジ, 2003.