原创 ADXL345学习

2019-7-13 11:12 2104 14 2 分类: 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);
}
}


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

curton 2019-12-7 19:38

学习
相关推荐阅读
esad0 2024-12-04 11:20
基于TOF微型多区激光传感器在MCU上的AI手势识别
TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳...
esad0 2024-09-05 09:06
训练集loss下降,但是验证集loss上升
当训练集loss下降而验证集loss上升时,这通常表明模型可能出现了过拟合。‌这种情况意味着模型在训练数据上的表现优于在测试数据上的表现,即模型很好地拟合了训练数据,但对于新数据的预测能力较差。分析种...
esad0 2023-05-27 08:41
吃饱闲的玩 做的
...
esad0 2021-07-09 15:46
传说中的嘉立创紫和TMF8801测距模块
这个色彩鲜艳的PCB 就是刚推出的嘉立创紫, 我感觉有点偏黑。    激光测距传感器 TMF8801的测试板。TMF8801 的资料还需要给老外签订保密合同才可以...
esad0 2021-04-19 15:38
AIR724 一拖8 LORA 系统
         AIR724通过LORA模块  和其他的8个模块进行通讯。  从而实现1拖8的效果。  &n...
EE直播间
更多
我要评论
1
14
关闭 站长推荐上一条 /3 下一条