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

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