# mpu6050_test15_2019mar1901 tlfong01 2019mar19hkt2209 # Rpi3B+ stretch linux 4.14.34-v7+ arm python3.5.3 # *** Description *** # 1. Setup I2C channel (for Rpi23+ stretch, speed is NOT adjustable, but fixed at 100k baud) # 2. Reset MPU # 3. Wakeup MPU # 4. Read and print default value 0x68 in register WhoImI 0x75 # 5. Write something to registers gyro/accelConfig and read back # *** Imports *** import datetime from time import sleep import inspect import smbus # *** Device Address *** mpu6050Addr0 = 0x68 # address pin AD0 biased to ground mpu6050Addr1 = 0x69 # address pin AD0 biased to +5V # *** Register Addresses *** whoAmIAddr = 0x75 powerMgmt1Addr = 0x6b gyroConfigAddr = 0x1b accelConfigAddr = 0x1c # *** Control Bytes *** resetByte = 0x80 wakeupByte = 0x00 gyroConfigByte = 0xe8 # trigger x, y, z, with full scale 0x01 accelConfigByte = 0xec # trigger x, y, z, with full scale 0x11 regAddrDict = { 'WHO_AM_I' : 0x75, 'PWR_MGMT_1' : 0x6b, 'PWR_MGMT_2' : 0x6c, 'SMPRT_DIV' : 0x19, 'LP_WAKE_CTRL' : 0x99, 'GYRO_XOUT_H' : 0x43, 'GYRO_XOUT_L' : 0x44, 'GYRO_YOUT_H' : 0x45, 'GYRO_YOUT_L' : 0x46, 'GYRO_ZOUT_H' : 0x47, 'GYRO_ZOUT_L' : 0x48, 'ACCEL_XOUT_H' : 0x3b, 'ACCEL_XOUT_L' : 0x3c, 'ACCEL_YOUT_H' : 0x3d, 'ACCEL_YOUT_L' : 0x3e, 'ACCEL_ZOUT_H' : 0x3f, 'ACCEL_ZOUT_L' : 0x40, 'TEMP_OUT_H' : 0x41, 'TEMP_OUT_L' : 0x42, 'SELF_TEST_X' : 0x0d, 'SELF_TEST_X' : 0x0d, 'XG_OFFS_USRH' : 0x13, 'XG_OFFS_USRL' : 0x14, 'YG_OFFS_USRH' : 0x15, 'YG_OFFS_USRL' : 0x16, 'ZG_OFFS_USRH' : 0x17, 'ZG_OFFS_USRL' : 0x18, 'XA_OFFS_USRH' : 0x06, 'XA_OFFS_USRL' : 0x07, 'YA_OFFS_USRH' : 0x08, 'YA_OFFS_USRL' : 0x09, 'ZA_OFFS_USRH' : 0x0a, 'ZA_OFFS_USRL' : 0x0b, 'GYRO_CONFIG' : 0x1b, 'ACCEL_CONFIG' : 0x1c, } # *** Print Functions *** def printDateTime(): timeNow = datetime.datetime.now() timeNowStr = str(timeNow)[0:16] print(' Date Time now =', timeNowStr) return def convertByteToFourCharPadString(num): s = hex(num) s = (s[2:]) if (len(s) != 2): s = '0' + s s = '0x' + s return s # *** General I2C Device Read Write Print Device/Register Functions *** def writeDevTwoBytes(i2cPort, devAddrByte, dataByte1, dataByte2): i2cPort.write_byte_data(devAddrByte, dataByte1, dataByte2) return def readDevRegOneByte(i2cPort, devAddrByte, regAddrByte): readByte = i2cPort.read_byte_data(devAddrByte, regAddrByte) return readByte def writeDevRegOneByteOld(i2cPort, devAddrByte, regAddrByte, writeByte): writeDevTwoBytes(i2cPort, devAddrByte, regAddrByte, writeByte) return def writeDevRegOneByte(i2cPort, devAddrByte, regName, writeByte): regAddrByte = regAddrDict[regName] writeDevTwoBytes(i2cPort, devAddrByte, regAddrByte, writeByte) return def printDevRegOneByte(i2cPort, devAddrByte, regName, printTitle): regAddrByte = regAddrDict[regName] readByte = readDevRegOneByte(i2cPort, devAddrByte, regAddrByte) print(printTitle, convertByteToFourCharPadString(readByte)) # *** MPU6050 Specific Register Write, Read, Print Functions *** def operationDelay(): sleep(0.001) # 1mS return def readPrintRegOld(i2cCh, mpu6050Addr, regAddrByte, printTitle): print(' regAddr =', hex(regAddrByte)) readByte = readDevRegOneByte(i2cCh, mpu6050Addr, regAddrByte) print(' ', printTitle, ' =', convertByteToFourCharPadString(readByte)) return def readPrintReg(i2cCh, mpu6050Addr, regName, printTitle): regAddrByte = regAddrDict[regName] print(' regName =', regName) print(' regAddr =', hex(regAddrByte)) readByte = readDevRegOneByte(i2cCh, mpu6050Addr, regAddrByte) print(' ', printTitle, ' =', convertByteToFourCharPadString(readByte)) return def writeReadPrintRegOld(i2cCh, mpu6050Addr, regAddrByte, writeByte, printTitle): print(' regAddr =', hex(regAddrByte)) print(' writeByte =', convertByteToFourCharPadString(writeByte)) writeDevRegOneByte(i2cCh, mpu6050Addr, regAddrByte, writeByte) operationDelay() readPrintReg(i2cCh, mpu6050Addr, regAddrByte, printTitle) return def writeReadPrintReg(i2cCh, mpu6050Addr, regName, writeByte, printTitle): regAddrByte = regAddrDict[regName] print(' regName =', regName) print(' regAddr =', hex(regAddrByte)) print(' writeByte =', convertByteToFourCharPadString(writeByte)) writeDevRegOneByte(i2cCh, mpu6050Addr, regName, writeByte) operationDelay() readPrintReg(i2cCh, mpu6050Addr, regName, printTitle) return # *** MPU6050 System Functions *** def resetMpu(i2cCh, mpu6050Addr): print(' Begin', inspect.stack()[0][3]) writeDevRegOneByte(i2cCh, mpu6050Addr, 'PWR_MGMT_1', resetByte) operationDelay() readPrintReg(i2cCh, mpu6050Addr, 'PWR_MGMT_1', ' powerMgmt1 ') print(' End ', inspect.stack()[0][3]) return def wakeupMpu(i2cCh, mpu6050Addr): print(' Begin', inspect.stack()[0][3]) writeDevRegOneByte(i2cCh, mpu6050Addr, 'PWR_MGMT_1', wakeupByte) operationDelay() readPrintReg(i2cCh, mpu6050Addr, 'PWR_MGMT_1', ' powerMgmt1 ') print(' End ', inspect.stack()[0][3]) return # *** MPU6050 Test Functions *** def readPrintRegWhoAmI(i2cCh, mpu6050Addr): print(' Begin', inspect.stack()[0][3]) readPrintReg(i2cCh, mpu6050Addr, 'WHO_AM_I', ' readByte ') print(' End ', inspect.stack()[0][3]) return def writeReadPrintRegGyroConfig(i2cCh, mpu6050Addr): print(' Begin', inspect.stack()[0][3]) writeReadPrintReg(i2cCh, mpu6050Addr, 'GYRO_CONFIG', gyroConfigByte, ' readByte ') print(' End ', inspect.stack()[0][3]) return def writeReadPrintRegAccelConfig(i2cCh, mpu6050Addr): print(' Begin', inspect.stack()[0][3]) writeReadPrintReg(i2cCh, mpu6050Addr, 'ACCEL_CONFIG', accelConfigByte, ' readByte ') print(' End ', inspect.stack()[0][3]) return def testMpu(i2cCh, mpu6050Addr): print('\n\n *** mpu6050Addr =', hex(mpu6050Addr), '***') print() resetMpu(i2cCh, mpu6050Addr) wakeupMpu(i2cCh, mpu6050Addr) readPrintRegWhoAmI(i2cCh, mpu6050Addr) writeReadPrintRegGyroConfig(i2cCh, mpu6050Addr) writeReadPrintRegAccelConfig(i2cCh, mpu6050Addr) print('\n\n *** End of test ***') return # *** Init Function Execution *** printDateTime() i2cCh0 = smbus.SMBus(1) # *** Main Function Execution *** testMpu(i2cCh0, mpu6050Addr0) testMpu(i2cCh0, mpu6050Addr1) # *** End *** ''' >>> == RESTART: /home/pi/Python_Programs/test1191/mpu6050_test15_2019mar1701.py == Date Time now = 2019-03-19 22:09 *** mpu6050Addr = 0x68 *** Begin resetMpu regName = PWR_MGMT_1 regAddr = 0x6b powerMgmt1 = 0x40 End resetMpu Begin wakeupMpu regName = PWR_MGMT_1 regAddr = 0x6b powerMgmt1 = 0x00 End wakeupMpu Begin readPrintRegWhoAmI regName = WHO_AM_I regAddr = 0x75 readByte = 0x68 End readPrintRegWhoAmI Begin writeReadPrintRegGyroConfig regName = GYRO_CONFIG regAddr = 0x1b writeByte = 0xe8 regName = GYRO_CONFIG regAddr = 0x1b readByte = 0xe8 End writeReadPrintRegGyroConfig Begin writeReadPrintRegAccelConfig regName = ACCEL_CONFIG regAddr = 0x1c writeByte = 0xec regName = ACCEL_CONFIG regAddr = 0x1c readByte = 0xec End writeReadPrintRegAccelConfig *** End of test *** *** mpu6050Addr = 0x69 *** Begin resetMpu regName = PWR_MGMT_1 regAddr = 0x6b powerMgmt1 = 0x40 End resetMpu Begin wakeupMpu regName = PWR_MGMT_1 regAddr = 0x6b powerMgmt1 = 0x00 End wakeupMpu Begin readPrintRegWhoAmI regName = WHO_AM_I regAddr = 0x75 readByte = 0x68 End readPrintRegWhoAmI Begin writeReadPrintRegGyroConfig regName = GYRO_CONFIG regAddr = 0x1b writeByte = 0xe8 regName = GYRO_CONFIG regAddr = 0x1b readByte = 0xe8 End writeReadPrintRegGyroConfig Begin writeReadPrintRegAccelConfig regName = ACCEL_CONFIG regAddr = 0x1c writeByte = 0xec regName = ACCEL_CONFIG regAddr = 0x1c readByte = 0xec End writeReadPrintRegAccelConfig *** End of test *** >>> '''
Categories: MPU6050