XYZの角速度を取得できるジャイロセンサーが秋月電子さんから販売されていたので試してみました。I2CとSPI接続に対応しています。電源は3.3Vで5Vに対応していない点が要注意です。
使用機器は下記のとおり。他、パソコンや電源、PICKIT2も当然ながら必要です。
ジャイロセンサー
STマイクロL3GD20使用 3軸ジャイロセンサーモジュール
AE-L3GD20
シリアル変換 USB-USART変換基盤_ZT-FTDI03
マイコンボード(PIC16F1947搭載)
ZEATEC co.,ltd. ZT-PIC16F194701(3.3V仕様)
接続は下記のとおりです。
コードは下記のとおりで、l3gd20_init()をスタートアップで処理し、定期的にl3gd20_getval()を実行する事で値が更新されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
long l3gd20_x = 0;//X軸値 long l3gd20_y = 0; //Y軸値 long l3gd20_z = 0; //Z軸値 //アドレス設定 int l3gd20_addr_r = 0b11010101; //0xd5 int l3gd20_addr_w = 0b11010100; //0xd4 void l3gd20_write(int reg, int val){ i2c_start(); i2c_write(l3gd20_addr_w); //書込みアドレス送信 i2c_write(reg); // i2c_write(val); // i2c_stop(); } int l3gd20_read(int reg){ int ans = 0; i2c_start(); i2c_write(l3gd20_addr_w); //書き込みアドレス送信 i2c_write(reg); // i2c_start(); i2c_write(l3gd20_addr_r); //読み込みアドレス送信 ans = i2c_read(0); i2c_stop(); return ans; } int l3gd20_init(){ //XYZのセンサーを有効にしてパワーダウンをOFFに設定 l3gd20_write(0x20, 0b00001111); //REG1 //l3gd20_write(0x21, 0b00001000);//REG2 //l3gd20_write(0x22, 0b00001000);//REG3 //l3gd20_write(0x23, 0b10110000);//REG4 //l3gd20_write(0x24, 0b00000000);//REG5 } void l3gd20_getval(){ l3gd20_x = l3gd20_read(0x29) << 8; l3gd20_x = l3gd20_x + l3gd20_read(0x28); l3gd20_y = l3gd20_read(0x2b) << 8; l3gd20_y = l3gd20_y + l3gd20_read(0x2a); l3gd20_z = l3gd20_read(0x2d) << 8; l3gd20_z = l3gd20_z + l3gd20_read(0x2c); } |
プロジェクトファイルも含めたサンプル 16f1947_l3gd20.zip
開発環境:MPLAB_IDE_8_92 + CCS-C PCMコンパイラVer.4.132
©ZEATEC co.,ltd.