智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2029|回复: 18
打印 上一主题 下一主题

L3G4200静止读数据有尖峰

[复制链接]

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
167
威望
87
贡献
54
兑换币
53
注册时间
2015-3-22
在线时间
13 小时
毕业学校
临川一中
跳转到指定楼层
1#
发表于 2015-4-29 15:06:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初始化代码
L3G_WR(CTRL_REG1, 0x7f);
  L3G_WR(CTRL_REG2, 0x00);
  L3G_WR(CTRL_REG3, 0x00);
  L3G_WR(CTRL_REG4, 0x30);
  L3G_WR(CTRL_REG5, 0x00);


求大神帮忙是怎么回事

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
27
贡献
4
兑换币
5
注册时间
2015-4-29
在线时间
2 小时
毕业学校
湖工
2#
发表于 2015-4-29 15:50:37 | 只看该作者
请问你用的是IIC还是SPI?
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

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

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
3#
发表于 2015-4-29 15:56:05 | 只看该作者
光看尖峰。你看一下,这个数据是255你就明白了撒
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
167
威望
87
贡献
54
兑换币
53
注册时间
2015-3-22
在线时间
13 小时
毕业学校
临川一中
4#
 楼主| 发表于 2015-4-29 16:08:47 | 只看该作者
wohsijingjing 发表于 2015-4-29 15:50
请问你用的是IIC还是SPI?

用的IIC
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
167
威望
87
贡献
54
兑换币
53
注册时间
2015-3-22
在线时间
13 小时
毕业学校
临川一中
5#
 楼主| 发表于 2015-4-29 16:10:09 | 只看该作者
zhou1994 发表于 2015-4-29 15:56
光看尖峰。你看一下,这个数据是255你就明白了撒

但是也不总是255,有时候253 252  是数据还没更新就读取了,麻烦您稍微提示一下,谢谢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
27
贡献
4
兑换币
5
注册时间
2015-4-29
在线时间
2 小时
毕业学校
湖工
6#
发表于 2015-4-29 16:10:31 | 只看该作者
zhou1994 发表于 2015-4-29 15:56
光看尖峰。你看一下,这个数据是255你就明白了撒

我也卡好几天了,我模拟IIC数据完全不对啊
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
167
威望
87
贡献
54
兑换币
53
注册时间
2015-3-22
在线时间
13 小时
毕业学校
临川一中
7#
 楼主| 发表于 2015-4-29 16:12:14 | 只看该作者
wohsijingjing 发表于 2015-4-29 16:10
我也卡好几天了,我模拟IIC数据完全不对啊

我是用的硬件IIC,不过有大师说模拟IIC更稳定
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
27
贡献
4
兑换币
5
注册时间
2015-4-29
在线时间
2 小时
毕业学校
湖工
8#
发表于 2015-4-29 16:12:17 | 只看该作者
a@u@t@o 发表于 2015-4-29 16:10
但是也不总是255,有时候253 252  是数据还没更新就读取了,麻烦您稍微提示一下,谢谢

能把你的代码接我参考一下不
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
27
贡献
4
兑换币
5
注册时间
2015-4-29
在线时间
2 小时
毕业学校
湖工
9#
发表于 2015-4-29 16:14:10 | 只看该作者
a@u@t@o 发表于 2015-4-29 16:12
我是用的硬件IIC,不过有大师说模拟IIC更稳定

我模拟卡好几天了,读出的数据完全是乱的,也不知道是哪的问题
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
167
威望
87
贡献
54
兑换币
53
注册时间
2015-3-22
在线时间
13 小时
毕业学校
临川一中
10#
 楼主| 发表于 2015-4-29 16:17:33 | 只看该作者
wohsijingjing 发表于 2015-4-29 16:14
我模拟卡好几天了,读出的数据完全是乱的,也不知道是哪的问题

/*!
*  @brief      读取I2C设备指定地址寄存器的数据
*  @param      I2Cn_e        I2C模块(I2C0、I2C1)
*  @param      SlaveID     从机地址(7位地址)
*  @param      reg         从机寄存器地址
*  @return                 读取的寄存器值
*  @since      v5.0
*  Sample usage:       uint8 value = i2c_read_reg(I2C0, 0x1D, 1);
*/
uint8 i2c_read_reg(I2Cn_e i2cn, uint8 SlaveID, uint8 reg)
{

    //先写入寄存器地址,再读取数据,因此此过程是 I2C 的复合格式,改变数据方向时需要重新启动
    uint8 result;

    ASSERT((SlaveID & 0x80) == 0);                      //断言,我们要求的7位地址的值仅仅是7bit,不是通信时要求的高7位
    //有些手册,给出的7位地址指的是8bit里的高7位
    //有些手册,给出的7位地址指的是7bit
    //请自行确认,可以尝试是否通信正常来确认

    i2c_Start(i2cn);                                    //发送启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1 ) | MWSR);      //发送从机地址和写位

    i2c_write_byte(i2cn, reg);                          //发送从机里的寄存器地址

    i2c_RepeatedStart(i2cn);                            //复合格式,发送重新启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1) | MRSW );      //发送从机地址和读位

    i2c_PutinRxMode(i2cn);                              //进入接收模式(不应答,只接收一个字节)
    result = I2C_D_REG(I2CN[i2cn]);                     //虚假读取一次,启动接收数据
    i2c_Wait(i2cn);                                     //等待接收完成

    i2c_Stop(i2cn);                                     //发送停止信号

    result = I2C_D_REG(I2CN[i2cn]);                     //读取数据

    Pause();                                            //必须延时一下,否则出错

    return result;
}


/*!
*  @brief      写入一个字节数据到I2C设备指定寄存器地址
*  @param      I2Cn_e        I2C模块(I2C0、I2C1)
*  @param      SlaveID     从机地址(7位地址)
*  @param      reg         从机寄存器地址
*  @param      Data        数据
*  @since      v5.0
*  Sample usage:       i2c_write_reg(I2C0, 0x1D, 1,2);     //向从机0x1D 的寄存器 1 写入数据 2
*/

void i2c_write_reg(I2Cn_e i2cn, uint8 SlaveID, uint8 reg, uint8 Data)
{

    i2c_Start(i2cn);                                    //发送启动信号

    i2c_write_byte(i2cn, ( SlaveID << 1 ) | MWSR);      //发送从机地址和写位

    i2c_write_byte(i2cn, reg);                         //发送从机里的寄存器地址

    i2c_write_byte(i2cn, Data);                         //发送需要写入的数据

    i2c_Stop(i2cn);

    Pause();                                            //延时太短的话,可能写出错
}


回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 14:35 , Processed in 0.089774 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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