First attempt at adding Invense's Digital Motion Processing (DMP).
First working version of DMP output. Currently queries the DMP FIFO at 200Hz for quaternion output. Added several helper functions including endianness conversions and light-weight ASCII string printers. Also did a handful of cosmetic changes. Need to be better about incremental commits...
Moved firmware to a separate header. Changed quaternion to float after determining the fixed point format to be Q1.30.
Added Euler angles, and ability to read accelerometer and gyro output from DMP. Also added a fast 256 sample moving average filter.
Working version of DMP code. Outputs stable rotation estimates according to axes in the chip's datasheet.
Changed pins and added ATMega 328p in preparation for the Martinez brushless motor control board.
Added offsets for a second chip (should go somewhere else). Changed orientation to downward facing aerospace convention.
Added first attempt at motor driver and changed Timer0 to key off of PWM overflow.
DMPInit() was calling Delay() before Timer0 was initialized. Rearranged the order of initializations and separated the timing portion of Timer0 initialization for clarity.
Reorganized MPU5060 logic for clarity and consistency. Noticed that the clock source wasn't being set when initializing DMP, but found that setting to a gyro clock as recommended gave unstable results (seems to be a problem in the computation of the quaternions that leads to blocked I2C). Using the internal 8MHz oscilltor for now.
Removed orientation setting and recalibrated blue MPU6050.
First working version in which readings from the MPU6050 are used to drive a brushless motor. Currently the motor just follows the read roll angle.
First working version with feedback. Effective stabilization, but might benefit from derivative gain.
Added battery monitoring. Also, seem to be suddenly getting lots of I2C errors. Attempting to add error handling.