智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7807|回复: 12
打印 上一主题 下一主题

[其他] 制作记录___1 MM8451重构采集

[复制链接]

11

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
367
贡献
187
兑换币
4
注册时间
2012-3-18
在线时间
49 小时
跳转到指定楼层
1#
发表于 2012-6-24 19:06:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void MMA845x_init()
{       
        MMA845x_writebyte(CTRL_REG1,ASLP_RATE_20MS+DATA_RATE_5MS);       
        nops(); nops(); nops(); nops(); nops(); nops();
        MMA845x_writebyte(XYZ_DATA_CFG_REG, FULL_SCALE_2G); //2G
        nops(); nops(); nops(); nops(); nops(); nops();
        MMA845x_writebyte(CTRL_REG1, (ACTIVE_MASK+ASLP_RATE_20MS+DATA_RATE_5MS)&(~FREAD_MASK)); //激活状态   14bit
        nops(); nops(); nops(); nops(); nops(); nops();
}
   x = MMA845x_readbyte(OUT_X_MSB_REG); //X轴数据采集   y = MMA845x_readbyte(OUT_Y_MSB_REG); //Y轴数据采集   z = MMA845x_readbyte(OUT_Z_MSB_REG); //Z轴数据采集
  14位精度的初始化, 但是我读进来的值一直是八位的,求解

8

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
734
威望
404
贡献
186
兑换币
9
注册时间
2012-4-11
在线时间
72 小时
毕业学校
tj
2#
发表于 2012-6-25 13:26:23 | 只看该作者
你是只读了8位  
我是这样写的就没有问题
typedef union
{
  word mword;
  struct
  {
  byte hi;
  byte lo;
  } mbyte;
}tword;
float gra_x,gra_y,gra_z;
float gra_cov(tword V){
word V1;
float vv;
int sign;
if(V.mbyte.hi > 0x7F)
{
sign=-1;
V1= (~(V.mword>>2) + 1)&0X3FFF;
}
else
{
sign=1;
V1=(V.mword>>2)&0X3FFF;
}
vv=sign*(((float)V1)/0xfff);
return vv;
}

tword x,y,z;
void gra_cal(){
  byte v=0;
  
   x.mbyte.hi=MMA845x_readbyte(OUT_X_MSB_REG);
   x.mbyte.lo=MMA845x_readbyte(OUT_X_LSB_REG);
   y.mbyte.hi=MMA845x_readbyte(OUT_Y_MSB_REG);
   y.mbyte.lo=MMA845x_readbyte(OUT_Y_LSB_REG);
   z.mbyte.hi=MMA845x_readbyte(OUT_Z_MSB_REG);
   z.mbyte.lo=MMA845x_readbyte(OUT_Z_LSB_REG);  
   gra_x=gra_cov(x);
   gra_y=gra_cov(y);
   gra_z=gra_cov(z);
}

我的程序是把数据直接转成浮点数 你要是没有用浮点数的话可以用传感器的应用手册里面的转换函数
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
367
贡献
187
兑换币
4
注册时间
2012-3-18
在线时间
49 小时
3#
 楼主| 发表于 2012-6-25 16:36:40 | 只看该作者
3Q 晚上去试试  谢谢
回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
367
贡献
187
兑换币
4
注册时间
2012-3-18
在线时间
49 小时
4#
 楼主| 发表于 2012-6-25 20:25:26 | 只看该作者
xujinpeng120 发表于 2012-6-25 13:26
你是只读了8位  
我是这样写的就没有问题
typedef union

浮点数我是定义过了,但是typedef union{
  word mword;
  struct
  {
  byte hi;
  byte lo;
  } mbyte;
}tword;
定义的时候提示我tword重复定义了
错误
[url=]C1019: Incompatible type to previous declaration[/url]

回复 支持 反对

使用道具 举报

11

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
367
贡献
187
兑换币
4
注册时间
2012-3-18
在线时间
49 小时
5#
 楼主| 发表于 2012-6-25 21:11:53 | 只看该作者
xujinpeng120 发表于 2012-6-25 13:26
你是只读了8位  
我是这样写的就没有问题
typedef union

成功了,14位精度的数据比8位好太多了,谢谢大神
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
590
威望
350
贡献
126
兑换币
0
注册时间
2012-2-8
在线时间
57 小时
毕业学校
哈佛
6#
发表于 2012-6-28 09:53:52 | 只看该作者
xujinpeng120 发表于 2012-6-25 13:26
你是只读了8位  
我是这样写的就没有问题
typedef union

Error   : C1019: Incompatible type to previous declaration (found '<unnamed type> ', expected 'tword ')

collect_handle.c line 66   

C1440: This is causing previous message 1019

mma845x.h line 51   

Error   : Compile failed


请问怎么回事?
回复 支持 反对

使用道具 举报

8

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
734
威望
404
贡献
186
兑换币
9
注册时间
2012-4-11
在线时间
72 小时
毕业学校
tj
7#
发表于 2012-6-28 18:01:48 | 只看该作者
火龙点灯 发表于 2012-6-28 09:53
Error   : C1019: Incompatible type to previous declaration (found ' ', expected 'tword ')

colle ...

也许是你声明tword 之前就调用了它
把typedef union
{
  word mword;
  struct
  {
  byte hi;
  byte lo;
  } mbyte;
}tword;
放到程序的头部试试 如果不行就不知道了
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
590
威望
350
贡献
126
兑换币
0
注册时间
2012-2-8
在线时间
57 小时
毕业学校
哈佛
8#
发表于 2012-6-29 13:46:22 | 只看该作者
xujinpeng120 发表于 2012-6-28 18:01
也许是你声明tword 之前就调用了它
把typedef union
{

  谢谢 是的 tword 定义过了
回复 支持 反对

使用道具 举报

47

主题

1053

帖子

1

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
30866

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章优秀版主奖章资源大师奖章

威望
19969
贡献
7241
兑换币
2325
注册时间
2012-2-1
在线时间
1828 小时
9#
发表于 2012-7-2 02:06:32 | 只看该作者
本帖最后由 huang91 于 2012-7-2 02:25 编辑
成功了,14位精度的数据比8位好太多了,谢谢大神

为什么我 读回来的gra_z ,负范围没错-90度,gra_z 可以接近到-1,正范围gra_z到0.5上不去了?你的gra_z是个什么范围?
回复 支持 反对

使用道具 举报

8

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
734
威望
404
贡献
186
兑换币
9
注册时间
2012-4-11
在线时间
72 小时
毕业学校
tj
10#
发表于 2012-7-2 11:58:19 | 只看该作者
huang91 发表于 2012-7-2 02:06
为什么我 读回来的gra_z ,负范围没错-90度,gra_z 可以接近到-1,正范围gra_z到0.5上不去了?{:soso_e10 ...

我以前也遇到过这个问题 后来发现时IIC里面的NOP写的太少了  读取速度太快就会有这个问题
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-10 21:03 , Processed in 0.067237 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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