Liste der Anhänge anzeigen (Anzahl: 1)
MPU6050 Fehler beim Auslesen der Werte
Hallo Leute!
Ich sitze nun seit längerem an einem Fehler, den ich selbst nicht mehr durchschaue... Vielleicht sieht ihn einer von euch.
Aufbau: MPU6050 via I2C an einem ATMEGA1284P --> UART --> XBEE--> PC --> LabView
Das auslesen aller achsen funktioniert soweit super nach einer Bibliothek von "Davide Gironi" --> Seite http://davidegironi.blogspot.de/2013...l#.VDsRtBa0Pwo
Nur mir ist jetzt aufgefallen, dass ich immer fehler bei der ACC X Achse bekomme (BLAUE LINIE).
Siehe Bild im Anhang!
Anscheinened verliert der X Wert sich irgendwo nur ich finde es einfach nicht. Das Programm ist soweit auf alle möglichkeiten getestet. An LabView oder XBEE liegt es nicht.
Hier ein paar Code Ausschnitte:
Code:
void mpu6050_init() {
#if MPU6050_I2CINIT == 1
//init i2c
i2c_init();
_delay_us(10);
#endif
//allow mpu6050 chip clocks to start up
_delay_ms(100);
//set sleep disabled
mpu6050_setSleepDisabled();
//wake up delay needed sleep disabled
_delay_ms(10);
//set clock source
// it is highly recommended that the device be configured to use one of the gyroscopes (or an external clock source)
// as the clock reference for improved stability
mpu6050_writeBits(MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, MPU6050_CLOCK_PLL_XGYRO);
//set DLPF bandwidth to 42Hz
mpu6050_writeBits(MPU6050_RA_CONFIG, MPU6050_CFG_DLPF_CFG_BIT, MPU6050_CFG_DLPF_CFG_LENGTH, MPU6050_DLPF_BW_42);
//set sampe rate
mpu6050_writeByte(MPU6050_RA_SMPLRT_DIV, 4); //1khz / (1 + 4) = 200Hz
//set gyro range
mpu6050_writeBits(MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, MPU6050_GYRO_FS);
//set accel range
mpu6050_writeBits(MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, MPU6050_ACCEL_FS);
}
//can not accept many request if we alreay have getattitude requests
/*
* get raw data
*/
void mpu6050_getRawData(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz) {
mpu6050_readBytes(MPU6050_RA_ACCEL_XOUT_H, 14, (uint8_t *)buffer);
*ax = (((int16_t)buffer[0]) << 8) | buffer[1];
*ay = (((int16_t)buffer[2]) << 8) | buffer[3];
*az = (((int16_t)buffer[4]) << 8) | buffer[5];
*gx = (((int16_t)buffer[8]) << 8) | buffer[9];
*gy = (((int16_t)buffer[10]) << 8) | buffer[11];
*gz = (((int16_t)buffer[12]) << 8) | buffer[13];
}
ax ist somit der Wert, der fehlerhaft ist.
Bitte um Hilfe!
Liebe Grüße