Skip to content
Snippets Groups Projects
Commit 6e22528b authored by camera computer's avatar camera computer
Browse files

small QOL changes

parent 90ebb5db
No related branches found
No related tags found
No related merge requests found
......@@ -2,12 +2,23 @@ from AWG import *
import code
import readline
import rlcompleter
import os
import argparse
# _step = int32(0)
def get_step():
step = int32(0)
spcm_dwGetParam_i32(awg.card, SPC_SEQMODE_STATUS, byref(step))
return step.value
def trigger():
global awg
# step = get_step()
awg.force_trigger()
print("forcing a trigger...")
# step = int32(0)
print("triggering...")
# print("current step:", step)
def stop():
......@@ -25,28 +36,72 @@ def start():
def close():
global awg
awg.stop()
awg.close()
print("closing awg and quitting...")
exit(0)
def load(fpath):
# load new waveform onto the next step
# then use trigger() to change step
global awg
# fpath is a relative path or absolute path
# use like: load_data("data/single.npz", 0)
if not os.path.isfile(fpath):
print("invalid file path")
return
data = np.load(fpath, allow_pickle=True)
sig = data['signal']
step = get_step()
segment = (step + 1) % 2
awg.write_segment(sig, segment)
print(f"currently playing step {step}, loaded data onto step {segment}")
# argument parsing, more functionalities to be added later...
parser = argparse.ArgumentParser(description='AWG control')
parser.add_argument(
'-id',
type=int,
default=0,
help='0 for top AWG, 1 for bot AWG, default to 0'
)
args = parser.parse_args()
awg_id = ''
if args.id == 0:
awg_id = b'/dev/spcm0'
elif args.id == 1:
awg_id = b'/dev/spcm1'
else:
print("invalid id")
exit(0)
# load waveform data
wfm_data = np.load("data/single.npz", allow_pickle=True)
static_sig = wfm_data['signal']
empty = np.zeros(static_sig.shape)
wfm = wfm_data['wfm'].item()
data0 = np.load("data/single.npz", allow_pickle=True) # alternatively, change file here and restart program
wfm = data0['wfm'].item()
sampling_rate = wfm.sample_rate
sig0 = data0['signal']
data1 = np.load("data/wfm_5.npz", allow_pickle=True)
sig1 = data1["signal"]
# empty = np.zeros(static_sig.shape)
# AWG stuff
awg = AWG()
awg.open(id=b'/dev/spcm1') # change this to b'/dev/spcm0' for top AWG
awg.open(id=awg_id) # change this to b'/dev/spcm0' for top AWG
awg.set_sampling_rate(sampling_rate)
awg.toggle_channel(0, amplitude=2500)
awg.set_trigger(EXT0=SPC_TM_POS)
awg.set_sequence_mode(2)
awg.write_segment(static_sig, segment=0)
awg.write_segment(empty, segment=1)
awg.set_sequence_mode(2) # partition AWG memory into 2 segments
awg.write_segment(sig0, segment=0)
awg.write_segment(sig1, segment=1)
awg.configure_step(step=0, segment=0, nextstep=1, loop=1, condition=SPCSEQ_ENDLOOPONTRIG)
awg.configure_step(step=1, segment=1, nextstep=0, loop=1, condition=SPCSEQ_ENDLOOPONTRIG)
start()
# console
vars = globals()
......@@ -54,4 +109,3 @@ vars.update(locals())
readline.set_completer(rlcompleter.Completer(vars).complete)
readline.parse_and_bind("tab: complete")
code.InteractiveConsole(vars).interact()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment