cancel
Showing results for 
Search instead for 
Did you mean: 

LSM6DSO Pedometer

MasCreyt21
Associate II

Hi BenG142, I'm trying to develop a pedometer application using the LSM6DSOX sensor, but I haven't been successful. Could you share your project files with me? I'd like to know which registers you used.

 

1 ACCEPTED SOLUTION

Accepted Solutions
BenG142
Associate II

Hi @MasCreyt21 ,

Without more information on where you've been unsuccessful, I will try to explain all steps.

So, assuming you've had positive communications with the IC (read/write registers, etc):

 

1. Start by setting up the Performance/ Power Mode you want:

case XL_Power_Mode_ODR::Mode_High_Performance_6_66_kHz: WriteRegisterBitRange(LSM6DSOX_CTRL1_XL, 7, 4, 0b1010 ); WriteRegisterBit ( LSM6DSOX_CTRL5_C, 7, false ); //XL_ULP_Enable WriteRegisterBit ( LSM6DSOX_CTRL6_C, 4, false ); //XL_HM_Mode break;

 

2. Set up FIFO:

void LSM6DSOX_::setFifo_Steps(){ WriteRegister ( LSM6DSOX_FUNC_CFG_ACCESS, 0x80 ); //Open Embedded Functions WriteRegisterBit( LSM6DSOX_EMB_FUNC_EN_A, 3, true ); //Enable Pedometer sensor in Adv Func WriteRegister ( LSM6DSOX_EMB_FUNC_EN_B, 0x10); //Enable false positive rejection WriteRegisterBit( LSM6DSOX_EMB_FUNC_FIFO_CFG, 6, true ); //Enable Step Counter Batching WriteRegister ( LSM6DSOX_FUNC_CFG_ACCESS, 0x00); //Close Embedded Functions WriteRegisterBitRange( LSM6DSOX_FIFO_CTRL4, 2, 0, 0b001 ); //set FIFO Mode }

 

3. Read FIFO Registers:

uint8_t reg1 = LSM6DSOX.ReadRegister(LSM6DSOX_FIFO_STATUS1); Serial.print("FIFO Status 1: "); Serial.println( reg1 ); uint8_t reg2 = LSM6DSOX.ReadRegister(LSM6DSOX_FIFO_STATUS2); Serial.print("FIFO Status 2: "); Serial.println( reg2 );

 

4.  Clear FIFO at the end:

void LSM6DSOX_::setFifo_Clear(){ WriteRegisterBitRange( LSM6DSOX_FIFO_CTRL4, 2, 0, 0b000); }

 

 

Sadly not able to share the project, but hopefully this helps.

Cheers,

Ben


Screenshot from the closed thread mentioned by @Andrew Neil (Credit to @Federica Bossi) :

BenG142_0-1723479963735.png

 

View solution in original post

3 REPLIES 3

@MasCreyt21 wrote:

Hi BenG142


@BenG142 's thread was closed over a year ago:

https://community.st.com/t5/mems-sensors/lsm6dso-fifo-pedometer/td-p/61470

 


@MasCreyt21 wrote:

 I'm trying to develop a pedometer application using the LSM6DSOX sensor, but I haven't been successful.


So tell us what you did, and why you consider that "unsuccessful"

Did you follow the steps give by Ben and @Federica Bossi in the previous thread?

Please see the Posting Tips:

https://community.st.com/t5/community-guidelines/how-to-write-your-question-to-maximize-your-chances-to-find-a/ta-p/575228

 

BenG142
Associate II

Hi @MasCreyt21 ,

Without more information on where you've been unsuccessful, I will try to explain all steps.

So, assuming you've had positive communications with the IC (read/write registers, etc):

 

1. Start by setting up the Performance/ Power Mode you want:

case XL_Power_Mode_ODR::Mode_High_Performance_6_66_kHz: WriteRegisterBitRange(LSM6DSOX_CTRL1_XL, 7, 4, 0b1010 ); WriteRegisterBit ( LSM6DSOX_CTRL5_C, 7, false ); //XL_ULP_Enable WriteRegisterBit ( LSM6DSOX_CTRL6_C, 4, false ); //XL_HM_Mode break;

 

2. Set up FIFO:

void LSM6DSOX_::setFifo_Steps(){ WriteRegister ( LSM6DSOX_FUNC_CFG_ACCESS, 0x80 ); //Open Embedded Functions WriteRegisterBit( LSM6DSOX_EMB_FUNC_EN_A, 3, true ); //Enable Pedometer sensor in Adv Func WriteRegister ( LSM6DSOX_EMB_FUNC_EN_B, 0x10); //Enable false positive rejection WriteRegisterBit( LSM6DSOX_EMB_FUNC_FIFO_CFG, 6, true ); //Enable Step Counter Batching WriteRegister ( LSM6DSOX_FUNC_CFG_ACCESS, 0x00); //Close Embedded Functions WriteRegisterBitRange( LSM6DSOX_FIFO_CTRL4, 2, 0, 0b001 ); //set FIFO Mode }

 

3. Read FIFO Registers:

uint8_t reg1 = LSM6DSOX.ReadRegister(LSM6DSOX_FIFO_STATUS1); Serial.print("FIFO Status 1: "); Serial.println( reg1 ); uint8_t reg2 = LSM6DSOX.ReadRegister(LSM6DSOX_FIFO_STATUS2); Serial.print("FIFO Status 2: "); Serial.println( reg2 );

 

4.  Clear FIFO at the end:

void LSM6DSOX_::setFifo_Clear(){ WriteRegisterBitRange( LSM6DSOX_FIFO_CTRL4, 2, 0, 0b000); }

 

 

Sadly not able to share the project, but hopefully this helps.

Cheers,

Ben


Screenshot from the closed thread mentioned by @Andrew Neil (Credit to @Federica Bossi) :

BenG142_0-1723479963735.png

 

@BenG142 
Thank you for your help, BenG142. Thanks to you, I solved my problem, and the LSM6DSOX is working as I wanted.