Weird problem with Intel Edison and IMU MPU-9150

gigi

New member
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:
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;  
    }  
}
Console Screenshot:
ObSZO.png
 
Back
Top