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