PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] MPU6050 Fehler beim Auslesen der Werte



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

Valen
13.10.2014, 02:38
Hier ein paar Code Ausschnitte:So ein kleines Teil davon hilft nicht viel. Hast du etwas von diesen Bibliothek geändert? Lasse mindestens deine Eigene Code sehen.

Wieso bisst du so sicher das die Bibliothek von "Davide Gironi" richtig Funktioniert, und es auch nicht an LabView oder XBEE liegen kann. Welcher Tests haben dir davon überzeugt?

tobias060789
13.10.2014, 22:04
Hi!

Ja war mir sicher, da ich die Lib schon an einem anderen boad vorher getestet hatte.

Hab aber heute im Laufe des Tages den Fehler gefunden... Laufzeitfehler! Eine Timer ISR hat den Auslesevorgang am i2c unterbrochen und das regelmäßig. Daher immer nur der Fehler an der einen Achse.

Trotzdem Danke!

Lg