OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5098|回复: 16

6050模块读不出数据

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
发表于 2014-9-5 13:34:00 | 显示全部楼层 |阅读模式
5金钱
我的6050读不出来数据,我比照过一些代码了。但自己一直没有发现问题的所以,还望论坛的大神们指点一下。
[mw_shl_code=c,true]#include "6050.h" #include "IIC.h" #include "delay.h" void Write_IIC_Data(u8 REG_Address, u8 REG_Data) { IIC_Start(); IIC_Send_Byte(SlaveAddress); IIC_Wait_Ack(); IIC_Send_Byte(REG_Address); IIC_Wait_Ack(); IIC_Send_Byte(REG_Data); IIC_Wait_Ack(); IIC_Stop(); } u8 Read_IIC_Data(u8 REG_Address) { u8 REG_Data; IIC_Start(); IIC_Send_Byte(SlaveAddress); IIC_Wait_Ack(); IIC_Send_Byte(REG_Address); IIC_Start(); IIC_Send_Byte(SlaveAddress+1); IIC_Wait_Ack(); REG_Data = IIC_Read_Byte(0); delay_ms(2); IIC_Stop(); return REG_Data; } void Init_MPU6050() { Write_IIC_Data(PWR_MGMT_1,0x00); delay_ms(500); Write_IIC_Data(CONFIG,0x07); Write_IIC_Data(ACCEL_CONFIG,0x06); Write_IIC_Data(GYRO_CONFIG,0x18); Write_IIC_Data(ACCEL_CONFIG,0x01); } u16 Read_6050_Get_Data(u8 REG_Address) { u16 data; u8 H , L; H = Read_IIC_Data(REG_Address); L = Read_IIC_Data(REG_Address + 1); data = (H << 8) | L; data /= 16.4; return data; } [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-5 21:52:57 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 07:03:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
难道是主函数的问题?在主函数中,我让数据显示在液晶屏上,但是读出来的数据全是1.
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 08:39:38 | 显示全部楼层
看不出问题,你试试这个呢,只要修改下IIC引脚就可以用了

MPU6050.c

2.45 KB, 下载次数: 66

iic_analog.c

6.67 KB, 下载次数: 59

MPU6050.h

1.25 KB, 下载次数: 50

iic_analog.h

2.47 KB, 下载次数: 51

回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 08:45:01 | 显示全部楼层
MPU6050有时候会初始化不成功,我也遇到过,没搞清原因,然后我在主函数中这样做的:
[mw_shl_code=c,true] Sys_Configuration(); while(Single_Read_IIC( SLAVEADRESS , ACCEL_XOUT_L )==0) //反复初始化MPU6050,直到读出数据 Sys_Configuration();[/mw_shl_code]

回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 10:13:30 | 显示全部楼层
回复【4楼】红木甲板:
---------------------------------
我用的寄存器版本的,没有过库函数版本的,好多错误,不知道添加什么问题。- - !
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 10:18:46 | 显示全部楼层
[mw_shl_code=c,true]读出来的数据全是1,前三个显示255,后边的三个显示3996.[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "LCD.h" #include "IIC.h" #include "6050.h" int main() { u8 a , b , c; Stm32_Clock_Init(9); delay_init(72); uart_init(72,9600); IIC_Init(); Write_IIC_Data(PWR_MGMT_1,0x80); delay_ms(30); Init_MPU6050(); LCD_Init(); delay_ms(100); while(1) { a = Read_IIC_Data(WHO_AM_I); b = Read_IIC_Data(PWR_MGMT_1); c = Read_IIC_Data(GYRO_CONFIG); LCD_ShowNum(10,10,a,10,16); LCD_ShowNum(10,30,b,10,16); LCD_ShowNum(10,50,c,10,16); LCD_ShowNum(10,70,Read_6050_Get_Data(ACCEL_XOUT_H),10,16); LCD_ShowNum(10,90,Read_6050_Get_Data(ACCEL_YOUT_H),10,16); LCD_ShowNum(10,110,Read_6050_Get_Data(ACCEL_ZOUT_H),10,16); delay_ms(1800); delay_ms(1800); } } [/mw_shl_code]

回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 10:23:15 | 显示全部楼层
回复【6楼】团:
---------------------------------
用寄存器的话把引脚初始化的部分改成寄存器就好了
另外MPU6050出来的数据是16位带符号的
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 10:36:11 | 显示全部楼层
回复【8楼】红木甲板:
---------------------------------
我又修改了一下我的程序,能读取了,但完全不正确,数字也不会变更。
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 10:47:51 | 显示全部楼层
回复【9楼】团:
---------------------------------
会不会初始化问题呢?我之前遇到的问题就是初始化不成功数字不对,所以主函数里反复初始化直到读出数据
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 10:49:54 | 显示全部楼层
我写了两个,一个是校准IIC寄存器的地址,如果不等于0x68就反复初始化。另一个是检测休眠,休眠就一直初始化,结果程序就卡死了,TFT屏上面什么的不显示,这个要怎么解决呢?
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 11:26:21 | 显示全部楼层
回复【11楼】团:
---------------------------------
调试下看看死的哪里
或者你用我那种方法试试看
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-6 12:00:02 | 显示全部楼层
你贴出代码的部分 一般不会出现啥问题   主要还是出现在你的IIC时序问题上
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 14:53:25 | 显示全部楼层
回复【13楼】jiaozhu:
---------------------------------
IIC我直接用的原子的IIC代码。要贴出来吗?
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 15:15:19 | 显示全部楼层
回复【14楼】团:
---------------------------------
数据还读不出来?
回复

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2014-9-6 15:52:40 | 显示全部楼层
回复【15楼】红木甲板:
---------------------------------
没有,感觉程序不能初始化,一直卡死在一个地方
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-9-6 16:36:54 | 显示全部楼层
回复【16楼】团:
---------------------------------
debug看看死在什么地方
按理不应该死的啊,模拟的IIC没有while之类的语句,你是按我4楼的方法反复初始化的吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-1 15:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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