Reply
Posts: 164
Registered: ‎09-17-2012

Si1146 HRM readings

Hi,

I have been porting HRM Biometric-EXP demo for other chip (EFM32WG332) and stumbled on some problems. I cut some code for LCD and other unnecessary things for mu MCU, recompile on another version of gcc (with static lib for Si1146) and now I have something like this:

 

HRM_STATE_IDLE

HRM_STATE_NOSIGNAL

HRM_STATE_NOSIGNAL

HRM_STATE_ACQUIRING

HRM_STATE_ACQUIRING

HRM_STATE_ACTIVE               <--- here I get correct HR values, 4-6 times in the row

HRM_STATE_INVALID              <--- after timeout the driver reinitialize and goes in the loop 

...

HRM_STATE_IDLE

HRM_STATE_NOSIGNAL

HRM_STATE_NOSIGNAL

HRM_STATE_ACQUIRING

HRM_STATE_ACQUIRING

HRM_STATE_ACTIVE               <--- here I get correct HR values, 4-6 times in the row

HRM_STATE_INVALID              <--- after timeout the driver reinitialize and goes in the loop 

...

 

Any clues? I have checked it on demo board and my board. Every time I get the same results. 

 

 

Posts: 75
Registered: ‎02-22-2016

Re: Si1146 HRM readings

Hi,

Did you place your finger on the sensor when the HRM state changes?
How often did you call si114xhrm_Process() function?

It looks to me that either your finger is not put in the proper position or the samples are not processed fast enough.

Can you check if your application code follows the sequence below?
- Once a second, call si114xhrm_DetectSkinContact(...) to detect finger
- If skin contact is detected, call si114xhrm_Run(...) to start the algorithm
- Then call si114xhrm_Process(...) to calculate the results (default is 25Hz)

Regards,
Tony

Highlighted
Posts: 164
Registered: ‎09-17-2012

Re: Si1146 HRM readings

Hi,

Samples are processed fast enough. I suspect that there is something wrong with my makefile, linker or IDE setup. Just for testing, I have two Eclipse apps running - one from Simplicity Studio and one with my own eclipse setup. I work on the same source files, header files and lib files. I even switched gcc compiler on my Eclipse setup to the one from Simplicity package. The example code is the biometric demo for STK3800 (not changed). In Simplicity Eclipse, when I compile and debug everything is working fine. In my own Eclipse setup, the I get 6 HRM_STATE_ACTIVE, then HRM_STATE_INVALID couple of times and then there is a timeout, sensor reinit, HRM_STATE_ACQUIRING, HRM_STATE_ACTIVE, then HRM_STATE_INVALID couple of times and then there is a timeout ...

And it goes in loop. As I mentioned, source files are the same. I even tried to have the same system_efm32wg.c and startup_efm32wg.S - still, the problem remains.

Makefiles are different, though.

 

Makefile -  http://pastebin.com/xcUDk24v

Linker - http://pastebin.com/ZeMX6jbq

GCC - 4.8_2013q4

SDK - 4.2.0

 

Any ideas?