• 2440(ARM9) L3G4200D ADXL345 裸机程序


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

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

    角速度计:

    核心代码:

     1 #include <S3C2440.H>
     2 #include "serial.h"
     3 #include "iic.h"
     4 #include "L3G4200D.h"
     5 #include "ADXL345.h"
     6 unsigned char data[6];
     7 unsigned char Array[10];
     8 void revise(void);
     9 unsigned int CRC16(unsigned char *Array ,unsigned int Len);
    10 
    11 int main()
    12 {
    13     unsigned int  i;
    14     unsigned int temp; 
    15 //    int pitch=0,yaw=0,roll=1;
    16     //波特率  0x1a   115200     325    9600
    17     init_uart(325);
    18     //程序启动,若输出则串口是正常的
    19     putstring("Serial communication is normal !\r\n");
    20     init_iic();
    21     putstring("Initialize IIC successful !\r\n");
    22     Init_ADXL345();
    23     putstring("Initialize ADXL345 successful !\r\n");
    24     InitL3G4200D() ;
    25     putstring("Initialize L3G4200D successful !\r\n");
    26     while(1)
    27     {
    28         if(0)
    29         {
    30             Multiple_read_ADXL345(data);     //测试加速度计
    31         }
    32         else
    33         {
    34             Multiple_read_L3G4200D(data);      //测试角速度计
    35         }
    36  /*****************************************多余内容,可删除*********************************/
    37         revise();                //数据校正
    38         //Array[6]=Read24C08_nbyte(SlaveAddress_L3G4200D,0x26,1,); //读取温度,温度地址0x26
    39         Array[6]=0x00;
    40         Array[7]=0x00;      //  温度是8位的,故这个赋值给0x00
    41         temp=CRC16(Array,8);
    42         Array[8]=temp&0x00ff;
    43         Array[9]=(temp&0xff00)>>8;
    44  /****************************************************************************************/
    45                                              
    46         for(i=0 ; i<10;i++)
    47         {  
    48             //这里是把数据从串口发送出去
    49             sendchar(Array[i]);          
    50         }
    51     }
    52     
    53     
    54 }
    55 /******************************************************************
    56                            CRC16校验函数
    57 *******************************************************************/
    58 
    59 unsigned int CRC16(unsigned char *Array ,unsigned int Len)          //len在调用时指定为8就OK
    60 {  
    61     // unsigned char *Rcvbuf ;
    62     unsigned int IX,IY,CRC;
    63     CRC=0xffff;   //set all 1
    64     for(IX=0;IX<Len;IX++)
    65     {
    66        CRC=CRC^(unsigned int)(Array[IX]);
    67        for(IY=0;IY<=7;IY++)
    68        {
    69          if((CRC&1)!=0)
    70             CRC=(CRC>>1)^0xA001;         //0xA001是自定义多项式
    71          else 
    72             CRC=CRC>>1;
    73         }
    74      }
    75     return(CRC);    
    76 }
    77 void revise(void)
    78 {
    79     unsigned int dis_data;
    80     dis_data=(data[1]<<8)+data[0];  //合成数据     //进行修正
    81     Array[0]=dis_data&0x00ff;
    82     Array[1]=(dis_data&0xff00)>>8;
    83     dis_data=(data[3]<<8)+data[2];  //合成数据     //进行修正
    84     Array[2]=dis_data&0x00ff;
    85     Array[3]=(dis_data&0xff00)>>8;
    86     Array[4]=data[4];        //把值 给Array数组
    87     Array[5]=data[5];    
    88 }

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

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

    转载请表明出处 2440(ARM9) L3G4200D ADXL345 裸机程序

  • 相关阅读:
    git subtree用法
    Excel导入、导出库:ExcelKit
    [C#.NET 拾遗补漏]08:强大的LINQ
    使用.net standard实现不同内网端口的互通(类似花生壳)
    LINQ:最终统治了所有的语言!
    浅谈代码段加密原理(防止静态分析)
    HashTable、HashSet和Dictionary的区别(转)
    Mysql分表和分区的区别、分库分表介绍与区别
    划词高亮功能的实现附带开源代码
    十个推荐使用的 Laravel 的辅助函数
  • 原文地址:https://www.cnblogs.com/dreamfactory/p/2953005.html
Copyright © 2020-2023  润新知