Firmware for the Software 3D Accelerometer Tester v1.1 or above

Dependencies:   MMA7660FC MODSERIAL mbed

I wrote a C# software that test the principal characteristics of this accelerometer MMA7660FC.


The software is here: 3D Accelerometer Tester v1.1
Is required Microsoft .NET Framework 3.5 or above.


This is the pins assignment:

MMA7660 pinsMbed pins
1 - SCLP10 - SCL
2 - SDAP9 - SDA
3 - VccVout - 3.3V
4 - GNDGND
5 - INTP6

NOTE: The I2C bus is already connected to pull-up resistor.


Some screens:

/media/uploads/edodm85/acc_img1.jpg

First you must set the Serial Port and press the button "Connect".
Then you can read the Sensor data (G acc and Orientation) manually pressing the button "Read DATA" or triggered by interrupt if you enabled in the second tab the checkbox "G Interrup Enable".
The red ball changes when the checkbox "SHAKE enable" is enabled.


/media/uploads/edodm85/acc_img2.jpg

In this screen you can set and read the registers manually or you can set easy the sample rate, the Shake Interrupt or the G Interrupt.


/media/uploads/edodm85/acc_img3.jpg

In this graph are plotted the G data read from the sensor.


For more infos visit this page.

main.cpp

Committer:
edodm85
Date:
2013-08-07
Revision:
0:1cef37031a2c

File content as of revision 0:1cef37031a2c:

/* Author: Edoardo De Marchi 
 * Note: Firmware for the software 3D Accelerometer Tester v1.1
 */
 
#include "main.h"


void INTSU()
{
    led4 = !led4;
    bCheckINT = true;
}

void rxCallback(MODSERIAL_IRQ_INFO *q) 
{
     new_send = true;
}


int main() 
{
    
    pc.baud(921600);
    
    pc.attach(&rxCallback, MODSERIAL::RxIrq);
    INT.rise(&INTSU);
    
    MMA.init();    // Initialization 
    
    led1 = 1;
    led4 = 0;
           
    while(1)
    {    
        if(new_send)
        {
            int i = 0;
       
            while(pc.readable())
            {
                word[i] = pc.getc();
                i++;
            }
            parse_cmd(); 
        }else
        if(bCheckINT)
        {            
            if((MMA.read_reg(0x03) & 0x80) != 0)
            {
                pc.printf("SHAKE");
            }else
            if((MMA.read_reg(0x03) & 0x20) != 0)
            {
                pc.printf("TAPE");
            }else    
            {
                strcpy(word,"read_data");
                parse_cmd();
            }  
            bCheckINT = false;
        }    
        MMA.read_reg(0x00);       
        wait_ms(50);
        
           
    }
}



void parse_cmd(){
            new_send = false;
           
            if(strcmp("reset", word) == 0)              
            {
                    mbed_reset();        
            }else
            if(strcmp("read_data", word) == 0)              
            {
                    pc.printf("x: %2d", MMA.read_x()+10);          // Print the X axis acceleration
                    pc.printf("y: %2d", MMA.read_y()+10);          // Print the Y axis acceleration
                    pc.printf("z: %2d", MMA.read_z()+10);          // Print the Z axis acceleration      
            }else
            if(strncmp("w_reg", word, 5) == 0)                 
            {        
                    int reg_addr = 0;                
                    int reg_value = 0;
                    char temp[3];
                    strncpy(temp, &word[5], 3);  
                    reg_addr = atoi(temp);
                    memset(temp, 0, sizeof(temp));
                    strncpy(temp, &word[8], 3); 
                    reg_value = atoi(temp);                     
                    MMA.write_reg(reg_addr, reg_value);
                    
                    memset(temp, 0, sizeof(temp));
                    memset(word, 0, sizeof(word));
            }else
            if(strncmp("r_reg", word, 5) == 0)                 
            {       
            
                    int reg_value = 0;
                    char temp[3];
                    strncpy(temp, &word[5], 3);  
                    reg_value = atoi(temp);   
                    pc.printf("%x", MMA.read_reg(reg_value));  
                    
                    memset(temp, 0, sizeof(temp));              
                    memset(word, 0, sizeof(word));
            }           
            memset(word, 0, sizeof(word));            
}