查看: 2452|回复: 5

[其他] MMA8451fifo驱动程序

[复制链接]

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
28
最后登录
2017-11-14
发表于 2016-7-5 15:05:02 | 显示全部楼层 |阅读模式
void MMA845x_Standby (void)
{
  u8 n;
  n = MMA845x_readbyte(CTRL_REG1);
  MMA845x_writebyte(CTRL_REG1, n & ~ACTIVE_MASK);
}


void MMA845x_Init (void)
{
       MMA845x_Standby();
      u8 id = MMA845x_readbyte(0xd);
                   printf("id:%x\n",id);
        u16 x=0,y=0,z=0;
        MMA845x_writebyte(0x2A, 0x18); // 0x18: 100hz,DR=011, Active=0, F_Read=0
//        MMA845x_writebyte(0x09, 0x40); // 0x40: fifo 01
//        MMA845x_writebyte(0x2d, 0x40);
//        MMA845x_writebyte(0x2e, 0x40);
        MMA845x_writebyte(0x0e, 0x11); // 0x11:HPF_OUT set, 4g mode.
        temp_data = MMA845x_readbyte(0x2A);
        temp_data |= 0x01;
        MMA845x_writebyte(0x2A, temp_data);
}

main()
{
   MMA845x_Init ();
    for(j=0;j<10000;j++)
   {        x=0;
        y=0;
        z=0;
        xx = MMA845x_readbyte(0x0);
        if( (xx & 0x8) == 0)
        {        continue;
                printf("aaa\n");
        }
       
        k = MMA845x_readbyte(0x1);
        x = k<<8;
        k = MMA845x_readbyte(0x2);
        x |= k;
        x = x>>2;


        k = MMA845x_readbyte(0x3);
        y = k<<8;
        k = MMA845x_readbyte(0x4);
        y |= k;
        y = y>>2;


        k = MMA845x_readbyte(0x5);
        z = k<<8;
        k = MMA845x_readbyte(0x6);
        z |= k;
        z = z>>2;
        printf("HH:%x:%x:%x\n",x,y,z);
        nrf_delay_ms(50);
    }
}

以上是驱动程序,读取id是0x1a, 板子平放,但是打印的加速度值如下,
HH:3fff:8:3ffd
HH:3fff:5:3ffd
HH:3:4:2
HH:3ffe:3ffe:7
HH:3ffe:9:0
HH:3:3ffd:3ff9
HH:3ffc:3ffe:3
x,y,z轴数据不正常,哪里出问题了?

我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
    发表于 2016-7-6 09:58:51 | 显示全部楼层
    你用的是12bit的,读出来的原始数据左移4位试试。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    28
    最后登录
    2017-11-14
     楼主| 发表于 2016-7-6 11:10:23 | 显示全部楼层
    adarly 发表于 2016-7-6 09:58
    你用的是12bit的,读出来的原始数据左移4位试试。

    你好,我使用的是MMA8451Q,14bit的,按道理说最终结果只需像程序那样右移2位即可,怎么变成12bit了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
    发表于 2016-7-6 11:29:00 | 显示全部楼层
    哦,我这边看的是8452Q的手册,上面是8bit和12bit,没有14bit。要是14bit 右移2位就行了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    28
    最后登录
    2017-11-14
     楼主| 发表于 2016-7-6 12:10:32 | 显示全部楼层
    adarly 发表于 2016-7-6 11:29
    哦,我这边看的是8452Q的手册,上面是8bit和12bit,没有14bit。要是14bit 右移2位就行了 ...

    都是按8451Q手册来的,读取设备id都正确,但是读取xyz加速度如下:
    HH:3fff:8:3ffd
    HH:3fff:5:3ffd
    HH:3:4:2
    HH:3ffe:3ffe:7
    HH:3ffe:9:0
    HH:3:3ffd:3ff9
    HH:3ffc:3ffe:3
    感觉很乱,  调试adxl362时都没这样的问题,可能是哪里出问题了?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    28
    最后登录
    2017-11-14
     楼主| 发表于 2016-7-6 12:50:54 | 显示全部楼层
    问题解决了,把寄存器XYZ_DATA_CFG的HPF_OUT 失能就可以了,虽然不知道为什么
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 07:04 , Processed in 0.096960 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表