Rearranged original code port/fork to: * Make library compatible with TiltyQuad IMU; * Prevent multiple definition, and added inclusion guard; * Cleaner access to library functions and file structure; and * "Broke out" code to control Sampling Rate and FIFO buffer update rate. By Trung Tin Ian HUA 2014. Credit to Jeff Rowberg for his original code, the best DMP implementation thus far; and szymon gaertig for porting the arduino library to mbed.

Dependents:   MPU6050-DMP_test

Fork of MPU6050 by Shundo Kishi

Committer:
pHysiX
Date:
Thu May 08 09:37:25 2014 +0000
Revision:
13:b1b98e5c61df
Parent:
12:b46e84d27a32
Child:
14:86afc8447df9
Added in license from original sources and tidied for release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pHysiX 13:b1b98e5c61df 1 // I2Cdev library collection - MPU6050 I2C device class, 6-axis MotionApps 2.0 implementation
pHysiX 13:b1b98e5c61df 2 // Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00)
pHysiX 13:b1b98e5c61df 3 // 5/20/2013 by Jeff Rowberg <jeff@rowberg.net>
pHysiX 13:b1b98e5c61df 4 // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
pHysiX 13:b1b98e5c61df 5 //
pHysiX 13:b1b98e5c61df 6 // Changelog:
pHysiX 13:b1b98e5c61df 7 // ... - ongoing debug release
pHysiX 13:b1b98e5c61df 8
pHysiX 13:b1b98e5c61df 9 /* ============================================
pHysiX 13:b1b98e5c61df 10 I2Cdev device library code is placed under the MIT license
pHysiX 13:b1b98e5c61df 11 Copyright (c) 2012 Jeff Rowberg
pHysiX 13:b1b98e5c61df 12
pHysiX 13:b1b98e5c61df 13 Permission is hereby granted, free of charge, to any person obtaining a copy
pHysiX 13:b1b98e5c61df 14 of this software and associated documentation files (the "Software"), to deal
pHysiX 13:b1b98e5c61df 15 in the Software without restriction, including without limitation the rights
pHysiX 13:b1b98e5c61df 16 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
pHysiX 13:b1b98e5c61df 17 copies of the Software, and to permit persons to whom the Software is
pHysiX 13:b1b98e5c61df 18 furnished to do so, subject to the following conditions:
pHysiX 13:b1b98e5c61df 19
pHysiX 13:b1b98e5c61df 20 The above copyright notice and this permission notice shall be included in
pHysiX 13:b1b98e5c61df 21 all copies or substantial portions of the Software.
pHysiX 13:b1b98e5c61df 22
pHysiX 13:b1b98e5c61df 23 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
pHysiX 13:b1b98e5c61df 24 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
pHysiX 13:b1b98e5c61df 25 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
pHysiX 13:b1b98e5c61df 26 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
pHysiX 13:b1b98e5c61df 27 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pHysiX 13:b1b98e5c61df 28 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
pHysiX 13:b1b98e5c61df 29 THE SOFTWARE.
pHysiX 13:b1b98e5c61df 30 ===============================================
pHysiX 13:b1b98e5c61df 31 */
pHysiX 13:b1b98e5c61df 32
pHysiX 10:500c00d7b667 33 #include "tasks.h"
pHysiX 10:500c00d7b667 34
pHysiX 6:2dc23167c8d8 35 #ifndef _MPU6050_6AXIS_MOTIONAPPS20_H_
pHysiX 6:2dc23167c8d8 36 #define _MPU6050_6AXIS_MOTIONAPPS20_H_
pHysiX 6:2dc23167c8d8 37
pHysiX 12:b46e84d27a32 38 //#include <iostream>
pHysiX 6:2dc23167c8d8 39
pHysiX 6:2dc23167c8d8 40 #include "I2Cdev.h"
pHysiX 6:2dc23167c8d8 41 #include "helper_3dmath.h"
pHysiX 6:2dc23167c8d8 42
pHysiX 6:2dc23167c8d8 43 // MotionApps 2.0 DMP implementation, built using the MPU-6050EVB evaluation board
pHysiX 6:2dc23167c8d8 44 #define MPU6050_INCLUDE_DMP_MOTIONAPPS20
pHysiX 6:2dc23167c8d8 45
pHysiX 6:2dc23167c8d8 46 #include "MPU6050.h"
pHysiX 6:2dc23167c8d8 47
pHysiX 6:2dc23167c8d8 48 // Tom Carpenter's conditional PROGMEM code
pHysiX 6:2dc23167c8d8 49 // http://forum.arduino.cc/index.php?topic=129407.0
pHysiX 6:2dc23167c8d8 50 #ifndef __arm__
pHysiX 6:2dc23167c8d8 51 #include <avr/pgmspace.h>
pHysiX 6:2dc23167c8d8 52 #else
pHysiX 6:2dc23167c8d8 53 // Teensy 3.0 library conditional PROGMEM code from Paul Stoffregen
pHysiX 6:2dc23167c8d8 54 #ifndef __PGMSPACE_H_
pHysiX 6:2dc23167c8d8 55 #define __PGMSPACE_H_ 1
pHysiX 6:2dc23167c8d8 56 #include <inttypes.h>
pHysiX 6:2dc23167c8d8 57
pHysiX 6:2dc23167c8d8 58 #define PROGMEM
pHysiX 6:2dc23167c8d8 59 #define PGM_P const char *
pHysiX 6:2dc23167c8d8 60 #define PSTR(str) (str)
pHysiX 6:2dc23167c8d8 61 #define F(x) x
pHysiX 6:2dc23167c8d8 62
pHysiX 6:2dc23167c8d8 63 typedef void prog_void;
pHysiX 6:2dc23167c8d8 64 typedef char prog_char;
pHysiX 6:2dc23167c8d8 65 typedef unsigned char prog_uchar;
pHysiX 6:2dc23167c8d8 66 typedef int8_t prog_int8_t;
pHysiX 6:2dc23167c8d8 67 typedef uint8_t prog_uint8_t;
pHysiX 6:2dc23167c8d8 68 typedef int16_t prog_int16_t;
pHysiX 6:2dc23167c8d8 69 typedef uint16_t prog_uint16_t;
pHysiX 6:2dc23167c8d8 70 typedef int32_t prog_int32_t;
pHysiX 6:2dc23167c8d8 71 typedef uint32_t prog_uint32_t;
pHysiX 6:2dc23167c8d8 72
pHysiX 6:2dc23167c8d8 73 #define strcpy_P(dest, src) strcpy((dest), (src))
pHysiX 6:2dc23167c8d8 74 #define strcat_P(dest, src) strcat((dest), (src))
pHysiX 6:2dc23167c8d8 75 #define strcmp_P(a, b) strcmp((a), (b))
pHysiX 6:2dc23167c8d8 76
pHysiX 6:2dc23167c8d8 77 #define pgm_read_byte(addr) (*(const unsigned char *)(addr))
pHysiX 6:2dc23167c8d8 78 #define pgm_read_word(addr) (*(const unsigned short *)(addr))
pHysiX 6:2dc23167c8d8 79 #define pgm_read_dword(addr) (*(const unsigned long *)(addr))
pHysiX 6:2dc23167c8d8 80 #define pgm_read_float(addr) (*(const float *)(addr))
pHysiX 6:2dc23167c8d8 81
pHysiX 6:2dc23167c8d8 82 #define pgm_read_byte_near(addr) pgm_read_byte(addr)
pHysiX 6:2dc23167c8d8 83 #define pgm_read_word_near(addr) pgm_read_word(addr)
pHysiX 6:2dc23167c8d8 84 #define pgm_read_dword_near(addr) pgm_read_dword(addr)
pHysiX 6:2dc23167c8d8 85 #define pgm_read_float_near(addr) pgm_read_float(addr)
pHysiX 6:2dc23167c8d8 86 #define pgm_read_byte_far(addr) pgm_read_byte(addr)
pHysiX 6:2dc23167c8d8 87 #define pgm_read_word_far(addr) pgm_read_word(addr)
pHysiX 6:2dc23167c8d8 88 #define pgm_read_dword_far(addr) pgm_read_dword(addr)
pHysiX 6:2dc23167c8d8 89 #define pgm_read_float_far(addr) pgm_read_float(addr)
pHysiX 6:2dc23167c8d8 90 #endif
pHysiX 6:2dc23167c8d8 91 #endif
pHysiX 6:2dc23167c8d8 92
pHysiX 6:2dc23167c8d8 93 /* Source is from the InvenSense MotionApps v2 demo code. Original source is
pHysiX 6:2dc23167c8d8 94 * unavailable, unless you happen to be amazing as decompiling binary by
pHysiX 6:2dc23167c8d8 95 * hand (in which case, please contact me, and I'm totally serious).
pHysiX 6:2dc23167c8d8 96 *
pHysiX 6:2dc23167c8d8 97 * Also, I'd like to offer many, many thanks to Noah Zerkin for all of the
pHysiX 6:2dc23167c8d8 98 * DMP reverse-engineering he did to help make this bit of wizardry
pHysiX 6:2dc23167c8d8 99 * possible.
pHysiX 6:2dc23167c8d8 100 */
pHysiX 6:2dc23167c8d8 101
pHysiX 6:2dc23167c8d8 102 // NOTE! Enabling DEBUG adds about 3.3kB to the flash program size.
pHysiX 6:2dc23167c8d8 103 // Debug output is now working even on ATMega328P MCUs (e.g. Arduino Uno)
pHysiX 6:2dc23167c8d8 104 // after moving string constants to flash memory storage using the F()
pHysiX 6:2dc23167c8d8 105 // compiler macro (Arduino IDE 1.0+ required).
pHysiX 6:2dc23167c8d8 106
pHysiX 6:2dc23167c8d8 107 //#define DEBUG
pHysiX 6:2dc23167c8d8 108 #ifdef DEBUG
pHysiX 6:2dc23167c8d8 109 #define DEBUG_PRINT(x) pc.printf(x) //Serial.print(x)
pHysiX 6:2dc23167c8d8 110 #define DEBUG_PRINTF(x, y) pc.printf(x,y) //Serial.print(x, y)
pHysiX 6:2dc23167c8d8 111
pHysiX 6:2dc23167c8d8 112 #define F(x) x
pHysiX 6:2dc23167c8d8 113 #else
pHysiX 6:2dc23167c8d8 114 #define DEBUG_PRINT(x)
pHysiX 6:2dc23167c8d8 115 #define DEBUG_PRINTF(x, y)
pHysiX 6:2dc23167c8d8 116
pHysiX 6:2dc23167c8d8 117 #endif
pHysiX 6:2dc23167c8d8 118
pHysiX 6:2dc23167c8d8 119 #define MPU6050_DMP_CODE_SIZE 1929 // dmpMemory[]
pHysiX 6:2dc23167c8d8 120 #define MPU6050_DMP_CONFIG_SIZE 192 // dmpConfig[]
pHysiX 6:2dc23167c8d8 121 #define MPU6050_DMP_UPDATES_SIZE 47 // dmpUpdates[]
pHysiX 6:2dc23167c8d8 122
pHysiX 6:2dc23167c8d8 123 /* ================================================================================================ *
pHysiX 6:2dc23167c8d8 124 | Default MotionApps v2.0 42-byte FIFO packet structure: |
pHysiX 6:2dc23167c8d8 125 | |
pHysiX 6:2dc23167c8d8 126 | [QUAT W][ ][QUAT X][ ][QUAT Y][ ][QUAT Z][ ][GYRO X][ ][GYRO Y][ ] |
pHysiX 6:2dc23167c8d8 127 | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
pHysiX 6:2dc23167c8d8 128 | |
pHysiX 6:2dc23167c8d8 129 | [GYRO Z][ ][ACC X ][ ][ACC Y ][ ][ACC Z ][ ][ ] |
pHysiX 6:2dc23167c8d8 130 | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
pHysiX 6:2dc23167c8d8 131 * ================================================================================================ */
pHysiX 6:2dc23167c8d8 132
pHysiX 6:2dc23167c8d8 133 // this block of memory gets written to the MPU on start-up, and it seems
pHysiX 6:2dc23167c8d8 134 // to be volatile memory, so it has to be done each time (it only takes ~1
pHysiX 6:2dc23167c8d8 135 // second though)
pHysiX 6:2dc23167c8d8 136 const unsigned char dmpMemory[MPU6050_DMP_CODE_SIZE] PROGMEM = {
pHysiX 6:2dc23167c8d8 137 // bank 0, 256 bytes
pHysiX 6:2dc23167c8d8 138 0xFB, 0x00, 0x00, 0x3E, 0x00, 0x0B, 0x00, 0x36, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 139 0x00, 0x65, 0x00, 0x54, 0xFF, 0xEF, 0x00, 0x00, 0xFA, 0x80, 0x00, 0x0B, 0x12, 0x82, 0x00, 0x01,
pHysiX 6:2dc23167c8d8 140 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 141 0x00, 0x28, 0x00, 0x00, 0xFF, 0xFF, 0x45, 0x81, 0xFF, 0xFF, 0xFA, 0x72, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 142 0x00, 0x00, 0x03, 0xE8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xFE, 0x80, 0x01,
pHysiX 6:2dc23167c8d8 143 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 144 0x00, 0x3E, 0x03, 0x30, 0x40, 0x00, 0x00, 0x00, 0x02, 0xCA, 0xE3, 0x09, 0x3E, 0x80, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 145 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 146 0x41, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x2A, 0x00, 0x00, 0x16, 0x55, 0x00, 0x00, 0x21, 0x82,
pHysiX 6:2dc23167c8d8 147 0xFD, 0x87, 0x26, 0x50, 0xFD, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00,
pHysiX 6:2dc23167c8d8 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 149 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x6F, 0x00, 0x02, 0x65, 0x32, 0x00, 0x00, 0x5E, 0xC0,
pHysiX 6:2dc23167c8d8 150 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 151 0xFB, 0x8C, 0x6F, 0x5D, 0xFD, 0x5D, 0x08, 0xD9, 0x00, 0x7C, 0x73, 0x3B, 0x00, 0x6C, 0x12, 0xCC,
pHysiX 6:2dc23167c8d8 152 0x32, 0x00, 0x13, 0x9D, 0x32, 0x00, 0xD0, 0xD6, 0x32, 0x00, 0x08, 0x00, 0x40, 0x00, 0x01, 0xF4,
pHysiX 6:2dc23167c8d8 153 0xFF, 0xE6, 0x80, 0x79, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xD6, 0x00, 0x00, 0x27, 0x10,
pHysiX 6:2dc23167c8d8 154
pHysiX 6:2dc23167c8d8 155 // bank 1, 256 bytes
pHysiX 6:2dc23167c8d8 156 0xFB, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 157 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 158 0x00, 0x00, 0xFA, 0x36, 0xFF, 0xBC, 0x30, 0x8E, 0x00, 0x05, 0xFB, 0xF0, 0xFF, 0xD9, 0x5B, 0xC8,
pHysiX 6:2dc23167c8d8 159 0xFF, 0xD0, 0x9A, 0xBE, 0x00, 0x00, 0x10, 0xA9, 0xFF, 0xF4, 0x1E, 0xB2, 0x00, 0xCE, 0xBB, 0xF7,
pHysiX 6:2dc23167c8d8 160 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x0C,
pHysiX 6:2dc23167c8d8 161 0xFF, 0xC2, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xCF, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 162 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x14,
pHysiX 6:2dc23167c8d8 163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 166 0x00, 0x00, 0x00, 0x00, 0x03, 0x3F, 0x68, 0xB6, 0x79, 0x35, 0x28, 0xBC, 0xC6, 0x7E, 0xD1, 0x6C,
pHysiX 6:2dc23167c8d8 167 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x6A, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x30,
pHysiX 6:2dc23167c8d8 169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 171 0x00, 0x00, 0x25, 0x4D, 0x00, 0x2F, 0x70, 0x6D, 0x00, 0x00, 0x05, 0xAE, 0x00, 0x0C, 0x02, 0xD0,
pHysiX 6:2dc23167c8d8 172
pHysiX 6:2dc23167c8d8 173 // bank 2, 256 bytes
pHysiX 6:2dc23167c8d8 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x54, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 175 0x00, 0x00, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00,
pHysiX 6:2dc23167c8d8 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 178 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 179 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 180 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 183 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 186 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 190
pHysiX 6:2dc23167c8d8 191 // bank 3, 256 bytes
pHysiX 6:2dc23167c8d8 192 0xD8, 0xDC, 0xBA, 0xA2, 0xF1, 0xDE, 0xB2, 0xB8, 0xB4, 0xA8, 0x81, 0x91, 0xF7, 0x4A, 0x90, 0x7F,
pHysiX 6:2dc23167c8d8 193 0x91, 0x6A, 0xF3, 0xF9, 0xDB, 0xA8, 0xF9, 0xB0, 0xBA, 0xA0, 0x80, 0xF2, 0xCE, 0x81, 0xF3, 0xC2,
pHysiX 6:2dc23167c8d8 194 0xF1, 0xC1, 0xF2, 0xC3, 0xF3, 0xCC, 0xA2, 0xB2, 0x80, 0xF1, 0xC6, 0xD8, 0x80, 0xBA, 0xA7, 0xDF,
pHysiX 6:2dc23167c8d8 195 0xDF, 0xDF, 0xF2, 0xA7, 0xC3, 0xCB, 0xC5, 0xB6, 0xF0, 0x87, 0xA2, 0x94, 0x24, 0x48, 0x70, 0x3C,
pHysiX 6:2dc23167c8d8 196 0x95, 0x40, 0x68, 0x34, 0x58, 0x9B, 0x78, 0xA2, 0xF1, 0x83, 0x92, 0x2D, 0x55, 0x7D, 0xD8, 0xB1,
pHysiX 6:2dc23167c8d8 197 0xB4, 0xB8, 0xA1, 0xD0, 0x91, 0x80, 0xF2, 0x70, 0xF3, 0x70, 0xF2, 0x7C, 0x80, 0xA8, 0xF1, 0x01,
pHysiX 6:2dc23167c8d8 198 0xB0, 0x98, 0x87, 0xD9, 0x43, 0xD8, 0x86, 0xC9, 0x88, 0xBA, 0xA1, 0xF2, 0x0E, 0xB8, 0x97, 0x80,
pHysiX 6:2dc23167c8d8 199 0xF1, 0xA9, 0xDF, 0xDF, 0xDF, 0xAA, 0xDF, 0xDF, 0xDF, 0xF2, 0xAA, 0xC5, 0xCD, 0xC7, 0xA9, 0x0C,
pHysiX 6:2dc23167c8d8 200 0xC9, 0x2C, 0x97, 0x97, 0x97, 0x97, 0xF1, 0xA9, 0x89, 0x26, 0x46, 0x66, 0xB0, 0xB4, 0xBA, 0x80,
pHysiX 6:2dc23167c8d8 201 0xAC, 0xDE, 0xF2, 0xCA, 0xF1, 0xB2, 0x8C, 0x02, 0xA9, 0xB6, 0x98, 0x00, 0x89, 0x0E, 0x16, 0x1E,
pHysiX 6:2dc23167c8d8 202 0xB8, 0xA9, 0xB4, 0x99, 0x2C, 0x54, 0x7C, 0xB0, 0x8A, 0xA8, 0x96, 0x36, 0x56, 0x76, 0xF1, 0xB9,
pHysiX 6:2dc23167c8d8 203 0xAF, 0xB4, 0xB0, 0x83, 0xC0, 0xB8, 0xA8, 0x97, 0x11, 0xB1, 0x8F, 0x98, 0xB9, 0xAF, 0xF0, 0x24,
pHysiX 6:2dc23167c8d8 204 0x08, 0x44, 0x10, 0x64, 0x18, 0xF1, 0xA3, 0x29, 0x55, 0x7D, 0xAF, 0x83, 0xB5, 0x93, 0xAF, 0xF0,
pHysiX 6:2dc23167c8d8 205 0x00, 0x28, 0x50, 0xF1, 0xA3, 0x86, 0x9F, 0x61, 0xA6, 0xDA, 0xDE, 0xDF, 0xD9, 0xFA, 0xA3, 0x86,
pHysiX 6:2dc23167c8d8 206 0x96, 0xDB, 0x31, 0xA6, 0xD9, 0xF8, 0xDF, 0xBA, 0xA6, 0x8F, 0xC2, 0xC5, 0xC7, 0xB2, 0x8C, 0xC1,
pHysiX 6:2dc23167c8d8 207 0xB8, 0xA2, 0xDF, 0xDF, 0xDF, 0xA3, 0xDF, 0xDF, 0xDF, 0xD8, 0xD8, 0xF1, 0xB8, 0xA8, 0xB2, 0x86,
pHysiX 6:2dc23167c8d8 208
pHysiX 6:2dc23167c8d8 209 // bank 4, 256 bytes
pHysiX 6:2dc23167c8d8 210 0xB4, 0x98, 0x0D, 0x35, 0x5D, 0xB8, 0xAA, 0x98, 0xB0, 0x87, 0x2D, 0x35, 0x3D, 0xB2, 0xB6, 0xBA,
pHysiX 6:2dc23167c8d8 211 0xAF, 0x8C, 0x96, 0x19, 0x8F, 0x9F, 0xA7, 0x0E, 0x16, 0x1E, 0xB4, 0x9A, 0xB8, 0xAA, 0x87, 0x2C,
pHysiX 6:2dc23167c8d8 212 0x54, 0x7C, 0xB9, 0xA3, 0xDE, 0xDF, 0xDF, 0xA3, 0xB1, 0x80, 0xF2, 0xC4, 0xCD, 0xC9, 0xF1, 0xB8,
pHysiX 6:2dc23167c8d8 213 0xA9, 0xB4, 0x99, 0x83, 0x0D, 0x35, 0x5D, 0x89, 0xB9, 0xA3, 0x2D, 0x55, 0x7D, 0xB5, 0x93, 0xA3,
pHysiX 6:2dc23167c8d8 214 0x0E, 0x16, 0x1E, 0xA9, 0x2C, 0x54, 0x7C, 0xB8, 0xB4, 0xB0, 0xF1, 0x97, 0x83, 0xA8, 0x11, 0x84,
pHysiX 6:2dc23167c8d8 215 0xA5, 0x09, 0x98, 0xA3, 0x83, 0xF0, 0xDA, 0x24, 0x08, 0x44, 0x10, 0x64, 0x18, 0xD8, 0xF1, 0xA5,
pHysiX 6:2dc23167c8d8 216 0x29, 0x55, 0x7D, 0xA5, 0x85, 0x95, 0x02, 0x1A, 0x2E, 0x3A, 0x56, 0x5A, 0x40, 0x48, 0xF9, 0xF3,
pHysiX 6:2dc23167c8d8 217 0xA3, 0xD9, 0xF8, 0xF0, 0x98, 0x83, 0x24, 0x08, 0x44, 0x10, 0x64, 0x18, 0x97, 0x82, 0xA8, 0xF1,
pHysiX 6:2dc23167c8d8 218 0x11, 0xF0, 0x98, 0xA2, 0x24, 0x08, 0x44, 0x10, 0x64, 0x18, 0xDA, 0xF3, 0xDE, 0xD8, 0x83, 0xA5,
pHysiX 6:2dc23167c8d8 219 0x94, 0x01, 0xD9, 0xA3, 0x02, 0xF1, 0xA2, 0xC3, 0xC5, 0xC7, 0xD8, 0xF1, 0x84, 0x92, 0xA2, 0x4D,
pHysiX 6:2dc23167c8d8 220 0xDA, 0x2A, 0xD8, 0x48, 0x69, 0xD9, 0x2A, 0xD8, 0x68, 0x55, 0xDA, 0x32, 0xD8, 0x50, 0x71, 0xD9,
pHysiX 6:2dc23167c8d8 221 0x32, 0xD8, 0x70, 0x5D, 0xDA, 0x3A, 0xD8, 0x58, 0x79, 0xD9, 0x3A, 0xD8, 0x78, 0x93, 0xA3, 0x4D,
pHysiX 6:2dc23167c8d8 222 0xDA, 0x2A, 0xD8, 0x48, 0x69, 0xD9, 0x2A, 0xD8, 0x68, 0x55, 0xDA, 0x32, 0xD8, 0x50, 0x71, 0xD9,
pHysiX 6:2dc23167c8d8 223 0x32, 0xD8, 0x70, 0x5D, 0xDA, 0x3A, 0xD8, 0x58, 0x79, 0xD9, 0x3A, 0xD8, 0x78, 0xA8, 0x8A, 0x9A,
pHysiX 6:2dc23167c8d8 224 0xF0, 0x28, 0x50, 0x78, 0x9E, 0xF3, 0x88, 0x18, 0xF1, 0x9F, 0x1D, 0x98, 0xA8, 0xD9, 0x08, 0xD8,
pHysiX 6:2dc23167c8d8 225 0xC8, 0x9F, 0x12, 0x9E, 0xF3, 0x15, 0xA8, 0xDA, 0x12, 0x10, 0xD8, 0xF1, 0xAF, 0xC8, 0x97, 0x87,
pHysiX 6:2dc23167c8d8 226
pHysiX 6:2dc23167c8d8 227 // bank 5, 256 bytes
pHysiX 6:2dc23167c8d8 228 0x34, 0xB5, 0xB9, 0x94, 0xA4, 0x21, 0xF3, 0xD9, 0x22, 0xD8, 0xF2, 0x2D, 0xF3, 0xD9, 0x2A, 0xD8,
pHysiX 6:2dc23167c8d8 229 0xF2, 0x35, 0xF3, 0xD9, 0x32, 0xD8, 0x81, 0xA4, 0x60, 0x60, 0x61, 0xD9, 0x61, 0xD8, 0x6C, 0x68,
pHysiX 6:2dc23167c8d8 230 0x69, 0xD9, 0x69, 0xD8, 0x74, 0x70, 0x71, 0xD9, 0x71, 0xD8, 0xB1, 0xA3, 0x84, 0x19, 0x3D, 0x5D,
pHysiX 6:2dc23167c8d8 231 0xA3, 0x83, 0x1A, 0x3E, 0x5E, 0x93, 0x10, 0x30, 0x81, 0x10, 0x11, 0xB8, 0xB0, 0xAF, 0x8F, 0x94,
pHysiX 6:2dc23167c8d8 232 0xF2, 0xDA, 0x3E, 0xD8, 0xB4, 0x9A, 0xA8, 0x87, 0x29, 0xDA, 0xF8, 0xD8, 0x87, 0x9A, 0x35, 0xDA,
pHysiX 6:2dc23167c8d8 233 0xF8, 0xD8, 0x87, 0x9A, 0x3D, 0xDA, 0xF8, 0xD8, 0xB1, 0xB9, 0xA4, 0x98, 0x85, 0x02, 0x2E, 0x56,
pHysiX 6:2dc23167c8d8 234 0xA5, 0x81, 0x00, 0x0C, 0x14, 0xA3, 0x97, 0xB0, 0x8A, 0xF1, 0x2D, 0xD9, 0x28, 0xD8, 0x4D, 0xD9,
pHysiX 6:2dc23167c8d8 235 0x48, 0xD8, 0x6D, 0xD9, 0x68, 0xD8, 0xB1, 0x84, 0x0D, 0xDA, 0x0E, 0xD8, 0xA3, 0x29, 0x83, 0xDA,
pHysiX 6:2dc23167c8d8 236 0x2C, 0x0E, 0xD8, 0xA3, 0x84, 0x49, 0x83, 0xDA, 0x2C, 0x4C, 0x0E, 0xD8, 0xB8, 0xB0, 0xA8, 0x8A,
pHysiX 6:2dc23167c8d8 237 0x9A, 0xF5, 0x20, 0xAA, 0xDA, 0xDF, 0xD8, 0xA8, 0x40, 0xAA, 0xD0, 0xDA, 0xDE, 0xD8, 0xA8, 0x60,
pHysiX 6:2dc23167c8d8 238 0xAA, 0xDA, 0xD0, 0xDF, 0xD8, 0xF1, 0x97, 0x86, 0xA8, 0x31, 0x9B, 0x06, 0x99, 0x07, 0xAB, 0x97,
pHysiX 6:2dc23167c8d8 239 0x28, 0x88, 0x9B, 0xF0, 0x0C, 0x20, 0x14, 0x40, 0xB8, 0xB0, 0xB4, 0xA8, 0x8C, 0x9C, 0xF0, 0x04,
pHysiX 6:2dc23167c8d8 240 0x28, 0x51, 0x79, 0x1D, 0x30, 0x14, 0x38, 0xB2, 0x82, 0xAB, 0xD0, 0x98, 0x2C, 0x50, 0x50, 0x78,
pHysiX 6:2dc23167c8d8 241 0x78, 0x9B, 0xF1, 0x1A, 0xB0, 0xF0, 0x8A, 0x9C, 0xA8, 0x29, 0x51, 0x79, 0x8B, 0x29, 0x51, 0x79,
pHysiX 6:2dc23167c8d8 242 0x8A, 0x24, 0x70, 0x59, 0x8B, 0x20, 0x58, 0x71, 0x8A, 0x44, 0x69, 0x38, 0x8B, 0x39, 0x40, 0x68,
pHysiX 6:2dc23167c8d8 243 0x8A, 0x64, 0x48, 0x31, 0x8B, 0x30, 0x49, 0x60, 0xA5, 0x88, 0x20, 0x09, 0x71, 0x58, 0x44, 0x68,
pHysiX 6:2dc23167c8d8 244
pHysiX 6:2dc23167c8d8 245 // bank 6, 256 bytes
pHysiX 6:2dc23167c8d8 246 0x11, 0x39, 0x64, 0x49, 0x30, 0x19, 0xF1, 0xAC, 0x00, 0x2C, 0x54, 0x7C, 0xF0, 0x8C, 0xA8, 0x04,
pHysiX 6:2dc23167c8d8 247 0x28, 0x50, 0x78, 0xF1, 0x88, 0x97, 0x26, 0xA8, 0x59, 0x98, 0xAC, 0x8C, 0x02, 0x26, 0x46, 0x66,
pHysiX 6:2dc23167c8d8 248 0xF0, 0x89, 0x9C, 0xA8, 0x29, 0x51, 0x79, 0x24, 0x70, 0x59, 0x44, 0x69, 0x38, 0x64, 0x48, 0x31,
pHysiX 6:2dc23167c8d8 249 0xA9, 0x88, 0x09, 0x20, 0x59, 0x70, 0xAB, 0x11, 0x38, 0x40, 0x69, 0xA8, 0x19, 0x31, 0x48, 0x60,
pHysiX 6:2dc23167c8d8 250 0x8C, 0xA8, 0x3C, 0x41, 0x5C, 0x20, 0x7C, 0x00, 0xF1, 0x87, 0x98, 0x19, 0x86, 0xA8, 0x6E, 0x76,
pHysiX 6:2dc23167c8d8 251 0x7E, 0xA9, 0x99, 0x88, 0x2D, 0x55, 0x7D, 0x9E, 0xB9, 0xA3, 0x8A, 0x22, 0x8A, 0x6E, 0x8A, 0x56,
pHysiX 6:2dc23167c8d8 252 0x8A, 0x5E, 0x9F, 0xB1, 0x83, 0x06, 0x26, 0x46, 0x66, 0x0E, 0x2E, 0x4E, 0x6E, 0x9D, 0xB8, 0xAD,
pHysiX 6:2dc23167c8d8 253 0x00, 0x2C, 0x54, 0x7C, 0xF2, 0xB1, 0x8C, 0xB4, 0x99, 0xB9, 0xA3, 0x2D, 0x55, 0x7D, 0x81, 0x91,
pHysiX 6:2dc23167c8d8 254 0xAC, 0x38, 0xAD, 0x3A, 0xB5, 0x83, 0x91, 0xAC, 0x2D, 0xD9, 0x28, 0xD8, 0x4D, 0xD9, 0x48, 0xD8,
pHysiX 6:2dc23167c8d8 255 0x6D, 0xD9, 0x68, 0xD8, 0x8C, 0x9D, 0xAE, 0x29, 0xD9, 0x04, 0xAE, 0xD8, 0x51, 0xD9, 0x04, 0xAE,
pHysiX 6:2dc23167c8d8 256 0xD8, 0x79, 0xD9, 0x04, 0xD8, 0x81, 0xF3, 0x9D, 0xAD, 0x00, 0x8D, 0xAE, 0x19, 0x81, 0xAD, 0xD9,
pHysiX 6:2dc23167c8d8 257 0x01, 0xD8, 0xF2, 0xAE, 0xDA, 0x26, 0xD8, 0x8E, 0x91, 0x29, 0x83, 0xA7, 0xD9, 0xAD, 0xAD, 0xAD,
pHysiX 6:2dc23167c8d8 258 0xAD, 0xF3, 0x2A, 0xD8, 0xD8, 0xF1, 0xB0, 0xAC, 0x89, 0x91, 0x3E, 0x5E, 0x76, 0xF3, 0xAC, 0x2E,
pHysiX 6:2dc23167c8d8 259 0x2E, 0xF1, 0xB1, 0x8C, 0x5A, 0x9C, 0xAC, 0x2C, 0x28, 0x28, 0x28, 0x9C, 0xAC, 0x30, 0x18, 0xA8,
pHysiX 6:2dc23167c8d8 260 0x98, 0x81, 0x28, 0x34, 0x3C, 0x97, 0x24, 0xA7, 0x28, 0x34, 0x3C, 0x9C, 0x24, 0xF2, 0xB0, 0x89,
pHysiX 6:2dc23167c8d8 261 0xAC, 0x91, 0x2C, 0x4C, 0x6C, 0x8A, 0x9B, 0x2D, 0xD9, 0xD8, 0xD8, 0x51, 0xD9, 0xD8, 0xD8, 0x79,
pHysiX 6:2dc23167c8d8 262
pHysiX 6:2dc23167c8d8 263 // bank 7, 138 bytes (remainder)
pHysiX 6:2dc23167c8d8 264 0xD9, 0xD8, 0xD8, 0xF1, 0x9E, 0x88, 0xA3, 0x31, 0xDA, 0xD8, 0xD8, 0x91, 0x2D, 0xD9, 0x28, 0xD8,
pHysiX 6:2dc23167c8d8 265 0x4D, 0xD9, 0x48, 0xD8, 0x6D, 0xD9, 0x68, 0xD8, 0xB1, 0x83, 0x93, 0x35, 0x3D, 0x80, 0x25, 0xDA,
pHysiX 6:2dc23167c8d8 266 0xD8, 0xD8, 0x85, 0x69, 0xDA, 0xD8, 0xD8, 0xB4, 0x93, 0x81, 0xA3, 0x28, 0x34, 0x3C, 0xF3, 0xAB,
pHysiX 6:2dc23167c8d8 267 0x8B, 0xF8, 0xA3, 0x91, 0xB6, 0x09, 0xB4, 0xD9, 0xAB, 0xDE, 0xFA, 0xB0, 0x87, 0x9C, 0xB9, 0xA3,
pHysiX 6:2dc23167c8d8 268 0xDD, 0xF1, 0xA3, 0xA3, 0xA3, 0xA3, 0x95, 0xF1, 0xA3, 0xA3, 0xA3, 0x9D, 0xF1, 0xA3, 0xA3, 0xA3,
pHysiX 6:2dc23167c8d8 269 0xA3, 0xF2, 0xA3, 0xB4, 0x90, 0x80, 0xF2, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
pHysiX 6:2dc23167c8d8 270 0xA3, 0xB2, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xB0, 0x87, 0xB5, 0x99, 0xF1, 0xA3, 0xA3, 0xA3,
pHysiX 6:2dc23167c8d8 271 0x98, 0xF1, 0xA3, 0xA3, 0xA3, 0xA3, 0x97, 0xA3, 0xA3, 0xA3, 0xA3, 0xF3, 0x9B, 0xA3, 0xA3, 0xDC,
pHysiX 6:2dc23167c8d8 272 0xB9, 0xA7, 0xF1, 0x26, 0x26, 0x26, 0xD8, 0xD8, 0xFF
pHysiX 6:2dc23167c8d8 273 };
pHysiX 6:2dc23167c8d8 274
pHysiX 6:2dc23167c8d8 275 // thanks to Noah Zerkin for piecing this stuff together!
pHysiX 6:2dc23167c8d8 276 const unsigned char dmpConfig[MPU6050_DMP_CONFIG_SIZE] PROGMEM = {
pHysiX 6:2dc23167c8d8 277 // BANK OFFSET LENGTH [DATA]
pHysiX 6:2dc23167c8d8 278 0x03, 0x7B, 0x03, 0x4C, 0xCD, 0x6C, // FCFG_1 inv_set_gyro_calibration
pHysiX 6:2dc23167c8d8 279 0x03, 0xAB, 0x03, 0x36, 0x56, 0x76, // FCFG_3 inv_set_gyro_calibration
pHysiX 6:2dc23167c8d8 280 0x00, 0x68, 0x04, 0x02, 0xCB, 0x47, 0xA2, // D_0_104 inv_set_gyro_calibration
pHysiX 6:2dc23167c8d8 281 0x02, 0x18, 0x04, 0x00, 0x05, 0x8B, 0xC1, // D_0_24 inv_set_gyro_calibration
pHysiX 6:2dc23167c8d8 282 0x01, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x00, // D_1_152 inv_set_accel_calibration
pHysiX 6:2dc23167c8d8 283 0x03, 0x7F, 0x06, 0x0C, 0xC9, 0x2C, 0x97, 0x97, 0x97, // FCFG_2 inv_set_accel_calibration
pHysiX 6:2dc23167c8d8 284 0x03, 0x89, 0x03, 0x26, 0x46, 0x66, // FCFG_7 inv_set_accel_calibration
pHysiX 6:2dc23167c8d8 285 0x00, 0x6C, 0x02, 0x20, 0x00, // D_0_108 inv_set_accel_calibration
pHysiX 6:2dc23167c8d8 286 0x02, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_00 inv_set_compass_calibration
pHysiX 6:2dc23167c8d8 287 0x02, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_01
pHysiX 6:2dc23167c8d8 288 0x02, 0x48, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_02
pHysiX 6:2dc23167c8d8 289 0x02, 0x4C, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_10
pHysiX 6:2dc23167c8d8 290 0x02, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_11
pHysiX 6:2dc23167c8d8 291 0x02, 0x54, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_12
pHysiX 6:2dc23167c8d8 292 0x02, 0x58, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_20
pHysiX 6:2dc23167c8d8 293 0x02, 0x5C, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_21
pHysiX 6:2dc23167c8d8 294 0x02, 0xBC, 0x04, 0x00, 0x00, 0x00, 0x00, // CPASS_MTX_22
pHysiX 6:2dc23167c8d8 295 0x01, 0xEC, 0x04, 0x00, 0x00, 0x40, 0x00, // D_1_236 inv_apply_endian_accel
pHysiX 6:2dc23167c8d8 296 0x03, 0x7F, 0x06, 0x0C, 0xC9, 0x2C, 0x97, 0x97, 0x97, // FCFG_2 inv_set_mpu_sensors
pHysiX 6:2dc23167c8d8 297 0x04, 0x02, 0x03, 0x0D, 0x35, 0x5D, // CFG_MOTION_BIAS inv_turn_on_bias_from_no_motion
pHysiX 6:2dc23167c8d8 298 0x04, 0x09, 0x04, 0x87, 0x2D, 0x35, 0x3D, // FCFG_5 inv_set_bias_update
pHysiX 6:2dc23167c8d8 299 0x00, 0xA3, 0x01, 0x00, // D_0_163 inv_set_dead_zone
pHysiX 6:2dc23167c8d8 300 // SPECIAL 0x01 = enable interrupts
pHysiX 6:2dc23167c8d8 301 0x00, 0x00, 0x00, 0x01, // SET INT_ENABLE at i=22, SPECIAL INSTRUCTION
pHysiX 6:2dc23167c8d8 302 0x07, 0x86, 0x01, 0xFE, // CFG_6 inv_set_fifo_interupt
pHysiX 6:2dc23167c8d8 303 0x07, 0x41, 0x05, 0xF1, 0x20, 0x28, 0x30, 0x38, // CFG_8 inv_send_quaternion
pHysiX 6:2dc23167c8d8 304 0x07, 0x7E, 0x01, 0x30, // CFG_16 inv_set_footer
pHysiX 6:2dc23167c8d8 305 0x07, 0x46, 0x01, 0x9A, // CFG_GYRO_SOURCE inv_send_gyro
pHysiX 6:2dc23167c8d8 306 0x07, 0x47, 0x04, 0xF1, 0x28, 0x30, 0x38, // CFG_9 inv_send_gyro -> inv_construct3_fifo
pHysiX 6:2dc23167c8d8 307 0x07, 0x6C, 0x04, 0xF1, 0x28, 0x30, 0x38, // CFG_12 inv_send_accel -> inv_construct3_fifo
pHysiX 10:500c00d7b667 308 0x02, 0x16, 0x02, 0x00, IMU_FIFO_RATE_DIVIDER // D_0_22 inv_set_fifo_rate
pHysiX 6:2dc23167c8d8 309
pHysiX 6:2dc23167c8d8 310 // This very last 0x01 WAS a 0x09, which drops the FIFO rate down to 20 Hz. 0x07 is 25 Hz,
pHysiX 6:2dc23167c8d8 311 // 0x01 is 100Hz. Going faster than 100Hz (0x00=200Hz) tends to result in very noisy data.
pHysiX 6:2dc23167c8d8 312 // DMP output frequency is calculated easily using this equation: (200Hz / (1 + value))
pHysiX 6:2dc23167c8d8 313
pHysiX 6:2dc23167c8d8 314 // It is important to make sure the host processor can keep up with reading and processing
pHysiX 6:2dc23167c8d8 315 // the FIFO output at the desired rate. Handling FIFO overflow cleanly is also a good idea.
pHysiX 6:2dc23167c8d8 316 };
pHysiX 6:2dc23167c8d8 317
pHysiX 6:2dc23167c8d8 318 const unsigned char dmpUpdates[MPU6050_DMP_UPDATES_SIZE] PROGMEM = {
pHysiX 6:2dc23167c8d8 319 0x01, 0xB2, 0x02, 0xFF, 0xFF,
pHysiX 6:2dc23167c8d8 320 0x01, 0x90, 0x04, 0x09, 0x23, 0xA1, 0x35,
pHysiX 6:2dc23167c8d8 321 0x01, 0x6A, 0x02, 0x06, 0x00,
pHysiX 6:2dc23167c8d8 322 0x01, 0x60, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 323 0x00, 0x60, 0x04, 0x40, 0x00, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 324 0x01, 0x62, 0x02, 0x00, 0x00,
pHysiX 6:2dc23167c8d8 325 0x00, 0x60, 0x04, 0x00, 0x40, 0x00, 0x00
pHysiX 6:2dc23167c8d8 326 };
pHysiX 6:2dc23167c8d8 327
pHysiX 6:2dc23167c8d8 328 /* See MPU6050 under MotionApps 2.0 Section */
pHysiX 6:2dc23167c8d8 329
pHysiX 6:2dc23167c8d8 330 // uint8_t MPU6050::dmpSetFIFORate(uint8_t fifoRate);
pHysiX 6:2dc23167c8d8 331 // uint8_t MPU6050::dmpGetFIFORate();
pHysiX 6:2dc23167c8d8 332 // uint8_t MPU6050::dmpGetSampleStepSizeMS();
pHysiX 6:2dc23167c8d8 333 // uint8_t MPU6050::dmpGetSampleFrequency();
pHysiX 6:2dc23167c8d8 334 // int32_t MPU6050::dmpDecodeTemperature(int8_t tempReg);
pHysiX 6:2dc23167c8d8 335
pHysiX 6:2dc23167c8d8 336 //uint8_t MPU6050::dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
pHysiX 6:2dc23167c8d8 337 //uint8_t MPU6050::dmpUnregisterFIFORateProcess(inv_obj_func func);
pHysiX 6:2dc23167c8d8 338 //uint8_t MPU6050::dmpRunFIFORateProcesses();
pHysiX 6:2dc23167c8d8 339
pHysiX 6:2dc23167c8d8 340 // uint8_t MPU6050::dmpSendQuaternion(uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 341 // uint8_t MPU6050::dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 342 // uint8_t MPU6050::dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 343 // uint8_t MPU6050::dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 344 // uint8_t MPU6050::dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 345 // uint8_t MPU6050::dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 346 // uint8_t MPU6050::dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 347 // uint8_t MPU6050::dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 348 // uint8_t MPU6050::dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 349 // uint8_t MPU6050::dmpSendPacketNumber(uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 350 // uint8_t MPU6050::dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 351 // uint8_t MPU6050::dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
pHysiX 6:2dc23167c8d8 352
pHysiX 6:2dc23167c8d8 353 // uint8_t MPU6050::dmpGet6AxisQuaternion(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 354 // uint8_t MPU6050::dmpGetRelativeQuaternion(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 355
pHysiX 6:2dc23167c8d8 356 // uint8_t MPU6050::dmpSetLinearAccelFilterCoefficient(float coef);
pHysiX 6:2dc23167c8d8 357 // uint8_t MPU6050::dmpGetLinearAccel(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 358
pHysiX 6:2dc23167c8d8 359 // uint8_t MPU6050::dmpGetLinearAccelInWorld(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 360
pHysiX 6:2dc23167c8d8 361 // uint8_t MPU6050::dmpGetGyroAndAccelSensor(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 362 // uint8_t MPU6050::dmpGetGyroSensor(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 363 // uint8_t MPU6050::dmpGetControlData(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 364 // uint8_t MPU6050::dmpGetTemperature(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 365 // uint8_t MPU6050::dmpGetGravity(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 366
pHysiX 6:2dc23167c8d8 367 // uint8_t MPU6050::dmpGetUnquantizedAccel(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 368 // uint8_t MPU6050::dmpGetQuantizedAccel(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 369 // uint8_t MPU6050::dmpGetExternalSensorData(long *data, int size, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 370 // uint8_t MPU6050::dmpGetEIS(long *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 371
pHysiX 6:2dc23167c8d8 372 // uint8_t MPU6050::dmpGetAccelFloat(float *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 373 // uint8_t MPU6050::dmpGetQuaternionFloat(float *data, const uint8_t* packet);
pHysiX 6:2dc23167c8d8 374
pHysiX 6:2dc23167c8d8 375 // uint8_t MPU6050::dmpSetFIFOProcessedCallback(void (*func) (void));
pHysiX 6:2dc23167c8d8 376 // uint8_t MPU6050::dmpInitFIFOParam();
pHysiX 6:2dc23167c8d8 377 // uint8_t MPU6050::dmpCloseFIFO();
pHysiX 6:2dc23167c8d8 378 // uint8_t MPU6050::dmpSetGyroDataSource(uint_fast8_t source);
pHysiX 6:2dc23167c8d8 379 // uint8_t MPU6050::dmpDecodeQuantizedAccel();
pHysiX 6:2dc23167c8d8 380 // uint32_t MPU6050::dmpGetGyroSumOfSquare();
pHysiX 6:2dc23167c8d8 381 // uint32_t MPU6050::dmpGetAccelSumOfSquare();
pHysiX 6:2dc23167c8d8 382 // void MPU6050::dmpOverrideQuaternion(long *q);
pHysiX 6:2dc23167c8d8 383
pHysiX 6:2dc23167c8d8 384
pHysiX 6:2dc23167c8d8 385 #endif /* _MPU6050_6AXIS_MOTIONAPPS20_H_ */