Rev 0.1 Simple operation of just X, Y, Z values in floating point G's
Dependents: Hello_FXLS8471Q Multi-Sensor sensor AerCloud_MutliTech_Socket_Modem_Example ... more
Diff: FXLS8471Q.cpp
- Revision:
- 0:f89f2dc4b003
- Child:
- 1:c80be04510fe
diff -r 000000000000 -r f89f2dc4b003 FXLS8471Q.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FXLS8471Q.cpp Mon Apr 07 00:58:10 2014 +0000 @@ -0,0 +1,82 @@ + #include "FXLS8471Q.h" + +FXLS8471Q::FXLS8471Q(PinName mosi, PinName miso, PinName sck, PinName cs) : _spi(mosi, miso, sck), _spi_cs(cs) { + _spi_cs = 1; + wait(0.1); + begin(); +} + + + +void FXLS8471Q::RegWrite( int reg, int *d, int len) +{ + int ob[2]; + int c = 0; + ob[1] = 0; + ob[0] = reg + 128; + _spi_cs = 0; + _spi.write(ob[0]); + _spi.write(ob[1]); + while(c < len) _spi.write(d[c++]); + _spi_cs = 1; +} + +void FXLS8471Q::RegRead( int reg, int *d, int len) +{ + int ob[2]; + int c = 0; + ob[0] = reg; + ob[1] = 0; + _spi_cs = 0; + _spi.write(ob[0]); + _spi.write(ob[1]); + while(c < len) d[c++] = _spi.write(0xff); + _spi_cs = 1; +} + +void FXLS8471Q::begin(void) +{ + int databyte; + + // write 0000 0000 = 0x00 to accelerometer control register 1 to place FXLS8471Q into + // standby + // [7-1] = 0000 000 + // [0]: active=0 + databyte = 0x00; + RegWrite(FXLS8471Q_CTRL_REG1, &databyte, 1); + + // write 0000 0001= 0x01 to XYZ_DATA_CFG register + // [7]: reserved + // [6]: reserved + // [5]: reserved + // [4]: hpf_out=0 + // [3]: reserved + // [2]: reserved + // [1-0]: fs=00 for accelerometer range of +/-2g with 0.244mg/LSB + databyte = 0x00; + RegWrite(FXLS8471Q_XYZ_DATA_CFG, &databyte, 1); + + // write 0001 0101b = 0x15 to accelerometer control register 1 + // [7-6]: aslp_rate=00 + // [5-3]: dr=010 for 200Hz data rate + // [2]: lnoise=1 for low noise mode + // [1]: f_read=0 for normal 16 bit reads + // [0]: active=1 to take the part out of standby and enable sampling + databyte = 0x15; + RegWrite(FXLS8471Q_CTRL_REG1, &databyte, 1); +} + +void FXLS8471Q::ReadXYZ(float * fdata) +{ +int raw[7]; +int16_t ix, iy, iz; +RegRead(FXLS8471Q_STATUS, raw, 7); + +ix = ((raw[1] * 256) + raw[2]);// / 4; +iy = ((raw[3] * 256) + raw[4]);// / 4; +iz = ((raw[5] * 256) + raw[6]);// / 4; +fdata[0] = ((float) ix) / 16384.0; +fdata[1] = ((float) iy) / 16384.0; +fdata[2] = ((float) iz) / 16384.0; +} + \ No newline at end of file