GuyCarver-MicroPython/Lib/GY521.py

562 wiersze
16 KiB
Python

#driver for GY-521 Accelerometer
#Translated by Guy Carver from the MPU6050 sample code.
import pyb
ADDRESS_LOW = 0x68 #address pin low (GND), default for InvenSense evaluation board
ADDRESS_HIGH = 0x69 #address pin high (VCC)
RA_XG_OFFS_TC = 0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
RA_YG_OFFS_TC = 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
RA_ZG_OFFS_TC = 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
RA_X_FINE_GAIN = 0x03 //[7:0] X_FINE_GAIN
RA_Y_FINE_GAIN = 0x04 //[7:0] Y_FINE_GAIN
RA_Z_FINE_GAIN = 0x05 //[7:0] Z_FINE_GAIN
RA_XA_OFFS_H = 0x06 //[15:0] XA_OFFS
RA_XA_OFFS_L_TC = 0x07
RA_YA_OFFS_H = 0x08 //[15:0] YA_OFFS
RA_YA_OFFS_L_TC = 0x09
RA_ZA_OFFS_H = 0x0A //[15:0] ZA_OFFS
RA_ZA_OFFS_L_TC = 0x0B
RA_XG_OFFS_USRH = 0x13 //[15:0] XG_OFFS_USR
RA_XG_OFFS_USRL = 0x14
RA_YG_OFFS_USRH = 0x15 //[15:0] YG_OFFS_USR
RA_YG_OFFS_USRL = 0x16
RA_ZG_OFFS_USRH = 0x17 //[15:0] ZG_OFFS_USR
RA_ZG_OFFS_USRL = 0x18
RA_SMPLRT_DIV = 0x19
RA_CONFIG = 0x1A
RA_GYRO_CONFIG = 0x1B
RA_ACCEL_CONFIG = 0x1C
RA_FF_THR = 0x1D
RA_FF_DUR = 0x1E
RA_MOT_THR = 0x1F
RA_MOT_DUR = 0x20
RA_ZRMOT_THR = 0x21
RA_ZRMOT_DUR = 0x22
RA_FIFO_EN = 0x23
RA_I2C_MST_CTRL = 0x24
RA_I2C_SLV0_ADDR = 0x25
RA_I2C_SLV0_REG = 0x26
RA_I2C_SLV0_CTRL = 0x27
RA_I2C_SLV1_ADDR = 0x28
RA_I2C_SLV1_REG = 0x29
RA_I2C_SLV1_CTRL = 0x2A
RA_I2C_SLV2_ADDR = 0x2B
RA_I2C_SLV2_REG = 0x2C
RA_I2C_SLV2_CTRL = 0x2D
RA_I2C_SLV3_ADDR = 0x2E
RA_I2C_SLV3_REG = 0x2F
RA_I2C_SLV3_CTRL = 0x30
RA_I2C_SLV4_ADDR = 0x31
RA_I2C_SLV4_REG = 0x32
RA_I2C_SLV4_DO = 0x33
RA_I2C_SLV4_CTRL = 0x34
RA_I2C_SLV4_DI = 0x35
RA_I2C_MST_STATUS = 0x36
RA_INT_PIN_CFG = 0x37
RA_INT_ENABLE = 0x38
RA_DMP_INT_STATUS = 0x39
RA_INT_STATUS = 0x3A
RA_ACCEL_XOUT_H = 0x3B
RA_ACCEL_XOUT_L = 0x3C
RA_ACCEL_YOUT_H = 0x3D
RA_ACCEL_YOUT_L = 0x3E
RA_ACCEL_ZOUT_H = 0x3F
RA_ACCEL_ZOUT_L = 0x40
RA_TEMP_OUT_H = 0x41
RA_TEMP_OUT_L = 0x42
RA_GYRO_XOUT_H = 0x43
RA_GYRO_XOUT_L = 0x44
RA_GYRO_YOUT_H = 0x45
RA_GYRO_YOUT_L = 0x46
RA_GYRO_ZOUT_H = 0x47
RA_GYRO_ZOUT_L = 0x48
RA_EXT_SENS_DATA_00 = 0x49
RA_EXT_SENS_DATA_01 = 0x4A
RA_EXT_SENS_DATA_02 = 0x4B
RA_EXT_SENS_DATA_03 = 0x4C
RA_EXT_SENS_DATA_04 = 0x4D
RA_EXT_SENS_DATA_05 = 0x4E
RA_EXT_SENS_DATA_06 = 0x4F
RA_EXT_SENS_DATA_07 = 0x50
RA_EXT_SENS_DATA_08 = 0x51
RA_EXT_SENS_DATA_09 = 0x52
RA_EXT_SENS_DATA_10 = 0x53
RA_EXT_SENS_DATA_11 = 0x54
RA_EXT_SENS_DATA_12 = 0x55
RA_EXT_SENS_DATA_13 = 0x56
RA_EXT_SENS_DATA_14 = 0x57
RA_EXT_SENS_DATA_15 = 0x58
RA_EXT_SENS_DATA_16 = 0x59
RA_EXT_SENS_DATA_17 = 0x5A
RA_EXT_SENS_DATA_18 = 0x5B
RA_EXT_SENS_DATA_19 = 0x5C
RA_EXT_SENS_DATA_20 = 0x5D
RA_EXT_SENS_DATA_21 = 0x5E
RA_EXT_SENS_DATA_22 = 0x5F
RA_EXT_SENS_DATA_23 = 0x60
RA_MOT_DETECT_STATUS = 0x61
RA_I2C_SLV0_DO = 0x63
RA_I2C_SLV1_DO = 0x64
RA_I2C_SLV2_DO = 0x65
RA_I2C_SLV3_DO = 0x66
RA_I2C_MST_DELAY_CTRL = 0x67
RA_SIGNAL_PATH_RESET = 0x68
RA_MOT_DETECT_CTRL = 0x69
RA_USER_CTRL = 0x6A
RA_PWR_MGMT_1 = 0x6B
RA_PWR_MGMT_2 = 0x6C
RA_BANK_SEL = 0x6D
RA_MEM_START_ADDR = 0x6E
RA_MEM_R_W = 0x6F
RA_DMP_CFG_1 = 0x70
RA_DMP_CFG_2 = 0x71
RA_FIFO_COUNTH = 0x72
RA_FIFO_COUNTL = 0x73
RA_FIFO_R_W = 0x74
RA_WHO_AM_I = 0x75
TC_PWR_MODE_BIT = 7
TC_OFFSET_BIT = 6
TC_OFFSET_LENGTH = 6
TC_OTP_BNK_VLD_BIT = 0
VDDIO_LEVEL_VLOGIC = 0
VDDIO_LEVEL_VDD = 1
CFG_EXT_SYNC_SET_BIT = 5
CFG_EXT_SYNC_SET_LENGTH = 3
CFG_DLPF_CFG_BIT = 2
CFG_DLPF_CFG_LENGTH = 3
EXT_SYNC_DISABLED = 0x0
EXT_SYNC_TEMP_OUT_L = 0x1
EXT_SYNC_GYRO_XOUT_L = 0x2
EXT_SYNC_GYRO_YOUT_L = 0x3
EXT_SYNC_GYRO_ZOUT_L = 0x4
EXT_SYNC_ACCEL_XOUT_L = 0x5
EXT_SYNC_ACCEL_YOUT_L = 0x6
EXT_SYNC_ACCEL_ZOUT_L = 0x7
DLPF_BW_256 = 0x00
DLPF_BW_188 = 0x01
DLPF_BW_98 = 0x02
DLPF_BW_42 = 0x03
DLPF_BW_20 = 0x04
DLPF_BW_10 = 0x05
DLPF_BW_5 = 0x06
GCONFIG_FS_SEL_BIT = 4
GCONFIG_FS_SEL_LENGTH = 2
GYRO_FS_250 = 0x00
GYRO_FS_500 = 0x01
GYRO_FS_1000 = 0x02
GYRO_FS_2000 = 0x03
ACONFIG_XA_ST_BIT = 7
ACONFIG_YA_ST_BIT = 6
ACONFIG_ZA_ST_BIT = 5
ACONFIG_AFS_SEL_BIT = 4
ACONFIG_AFS_SEL_LENGTH = 2
ACONFIG_ACCEL_HPF_BIT = 2
ACONFIG_ACCEL_HPF_LENGTH = 3
ACCEL_FS_2 = 0x00
ACCEL_FS_4 = 0x01
ACCEL_FS_8 = 0x02
ACCEL_FS_16 = 0x03
DHPF_RESET = 0x00
DHPF_5 = 0x01
DHPF_2P5 = 0x02
DHPF_1P25 = 0x03
DHPF_0P63 = 0x04
DHPF_HOLD = 0x07
TEMP_FIFO_EN_BIT = 7
XG_FIFO_EN_BIT = 6
YG_FIFO_EN_BIT = 5
ZG_FIFO_EN_BIT = 4
ACCEL_FIFO_EN_BIT = 3
SLV2_FIFO_EN_BIT = 2
SLV1_FIFO_EN_BIT = 1
SLV0_FIFO_EN_BIT = 0
MULT_MST_EN_BIT = 7
WAIT_FOR_ES_BIT = 6
SLV_3_FIFO_EN_BIT = 5
I2C_MST_P_NSR_BIT = 4
I2C_MST_CLK_BIT = 3
I2C_MST_CLK_LENGTH = 4
CLOCK_DIV_348 = 0x0
CLOCK_DIV_333 = 0x1
CLOCK_DIV_320 = 0x2
CLOCK_DIV_308 = 0x3
CLOCK_DIV_296 = 0x4
CLOCK_DIV_286 = 0x5
CLOCK_DIV_276 = 0x6
CLOCK_DIV_267 = 0x7
CLOCK_DIV_258 = 0x8
CLOCK_DIV_500 = 0x9
CLOCK_DIV_471 = 0xA
CLOCK_DIV_444 = 0xB
CLOCK_DIV_421 = 0xC
CLOCK_DIV_400 = 0xD
CLOCK_DIV_381 = 0xE
CLOCK_DIV_364 = 0xF
I2C_SLV_RW_BIT = 7
I2C_SLV_ADDR_BIT = 6
I2C_SLV_ADDR_LENGTH = 7
I2C_SLV_EN_BIT = 7
I2C_SLV_BYTE_SW_BIT = 6
I2C_SLV_REG_DIS_BIT = 5
I2C_SLV_GRP_BIT = 4
I2C_SLV_LEN_BIT = 3
I2C_SLV_LEN_LENGTH = 4
I2C_SLV4_RW_BIT = 7
I2C_SLV4_ADDR_BIT = 6
I2C_SLV4_ADDR_LENGTH = 7
I2C_SLV4_EN_BIT = 7
I2C_SLV4_INT_EN_BIT = 6
I2C_SLV4_REG_DIS_BIT = 5
I2C_SLV4_MST_DLY_BIT = 4
I2C_SLV4_MST_DLY_LENGTH = 5
MST_PASS_THROUGH_BIT = 7
MST_I2C_SLV4_DONE_BIT = 6
MST_I2C_LOST_ARB_BIT = 5
MST_I2C_SLV4_NACK_BIT = 4
MST_I2C_SLV3_NACK_BIT = 3
MST_I2C_SLV2_NACK_BIT = 2
MST_I2C_SLV1_NACK_BIT = 1
MST_I2C_SLV0_NACK_BIT = 0
INTCFG_INT_LEVEL_BIT = 7
INTCFG_INT_OPEN_BIT = 6
INTCFG_LATCH_INT_EN_BIT = 5
INTCFG_INT_RD_CLEAR_BIT = 4
INTCFG_FSYNC_INT_LEVEL_BIT = 3
INTCFG_FSYNC_INT_EN_BIT = 2
INTCFG_I2C_BYPASS_EN_BIT = 1
INTCFG_CLKOUT_EN_BIT = 0
INTMODE_ACTIVEHIGH = 0x00
INTMODE_ACTIVELOW = 0x01
INTDRV_PUSHPULL = 0x00
INTDRV_OPENDRAIN = 0x01
INTLATCH_50USPULSE = 0x00
INTLATCH_WAITCLEAR = 0x01
INTCLEAR_STATUSREAD = 0x00
INTCLEAR_ANYREAD = 0x01
INTERRUPT_FF_BIT = 7
INTERRUPT_MOT_BIT = 6
INTERRUPT_ZMOT_BIT = 5
INTERRUPT_FIFO_OFLOW_BIT = 4
INTERRUPT_I2C_MST_INT_BIT = 3
INTERRUPT_PLL_RDY_INT_BIT = 2
INTERRUPT_DMP_INT_BIT = 1
INTERRUPT_DATA_RDY_BIT = 0
# TODO: figure out what these actually do
# UMPL source code is not very obivous
DMPINT_5_BIT = 5
DMPINT_4_BIT = 4
DMPINT_3_BIT = 3
DMPINT_2_BIT = 2
DMPINT_1_BIT = 1
DMPINT_0_BIT = 0
MOTION_MOT_XNEG_BIT = 7
MOTION_MOT_XPOS_BIT = 6
MOTION_MOT_YNEG_BIT = 5
MOTION_MOT_YPOS_BIT = 4
MOTION_MOT_ZNEG_BIT = 3
MOTION_MOT_ZPOS_BIT = 2
MOTION_MOT_ZRMOT_BIT = 0
DELAYCTRL_DELAY_ES_SHADOW_BIT = 7
DELAYCTRL_I2C_SLV4_DLY_EN_BIT = 4
DELAYCTRL_I2C_SLV3_DLY_EN_BIT = 3
DELAYCTRL_I2C_SLV2_DLY_EN_BIT = 2
DELAYCTRL_I2C_SLV1_DLY_EN_BIT = 1
DELAYCTRL_I2C_SLV0_DLY_EN_BIT = 0
PATHRESET_GYRO_RESET_BIT = 2
PATHRESET_ACCEL_RESET_BIT = 1
PATHRESET_TEMP_RESET_BIT = 0
DETECT_ACCEL_ON_DELAY_BIT = 5
DETECT_ACCEL_ON_DELAY_LENGTH = 2
DETECT_FF_COUNT_BIT = 3
DETECT_FF_COUNT_LENGTH = 2
DETECT_MOT_COUNT_BIT = 1
DETECT_MOT_COUNT_LENGTH = 2
DETECT_DECREMENT_RESET = 0x0
DETECT_DECREMENT_1 = 0x1
DETECT_DECREMENT_2 = 0x2
DETECT_DECREMENT_4 = 0x3
USERCTRL_DMP_EN_BIT = 7
USERCTRL_FIFO_EN_BIT = 6
USERCTRL_I2C_MST_EN_BIT = 5
USERCTRL_I2C_IF_DIS_BIT = 4
USERCTRL_DMP_RESET_BIT = 3
USERCTRL_FIFO_RESET_BIT = 2
USERCTRL_I2C_MST_RESET_BIT = 1
USERCTRL_SIG_COND_RESET_BIT = 0
PWR1_DEVICE_RESET_BIT = 7
PWR1_SLEEP_BIT = 6
PWR1_CYCLE_BIT = 5
PWR1_TEMP_DIS_BIT = 3
PWR1_CLKSEL_BIT = 2
PWR1_CLKSEL_LENGTH = 3
CLOCK_INTERNAL = 0x00
CLOCK_PLL_XGYRO = 0x01
CLOCK_PLL_YGYRO = 0x02
CLOCK_PLL_ZGYRO = 0x03
CLOCK_PLL_EXT32K = 0x04
CLOCK_PLL_EXT19M = 0x05
CLOCK_KEEP_RESET = 0x07
PWR2_LP_WAKE_CTRL_BIT = 7
PWR2_LP_WAKE_CTRL_LENGTH = 2
PWR2_STBY_XA_BIT = 5
PWR2_STBY_YA_BIT = 4
PWR2_STBY_ZA_BIT = 3
PWR2_STBY_XG_BIT = 2
PWR2_STBY_YG_BIT = 1
PWR2_STBY_ZG_BIT = 0
WAKE_FREQ_1P25 = 0x0
WAKE_FREQ_2P5 = 0x1
WAKE_FREQ_5 = 0x2
WAKE_FREQ_10 = 0x3
BANKSEL_PRFTCH_EN_BIT = 6
BANKSEL_CFG_USER_BANK_BIT = 5
BANKSEL_MEM_SEL_BIT = 4
BANKSEL_MEM_SEL_LENGTH = 5
WHO_AM_I_BIT = 6
WHO_AM_I_LENGTH = 6
DMP_MEMORY_BANKS = 8
DMP_MEMORY_BANK_SIZE = 256
DMP_MEMORY_CHUNK_SIZE = 16
class Accel(object) :
"""GY-521 Accelerometer."""
@staticmethod
def color( aR, aG, aB ) :
'''Create a 565 rgb TFTColor value'''
return TFTColor(aR, aG, aB)
def __init__( self, aLoc, aAddress = ADDRESS_LOW ) :
"""aLoc I2C pin location is either 1 for 'X' or 2 for 'Y'.
aAddress is either ADDRESS_LOW or ADDRESS_HIGH."""
if 1 > aLoc > 2 :
raise Exception("aLoc must be 1 or 2.")
self._data = bytearray(1)
self._data6 = bytearray(6)
self._data14 = bytearray(14)
self._address = aAddress
self._i2c = pyb.I2C(aLoc, pyb.I2C.MASTER, baudrate = 400000)
self.setclocksource(CLOCK_PLL_XGYRO)
self.setfullscalegyrorange(GYRO_FS_250)
self.setfulscaleaccelrange(ACCEL_FS_2)
self.setsleepenabled(False)
def getrate( self ) :
self._readdata(RA_SMPLRT_DIV, self._data)
return self._data[0]
def setrate( self, aRate ) :
self._writedata(RA_SMPLRT_DIV, aRate)
def getDLPF( self ) :
return self._readbits(RA_CONFIG, CFG_DLPF_CFG_BIT, CFG_DLPF_CFG_LENGTH)
def setDLPF( self, aMode ) :
self._writebits(RA_CONFIG, CFG_DLPF_CFG_BIT, CFG_DLPF_CFG_LENGTH, aMode)
def setclocksource( self, aSource ) :
self._writebits(RA_PWR_MGMT_1, PWR1_CLKSEL_BIT, PWR1_CLKSEL_LENGTH, aSource)
def getfullscalegyrorange( self ) :
return self._readbits(RA_GYRO_CONFIG, GCONFIG_FS_SEL_BIT, GCONFIG_FS_SEL_LENGTH)
def setfullscalegyrorange( self, aRange ) :
self._writebits(RA_GYRO_CONFIG, GCONFIG_FS_SEL_BIT, GCONFIG_FS_SEL_LENGTH, aRange)
def getfullscaleaccelrange( self ) :
self._readbits(RA_ACCEL_CONFIG, ACONFIG_AFS_SEL_BIT, ACONFIG_AFS_SEL_LENGTH)
def setfullscaleaccelrange( self, aRange ) :
self._writebits(RA_ACCEL_CONFIG, ACONFIG_AFS_SEL_BIT, ACONFIG_AFS_SEL_LENGTH, aRange)
def getsleepenabled( self ) :
self._readbits(RA_PWR_MGMT_1, PWR1_SLEEP_BIT, 1)
def setsleepenabled( self, aTF ) :
self._writebits(RA_PWR_MGMT_1, PWR1_SLEEP_BIT, 1, aTF)
def getfreefalldetectionthreshold( self ) :
self._readdata(RA_FF_THR, self._data)
return self._data[0]
def setfreefalldetectionthreshold( self, aValue ) :
self._writedata(RA_FF_THR, aValue)
def getfreefalldetectionduration( self ) :
self._readdata(RA_FF_DUR, self._data)
return self._data[0]
def setfreefalldetectionduration( self, aValue ) :
self._writedata(RA_FF_DUR, aValue)
def getmotiondetectionthreshold( self ) :
self._readdata(RA_MOT_THR, self._data)
return self._data[0]
def setmotiondetectionthreshold( self, aValue ) :
self._writedata(RA_MOT_THR, aValue)
def getmotiondetectionduration( self ) :
self._readdata(RA_MOT_DUR, self._data)
return self._data[0]
def setmotiondetectionduration( self, aValue ) :
self._writedata(RA_MOT_DUR, aValue)
def getzeromotiondetectionthreshold( self ) :
self._readdata(RA_ZRMOT_THR, self._data)
return self._data[0]
def setzeromotiondetectionthreshold( self, aValue ) :
self._writedata(RA_ZRMOT_THR, aValue)
def getzeromotiondetectionduration( self ) :
self._readdata(RA_ZRMOT_DUR, self._data)
return self._data[0]
def setzeromotiondetectionduration( self, aValue ) :
self._writedata(RA_ZRMOT_DUR, aValue)
def getFIFOenabled( self ) :
return self._readbits(RA_USER_CTRL, USERCTRL_FIFO_EN_BIT, 1)
def setFIFFOenabled( self, aTF ) :
self._writebits(RA_USER_CTRL, USERCTRL_FIFO_EN_BIT, 1, aTF)
def gettempFIFOenabled( self ) :
return self._readbits(RA_FIFO_EN, TEMP_FIFO_EN_BIT, 1)
def settempFIFFOenabled( self, aTF ) :
self._writebits(RA_FIFO_EN, TEMP_FIFO_EN_BIT, 1, aTF)
def getxgyroFIFOenabled( self ) :
return self._readbits(RA_FIFO_EN, XG_FIFO_EN_BIT, 1)
def setxgyroFIFOenabled( self, aTF ) :
self._writebits(RA_FIFO_EN, XG_FIFO_EN_BIT, 1, aTF)
def getygyroFIFOenabled( self ) :
return self._readbits(RA_FIFO_EN, YG_FIFO_EN_BIT, 1)
def setygyroFIFOenabled( self, aTF ) :
self._writebits(RA_FIFO_EN, YG_FIFO_EN_BIT, 1, aTF)
def getzgyroFIFOenabled( self ) :
return self._readbits(RA_FIFO_EN, ZG_FIFO_EN_BIT, 1)
def setzgyroFIFOenabled( self, aTF ) :
self._writebits(RA_FIFO_EN, ZG_FIFO_EN_BIT, 1, aTF)
def getaccelFIFOenabled( self ) :
return self._readbits(RA_FIFO_EN, ACCEL_FIFO_EN_BIT, 1)
def setaccelFIFOenabled( self, aTF ) :
self._writebits(RA_FIFO_EN, ACCEL_FIFO_EN_BIT, 1, aTF)
def getmasterclockspeed( self ) :
return self._readbits(RA_I2C_MST_CTRL, I2C_MST_CLK_BIT, I2C_MST_CLK_LENGTH)
def setmasterclockspeed( self, aValue ) :
self._writebits(RA_I2C_MST_CTRL, I2C_MST_CLK_BIT, I2C_MST_CLK_LENGTH, aValue)
def getinterruptmode( self ) :
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_LEVEL_BIT, 1)
def setinterruptmode( self, aValue ) :
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_LEVEL_BIT, 1, aValue)
def getinterruptdrive( self ) :
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_OPEN_BIT, 1)
def setinterruptdrive( self, aValue ) :
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_OPEN_BIT, 1, aValue)
def getinterruptlatch( self ) :
return self._readbits(RA_INT_PIN_CFG, INTCFG_LATCH_INT_EN_BIT, 1)
def setinterruptlatch( self, aValue ) :
self._writebits(RA_INT_PIN_CFG, INTCFG_LATCH_INT_EN_BIT, 1, aValue)
def getinterruptlatchclear( self ) :
return self._readbits(RA_INT_PIN_CFG, INTCFG_INT_RD_CLEAR_BIT, 1)
def setinterruptlatchclear( self, aValue ) :
self._writebits(RA_INT_PIN_CFG, INTCFG_INT_RD_CLEAR_BIT, 1, aValue)
def getacceltemprot( self ) :
self._readdata(RA_ACCEL_XOUT_H, self._data14)
return [(self._data14[i] << 8) | self._data14[i + 1] for i in range(0, len(self._data14), 2)]
def getacceleration( self ) :
self._readdata(RA_ACCEL_XOUT_H, self._data6)
return [(self._data6[i] << 8) | self._data6[i + 1] for i in range(0, len(self._data6), 2)]
def getrotation( self ) :
self._readdata(RA_GYRO_XOUT_H, self.data6)
return [(self._data6[i] << 8) | self._data6[i + 1] for i in range(0, len(self._data6), 2)]
def reset( self ) :
self._writebits(RA_PWR_MGMT_1, PWR1_DEVICE_RESET_BIT, 1, True)
def _writedata( self, aAddress, aData ) :
self._i2c.mem_write(aData, self._address, aAddress)
def _readdata( self, aAddress, aData ) :
self._i2c.mem_read(aData, self._address, aAddress)
# @micropython.native
def _readbits( self, aAddress, aStart, aLen ) :
self._readdata(aAddress, self._data)
b = (self._data[0] >> (aStart - aLen + 1)) & ((1 << aLen) - 1)
# @micropython.native
def _writebits( self, aAddress, aStart, aLen, aValue ) :
self._readdata(aAddress, self._data)
mask = ((1 << aLen) - 1) << (aStart - aLen + 1)
aValue = (buffer[0] << (aStart - aLen + 1)) & mask #shift data into correct position
val &= ~mask
self._data[0] |= aValue
self._writedata(aAddress, self._data)