引用: CCss131 发表于 2019-9-9 14:32 版主你好,请问一下INT_DRDY这个引脚有什么用,要怎么配置它?用ADC采样吗?还有现在用硬件的SPI驱动LPS33H ...
INT_DRDY 是数字输出引脚,接单片机的数据输入,一搬产生中断或者数据准备就绪时这个引脚的电平会有变化
SPI卡在那里是因为读到的who am i和器件的不对应,一搬情况下是因为通信错误没有读到数据。
引用: CCss131 发表于 2019-9-17 14:15 版主你好, 1.我的这个气压传感器读PRESS_OUT_XL (28h)是0x70 0x10 0x3F换算出来是1793mbar,我测了好多 ...
“PRESS_OUT_XL (28h)是0x70 0x10 0x3F”你要确定一下MSB和LSB的顺序,如果弄反了气压还可能是1009
你说的测了好多次都是2000左右是用什么测的?
温度差多少,和什么比较的?
连续输出需要正确配置CTRL_REG1 (10h)寄存器的ODR2
对的对的我弄反了,换算应该是这个顺序 0x3F 0x10 0x70,得出是1009,
手册里面说:为了保证BDU特性的正确行为,PRESS_OUT_H (2Ah)必须是最后一个地址
阅读。所以那个0X3F是(2Ah)里面的内容。
BDU(1)块数据更新。默认值:0
(0:连续更新;
1:读取MSB和LSB后才更新输出寄存器) 这个怎么理解是SPI的MSB和LSB 还是头文件的声明的LSB?
#define LPS33HW_FROM_LSB_TO_hPa(lsb) (float)( lsb / 4096.0f )
#define LPS33HW_FROM_LSB_TO_degC(lsb) (float)( lsb / 100.0f )
引用: CCss131 发表于 2019-9-17 15:15
对的对的我弄反了,换算应该是这个顺序 0x3F 0x10 0x70,得出是1009,
手册里面说:为了保证BDU特性的正 ...
引用: CCss131 发表于 2019-9-17 15:21 初始化化第一条函数之后CTRL_REG1 (10h)里面读到时0x02,配置CTRL_REG1 (10h)寄存器的ODR2 之后直接就没再 ...
你用的是工程里的这段代码吗?
while(1)
{
/*
* Read output only if new value is available
*/
lps33hw_reg_t reg;
lps33hw_read_reg(&dev_ctx, LPS33HW_STATUS, (uint8_t *)®, 1);
if (reg.status.p_da)
{
memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t));
lps33hw_pressure_raw_get(&dev_ctx, data_raw_pressure.u8bit);
pressure_hPa = lps33hw_from_lsb_to_hpa( data_raw_pressure.i32bit);
sprintf((char*)tx_buffer, "pressure [hPa]:%6.2f\r\n", pressure_hPa);
tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
}
if (reg.status.t_da)
{
memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t));
lps33hw_temperature_raw_get(&dev_ctx, data_raw_temperature.u8bit);
temperature_degC = lps33hw_from_lsb_to_degc( data_raw_temperature.i16bit );
sprintf((char*)tx_buffer, "temperature [degC]:%6.2f\r\n", temperature_degC );
tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
}
}
对的我用这段代码初始化之后直接while(1)是可以一直读STATUS寄存器, 然后我定义这段为另一个函数在mian中的while(1)中调用,时序去到初始化CTRL_REG1之后,就没时序了,仿真发现是调用lps33hw_read_reg时进入硬件错误死循环,应该怎么解决,我想的是不断输出然后打印到PC的串口助手
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=605216&highlight=LPS22HB
版主,就像你所介绍的一样,需要多次循环数据,不止31次才准备完毕,这是硬件的关系吗?打印数据的话可以直接获取的得到的值吧,还有如果我人为对它进行加压,怎么才能快速捕捉它的数据
引用: CCss131 发表于 2019-9-17 16:50
对的我用这段代码初始化之后直接while(1)是可以一直读STATUS寄存器, 然后我定义这段为另一 ...
引用: CCss131 发表于 2019-9-17 18:53
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=605216&highlight=LPS22HB
版主,就像你 ...
引用: CCss131 发表于 2019-9-18 09:36 void lps33hw_get_data(void) { /* * Read output only if new value is available */ lps33h ...
你是说同样的代码,如果直接写在while里正常,封装成一个函数再调用就会报错?
引用: CCss131 发表于 2019-9-18 17:42 对,把while封装成一个函数,再重新在mian中的while调用就进不去这条函数,只是读到who am i 之后就没有时 ...
这种情况比较奇怪,你单步调试看看他们两个的区别,或者把编译优化去掉试试
谢谢分享
引用: 河畔边 发表于 2020-7-25 16:55
版主您好,我想问一下 如果是用STC15系列的51单片机 iic通讯来驱动这款IC 好驱动吗 我想尝试移植一下