Hi Vinod,
You could refer BMM150 official sensor API and example code to get sensor data, by call bmm150_read_mag_data() to get compensated x, y, z mag data. https://github.com/boschsensortec/BMM150-Sensor-API/tree/master/examples/generic
In BMM150 sensor API, z_rep was set according different preset mode.
/*! * @brief This API is used to set the preset mode of the sensor. */ int8_t bmm150_set_presetmode(struct bmm150_settings *settings, struct bmm150_dev *dev) { int8_t rslt; uint8_t preset_mode;
/* Check for null pointer in the device structure */ rslt = null_ptr_check(dev);
/* Proceed if null check is fine */ if (rslt == BMM150_OK) { preset_mode = settings->preset_mode;
switch (preset_mode) { case BMM150_PRESETMODE_LOWPOWER:
/* Set the data rate x,y,z repetition * for Low Power mode */ settings->data_rate = BMM150_DATA_RATE_10HZ; settings->xy_rep = BMM150_REPXY_LOWPOWER; settings->z_rep = BMM150_REPZ_LOWPOWER; rslt = set_odr_xyz_rep(settings, dev); break; case BMM150_PRESETMODE_REGULAR:
/* Set the data rate x,y,z repetition * for Regular mode */ settings->data_rate = BMM150_DATA_RATE_10HZ; settings->xy_rep = BMM150_REPXY_REGULAR; settings->z_rep = BMM150_REPZ_REGULAR; rslt = set_odr_xyz_rep(settings, dev); break; case BMM150_PRESETMODE_HIGHACCURACY:
/* Set the data rate x,y,z repetition * for High Accuracy mode * */ settings->data_rate = BMM150_DATA_RATE_20HZ; settings->xy_rep = BMM150_REPXY_HIGHACCURACY; settings->z_rep = BMM150_REPZ_HIGHACCURACY; rslt = set_odr_xyz_rep(settings, dev); break; case BMM150_PRESETMODE_ENHANCED:
/* Set the data rate x,y,z repetition * for Enhanced Accuracy mode */ settings->data_rate = BMM150_DATA_RATE_10HZ; settings->xy_rep = BMM150_REPXY_ENHANCED; settings->z_rep = BMM150_REPZ_ENHANCED; rslt = set_odr_xyz_rep(settings, dev); break; default: rslt = BMM150_E_INVALID_CONFIG; break; } }
return rslt; }
... View more