def test_subroutine(self): """Test the subroutine calling """ my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.begin_subroutine("test") my_api.dac_value(-12, 1) my_api.dac_value(-12, 1) my_api.dac_value(-12, 1) my_api.end_subroutine() my_api.begin_subroutine("test1") my_api.dac_value(-0xf, 3) my_api.dac_value(-0xf, 3) my_api.dac_value(-0xf, 3) my_api.end_subroutine() my_api.dac_value(-12, 1) my_api.dac_value(-12, 1) my_api.call_subroutine("test") my_api.call_subroutine("test1") my_api.call_subroutine("test") my_api.dac_value(-12, 1) my_sequencer.compile_sequence() my_sequencer.debug_sequence(force=False) target_list = [] for my_ins in my_sequencer.current_sequence: if my_ins.name == "call": target_list.append(my_ins.target_address) label_list = ['test', 'test1', 'test'] for target in target_list: print target label = my_sequencer.current_sequence[target].label self.assertEquals(label, label_list.pop())
def test_looping(self): my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_value(0x0) my_api.label("go") my_api.ttl_value(0x11) my_api.wait(2) my_api.ttl_value(0x0) my_api.wait(50) reg_addr = 5 reg_addr2 = 3 my_api.ttl_value(0x0) my_api.instructions_ldc(reg_addr, 5) my_api.label("test1") my_api.instructions_ldc(reg_addr2, 3) my_api.label("innerloop") my_api.ttl_value(0x10) my_api.wait(10) my_api.ttl_value(0x0) my_api.wait(20) my_api.instructions_bdec("innerloop", reg_addr2) # my_api.wait(50) my_api.instructions_bdec("test1", reg_addr) my_api.jump("go") self.compile(my_sequencer, 1)
def test_all_dds_loops(self, frequency=10, amplitude=-15, clock=800): """Tests all the number of DDS boards that is given in the config file via putting out the frequency and amplitude given with the paramters""" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = [] for k in range(no_of_boards): dds_device.append(ad9910.AD9910(k, clock)) my_api.init_dds(dds_device[k]) my_api.label("beginseq") # saves frequencies in dds registers/profiles for k in range(no_of_boards): my_api.dac_value(amplitude, k) my_api.init_frequency(dds_device[k], frequency, 0) my_api.update_dds(dds_device[k]) my_api.wait(2) my_api.ttl_value(0x1) for k in range(no_of_boards): my_api.set_dds_profile(dds_device[k], 0) my_api.update_dds(dds_device[k]) my_api.ttl_value(0x0) my_api.jump("beginseq") self.compile(my_sequencer)
def test_phase_switching_simultan(self, freq1=45, freq2=45, amplitude=-15, address1=0, address2=1, clock=800): "Test two dds simultaneous on" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(address1, clock) dds_device2 = ad9910.AD9910(address2, clock) my_api.init_dds(dds_device) my_api.init_dds(dds_device2) my_api.label("test") my_api.init_frequency(dds_device, 0.0, 0) my_api.init_frequency(dds_device2, 0.0, 0) my_api.init_frequency(dds_device, freq1, 1) my_api.init_frequency(dds_device2, freq2, 2) my_api.dac_value(amplitude, address1) my_api.dac_value(amplitude, address2) my_api.ttl_value(0x1, 2) my_api.switch_frequency(dds_device, 0, 0) my_api.switch_frequency(dds_device2, 0, 0) my_api.wait(2000) my_api.switch_frequency(dds_device, 1, 0) my_api.switch_frequency(dds_device2, 1, 0) my_api.ttl_value(0x0, 2) my_api.wait(10000) my_api.jump("test") self.compile(my_sequencer)
def test_ttl_set(self, value=0xffff, show_debug=0): "Test ttl pulses of box" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_value(value, 2) my_api.ttl_value(value, 3) self.compile(my_sequencer, show_debug)
def test_dds_profile_switching(self, my_device=0, clock=800): "Just sets a single profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(my_device, clock) my_api.label("beginseq") my_api.init_dds(dds_device) # saves frequencies in dds registers/profiles my_api.dac_value(-10, my_device) my_api.init_frequency(dds_device, 0.0, 0) my_api.init_frequency(dds_device, 5.0, 1) my_api.init_frequency(dds_device, 10.0, 2) my_api.update_dds(dds_device) my_api.wait(2) # my_api.dac_value(-2, my_device) my_api.ttl_value(0x2) my_api.set_dds_profile(dds_device, 1) my_api.update_dds(dds_device) my_api.wait(2) my_api.set_dds_profile(dds_device, 2) my_api.update_dds(dds_device) my_api.wait(2) my_api.set_dds_profile(dds_device, 0) my_api.ttl_value(0x0) my_api.jump("beginseq") self.compile(my_sequencer)
def test_dds_switching(self, frequency1, frequency2, ampl1=0, ampl2=0, my_device=0, clock=800): "Just sets a single profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(my_device, clock) my_api.label("beginseq") my_api.init_dds(dds_device) my_api.ttl_value(0x2) # set_dds_freq params: dds_device, frequency, profile my_api.set_dds_freq(dds_device, frequency1, 0) my_api.update_dds(dds_device) my_api.dac_value(ampl1, my_device) my_api.wait(1) my_api.set_dds_freq(dds_device, frequency2, 0) my_api.update_dds(dds_device) my_api.ttl_value(0x0) my_api.dac_value(ampl2, my_device) my_api.set_dds_freq(dds_device, 0.0, 0) my_api.update_dds(dds_device) my_api.jump("beginseq") self.compile(my_sequencer)
def test_lvds(self, opcode=1, address=1, data=1, phase_profile=0, control=0, wait=0): "Just tests the lvds command" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.label("beginseq") my_api.ttl_value(0x2) #def __lvds_cmd(self, opcode, address, data, profile=0, control=0, wait=0): my_api._api__lvds_cmd(0, 0, 1, 0, 0, 0) my_api.wait(1, use_cycles=True) my_api._api__lvds_cmd(opcode, address, data, phase_profile, control, wait) my_api.wait(1, use_cycles=True) my_api._api__lvds_cmd(0, 0, 0) my_api.jump("beginseq") self.compile(my_sequencer)
def test_switch_off(self, freq1=45, amplitude=-15, address1=0, wait=0.0, clock=800): "Just sets a loop profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(address1, clock) my_api.init_dds(dds_device) my_api.label("test") my_api.init_frequency(dds_device, 0.0, 0) my_api.init_frequency(dds_device, freq1, 1) my_api.dac_value(amplitude, address1) my_api.ttl_value(0x1, 2) my_api.switch_frequency(dds_device, 0, 0) my_api.wait(20) my_api.switch_frequency(dds_device, 1, 0) my_api.wait(20 + wait) my_api.switch_frequency(dds_device, 0, 0) my_api.ttl_value(0x0, 2) my_api.wait(10000) my_api.jump("test") self.compile(my_sequencer)
def test_j_seq(self): """test the jump address """ my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.dac_value(-12, 1) my_api.label("test") my_api.dac_value(-12, 1) my_api.jump("test") my_sequencer.compile_sequence() my_sequencer.current_sequence.pop() my_sequencer.current_sequence.pop() my_sequencer.current_sequence.pop() my_sequencer.current_sequence.pop() my_sequencer.debug_sequence(force=False) j_insn = my_sequencer.current_sequence[15] label_insn = my_sequencer.current_sequence[7] target_list = [] for my_ins in my_sequencer.current_sequence: if my_ins.name == "j": target_list.append(my_ins.target_address) label_list = ['test'] for target in target_list: print target label = my_sequencer.current_sequence[target].label self.assertEquals(label, label_list.pop()) del (my_sequencer)
def test_compile_speed(self): """Test if 10000 DAC events may be compiled in under 1s """ time1 = time.time() try: psyco.full() except: print("Psyco not installed") my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) N0 = 10000 my_api.dac_value(-3, 1) my_api.jump("test") for i in range(N0): my_api.dac_value(-3, 1) my_api.label("test") my_sequencer.compile_sequence() if N0 < 100: my_sequencer.debug_sequence() # print my_my_sequencer.word_list time2 = time.time() print str(time2 - time1) if time2 - time1 > 1: self.fail("Failed speed test: " + str(time2 - time1))
def test_random(self): my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.label("go") my_api.ttl_value(random.randint(0, 0xffff)) my_api.wait(200000) my_api.jump("go") self.compile(my_sequencer, 0)
def test_api_ad9910(self): """Tests the api functions for the ad9910 """ dds_device = ad9910.AD9910(1, 1e3) my_sequencer=sequencer.sequencer() my_api=api.api(my_sequencer) my_api.init_dds(dds_device) my_sequencer.compile_sequence() my_sequencer.debug_sequence()
def test_freq_api_ad9910(self): "Tests the API set freq fcuntion for the ad9910" dds_device = ad9910.AD9910(1, 1e3) my_sequencer=sequencer.sequencer() my_api=api.api(my_sequencer) my_api.init_dds(dds_device) my_api.set_dds_freq(dds_device, 300, 2) my_sequencer.compile_sequence() my_sequencer.debug_sequence()
def test_save_file(self): my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_set_bit("1", 1) my_api.ttl_set_bit("6", 1) my_api.ttl_set_bit("18", 1) my_sequencer.compile_sequence() my_sequencer.debug_sequence() my_comm = comm.PTPComm(nonet=True)
def test_dac_sequence(self): """test if the dac instruction generates the right number of insns """ my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.dac_value(-12, 1) current_seq = my_sequencer.current_sequence my_sequencer.debug_sequence(force=False) self.assertEquals(len(current_seq), 13) del (my_sequencer)
def test_lvds_bus_single(self): "Test the LVDS bus. Use this with the corresponding signal tap file" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_value(0xffff, 0) my_api.ttl_value(0xffff, 1) my_api.ttl_value(0xaaaa, 0) my_api.ttl_value(0xaaaa, 1) my_api.wait(100) self.compile(my_sequencer)
def test_phase_switching(self, freq1=45, freq2=45, amplitude=-15, address1=0, address2=1, clock=800): "Just sets a loop profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(address1, clock) dds_device2 = ad9910.AD9910(address2, clock) my_api.init_dds(dds_device) my_api.init_dds(dds_device2) my_api.label("test") my_api.init_frequency(dds_device, 0.0, 0) my_api.init_frequency(dds_device2, 0.0, 0) my_api.init_frequency(dds_device, freq1, 1) my_api.init_frequency(dds_device2, freq1, 1) my_api.init_frequency(dds_device2, freq2, 2) my_api.dac_value(amplitude, address1) my_api.dac_value(amplitude, address2) my_api.ttl_value(0x1, 2) my_api.switch_frequency(dds_device, 0, 0) my_api.switch_frequency(dds_device2, 0, 0) my_api.wait(20) my_api.switch_frequency(dds_device, 1, 0) my_api.switch_frequency(dds_device2, 1, 0) for i in range(15): my_api.switch_frequency(dds_device2, 1, i * 0.05 * 3.1415) my_api.wait(20) my_api.switch_frequency(dds_device2, 1, 0) my_api.wait(100) for i in range(10): my_api.switch_frequency(dds_device2, 2, i * 0.05 * 3.1415) my_api.wait(20) my_api.switch_frequency(dds_device2, 1, 0) my_api.wait(100) my_api.switch_frequency(dds_device, 0, 0) my_api.switch_frequency(dds_device2, 0, 0) my_api.ttl_value(0x0, 2) my_api.wait(10000) my_api.jump("test") self.compile(my_sequencer)
def test_subroutine_error_handler(self): """Test if the subroutine error handler works correctly """ my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.begin_subroutine("test") my_api.dac_value(-12, 1) try: self.assertRaises(RuntimeError, my_api.begin_subroutine("test1")) except RuntimeError: None
def test_wtr(self): my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_set_bit("18", 1) my_api.ttl_set_bit("12", 1) my_api.wait_trigger(0xf) my_api.ttl_set_bit("1", 1) my_api.ttl_set_bit("6", 1) my_sequencer.compile_sequence() my_sequencer.debug_sequence() my_comm = comm.PTPComm(nonet=True) my_comm.savebin(my_sequencer.word_list)
def test_trigger(self): "Test the trigger functionality of box" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_value(0x0, 2) my_api.label("start_loop") my_api.jump_trigger("trig_label", 0x2) my_api.jump("start_loop") my_api.label("trig_label") my_api.ttl_value(0xffff, 2) self.compile(my_sequencer)
def test_kit(self): my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.label("go") for k in range(30): val = 1 << k if k >= 15: val = val >> 2 * (k - 15) my_api.ttl_value(val, 2) print val my_api.wait(200000) my_api.jump("go") self.compile(my_sequencer, 0)
def test_dds_simple(self, frequency=10, amplitude=0, my_device=0): "Just sets a single profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = ad9910.AD9910(my_device, 800) # my_api.init_dds(dds_device) # my_api.set_dds_freq(dds_device, frequency, 0) # my_api.set_dds_profile(dds_device, 0) my_api.ttl_value(0xf, 1) my_api.update_dds(0, dds_device) # my_api.dac_value(2**14-100, 0) # my_api.dac_value(amplitude, my_device) self.compile(my_sequencer)
def test_ttl_multiple(self): "test the ttl_set_multiple api function" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) ttl_dict = {} ttl_dict["3"] = 1 ttl_dict["20"] = 1 #FIXME ???? my_api.ttl_set_multiple(ttl_dict) my_sequencer.compile_sequence() my_sequencer.debug_sequence() self.assertEquals(my_sequencer.current_output, [0, 0, 8, 16]) insn = my_sequencer.current_sequence[1] self.assertEquals(insn.output_state, 16)
def test_ttl_set_bit(self): "test the set bit api function" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_set_bit("1", 1) my_api.ttl_set_bit("6", 1) my_api.ttl_set_bit("18", 1) my_sequencer.compile_sequence() my_sequencer.debug_sequence() self.assertEquals(my_sequencer.current_output, [0, 0, 66, 4]) insn = my_sequencer.current_sequence[1] self.assertEquals(insn.output_state, 0x42) insn = my_sequencer.current_sequence[2] self.assertEquals(insn.change_state, 0x3) self.assertEquals(insn.output_state, 0x4)
def test_pulse_shaping(self): """Test if the shaping works at all Right now this test checks only if the length of the sequence is larger than 99""" trans_obj = sequence_handler.transition("1", {0:0}, 2, amplitude=-3, \ slope_duration=10.0, slope_type="sine") my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) ihandler = instruction_handler.DACShapeEvent(0, trans_obj, 1, step_nr=10) ihandler.handle_instruction(my_api) assert len(my_sequencer.current_sequence) > 99, "Sequence to small" my_sequencer.debug_sequence()
def test_dac(self, frequency=10, amplitude=-15, clock=800): """Tests all the number of DDS boards that is given in the config file via putting out the frequency and amplitude given with the paramters""" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = [] k = 0 dds_device.append(ad9910.AD9910(k, clock)) my_api.init_dds(dds_device[k]) my_api.label("a") my_api.dac_value(amplitude, k) my_api.label("b") self.compile(my_sequencer, 1)
def test_ttl_multiple_invert(self): "test the ttl_set_multiple api function with inverted channels" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.ttl_sys.ttl_dict["3"].is_inverted = True my_api.ttl_sys.ttl_dict["5"].is_inverted = True ttl_dict = {} ttl_dict["5"] = 1 ttl_dict["3"] = 0 ttl_dict["20"] = 1 my_api.ttl_set_multiple(ttl_dict) my_sequencer.compile_sequence() my_sequencer.debug_sequence() self.assertEquals(my_sequencer.current_output, [0, 0, 8, 16]) insn = my_sequencer.current_sequence[0] self.assertEquals(insn.output_state, 0x10) insn = my_sequencer.current_sequence[1] self.assertEquals(insn.output_state, 0x8)
def test_wait_trigger(self, value=0xffff, value2=0x0000, show_debug=0, wait_trig=True): "Test ttl pulses of box" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) my_api.label("start_loop") my_api.ttl_value(value, 2) my_api.ttl_value(value, 3) my_api.wait(1000) if wait_trig: my_api.wait_trigger(0x0) my_api.wait_trigger(0x1) my_api.ttl_value(value2, 2) my_api.ttl_value(value2, 3) my_api.wait(1000) my_api.jump("start_loop") self.compile(my_sequencer, show_debug)
def test_all_dds_boards(self): "Just sets a single profile of the dds and activates it" my_sequencer = sequencer.sequencer() my_api = api.api(my_sequencer) dds_device = [] for k in range(6): dds_device.append(ad9910.AD9910(k, 800)) my_api.init_dds(dds_device[k]) my_api.label("beginseq") # saves frequencies in dds registers/profiles for k in range(6): my_api.dac_value(-15, k) my_api.init_frequency(dds_device[k], 0.0, 0) my_api.init_frequency(dds_device[k], 5.0, 1) my_api.init_frequency(dds_device[k], 10.0, 2) my_api.update_dds(dds_device[k]) my_api.wait(2) my_api.ttl_value(0x1) for k in range(6): my_api.set_dds_profile(dds_device[k], 1) my_api.update_dds(dds_device[k]) my_api.wait(2) for k in range(6): my_api.set_dds_profile(dds_device[k], 2) my_api.update_dds(dds_device[k]) my_api.wait(2) for k in range(6): my_api.set_dds_profile(dds_device[k], 0) my_api.ttl_value(0x0) my_api.jump("beginseq") self.compile(my_sequencer)
import time, logging, sys from sequencer2 import sequencer, instructions from sequencer2 import api from sequencer2 import comm from sequencer2 import ad9910 from sequencer2 import ptplog # Set to true for testing without actual hardware nonet = False #Init sequencer, API and DDS my_sequencer=sequencer.sequencer() my_api=api.api(my_sequencer) dds_device0 = ad9910.AD9910(0, 800) #args: device_addr, ref_freq, clk_divider=8 #============================================================================= # Program Start (After boilerplate initialization (including DDS init) #============================================================================= #Digital Ramp and DDS Board Init here my_api.init_dds(dds_device0) my_api.wait(1.0) my_api.dac_value(-20, 0) # -12 is the largest signal the DDS can output my_api.set_dds_freq(dds_device0, 99, 0) my_api.wait(1.0) my_api.update_dds(dds_device0) my_api.wait(1.0)