急に作りたくなったものがあるので、L3GD20をmbedから使ってみる。
I2Cはちょっと面倒なのでSPIで通信する。
図にするほどのものでもない図。
akizukidenshi.com
ライブラリがあるいが面白くないので自分で
のチップデータシートによるとSPIの波形は
のようなタイミングで
SPI - SPIマスター | Mbed
によるとMode3
bitは8で
最初はWho am Iアドレスを読む。
#include "mbed.h" #include "L3GD20.h" DigitalOut myled(LED1); Serial pc(USBTX, USBRX); //SPI spi(p5, p6, p7); // mosi, miso, sclk L3GD20 gyro(p5, p6, p7, p8/*, PinName interrupt1=NC, PinName interrupt2=NC*/); int main() { pc.baud(115200); pc.printf("0x%02X\r\n", gyro.read_byte(0x0F)); gyro.write_byte(0x20, 0x0F); while(1) { myled = 1; wait(0.5); myled = 0; wait(0.5); pc.printf("0x%02X\r\n", gyro.read_byte(0x0F)); } }
#pragma once #include "mbed.h" class L3GD20 { SPI _spi; // mosi, miso, sclk DigitalOut _cs; public: L3GD20(PinName mosi, PinName miso, PinName sclk, PinName cs):_spi(mosi, miso, sclk),_cs(cs) { _spi.format(8,3); _spi.frequency(10000000); } uint8_t write_byte(uint8_t reg, uint8_t val) { _cs = 0; _spi.write(reg); _spi.write(val); _cs = 1; return 0; } uint8_t read_byte(uint8_t reg) { _cs = 0; _spi.write(reg|0x80); uint8_t ret = _spi.write(0x00); _cs = 1; return ret; } };
これで0xD4が送られてくればOK