fixed mma driver ID;

fixed a boner #ifdef typo in imu.c
go back to gyro glitch stuff in sensors.c
do gyrocal during acc cal as well

git-svn-id: https://afrodevices.googlecode.com/svn/trunk/baseflight@164 7c89a4a9-59b9-e629-4cfe-3a2d53b20e61
This commit is contained in:
timecop 2012-06-14 04:12:23 +00:00
parent 8fb580d3f5
commit f73ccdd0a9
5 changed files with 2541 additions and 2523 deletions

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,7 @@
#define MMA8452_ADDRESS 0x1C #define MMA8452_ADDRESS 0x1C
#define MMA8452_DEVICE_SIGNATURE 0x2A #define MMA8452_DEVICE_SIGNATURE 0x2A
#define MMA8451_DEVICE_SIGNATURE 0x1A
#define MMA8452_STATUS 0x00 #define MMA8452_STATUS 0x00
#define MMA8452_OUT_X_MSB 0x01 #define MMA8452_OUT_X_MSB 0x01
@ -46,6 +47,7 @@
#define MMA8452_CTRL_REG1_ACTIVE 0x01 #define MMA8452_CTRL_REG1_ACTIVE 0x01
extern uint16_t acc_1G; extern uint16_t acc_1G;
static uint8_t device_id;
static void mma8452Init(void); static void mma8452Init(void);
static void mma8452Read(int16_t *accelData); static void mma8452Read(int16_t *accelData);
@ -57,12 +59,13 @@ bool mma8452Detect(sensor_t *acc)
uint8_t sig = 0; uint8_t sig = 0;
ack = i2cRead(MMA8452_ADDRESS, MMA8452_WHO_AM_I, 1, &sig); ack = i2cRead(MMA8452_ADDRESS, MMA8452_WHO_AM_I, 1, &sig);
if (!ack || sig != MMA8452_DEVICE_SIGNATURE) if (!ack || (sig != MMA8452_DEVICE_SIGNATURE && sig != MMA8451_DEVICE_SIGNATURE))
return false; return false;
acc->init = mma8452Init; acc->init = mma8452Init;
acc->read = mma8452Read; acc->read = mma8452Read;
acc->align = mma8452Align; acc->align = mma8452Align;
device_id = sig;
return true; return true;
} }

View File

@ -56,9 +56,9 @@ void computeIMU(void)
gyroADCp[axis] = gyroADC[axis]; gyroADCp[axis] = gyroADC[axis];
#else #else
gyroData[axis] = gyroADC[axis]; gyroData[axis] = gyroADC[axis];
#endif
if (!sensors(SENSOR_ACC)) if (!sensors(SENSOR_ACC))
accADC[axis] = 0; accADC[axis] = 0;
#endif
timeInterleave = micros(); timeInterleave = micros();
annexCode(); annexCode();
#ifdef GYRO_INTERLEAVE #ifdef GYRO_INTERLEAVE

View File

@ -272,6 +272,7 @@ void Baro_update(void)
static void GYRO_Common(void) static void GYRO_Common(void)
{ {
static int16_t previousGyroADC[3] = { 0, 0, 0 };
static int32_t g[3]; static int32_t g[3];
uint8_t axis; uint8_t axis;
@ -293,6 +294,12 @@ static void GYRO_Common(void)
} }
calibratingG--; calibratingG--;
} }
for (axis = 0; axis < 3; axis++) {
gyroADC[axis] -= gyroZero[axis];
//anti gyro glitch, limit the variation between two consecutive readings
gyroADC[axis] = constrain(gyroADC[axis], previousGyroADC[axis] - 800, previousGyroADC[axis] + 800);
previousGyroADC[axis] = gyroADC[axis];
}
} }
void Gyro_getADC(void) void Gyro_getADC(void)

View File

@ -318,6 +318,7 @@ void serialCom(void)
break; break;
case MSP_ACC_CALIBRATION: case MSP_ACC_CALIBRATION:
calibratingA = 400; calibratingA = 400;
calibratingG = 1000; // hit gyro too
break; break;
case MSP_MAG_CALIBRATION: case MSP_MAG_CALIBRATION:
calibratingM = 1; calibratingM = 1;