MPU6050 FreeIMU library
Dependents: FreeIMU FreeIMU_external_magnetometer
Fork of MPU6050_tmp by
Async MPU6050 library
My port of the MPU6050 library samples the chip at 500Hz using Timer. Async I2C is achieved using a custom I2C library, which supports I2C calls from interrupts. Link given below:
Import libraryMODI2C
Improvements to Olieman's MODI2C library. Supports calls from IRQ.
Difference between this port and the Arduino MPU6050 library
The getMotion6 function only returns a copy of the last obtained readings, which is sampled at a frequency of 500Hz (adjustable). Hence it can be called at any frequency without taxing the I2C.
Diff: I2Cdev.cpp
- Revision:
- 7:95e74f827c08
- Parent:
- 1:2daa36bfe56b
- Child:
- 9:d879deb55ae1
--- a/I2Cdev.cpp Sat Jun 22 11:23:45 2013 +0000 +++ b/I2Cdev.cpp Sat Nov 02 17:23:43 2013 +0000 @@ -5,7 +5,7 @@ #include "I2Cdev.h" -#define useDebugSerial +//#define useDebugSerial I2Cdev::I2Cdev(): debugSerial(USBTX, USBRX), i2c(I2C_SDA,I2C_SCL) { @@ -17,6 +17,11 @@ } +I2Cdev::I2Cdev(I2C i2c_): debugSerial(USBTX, USBRX), i2c(i2c_) +{ + +} + /** Read a single bit from an 8-bit device register. * @param devAddr I2C slave device address * @param regAddr Register regAddr to read from @@ -133,7 +138,7 @@ command[0] = regAddr; char *redData = (char*)malloc(length); i2c.write(devAddr<<1, command, 1, true); - i2c.read(devAddr<<1, redData, length); + i2c.read((devAddr<<1)+1, redData, length); for(int i =0; i < length; i++) { data[i] = redData[i]; }