資源簡介
基于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
- 上一篇:非局部均值濾波
- 下一篇:數字電路設計萬年歷實驗報告
評論
共有 條評論