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()を実行する事で値が更新されます。
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.