Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC16F1827 + MPU6050 Module (InvenSense MPU6050搭載 三軸加速度センサ・三軸ジャイロセンサモジュール)

Quadcopterで遊んでたら、そういや、MPU-6050のモジュールって昔買ったよね、と思い出した。
例によって、Arduinoで動作確認したきり放置してある。
某海外通販で購入したArduino UNO R3 互換機で遊ぶ -その07 MPU-6050ボード-

InvenSense社のMPU6050を搭載した、三軸加速度センサ・三軸ジャイロセンサモジュールだ。
何でこう、動いただけで安心しちゃうのかは不明だ。

もちろん自分で1から作るわけじゃないので、PICで動かしている例を探す。
ここを参考にさせていただくことにした。

元の環境は、PIC12F1840、MPLAB IDE v8.90、Hitech C と書かれている。
ここでは、PIC16F1827、MPLAB X IDE v2.35、XC8 v1.34 を用いた。
HC04というBluetoothモジュールを使っているらしいが、ここではFT232RLモジュールでPC上のTeraTermと通信する。
そもそもは、ボールの中に組み込んでBluetoothで通信して、ボールの落下とか衝突とかのデータを取る目的のようだ。
それはそれで面白そうだが、HC04とやらを持ち合わせていないので、FT232RLで我慢する。

下の写真が実行中の様子。
ブレッドボード上のPIC16F1827、FT232RLモジュール、PICkit3、MPC6050モジュールが写っている。
pic16f1827_mpu6050_03
pic16f1827_mpu6050_02
PIC16F1827用のプロジェクトを作成して、もらってきたコードをぶっこむ。
とにかくコンパイルしてエラーを出して、エラーの出た部分を眺めて順に直していくという手順だ。
なので、些細なエラーの場合はその場限りの対処で、何をどうやったか覚えていない部分もある。
覚えている部分だけ書く。
まず、使うPICが違っててピン数も使うピンも変わるのだが、これは以下のように割り当てる。
pic16f1827_mpu6050_01
初期設定ではいろいろバッティングしてしまうが、Alternate Pin Functionという恐ろしく便利な機能がある。
とりあえず、I2C用のSDAとSCLはそのまま初期設定のピンを使うことにして、それらと重複するRX、TXを別のピンへ移動させることにした。
結果的に、センサー・モジュールとは7ピンのSDA、10ピンのSCLで通信し、FT232RLモジュールとは8ピンのRX、11ピンのTXで通信することになる。

Configuration Bitsも含めて、main.cで上のように変更する。
APFCONはPIC16F1827では0と1に分かれているので、APFCON0とAPFCON1は存在するがAPFCONは存在しない。
コンパイルすると元のソースのAPFCONの部分でエラーが出て、変更点を見つけやすい。
次は、コンパイルではエラーにならずに若干探すのが厄介だが、I2C用のピンがオリジナルと異なるので以下のように変更しなければならない。

何か、もっと細々とあった気がするが、主な変更点はこんなところだ。

書き込んで、FT232RLのモジュールとPCをつないで、TeraTermを立ち上げてからリセットすると、コマンドを受け付けてくれる状態になるので、とりあえず、データを垂れ流しにさせているところが以下の動画だ。

わざと机を揺らして値を変化させているので、冒頭ちょっと見難いかも。
Arduinoでは3Dの飛行機を表示させて遊んだが、PICで動かせるようになったので、数cm角の基板に組み込めることになり、使用範囲は格段に広がる。
さて何をつくろうかな。

このエントリーをはてなブックマークに追加

Posted under: PIC16F1827


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.