最近在研究6050,真是很磨人啊,这个小东西还挺复杂,一个读取程序竟然需要600多行。

这几天连查资料找到了几个很好的帖子,要是以后有人看到这篇帖子,可以避免误入歧途,也可以省去很多时间。

1、阿西莫夫电子论坛:神贴。。ahttp://www.amobbs.com/thread-5581033-1-1.html?_dsign=5c5b5cde

2、强大的百度出来的第七实验室:https://wenku.baidu.com/view/89db87ac7375a417876f8f6b.html

3、6050角度转换原理:http://blog.csdn.net/u010389437/article/details/38541561

说一下我对他的理解。其实也不是特别的复杂,6050就是一个i2c器件,就像一个微控制器,通过它你能知道你当钱的姿态,把他想象成一个黑箱,

要使用它,首先你得了解他的寄存器,知道如何初始化,读取,写入等等。都是套路其实,看着照葫芦画瓢就行,

重要的就是知道如何将输出的数据进行转化为你能需要并且能看懂的数据。而下面你得资料你绝对用得到。

6050的操作:

#include "mpu6050.h"
#include "bsp_usart1.h"
#include "bsp_i2c.h" /**
* @brief 写数据到MPU6050寄存器
* @param
* @retval
*/
void MPU6050_WriteReg(u8 reg_add,u8 reg_dat)
{
i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS); //写从机地址,并配置成写模式
i2c_WaitAck();
i2c_SendByte(reg_add); //写寄存器地址
i2c_WaitAck();
i2c_SendByte(reg_dat); //写寄存器数据
i2c_WaitAck();
i2c_Stop();
} /**
* @brief 从MPU6050寄存器读取数据
* @param
* @retval
*/
void MPU6050_ReadData(u8 reg_add,unsigned char*Read,u8 num)
{
unsigned char i; i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS);
i2c_WaitAck();
i2c_SendByte(reg_add);
i2c_WaitAck(); i2c_Start();
i2c_SendByte(MPU6050_SLAVE_ADDRESS+); //写从机地址,并配置成读模式
i2c_WaitAck(); for(i=;i<(num-);i++)
{
*Read=i2c_ReadByte();
Read++;
}
*Read=i2c_ReadByte();
i2c_Stop();
} //**************至此mpu6050的读写操作函数都搞定了,下面只需要初始化就可以读取他的数据了 /**
* @brief 初始化MPU6050芯片
* @param
* @retval
*/
void MPU6050_Init(void)
{
int i=,j=;
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
for(i=;i<;i++)
{
for(j=;j<;j++)
{
;
}
}
MPU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00); //解除休眠状态
MPU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07); //陀螺仪采样率,1KHz
MPU6050_WriteReg(MPU6050_RA_CONFIG , 0x06); //低通滤波器的设置,截止频率是1K,带宽是5K
MPU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00); //配置加速度传感器工作在2G模式,不自检
MPU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18); //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
} /**
* @brief 读取MPU6050的ID
* @param
* @retval
*/
uint8_t MPU6050ReadID(void)
{
unsigned char Re = ;
MPU6050_ReadData(MPU6050_RA_WHO_AM_I,&Re,); //读器件地址
if(Re != 0x68)
{
printf("MPU6050 dectected error!\r\n检测不到MPU6050模块,请检查模块与开发板的接线");
return ;
}
else
{
printf("MPU6050 ID = %d\r\n",Re);
return ;
} }
/**
* @brief 读取MPU6050的加速度数据
* @param
* @retval
*/
void MPU6050ReadAcc(short *accData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_ACC_OUT, buf, );
accData[] = (buf[] << ) | buf[];
accData[] = (buf[] << ) | buf[];
accData[] = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的角加速度数据
* @param
* @retval
*/
void MPU6050ReadGyro(short *gyroData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_GYRO_OUT,buf,);
gyroData[] = (buf[] << ) | buf[];
gyroData[] = (buf[] << ) | buf[];
gyroData[] = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的原始温度数据
* @param
* @retval
*/
void MPU6050ReadTemp(short *tempData)
{
u8 buf[];
MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
*tempData = (buf[] << ) | buf[];
} /**
* @brief 读取MPU6050的温度数据,转化成摄氏度
* @param
* @retval
*/
void MPU6050_ReturnTemp(short*Temperature)
{
short temp3;
u8 buf[]; MPU6050_ReadData(MPU6050_RA_TEMP_OUT_H,buf,); //读取温度值
temp3= (buf[] << ) | buf[];
*Temperature=(((double) (temp3 + )) / )-;
}

光知道6050怎么操作还是不行的,你的有一个桥梁到6050上面去,得有一个放大镜偷窥里面的数据。这是就需要i2c闪亮登场。

伪代码我就不说了,看我的其他博客。

有了这些你就无敌了。

关于mpu6050的几个很好的帖子的更多相关文章

  1. 很励志的帖子,转来自勉,也反省一下自己写码这几年【奋斗10年,一个.NET程序员从0到拥有5系】

    http://bbs.csdn.net/topics/390833230 想想自己毕业近8年,真正写码也5年.从当初毕业时的拒绝写码,到迫不得已开始写码,是命运也好,是自己的不努力也罢.今天看来,写码 ...

  2. 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  3. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  4. 网络问卷调查js实现代码

    昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...

  5. [转]ios push

    转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 P ...

  6. 使用 Eclipse 调试 Java 程序的 10 个技巧

    你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...

  7. manven搭建和ssm的整合(转)

    原文:http://www.cnblogs.com/youzhibing/p/5004619.html 这是个很好的帖子,但是原文的maven搭建上有点问题. 帖子后面有说,其实不用配环境变量也是可以 ...

  8. 线程的Abort方法有感

    今天看CSDN上一个很老的帖子,有个人说Thread.Abort()方法调用之后一定会抛出异常,我对这个有点疑问. 于是自己做了一个测试demo,来研究Abort抛出异常的时机.废话少说,直接上代码: ...

  9. IIS7.0上传文件限制的解决方法

    在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击. ...

随机推荐

  1. vSphere在RedHat6.0上搭建Oracle 11g R2 RAC环境

    一.前期准备工作 1.1 为方便操作,装完系统后我们先安装Vmware Tools: 1.1.1.安装工具 在VMware的菜单栏上选择"虚拟机/安装虚拟机工具(VM/Install VMw ...

  2. SQLSERVER2008 错误18456

    我遇到的问题,已经解决,如果你遇到不能解决可以咨询我 1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密 ...

  3. Oracle数据库笔记

    SQL分为四大类别 1.DDL:Date Definition Language 数据定义语言  用于建立.修改.删除数据库对象(create创建表和其它对象结构:alter修改表或其它结构:drop ...

  4. XShell连接本地Ubuntu虚拟机

    VMware Workstation 安装好本地虚拟机之后,直接在虚拟机上敲命令着实不方便. 这个时候我们就需要一个远程命令工具来管理虚拟机,这里推荐使用XShell远程命令行工具 1.下载工具 直接 ...

  5. SQL AlawaysOn 之五:ISCSI共享磁盘

    用于存放SQL数据库 1.安装服务 2.安装完成后要求重启计算机.添加该功能要配置计算机,如果是正式服务器,那种不能关机太久的服务器,请慎用. 重启之后看到文件和储存服务,击击进去 3.看到ISCSI ...

  6. 手动编写JQUERY插件

    就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (fun ...

  7. 关于连接数据库的T-SQL语句中的一种小技巧

    (编程生活中,我们经常会用到数据库.然后在通过T-SQL语句来对数据库进行操作的时候,遇到很多麻烦.话说昨天我就被困扰了一天.明明这个T-sql插数据的语句放在数据库运行的时候没有问题,到了java代 ...

  8. 简单的android启动跳转页面

    java代码示例: package com.rcl; import android.app.Activity;import android.content.Intent;import android. ...

  9. iOS开发之Run Loop

    1.概述 (1) Run Loop提供了一种异步执行代码的机制,不能并行执行任务. (2) 在主队列中,Main Run Loop直接配合任务的执行,负责处理UI事件.计时器,以及其它内核相关事件. ...

  10. ucenter单点登录

    首先我们先来了解下Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passwo ...