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() |