I2C accellerometer

From BitWizard Wiki
Jump to navigation Jump to search

General info

The I2C accellerometer is based on the MMA8652 from freescale.


As with all bitwizard I2C boards, the board has a 4 pin female connector on the left and a male connector on the right so that you can daisychain multiple boards.

The pinout is GND, SDA, SCL, VCC.


The chip is 3.3V, a regulator is provided on board. This regulator has a dropout of about 1V, so the board currently requires a 5V VCC. We'll move to a different regulator one of these days allowing clean 3.3V operation. (the dropout will be so low that the chip will have to make do with 3.299V if you provide 3.300V....)


This is a sample script that runs on raspberry pi to extract the X, Y and Z accellerometer values. It requires you install the bw_tool.

acc="bw_tool -I -D /dev/i2c-1 -a 3a"
# reset the accelerometer. 
$acc -W 2b:40:b
# minimum 1ms IIRC. 
sleep 0.01
#select range=1 for +/- 4G fs range. 
$acc -W 0e:"$range":b 2b:2:b 2c:0:b 2d:1:b 2e:1:b 2a:39:b
sleep 1
#$acc -R 0:l
result=`$acc -R 0:l |sed -e 's/\(..\)/\1 /g' `
#echo $result
x=`echo $result | awk '{print $7$6}'`
y=`echo $result | awk '{print $5$4}'`
z=`echo $result | awk '{print $3$2}'`
echo x=$x y=$y z=$z

The numbers are presented in hex. Remember that (in the default +/-2G fs range) 4000 is one G, c000 is about minus one G.

Mine currently reports:

x=0c70 y=0580 z=3f30

so it is not quite flat (X and Y significantly differ from zero. I get about +/- 60 when its pressed to the table). but it is still registering almost a full G in the Z direction .