reading accel data
This commit is contained in:
parent
5e2e85695c
commit
db6afa4aaf
73
lis3dh.py
73
lis3dh.py
@ -6,6 +6,28 @@ import struct
|
|||||||
|
|
||||||
LIS3DH_I2C_ADDR = 0x18
|
LIS3DH_I2C_ADDR = 0x18
|
||||||
|
|
||||||
|
# ODR data rate
|
||||||
|
ODR_POWER_OFF = 0b0000
|
||||||
|
# all operating modes
|
||||||
|
ODR_1_HZ = 0b0001
|
||||||
|
ODR_10_HZ = 0b0010
|
||||||
|
ODR_25_HZ = 0b0011
|
||||||
|
ODR_50_HZ = 0b0100
|
||||||
|
ODR_100_HZ = 0b0101
|
||||||
|
ODR_200_HZ = 0b0110
|
||||||
|
ODR_400_HZ = 0b0111
|
||||||
|
# specific operating modes only
|
||||||
|
ODR_LP_1600_HZ = 0b1000
|
||||||
|
ODR_NORM_1344_HZ = 0b1001
|
||||||
|
ODR_LP_5376_HZ = 0b1001
|
||||||
|
|
||||||
|
# acc. scale
|
||||||
|
FS_2G = 0b00
|
||||||
|
FS_4G = 0b01
|
||||||
|
FS_8G = 0b10
|
||||||
|
FS_16G = 0b11
|
||||||
|
|
||||||
|
|
||||||
sda_pin = machine.Pin(16)
|
sda_pin = machine.Pin(16)
|
||||||
scl_pin = machine.Pin(17)
|
scl_pin = machine.Pin(17)
|
||||||
|
|
||||||
@ -20,3 +42,54 @@ def write(reg, val):
|
|||||||
# WHO_AM_I
|
# WHO_AM_I
|
||||||
if read(0x0F, 1)[0] == 0x33:
|
if read(0x0F, 1)[0] == 0x33:
|
||||||
print("found LIS3DH")
|
print("found LIS3DH")
|
||||||
|
|
||||||
|
|
||||||
|
# reboot
|
||||||
|
write(0x24, struct.pack("B", 0x80))
|
||||||
|
sleep(0.1)
|
||||||
|
|
||||||
|
|
||||||
|
Z_en = 1
|
||||||
|
Y_en = 1
|
||||||
|
X_en = 1
|
||||||
|
ctrl_reg1 = 0 | (ODR_10_HZ << 4) | (Z_en << 2) | (Y_en << 1) | X_en
|
||||||
|
write(0x20, struct.pack("B", ctrl_reg1))
|
||||||
|
|
||||||
|
ctrl_reg4 = 0 | (FS_16G << 4)
|
||||||
|
ctrl_reg4 |= 0x80 # set block update
|
||||||
|
ctrl_reg4 |= 0x08 # set HR mode
|
||||||
|
write(0x23, struct.pack("B", ctrl_reg4))
|
||||||
|
|
||||||
|
|
||||||
|
sleep(0.2) # 200 ms
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
while ((read(0x27, 1)[0] >> 3) & 1) == 0:
|
||||||
|
sleep(0.02)
|
||||||
|
|
||||||
|
data = read(0x28 | 0x80, 6)
|
||||||
|
accX, accY, accZ = struct.unpack("<hhh", data)
|
||||||
|
accX >>= 2
|
||||||
|
accY >>= 2
|
||||||
|
accZ >>= 2
|
||||||
|
|
||||||
|
# divide depending on FS to get units of mg
|
||||||
|
# this is only for HR mode (maybe)
|
||||||
|
# see table 4 in datasheet
|
||||||
|
|
||||||
|
# scale output to g
|
||||||
|
#scale = 1/(4 * 1000) # FS_2G HR
|
||||||
|
#scale = 1/(2 * 1000) # FS_4G HR
|
||||||
|
#scale = 1/(1 * 1000) # FS_8G HR
|
||||||
|
scale = 1/(0.3333333 * 1000) # FS_16G HR
|
||||||
|
accX *= scale
|
||||||
|
accY *= scale
|
||||||
|
accZ *= scale
|
||||||
|
|
||||||
|
|
||||||
|
print(f"x: {accX:.3f}, y: {accY:.3f}, z: {accZ:.3f}")
|
||||||
|
|
||||||
|
|
||||||
|
sleep(0.05)
|
||||||
|
Loading…
Reference in New Issue
Block a user