So I am trying to get measurements from the MPU-9150 sensor from Invensense using the Intel Edison. I am able to communicate with the sensor and the values seem sensible.
But after a specific number of cycles, I measure only a zero from all data registers. This error is repeatable: When I try to read the Accelerometer and Gyro data(6 data registers), the data stream stops exactly at 84 cycles. If I try to read jus the Accelerometer values, it stops at double the no. of cycles i.e. 168. I sense some data is overflowing, but couldn't figure out yet.
Looking for your reply and Thanks!
Cheers,
Frederic
Code:
MPU9150.c
Console Screenshot:
But after a specific number of cycles, I measure only a zero from all data registers. This error is repeatable: When I try to read the Accelerometer and Gyro data(6 data registers), the data stream stops exactly at 84 cycles. If I try to read jus the Accelerometer values, it stops at double the no. of cycles i.e. 168. I sense some data is overflowing, but couldn't figure out yet.
Looking for your reply and Thanks!
Cheers,
Frederic
Code:
Code:
MPU9150.h
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
//Power Management Registers
#define PWR_MGMT_1 0x6B
#define PWR_MGMT_2 0x6C
//Device i.d. Register
#define WHO_AM_I 0x75
/*
R1 - 0x69
R2 - 0x68
*/
#define MPU_ADDR 0x68
//Reset the Registers and Power
#define PWR_RESET 0x80
#define DEVICE_ON 0x00
//Accelerometer Scale
#define ACCEL_2G 0x00
#define ACCEL_4G 0x08
#define ACCEL_8G 0x10
#define ACCEL_16G 0x18
//Gyroscope Scale
#define GYRO_250 0x00
#define GYRO_500 0x08
#define GYRO_1000 0x10
#define GYRO_2000 0x18
#define SAMPLE_RATE 0x00
#define DLPF_CFG 0x01
MPU9150.c
Code:
{
mraa_i2c_context mpu9150_i2c;
mpu9150_i2c = mraa_i2c_init(1);
//Set MPU Device Address
mraa_i2c_address(mpu9150_i2c, MPU_ADDR);
//Write Command and Data
mraa_i2c_write_byte_data(mpu9150_i2c, value, address);
}
void MPU9150_I2C_Read(uint8_t address, uint8_t *value)
{
mraa_i2c_context mpu9150_i2c;
mpu9150_i2c = mraa_i2c_init(1);
//Set ALS Device Address
mraa_i2c_address(mpu9150_i2c, MPU_ADDR);
//Write Command and Read Data
*value = mraa_i2c_read_byte_data(mpu9150_i2c, address);
}
int16_t MPU9150_Get_Measurement(uint8_t addrL, uint8_t addrH)
{
//Read & Store the Lower Byte
MPU9150_I2C_Read(addrL, &Measurement_L);
//Read & Store the Higher Byte
MPU9150_I2C_Read(addrH, &Measurement_H);
return (int16_t)((Measurement_H << 8) + Measurement_L);
}
//Signal Handler
void sig_handler(int signum)
{
if(signum == SIGINT)
{
isrunning = 0;
}
}
