denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

3軸ジャイロセンサ(L2GD20)が動き始めた

(2016.04.10)
以前、PICクラブで頂いたTQFPパッケージのデバイスを使って引き半田を練習しました。

f:id:denshikobo:20160410161416p:plain

あくまで半田付けの練習用と考えていたので、何だか判らないまま頂いて来たのですが、調べてみるとdsPIC33FJ64MC706(↓)でした。(ラッキー!)
http://www.microchip.com/wwwproducts/en/dsPIC33FJ64MC706A

これを、今回の倒立振り子ロボットのコントローラとして使用することにしました。

dsPICは初めてだったので、立ち上げに少し手間取りましたが、Explorer 16 Development Board用のSample Projectをベースに、なんとか3軸ジャイロセンサ(L2GD20 ↓)とI2Cで通信することができました。
http://akizukidenshi.com/catalog/g/gK-06779/

f:id:denshikobo:20160410161512p:plain

f:id:denshikobo:20160410161543p:plain

オシロジ410でモニタしたWHO_AM_I (0Fh)レジ読み取りの通信波形

最初に、WHO_AM_I (0Fh)レジを読み取って0xD4が返ってくることを確認し、続いてCTRL_REG1 (20h)に0x5Fを書き込んでデータ・レートを190Hzに設定し、OUT_X_L (28h)から6バイトを続けて読み取ると・・・
L2GD20が計測した3軸の角速度が読み取れました。
(パチパチパチ~)

作業は順調に進み、L2GD20の初期化手続きを整理して、角速度計測プログラムを書いたのですが、そのプログラムのデバッグで問題が発覚しました。センサを動かしても、計測データが変化しません。orz

初めて使うデバイスなので、何が起きているのか(<==どうであれば良いのか)判らず、センサを何度も動かしたり、設定を(あれこれ)変えたりしましたが、状況は全く変わりません。

で、ふと秋月のマニュアルを読み返したとき、次の一文に気がつきました。
『はじめにWHO_AM_I (0x0F)を読みます。正しく通信出来ている場合・・・』

WHO_AM_I (0Fh)レジの読み取りはL2GD20との接続確認のため(だけ)に行うものと思いこみ、初期化手続きから外したのです。それを初期化手続きに追加してみると・・・


ビンゴ~

計測データが変化するようになりました。
WHO_AM_I (0Fh)レジの読み取りは、単なる接続確認用ではなく、L2GD20の初期化シーケンスを開始する”呪文”だったようです。

やれやれ!