littleshrimp 发表于 2018-7-28 20:00

LSM6DSL翻腕亮屏检测代码

LSM6DSL翻腕亮屏检测代码,使用NUCLEO-L4R5ZI板子测试配置方法参考贴子https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=541212&highlight=lsm6dsm和数据手册的2.2
传感器驱动使用STMems_Standard_C_drivershttps://github.com/STMicroelectronics/STMems_Standard_C_drivers官方代码中有一种错误会导致无法设置检测X轴以外的其它轴原因在于下边函数中只读取了LSM6DSL_A_WRIST_TILT_MASK 而没有写回,需要自行修改int32_t lsm6dsl_tilt_src_set(lsm6dsl_ctx_t *ctx,lsm6dsl_a_wrist_tilt_mask_t *val)
主要配置代码void wrist_tilt(void)
{
lsm6dsl_all_sources_t lsm6dsl_all_sources;
/*
* Initialize mems driver interface
*/
dev_ctx.write_reg = platform_write;
dev_ctx.read_reg = platform_read;
dev_ctx.handle = &hi2c1;

/*
* Check device ID
*/
whoamI = 0;
lsm6dsl_device_id_get(&dev_ctx, &whoamI);
if ( whoamI != LSM6DSL_ID )
while(1); /*manage here device not found */
/*
* Restore default configuration
*/
lsm6dsl_reset_set(&dev_ctx, PROPERTY_ENABLE);
do {
lsm6dsl_reset_get(&dev_ctx, &rst);
} while (rst);
/*
* Enable Block Data Update
*/
lsm6dsl_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
//1)打开加速计,
lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_26Hz);
/*
* Set full scale
*/
lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);

//2)始能AWT,
uint8_t wrist = PROPERTY_ENABLE;
lsm6dsl_wrist_tilt_sens_set(&dev_ctx, wrist);
///3)配置AWT中断引脚,
lsm6dsl_int2_route_t lsm6dsl_int2_route;
lsm6dsl_int2_route.int2_wrist_tilt = PROPERTY_ENABLE;
lsm6dsl_pin_int2_route_set(&dev_ctx,lsm6dsl_int2_route);
///4)配置检测轴向,
lsm6dsl_a_wrist_tilt_mask_t lsm6dsl_a_wrist_tilt_mask;
lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zneg = PROPERTY_ENABLE;
lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zpos = PROPERTY_ENABLE;
lsm6dsl_tilt_src_set(&dev_ctx,&lsm6dsl_a_wrist_tilt_mask);
///5)配置阈值,
uint8_t threshold = 0x20;//1 LSB = 15.625 mg. Default value: 20h (500 mg).
lsm6dsl_tilt_threshold_set(&dev_ctx,&threshold);
///6)配置持续时间
uint8_t latency = 0x0f;//1 LSB = 40 ms. Default value: 0Fh (600 ms).
lsm6dsl_tilt_latency_set(&dev_ctx,&latency);

while(1)
{
if(int2_flag == 1)
{
int2_flag = 0;
lsm6dsl_all_sources_get(&dev_ctx,&lsm6dsl_all_sources);

if(lsm6dsl_all_sources.reg.wrist_tilt_ia.wrist_tilt_ia_zneg == 1 || lsm6dsl_all_sources.reg.wrist_tilt_ia.wrist_tilt_ia_zpos == 1)
{
snprintf(data_out, MAX_BUF_SIZE, "wrist tilt ia.\r\n");
tx_com((uint8_t*)data_out, strlen(data_out));
}
}

}
}

工程文件:**** Hidden Message *****

381503442 发表于 2018-8-15 15:17

抬手亮屏和翻腕亮屏算法上是怎么实现的呢,谁知道

littleshrimp 发表于 2018-8-15 16:06

381503442 发表于 2018-8-15 15:17
抬手亮屏和翻腕亮屏算法上是怎么实现的呢,谁知道

这个是由传感器内部实现的

ialvins 发表于 2018-8-22 14:52

正好需要用到~謝謝樓主

ialvins 发表于 2018-8-27 09:01

littleshrimp 发表于 2018-8-15 16:06
这个是由传感器内部实现的

請問我照著您的代碼去設定,但是無法讓Sensor產生中斷,這其中是否是检测轴向要依照Layout的方向去設定?

littleshrimp 发表于 2018-8-27 09:25

ialvins 发表于 2018-8-27 09:01
請問我照著您的代碼去設定,但是無法讓Sensor產生中斷,這其中是否是检测轴向要依照Layout的方向去設定?

其它方向有中断吗

ialvins 发表于 2018-8-27 10:22

littleshrimp 发表于 2018-8-27 09:25
其它方向有中断吗

試了三軸全開,怎麼甩都沒有中斷....

目前是接著燒錄器 甩動幅度不太敢太大力,

想請問版大那邊是否有測試的手法? 或者測試影片? 謝謝您

littleshrimp 发表于 2018-8-27 11:00

应该是沿着某个不垂直地面的轴转动 不是甩

ialvins 发表于 2018-8-28 11:19

好的謝謝您我來試試看!

zfw152666 发表于 2018-10-29 16:49

很好的代码,谢谢分享

忽如一夜 发表于 2018-10-30 16:16

谢谢分享

ruson525 发表于 2018-11-22 14:34

谢谢分享

ruson525 发表于 2018-11-22 14:40

谢谢分享

houlai 发表于 2018-11-25 14:26

谢谢,学习

李百仪 发表于 2018-11-28 11:20

下载试试

wweiliang 发表于 2018-12-7 09:45

我也想研究下!!!

sinosound 发表于 2019-4-23 13:01

学习了

英雄末路 发表于 2020-4-15 09:10

<p>有人遇到过设置AWT时候,只有使能可以写,其他几个写了没用的状态吗?</p>

<p>那个set MASK的BUG解决了,但是依然只能读,尝试过写 src, latency, threshold,写都没有报错,但读的时候发现还是原来的值,最终导致只有X轴有(从MASK上读出来只有X有一个方向设置,哪怕我尝试6个方向都设置),而func_src2 反馈的wrist_tilt_ia 位有设置,按理说从WRIST_TILT_IA能读出来是哪个方向的,但实际这个寄存器读出来都是0.</p>

<p>感觉是功能可以使能,但不能配置,只有默认X轴。</p>

littleshrimp 发表于 2020-4-15 10:53

英雄末路 发表于 2020-4-15 09:10
有人遇到过设置AWT时候,只有使能可以写,其他几个写了没用的状态吗?

那个set MASK的BUG解决了,但是依 ...

<p>你是自己写的代码还是使用的例程?</p>

英雄末路 发表于 2020-5-27 13:44

littleshrimp 发表于 2020-4-15 10:53
你是自己写的代码还是使用的例程?

<p>reg访问是用的示例代码,其他的都是自己写的</p>
页: [1] 2
查看完整版本: LSM6DSL翻腕亮屏检测代码