From db6afa4aaff2191c8e7a26d9117a0da32b252938 Mon Sep 17 00:00:00 2001 From: William Clark Date: Thu, 21 Dec 2023 13:59:31 +0000 Subject: [PATCH] reading accel data --- lis3dh.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/lis3dh.py b/lis3dh.py index ee08dfb..322935c 100644 --- a/lis3dh.py +++ b/lis3dh.py @@ -6,6 +6,28 @@ import struct 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) scl_pin = machine.Pin(17) @@ -20,3 +42,54 @@ def write(reg, val): # WHO_AM_I if read(0x0F, 1)[0] == 0x33: 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(">= 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)