Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 //
