使用加速度传感器应该注意几点:

第一:确保你的IIC是正确的;

第二,首先必须校准系统,校准方法,例如以下:将7455平放,保证z轴向下,这是假设系统是Ok的,那么x轴输出为0,y轴输出为0,z轴输出为63左右,假设不为以上參数,应该做例如以下调整:測量值比实际值小的情况下,往校准寄存器里面写入一个2*误差值;假设測量值假设大于实际值,应该写入一个值为相应误差的负值的ASCII码,比方假设測出值为70,那么应该写入-16,即(0xf0);

下面就是我调试mma7455的代码:

#include "msp430f5438.h"
#include "public.h"
#include "simulate_iic.h"
#include <stdbool.h>#include "init.h"#include "mma7455.h"
#include "lcd1602.h"
#include<math.h>
typedef unsigned int uint;
typedef unsigned char uchar;
char mma7455write_byte(unsigned char reg,unsigned char data)//寄存器地址,数据
{char flag;// WDTCTL = WDTPW + WDTHOLD; // 禁止看门狗定时器iic_start();//起始信号write_byte(0x3a);//数据发送flag=get_ack();//接受应答位,即数据成功发送后,接受到的应答if(flag) {flag=0;write_byte(reg);//数据发送}flag=get_ack();//接受应答位,即数据成功发送后,接受到的应答if(flag){flag=0;write_byte(data);}flag=get_ack();if(flag){flag=0;iic_stop();return 0;}return 1;}char readMMA7455Byte(unsigned char regadd)
{char flag;char z;z=0;iic_start();write_byte(0x3a);//先写入器件地址flag=get_ack();if(flag){write_byte(regadd);//有应答之后再写寄存器地址flag=0;}flag=get_ack();if(flag){flag=0;iic_start();//继续等应答之后写入该地址和读命令,但是认为这不必要这么做write_byte(0x3b);//但是时间的原因,仅仅有找着实例的操作先写着,以后再改动}flag=get_ack();if(flag){flag=0;z=read_byte();}send_ack();iic_stop();return z;}
// X:255 1.65V -1.00g
// 012345678901234567
void Cvt_Str(char zifu[], char V1)
{char characters[17]="0123456789ABCDEF";char tv=0;tv=V1/100;zifu[2] = characters[tv];tv=(V1%100)/10;zifu[3] = characters[tv];tv=V1%10;zifu[4] = characters[tv];zifu[5] = ' ';zifu[6] = '0';zifu[7] = 'x';tv=V1/16;zifu[8] = characters[tv];tv=V1%16;zifu[9] = characters[tv];zifu[10] = ' ';if(V1>127){zifu[11] = '-';tv=255-V1;zifu[12] = characters[tv/63];zifu[13] = '.';zifu[14] = characters[((tv*100/63)%100)/10];zifu[15] = characters[(tv*100/63)%10];}else{zifu[11] = '+';tv=V1;zifu[12] = characters[tv/63];zifu[13] = '.';zifu[14] = characters[((tv*100/63)%100)/10];zifu[15] = characters[(tv*100/63)%10];}zifu[16] = 'g';
}
uint    arc_tan2(uchar Ax,uchar Ay)
{int    diat_t;float        m;m=atan2(Ay,Ax);diat_t=(int)(m*1800/3.14);return diat_t;
}
uint measure()
{uchar x;uchar y;uint x1,y1;uchar   xsign,ysign;uint angle;angle=0;x=readMMA7455Byte(0x06);y=readMMA7455Byte(0x07);x=x+0x2C;y=y+0x25;if(x>127){x=255-x;x1=((float)x*100)/63.0;xsign=0x2b;}else{x1=((float)x*100)/63.0;xsign=0x2d;}if(y>127){y=255-y;y1=((float)y*100)/63.0;ysign=0x2b;}else{y1=((float)y*100)/63.0;ysign=0x2d;}angle = arc_tan2(x1,y1);/*if(xsign==0x2b&&ysign==0x2b){angle = arc_tan2(x1,y1);}else    if(xsign==0x2b&&ysign==0x2d){angle = 900+arc_tan2(y1,x1);;}else   if(xsign==0x2d&&ysign==0x2d){angle = 2700-angle;}else  if(xsign==0x2d&&ysign==0x2b){angle = 2700+angle;}*/return angle;
}
void main()
{char txtbuf[16]="X:255 -1.00g";//uchar x,y,x2,y2;//volatile uint x1,y1;// uchar j,k;clk_init();lcd1602_pin_init();lcd_init();delay_ms(50);while(mma7455write_byte(0x16,0x005));while(mma7455write_byte(0x10,0xff));//校正X值while(mma7455write_byte(0x11,0x07));while(mma7455write_byte(0x12,0x18));//校正Y值while(mma7455write_byte(0x14,0xDC));//校正Z值while(mma7455write_byte(0x15,0xFF));while(1){/*lcd_pos(0,0);lcd_wdat('a');lcd_wdat('n');lcd_wdat('g');lcd_wdat('l');lcd_wdat('e');lcd_wdat(':');lcd_printf(measure());//x//delay_ms(1000);//lcd_wcmd(0x01);    */      //显示清屏/*x=readMMA7455Byte(0x06);y=readMMA7455Byte(0x07);x2=x+0x2C;y2=y+0x25;x=x+0x2C;y=y+0x25;if(x>0x7f){x=255-x;j=1;x1=((float)x*100)/63.0;}else{x1=((float)x*100)/63.0;j=0;}if(y>0x7f){y=255-y;y1=((float)y*100)/63.0;k=1;}else{y1=((float)y*100)/63.0;k=0;}lcd_pos(0,0);if(j==1) lcd_wdat('-');else lcd_wdat('+');lcd_char(x1);lcd_pos(0,1);if(k==1) lcd_wdat('-');else lcd_wdat('+');lcd_char(y1);delay_ms(1000);lcd_wcmd(0x01);lcd_pos(0,0);Cvt_Str(txtbuf,x2);txtbuf[0]='X';lcd_string(txtbuf);lcd_pos(0,1);Cvt_Str(txtbuf,y2);txtbuf[0]='Y';lcd_string(txtbuf);delay_ms(1000);lcd_wcmd(0x01);*/            //显示清屏lcd_pos(0,0);Cvt_Str(txtbuf,readMMA7455Byte(0x08));txtbuf[0]='Z';lcd_string(txtbuf);lcd_pos(0,1);lcd_printf(arc_tan2(readMMA7455Byte(0x08),readMMA7455Byte(0x06)));delay_ms(1000);lcd_wcmd(0x01);          //显示清屏lcd_pos(0,1);Cvt_Str(txtbuf,readMMA7455Byte(0x06));txtbuf[0]='X';lcd_string(txtbuf);lcd_pos(0,0);Cvt_Str(txtbuf,readMMA7455Byte(0x07));txtbuf[0]='Y';lcd_string(txtbuf);delay_ms(1000);lcd_wcmd(0x01);          //显示清屏}
}

MMA7455加速度传感器測量角度相关推荐

  1. ST公司 Lis2dh12 三轴加速度传感器,计算加速度值转成角度值

    目录 概述 项目上使用了一款Lis2dh12三轴加速度传感器.开发前要准备的工作. 1.原理图: 1.1.创建lis2dh12.c文件 1.2.在此重点说明,如果想调传感器的中断灵敏度,注意:关注1. ...

  2. 加速度传感器采集的加速度值有没有必要转换为位移量

    **加速度传感器采集的加速度值有没有必要转换为位移量** 加速度信号转换为位移量可以通过两种方法:时域积分和频域积分.在时域中积分,方法简单,但由于测试上原因,所测得的加速度信号均值不为零,经二次积分 ...

  3. C#编写Modbus协议加速度传感器上位机

    C#编写Modbus协议加速度传感器上位机 项目概述 功能描述 上位机原理 初始化连接 读取寄存器原始数据 换算为实际物理量 自动模式 数据保存 数据可视化分析 尾言 项目概述 笔者利用下班时间,编写 ...

  4. 如何选用加速度传感器

    加速度传感器是一种能够测量加速力的电子设备.加速力就是当物体在加速过程中作用在物体上的力,就好比地球引力,也就是重力.加速力可以是个常量,比如g,也可以是变量.加速度计有两种:一种是角加速度计,是由陀 ...

  5. 带你了解加速度传感器的几种应用

    加速度传感器是一种能够测量加速力的电子设备.加速力也就是当物体在加速过程中作用在物体上的力.加速度传感器有两种:一种是角加速度传感器,是由陀螺仪改进过来的.另一种就是线加速度传感器.它也可以按测量轴分 ...

  6. 【Espruino】NO.12 加速度传感器演示

    http://blog.csdn.net/qwert1213131/article/details/31035403 本文属于个人理解,能力有限,纰漏在所难免.还望指正! [小鱼有点电] [Espru ...

  7. 三轴加速度传感器和六轴惯性传感器_一文读懂汽车MEMS惯性传感器的七大应用(上)...

    本文中,我们将研究汽车MEMS惯性传感器的应用,描述它们的工作原理,并讨论如何利用MEMS惯性传感器来实现更大的应用改进. 当前,微机电系统(MEMS)传感器已被大多数汽车工程师视为尖端技术或边缘技术 ...

  8. 图像类似度測量与模板匹配总结

    摘要 本文主要总结了进行目标跟踪.检測中常常使用到的图像相似度測量和模板匹配方法,并给出了详细的基于OpenCV的代码实现. 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技术,经常常使用 ...

  9. 溢出检测单符号位法_设计经验:如何用三轴加速度传感器检测倾斜角?

    本文介绍了三轴加速度传感器的特性,并通过一个典型的应用--检测倾斜角--对单轴.双轴和三轴加速度传感器进行了比较,并给出了选型建议. 在前两篇文章中,我们介绍了单/双轴加速度传感器在来检测倾斜角上的应 ...

  10. linux加速度传感器校准,加速度传感器校准方法及装置与流程

    本申请涉及传感器校准领域,具体而言,涉及一种加速度传感器校准方法及装置. 背景技术: 在移动终端中,导航软件的使用频率越来越高,比如说百度地图.高德导航等.目前,移动终端通常包含加速度传感器,在导航过 ...

最新文章

  1. DDD 领域驱动设计-如何 DDD?
  2. 分类9个无理数并比较他们之间的分布差异
  3. “最害怕过周末”、“希望每天都干活”、“水电费又白交了”
  4. mybatis反射的核心类
  5. 容器学习 之 容器命令(八)
  6. angularjs ng-click传参控制ng-repeat元素显示与隐藏
  7. 心理学专业学要学计算机吗,心理学专业学什么 都有哪些课程
  8. HtmlAgilityPack.dll的使用 获取HTMLid
  9. GEE学习记录(四)基于NPP和GPP数据集产生NPP8天、月度数据
  10. odb格式Linux,ODB格式文件 如何打开ODB文件 ODB是什么格式的文件 用什么打开 - The X 在线工具...
  11. TS-Function
  12. Scratch 游戏项目学习法 —— 接苹果(六)让苹果掉到下面
  13. Amoeba配置读写分离
  14. mysql入库字段编码导致报错 Incorrect string value: ‘\xF0\x9F\x91\xBD\xF0\x9F...‘ for column ‘content‘
  15. 安卓Vitamio播放课程视频
  16. org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connec
  17. 最强大脑记忆曲线(12)-- 录入数据修改
  18. C++的字符串输入方式
  19. 织梦模板下载:驾驶学校汽车类行业网站织梦模板
  20. 360极速浏览器内核切换设置

热门文章

  1. 兼容性和浏览器hack
  2. 关于FeedSky话题广告
  3. 金融工程学(六):互换的定价与风险分析
  4. 有甲乙丙丁四个字,取出任意三个字,打印所有可能性
  5. C/C++常用工具一览
  6. BuBu笔记——MyBatis进阶-多表查询(秃头BUBu的超详细备注,一定要看哦)
  7. 前端人员的服务端实用学习建议
  8. 2.2.9 12306火车订票验证码处理
  9. 计算机如何取消自动关机,电脑怎么设置自动关机及取消自动关机
  10. 如何将各种电子书格式转换为PDF格式