资源简介
基于aemega16驱动mpu6050,并用串口输出数据,简单粗暴,简明易懂
代码片段和文件信息
#include
#include
#include “IIC_drive.h“
#include “uart_drive.h“
#define uint unsigned int
#define uchar unsigned char
/********以下是端口初始化函数********/
void port_init(void)
{
PORTC = 0xFF; //PA口输出高电平
DDRC = 0xFF; //PA口 设置为输出
PORTD = 0X00; //USART的发送接收端口分别为PD0和PD1
DDRD|=(1< }
//****************************************
// 定义MPU6050内部地址
//****************************************
#define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz)
#define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz)
#define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)
#define WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读)
void delay_ms(uint ms)
{
uint ij;
for(i=0;i {
for(j=0;j<1140;j++);
}
}
//****************************************
//整数转字符串
//****************************************
void uart_printf_int(int value)
{
unsigned int str[6];
unsigned int temp;
if(value<0)
{str[0]=‘-‘; value=-value;}
else
str[0]=‘ ‘;
str[1]=value/10000; temp=value%10000; uart_send(str[1]+48);
str[2]=temp/1000; temp=temp%1000; uart_send(str[2]+48);
str[3]=temp/100; temp=temp%100; uart_send(str[3]+48);
str[4]=temp/10; temp=temp%10; uart_send(str[4]+48);
str[5]=temp; uart_send(str[5]+48);
uart_send(‘ ‘);
//uart_send(0x0a); //换行
}
//**************************************
//初始化MPU6050
//**************************************
void InitMPU6050()
{
write_EEPROM(0x00PWR_MGMT_1); //解除休眠状态
write_EEPROM(0x07SMPLRT_DIV);
write_EEPROM(0x06CONFIG);
write_EEPROM(0x18GYRO_CONFIG);
write_EEPROM(0x01ACCEL_CONFIG);
}
//**************************************
//合成数据
//**************************************
int GetData(uchar REG_Address)
{
char HL;
H=read_EEPROM(REG_Address);
L=read_EEPROM(REG_Address+1);
return (H<<8)+L; //合成数据
}
//*********************************************************
//主程序
//*********************************************************
void main()
{
int abcxyz;
delay_ms(100); //上电延时
port_init();
TWI_init();
uart_init();
InitMPU6050(); //初始化MPU6050
delay_ms(100);
while(1)
{
c=GetData(ACCEL_ZOUT_H);
uart_printf_int(c);
delay_ms(500);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4358 2014-06-15 11:11 uart+mpu\IIC_drive.h
文件 3080 2014-06-30 16:09 uart+mpu\main.c
文件 890 2014-06-16 00:09 uart+mpu\uart_drive.h
目录 0 2014-07-18 09:43 uart+mpu
----------- --------- ---------- ----- ----
8328 4
- 上一篇:非局部均值滤波
- 下一篇:数字电路设计万年历实验报告
相关资源
- STM32F1单片机+四元数欧拉角姿态解算
- STM32F407的MPU6050三轴DMP度角度源码
- mpu6050 i2c驱动及测试程序
- STM32 MPU6050-DMP-欧拉角串口输出 滤波
- mpu6050检测角度
- MPU6050用卡尔曼滤波解算姿态
- 基于mpu6050计步器算法
- 4_MPU6050_DMP_makeIt.zip
- mpu6050封装
- 利用dmp读取mpu6050四元数和pitch,roll,
- 基于MSP430的mpu6050,lcdcd显示三轴加速
- 正点原子STM32F103+MPU6050实现计步器源码
- 飞思卡尔128 MPU6050程序
- STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU
- STM32F103C8T6+MPU6050获取步数.rar
- MPU6050卡尔曼滤波解算姿态
- MPU6050姿态解算STM32源码(互补滤波)
- GY521mpu-6050资料(含代码和电路图)
- STM32F103C8T6+MPU6050六轴传感器
- nrf_51822_mpu6050_DMP移植
- verilog编程fpga通过IIC读取mpu6050数据
- STM32 IIC 状态机 DMA 控制MPU60x0和burst读
- STM32F4 MPU6050
- mpu6050 姿态解算 四元数 欧拉角
- STM32CUBE配置硬件IIC协议驱动MPU6050,采
- C51贪吃蛇(MPU6050控制方向,LED点阵显
- mpu6050.rar
- 瑞萨单片机和MPU6050通信测试通过,模
- mpu6050 自带dmp库
- 基于K60的MPU6050测试程序
评论
共有 条评论