LIS3DH 三轴加速度传感器使用流程及示例

您所在的位置:网站首页 多轴加速度传感器故障 LIS3DH 三轴加速度传感器使用流程及示例

LIS3DH 三轴加速度传感器使用流程及示例

2024-06-25 11:05| 来源: 网络整理| 查看: 265

 

LIS3DH是一个三轴加速度传感器,可用于检测X、Y、Z轴上的加速度,以及设置阈值,在加速度超出阈值时触发中断,支持SPI和IIC读写。

下面主要是IIC方式读写:

SPI方式读写类似,参考手册即可。一般情况下,可以用2根线,没必要用3线或者4线。而且IIC用GPIO模拟很方便,网上例程很多,这里就不贴了,搜一搜就有。

 

一、寄存器读写流程

首先硬件连接会决定该模块的IIC地址 如果SAO脚接地,IIC地址为0X30(不包含最低位). 如果接V3.3,则IIC地址为0X32(不包含最低位).

这个器件地址很重要,因为读写寄存器都是要先写一下对应的器件地址,然后再执行命令的。

注意先发送的器件地址只是前7位,最后一位决定的是读写位,0是写寄存器,1为读寄存器,所以写寄存器时是先写入“LIS_ADDR|0x00”,读的时候则是先写入“LIS_ADDR|0x01”,(LIS_ADDR这里指上文的IIC地址)。

a、主机向从机写一个字节,下表是通过IIC向LIS3DH寄存器写一个字节的流程。简单来说就是:先写1个字节的写命令+IIC地址,再写一个字节的你要写的寄存器地址,最后写一个字节你要写入寄存器的内容。

示例:

//IIC写一个字节 //reg:寄存器地址 //data:数据 //返回值:0,正常 //其他,错误代码 uint8_t LIS_Write_Byte(uint8_t reg,uint8_t data) { IIC_Start(); IIC_Send_Byte(LIS_ADDR|0x00);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg|0x00); //写寄存器地址 D7位为低用于单字节传输 IIC_Wait_Ack(); //等待应答 IIC_Send_Byte(data); //发送数据 if(IIC_Wait_Ack()) //等待ACK { IIC_Stop(); return 1; } IIC_Stop(); Sleep(5000); //休眠5ms return 0; }

 

b、LIS3DH读寄存器一个字节 流程:先写1个字节的写命令+IIC地址,再写你要读的寄存器,然后写1个字节的读命令+IIC地址,最后读一个字节的数据

示例:

//IIC读一个字节 //reg:寄存器地址 //返回值:读到的数据 uint8_t LIS_Read_Byte(uint8_t reg) { uint8_t res=0x00; IIC_Start(); IIC_Send_Byte(LIS_ADDR|0x00);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待ACK { IIC_Stop(); return 1; } IIC_Send_Byte(reg); //写寄存器地址 IIC_Wait_Ack(); //等待应答 IIC_Start(); IIC_Send_Byte(LIS_ADDR|0x01); //发送器件地址+读命令 IIC_Wait_Ack(); //等待应答 res = IIC_Read_Byte(0); //读取数据,发送nACK IIC_Stop(); //产生一个停止条件 return res; }

c、IIC连续写寄存器:

示例:

//IIC连续写 //addr:器件地址 //reg:寄存器地址 //len:写入长度 //buf:数据区 //返回值:0,正常 // 其他,错误代码 uint8_t LIS_Write_Len(uint8_t addr,uint8_t reg,uint8_t len,uint8_t *buf) { uint8_t i; IIC_Start(); IIC_Send_Byte(LIS_ADDR|0x00);//发送器件地址+写命令 if(IIC_Wait_Ack()) //等待应答 { IIC_Stop(); return 1; } IIC_Send_Byte(reg|0x80); //写寄存器地址 D7位为高用于多字节传输 IIC_Wait_Ack(); //等待应答 for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3