查看: 2855|回复: 3

[原创] [高校争霸赛] LPC824lite读取mpu6050数据正常

[复制链接]
  • TA的每日心情
    开心
    2017-1-13 17:13
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    13

    主题

    166

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    494
    最后登录
    2018-1-6
    发表于 2016-12-20 01:29:58 | 显示全部楼层 |阅读模式
    本帖最后由 191925882 于 2016-12-20 10:53 编辑

    一.团队介绍
    团队名称:
    威武霸气
    项目名称:基于LPC824lite的大棚温度、湿度和压力控制系统(已完结)
    学校:汕头大学
    队员:2


    二.工程介绍
    由于手里有块飞控板,就把里面的程序擦除掉,外接IIC到lpc824lite上面,现在读取ID正常。数据也正常。希望这个工程能帮助大家。可以结合我上一篇来做个水平仪或者通过一个好一点的滤波程序做一个3D显示模型。都是很有趣的。


    接下来上传图片:
    ID都已读正确:

    666.jpg

    5555.jpg


    mpu6050代码:
    1. #include         "IIC.h"
    2. #include        "mpu6050.h"
    3. //#include         <stdint.h>


    4. int32_t jiasuji[3],tuoluoyi[3];


    5. //³õʼ»¯mpu6050
    6. unsigned char bu[1];
    7. void        mpu6050_init(void)
    8. {   
    9.            I2C_Write(LSM6DS3,CTRL1_XL,0x46);
    10.     I2C_Write(LSM6DS3,CTRL2_G,0x4C);        
    11.     I2C_Write(LSM6DS3,CTRL9_XL,0x38);
    12.           I2C_Write(LSM6DS3,CTRL10_C,0x38);
    13.           bu[0]=I2C_Read(LSM6DS3,WHO_AM_I);
    14. }


    15. void        mpu6050_read(void)
    16. {
    17.             
    18. uint8_t buf[15];
    19.         buf[0]=I2C_Read(LSM6DS3,OUTX_H_XL);
    20.         buf[1]=I2C_Read(LSM6DS3,OUTX_L_XL);
    21.         buf[2]=I2C_Read(LSM6DS3,OUTY_H_XL);
    22.         buf[3]=I2C_Read(LSM6DS3,OUTY_L_XL);
    23.         buf[4]=I2C_Read(LSM6DS3,OUTZ_H_XL);
    24.         buf[5]=I2C_Read(LSM6DS3,OUTZ_L_XL);
    25.         buf[6]=I2C_Read(LSM6DS3,OUT_TEMP_H);
    26.         buf[7]=I2C_Read(LSM6DS3,OUT_TEMP_L);
    27.         buf[8]=I2C_Read(LSM6DS3,OUTX_H_G);
    28.         buf[9]=I2C_Read(LSM6DS3,OUTX_L_G);        
    29.         buf[10]=I2C_Read(LSM6DS3,OUTY_H_G);
    30.         buf[11]=I2C_Read(LSM6DS3,OUTY_L_G);
    31.         buf[12]=I2C_Read(LSM6DS3,OUTZ_H_G);
    32.         buf[13]=I2C_Read(LSM6DS3,OUTZ_L_G);               

    33.             jiasuji[0]=(unsigned long)buf[0]<<8|(unsigned long)buf[1];
    34.              jiasuji[1]=(unsigned long)buf[2]<<8|(unsigned long)buf[3];
    35.              jiasuji[2]=(unsigned long)buf[4]<<8|(unsigned long)buf[5];
    36.         
    37.             tuoluoyi[0]=(unsigned long)buf[8]<<8|(unsigned long)buf[9];
    38.              tuoluoyi[1]=(unsigned long)buf[10]<<8|(unsigned long)buf[11];
    39.              tuoluoyi[2]=(unsigned long)buf[12]<<8|(unsigned long)buf[13];
    40. }
    复制代码
    mpu6050.h
    1. #ifndef        MPU6050_H_
    2. #define        MPU6050_H_               

    3. #include        <stdint.h>

    4. //LSM6DS3
    5. //Ò»°ãµÄÅäÖÃ
    6. #define LSM6DS3   0X6A    //SA0½ÓµØʱµÄ´Ó»úµØÖ·
    7. #define CTRL1_XL  0X10
    8. #define CTRL2_G   0X11
    9. #define CTRL9_XL  0X18
    10. #define CTRL10_C  0X19
    11. #define STATUS_REG 0X1E
    12. #define CTRL5_C   0X14
    13. #define INT1_CTRL 0X0D
    14. #define WHO_AM_I  0X0F

    15. //ÍÓÂÝÒǺͼÓËÙ¼ÆÊý¾Ý¼Ä´æÆ÷
    16. #define OUTX_L_G  0X22
    17. #define OUTX_H_G  0X23
    18. #define OUTY_L_G  0X24
    19. #define OUTY_H_G  0X25
    20. #define OUTZ_L_G  0X26
    21. #define OUTZ_H_G  0X27
    22. #define OUTX_L_XL 0X28
    23. #define OUTX_H_XL 0X29
    24. #define OUTY_L_XL 0X2A
    25. #define OUTY_H_XL 0X2B
    26. #define OUTZ_L_XL 0X2C
    27. #define OUTZ_H_XL 0X2D
    28. #define OUT_TEMP_L 0X20
    29. #define OUT_TEMP_H 0X21

    30. #define        MPU6050_GYR_GAIN                0.00106f
    31. void        mpu6050_init(void);
    32. void        mpu6050_read(void);
    33. const        int16_t        *mpu6050_getRamSpf(void);
    34. int16_t        mpu6050_getRamTem(void);
    35. const        int16_t        * mpu6050_getRamOmg(void);
    36. extern   int32_t jiasuji[3],tuoluoyi[3];
    37. #endif        
    复制代码
    IIC.c
    1. #include "IIC.h"
    2. //Ç°ÃæµÄIICºê¶¨Òå
    3. #include        "LSM6DS3.h"
    4. #include         <stdint.h>
    5. #define SDA_High                 Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 10, true)
    6. #define SDA_Low                  Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 10, false)
    7. #define SCL_High                 Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 11, true)
    8. #define SCL_Low                  Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 11, false)
    9. #define SDA_OUT                  Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 10, 1)
    10. #define SDA_IN                   Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 10, 0)
    11. #define SDA_State                 Chip_GPIO_PinGetState(LPC_GPIO_PORT, 0, 10)

    12. //¶¨ÒåÆ÷¼þµØÖ·


    13. //¶¨ÒåһЩÒý½Å
    14. void IIC_init(void)
    15. {
    16.           /*SDA*/
    17.                 Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 10, 1);//set PIO12 output
    18.           SDA_High;   //set PIO12 high logic
    19.           /*SCL*/
    20.           Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 11, 1);//set PIO13 output
    21.           SCL_High;   //set PIO13 high logic
    22.           Board_UARTPutSTR("IIC initialize is OK!\r\n");

    23.                 Board_UARTPutSTR("IIC initialize is OK!\r\n");
    24.     DelayMs(10);
    25. }
    26. void I2C_delay(void)
    27. {
    28.     uint8_t i=3; //ÕâÀï¿ÉÒÔÓÅ»¯ËÙ¶È £¬¾­²âÊÔ×îµÍµ½5»¹ÄÜдÈë
    29.     while(i)  
    30.     {  
    31.       i--;  
    32.     }  
    33. }

    34. /*Delay for 15 usÑÓʱ*/
    35. void IIC_Delay(void)
    36. {
    37.           uint8_t t=15;
    38.                 while( t-- );
    39. }

    40. /*The start signal of IIC BUS*/
    41. void IIC_Start(void)
    42. {
    43.         
    44.           /*SDA=1*/SDA_High;
    45.           /*SCL=1*/SCL_High;

    46.           IIC_Delay();
    47.           /*SDA=0*/SDA_Low;
    48.                 IIC_Delay();
    49.           /*SCL=0*/SCL_Low;
    50.                 IIC_Delay();
    51. }
    52. /*The stop signal of IIC BUS*/
    53. void IIC_Stop(void)
    54. {
    55. //                SDA_Low;
    56.                 SCL_Low;
    57.                 IIC_Delay();
    58.         SDA_Low;
    59.                 IIC_Delay();
    60.           SCL_High;
    61.           IIC_Delay();
    62.           SDA_High;
    63.     IIC_Delay();
    64.          
    65. }
    66. /*The respons signal of IIC BUS*/
    67. void IIC_Ack(void)
    68. {
    69.     SCL_Low;
    70.           IIC_Delay();
    71.           SDA_Low;
    72.           IIC_Delay();
    73.           SCL_High;
    74.           IIC_Delay();
    75.           SCL_Low;
    76.           IIC_Delay();
    77. }
    78. /*The norespons signal of IIC BUS*/

    79. void IIC_NoAck(void)
    80. {
    81.         
    82.           SCL_Low;
    83.           IIC_Delay();
    84.           SDA_High;
    85.                 IIC_Delay();
    86.           SCL_High;
    87.           IIC_Delay();         
    88.           SCL_Low;
    89.                 IIC_Delay();
    90. }
    91. /*Send One Byte by IIC BUS*/
    92. void IIC_SendByte(uint8_t data)
    93. {
    94.   
    95.                 uint8_t i=8;
    96.                 while(i--)
    97.                 {
    98.                         SCL_Low;
    99.                         if(data&0x80)
    100.       SDA_High;
    101.                         else
    102.       SDA_Low;
    103.                         data<<=1;
    104.                         IIC_Delay();
    105.                         SCL_High;
    106.                         IIC_Delay();
    107.                 }
    108.                 SCL_Low;
    109. //                IIC_Delay();

    110. //                SDA_High;
    111. //                IIC_Delay();
    112. //               
    113. //                SCL_High;
    114. //                IIC_Delay();
    115. //               
    116. //                SCL_Low;
    117. }

    118. /*Read One Byte by IIC BUS*/
    119. uint8_t I2C_ReceiveByte(void)
    120. {
    121.   uint8_t i=8;
    122.   uint8_t ReceiveByte=0;

    123.   SDA_High;
    124. //        SDA_IN;
    125.   while(i--)
    126.   {
    127.     ReceiveByte<<=1;
    128.                 SCL_Low;
    129.     IIC_Delay();
    130.                 SCL_High;
    131.                 IIC_Delay();
    132.   
    133.     if(SDA_State)
    134.     {
    135.       ReceiveByte|=0x01;
    136.     }

    137.   }
    138. //  SDA_OUT;
    139.   SCL_Low;

    140.   return ReceiveByte;
    141. }
    142. /*
    143. * I2C_WriteReg
    144. * дI2CÉ豸¼Ä´æÆ÷
    145. */
    146. void I2C_Write(uint8_t dev_addr,uint8_t reg_addr , uint8_t data)
    147. {
    148.   IIC_Start();
    149. IIC_Delay();
    150.   IIC_SendByte(dev_addr<<1);
    151.         IIC_Delay();
    152.   IIC_SendByte(reg_addr );
    153.         IIC_Delay();
    154.   IIC_SendByte(data);
    155. IIC_Delay();
    156.   IIC_Stop();
    157. }

    158. //¶ÁÒ»¸öbufµÄÊý¾Ý
    159. uint8_t I2C_Read(uint8_t dev_addr,uint8_t reg_addr)
    160. {
    161.   uint8_t data;
    162.   IIC_Start();
    163.   IIC_SendByte( dev_addr<<1);
    164.   IIC_SendByte( reg_addr );
    165.   IIC_Start();
    166.   IIC_SendByte((dev_addr<<1)+1);
    167.   data= I2C_ReceiveByte();
    168.   IIC_NoAck();
    169.   IIC_Stop();
    170.   return data;
    171. }
    172. uint8_t I2C_Read_Buf(uint8_t sla_address, uint8_t sub_address,uint8_t        *buf,uint8_t len)
    173. {        int i = 0;
    174.   uint8_t data;
    175.   IIC_Start();
    176.   IIC_SendByte( sla_address<<1);
    177.   IIC_SendByte( sub_address );
    178.   IIC_Start();
    179.   IIC_SendByte((sla_address<<1)+1);
    180.         
    181.         
    182.         for(i=0;i<len-1;i++)
    183.         {
    184.                 buf[i] = I2C_ReceiveByte();
    185.           IIC_Ack();
    186.         }
    187.         buf[i] = I2C_ReceiveByte();
    188.         
    189.   IIC_NoAck();
    190.   IIC_Stop();
    191.   return 1;
    192. }
    193. //¸ßλºÍµØλºÏ²¢
    194. int16_t I2C_ReadWord(uint8_t dev_addr,uint8_t reg_addr)
    195. {
    196.   char h,l;
    197.   IIC_Start();
    198.   IIC_SendByte( dev_addr<<1);
    199.   IIC_SendByte( reg_addr);
    200.   IIC_Start();
    201.   IIC_SendByte((dev_addr<<1)+1);
    202.   h= I2C_ReceiveByte();
    203.   IIC_Ack();
    204.   l= I2C_ReceiveByte();
    205.   IIC_NoAck();
    206.   IIC_Stop();
    207.   return (h<<8)+l;
    208. }





    209. void DelayMs(uint16_t ms)
    210. {   
    211.    uint16_t i=0;  
    212.    while(ms--)
    213.    {
    214.       i=5000;
    215.       while(i--) ;   
    216.    }
    217. }



    复制代码
    iic.h
    1. #ifndef __IIC_H_
    2. #define __IIC_H_

    3. #include "chip.h"
    4. #include "board.h"

    5. uint8_t I2C_ReceiveByte(void);

    6. void I2C_WriteReg(uint8_t dev_addr,uint8_t reg_addr , uint8_t data);
    7. uint8_t IIC_ReadByte(uint8_t dev_addr,uint8_t reg_addr);
    8. int16_t I2C_ReadWord(uint8_t dev_addr,uint8_t reg_addr);
    9. uint8_t I2C_Read(uint8_t dev_addr,uint8_t reg_addr);
    10. void I2C_Write(uint8_t dev_addr,uint8_t reg_addr , uint8_t data);
    11. uint8_t IIC_Read_Buf(uint8_t sla_address, uint8_t sub_address,uint8_t        *buf,uint8_t len);
    12. void I2C_ReadGryo(uint8_t dev_addr,uint8_t reg_addr,int16_t *x,int16_t *y);
    13. void DelayMs(uint16_t ms);

    14. #endif
    复制代码




    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-22 10:11
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    64

    帖子

    0

    注册会员

    Rank: 2

    积分
    186
    最后登录
    2017-1-13
    发表于 2016-12-20 09:03:50 | 显示全部楼层
    团队名字不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:11
  • 签到天数: 821 天

    [LV.10]以坛为家III

    71

    主题

    2447

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5522
    最后登录
    2024-4-27
    发表于 2016-12-20 10:16:42 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-18 20:00
  • 签到天数: 45 天

    [LV.5]常住居民I

    17

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    518
    最后登录
    2019-11-10
    发表于 2016-12-20 10:45:57 | 显示全部楼层
    学习。。。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 06:17 , Processed in 0.139965 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表