Rev 3502 Rev 3503
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Sample of measiring and correct frequency with ACOUNTER02A 3 # Sample of measiring and correct frequency with ACOUNTER02A
4   4  
5 import time 5 import time
6 import datetime 6 import datetime
7 import sys 7 import sys
8 from pymlab import config 8 from pymlab import config
9   9  
10 #### Script Arguments ############################################### 10 #### Script Arguments ###############################################
11   11  
12 if (len(sys.argv) > 3) or (len(sys.argv) < 2): 12 if (len(sys.argv) > 3) or (len(sys.argv) < 2):
13 sys.stderr.write("Invalid number of arguments.\n") 13 sys.stderr.write("Invalid number of arguments.\n")
14 sys.stderr.write("Usage: %s PORT_ADDRESS [REQUIERED_MHz]\n" % (sys.argv[0], )) 14 sys.stderr.write("Usage: %s PORT_ADDRESS [REQUIERED_MHz]\n" % (sys.argv[0], ))
15 sys.exit(1) 15 sys.exit(1)
16   16  
17 port = eval(sys.argv[1]) 17 port = eval(sys.argv[1])
18 #### Sensor Configuration ########################################### 18 #### Sensor Configuration ###########################################
19   19  
20 cfg = config.Config( 20 cfg = config.Config(
21 port = port, 21 port = port,
22 bus = [ 22 bus = [
-   23 {
-   24 "type": "i2chub",
-   25 "address": 0x71,
-   26 "children": [
23 { "name":"counter", "type":"acount02"}, 27 { "name":"counter", "type":"acount02", "channel": 2, },
24 { "name":"clkgen", "type":"clkgen01"}, 28 { "name":"clkgen", "type":"clkgen01", "channel": 5, },
-   29 ],
-   30 },
25 ], 31 ],
26 ) 32 )
27 cfg.initialize() 33 cfg.initialize()
28   34  
29 print "Frequency counter readout example \r\n" 35 print "Frequency counter readout example \r\n"
30 fcount = cfg.get_device("counter") 36 fcount = cfg.get_device("counter")
31 fgen = cfg.get_device("clkgen") 37 fgen = cfg.get_device("clkgen")
32 time.sleep(0.5) 38 time.sleep(0.5)
33 frequency = fcount.get_freq() 39 frequency = fcount.get_freq()
34 rfreq = fgen.get_rfreq() 40 rfreq = fgen.get_rfreq()
35 hsdiv = fgen.get_hs_div() 41 hsdiv = fgen.get_hs_div()
36 n1 = fgen.get_n1_div() 42 n1 = fgen.get_n1_div()
37 fdco = 0 43 fdco = 0
38 fxtal = 0 44 fxtal = 0
39 regs = [0, 0, 0] 45 regs = [0, 0, 0]
40   46  
41   47  
42 #### Data Logging ################################################### 48 #### Data Logging ###################################################
43   49  
44 try: 50 try:
45 with open("frequency.log", "a") as f: 51 with open("frequency.log", "a") as f:
46 while True: 52 while True:
47 now = datetime.datetime.now() 53 now = datetime.datetime.now()
48 if (now.second == 15) or (now.second == 35) or (now.second == 55): 54 if (now.second == 15) or (now.second == 35) or (now.second == 55):
49 frequency = fcount.get_freq() 55 frequency = fcount.get_freq()
50 if (len(sys.argv) == 3): 56 if (len(sys.argv) == 3):
51 regs = fgen.set_freq(frequency/1e6, float(eval(sys.argv[2]))) 57 regs = fgen.set_freq(frequency/1e6, float(eval(sys.argv[2])))
52 now = datetime.datetime.now() 58 now = datetime.datetime.now()
53   59  
54 rfreq = fgen.get_rfreq() 60 rfreq = fgen.get_rfreq()
55 hsdiv = fgen.get_hs_div() 61 hsdiv = fgen.get_hs_div()
56 n1 = fgen.get_n1_div() 62 n1 = fgen.get_n1_div()
57 fdco = (frequency/1e6) * hsdiv * n1 63 fdco = (frequency/1e6) * hsdiv * n1
58 fxtal = fdco / rfreq 64 fxtal = fdco / rfreq
59   65  
60 sys.stdout.write("frequency: " + str(frequency) + " Hz Time: " + str(now.second)) 66 sys.stdout.write("frequency: " + str(frequency) + " Hz Time: " + str(now.second))
61 sys.stdout.write(" RFREQ: " + str(rfreq) + " HSDIV: " + str(hsdiv) + " N1: " + str(n1)) 67 sys.stdout.write(" RFREQ: " + str(rfreq) + " HSDIV: " + str(hsdiv) + " N1: " + str(n1))
62 sys.stdout.write(" fdco: " + str(fdco) + " fxtal: " + str(fxtal) + "\r") 68 sys.stdout.write(" fdco: " + str(fdco) + " fxtal: " + str(fxtal) + "\r")
63 f.write("%d\t%s\t%.3f\n" % (time.time(), datetime.datetime.now().isoformat(), frequency)) 69 f.write("%d\t%s\t%.3f\n" % (time.time(), datetime.datetime.now().isoformat(), frequency))
64   70  
65 sys.stdout.flush() 71 sys.stdout.flush()
66 time.sleep(0.9) 72 time.sleep(0.9)
67 except KeyboardInterrupt: 73 except KeyboardInterrupt:
68 sys.stdout.write("\r\n") 74 sys.stdout.write("\r\n")
69 sys.exit(0) 75 sys.exit(0)
70 f.close() 76 f.close()