Basic component library for the FXAS21000 gyro from Freescale

Dependents:   Hello_FXAS21000 Multi-Sensor Freescale_Multi-Sensor_Shield FRDM-STBC-AGM01 ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FXAS21000.cpp Source File

FXAS21000.cpp

00001  #include "FXAS21000.h"
00002  
00003 FXAS21000::FXAS21000(PinName sda, PinName scl) : _i2c(sda, scl) {
00004  
00005     begin();
00006 }
00007               
00008 void FXAS21000::RegRead( char reg, char * d, int len)
00009 {
00010     char cmd[1];
00011     cmd[0] = reg;
00012 char i2c_addr = FXAS21000_SLAVE_ADDR;
00013 _i2c.write( i2c_addr, cmd, 1, true);
00014 _i2c.read ( i2c_addr, d, len);
00015 }
00016 
00017 void FXAS21000::begin(void)
00018 {
00019     char data[2];
00020     // write 0000 1000 = 0x08 to gyro control register 1 to place FXAS21000 into
00021     // standby
00022     // [7-1] = 0000 000
00023     // [0]: active=0
00024     data[0] = FXAS21000_CTRL_REG1;
00025     data[1] = 0x08;
00026     _i2c.write( FXAS21000_SLAVE_ADDR, data, 2);
00027     
00028     // write 0001 1011 to CRTL_REG0 register
00029     data[0] = FXAS21000_CTRL_REG0;
00030     data[1] = 0x1B;
00031     _i2c.write( FXAS21000_SLAVE_ADDR, data, 2);
00032 
00033     // write 0000 1001 to gyro control register 1
00034     data[0] = FXAS21000_CTRL_REG1;
00035     data[1] = 0x0A;
00036     _i2c.write( FXAS21000_SLAVE_ADDR, data, 2);
00037 }
00038 
00039 char FXAS21000::getWhoAmI(void)
00040 {
00041     char d;
00042     RegRead( FXAS21000_WHOAMI, &d, 1);
00043     return(d);
00044 }
00045 
00046 void FXAS21000::ReadXYZ(float * a)
00047 {
00048     char d[7];
00049     int16_t t[6];
00050 
00051     RegRead( FXAS21000_STATUS, d, 7);
00052     t[0] = ((d[1] * 256) + ((unsigned short) d[2]));
00053     t[1] = ((d[3] * 256) + ((unsigned short) d[4]));
00054     t[2] = ((d[5] * 256) + ((unsigned short) d[6]));
00055     //printf("%X\r\n", (int) d[0]);
00056 
00057     a[0] = (float) t[0] * 0.003125;
00058     a[1] = (float) t[1] * 0.003125;
00059     a[2] = (float) t[2] * 0.003125;
00060   
00061 }
00062 
00063 void FXAS21000::ReadXYZraw(int16_t * t)
00064 {
00065     char d[7];
00066 
00067     RegRead( FXAS21000_STATUS, d, 7);
00068     t[0] = ((d[1] * 256) + ((unsigned short) d[2]));
00069     t[1] = ((d[3] * 256) + ((unsigned short) d[4]));
00070     t[2] = ((d[5] * 256) + ((unsigned short) d[6]));
00071 }