tobias060789
13.10.2014, 01:47
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/02/avr-atmega-mpu6050-gyroscope-and.html#.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:
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
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/02/avr-atmega-mpu6050-gyroscope-and.html#.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:
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