在线时间169 小时
UID3338155
ROHM金币80
注册时间2018-5-4
该用户从未签到
高级会员
- 最后登录
- 2024-3-25
|
本帖最后由 andeyqi 于 2019-7-16 20:17 编辑
战舰板介绍资料链接如下:https://rohm.eefocus.com/activity/rohm2019/sensor-board
BM1383AGLV是压电电阻式气压传感器。在IC内部进行MEMS的温度补偿处理,可轻松获取气压信息。
传感器模块原理图如下及datasheet中IIC协议描述如下:
7位丛机地址如下:1. Slave address : “1011101”
传感器设定流程: 依次往0x12,0x13寄存器写入1,中间需要间隔2ms.
- #include <rtthread.h>
- #include <rtdevice.h>
- #include <board.h>
- #include <stdio.h>
- #include "finsh.h"
- #include "i2c_utilise.h"
- #include "bm1383.h"
- void bm1383_init(void)
- {
- struct rt_i2c_bus_device* bus = NULL;
- rt_uint8_t deviceid = 0,reg = 0;
- rt_uint8_t buff[2] = {0};
-
- bus = rt_i2c_bus_device_find("i2c1");
- if(!bus)
- {
- rt_kprintf("can't find i2c device\n");
- return ;
- }
- write_cmd(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_ID);
- read_reg(bus,BM1383AGLV_DEVICE_ADDRESS,1,&deviceid);
- if(deviceid != BM1383AGLV_ID_VAL)
- {
- rt_kprintf("can't find device\n");
- return;
- }
- rt_kprintf("deviceid is 0x%x\n",deviceid);
- //1. Power supply start-up sequence
- write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_POWER_DOWN, BM1383AGLV_POWER_DOWN_VAL);
- rt_thread_mdelay(2);
- write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_RESET, BM1383AGLV_RESET_VAL);
- //2 set Measurement sequence: Continuous Mode
- write_reg(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_MODE_CONTROL, BM1383AGLV_MODE_CONTROL_VAL);
- rt_thread_mdelay(WAIT_TMT_MAX);
- }
- void bm1383_get_rawval(rt_uint8_t* val)
- {
- struct rt_i2c_bus_device* bus = NULL;
- rt_uint8_t status = 0;
- bus = rt_i2c_bus_device_find("i2c1");
- if(!bus)
- {
- rt_kprintf("can't find i2c device\n");
- return ;
- }
- write_cmd(bus,BM1383AGLV_DEVICE_ADDRESS,BM1383AGLV_PRESSURE_MSB);
- read_reg(bus,BM1383AGLV_DEVICE_ADDRESS,5,val);
- }
- void bm1383_get_val(float *press, float *temp)
- {
- unsigned char val[6];
- signed short mag[3];
- unsigned long rawpress;
- short rawtemp;
-
- bm1383_get_rawval(val);
- //rt_kprintf("val[0] %d val[1] %d val[2] %d val[3] %d val[4] %d val[5] %d \n",\
- // val[0],val[1],val[2],val[3],val[4],val[5]);
- rawpress = (((unsigned long)val[0] << 16) | ((unsigned long)val[1] << 8) | val[2]&0xFC) >> 2;
- if(rawpress == 0) {
- rt_kprintf("error rawpress = 0\n");
- }
- *press = (float)rawpress / HPA_PER_COUNT;
- rawtemp = ((short)val[3] << 8) | val[4];
- if (rawtemp == 0) {
- rt_kprintf("error rawtemp = 0\n");
- }
- *temp = (float)rawtemp / DEGREES_CELSIUS_PER_COUNT;
- }
- long bm1383(void)
- {
- static rt_uint8_t isinit = 0;
- rt_uint16_t count = 1000;
- float data[3] = {0.0};
- char buff[50] = {0};
-
- if(!isinit)
- {
- bm1383_init();
- isinit =1;
- }
- while(count--)
- {
- bm1383_get_val(&data[0],&data[1]);
- sprintf(buff,"press=%.3f temp=%.3f ℃",data[0],data[1]);
- rt_kprintf("%s\n",buff);
- rt_thread_mdelay(500);
- }
- return 0;
- }
- FINSH_FUNCTION_EXPORT(bm1383, show bm1383 data);
- MSH_CMD_EXPORT(bm1383, show bm1383 data);
复制代码数据转换规则如下:
shell 中输入bm1383 start测量数据,标准大气压下输出气压,温度数值如下。
|
|