From ef2476f62632be5a87e290aeffa848d9761b5b0a Mon Sep 17 00:00:00 2001 From: dherrada Date: Thu, 25 Jun 2020 15:42:04 -0400 Subject: [PATCH 1/9] Better documentation in simpletest, new example: write_registers --- examples/l3gd20_simpletest.py | 9 +++++++++ examples/l3gd20_write_registers.py | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 examples/l3gd20_write_registers.py diff --git a/examples/l3gd20_simpletest.py b/examples/l3gd20_simpletest.py index 4b2e15e..3299402 100644 --- a/examples/l3gd20_simpletest.py +++ b/examples/l3gd20_simpletest.py @@ -5,7 +5,16 @@ # Hardware I2C setup: I2C = busio.I2C(board.SCL, board.SDA) +# Initializes L3GD20 object using default range, 250dps SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C) +# Initialize L3GD20 object using a different range. +#SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_2000DPS) + +# Possible values for rng are: +# adafruit_l3gd20.L3DS20_Range_250DPS, 250 degrees per second. Default range +# adafruit_l3gd20.L3DS20_Range_500DPS, 500 degrees per second +# adafruit_l3gd20.L3DS20_Range_2000DPS, 2000 degrees per second + # Hardware SPI setup: # import digitalio diff --git a/examples/l3gd20_write_registers.py b/examples/l3gd20_write_registers.py new file mode 100644 index 0000000..196c299 --- /dev/null +++ b/examples/l3gd20_write_registers.py @@ -0,0 +1,19 @@ +import time +import board +import busio +import adafruit_l3gd20 + +# Hardware I2C setup: +I2C = busio.I2C(board.SCL, board.SDA) +SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_2000DPS) + +# Update the chip's register 0x20 (CTRL_REG1) with the value 0xBF +SENSOR.write_register(0x20, 0xBF) + +# This sets the output data rate to 380Hz and keeps everything else on their default modes +# For more information about CTRL_REG1, see section 7.2 of the datasheet + +while True: + print("Angular Momentum (rad/s): {}".format(SENSOR.gyro)) + print() + time.sleep(1) From 9cc127c9909c0452fafb982ec5825584908c7c32 Mon Sep 17 00:00:00 2001 From: dherrada Date: Thu, 25 Jun 2020 15:45:13 -0400 Subject: [PATCH 2/9] Formatted with black --- examples/l3gd20_simpletest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/l3gd20_simpletest.py b/examples/l3gd20_simpletest.py index 3299402..6714351 100644 --- a/examples/l3gd20_simpletest.py +++ b/examples/l3gd20_simpletest.py @@ -8,7 +8,7 @@ # Initializes L3GD20 object using default range, 250dps SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C) # Initialize L3GD20 object using a different range. -#SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_2000DPS) +# SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_2000DPS) # Possible values for rng are: # adafruit_l3gd20.L3DS20_Range_250DPS, 250 degrees per second. Default range From 45c31c2ff0ced28e0d2efc3ee82dce19ea61f2cf Mon Sep 17 00:00:00 2001 From: dherrada Date: Thu, 25 Jun 2020 15:52:56 -0400 Subject: [PATCH 3/9] Tweaked Hz in comment --- examples/l3gd20_write_registers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/l3gd20_write_registers.py b/examples/l3gd20_write_registers.py index 196c299..fd8a586 100644 --- a/examples/l3gd20_write_registers.py +++ b/examples/l3gd20_write_registers.py @@ -7,11 +7,11 @@ I2C = busio.I2C(board.SCL, board.SDA) SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_2000DPS) -# Update the chip's register 0x20 (CTRL_REG1) with the value 0xBF +# Update the chip's register 0x20 (CTRL1) with the value 0xBF SENSOR.write_register(0x20, 0xBF) -# This sets the output data rate to 380Hz and keeps everything else on their default modes -# For more information about CTRL_REG1, see section 7.2 of the datasheet +# This sets the output data rate to 400Hz and keeps everything else on their default modes +# For more information about CTRL1, see section 7.2 of the datasheet while True: print("Angular Momentum (rad/s): {}".format(SENSOR.gyro)) From 4c47e5581f6aa043eecd8434fc8f48624df5092c Mon Sep 17 00:00:00 2001 From: dherrada Date: Mon, 29 Jun 2020 12:04:04 -0400 Subject: [PATCH 4/9] Added support for setting data rate --- adafruit_l3gd20.py | 23 +++++++++++++++-------- examples/l3gd20_simpletest.py | 12 +++++++++--- examples/l3gd20_write_registers.py | 19 ------------------- 3 files changed, 24 insertions(+), 30 deletions(-) delete mode 100644 examples/l3gd20_write_registers.py diff --git a/adafruit_l3gd20.py b/adafruit_l3gd20.py index 1208d63..7e40128 100644 --- a/adafruit_l3gd20.py +++ b/adafruit_l3gd20.py @@ -67,6 +67,11 @@ L3DS20_RANGE_500DPS = const(1) L3DS20_RANGE_2000DPS = const(2) +L3DS20_RATE_100Hz = const(0x00) +L3DS20_RATE_200Hz = const(0x40) +L3DS20_RATE_400Hz = const(0x80) +L3DS20_RATE_800Hz = const(0xC0) + _L3GD20_REGISTER_CTRL_REG1 = const(0x20) _L3GD20_REGISTER_CTRL_REG4 = const(0x23) @@ -91,9 +96,12 @@ class L3GD20: :param int rng: a range value one of L3DS20_RANGE_250DPS (default), L3DS20_RANGE_500DPS, or L3DS20_RANGE_2000DPS + + :param int rate: a rate value one of L3DS20_RATE_100Hz (default), L3DS20_RATE_200Hz, + L3DS20_RATE_400Hz, or L3DS20_RATE_800Hz """ - def __init__(self, rng=L3DS20_RANGE_250DPS): + def __init__(self, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100Hz): chip_id = self.read_register(_ID_REGISTER) if chip_id not in (_L3GD20_CHIP_ID, _L3GD20H_CHIP_ID): raise RuntimeError( @@ -119,7 +127,8 @@ def __init__(self, rng=L3DS20_RANGE_250DPS): # 0 XEN X-axis enable (0 = disabled, 1 = enabled) # Switch to normal mode and enable all three channels - self.write_register(_L3GD20_REGISTER_CTRL_REG1, 0x0F) + # self.write_register(_L3GD20_REGISTER_CTRL_REG1, 0x0F) + self.write_register(_L3GD20_REGISTER_CTRL_REG1, rate + 0x0F) # Set CTRL_REG2 (0x21) # ==================================================================== @@ -188,7 +197,6 @@ def __init__(self, rng=L3DS20_RANGE_250DPS): # Nothing to do ... keep default values # ------------------------------------------------------------------ - @property def gyro(self): """ @@ -212,12 +220,12 @@ class L3GD20_I2C(L3GD20): gyro_raw = Struct(_L3GD20_REGISTER_OUT_X_L_X80, " Date: Mon, 29 Jun 2020 12:35:57 -0400 Subject: [PATCH 5/9] Formatted with black --- adafruit_l3gd20.py | 15 +++++++++++++-- docs/conf.py | 4 ++-- examples/l3gd20_simpletest.py | 4 +++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/adafruit_l3gd20.py b/adafruit_l3gd20.py index 7e40128..56a4e8c 100644 --- a/adafruit_l3gd20.py +++ b/adafruit_l3gd20.py @@ -197,6 +197,7 @@ def __init__(self, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100Hz): # Nothing to do ... keep default values # ------------------------------------------------------------------ + @property def gyro(self): """ @@ -220,7 +221,9 @@ class L3GD20_I2C(L3GD20): gyro_raw = Struct(_L3GD20_REGISTER_OUT_X_L_X80, " Date: Mon, 29 Jun 2020 12:42:46 -0400 Subject: [PATCH 6/9] Linted --- adafruit_l3gd20.py | 22 +++++++++++----------- examples/l3gd20_simpletest.py | 16 +++++++--------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/adafruit_l3gd20.py b/adafruit_l3gd20.py index 56a4e8c..c890072 100644 --- a/adafruit_l3gd20.py +++ b/adafruit_l3gd20.py @@ -67,10 +67,10 @@ L3DS20_RANGE_500DPS = const(1) L3DS20_RANGE_2000DPS = const(2) -L3DS20_RATE_100Hz = const(0x00) -L3DS20_RATE_200Hz = const(0x40) -L3DS20_RATE_400Hz = const(0x80) -L3DS20_RATE_800Hz = const(0xC0) +L3DS20_RATE_100HZ = const(0x00) +L3DS20_RATE_200HZ = const(0x40) +L3DS20_RATE_400HZ = const(0x80) +L3DS20_RATE_800HZ = const(0xC0) _L3GD20_REGISTER_CTRL_REG1 = const(0x20) _L3GD20_REGISTER_CTRL_REG4 = const(0x23) @@ -96,12 +96,12 @@ class L3GD20: :param int rng: a range value one of L3DS20_RANGE_250DPS (default), L3DS20_RANGE_500DPS, or L3DS20_RANGE_2000DPS - - :param int rate: a rate value one of L3DS20_RATE_100Hz (default), L3DS20_RATE_200Hz, - L3DS20_RATE_400Hz, or L3DS20_RATE_800Hz + + :param int rate: a rate value one of L3DS20_RATE_100HZ (default), L3DS20_RATE_200HZ, + L3DS20_RATE_400HZ, or L3DS20_RATE_800HZ """ - def __init__(self, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100Hz): + def __init__(self, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100HZ): chip_id = self.read_register(_ID_REGISTER) if chip_id not in (_L3GD20_CHIP_ID, _L3GD20H_CHIP_ID): raise RuntimeError( @@ -222,7 +222,7 @@ class L3GD20_I2C(L3GD20): """Gives the raw gyro readings, in units of rad/s.""" def __init__( - self, i2c, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100Hz, address=0x6B + self, i2c, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100HZ, address=0x6B ): import adafruit_bus_device.i2c_device as i2c_device # pylint: disable=import-outside-toplevel @@ -270,9 +270,9 @@ def __init__( spi_busio, cs, rng=L3DS20_RANGE_250DPS, - rate=L3DS20_RATE_100Hz, + rate=L3DS20_RATE_100HZ, baudrate=100000, - ): + ): # pylint: disable=too-many-arguments import adafruit_bus_device.spi_device as spi_device # pylint: disable=import-outside-toplevel self._spi = spi_device.SPIDevice(spi_busio, cs, baudrate=baudrate) diff --git a/examples/l3gd20_simpletest.py b/examples/l3gd20_simpletest.py index 4b9628b..e349690 100644 --- a/examples/l3gd20_simpletest.py +++ b/examples/l3gd20_simpletest.py @@ -6,11 +6,9 @@ # Hardware I2C setup: I2C = busio.I2C(board.SCL, board.SDA) # Initializes L3GD20 object using default range, 250dps -# SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C) +SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C) # Initialize L3GD20 object using a custom range and output data rate (ODR). -SENSOR = adafruit_l3gd20.L3GD20_I2C( - I2C, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200Hz -) +# SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200HZ) # Possible values for rng are: # adafruit_l3gd20.L3DS20_Range_250DPS, 250 degrees per second. Default range @@ -18,17 +16,17 @@ # adafruit_l3gd20.L3DS20_Range_2000DPS, 2000 degrees per second # Possible values for rate are: -# adafruit_l3gd20.L3DS20_RATE_100Hz, 100Hz data rate. Default data rate -# adafruit_l3gd20.L3DS20_RATE_200Hz, 200Hz data rate -# adafruit_l3gd20.L3DS20_RATE_400Hz, 400Hz data rate -# adafruit_l3gd20.L3DS20_RATE_800Hz, 800Hz data rate +# adafruit_l3gd20.L3DS20_RATE_100HZ, 100Hz data rate. Default data rate +# adafruit_l3gd20.L3DS20_RATE_200HZ, 200Hz data rate +# adafruit_l3gd20.L3DS20_RATE_400HZ, 400Hz data rate +# adafruit_l3gd20.L3DS20_RATE_800HZ, 800Hz data rate # Hardware SPI setup: # import digitalio # CS = digitalio.DigitalInOut(board.D5) # SPIB = busio.SPI(board.SCK, board.MOSI, board.MISO) # SENSOR = adafruit_l3gd20.L3GD20_SPI(SPIB, CS) -# SENSOR = adafruit_l3gd20.L3GD20_I2C(SPIB, CS, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200Hz) +# SENSOR = adafruit_l3gd20.L3GD20_I2C(SPIB, CS, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200HZ) while True: print("Angular Momentum (rad/s): {}".format(SENSOR.gyro)) From 6a65910bffc49b357ea10a0b7e87422b7c47f369 Mon Sep 17 00:00:00 2001 From: dherrada Date: Mon, 29 Jun 2020 12:49:49 -0400 Subject: [PATCH 7/9] More formatting --- examples/l3gd20_simpletest.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/l3gd20_simpletest.py b/examples/l3gd20_simpletest.py index e349690..742ed7d 100644 --- a/examples/l3gd20_simpletest.py +++ b/examples/l3gd20_simpletest.py @@ -8,7 +8,9 @@ # Initializes L3GD20 object using default range, 250dps SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C) # Initialize L3GD20 object using a custom range and output data rate (ODR). -# SENSOR = adafruit_l3gd20.L3GD20_I2C(I2C, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200HZ) +# SENSOR = adafruit_l3gd20.L3GD20_I2C( +# I2C, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200HZ +# ) # Possible values for rng are: # adafruit_l3gd20.L3DS20_Range_250DPS, 250 degrees per second. Default range @@ -26,7 +28,12 @@ # CS = digitalio.DigitalInOut(board.D5) # SPIB = busio.SPI(board.SCK, board.MOSI, board.MISO) # SENSOR = adafruit_l3gd20.L3GD20_SPI(SPIB, CS) -# SENSOR = adafruit_l3gd20.L3GD20_I2C(SPIB, CS, rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, rate=adafruit_l3gd20.L3DS20_RATE_200HZ) +# SENSOR = adafruit_l3gd20.L3GD20_I2C( +# SPIB, +# CS, +# rng=adafruit_l3gd20.L3DS20_RANGE_500DPS, +# rate=adafruit_l3gd20.L3DS20_RATE_200HZ, +# ) while True: print("Angular Momentum (rad/s): {}".format(SENSOR.gyro)) From b1d3b10b4b11821a8a927f91372727bbb9f85607 Mon Sep 17 00:00:00 2001 From: dherrada Date: Tue, 30 Jun 2020 09:27:42 -0400 Subject: [PATCH 8/9] Made suggested changes --- adafruit_l3gd20.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/adafruit_l3gd20.py b/adafruit_l3gd20.py index c890072..8505a0a 100644 --- a/adafruit_l3gd20.py +++ b/adafruit_l3gd20.py @@ -127,8 +127,7 @@ def __init__(self, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100HZ): # 0 XEN X-axis enable (0 = disabled, 1 = enabled) # Switch to normal mode and enable all three channels - # self.write_register(_L3GD20_REGISTER_CTRL_REG1, 0x0F) - self.write_register(_L3GD20_REGISTER_CTRL_REG1, rate + 0x0F) + self.write_register(_L3GD20_REGISTER_CTRL_REG1, rate | 0x0F) # Set CTRL_REG2 (0x21) # ==================================================================== @@ -270,8 +269,8 @@ def __init__( spi_busio, cs, rng=L3DS20_RANGE_250DPS, - rate=L3DS20_RATE_100HZ, baudrate=100000, + rate=L3DS20_RATE_100HZ, ): # pylint: disable=too-many-arguments import adafruit_bus_device.spi_device as spi_device # pylint: disable=import-outside-toplevel From d6bb0a385a6f152cb612d598431aed5b06a77092 Mon Sep 17 00:00:00 2001 From: dherrada Date: Tue, 30 Jun 2020 14:16:51 -0400 Subject: [PATCH 9/9] Reordered parameters --- adafruit_l3gd20.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_l3gd20.py b/adafruit_l3gd20.py index 8505a0a..e533dc9 100644 --- a/adafruit_l3gd20.py +++ b/adafruit_l3gd20.py @@ -221,7 +221,7 @@ class L3GD20_I2C(L3GD20): """Gives the raw gyro readings, in units of rad/s.""" def __init__( - self, i2c, rng=L3DS20_RANGE_250DPS, rate=L3DS20_RATE_100HZ, address=0x6B + self, i2c, rng=L3DS20_RANGE_250DPS, address=0x6B, rate=L3DS20_RATE_100HZ ): import adafruit_bus_device.i2c_device as i2c_device # pylint: disable=import-outside-toplevel