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]<<

& 0b1111111100000000;
cleanBUFF[2] = ((int)BUFF[2]<<

& 0b1111111100000000;
cleanBUFF[4] = ((int)BUFF[4]<<

& 0b1111111100000000;
cleanBUFF[6] = ((int)BUFF[6]<<

& 0b1111111100000000;
cleanBUFF[8] = ((int)BUFF[8]<<

& 0b1111111100000000;
cleanBUFF[10] = ((int)BUFF[10]<<

& 0b1111111100000000;
cleanBUFF[12] = ((int)BUFF[12]<<

& 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]<<
& 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]<<
|(int)wert[0];
ADXL_DIREKT[1] = ((int)wert[3]<<
|(int)wert[2];
ADXL_DIREKT[2] = ((int)wert[5]<<
|(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);
}