智能车制作

标题: 制作记录___1 MM8451重构采集 [打印本页]

作者: NIT郑凯    时间: 2012-6-24 19:06
标题: 制作记录___1 MM8451重构采集
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位精度的初始化, 但是我读进来的值一直是八位的,求解


作者: xujinpeng120    时间: 2012-6-25 13:26
你是只读了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);
}

我的程序是把数据直接转成浮点数 你要是没有用浮点数的话可以用传感器的应用手册里面的转换函数
作者: NIT郑凯    时间: 2012-6-25 16:36
3Q 晚上去试试  谢谢
作者: NIT郑凯    时间: 2012-6-25 20:25
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]


作者: NIT郑凯    时间: 2012-6-25 21:11
xujinpeng120 发表于 2012-6-25 13:26
你是只读了8位  
我是这样写的就没有问题
typedef union

成功了,14位精度的数据比8位好太多了,谢谢大神

作者: 火龙点灯    时间: 2012-6-28 09:53
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


请问怎么回事?

作者: xujinpeng120    时间: 2012-6-28 18:01
火龙点灯 发表于 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;
放到程序的头部试试 如果不行就不知道了
作者: 火龙点灯    时间: 2012-6-29 13:46
xujinpeng120 发表于 2012-6-28 18:01
也许是你声明tword 之前就调用了它
把typedef union
{

  谢谢 是的 tword 定义过了
作者: huang91    时间: 2012-7-2 02:06
本帖最后由 huang91 于 2012-7-2 02:25 编辑
成功了,14位精度的数据比8位好太多了,谢谢大神

为什么我 读回来的gra_z ,负范围没错-90度,gra_z 可以接近到-1,正范围gra_z到0.5上不去了?你的gra_z是个什么范围?
作者: xujinpeng120    时间: 2012-7-2 11:58
huang91 发表于 2012-7-2 02:06
为什么我 读回来的gra_z ,负范围没错-90度,gra_z 可以接近到-1,正范围gra_z到0.5上不去了?{:soso_e10 ...

我以前也遇到过这个问题 后来发现时IIC里面的NOP写的太少了  读取速度太快就会有这个问题
作者: wangyao19920204    时间: 2012-12-29 17:52
楼主  你使用的K60 调的吗?求指导。。。。
作者: 陆少游    时间: 2013-2-5 21:15
问下大家那个IN1 IN2具体有什么作用呀
作者: 大姆指    时间: 2013-4-6 18:15
用来输出中断信号滴...




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2