Home › Forums › Forums › Technical Support for BerryIMU › G measurement – uncorrect values › Reply To: G measurement – uncorrect values
December 21, 2016 at 8:30 am #5882
Sten-Helge
Participant
According to the datasheet the settings for CTRL_REG2_XM register should be as follows for the different scales;
....
// Enable accelerometer.
writeAccReg(CTRL_REG1_XM, 0b01100111); // z,y,x axis enabled, continuos update, 100Hz data rate
//writeAccReg(CTRL_REG2_XM, 0b00000000); //+/- 2G full scale
//writeAccReg(CTRL_REG2_XM, 0b00001000); //+/- 4G full scale
//writeAccReg(CTRL_REG2_XM, 0b00010000); // +/- 6G full scale
//writeAccReg(CTRL_REG2_XM, 0b00011000); // +/- 8G full scale
writeAccReg(CTRL_REG2_XM, 0b00100000); // +/- 16G full scale
....
....
//read ACC values
readACC(accRaw);
// +/- 2G full scale
//printf("X = %7.2f G\t" , ((accRaw[0] * 0.061)/1000));
//printf(" Y = %7.2f G\t" , ((accRaw[1] * 0.061)/1000));
//printf(" Z = %7.2f G\n" , ((accRaw[2] * 0.061)/1000));
// +/- 4G full scale
//printf("X = %7.2f G\t" , ((accRaw[0] * 0.122)/1000));
//printf(" Y = %7.2f G\t" , ((accRaw[1] * 0.122)/1000));
//printf(" Z = %7.2f G\n" , ((accRaw[2] * 0.122)/1000));
// +/- 6G full scale
//printf("X = %7.2f G\t" , ((accRaw[0] * 0.183)/1000));
//printf(" Y = %7.2f G\t" , ((accRaw[1] * 0.183)/1000));
//printf(" Z = %7.2f G\n" , ((accRaw[2] * 0.183)/1000));
// +/- 8G full scale
//printf("X = %7.3f G\t" , ((accRaw[0] * 0.244)/1000));
//printf(" Y = %7.3f G\t" , ((accRaw[1] * 0.244)/1000));
//printf(" Z = %7.3f G\n" , ((accRaw[2] * 0.244)/1000));
// +/- 12G full scale
printf("X = %7.2f G\t" , ((accRaw[0] * 0.732)/1000));
printf(" Y = %7.2f G\t" , ((accRaw[1] * 0.732)/1000));
printf(" Z = %7.2f G\n" , ((accRaw[2] * 0.732)/1000));
//printf("Xraw = %d \t" , accRaw[0]);
//printf(" Yraw = %d \t" , accRaw[1]);
//printf(" Zraw = %d \n" , accRaw[2]);
....
Please advice if not correct.
Thanks