@@ -41,20 +41,24 @@ int MPU6886::Init(void) {
41
41
I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_PWR_MGMT_1, 1 , ®data);
42
42
delay (10 );
43
43
44
+ // +- 8g
44
45
regdata = 0x10 ;
45
46
I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_ACCEL_CONFIG, 1 , ®data);
46
47
delay (1 );
47
48
49
+ // +- 2000 dps
48
50
regdata = 0x18 ;
49
51
I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_GYRO_CONFIG, 1 , ®data);
50
52
delay (1 );
51
53
54
+ // 1khz output
52
55
regdata = 0x01 ;
53
56
I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_CONFIG, 1 , ®data);
54
57
delay (1 );
55
58
56
- regdata = 0x05 ;
57
- I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_SMPLRT_DIV, 1 ,®data);
59
+ // 2 div, FIFO 500hz out
60
+ regdata = 0x01 ;
61
+ I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_SMPLRT_DIV, 1 , ®data);
58
62
delay (1 );
59
63
60
64
regdata = 0x00 ;
@@ -126,7 +130,6 @@ void MPU6886::getAhrsData(float *pitch, float *roll, float *yaw) {
126
130
127
131
getGyroData (&gyroX, &gyroY, &gyroZ);
128
132
getAccelData (&accX, &accY, &accZ);
129
-
130
133
MahonyAHRSupdateIMU (gyroX * DEG_TO_RAD, gyroY * DEG_TO_RAD, gyroZ * DEG_TO_RAD, accX, accY, accZ, pitch, roll, yaw);
131
134
}
132
135
@@ -215,3 +218,52 @@ void MPU6886::getTempData(float *t) {
215
218
216
219
*t = (float )temp / 326.8 + 25.0 ;
217
220
}
221
+
222
+ void MPU6886::setGyroOffset (uint16_t x, uint16_t y, uint16_t z) {
223
+ uint8_t buf_out[6 ];
224
+ buf_out[0 ] = x >> 8 ;
225
+ buf_out[1 ] = x & 0xff ;
226
+ buf_out[2 ] = y >> 8 ;
227
+ buf_out[3 ] = y & 0xff ;
228
+ buf_out[4 ] = z >> 8 ;
229
+ buf_out[5 ] = z & 0xff ;
230
+ I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_GYRO_OFFSET, 6 , buf_out);
231
+ }
232
+
233
+ void MPU6886::setFIFOEnable ( bool enableflag ) {
234
+ uint8_t regdata = 0 ;
235
+ regdata = enableflag ? 0x18 : 0x00 ;
236
+ I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_FIFO_ENABLE, 1 , ®data);
237
+ regdata = enableflag ? 0x40 : 0x00 ;
238
+ I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_USER_CTRL, 1 , ®data);
239
+ }
240
+
241
+ uint8_t MPU6886::ReadFIFO () {
242
+ uint8_t ReData = 0 ;
243
+ I2C_Read_NBytes (MPU6886_ADDRESS, MPU6886_FIFO_R_W , 1 , &ReData);
244
+ return ReData;
245
+ }
246
+
247
+ void MPU6886::ReadFIFOBuff (uint8_t *DataBuff ,uint16_t Length) {
248
+ uint8_t number = Length / 210 ;
249
+ for (uint8_t i = 0 ; i < number; i++) {
250
+ I2C_Read_NBytes (MPU6886_ADDRESS, MPU6886_FIFO_R_W, 210 , &DataBuff[i*210 ]);
251
+ }
252
+
253
+ I2C_Read_NBytes (MPU6886_ADDRESS, MPU6886_FIFO_R_W, Length % 210 , &DataBuff[number*210 ]);
254
+ }
255
+
256
+ void MPU6886::RestFIFO () {
257
+ uint8_t buf_out;
258
+ I2C_Read_NBytes (MPU6886_ADDRESS, MPU6886_USER_CTRL, 1 , &buf_out);
259
+ buf_out |= 0x04 ;
260
+ I2C_Write_NBytes (MPU6886_ADDRESS, MPU6886_USER_CTRL, 1 , &buf_out);
261
+ }
262
+
263
+ uint16_t MPU6886::ReadFIFOCount () {
264
+ uint8_t Buff[2 ];
265
+ uint16_t ReData = 0 ;
266
+ I2C_Read_NBytes ( MPU6886_ADDRESS, MPU6886_FIFO_COUNT, 2 , Buff);
267
+ ReData = (Buff[0 ] << 8 ) | Buff[1 ];
268
+ return ReData;
269
+ }
0 commit comments