Hi,
i tried every sample code (hobbytronics, varesano …). But no success.
I watched the registers after i set them to a value.
Theres only one Register which gives a constant value of zero.
It’s DLPF_FS (Register 22), even if i set it to another value…
Heres my Code if someone can find a mistake 
#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
- Statup 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};
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,0b00100000);
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;
INIT_ADXL();
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,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,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 = cleanBUFF | cleanBUFF[i+1];
* } *
* for(int i = 1;i<4;i++)*
* {*
ERGEBNISSE_NACH_UMRECHNUNG = (float)ERGEBNISSE*/16.4;*
* }*
* for(int i = 4;i<7;i++)*
* {*
ERGEBNISSE_NACH_UMRECHNUNG = (float)ERGEBNISSE*/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.println(VALUES[6]);
}
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.println(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()
{_
READ_IMU();
//GET_FIFO_COUNT();
READ_ADXL(); //ADXL Direkt funktioniert*
* PRINT_VALUES(ERGEBNISSE_NACH_UMRECHNUNG);
_ delay(50);
}*_