查看: 5600|回复: 5

MMA7361 倾角传感器的使用

[复制链接]
  • TA的每日心情
    慵懒
    2015-2-11 16:15
  • 签到天数: 463 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-6 21:08:28 | 显示全部楼层 |阅读模式
    分享到:
    本人用的是STC89c52RC的开发板,买了个MMA7361倾角传感器,不知怎么使用,如何测试。先前在淘宝买的时候店家有送程序,不过使用keil编译,显示有错误,无法生成hex文件。本人菜鸟,不知如何改程序。还请高手指点一下,同时也希望指点出传感器输出了些什么,需要从哪里才能看出输出数据。

    程序:
    //-------------------------------------------------------------------
    // MMA7361 Demo code, show the 3 axis date through UART periodically
    // Hardware connection: X_out           PC2
    //   Y_out         PC1
    //          Z_out         PC0
    //   MMA7361_En PC3
    //   UART_Tx  PD1
    // Software UART baudrate 115200 when main frequency is 4M
    //-------------------------------------------------------------------
                
    #include "iom168.h"
    #include "inAVR.h"
    #include "stdio.h"
    #include "stdbool.h"
    #define Max_Axis 3
    #define X_Channel 0 //PC2
    #define Y_Channel       1 //PC1
    #define Z_Channel 2 //PC0
    #define MMA7361_EN 0x08 //PC3
    const unsigned char Channel_Tbl[Max_Axis]={0x42,0x41,0x40};     //Z,Y,X
    const unsigned char Axis_Name[Max_Axis]={'X','Y','Z'};
    unsigned char Temp, Temp1, ADC_Done,ShowDebug_Cnt;              //Temporary saving cells
    unsigned int Axis_Data[Max_Axis];
    unsigned long SumReg = 0;     //Storage variable
    static char SampCnt;                                        //ADC samples counter
    #include "functions.c"
    int main(void)
    {
      unsigned char i;
      IO_Ports_Init();    //Initialize IO ports
      Timers_Init();    //Initialize timers
      ADC_Init();     //Initialize ADC
      PRR = 0x82;                                   //Reduce consumption 86 (don't stop SPI)
      CLKPR = 0x80;     //Increase Fcpu
      CLKPR = 0x00;
      TCCR2B = 0x06;
      __disable_interrupt();
      __watchdog_reset();
        WDTCSR = 0x18;    //Enable watchdog, timeout 256ms
        WDTCSR = 0x0D;
      __enable_interrupt();    //Enable interrupts
      
      MMA7361_Init();
      while(1)
      {
        __watchdog_reset();    //Reset watchdog timer
          
        if(ShowDebug_Cnt==0)      
        {
         ShowDebug_Cnt=30;//13;      //Get data periodically
         for(i=0;i<Max_Axis;i++)     //Get Axis data
         Axis_Data[i]=Get_ADC(i,10);
        for(i=0;i<Max_Axis;i++)    //Show Axis data through UART
        {
          SW_UART_Tx(Axis_Name[i]);
         Put_Axis(Axis_Data[i]);
          SW_UART_Tx(' ');
        }
         SW_UART_Tx(' ');     //Next Line
         SW_UART_Tx(0x0d);
       }
      }
      
      
    }
    //SIGNAL(SIG_OVERFLOW2)
    #pragma vector=TIMER2_OVF_vect
    __interrupt void TMR2irq( void )
    {
      if(ShowDebug_Cnt!=0)
       ShowDebug_Cnt--;
    }
    //SIGNAL(SIG_ADC)
    #pragma vector=ADC_vect
    __interrupt void ADCirq( void )
    {
      SumReg += ADC;         //Add result to common sum
      if(--SampCnt == 0)        //Check number of samples
      {
    ADC_Done=1;        //Measuring is complete
    ADCSRA = 0x80;               //Stop ADC
      }
      else
      {
    ADCSRA |= 0x40;        //Start next ADC cycle
      }
    }
    //SIGNAL(__vector_default)
    //#pragma vector=default

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-11-11 16:09
  • 签到天数: 287 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-6 21:17:18 | 显示全部楼层
    同问,也在搞这个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-8 15:01
  • 签到天数: 459 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-8-6 22:06:07 | 显示全部楼层
    给你的是AVR的程序,你的单片机是51的,头文件和定义都不一样,肯定不能编译了啊~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2014-5-8 11:45
  • 签到天数: 113 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-8-6 22:19:56 | 显示全部楼层
    给力啊,源代码都贴出来了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-2-11 16:15
  • 签到天数: 463 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-6 22:55:08 来自手机 | 显示全部楼层
    zhaojunlin123 发表于 2013-8-6 22:06:07
    给你的是AVR的程序,你的单片机是51的,头文件和定义都不一样,肯定不能编译了啊~~~~~

    那你有没有这个传感器的51程序
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-2-11 16:15
  • 签到天数: 463 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2013-8-6 22:57:18 来自手机 | 显示全部楼层
    zhaojunlin123 发表于 2013-8-6 22:06:07
    给你的是AVR的程序,你的单片机是51的,头文件和定义都不一样,肯定不能编译了啊~~~~~

    我表示我2b了
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 09:52 , Processed in 0.156387 second(s), 25 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.