PCF8591 ADC / DAC Programming Note V0.1

# fadc145.py tlfong01 2019nov27hkt1411
import os
import smbus
from time import sleep
from datetime import datetime
import fprint70 as fprint
import ftime73 as ftime
import fi2c140 as fi2c
# *** PCF8591 ADC/DAC Module Config ***
pcf8591ControlByteDict = {
'ChannelNum0': 0x00,
'ChannelNum1': 0x01,
}
pcf8591DevAddrDict = {
'DevAddr0': 0x48,
'DevAddr1': 0x49,
'DevAddr2': 0x4a,
'DevAddr3': 0x4b,
'DevAddr4': 0x4c,
'DevAddr5': 0x4d,
'DevAddr6': 0x4e,
'DevAddr7': 0x4f,
}
pcf8591AdcPhMeterModuleDict = {
'PhMeter': {'ḾoduleName': 'PhMeter',
'ModuleHelp': 'PhMeterHelp',
'GreenTea': {'SignalName' : 'GreenTea',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr0',
'ChannelNumName' : 'ChannelNum0',
},
'Milk' : {'SignalName' : 'Milk',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr1',
'ChannelNumName': 'ChannelNum0',
},
'Water' : {'SignalName' : 'Water',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr7',
'ChannelNumName': 'ChannelNum0',
},
'Oil' : {'SignalName' : 'Oil',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr6',
'ChannelNumName': 'ChannelNum0',
}
},
}
# *** System Info ***
def systemInfo():
print('\n# *** UART BaudRate *****************************************************')
os.system('grep dtparam=i2c /boot/config.txt')
return
# *** Read PCF8591 Single Ended Input Channel 0 ***
def readAdcResults(i2cBus, devAddr, controlByte):
adcResults = i2cBus.read_byte_data(devAddr, controlByte)
adcResults = i2cBus.read_byte_data(devAddr, controlByte)
return adcResults
def pcf8591Convert(moduleName, signalName):
# fprint.printBeginExecFunction()
i2cBusName = pcf8591AdcPhMeterModuleDict[moduleName][signalName]['I2cBusName']
devAddrName = pcf8591AdcPhMeterModuleDict[moduleName][signalName]['DevAddrName']
channelNumName = pcf8591AdcPhMeterModuleDict[moduleName][signalName]['ChannelNumName']
i2cBus = fi2c.i2cBusDict[i2cBusName]
devAddr = pcf8591DevAddrDict[devAddrName]
controlByte = pcf8591ControlByteDict[channelNumName]
adcResults = readAdcResults(i2cBus, devAddr, controlByte)
#print('\n# *** PCF8591 ADC Testing *****************************************************\n')
#fprint.printTitleString('Module Name', fprint.indentFormat640, moduleName)
#fprint.printTitleString('Signal Name', fprint.indentFormat640, signalName)
#fprint.printTitleString('I2C Bus Name', fprint.indentFormat640, i2cBusName)
#fprint.printTitleOneByteNum('PCF8591 I2C Device Addr', fprint.indentFormat640, devAddr)
#fprint.printTitleOneByteNum('Channel Number', fprint.indentFormat640, pcf8591ControlByteDict[channelNumName])
#print('\n ADC Results =', fprint.convertOneByteNumToFourCharStr(adcResults), ' (hex)')
print(' =', (str(adcResults)).ljust(4, ' '), ' (dec)')
print(' =', (str(int((float((adcResults)/255) * 100)))).ljust(4, ' '), ' (%)')
# fprint.printEndExecFunction()
return
# ********************************************************************************
# *** I2C PCF8591 ADC PhMeter GreenTea/Milk/Water Tests ***
# ********************************************************************************
def convertPhMeterGreenTea():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'GreenTea')
#fprint.printEndExecFunction()
return
def convertPhMeterMilk():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Milk')
#fprint.printEndExecFunction()
return
def convertPhMeterWater():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Water')
#fprint.printEndExecFunction()
return
def convertPhMeterOil():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Oil')
#fprint.printEndExecFunction()
return
# *** pcfAdcPhMeter Test function Dict ***
pcf8591AdcPhMeter = {
'GreenTea' : convertPhMeterGreenTea,
'Milk' : convertPhMeterMilk,
'Water' : convertPhMeterWater,
'Oil' : convertPhMeterOil,
}
# ********************************************************************************
# *** Init/Main Functions ***
# ********************************************************************************
# *** Init Function ***
def init():
pass
return
# ********************************************************************************
#*** Main Function ***
# ********************************************************************************
def main():
init()
print('GreenTea')
pcf8591AdcPhMeter['GreenTea']()
print('Milk')
pcf8591AdcPhMeter['Milk']()
print('Water')
pcf8591AdcPhMeter['Water']()
print('Oil')
pcf8591AdcPhMeter['Oil']()
return
# ********************************************************************************
# *** Main ***
# ********************************************************************************
if __name__ == '__main__':
main()
# *** End of Program ***
'''
Sample OUtput 2019nov28hkt1241
Input config - connect Channel 0 of all 4 modules to (1) about 1.87V(65%), (2) 3.3V, (3) 0V.
Python 3.7.3 (/usr/bin/python3)
>>> %cd /home/pi/Python_Programs/work1422
>>> %Run fadc144.py
= 165 (dec)
= 64 (%)
= 166 (dec)
= 65 (%)
= 165 (dec)
= 64 (%)
= 166 (dec)
= 65 (%)
>>>
---
>>> %Run fadc144.py
= 255 (dec)
= 100 (%)
= 255 (dec)
= 100 (%)
= 255 (dec)
= 100 (%)
= 255 (dec)
= 100 (%)
>>>
---
>>> %Run fadc144.py
= 0 (dec)
= 0 (%)
= 1 (dec)
= 0 (%)
= 1 (dec)
= 0 (%)
= 1 (dec)
= 0 (%)
>>>
'''
# fi2c140.py tlfong01 2019nov25hkt1136
from time import sleep
from datetime import datetime
from signal import pause
import smbus
import fprint70 as fprint
import ftime73 as ftime
import os
# I2c Bus Setup Notes
# *** Date and Configuration ***
# pi@raspberrypi:~ $ date Wed 28 Aug 2019 03:26:24 PM HKT
# pi@raspberrypi:~ $ uname -a
# Linux raspberrypi 4.19.58-v7l+ #1245 SMP Fri Jul 12 17:31:45 BST 2019 armv7l GNU/Linux
# *** Setup multiple I2C buses ***
# pi@raspberrypi:~ $ sudo nano /boot/config.txt
# dtoverlay=i2c1,pins_2_3 (board pins 3, 5)
# dtoverlay=i2c3,pins_4_5 (board pins 7, 29)
# dtoverlay=i2c4,pins_6_7 (board pins 31, 26)
# dtoverlay=i2c5,pins_12_13 (board pins 32, 33)
# dtoverlay=i2c6,pins_22_23 (board pins 15, 16)
# pi@raspberrypi:~ $ ls /dev/i2c*
# /dev/i2c-1 /dev/i2c-3 /dev/i2c-4 /dev/i2c-5 /dev/i2c-6
# *** Speed setting (Only for Rpi4B, Not for Rpi3B+, whose I2C is NOT changeable ***
# pi@raspberrypi:~ $ sudo nano /boot/config.txt
# dtparam=i2c_arm=on, i2c_arm_baudrate=10000
# ********************************************************************************
# ********************************************************************************
# *** I2c Bus Config ***
i2cBus1 = smbus.SMBus(1)
i2cBus3 = smbus.SMBus(3)
i2cBus4 = smbus.SMBus(4)
# i2cBus5 = smbus.SMBus(5) # <<< not working !!!
i2cBus6 = smbus.SMBus(6)
i2cBusDict = {'I2cBus1': i2cBus1,
'I2cBus3': i2cBus3,
'I2cBus4': i2cBus4,
#'I2cBus5': i2cBus5, # <<<<< Not working !!!
'I2cBus6': i2cBus6,
}
# *** Control Byte Dictionary ***
testControlByteDict = {
'TenMilliSeconds' : 0.01,
'FourTimes' : 4,
'OneMillionTimes' : 1000000,
}
# ********************************************************************************
# ********************************************************************************
# *** Read Write Print Device/Register Functions ***
# *** Write/Read Device One Byte ***
def quickWriteDevOneByte(i2cBus, devAddr, writeByte):
i2cBus.write_byte(devAddr, writeByte)
return
def quickReadDevOneByte(i2cBus, devAddr):
readByte = i2cBus.read_byte(devAddr)
return readByte
# *** Write/Read/Print Device Two Bytes / Device Register One Byte ***
def writeDevTwoBytes(i2cBus, devAddr, writeByte1, writeByte2):
i2cBus.write_byte_data(devAddr, writeByte1, writeByte2)
return
def writeRegOneByte(i2cBus, devAddrDict, devAddrName, regAddrDict, regName, writeByte):
devAddr = devAddrDict[devAddrName]
regAddr = regAddrDict[regName]
writeDevTwoBytes(i2cBus, devAddr, regAddr, writeByte)
return
def readDevOneByte(i2cBus, devAddrAddr, readByteAddr):
readByte = i2cBus.read_byte_data(devAddr, readByteAddr)
return readByte
def readDevReadByteAddrByteOneByte(i2cBus, devAddrAddr, readByteAddr): # !!! Not Tested !!!
readByte = readDevOneByte(i2cBus, devAddrAddr, readByteAddr)
return readByte
def readDevControlByteOneByte(i2cBus, devAddr, controlByte):
readByte = i2cBus.read_byte_data(devAddr, controlByte)
return readByte
def readRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName):
devAddr = devAddrDict[devName]
regAddr = regAddrDict[regName]
readByte = i2cBus.read_byte_data(devAddr, regAddr)
return readByte
def printRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName):
readByte = readRegOneByte(i2cBusName, devAddrDict, devName, regAddrDict, regName)
print(printTitle, hex(readByte))
return
# *** Write Device Three Bytes ***
def writeDevThreeBytes(i2cBus, devAddr, WriteByte1, writeByte2, writByte3): # <<<<<<<<<< Not yet tested <<<<<<<<<<
i2cBus.write_block_data(devAddr, writeByte1, [writeByte2, writeByte3])
return
# *** OS Info ***
def osInfo():
print('\n# *** System Info *****************************************************')
print('\n>>>>> ', 'Date', '<<<<<')
os.system('date')
print('\n>>>>> ', 'buster version, Rpi4B model, Rpi4B memory', '<<<<<')
os.system('uname -a')
os.system('grep Model /proc/cpuinfo')
os.system('grep MemTotal /proc/meminfo')
print('\n>>>>> ', 'i2c baudrate', '<<<<<')
os.system('grep dtparam=i2c /boot/config.txt')
print('\n>>>>> ', 'i2c dtoverlay', '<<<<<')
os.system('grep dtoverlay=i2c /boot/config.txt')
print('\n>>>>> ', 'ls /dev/i2c*', '<<<<<')
os.system('ls /dev/i2c*')
i2cdetectCommand = 'i2cdetect -y 1'
print('\n>>>>> ', i2cdetectCommand, '<<<<<')
os.system(i2cdetectCommand)
i2cdetectCommand = 'i2cdetect -y 3'
print('\n>>>>> ', i2cdetectCommand, '<<<<<')
os.system(i2cdetectCommand)
i2cdetectCommand = 'i2cdetect -y 4'
print('\n>>>>> ', i2cdetectCommand, '<<<<<')
os.system(i2cdetectCommand)
return
# *** Main Test Function ***
# *** PCA9685 16 Ch PWM Controller Config ***
pca9685DevAddrDict = {
'Dev0': 0x40,
'Dev1': 0x41,
'Dev2': 0x40,
'Dev3': 0x43,
'Dev4': 0x44,
'Dev5': 0x45,
'Dev6': 0x46,
'Dev7': 0x47,
}
pca9685RegAddrDict = { 'Mode1': 0x00,
'Mode2': 0x01,
}
pca9685DataByteDict = {
'Mode1Reset': 0x11,
}
# *** PCF8591 ADC/DAC Config ***
pcf8591DevAddrDict = {
'DevAddr0': 0x48,
'DevAddr1': 0x49,
'DevAddr2': 0x4a,
'DevAddr3': 0x4b,
'DevAddr4': 0x4c,
'DevAddr5': 0x4d,
'DevAddr6': 0x4e,
'DevAddr7': 0x4f,
}
pcf8591ControlByteDict = {
'ChannelNum0': 0x00,
'ChannelNum1': 0x01,
}
pcf8591ModuleDict = {
'PhMeter': {'ḾoduleName': 'PhMeter',
'ModuleHelp': 'PhMeterHelp',
'GreenTea': {'SignalName' : 'GreenTea',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr0',
'ChannelNumName' : 'ChannelNum0',
},
'Milk' : {'SignalName' : 'Yvalue',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr1',
'ChannelNumName': 'ChannelNum0',
},
'Water' : {'SignalName' : 'Yvalue',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr0',
'ChannelNumName': 'ChannelNum0',
},
'Oil' : {'SignalName' : 'Yvalue',
'I2cBusName' : 'I2cBus4',
'DevAddrName' : 'DevAddr1',
'ChannelNumName': 'ChannelNum0',
}
},
}
# *** Test PCA9685 ***
def testWriteReadRegister(devId, busName, devName, regName, testByteHexString):
fprint.printBeginExecFunction()
devAddrDict = pca9685DevAddrDict
regAddrDict = pca9685RegAddrDict
i2cBus = i2cBusDict[busName]
testByte = int(testByteHexString, 16)
writeRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName, testByte)
readByte = readRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName)
if readByte == testByte:
resultsString = 'Good'
else:
resultsString = 'Bad'
devAddr = devAddrDict[devName]
fprint.printTitleString('Date Time', fprint.indentFormat640, str(datetime.now())[0:16])
fprint.printTitleString('Device Id', fprint.indentFormat640, devId)
fprint.printTitleString('I2C Bus Name', fprint.indentFormat640, busName)
fprint.printTitleString('Device Name', fprint.indentFormat640, devName)
fprint.printTitleOneByteNum('Device Address', fprint.indentFormat640, devAddr)
fprint.printTitleString('Register Name', fprint.indentFormat640, regName)
fprint.printTitleOneByteNum('Register Written', fprint.indentFormat640, testByte)
fprint.printTitleOneByteNum('Register Read Back', fprint.indentFormat640, readByte)
fprint.printTitleString('Results', fprint.indentFormat640, resultsString)
fprint.printEndExecFunction()
return
# Notes
# For Mode1 register, Test byte 0x88, 0x77 returns 0x58, 0x77. In other words, some bits are hardwired.
def testRepeatWriteReadRegisterNoPrintResults(devId, busName, devName, regName, testByteHexString, pauseBetweenPingSecondsName, repeatCountName):
fprint.printBeginExecFunction()
devAddrDict = pca9685DevAddrDict
regAddrDict = pca9685RegAddrDict
i2cBus = i2cBusDict[busName]
testByte = int(testByteHexString, 16)
repeatCount = testControlByteDict[repeatCountName]
pauseBetweenPingSeconds = testControlByteDict[pauseBetweenPingSecondsName]
fprint.printTitleString('Repeat Ping Times', fprint.indentFormat640, repeatCount)
fprint.printTitleString('Now repeat pinging, Ctrl-X to exit,', fprint.indentFormat640, '.....')
pause()
for count in range(repeatCount): # *** Repeat Ping Section ***
writeRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName, testByte)
readByte = readRegOneByte(i2cBus, devAddrDict, devName, regAddrDict, regName)
sleep(pauseBetweenPingSeconds)
if readByte == testByte:
resultsString = 'Good'
else:
resultsString = 'Bad'
fprint.printTitleString('Repeat Ping Times', fprint.indentFormat640, repeatCount)
devAddr = devAddrDict[devName]
fprint.printTitleString('Date Time', fprint.indentFormat640, str(datetime.now())[0:16])
fprint.printTitleString('Device Id', fprint.indentFormat640, devId)
fprint.printTitleString('I2C Bus Name', fprint.indentFormat640, busName)
fprint.printTitleString('Device Name', fprint.indentFormat640, devName)
fprint.printTitleOneByteNum('Device Address', fprint.indentFormat640, devAddr)
fprint.printTitleString('Register Name', fprint.indentFormat640, regName)
fprint.printTitleOneByteNum('Register Written', fprint.indentFormat640, testByte)
fprint.printTitleOneByteNum('Register Read Back', fprint.indentFormat640, readByte)
fprint.printTitleString('Results', fprint.indentFormat640, resultsString)
fprint.printEndExecFunction()
return
# *** Test PCF8591 ***
# *** Read PCF8591 Single Ended Input Channel 0 ***
#def readAdcResults(i2cBus, devAddr, controlByte):
# adcResults = i2cBus.read_byte_data(devAddr, controlByte)
# adcResults = i2cBus.read_byte_data(devAddr, controlByte)
# return adcResults
def pcf8591Convert(moduleName, signalName):
# fprint.printBeginExecFunction()
i2cBusName = pcf8591ModuleDict[moduleName][signalName]['I2cBusName']
devAddrName = pcf8591ModuleDict[moduleName][signalName]['DevAddrName']
channelNumName = pcf8591ModuleDict[moduleName][signalName]['ChannelNumName']
i2cBus = i2cBusDict[i2cBusName]
devAddr = pcf8591DevAddrDict[devAddrName]
controlByte = pcf8591ControlByteDict[channelNumName]
# adcResults = readAdcResults(i2cBus, devAddr, controlByte)
adcResults = readDevControlByteOneByte(i2cBus, devAddr, controlByte)
adcResults = readDevControlByteOneByte(i2cBus, devAddr, controlByte)
print('\n# *** PCF8591 ADC Testing *****************************************************\n')
fprint.printTitleString('Module Name', fprint.indentFormat640, moduleName)
fprint.printTitleString('Signal Name', fprint.indentFormat640, signalName)
fprint.printTitleString('I2C Bus Name', fprint.indentFormat640, i2cBusName)
fprint.printTitleOneByteNum('PCF8591 I2C Device Addr', fprint.indentFormat640, devAddr)
fprint.printTitleOneByteNum('Channel Number', fprint.indentFormat640, pcf8591ControlByteDict[channelNumName])
print(' ADC Results =', fprint.convertOneByteNumToFourCharStr(adcResults), ' (hex)')
print(' =', (str(adcResults)).ljust(4, ' '), ' (dec)')
print(' =', (str(int((float((adcResults)/255) * 100)))).ljust(4, ' '), ' (%)')
# fprint.printEndExecFunction()
return
# ********************************************************************************
# ********************************************************************************
# ********************************************************************************
# *** I2C PCF8591 ADC PhMeter GreenTea/Milk/Water Tests ***
# ********************************************************************************
def convertPhMeterGreenTea():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'GreenTea')
#fprint.printEndExecFunction()
return
def convertPhMeterMilk():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Milk')
#fprint.printEndExecFunction()
return
def convertPhMeterWater():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Water')
#fprint.printEndExecFunction()
return
def convertPhMeterOil():
#fprint.printBeginExecFunction()
pcf8591Convert('PhMeter', 'Oil')
#fprint.printEndExecFunction()
return
# ********************************************************************************
# *** Main Tests ***
# ********************************************************************************
def mainTest01(): # *** Testing dateTime and timeElapse Functions ***
ftime.testPrintDateTimeNow()
ftime.testPrintOneSecondElapsedTime()
return
def mainTest02(): # *** Testing I2C PCA9685 16 Channel PWM Controller Ping (ReadAfterWrite Function ) ***
testWriteReadRegister('PCA9685', 'I2cBus1', 'Dev0', 'Mode1', "0x75") # 0x40
testWriteReadRegister('PCA9685', 'I2cBus1', 'Dev1', 'Mode1', "0x77") # 0x41
testWriteReadRegister('PCA9685', 'I2cBus3', 'Dev2', 'Mode1', "0x77") # 0x40
testWriteReadRegister('PCA9685', 'I2cBus3', 'Dev2', 'Mode1', "0x77") # 0x42
return
def mainTest03():
osInfo()
convertPhMeterGreenTea()
convertPhMeterMilk()
convertPhMeterWater()
convertPhMeterOil()
return
def mainTest04(): # *** Ping PCA9685 I2cBus1, Device Address 0x40, Register Mode1, Test Byte 0x75 ***
osInfo()
testWriteReadRegister('PCA9685', 'I2cBus1', 'Dev0', 'Mode1', '0x75') # 0x40
return
def mainTest05():
osInfo()
testRepeatWriteReadRegisterNoPrintResults('PCA9685', 'I2cBus1', 'Dev0', 'Mode1', '0x75', 'TenMilliSeconds', 'FourTimes')
testRepeatWriteReadRegisterNoPrintResults('PCA9685', 'I2cBus1', 'Dev0', 'Mode1', '0x75', 'TenMilliSeconds', 'OneMillionTimes')
return
def mainTest06():
osInfo()
convertPhMeterGreenTea()
convertPhMeterMilk()
convertPhMeterWater()
convertPhMeterOil()
return
# ********************************************************************************
# ********************************************************************************
# ********************************************************************************
# *** Init/Main Functions ***
# ********************************************************************************
# *** Init Function ***
def init():
pass
return
# ********************************************************************************
#*** Main Function ***
# ********************************************************************************
def main():
init()
#mainTest01()
#mainTest02()
#mainTest03()
#mainTest04()
#mainTest05()
mainTest06()
return
# ********************************************************************************
# ********************************************************************************
# ********************************************************************************
# *** Main ***
# ********************************************************************************
if __name__ == '__main__':
main()
# *** End of Program ***
# ********************************************************************************
# ********************************************************************************
''' *** Sample Output 2019nov21hkt1310 *******************************************
Python 3.7.3 (/usr/bin/python3)
>>> %Run fi2c127.py
# *** System Info *****************************************************
>>>>> Date <<<<<
Thu 21 Nov 2019 01:09:42 PM HKT
>>>>> buster version, Rpi4B model, Rpi4B memory <<<<<
Linux tlfong01 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
Model : Raspberry Pi 4 Model B Rev 1.1
MemTotal: 1986020 kB
>>>>> i2c baudrate <<<<<
dtparam=i2c_arm=on,i2c_arm_baudrate=500000
>>>>> i2c dtoverlay <<<<<
dtoverlay=i2c1,pins_2_3
dtoverlay=i2c3,pins_4_5
dtoverlay=i2c4,pins_6_7
dtoverlay=i2c5,pins_12_13
dtoverlay=i2c6,pins_22_23
>>>>> ls /dev/i2c* <<<<<
/dev/i2c-1
/dev/i2c-3
/dev/i2c-4
/dev/i2c-6
>>>>> i2cdetect -y 1 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 41 -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- 72 -- -- -- -- --
>>>>> i2cdetect -y 3 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- 42 -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
>>>>> i2cdetect -y 4 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
********************************************************************************
Begin Execute Function testRepeatWriteReadRegisterNoPrintResults 2019-11-21 13:09
Function Name = testRepeatWriteReadRegisterNoPrintResults
Repeat Ping Times = 4
Now repeat pinging, Ctrl-X to exit, = .....
Repeat Ping Times = 4
Date Time = 2019-11-21 13:09
Device Id = PCA9685
I2C Bus Name = I2cBus1
Device Name = Dev0
Device Address = 0x40
Register Name = Mode1
Register Written = 0x75
Register Read Back = 0x75
Results = Good
End Execute Function testRepeatWriteReadRegisterNoPrintResults 2019-11-21 13:09
********************************************************************************
********************************************************************************
Begin Execute Function testRepeatWriteReadRegisterNoPrintResults 2019-11-21 13:09
Function Name = testRepeatWriteReadRegisterNoPrintResults
Repeat Ping Times = 1000000
Now repeat pinging, Ctrl-X to exit, = .....
'''
''' *** Sample Output 2019nov19hkt2059 *******************************************
>>> %Run fi2c123.py
# *** System Info *****************************************************
>>>>> Date <<<<<
Tue 19 Nov 2019 09:49:15 PM HKT
>>>>> buster version, Rpi4B model, Rpi4B memory <<<<<
Linux tlfong01 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
Model : Raspberry Pi 4 Model B Rev 1.1
MemTotal: 1986020 kB
>>>>> i2c baudrate <<<<<
dtparam=i2c_arm=on,i2c_arm_baudrate=500000
>>>>> i2c dtoverlay <<<<<
dtoverlay=i2c1,pins_2_3
dtoverlay=i2c3,pins_4_5
dtoverlay=i2c4,pins_6_7
dtoverlay=i2c5,pins_12_13
dtoverlay=i2c6,pins_22_23
>>>>> ls /dev/i2c* <<<<<
/dev/i2c-1
/dev/i2c-3
/dev/i2c-4
/dev/i2c-6
>>>>> i2cdetect -y 1 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 41 -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- 72 -- 74 -- -- --
>>>>> i2cdetect -y 3 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- 42 -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- 72 -- 74 -- -- --
>>>>> i2cdetect -y 4 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = GreenTea
I2C Bus Name = I2cBus1
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0xf8 (hex)
= 248 (dec)
= 97 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Milk
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x49
Channel Number = 0x00
ADC Results = 0x00 (hex)
= 0 (dec)
= 0 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Water
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x7a (hex)
= 122 (dec)
= 47 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Oil
I2C Bus Name = I2cBus4
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x7b (hex)
= 123 (dec)
= 48 (%)
>>>
'''
'''
# *** Sample Output 2019nov21hkt1131 ***
Python 3.7.3 (/usr/bin/python3)
>>> %cd /home/pi/Python_Programs/work1409
>>> %Run fi2c125.py
# *** System Info *****************************************************
>>>>> Date <<<<<
Thu 21 Nov 2019 11:29:06 AM HKT
>>>>> buster version, Rpi4B model, Rpi4B memory <<<<<
Linux tlfong01 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
Model : Raspberry Pi 4 Model B Rev 1.1
MemTotal: 1986020 kB
>>>>> i2c baudrate <<<<<
dtparam=i2c_arm=on,i2c_arm_baudrate=500000
>>>>> i2c dtoverlay <<<<<
dtoverlay=i2c1,pins_2_3
dtoverlay=i2c3,pins_4_5
dtoverlay=i2c4,pins_6_7
dtoverlay=i2c5,pins_12_13
dtoverlay=i2c6,pins_22_23
>>>>> ls /dev/i2c* <<<<<
/dev/i2c-1
/dev/i2c-3
/dev/i2c-4
/dev/i2c-6
>>>>> i2cdetect -y 1 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 41 -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
>>>>> i2cdetect -y 3 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- 42 -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
>>>>> i2cdetect -y 4 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = GreenTea
I2C Bus Name = I2cBus1
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0xf8 (hex)
= 248 (dec)
= 97 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Milk
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x49
Channel Number = 0x00
ADC Results = 0x00 (hex)
= 0 (dec)
= 0 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Water
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x7a (hex)
= 122 (dec)
= 47 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Oil
I2C Bus Name = I2cBus4
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x79 (hex)
= 121 (dec)
= 47 (%)
>>> %Run fi2c125.py
# *** System Info *****************************************************
>>>>> Date <<<<<
Thu 21 Nov 2019 11:29:36 AM HKT
>>>>> buster version, Rpi4B model, Rpi4B memory <<<<<
Linux tlfong01 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
Model : Raspberry Pi 4 Model B Rev 1.1
MemTotal: 1986020 kB
>>>>> i2c baudrate <<<<<
dtparam=i2c_arm=on,i2c_arm_baudrate=500000
>>>>> i2c dtoverlay <<<<<
dtoverlay=i2c1,pins_2_3
dtoverlay=i2c3,pins_4_5
dtoverlay=i2c4,pins_6_7
dtoverlay=i2c5,pins_12_13
dtoverlay=i2c6,pins_22_23
>>>>> ls /dev/i2c* <<<<<
/dev/i2c-1
/dev/i2c-3
/dev/i2c-4
/dev/i2c-6
>>>>> i2cdetect -y 1 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 41 -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
>>>>> i2cdetect -y 3 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- 42 -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
>>>>> i2cdetect -y 4 <<<<<
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = GreenTea
I2C Bus Name = I2cBus1
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0xe0 (hex)
= 224 (dec)
= 87 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Milk
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x49
Channel Number = 0x00
ADC Results = 0x00 (hex)
= 0 (dec)
= 0 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Water
I2C Bus Name = I2cBus3
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x7a (hex)
= 122 (dec)
= 47 (%)
# *** PCF8591 ADC Testing *****************************************************
Module Name = PhMeter
Signal Name = Oil
I2C Bus Name = I2cBus4
PCF8591 I2C Device Addr = 0x48
Channel Number = 0x00
ADC Results = 0x79 (hex)
= 121 (dec)
= 47 (%)
>>>
'''
# ftime73.py tlfong01 2019nov26hkt2022
# Rpi4B buster 2019sep26 python 3.7.3 Thronny 3.2
import inspect
from time import sleep
from datetime import datetime
import fprint70 as fprint
# ********************************************************************************
# ********************************************************************************
# *** Date Time Functions ***
def delaySeconds(secondsNum):
sleep(secondsNum)
return
def oneSecondDelay():
delaySeconds(1)
return
def tenMillionPasses():
totalCount = 10000000
for count in range(totalCount):
pass
return
def oneMillionPasses():
totalCount = 1000000
for count in range(totalCount):
pass
return
def oneThousandPasses():
totalCount = 1000
for count in range(totalCount):
pass
return
def printDateTimeNow():
timeNowLong = datetime.now()
timeNowShort = str(timeNowLong)[0:16]
fprint.printTitleString('timeNowLong', fprint.indentFormat640, timeNowLong)
fprint.printTitleString('timeNowShort', fprint.indentFormat640, timeNowShort)
return
def printStartTimeFinishTimeDifferenceLong(startTime, finishTime):
elapsedTime = finishTime - startTime
elapsedSeconds = elapsedTime.seconds
elapsedMicroSeconds = (elapsedSeconds * 1000000) + elapsedTime.microseconds
elapsedMilliSeconds = int(elapsedMicroSeconds / 1000)
fprint.printTitleString('Start Time', fprint.indentFormat640, startTime)
fprint.printTitleString('Finish Time', fprint.indentFormat640, finishTime)
fprint.printTitleString('Elapsed Time', fprint.indentFormat640, elapsedTime)
fprint.printTitleString('Elapsed Seconds', fprint.indentFormat640, elapsedSeconds)
fprint.printTitleString('Elapsed MilliSeconds', fprint.indentFormat640, elapsedMilliSeconds)
fprint.printTitleString('Elapsed MicroSeconds', fprint.indentFormat640, elapsedMicroSeconds)
return
def printStartTimeFinishTimeDifferenceMilliSeconds(startTime, finishTime):
elapsedTime = finishTime - startTime
elapsedSeconds = elapsedTime.seconds
elapsedMicroSeconds = (elapsedSeconds * 1000000) + elapsedTime.microseconds
elapsedMilliSeconds = int(elapsedMicroSeconds / 1000)
fprint.printTitleString('Elapsed MilliSeconds', fprint.indentFormat640, elapsedMilliSeconds)
return
def printStartTimeFinishTimeDifferenceMicroSeconds(startTime, finishTime):
elapsedTime = finishTime - startTime
elapsedSeconds = elapsedTime.seconds
elapsedMicroSeconds = (elapsedSeconds * 1000000) + elapsedTime.microseconds
elapsedMilliSeconds = int(elapsedMicroSeconds / 1000)
fprint.printTitleString('Elapsed MicroSeconds', fprint.indentFormat640, elapsedMicroSeconds)
return
def printFunctionElapseTime(function, functionName):
fprint.printBeginExecFunction()
printDateTimeNow()
printElapsedTime()
fprint.printEndExecFunction()
return
# *** Test Functions ***
def testPrintDateTimeNow():
fprint.printBeginExecFunction()
printDateTimeNow()
fprint.printEndExecFunction()
return
def testPrintOneSecondElapsedTime():
fprint.printBeginExecFunction()
startTime = datetime.now()
delaySeconds(1)
finishTime = datetime.now()
printStartTimeFinishTimeDifferenceLong(startTime, finishTime)
fprint.printEndExecFunction()
return
def testPrintTwoSecondsElapsedTime():
fprint.printBeginExecFunction()
startTime = datetime.now()
delaySeconds(2)
finishTime = datetime.now()
printStartTimeFinishTimeDifferenceLong(startTime, finishTime)
fprint.printEndExecFunction()
return
def testPrintFunctionExecTimeLong(function):
#fprint.printBeginExecFunction()
startTime = datetime.now()
function()
finishTime = datetime.now()
printStartTimeFinishTimeDifferenceLong(startTime, finishTime)
#fprint.printEndExecFunction()
return
def testPrintFunctionExecTimeMilliSeconds(function):
#fprint.printBeginExecFunction()
startTime = datetime.now()
function()
finishTime = datetime.now()
printStartTimeFinishTimeDifferenceMilliSeconds(startTime, finishTime)
#fprint.printEndExecFunction()
return
def testPrintFunctionExecTimeMicroSeconds(function):
fprint.printBeginExecFunction()
startTime = datetime.now()
function()
finishTime = datetime.now()
printStartTimeFinishTimeDifferenceMicroSeconds(startTime, finishTime)
fprint.printEndExecFunction()
return
def testPrintOneSecondDelayFunctionLong():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeLong(oneSecondDelay)
fprint.printEndExecFunction()
return
def testPrintOneSecondDelayFunctionMilliSeconds():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeMilliSeconds(oneSecondDelay)
fprint.printEndExecFunction()
return
def testPrintTenMillionPassesFunctionMilliSeconds():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeMilliSeconds(tenMillionPasses)
fprint.printEndExecFunction()
return
def testPrintOneMillionPassesFunctionMicroSeconds():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeMicroSeconds(oneMillionPasses)
fprint.printEndExecFunction()
return
def testPrintOneThousandPassesFunctionMicroSeconds():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeMicroSeconds(oneThousandPasses)
fprint.printEndExecFunction()
return
def printOneLineTenTimes():
printLine = 'abcxyz'
repeatCount = 10
for i in range(10):
print(' abcxyz')
return
def testPrintPrintOneLineTenTimesFunctionMilliSeconds():
fprint.printBeginExecFunction()
testPrintFunctionExecTimeMilliSeconds(printOneLineTenTimes)
fprint.printEndExecFunction()
return
def loop100Passes():
#fprint.printBeginExecFunction()
loopCount = 100
for count in range(loopCount):
pass
#fprint.printBeginExecFunction()
return
# ********************************************************************************
# ********************************************************************************
# *** Main Tests ***
def mainTests():
#testPrintDateTimeNow()
#testPrintOneSecondElapsedTime()
#testPrintTwoSecondsElapsedTime()
#testPrintOneSecondDelayFunctionLong()
#testPrintOneSecondDelayFunctionMilliSeconds()
#testPrintTenMillionPassesFunctionMilliSeconds()
#testPrintOneMillionPassesFunctionMicroSeconds()
#testPrintOneThousandPassesFunctionMicroSeconds()
#testPrintPrintOneLineTenTimesFunctionMilliSeconds()
testPrintFunctionExecTimeMicroSeconds(loop100Passes)
testPrintFunctionExecTimeMicroSeconds(loop100Passes)
testPrintFunctionExecTimeMicroSeconds(loop100Passes)
testPrintFunctionExecTimeMicroSeconds(loop100Passes)
testPrintFunctionExecTimeMicroSeconds(loop100Passes)
return
# ********************************************************************************
# ********************************************************************************
# *** Init/Main Functions ***
# *** Init Function ***
def init():
pass
return
#*** Main Function ***
def main():
init()
mainTests()
return
# ********************************************************************************
# ********************************************************************************
# *** Main ***
if __name__ == '__main__':
main()
# *** End of Program ***
# ********************************************************************************
# ********************************************************************************
''' Sample Output 2019nov2ghkt2020
>>> %Run ftime73.py
********************************************************************************
Begin Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
Function Name = testPrintFunctionExecTimeMicroSeconds
Elapsed MicroSeconds = 28
End Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
********************************************************************************
********************************************************************************
Begin Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
Function Name = testPrintFunctionExecTimeMicroSeconds
Elapsed MicroSeconds = 23
End Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
********************************************************************************
********************************************************************************
Begin Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
Function Name = testPrintFunctionExecTimeMicroSeconds
Elapsed MicroSeconds = 22
End Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
********************************************************************************
********************************************************************************
Begin Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
Function Name = testPrintFunctionExecTimeMicroSeconds
Elapsed MicroSeconds = 31
End Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
********************************************************************************
********************************************************************************
Begin Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
Function Name = testPrintFunctionExecTimeMicroSeconds
Elapsed MicroSeconds = 25
End Execute Function testPrintFunctionExecTimeMicroSeconds 2019-11-26 20:21
********************************************************************************
>>>
'''
''' Sample Output 2019nov26hkt1433
>>> %Run ftime71.py
Elapsed MicroSeconds = 31
'''
''' Sample Output 2019sep08hkt1208
>>> %Run ftime69.py
********************************************************************************
Begin Execute Function testPrintPrintOneLineTenTimesFunctionMilliSeconds tlfong01
Function Name = testPrintPrintOneLineTenTimesFunctionMilliSeconds
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
abcxyz
Elapsed MilliSeconds = 3
End Execute Function testPrintPrintOneLineTenTimesFunctionMilliSeconds tlfong01
********************************************************************************
>>>
'''
.END
Categories: Uncategorized
