Regarding this topic
I'm having the exact same problem with the Z-axis ! X and Y axes are working well, but the issue is with the Z-axis ..
1- When using +-2 g range, the Z reading is 511, it doesn't change regardless the orientation of the ADXL345.
2-I was obliged to use +-16 g range to read any difference in the z-axis
3- When using +-16 g, the z-axis only changes from 4095 to 3773 from 0 to -1 g, I mean by that :
From 0 to 1 g (z-axis) --> The reading is 4095 (doesn't change)
From < 0 g (z-axis) --> The reading begins decreasing until reaching -1 g orientation giving an output of 3773
Therefore any value > 0 g (z-axis) isn't captured, the maximum is 0 g .. Working range is -1<g<0
-I'm using I2C mode
-I'm using this board:
- I tried using a negative offset of the maximum value OFSZ = 0x80 (-128 LBS) , the same problem exists but with a maximum value output of 3582 [ (4095*3.9 - 128*15.6)/3.9 ].. I think this means that the problem isn't the maximum number of bits (13 bits), but a sensor core problem.
Similar problem was found here:
I think he was then satisfied with the -1<g<0 readings after using +-16 g range mode.
I'm using I2C with PIC16F877A which has a logic level of 5 V, should I use a logic level converter ?! I didn't use one, taking into consideration that the I2C bus is pulled up in the ADXL345 module with 3.3 V so no need of logic conversion as the pic is only driving the line low or releasing it (I2C protocol).
Also if there was a problem with I2C, it wouldn't appear only in z-axis, it would've appeared in other readings.
By the way, X-Y axes readings are very accurate, with no noise at all specially after adding a 47 uF parallel capacitor on the input power source.
Any help is appreciated,