原创 ADXL345学习

2019-7-13 11:12 500 0 1 分类: MCU/ 嵌入式 文集: STM32
买了个ADXL345的模块,得到的资料太LOW.    看数据手册 ,应该有校验和FIFO 的操作啊,而且采集太慢。
用卖模块的程序,也就是能读出来数据,数据跳动还很大。
官网:   https://www.analog.com/cn/products/adxl345.html#product-documentation
看了官网资料,实在没有必须写博客。该说的都说了。 
以下只是个人的理解
char ADXL345_Init(char I2C_protocal);
void ADXL345_SetRegisterValue(unsigned char registerAddress, unsigned char registerValue);
unsigned char ADXL345_GetRegisterValue(unsigned char registerAddress);
void ADXL345_GetGxyz(float* x, float* y, float* z);
void ADXL345_SetOffset(unsigned char xOffset, unsigned char yOffset, unsigned char zOffset)


ADXL345 可以用SPI 和I2C 通讯,我要用I2C.
char ADXL345_Init(char I2C_protocal)
{
IIC_Init();               //底层设置
   ADXL345_SetRegisterValue(DATA_FORMAT,0x0B);   //测量范围+-16G.
//D7, SELF_TEST  0---禁用自测力
//D6, SPI,  1---3线SPI模式;0--4线
//D5 ,INT_INVERT  ,0 ---设置中断至高电平有效。0---低电平有效
//D4, NO USE
//D3 ,FULL_RES,1--全分辨率模式。  0--10位模式。
//D2,Justify,对齐位。   1 ---选择左对齐。
//D1,D0 ---g 范围 
  0,0    +-2g
0,1      +-4g
1,1    +-8g
1,1 +-16g

   ADXL345_SetRegisterValue(BW_RATE,0x0F);   //示例中选择的速度太慢
//D4, LOW_POWER,0 ---正常操作,1 ---低功率操作。
//D3,D2,D1,D0    速率位,选择期间带宽和输出数据速率。
1,1,1,1       输出速率3200HZ,  带宽1600HZ 

      ADXL345_SetRegisterValue(POWER_CTL,0x08);   //  测量
//D4,Measure,  
  ADXL345_SetRegisterValue(INT_ENABLE,0x80);   //  中断使能寄存器,使能数据好中断
// D7,DATA_READY,--------------数据OK
//D6, SINGLE_TAP  --------单击
//D5,DOUBLE_TAP   -----双击
//D4,Activity    ------------活动
//D3,Inactivity   ----------静止
//D2, FREE_FALL   -----自由落体
//D1,Watermark\      ----水印 ,不明白什么意思
//D0,Overrun            ---- 溢出,  也不明白应该场合。

ADXL345_SetRegisterValue(INT_MAP,0B0111111);  //DATA_READY中断发到INT1

ADXL345_SetRegisterValue(FIFO_CTL,0B11  1 0 0 111 );
//D7,D6
0,0 -----Bypass
0,1 --FIFO
1,0 ---stream
1,1 -- Trigger 
//D5  --Trigger Bit      1---触发位的中断去INT2
//D4,D3,D2,D1,D0    Samples bit
 00111   ---------设定16个吧。  有8个数据后,触发中断。 一次读出8个数据,平均一下。


void ADXL345_SetOffset(unsigned char xOffset, unsigned char yOffset, unsigned char zOffset);

}

float x[8],y[8],z[8];
main(1)
{
if (INT2 == FALSE)         //是否有中断
{
INT_DATA = ADXL345_GetRegisterValue(INT_SOURCE);        //判断是谁在中断
//不知道触发中断 会引起几个中断,DATA_READY ,WATERMARK,OVERRUM   ????
 ADXL345_GetGxyz(float* x, float* y, float* z);
}
}


广告

文章评论 1条评论)

登录后参与讨论

curton 2019-12-7 19:38

学习
相关推荐阅读
esad0 2019-12-31 15:23
超声波模块开放笔记
       这是简单文章。       市场上的超声波模块大部分和我DIY的一样 是用HOLTEK的45F23A做的。...
esad0 2019-12-07 09:56
初始化holtek的45f23的PWM0
/*************************************************函数名称:  初始化holtek的45f23 的PWM0简要描述:  此程序同样...
esad0 2019-06-22 12:55
vl53l0 api
3种模式:高精度,长距离,高速mode:  1  hight accuracy      200ms      &nbs...
esad0 2019-04-17 19:15
基于STM32的XT1511 控制 总结一下,省的忘了
XT1511 是全彩发光LED驱动光源。   表面贴装 SMD 型 。 XT1511内部集成的驱动是SK6812, 这个芯片和和WS2811 驱动相同,都是一线级联的通信方式。&...
广告
我要评论
1
0
广告
关闭 热点推荐上一条 /1 下一条