okay, heres my Code 
#include <Wire.h>
#include "ADXL_345_REGISTER.h"
#include "I2C.h"
#include "IMU_3000_REGISTER.h"
#include "Values.h"
/*****************************
* IMU 3000
* Digital Input auf +-2000°/sec
* -> FS_SEL = 3
* -> Scale Factor = 16.4
* Daten 16 Bit gross
* Startup Time bei 50ms
* Temperatur Offset = 35°C
*****************************/
#define SCALE_FACTOR 16.4
#define ANZAHL_BYTE 14
byte BUFF[14]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int cleanBUFF[14]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ERGEBNISSE[7]={
0, 0, 0, 0, 0, 0, 0};
float ERGEBNISSE_NACH_UMRECHNUNG[7]={
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
int ADXL_DIREKT[3] = {
0,0,0};
int FIFO_ANZAHL = 0;
byte CHECK_TRANSMISSION[1] = {
0b00000000};
unsigned long time=0;
void INIT_IMU()
{
writeTo(IMU_ADDR,PWR_MGM,PWR_MGM_VALUE);
readFrom(IMU_ADDR,PWR_MGM,1,CHECK_TRANSMISSION);
if(PWR_MGM_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" PWR_MGM OK ");
}
else
{
Serial.print(" PWR_MGM ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,USER_CTRL,0b00000000); // ADXL direkt auf I2C zum initialisieren
readFrom(IMU_ADDR,USER_CTRL,1,CHECK_TRANSMISSION);
if(0b00000000 == CHECK_TRANSMISSION[0])
{
Serial.print(" USER_CTRL OK ");
}
else
{
Serial.print(" USER_CTRL ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
INIT_ADXL();
writeTo(IMU_ADDR,USER_CTRL,0b00001010);
writeTo(IMU_ADDR,USER_CTRL,0b01101010); // Set FIFO rst when changing FIFO_EN
writeTo(IMU_ADDR,FIFO_EN,FIFO_EN_VALUE);
readFrom(IMU_ADDR,FIFO_EN,1,CHECK_TRANSMISSION);
if(FIFO_EN_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" FIFO_EN OK ");
}
else
{
Serial.print(" FIFO_EN ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,USER_CTRL,USER_CTRL_VALUE);
readFrom(IMU_ADDR,USER_CTRL,1,CHECK_TRANSMISSION);
if(USER_CTRL_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" USER_CTRL OK ");
}
else
{
Serial.print(" USER_CTRL ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,X_OFFS_USERH,X_OFFS_USERH_VALUE);
writeTo(IMU_ADDR,X_OFFS_USERL,X_OFFS_USERL_VALUE);
writeTo(IMU_ADDR,Y_OFFS_USERH,Y_OFFS_USERH_VALUE);
writeTo(IMU_ADDR,Y_OFFS_USERL,Y_OFFS_USERL_VALUE);
writeTo(IMU_ADDR,Z_OFFS_USERH,Z_OFFS_USERH_VALUE);
writeTo(IMU_ADDR,Z_OFFS_USERL,Z_OFFS_USERL_VALUE);
writeTo(IMU_ADDR,AUX_VDDIO,AUX_VDDIO_VALUE);
readFrom(IMU_ADDR,AUX_VDDIO,1,CHECK_TRANSMISSION);
if(AUX_VDDIO_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" AUX_VDDIO OK ");
}
else
{
Serial.print(" AUX_VDDIO ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,AUX_SLV_ADDR,AUX_SLV_ADDR_VALUE);
readFrom(IMU_ADDR,AUX_SLV_ADDR,1,CHECK_TRANSMISSION);
if(AUX_SLV_ADDR_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" AUX_SLV_ADDR OK ");
}
else
{
Serial.print(" AUX_SLV_ADDR ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,SMPLRT_DIV,SMPLRT_DIV_VALUE);
readFrom(IMU_ADDR,SMPLRT_DIV,1,CHECK_TRANSMISSION);
if(SMPLRT_DIV_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" SMPLRT_DIV OK ");
}
else
{
Serial.print(" SMPLRT_DIV ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,AUX_BURST_ADDR,AUX_BURST_ADDR_VALUE);
readFrom(IMU_ADDR,AUX_BURST_ADDR,1,CHECK_TRANSMISSION);
if(AUX_BURST_ADDR_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" AUX_BURST_ADDR OK ");
}
else
{
Serial.println(" AUX_BURST_ADDR ERROR ");
}
CHECK_TRANSMISSION[0] = 0b00000000;
writeTo(IMU_ADDR,DLPF_FS,DLPF_FS_VALUE);
readFrom(IMU_ADDR,DLPF_FS,1,CHECK_TRANSMISSION);
if(DLPF_FS_VALUE == CHECK_TRANSMISSION[0])
{
Serial.print(" DLPF_FS OK ");
}
else
{
Serial.print(" DLPF_FS ERROR ");
Serial.print(CHECK_TRANSMISSION[0],DEC);
}
}
void INIT_ADXL()
{
writeTo(ADXL_ADDR,POWER_CTL,0x00);
writeTo(ADXL_ADDR,POWER_CTL,0x16);
writeTo(ADXL_ADDR,POWER_CTL,POWER_CTL_VALUE);
writeTo(ADXL_ADDR,FIFO_CTL,FIFO_CTL_VALUE);
writeTo(ADXL_ADDR,INT_ENABLE,INT_ENABLE_VALUE);
}
void READ_IMU()
{
readFrom(IMU_ADDR,TEMP_OUT_H,ANZAHL_BYTE,BUFF);
cleanBUFF[0] = ((int)BUFF[0]<<8) & 0b1111111100000000;
cleanBUFF[2] = ((int)BUFF[2]<<8) & 0b1111111100000000;
cleanBUFF[4] = ((int)BUFF[4]<<8) & 0b1111111100000000;
cleanBUFF[6] = ((int)BUFF[6]<<8) & 0b1111111100000000;
cleanBUFF[8] = ((int)BUFF[8]<<8) & 0b1111111100000000;
cleanBUFF[10] = ((int)BUFF[10]<<8) & 0b1111111100000000;
cleanBUFF[12] = ((int)BUFF[12]<<8) & 0b1111111100000000;
cleanBUFF[1] = ((int)BUFF[1]) & 0b0000000011111111;
cleanBUFF[3] = ((int)BUFF[3]) & 0b0000000011111111;
cleanBUFF[5] = ((int)BUFF[5]) & 0b0000000011111111;
cleanBUFF[7] = ((int)BUFF[7]) & 0b0000000011111111;
cleanBUFF[9] = ((int)BUFF[9]) & 0b0000000011111111;
cleanBUFF[11] = ((int)BUFF[11]) & 0b0000000011111111;
cleanBUFF[13] = ((int)BUFF[13]) & 0b0000000011111111;
for(int i = 0; i<13;i++)
{
ERGEBNISSE[i] = cleanBUFF[i] | cleanBUFF[i+1];
}
for(int i = 1;i<4;i++)
{
ERGEBNISSE_NACH_UMRECHNUNG[i] = (float)ERGEBNISSE[i]/16.4;
}
for(int i = 4;i<7;i++)
{
ERGEBNISSE_NACH_UMRECHNUNG[i] = (float)ERGEBNISSE[i]/256.0;
}
}
void GET_FIFO_COUNT()
{
byte BUFF[2] = {
0x0,0x0 };
int cleanBUFF[2] = {
0x00,0x00 };
readFrom(IMU_ADDR,FIFO_COUNTH,2,BUFF);
cleanBUFF[0] = ((int)BUFF[0]<<8) & 0b0000001100000000;
cleanBUFF[1] = ((int)BUFF[1]) & 0b0000000011111111;
FIFO_ANZAHL = cleanBUFF[0] | cleanBUFF[1];
Serial.print(" FIFO COUNT : ");
Serial.println(FIFO_ANZAHL);
}
void PRINT_VALUES(float VALUES[])
{
Serial.print("TEMPERATUR: ");
Serial.print(VALUES[0]);
Serial.print(" GYRO X: ");
Serial.print(VALUES[1]);
Serial.print(" GYRO Y: ");
Serial.print(VALUES[2]);
Serial.print(" GYRO Z: ");
Serial.print(VALUES[3]);
Serial.print(" ACC X: ");
Serial.print(VALUES[4]);
Serial.print(" ACC Y: ");
Serial.print(VALUES[5]);
Serial.print(" ACC Z: ");
Serial.print(VALUES[6]);
Serial.print(" Bisherige Zeit ");
Serial.println(time);
}
void READ_ADXL()
{
byte wert[6]={
0,0,0,0,0,0 };
readFrom(ADXL_ADDR,DATAX0,6,wert);
ADXL_DIREKT[0] = ((int)wert[1]<<8)|(int)wert[0];
ADXL_DIREKT[1] = ((int)wert[3]<<8)|(int)wert[2];
ADXL_DIREKT[2] = ((int)wert[5]<<8)|(int)wert[4];
Serial.print("ADXL_DIREKT[0]: ");
Serial.print(ADXL_DIREKT[0]);
Serial.print(" ADXL_DIREKT[1]: ");
Serial.print(ADXL_DIREKT[1]);
Serial.print(" ADXL_DIREKT[2]: ");
Serial.print(ADXL_DIREKT[2]);
}
void IMU_TEST()
{
byte IDENTITAET[1] = {
0 };
readFrom(IMU_ADDR,WHO_AM_I,1,IDENTITAET);
Serial.print(" Adresse des Geraets: ");
Serial.println(IDENTITAET[0],DEC);
}
void setup()
{
Serial.begin(57600);
Wire.begin();
INIT_ADXL(); // Erst den ADXL initialisieren, da IMU danach die Daten ausliest
INIT_IMU();
IMU_TEST();
delay(50);
}
void loop()
{
time = millis();
if(time%40 <=2) // -> 25HZ
{
PRINT_VALUES(ERGEBNISSE_NACH_UMRECHNUNG);
READ_IMU();
GET_FIFO_COUNT();
//READ_ADXL(); //ADXL Direkt funktioniert
}
}
#ifndef IMU_3000_REGISTER
#define IMU_3000_REGISTER
#include "WProgram.h"
// IMU 3000
// Digital Input auf +-2000°/sec
// -> FS_SEL = 3
// -> Scale Factor = 16.4
// Daten 16 Bit groß
// Statup Time bei 50ms
// Temperatur Offset = 35°C
// IMU 3000 I²C Adresse
#define IMU_ADDR 0x68 // IMU_Reference S.30 = POWER-ON Value
///////////////////////
// Register MAP IMU 3000:
#define WHO_AM_I 0x00
#define X_OFFS_USERH 0x0C
#define X_OFFS_USERL 0x0D
#define Y_OFFS_USERH 0x0E
#define Y_OFFS_USERL 0x0F
#define Z_OFFS_USERH 0x10
#define Z_OFFS_USERL 0x11
#define FIFO_EN 0x12 // TEMP_OUT GYRO_XOUT GYRO_YOUT GYRO_ZOUT AUX_XOUT AUX_YOUT AUX_ZOUT FIFO_FOOTER
Hope this helps a little bit....
The Datasheets are available at : SparkFun IMU Fusion Board - ADXL345 & IMU3000 - SEN-10252 - SparkFun Electronics