LSM6DS33 Library
Dependents: teensyIMU LSM6DS33 ALTIMU_v6
Fork of LSM6DS3 by
Revision 4:4e7d663e26bd, committed 2016-10-06
- Comitter:
- bclaus
- Date:
- Thu Oct 06 23:28:32 2016 +0000
- Parent:
- 3:b1d064895178
- Commit message:
- functional;
Changed in this revision
LSM6DS33.cpp | Show annotated file Show diff for this revision Revisions of this file |
LSM6DS33.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r b1d064895178 -r 4e7d663e26bd LSM6DS33.cpp --- a/LSM6DS33.cpp Thu Oct 06 16:08:42 2016 +0000 +++ b/LSM6DS33.cpp Thu Oct 06 23:28:32 2016 +0000 @@ -9,6 +9,7 @@ uint16_t LSM6DS33::begin(gyro_scale gScl, accel_scale aScl, gyro_odr gODR, accel_odr aODR) { + // Store the given scales in class variables. These scale variables // are used throughout to calculate the actual g's, DPS,and Gs's. gScale = gScl; @@ -49,73 +50,54 @@ cmd[1] = 0x10; i2c.write(xgAddress, cmd, 2); + // Once everything is initialized, return the WHO_AM_I registers we read: return xgTest; } void LSM6DS33::initGyro() { - char cmd[4] = { + char cmd[2] = { CTRL2_G, - gScale | G_ODR_104, - 0, // Default data out and int out - 0 // Default power mode and high pass settings + gScale | G_ODR_104 }; // Write the data to the gyro control registers - i2c.write(xgAddress, cmd, 4); + i2c.write(xgAddress, cmd, 2); } void LSM6DS33::initAccel() { char cmd[4] = { CTRL1_XL, - 0x38, // Enable all axis and don't decimate data in out Registers - (A_ODR_104 << 5) | (aScale << 3) | (A_BW_400), // 119 Hz ODR, set scale, and auto BW - 0 // Default resolution mode and filtering settings - }; + 0x30}; // Write the data to the accel control registers - i2c.write(xgAddress, cmd, 4); + i2c.write(xgAddress, cmd, 2); } void LSM6DS33::initIntr() { - char cmd[2]; } - void LSM6DS33::readAll(){ // The data we are going to read from the temp/gyr/acc/timestamp - char data[14];//from 0x20 to 0x42 - char tsdata[3]; + //char data[14];//from 0x20 to 0x42 - // Set addresses - char subAddressLT = OUT_TEMP_L; - char subAddressHT = OUT_TEMP_H; - char subAddressXLG = OUTX_L_G; - char subAddressXHG = OUTX_H_G; - char subAddressYLG = OUTY_L_G; - char subAddressYHG = OUTY_H_G; - char subAddressZLG = OUTZ_L_G; - char subAddressZHG = OUTZ_H_G; - char subAddressXL = OUTX_L_XL; - char subAddressXH = OUTX_H_XL; - char subAddressYL = OUTY_L_XL; - char subAddressYH = OUTY_H_XL; - char subAddressZL = OUTZ_L_XL; - char subAddressZH = OUTZ_H_XL; - char subAddressTS0 = TIMESTAMP0_REG; - char subAddressTS1 = TIMESTAMP1_REG; - char subAddressTS2 = TIMESTAMP2_REG; - - // Write the address we are going to read from and don't end the transaction - i2c.write(xgAddress, &subAddressLT, 1, true); - // Read in registers containing all the data and timestamp and don't end - i2c.read(xgAddress, data, 14,true); - i2c.write(xgAddress, &subAddressTS0, 1, true); - i2c.read(xgAddress, tsdata, 3); - + char data[14]; + char tsdata[3]; + + i2c.start(); + i2c.write(xgAddress); + i2c.write(OUT_TEMP_L); + i2c.start(); + i2c.write(xgAddress | 0x1); + for(int i =0;i<13;i++){ + data[i]=i2c.read(1); + } + data[13]=i2c.read(0); + i2c.stop(); + // Temperature is a 12-bit signed integer temperature_raw = data[0] | (data[1] << 8); gx_raw = data[2] | (data[3] << 8); @@ -124,6 +106,18 @@ ax_raw = data[8] | (data[9] << 8); ay_raw = data[10] | (data[11] << 8); az_raw = data[12] | (data[13] << 8); + + i2c.start(); + i2c.write(xgAddress); + i2c.write(TIMESTAMP0_REG); + i2c.start(); + i2c.write(xgAddress | 0x1); + for(int i =0;i<3;i++){ + tsdata[i]=i2c.read(1); + } + tsdata[3]=i2c.read(0); + i2c.stop(); + time_raw = tsdata[0] | (tsdata[1] << 8) | (tsdata[2] << 16); @@ -425,4 +419,7 @@ aRes = 16.0 / 32768.0; break; } -} \ No newline at end of file +} + + + \ No newline at end of file
diff -r b1d064895178 -r 4e7d663e26bd LSM6DS33.h --- a/LSM6DS33.h Thu Oct 06 16:08:42 2016 +0000 +++ b/LSM6DS33.h Thu Oct 06 23:28:32 2016 +0000 @@ -188,6 +188,8 @@ accel_scale aScl = A_SCALE_2G, gyro_odr gODR = G_ODR_104, accel_odr aODR = A_ODR_104); + void readAll(); + /** readGyro() -- Read the gyroscope output registers. * This function will read all six gyroscope output registers. * The readings are stored in the class' gx_raw, gy_raw, and gz_raw variables. Read @@ -290,6 +292,7 @@ * be set prior to calling this function. */ void calcaRes(); + }; #endif // _LSM6DS33_H //