急に作りたくなったものがあるので、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);
L3GD20 gyro(p5, p6, p7, p8);
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;
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