Rev 3736 Rev 3743
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Sample of measuring and frequency correction with ACOUNTER02A 3 # Sample of measuring and frequency correction 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 req_freq = 286.0788 # required local oscillator frequency in MHz.
11   11  
12 if (len(sys.argv) > 3) or (len(sys.argv) < 2): -  
13 sys.stderr.write("Invalid number of arguments.\n") -  
14 sys.stderr.write("Usage: %s PORT_ADDRESS [REQUIERED_MHz]\n" % (sys.argv[0], )) -  
15 sys.exit(1) -  
16   -  
17 port = eval(sys.argv[1]) -  
18 #### Sensor Configuration ########################################### 12 #### Sensor Configuration ###########################################
19   13  
20 cfg = config.Config( 14 cfg = config.Config(
21 i2c = { 15 i2c = {
22 "port": port, 16 "port": 1,
23 }, 17 },
24 bus = [ 18 bus = [
25 { 19 {
26 "type": "i2chub", 20 "type": "i2chub",
27 "address": 0x70, 21 "address": 0x70,
28 "children": [ 22 "children": [
29 { "name":"counter", "type":"acount02", "channel": 2, }, 23 { "name":"counter", "type":"acount02", "channel": 2, },
30 { "name":"clkgen", "type":"clkgen01", "channel": 5, }, 24 { "name":"clkgen", "type":"clkgen01", "channel": 5, },
31 ], 25 ],
32 }, 26 },
33 ], 27 ],
34 ) 28 )
35 cfg.initialize() 29 cfg.initialize()
36   30  
37 print "RMDS Station frequency management test software \r\n" 31 print "RMDS Station frequency management test software \r\n"
38 fcount = cfg.get_device("counter") 32 fcount = cfg.get_device("counter")
39 fgen = cfg.get_device("clkgen") 33 fgen = cfg.get_device("clkgen")
40 time.sleep(0.5) 34 time.sleep(0.5)
41 frequency = fcount.get_freq() 35 frequency = fcount.get_freq()
42 rfreq = fgen.get_rfreq() 36 rfreq = fgen.get_rfreq()
43 hsdiv = fgen.get_hs_div() 37 hsdiv = fgen.get_hs_div()
44 n1 = fgen.get_n1_div() 38 n1 = fgen.get_n1_div()
45 #fdco = 0 -  
46 #fxtal = 0 -  
47 #regs = [0, 0, 0] -  
48   39  
49 ''' 40 '''
50 # sample GPS configuration 41 # sample GPS configuration
51 fcount.conf_GPS(0,5) # length of the GPS configurtion sentence 42 fcount.conf_GPS(0,5) # length of the GPS configurtion sentence
52 fcount.conf_GPS(1,ord('a')) # the first byte of GPS configuration sentence 43 fcount.conf_GPS(1,ord('a')) # the first byte of GPS configuration sentence
53 fcount.conf_GPS(2,ord('b')) # the second byte of GPS configyration sentence 44 fcount.conf_GPS(2,ord('b')) # the second byte of GPS configyration sentence
54 fcount.conf_GPS(3,ord('c')) 45 fcount.conf_GPS(3,ord('c'))
55 fcount.conf_GPS(4,ord('d')) 46 fcount.conf_GPS(4,ord('d'))
56 fcount.conf_GPS(5,ord('e')) 47 fcount.conf_GPS(5,ord('e'))
57 ''' 48 '''
58 fcount.set_GPS() # set GPS configuration 49 fcount.set_GPS() # set GPS configuration
59   50  
60 #### Data Logging ################################################### 51 #### Data Logging ###################################################
61   52  
62 try: 53 try:
63 with open("frequency.log", "a") as f: 54 with open("frequency.log", "a") as f:
64 while True: 55 while True:
65 now = datetime.datetime.now() 56 now = datetime.datetime.now()
66 if (now.second == 15) or (now.second == 35) or (now.second == 55): 57 if (now.second == 15) or (now.second == 35) or (now.second == 55):
67 frequency = fcount.get_freq() 58 frequency = fcount.get_freq()
68 if (len(sys.argv) == 3): 59 if (len(sys.argv) == 3):
69 regs = fgen.set_freq(frequency/1e6, float(eval(sys.argv[2]))) 60 regs = fgen.set_freq(frequency/1e6, float(req_freq))
70 now = datetime.datetime.now() 61 now = datetime.datetime.now()
71   62  
72 rfreq = fgen.get_rfreq() 63 rfreq = fgen.get_rfreq()
73 hsdiv = fgen.get_hs_div() 64 hsdiv = fgen.get_hs_div()
74 n1 = fgen.get_n1_div() 65 n1 = fgen.get_n1_div()
75 fdco = (frequency/1e6) * hsdiv * n1 66 fdco = (frequency/1e6) * hsdiv * n1
76 fxtal = fdco / rfreq 67 fxtal = fdco / rfreq
77   68  
78 sys.stdout.write("frequency: " + str(frequency) + " Hz Time: " + str(now.second)) 69 sys.stdout.write("frequency: " + str(frequency) + " Hz Time: " + str(now.second))
79 sys.stdout.write(" RFREQ: " + str(rfreq) + " HSDIV: " + str(hsdiv) + " N1: " + str(n1)) 70 sys.stdout.write(" RFREQ: " + str(rfreq) + " HSDIV: " + str(hsdiv) + " N1: " + str(n1))
80 sys.stdout.write(" fdco: " + str(fdco) + " fxtal: " + str(fxtal) + "\r") 71 sys.stdout.write(" fdco: " + str(fdco) + " fxtal: " + str(fxtal) + "\r")
81 f.write("%d\t%s\t%.3f\n" % (time.time(), datetime.datetime.now().isoformat(), frequency)) 72 f.write("%d\t%s\t%.3f\n" % (time.time(), datetime.datetime.now().isoformat(), frequency))
82   73  
83 sys.stdout.flush() 74 sys.stdout.flush()
84 time.sleep(0.9) 75 time.sleep(0.9)
85 except KeyboardInterrupt: 76 except KeyboardInterrupt:
86 sys.stdout.write("\r\n") 77 sys.stdout.write("\r\n")
87 sys.exit(0) 78 sys.exit(0)
88 f.close() 79 f.close()