引き続き、arduinoのライブラリ関係を調査しています。
SPIを使いたかったんですが、Official Librariesは
おろかContributed Librariesにもそれっぽいもの無し。
先人のSPI関係のスケッチを探してみたんですが、
めぼしい感じのものがヒットせず。
(↓これはちょっと長すぎるよね…)
http://www.arduino.cc/en/Tutorial/SPIEEPROM
なので、I2C(TWI)i/fについて調べました。これも
SPI同様に「バスi/f」として簡単に使えるので。
I2C(TWI)については、Official Librariesで
しっかり対応されてました。
サンプルスケッチなどを眺めてみましたが、
使い方も超シンプル。I2C対応のICとなら、
取り交わすコマンド類さえ判れば簡単にスケッチ
が可能かと。
凝り性なもので、ライブラリの内部を眺めてみました。
特に気になっているのは通信速度のこと。
(ピン配置などは標準のピン以外に割り当てのしようが
ないはずなので)
MEGA168の内部レジスタでは、プリスケーラとビットレート
を決めるのは、TWSRレジスタ内のTWPS1、TWPS0の
2ビットと、TWBRレジスタの全8ビット、計10ビット。
これらが内部でどう設定されてるのか、なのですが…
残念ながら、ざっと眺めた程度ではこれらのレジスタに
設定している処理までは追いきれませんでした…。
ただ、Wire.cpp 内のbegin()関数から呼び出される
twi.h 内のtwi_init() 関数の中で、
#define TWI_FREQ 100000L
と言う具合にTWIの周波数を100KHzに設定している
ところがあり、それ以外の周波数に設定している
所はないようなので、多分100KHz(=低速モード)
に固定で設定されていると考えて間違えないでしょう。
きっと、下手に速い速度で固定すると古い周辺IC
とかでは対応されない場合があるから遅い方に
あわせてあるのでしょう。
逆に受信速度自体はMEGA168ならもともと400KHz対応だし。
どちらかというと、速い通信速度(400KHz)固定の
ほうが個人的には困ってしまうところなので、
100KHzは歓迎です。
その他興味をひいたライブラリとしてはグラフィックLCD
の表示ライブラリとか、PS2キーボードライブラリとか、
サーボモーターライブラリあたりですね。
この辺はあとで時間があるときにでもじっくり見て
みたいと思います。
|