[运动传感器] LSM6DSL翻腕亮屏检测代码

littleshrimp   2018-7-28 20:00 楼主
LSM6DSL翻腕亮屏检测代码,使用NUCLEO-L4R5ZI板子测试
配置方法参考贴子
和数据手册的2.2
image002.jpg
传感器驱动使用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)
image001.jpg
主要配置代码
  1. void wrist_tilt(void)
  2. {
  3. lsm6dsl_all_sources_t lsm6dsl_all_sources;
  4. /*
  5. * Initialize mems driver interface
  6. */
  7. dev_ctx.write_reg = platform_write;
  8. dev_ctx.read_reg = platform_read;
  9. dev_ctx.handle = &hi2c1;

  10. /*
  11. * Check device ID
  12. */
  13. whoamI = 0;
  14. lsm6dsl_device_id_get(&dev_ctx, &whoamI);
  15. if ( whoamI != LSM6DSL_ID )
  16. while(1); /*manage here device not found */
  17. /*
  18. * Restore default configuration
  19. */
  20. lsm6dsl_reset_set(&dev_ctx, PROPERTY_ENABLE);
  21. do {
  22. lsm6dsl_reset_get(&dev_ctx, &rst);
  23. } while (rst);
  24. /*
  25. * Enable Block Data Update
  26. */
  27. lsm6dsl_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
  28. //1)打开加速计,
  29. lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_26Hz);
  30. /*
  31. * Set full scale
  32. */
  33. lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);

  34. //2)始能AWT,
  35. uint8_t wrist = PROPERTY_ENABLE;
  36. lsm6dsl_wrist_tilt_sens_set(&dev_ctx, wrist);
  37. ///3)配置AWT中断引脚,
  38. lsm6dsl_int2_route_t lsm6dsl_int2_route;
  39. lsm6dsl_int2_route.int2_wrist_tilt = PROPERTY_ENABLE;
  40. lsm6dsl_pin_int2_route_set(&dev_ctx,lsm6dsl_int2_route);
  41. ///4)配置检测轴向,
  42. lsm6dsl_a_wrist_tilt_mask_t lsm6dsl_a_wrist_tilt_mask;
  43. lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zneg = PROPERTY_ENABLE;
  44. lsm6dsl_a_wrist_tilt_mask.wrist_tilt_mask_zpos = PROPERTY_ENABLE;
  45. lsm6dsl_tilt_src_set(&dev_ctx,&lsm6dsl_a_wrist_tilt_mask);
  46. ///5)配置阈值,
  47. uint8_t threshold = 0x20;//1 LSB = 15.625 mg. Default value: 20h (500 mg).
  48. lsm6dsl_tilt_threshold_set(&dev_ctx,&threshold);
  49. ///6)配置持续时间
  50. uint8_t latency = 0x0f;//1 LSB = 40 ms. Default value: 0Fh (600 ms).
  51. lsm6dsl_tilt_latency_set(&dev_ctx,&latency);

  52. while(1)
  53. {
  54. if(int2_flag == 1)
  55. {
  56. int2_flag = 0;
  57. lsm6dsl_all_sources_get(&dev_ctx,&lsm6dsl_all_sources);

  58. 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)
  59. {
  60. snprintf(data_out, MAX_BUF_SIZE, "wrist tilt ia.\r\n");
  61. tx_com((uint8_t*)data_out, strlen(data_out));
  62. }
  63. }

  64. }
  65. }


工程文件:
游客,如果您要查看本帖隐藏内容请回复

虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复评论 (24)

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

这个是由传感器内部实现的
点赞  2018-8-15 16:06
正好需要用到~謝謝樓主
点赞  2018-8-22 14:52
引用: littleshrimp 发表于 2018-8-15 16:06
这个是由传感器内部实现的

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

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

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

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

想請問版大那邊是否有測試的手法? 或者測試影片? 謝謝您
点赞  2018-8-27 10:22
应该是沿着某个不垂直地面的轴转动 不是甩
点赞  2018-8-27 11:00
好的謝謝您我來試試看!
点赞  2018-8-28 11:19
很好的代码,谢谢分享
点赞  2018-10-29 16:49
谢谢分享
点赞  2018-10-30 16:16
谢谢分享
点赞  2018-11-22 14:34
谢谢分享
点赞  2018-11-22 14:40
谢谢,学习
点赞  2018-11-25 14:26
下载试试
intersil Techwell应用工程师
点赞  2018-11-28 11:20
我也想研究下!!!
点赞  2018-12-7 09:45
学习了
点赞  2019-4-23 13:01

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

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

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

点赞  2020-4-15 09:10
引用: 英雄末路 发表于 2020-4-15 09:10 有人遇到过设置AWT时候,只有使能可以写,其他几个写了没用的状态吗? 那个set MASK的BUG解决了,但是依 ...

你是自己写的代码还是使用的例程?

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2020-4-15 10:53
引用: littleshrimp 发表于 2020-4-15 10:53 你是自己写的代码还是使用的例程?

reg访问是用的示例代码,其他的都是自己写的

点赞  2020-5-27 13:44
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复