Skip to content

Commit 3f1391f

Browse files
committedOct 25, 2014
devices: basic pdq2 controller/client
1 parent 16170c9 commit 3f1391f

File tree

2 files changed

+156
-83
lines changed

2 files changed

+156
-83
lines changed
 

‎artiq/devices/pdq2/pdq2-client

+42-39
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
#!/usr/bin/env python3
22

3-
# Robert Jordens <jordens@gmail.com>, 2012
3+
# Based on code by Robert Jordens <jordens@gmail.com>, 2012
44

55
import argparse
66
import time
7-
import logging
87

98
from scipy import interpolate
109
import numpy as np
1110

12-
from pdq2com import Pdq2
11+
from artiq.management.pc_rpc import Client
1312

1413

15-
def _main():
16-
parser = argparse.ArgumentParser(description="""PDQ2 frontend.
17-
Evaluates times and voltages, interpolates and uploads
18-
them.""")
19-
parser.add_argument("-s", "--serial", default=None,
20-
help="device (FT245R) serial string [first]")
14+
def _get_args():
15+
parser = argparse.ArgumentParser(description="""PDQ2 client.
16+
Evaluates times and voltages, interpolates and uploads
17+
them to the controller.""")
18+
parser.add_argument("-s", "--server", default="::1",
19+
help="hostname or IP of the master to connect to")
20+
parser.add_argument("--port", default=8889, type=int,
21+
help="TCP port to use to connect to the master")
22+
parser.add_argument("-q", "--quit-controller", default=False,
23+
action="store_true",
24+
help="causes the controller to quit")
2125
parser.add_argument("-c", "--channel", default=0, type=int,
2226
help="channel: 3*board_num+dac_num [%(default)s]")
2327
parser.add_argument("-f", "--frame", default=0, type=int,
@@ -44,42 +48,44 @@ def _main():
4448
help="demo mode: pulse and chirp,"
4549
" 1V*ch+0.1V*frame [%(default)s]")
4650
parser.add_argument("-p", "--plot", help="plot to file [%(default)s]")
47-
parser.add_argument("-d", "--debug", default=False,
48-
action="store_true", help="debug communications")
4951
parser.add_argument("-r", "--reset", default=False,
5052
action="store_true", help="do reset before")
5153
parser.add_argument("-b", "--bit", default=False,
5254
action="store_true", help="do bit test")
55+
return parser.parse_args()
5356

54-
args = parser.parse_args()
55-
56-
if args.debug:
57-
logging.basicConfig(level=logging.DEBUG)
58-
else:
59-
logging.basicConfig(level=logging.WARNING)
6057

61-
times = eval(args.times, globals(), {})
62-
voltages = eval(args.voltages, globals(), dict(t=times))
63-
64-
dev = Pdq2(serial=args.serial)
58+
def _main():
59+
args = _get_args()
60+
dev = Client(args.server, args.port)
61+
if args.quit_controller:
62+
dev.quit()
63+
return
64+
dev.init()
6565

6666
if args.reset:
67-
dev.write(b"\x00") # flush any escape
67+
dev.flush_escape()
6868
dev.write_cmd("RESET_EN")
6969
time.sleep(.1)
7070
if args.dcm:
7171
dev.write_cmd("DCM_EN")
72-
dev.freq = 100e6
72+
dev.set_freq(100e6)
7373
elif args.dcm == 0:
7474
dev.write_cmd("DCM_DIS")
75-
dev.freq = 50e6
75+
dev.set_freq(50e6)
7676
dev.write_cmd("START_DIS")
7777

78+
num_channels = dev.get_num_channels()
79+
num_frames = dev.get_num_frames()
80+
times = eval(args.times, globals(), {})
81+
voltages = eval(args.voltages, globals(), dict(t=times))
82+
7883
if args.demo:
79-
channels = [args.channel] if args.channel < dev.num_channels \
80-
else range(dev.num_channels)
81-
frames = [args.frame] if args.frame < dev.num_frames \
82-
else range(dev.num_frames)
84+
# FIXME
85+
channels = [args.channel] if args.channel < num_channels \
86+
else range(num_channels)
87+
frames = [args.frame] if args.frame < num_frames \
88+
else range(num_frames)
8389
for channel in channels:
8490
f = []
8591
for frame in frames:
@@ -95,40 +101,37 @@ def _main():
95101
board, dac = divmod(channel, dev.num_dacs)
96102
dev.write_data(dev.add_mem_header(board, dac, dev.map_frames(f)))
97103
elif args.bit:
98-
map = [0] * dev.num_frames
104+
map = [0] * num_frames
99105
t = np.arange(2*16) * 1.
100106
v = [-1, 0, -1]
101107
for i in range(15):
102108
vi = 1 << i
103109
v.extend([vi - 1, vi])
104-
v = np.array(v)*dev.max_out/(1 << 15)
110+
v = np.array(v)*dev.get_max_out()/(1 << 15)
105111
t, v = t[:3], v[:3]
106112
# print(t, v)
107-
for channel in range(dev.num_channels):
108-
dev.write_data(dev.multi_frame([(t, v)], channel=channel,
109-
order=0, map=map, shift=15,
110-
stop=False, trigger=False))
113+
for channel in range(num_channels):
114+
dev.multi_frame([(t, v)], channel=channel, order=0, map=map,
115+
shift=15, stop=False, trigger=False)
111116
else:
112117
tv = [(times, voltages)]
113-
map = [None] * dev.num_frames
118+
map = [None] * num_frames
114119
map[args.frame] = 0
115-
dev.write_data(dev.multi_frame(tv, channel=args.channel,
116-
order=args.order, map=map))
120+
dev.multi_frame(tv, channel=args.channel, order=args.order, map=map)
117121

118122
dev.write_cmd("START_EN")
119123
if not args.disarm:
120124
dev.write_cmd("ARM_EN")
121125
if args.free:
122126
dev.write_cmd("TRIGGER_EN")
123-
dev.close()
124127

125128
if args.plot:
126129
from matplotlib import pyplot as plt
127130
fig, ax0 = plt.subplots()
128131
ax0.plot(times, voltages, "xk", label="points")
129132
if args.order:
130133
spline = interpolate.splrep(times, voltages, k=args.order)
131-
ttimes = np.arange(0, times[-1], 1/dev.freq)
134+
ttimes = np.arange(0, times[-1], 1/dev.get_freq())
132135
vvoltages = interpolate.splev(ttimes, spline)
133136
ax0.plot(ttimes, vvoltages, ",b", label="interpolation")
134137
fig.savefig(args.plot)

0 commit comments

Comments
 (0)
Please sign in to comment.