OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 27404|回复: 25

共享:加速度传感器MMA7455+1602+AT89S52

[复制链接]

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
发表于 2011-1-22 10:09:23 | 显示全部楼层 |阅读模式

这是本人曾经做过的一个项目,多多交流!











/*********************************************/
/*程序功能:飞思卡尔加速度传感器MMA7455娱乐仪*/
/*程序模块:1、LED阵列显示模块               */
/*          2、1602显示模块                  */
/*          3、I2C通信模块                   */
/*          4、按键控制模块                  */
/*程序最后修改日期:2010年11月8日星期一      */
/*作者:山西太原瑞生嵌入式                   */
/*联系方式:QQ:   253057617                  */
/*          旺旺:qq253057617                */
/*          E-mail:richgood@163.com          */
/*********************************************/

#include <reg52.h>
#include <intrins.h> //要用到_nop_();函数

#define uchar unsigned char
#define uint  unsigned int
/***************************************************************************/
/***********               单片机引脚定义                       ************/
/***************************************************************************/
sbit set_key =P3^2;         //设置按钮
sbit jia_key =P1^7;   //加按钮
sbit jian_key=P1^6;   //减按钮
sbit sda=P2^3;              //I2C 数据传送位
sbit scl=P2^4;              //I2C 时钟传送位
sbit rs=P2^5;    //1602RS控制位
sbit rw=P2^6;    //1602RW控制位
sbit e =P2^7;    //1602E 控制位

/******************************************************************************/
/**********                     数据部分                            ***********/
/******************************************************************************/
#define IIC_READ  0x1D      //定义读指令
#define IIC_WRITE 0x1D      //定义写指令

uchar set_key_sign;   //是否在设置状态标志
uchar delaysign;   //视觉停留标志

uchar xposivalue;   //x正方向满格显示g值
uchar xnegavalue;   //x反方向满格显示g值
uchar yposivalue;   //y正方向满格显示g值
uchar ynegavalue;   //y反方向满格显示g值
//11111111 11111110 11111100 --- 10000000 00000000 led_ma:i为亮灯数量
uchar led_ma[9]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; 
uchar xposiupstate;   //x正方向上8个LED显示状态
uchar xposidownstate;  //x正方向下8个LED显示状态
uchar xnegaupstate;   //x反方向上8个LED显示状态
uchar xnegadownstate;  //x反方向下8个LED显示状态
uchar yupstate;    //y方向上8个LED显示状态
uchar ydownstate;   //y方向下8个LED显示状态
uchar xposilightnum;  //x正方向亮灯数量(1——16)
uchar xnegalightnum;  //x反方向亮灯数量(1——16)
uchar yposilightnum;  //y正方向亮灯数量(1——8)
uchar ynegalightnum;  //x正方向亮灯数量(1——8)

uchar  ack_sign;   //I2C 应答标志
uchar table1[16]=" hello!  X= 0.00";  //1602显示数据
uchar table2[16]=" Y= 0.00 Z= 0.00";
uchar table3[16]="No acceleration!";
uchar table4[10]="0123456789";
uchar table5[8] ="Warning!";
uchar table7[16]="value:   X=0.50 ";

/**************************************************************************/
/************                  各延时程序                    **************/
/**************************************************************************/
void iic_delay()        //5us延时
{
 _nop_();
 _nop_();
 _nop_();
 _nop_();
}

void delay()   //消除按键抖动
{
  unsigned int i;
  for(i=0;i<20000;i++);
}
void delay_50us(uint t)
{
    uchar j;
 for(;t>0;t--)
 for(j=19;j>0;j--);
}
void delay_50ms(uchar t)
{
    uint j;
 for(;t>0;t--)
 for(j=6245;j>0;j--);
}
/************************************************************************/
/**************                  1602显示部分           *****************/
/************************************************************************/
void  write_com(uchar com)    //函数功能:写指令
{
    e=0;
 rs=0;
 rw=0;
 0=com;
 delay_50us(10);
 e=1;
 delay_50us(20);
 e=0;
}
void write_date(uchar dat)    //函数功能:写数据
{
    e=0;
 rs=1;
 rw=0;
 0=dat;
 delay_50us(10);
 e=1;
 delay_50us(20);
 e=0;
}

void init1602(void)      //函数功能:初始化1602
{
    delay_50us(300);
 write_com(0x38);
 delay_50us(100);
 write_com(0x38);
 delay_50us(100);
 write_com(0x38);
 write_com(0x38);
 write_com(0x01);
 write_com(0x01);
 write_com(0x06);
 write_com(0x0c);
}
/*********************************************************************/
/**************               I2C通信部分              ***************/
/*********************************************************************/
void iic_start()               //函数功能:I2C通信开始
{
 sda=1;
    iic_delay();
 scl=1;
    iic_delay();
 sda=0;
 iic_delay();
 
}

void iic_stop()                //函数功能:I2C通信停止
{
 sda=0;
 iic_delay();
 scl=1;
 iic_delay();
 sda=1;
 iic_delay();
 
}

void iic_ack()                 //函数功能:I2C通信查应答位

    sda=1;
 scl=1;
 iic_delay();
 ack_sign=sda;
 scl=0;   
}

void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节
{
     uchar i,temp,temp1;

  temp1=wdata;
     for(i=0;i<8;i++)
 {
             scl = 0;
    iic_delay();
    temp=temp1;
    temp=temp&0x80;
    if(temp==0x80)
     sda=1;    
    else
     sda=0;
     iic_delay();
     scl=1;
     iic_delay();
     scl=0;
     iic_delay();
     temp1=temp1<<1;
   
 }

}
char iic_read_byte(void)    //函数功能:从I2C从机中读出一个字节
{
     uchar x;
  char data_data;
     for(x=0;x<8;x++)
 { 
     data_data=data_data<<1;
  sda=1;
  iic_delay();
  scl=0;
  iic_delay();
  scl=1;
  iic_delay();
  if(sda==1)
     data_data|=0x01;
  //else 
  //   data_data&=0xfe;
 }
 return data_data;
}
void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据
{
     uchar t;
  t=(IIC_WRITE<<1);
  iic_start();
  iic_write_byte(t);
  iic_ack();
  iic_write_byte(byte_add);
  iic_ack();
  iic_write_byte(wdata);
  iic_ack();
  iic_stop();
}
char iic_read(uchar byte_add)            //函数功能:按地址读出一字节数据
{
     uchar t;
  char x;
  t=(IIC_WRITE<<1);
  iic_start();
  iic_write_byte(t);
  iic_ack();
  iic_write_byte(byte_add);
  iic_ack();
  t=((IIC_READ<<1)|0x01);
  iic_start();
  iic_write_byte(t);
  iic_ack();
  x=iic_read_byte();
  iic_ack();
  iic_stop();
  return x;
}
/************************************************************************/
/*************               LED显示阵列部分               **************/
/************************************************************************/
void led_send(unsigned char t)      //函数功能:8051单片机串行通信发送   
{
    SBUF=t;
 while(!TI);
 TI=0;
}

void led_show()       //函数功能:LED面板显示输出
{
 led_send(xnegaupstate);
 led_send(xnegadownstate);
 led_send(xposiupstate);
 led_send(xposidownstate);
 led_send(yupstate );
 led_send(ydownstate);
   
}
void led_init()       //函数功能:初始化LED面板
{
 SCON=0x00;
 xposiupstate  =led_ma[0];
 xposidownstate=led_ma[1];
 xnegaupstate  =led_ma[0];
 xnegadownstate=led_ma[1];
 yupstate      =led_ma[1];
 ydownstate    =led_ma[0];
 led_show();
  
}
          
void led_xposizhi()       //函数功能:获取x正方向显示数据
{
 if(xposilightnum<8)
 {
  if(xposilightnum==0)xposilightnum=1;
  xposiupstate  =led_ma[0];
  xposidownstate=led_ma[xposilightnum];
 }
 else
 {
   if(xposilightnum>16)xposilightnum=16;
  xposiupstate  =led_ma[xposilightnum-8];
  xposidownstate=led_ma[8];
 }
}
void led_xnegazhi()       //函数功能:获取x负方向显示数据
{
 if(xnegalightnum<8)
 {
  if(xnegalightnum==0)xnegalightnum=1;
  xnegaupstate  =led_ma[0];
  xnegadownstate=led_ma[xnegalightnum];
 }
 else
 {
   if(xnegalightnum>16)xnegalightnum=16;
  xnegaupstate  =led_ma[xnegalightnum-8];
  xnegadownstate=led_ma[8];
 }
}
void led_yposizhi()        //函数功能:获取y正方向显示数据
{
 if(yposilightnum<8)
 {
  if(yposilightnum==0)yposilightnum=1;
  yupstate  =led_ma[yposilightnum];
 }
 else yupstate=led_ma[8];

}
void led_ynegazhi()      //函数功能:获取y反方向显示数据
{
 switch(ynegalightnum)
 {
  case 0:ydownstate=0xff;break;
  case 1:ydownstate=0x7f;break;
  case 2:ydownstate=0x3f;break;
  case 3:ydownstate=0x1f;break;
  case 4:ydownstate=0x0f;break;
  case 5:ydownstate=0x07;break;
  case 6:ydownstate=0x03;break;
  case 7:ydownstate=0x01;break;
  case 8:ydownstate=0x00;break;
  default:ydownstate=0x00;break;
 }
}


void self_test7455()      //函数功能:检测7455有没有插好
{           //          如果没有插好,1602将会显示
 uchar j;        //    “No acceleration!"
 char t;

 delay_50us(10);
 iic_write(0x16,0x05);
 delay_50us(20);
 t=iic_read(0x16);

 if(t!=0x05)
 {
  write_com(0x80);
  for(j=0;j<16;j++)
  {
      write_date(table3[j]);
   delay_50us(10);
  }
  while(1);
 }
 else
 {
  write_com(0x80);
  for(j=0;j<16;j++)
  {
      write_date(table1[j]);
   delay_50us(10);
  }
  write_com(0x80+0x40);
  for(j=0;j<16;j++)
  {
      write_date(table2[j]);
   delay_50us(10);
  }
 }
  
}
void change_topvalue(uchar x)  //函数功能:修改LED面板显示对应的最大g值
{
 uchar x1,x2,x3;

 x1=(x/100);
 x2=(x%100)/10;
 x3=(x%100)%10;

 write_com(0xcb);
 write_date(table4[x1]);
 delay_50us(10);
 write_com(0xcd);
 write_date(table4[x2]);
 delay_50us(10);
 write_date(table4[x3]);
 delay_50us(10);
}

void sendx()      //函数功能:向1602发送x轴测量数据
{
 uchar x1,x2,x3,xsign;
 char x;

 x=iic_read(0x06);
 if((x&0x80)==0x00)
 {
  xsign=0x2b;        //+
  if(x>64)
  {
   x=(((int)(x*200)/127)-100);  //转变为加速度值
   x1=(x/100);
   x2=(x%100)/10;
   x3=(x%100)%10;
   delaysign=1;
   xposilightnum=x/(xposivalue/16);
  }
  else
  {
    x1=0;x2=0;x3=0;
   delaysign=0;
  }
 }
 else
 {
   xsign=0x2d;        //-
  x=x-0x01;
  x=~x;
  if(x>64)
  {
   x=(((int)(x*200)/127)-100);
   x1=(x/100);
   x2=(x%100)/10;
   x3=(x%100)%10;
   delaysign=1;
   xnegalightnum=x/(xnegavalue/16);

  }
  else
  {
   x1=0;x2=0;x3=0;
   delaysign=0;
  }
 }

 write_com(0x8B);
 write_date(xsign);
 delay_50us(10);
 write_com(0x8C);
 write_date(table4[x1]);
 delay_50us(10);
 write_com(0x8E);
 write_date(table4[x2]);
 delay_50us(10);
 write_com(0x8F);
 write_date(table4[x3]);
 delay_50us(20);
}
void sendy()        //函数功能:向1602发送y轴测量数据
{
 uchar y1,y2,y3,ysign;
 char y;

 y=iic_read(0x07);
 if((y&0x80)==0x00)
 {
  ysign=0x2b;        //+
  if(y>66)
  {
   y=(((int)(y*200)/127)-100);  //转变为加速度值
   y1=(y/100);
   y2=(y%100)/10;
   y3=(y%100)%10;
   delaysign=1;
   yposilightnum=y/(yposivalue/8);
  }
  else
  {
    y1=0;y2=0;y3=0;
   delaysign=0;
  }
 }
 else
 {
   ysign=0x2d;        //-
  y=y-0x01;
  y=~y;
  if(y>66)
  {
   y=(((int)(y*200)/127)-100);  //转变为加速度值
   y1=(y/100);
   y2=(y%100)/10;
   y3=(y%100)%10;
   delaysign=1;
   ynegalightnum=y/(ynegavalue/8);
  }
  else
  {
   y1=0;y2=0;y3=0;
   delaysign=0;
  }
 }

 write_com(0xC3);
 write_date(ysign);
 delay_50us(10);
 write_com(0xC4);
 write_date(table4[y1]);
 delay_50us(10);
 write_com(0xC6);
 write_date(table4[y2]);
 delay_50us(10);
 write_com(0xC7);
 write_date(table4[y3]);
 delay_50us(20);
}
void sendz()        //函数功能:向1602发送z轴测量数据
{
 uchar z1,z2,z3,zsign;
 char z;

 z=iic_read(0x08);
 if((z&0x80)==0x00)
 {
  zsign=0x2b;        //+
  if(z>68)
  {
   z=(((int)((z-3)*200)/127)-100);  //转变为加速度值
   z1=(z/100);
   z2=(z%100)/10;
   z3=(z%100)%10;
   delaysign=1;
  }
  else
  {
    z1=0;z2=0;z3=0;
   delaysign=0;
  }
 }
 else
 {
   zsign=0x2d;        //-
  z=z-0x01;
  z=~z;
  if(z>62)
  {
   z=(((int)(z*200)/127)-100);  //转变为加速度值
   z1=(z/100);
   z2=(z%100)/10;
   z3=(z%100)%10;
   delaysign=1;
  }
  else
  {
   z1=0;z2=0;z3=0;
   delaysign=0;
  }
 }

 write_com(0xCB);
 write_date(zsign);
 delay_50us(10);
 write_com(0xCC);
 write_date(table4[z1]);
 delay_50us(10);
 write_com(0xCE);
 write_date(table4[z2]);
 delay_50us(10);
 write_com(0xCF);
 write_date(table4[z3]);
 delay_50us(20);
}
/******************************************************************/
/**************           按键检测部分               **************/
/******************************************************************/
void key_check()     
{
 uchar i,j;
 
 i=1;
key:if(!set_key)
 {
  delay();
  if(!set_key)
  {
    set_key_sign=1;
   switch(i)
   {
    case 1:
     write_com(0x80);
     write_date(0x50);//P
     delay_50us(10);
     write_date(0x6c);//l
     delay_50us(10);
     write_date(0x65);//e
     delay_50us(10);
     write_date(0x61);//a
     delay_50us(10);
     write_date(0x73);//s
     delay_50us(10);
     write_date(0x65);//e
     delay_50us(10);
     write_date(0x20);//空
     delay_50us(10);
     write_date(0x69);//i
     delay_50us(10);
     write_date(0x6f);//n
     delay_50us(10);
     write_date(0x70);//p
     delay_50us(10);
     write_date(0x75);//u
     delay_50us(10);
     write_date(0x74);//t
     delay_50us(10);
     write_date(0x20);//空
     delay_50us(10);
     write_date(0x58);//X
     delay_50us(10);
     write_date(0x2b);//+
     delay_50us(10);
     write_date(0x20);//空
     delay_50us(10);
     write_com(0xc0);
     for(j=0;j<16;j++)
     {
         write_date(table7[j]);
      delay_50us(10);
     }
     change_topvalue(xposivalue);
     i++;
     break;
    case 2:
     write_com(0x8e);
     write_date(0x2d); //输出负号
     delay_50us(10);
     change_topvalue(xnegavalue);
     i++;
     break;
    case 3:
     write_com(0x8d);
     write_date(0x59); //输出Y
     delay_50us(10);
     write_date(0x2b); //输出+
     delay_50us(10);
     write_com(0xc9);
     write_date(0x59); //输出Y
     delay_50us(10);
     change_topvalue(yposivalue);
     i++;
     break;
    case 4:
     write_com(0x8e);
     write_date(0x2d); //输出负号
     change_topvalue(ynegavalue);
     i++;
     break;
    case 5:
     i=1;
     set_key_sign=0;
     write_com(0x80);
     for(j=0;j<8;j++)
     {
         write_date(table5[j]);
      delay_50us(10);
     }
      write_com(0x88);
     for(j=8;j<16;j++)
     {
         write_date(table1[j]);
      delay_50us(10);
     }
     write_com(0xc0);
     for(j=0;j<16;j++)
     {
         write_date(table2[j]);
      delay_50us(10);
     }
     break;
    default:break;
     
   } 
  } 
 }

 if(set_key_sign)
 {
  if(!jia_key)
  {
   delay();
   if(!jia_key)
   {
    switch(i-1)
    {
      case 1:
      if(xposivalue!=100)
      {
       xposivalue++;
       change_topvalue(xposivalue);
      }
      break;
     case 2:
      if(xnegavalue!=100)
      {
       xnegavalue++;
       change_topvalue(xnegavalue);
      }
      break;
     case 3:
      if(yposivalue!=100)
      {
       yposivalue++;
       change_topvalue(yposivalue);
      }
      break;
     case 4:
      if(ynegavalue!=100)
      {
       ynegavalue++;
       change_topvalue(ynegavalue);
      }
      break;
     default:break;
    }
   }

  }
  if(!jian_key)
  {
    delay();
   if(!jian_key)
   {
    switch(i-1)
    {
      case 1:
      if(xposivalue!=0)
      {
       xposivalue--;
       change_topvalue(xposivalue);
      } 
      break;
     case 2:
      if(xnegavalue!=0)
      {
       xnegavalue--;
       change_topvalue(xnegavalue);
      }
      break;
     case 3:
      if(yposivalue!=0)
      {
       yposivalue--;
       change_topvalue(yposivalue);
      } 
      break;
     case 4:
      if(ynegavalue!=0)
      {
       ynegavalue--;
       change_topvalue(ynegavalue);
      }
      break;
     default:break;
    }
   }
  }
 }
 if(set_key_sign)goto key;
}
/***********************************************************/
/****************          主函数           ****************/
/***********************************************************/
void data_init()
{
 set_key_sign=0;
 xposivalue=50;
 xnegavalue=50;
 yposivalue=50;
 ynegavalue=50;
}
void main()
{
 uchar j;

 led_init();
 init1602();
 self_test7455();
 data_init();

 iic_write(0x10,0x32);//校正X值
 iic_write(0x12,0x62);//校正Y值

 delay_50ms(20);

 write_com(0x80);
 for(j=0;j<8;j++)
 {
  write_date(table5[j]);
  delay_50us(10);
 }

 while(1)
 { 
  key_check();
  sendx();
  if(delaysign)
  {
   led_xposizhi();
   led_xnegazhi();
   led_show();
   delay_50ms(4);
   led_init();
   xposilightnum=1;
   xnegalightnum=1;
  }
  sendy();
  if(delaysign)
  {
   led_yposizhi();
   led_ynegazhi();
   led_show();
   delay_50ms(4);
   led_init();
   ynegalightnum=0;
   yposilightnum=1;
  }
  led_init();
  sendz();
  if(delaysign)delay_50ms(4);
 } 
}
/*****  完  .*****/

mma7455ok.zip

53.79 KB, 下载次数: 1771

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-1-22 10:39:22 | 显示全部楼层
这个项目做啥用的?
MMA7455 用起来怎么样?
比如我把7455斜着放,会不会读出相应的数据?超各个角度呢?会有相应的数据变化吧?
我打算用mma7660,不过现在还没用它,想先了解下。先谢谢了!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

19

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2010-12-14
在线时间
0 小时
 楼主| 发表于 2011-1-22 17:42:23 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
很好用的。也很简单。MMA7455是三维的,可以测量三维空间X,Y,Z方向上的加速度,通过分别读XYZ轴寄存器的值,就可以知道物体摆放的正反以及角度,因为各个轴的值是有正负的么,通过正负就可以判读各个轴的正反,在经过计算就可以知道角度。
   与MCU通信可采用I2C和SPI两种方式。内部有32个寄存器,有的可读可写,有的只读,地址为00H到1FH。
   单片机运行后,给7455寄存器地址16H中写入值05H:
   iic_write(0x16,0x05);
    现在即可从7455寄存器地址06H,07H,08H中分别读取X,Y,Z轴的加速度值:
   x=iic_read(0x06);
     y=iic_read(0x07);
     z=iic_read(0x08);
最简单的使用方式当然不能满足任何产品的要求。只能用来测试你的通信程序是否可以正常使用。
要想精确的话,需要操作寄存器调节XYZ轴的调零寄存器。
   想复杂一点的应用,就看看数据手册吧!

略懂!略懂!
回复 支持 反对

使用道具 举报

4

主题

13

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2010-12-14
在线时间
1 小时
发表于 2011-2-3 21:47:44 | 显示全部楼层
非常好的帖子~可以作为朋友们应用系统的一部分参考~强烈至酷~
while(1);
回复 支持 反对

使用道具 举报

5

主题

53

帖子

4

精华

高级会员

Rank: 4

积分
675
金钱
675
注册时间
2010-12-14
在线时间
8 小时
发表于 2011-2-5 09:44:40 | 显示全部楼层
 绝对好东西!加速度传感器可以做很多有用的东西。
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2011-1-14
在线时间
0 小时
发表于 2011-2-11 17:13:58 | 显示全部楼层
难的,说明很细,呵呵顶一个
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-4-10
在线时间
4 小时
发表于 2011-4-10 08:20:12 | 显示全部楼层
绝对震撼的资料啊,很有用,可以做那种加速度感知遥控器,为什么51单片机板块只有一页啊?新手报到
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-4-10 09:53:00 | 显示全部楼层
回复【7楼】clr110110:
-------------------------------
那需要大家多来发帖,发资料,我们的论坛才能更有效的为大家服务啊。
讲求开源共享,共同进步。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2011-11-21 01:04:57 | 显示全部楼层
好强大研究下模块
回复 支持 反对

使用道具 举报

36

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2012-1-21
在线时间
12 小时
发表于 2012-3-19 14:37:47 | 显示全部楼层
mar
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2012-8-15
在线时间
0 小时
发表于 2012-8-15 11:55:44 | 显示全部楼层
楼主的数据处理中 的语句   z=(((int)((z-3)*200)/127)-100);  //转变为加速度值
为什么说这样就得到了加速度呢?不理解其中的数值意义,请赐教
回复 支持 反对

使用道具 举报

11

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2012-2-17
在线时间
0 小时
发表于 2012-10-8 19:36:03 | 显示全部楼层
回复【11楼】suxkd:

---------------------------------
一般你可以根据数据手册的灵敏度换算就可以得出
比如你设置为正负2000°测量范围,而设置的输出分辨率为13位
则你的灵敏度因子为  (2000*2)/(2的13次方-1)
然后根据你测量的输出除去上述的灵敏度因子就可以得角速度或者加速度值
那些年,我们一起走过的日子...
回复 支持 反对

使用道具 举报

10

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2011-1-15
在线时间
5 小时
发表于 2012-10-9 08:40:20 | 显示全部楼层
mark一下
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2012-10-10 20:03:38 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2012-12-9
在线时间
0 小时
发表于 2013-1-12 15:19:32 | 显示全部楼层
MARK
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-3-24
在线时间
0 小时
发表于 2013-4-2 20:20:11 | 显示全部楼层
回复【楼主位】richgood518:
---------------------------------
请教一下,静止时原始数据是稳定的吗,怎么让它稳定呢
回复 支持 反对

使用道具 举报

31

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2012-10-27
在线时间
63 小时
发表于 2013-4-3 14:36:40 | 显示全部楼层
收藏了
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2013-6-1
在线时间
43 小时
发表于 2013-6-1 19:30:00 | 显示全部楼层
顶起,东西不错  很给力
回复 支持 反对

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2013-6-3 11:54:31 | 显示全部楼层
很不错,这个加速度传感器可以用在飞行器上或者用在遥控飞行器的遥控器上。
原子哥是不是又要出黑科技了呀。^_^...
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2013-5-25
在线时间
0 小时
发表于 2013-6-21 20:44:54 | 显示全部楼层
谢谢楼主,正在寻找了
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-7-24
在线时间
0 小时
发表于 2013-8-24 20:12:33 | 显示全部楼层
收藏一个,不错。。。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-9-3
在线时间
0 小时
发表于 2013-9-3 22:13:27 | 显示全部楼层
想知道这个LED点阵是干嘛的  求电路图
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-5-17
在线时间
0 小时
发表于 2015-5-17 16:09:44 | 显示全部楼层
回复【11楼】suxkd:
---------------------------------
知道是怎么回事了吗,知道的话,能不能跟我分享一下,我也很想知道
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2015-4-25
在线时间
0 小时
发表于 2015-7-6 16:16:49 | 显示全部楼层
回复【9楼】lixupeng:
---------------------------------
问一下MMA7455采样频率是多少呀a
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2015-7-11 16:09:06 | 显示全部楼层
回复【24楼】不死的富翁:
---------------------------------
不知道 。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-7-23
在线时间
0 小时
发表于 2017-7-23 15:44:52 | 显示全部楼层
楼主,你这个程序最后显示出的数据是倾角吗?我想显示加速度怎么弄
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-23 07:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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