diff options
author | Damien George <damien.p.george@gmail.com> | 2014-08-10 22:26:20 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-08-10 22:26:20 +0100 |
commit | 101d87da6ac24439cc0238775aba062edb7d649c (patch) | |
tree | 7fa2b0ac938de13f4f4abdb8f683268b19995074 /stmhal/boards/STM32F4DISC/staccel.py | |
parent | 4ef26c14b1182da7075b65b995e7da7b0a94961d (diff) | |
download | micropython-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.py | 22 |
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] |