summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/boards/STM32F4DISC/staccel.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-08-10 22:26:20 +0100
committerDamien George <damien.p.george@gmail.com>2014-08-10 22:26:20 +0100
commit101d87da6ac24439cc0238775aba062edb7d649c (patch)
tree7fa2b0ac938de13f4f4abdb8f683268b19995074 /stmhal/boards/STM32F4DISC/staccel.py
parent4ef26c14b1182da7075b65b995e7da7b0a94961d (diff)
downloadmicropython-101d87da6ac24439cc0238775aba062edb7d649c.tar.gz
micropython-101d87da6ac24439cc0238775aba062edb7d649c.zip
stmhal: Working STM32F4DISC accelerometer, via Python script.
Thanks to David Siorpaes.
Diffstat (limited to 'stmhal/boards/STM32F4DISC/staccel.py')
-rwxr-xr-x[-rw-r--r--]stmhal/boards/STM32F4DISC/staccel.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/stmhal/boards/STM32F4DISC/staccel.py b/stmhal/boards/STM32F4DISC/staccel.py
index af842ebcf6..8395df803d 100644..100755
--- a/stmhal/boards/STM32F4DISC/staccel.py
+++ b/stmhal/boards/STM32F4DISC/staccel.py
@@ -2,8 +2,8 @@
Driver for accelerometer on STM32F4 Discover board.
Assumes it's a LIS302DL MEMS device.
-
-Not currently working.
+Sets accelerometer range at +-2g.
+Returns list containing X,Y,Z axis acceleration values in 'g' units (9.8m/s^2).
See:
STM32Cube_FW_F4_V1.1.0/Drivers/BSP/Components/lis302dl/lis302dl.h
@@ -22,12 +22,22 @@ READWRITE_CMD = const(0x80)
MULTIPLEBYTE_CMD = const(0x40)
LIS302DL_WHO_AM_I_ADDR = const(0x0f)
LIS302DL_CTRL_REG1_ADDR = const(0x20)
+LIS302DL_OUT_X = const(0x29)
+# Configuration for 100Hz sampling rate, +-2g range
+LIS302DL_CONF = 0b01000111
+
+def signed8(x):
+ if x & 0x80:
+ return x - 256
+ else:
+ return x
class STAccel:
def __init__(self):
self.cs_pin = Pin('PE3', Pin.OUT_PP, Pin.PULL_NONE)
self.cs_pin.high()
self.spi = SPI(1, SPI.MASTER, baudrate=328125, polarity=0, phase=1, bits=8)
+ self.wr(LIS302DL_CTRL_REG1_ADDR, bytearray([LIS302DL_CONF]))
def rd(self, addr, nbytes):
if nbytes > 1:
@@ -52,5 +62,9 @@ class STAccel:
def read_id(self):
return self.rd(LIS302DL_WHO_AM_I_ADDR, 1)
- def init(self, init_param):
- self.wr(LIS302DL_CTRL_REG1_ADDR, bytearray([init_param]))
+ def get_xyz(self):
+ val = self.rd(LIS302DL_OUT_X, 5)
+ x = signed8(val[0]) * 18.0 / 1000
+ y = signed8(val[2]) * 18.0 / 1000
+ z = signed8(val[4]) * 18.0 / 1000
+ return [x, y, z]