您的位置:首页 > 其它

2440(ARM9) L3G4200D ADXL345 裸机程序

2013-03-10 20:07 267 查看
  花了两天时间,结合以前写的程序2440 MDK 裸机IIC程序 整理出了,这个通过IIC读取AHRS传感器的程序且可以通过VisualScope.exe 这个软件

进行传感器的调试. 至于云台什么的,感觉应该不会太难,我会持续更新我的四轴进度.加速度计:



角速度计:



核心代码:

#include <S3C2440.H>
#include "serial.h"
#include "iic.h"
#include "L3G4200D.h"
#include "ADXL345.h"
unsigned char data[6];
unsigned char Array[10];
void revise(void);
unsigned int CRC16(unsigned char *Array ,unsigned int Len);

int main()
{
unsigned int  i;
unsigned int temp;
//    int pitch=0,yaw=0,roll=1;
//波特率  0x1a   115200     325    9600
init_uart(325);
//程序启动,若输出则串口是正常的
putstring("Serial communication is normal !\r\n");
init_iic();
putstring("Initialize IIC successful !\r\n");
Init_ADXL345();
putstring("Initialize ADXL345 successful !\r\n");
InitL3G4200D() ;
putstring("Initialize L3G4200D successful !\r\n");
while(1)
{
if(0)
{
Multiple_read_ADXL345(data);     //测试加速度计
}
else
{
Multiple_read_L3G4200D(data);      //测试角速度计
}
/*****************************************多余内容,可删除*********************************/
revise();                //数据校正
//Array[6]=Read24C08_nbyte(SlaveAddress_L3G4200D,0x26,1,); //读取温度,温度地址0x26
Array[6]=0x00;
Array[7]=0x00;      //  温度是8位的,故这个赋值给0x00
temp=CRC16(Array,8);
Array[8]=temp&0x00ff;
Array[9]=(temp&0xff00)>>8;
/****************************************************************************************/

for(i=0 ; i<10;i++)
{
//这里是把数据从串口发送出去
sendchar(Array[i]);
}
}

}
/******************************************************************
CRC16校验函数
*******************************************************************/

unsigned int CRC16(unsigned char *Array ,unsigned int Len)          //len在调用时指定为8就OK
{
// unsigned char *Rcvbuf ;
unsigned int IX,IY,CRC;
CRC=0xffff;   //set all 1
for(IX=0;IX<Len;IX++)
{
CRC=CRC^(unsigned int)(Array[IX]);
for(IY=0;IY<=7;IY++)
{
if((CRC&1)!=0)
CRC=(CRC>>1)^0xA001;         //0xA001是自定义多项式
else
CRC=CRC>>1;
}
}
return(CRC);
}
void revise(void)
{
unsigned int dis_data;
dis_data=(data[1]<<8)+data[0];  //合成数据     //进行修正
Array[0]=dis_data&0x00ff;
Array[1]=(dis_data&0xff00)>>8;
dis_data=(data[3]<<8)+data[2];  //合成数据     //进行修正
Array[2]=dis_data&0x00ff;
Array[3]=(dis_data&0xff00)>>8;
Array[4]=data[4];        //把值 给Array数组
Array[5]=data[5];
}


补充说明 :这个程序的几乎所有内容都可以在我以前的博客中找到 ,iic通信结合 我写的IIC通信程序;ARM9串口通信部分网上可以找的到;L3G4200D

和 ADXL345的初始化部分,可以结合 自带的测试代码;VisualScope 通信部分协议部分 就按我贴 出的这部分程序写就可以了.波特率 9600 串口 1 .

转载请表明出处 2440(ARM9) L3G4200D ADXL345 裸机程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: