社区导航

 
查看: 1715|回复: 7

[力学传感器] MSP430FR5969驱动LIS3DSH三轴加速度传感器

[复制链接]

5397

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-1-22 22:38:01 | 显示全部楼层 |阅读模式

LIS3DSH最小评估板焊好很长时间了

前几天一直在调试AD9102

今天抽空用MSP430FR5969测试了一下LIS3DSH

很容易调通

为了方便实时查看波形

改了一个上位机程序

结果上位机出了点问题花了很长时间

最后总算把数据显示出来了

效果还可以

无标题.png

 

 

LIS3DSHMSP430FR5969代码

只做了简单配置

使用轮询读取

/*******************************************************************************

 * Copyright (C), 2017, XiaCheDan Tech. Co., Ltd.

 * FileName: main.c

 * Author: littleshrimp

 * Version : 1.0

 * Date:  2017-1-22 11:13

 * Description:

 * Function List: //

 * 1. -------

 * History:

 * <author>   <time>                <version >  <desc>

 * littleshrimp      2017-1-22 11:13  1.0         build this moudle

 ******************************************************************************/

/*

 

                              MSP430FR5969

                            -----------------

                           |     P2.0/UCA0TXD|----> PC

                           |                     |

                           |                     |

                           |     P2.1/UCA0RXD|<---- PC

                           |                     |

               SCL --o--|P3.5                |

                           |                     |

               SDA --o--|P3.6                |

 

*/

/*******************************************************************************

 *  * INCLUDES

 *  */

 

#include "msp430.h"

#include <stdio.h>

#include <stdint.h>

#include "uart.h"

#include "soft_i2c.h"

#include "timer.h"

/*******************************************************************************

 *  * MACROS

 *  */

 

/*******************************************************************************

 *  * CONSTANTS

 *  */

#define BASE64        0

#define STRING        0

/*******************************************************************************

 *  * TYPEDEFS

 *  */

 

/*******************************************************************************

 *  * GLOBAL VARIABLES

 *  */

 

/*******************************************************************************

 *  * EXTERNAL VARIABLES

 *  */

 

/*******************************************************************************

 *  * EXTERNAL FUNCTIONS

 *  */

 

/*******************************************************************************

 *  * LOCAL VARIABLES

 *  */

 

uint8_t data[3];

uint16_t temp_code;

float temperature;

uint8_t crc;

/*******************************************************************************

 *  * PROFILE CALLBACKS

 *  */

 

/*******************************************************************************

 *  * LOCAL FUNCTIONS

 *  */

 

/*******************************************************************************

 *  * PUBLIC FUNCTIONS

 *  */

 

   

   

#define LIS3DSH_SLAVE_ADDR     (0x1E << 1)//7bit

#define LIS3DSH_WHO_I_AM       0x0F

#define LIS3DSH_OUT_T          0x0C

#define LIS3DSH_STATUS         0x27

#define LIS3DSH_CTRL_REG4      0x20

#define LIS3DSH_CTRL_REG3      0x23

#define LIS3DSH_CTRL_REG5      0x24

#define LIS3DSH_CTRL_REG6      0x25

uint8_t buf[10];

void lis3dsh_init(void)

{ 

    uint8_t data;

    i2c_init();//初始化I2C

    i2c_read_n_byte(LIS3DSH_SLAVE_ADDR,LIS3DSH_WHO_I_AM,&buf[0],1);

//    data = 0x17;//0001:3.125Hz 0:continuous update 111:x,y,z enable

    data = 0x97;//1001:1600Hz 0:continuous update 111:x,y,z enable

    i2c_write_n_byte(LIS3DSH_SLAVE_ADDR,LIS3DSH_CTRL_REG4,&data,1);

    i2c_read_n_byte(LIS3DSH_SLAVE_ADDR,LIS3DSH_OUT_T,&buf[1],1);

    i2c_read_n_byte(LIS3DSH_SLAVE_ADDR,LIS3DSH_STATUS,&buf[2],7);

}

void dco_init(void)

{ 

  // Configure one FRAM waitstate as required by the device datasheet for MCLK

  // operation beyond 8MHz _before_ configuring the clock system.

  FRCTL0 = FRCTLPW | NWAITS_1;

 

  // Clock System Setup

  CSCTL0_H = CSKEY >> 8;                    // Unlock CS registers

  CSCTL1 = DCORSEL | DCOFSEL_4;             // Set DCO to 16MHz

  CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK; // Set SMCLK = MCLK = DCO,

                                            // ACLK = VLOCLK

  CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;     // Set all dividers

  CSCTL0_H = 0;                             // Lock CS registers

}

int main( void )

{

  int16_t x = 0,y = 0,z = 0;

  uint8_t status;

  char inBuf[64];//base64缓存

  char outBuf[64];//base64缓存

  WDTCTL = WDTPW + WDTHOLD;//停止看门狗

  PM5CTL0 &= ~LOCKLPM5;//这个是一定要加的,不然GPIO不能使用

  dco_init();

  lis3dsh_init();

  uart_init();

  while(1)

  {

   

    i2c_read_n_byte(LIS3DSH_SLAVE_ADDR,LIS3DSH_STATUS,&buf[2],7);

 

#if (BASE64 == 1)    //base 64输出

    base64_encode((const uint8_t *)(&buf[2]),outBuf,7); //BASE64转换

    uart_tx_string(outBuf);//输出到PC

    uart_tx_string("\r\n");//换行

#elif (STRING == 1)       //字符串输出    status = buf[2];//status

    x = buf[3] + (buf[4] << 8);

    y = buf[5] + (buf[6] << 8);

    z = buf[7] + (buf[8] << 8);

    sprintf(outBuf,"lis3dsh data out x=%d,y=%d,z=%d\r\n",x,y,z);

    uart_tx_string(outBuf);//输出到PC

    uart_tx_string("\r\n");//换行

    sleep(650);

#else                      //二进制输出

    outBuf[0] = 0x55;

    outBuf[1] = buf[4];

    outBuf[2] = buf[3];

    outBuf[3] = buf[6];

    outBuf[4] = buf[5];

    outBuf[5] = buf[8];

    outBuf[6] = buf[7];

   

//    if(x++ > 1000) x = 0;

//    if(y++ > 10000) y = 0;

//    if(z++ > 30000) y = 0;

//    outBuf[0] = 0x55;

//    outBuf[1] =x>>8;

//    outBuf[2] =x;

//    outBuf[3] = y>>8;

//    outBuf[4] = y;

//    outBuf[5] = z>>8;

//    outBuf[6] = z;

    uart_tx_bytes(outBuf,7);//输出到PC

#endif

    //SPCI2C_Readpt(SPC1000AddrR,0x07,mPress,1);      //获取气压数据高字节:3

  }

}

 


虾扯蛋


回复

使用道具 举报

492

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-24 17:22:09 | 显示全部楼层
版主好强大啊。精度咋样这个模块

点评

手里没有相关的实验环境不好验证啊  详情 回复 发表于 2017-1-24 18:44


回复

使用道具 举报

5397

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2017-1-24 18:44:08 来自手机 | 显示全部楼层


手里没有相关的实验环境不好验证啊

点评

看着不错。灵敏度很高  详情 回复 发表于 2017-1-25 09:47


回复

使用道具 举报

492

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-25 09:47:20 | 显示全部楼层
littleshrimp 发表于 2017-1-24 18:44
手里没有相关的实验环境不好验证啊

看着不错。灵敏度很高

点评

可以看下数据手册 感觉还不错  详情 回复 发表于 2017-1-25 21:20


回复

使用道具 举报

882

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-1-25 20:49:30 来自手机 | 显示全部楼层
谢谢分享和sensortile上的传感器一样不?

点评

和sensortile的不一样 sensortile上使用的都是6轴 G+A A+M,这个是单纯的3轴加速度  详情 回复 发表于 2017-1-25 21:21


回复

使用道具 举报

5397

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2017-1-25 21:20:10 来自手机 | 显示全部楼层


可以看下数据手册 感觉还不错


回复

使用道具 举报

5397

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2017-1-25 21:21:50 来自手机 | 显示全部楼层


和sensortile的不一样 sensortile上使用的都是6轴 G+A A+M,这个是单纯的3轴加速度


回复

使用道具 举报

882

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-1-26 15:11:27 | 显示全部楼层
蓝牙板子的传感器是spi工作模式。
大秦正声蓝牙电子
提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,也支持nrf51822


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-13 14:53 , Processed in 0.247046 second(s), 18 queries , Gzip On, MemCache On.

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