2025-08-22 5:10 PM
Hello,
I am working on interfacing with a LIS2DW12TR sensor over I2C. I currently am able to read/write registers, and am working on processing the data coming out of the fifo. I currently have the following:
int read_LIS2DW12TR_buffer(int x[32], int y[32], int z[32]) {
static const struct i2c_dt_spec dev_i2c = I2C_DT_SPEC_GET(I2C_NODE_LIS2DW12TR);
uint8_t reg = LIS2DW12_OUT_X_L; // Start reading from the X-axis low byte
uint8_t data[32 * 3]; // 32 samples, each with 3 axes (X, Y, Z)
int ret = i2c_write_read_dt(&dev_i2c, ®, sizeof(reg), data, sizeof(data));
if (ret < 0) {
LOG_ERR("Failed to read from LIS2DW12TR sensor: %d", ret);
return ret;
}
// Process the data into x, y, z arrays
for (int i = 0; i < 32; i++) {
x[i] = (data[i * 3] | (data[i * 3 + 1] << 8)); // X-axis
y[i] = (data[i * 3 + 2] | (data[i * 3 + 3] << 8)); // Y-axis
z[i] = (data[i * 3 + 4] | (data[i * 3 + 5] << 8)); // Z-axis
}
// print first values for debugging
// LOG_INF("LIS2DW12TR buffer read: X[0]=%d, Y[0]=%d, Z[0]=%d", x[0], y[0], z[0]);
return 0; // Return 0 on success
}
Along with the following registers set:
config.ctrl1.ODR = 0b0100; // 50Hz
config.ctrl1.MODE = 0b00; // low performance
config.ctrl1.LP_MODE = 0b01; // low power mode 2
config.ctrl2.BOOT = 1; // reboot memory content
config.ctrl2.CS_PU_DIS = 1; // disable internal pull-ups on SDO/SA0
config.ctrl2.BDU = 1; // block data update
config.ctrl6.BW_FILT = 0b10; // ODR/2
config.ctrl6.FS = 0b00; // +/- 2g
config.ctrl6.FDS = 0; // filter data selection
config.ctrl6.LOW_NOISE = 1; // low-noise mode enable
config.fifo_ctrl.F_MODE = 0b110;
config.fifo_ctrl.FTH = 0x1f;
note: some of the comments may be wrong, it's certainly been a long day of tweaking :)
This has resulted in the following data output: (this is a small snapshot)
I will also post part of the .csv with raw data
What I am wondering is:
1. How do I interpret the data? What are the units here?
2. Are the artifacts I am seeing here just noise or am I processing the data wrong? To me it looks like the solid line is the actual data (the sensor was not moving as I did this) but I am not 100% sure of this.
Thank you all in advance for the help!
JC