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
						
					
Lesezeichen