lriesebos
Hey Leon, I have implemented everything in a single kernel however I have not been able to overcome the RTIO underflow errors. I would really appreciate it if you could have a quick look over it and point out issue that may cause these errors.
The first section involves setting the attentuation and frequency of the AD9912 channels.
The second section relates to the ad9910 channels either setting single tone frequencies or performing frequency modulation using the RAM
The third section relates to the TTL output channels.
The fourth section involves setting the single tone analog outputs using the zotino
The fifth section which begins at self.list_of_amplitude_modulation_selector will allow for concurrent amplitude ramps of both the AD9910 and zotino channels.
The final section is the sampler collecting values from the 8 sampling channels.
`
@kernel
def run(self):
self.core.reset()
delay(1 * s)
for p in range(self.number_of_scan_points):
for h in range(self.number_of_repetitions):
for i in self.list_of_active_stages:
t0 = now_mu()
self.DDS_ad9912_channel0.set_att(self.list_ad9912_channel0_atten[i])
self.DDS_ad9912_channel1.set_att(self.list_ad9912_channel1_atten[i])
self.DDS_ad9912_channel2.set_att(self.list_ad9912_channel2_atten[i])
self.DDS_ad9912_channel3.set_att(self.list_ad9912_channel3_atten[i])
self.DDS_ad9912_channel0.set(self.list_ad9912_channel0_freq[i] * MHz)
self.DDS_ad9912_channel1.set(self.list_ad9912_channel1_freq[i] * MHz)
self.DDS_ad9912_channel2.set(self.list_ad9912_channel2_freq[i] * MHz)
self.DDS_ad9912_channel3.set(self.list_ad9912_channel3_freq[i] * MHz)
if self.list_parameter_ch3[i] == 0:
self.DDS_ad9910_channel3.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel3.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel3.set_att(self.list_ad9910_channel3_atten[i])
self.DDS_ad9910_channel3.set(self.list_ad9910_channel3_freq[i] * MHz, amplitude = self.list_ad9910_channel3_amp[i])
if self.list_parameter_ch3[i] == 1:
'''Urukul0 - Channel 3'''
'''initialize DDS channel'''
self.DDS_ad9910_channel3.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel3.set_amplitude(1.)
self.DDS_ad9910_channel3.set_att(0.*dB)
self.DDS_ad9910_channel3.set(100.*MHz)
'''prepare RAM profile:'''
self.DDS_ad9910_channel3.set_cfr1(ram_enable=0) #disable RAM for writing data
self.DDS_ad9910_channel3.cpld.io_update.pulse(100*ns) #I/O pulse to enact RAM change
self.DDS_ad9910_channel3.set_profile_ram(start=0, end=self.N-1, step=self.list_t_step_3[i], profile=0, mode=ad9910.RAM_MODE_CONT_RAMPUP)
self.DDS_ad9910_channel3.cpld.set_profile(0)
self.DDS_ad9910_channel3.cpld.io_update.pulse(100*ns)
'''write data to RAM:'''
self.DDS_ad9910_channel3.write_ram(self.list_f_ram_3[i])
'''enable RAM mode (enacted by IO pulse) and fix other parameters:'''
self.DDS_ad9910_channel3.set_cfr1(internal_profile=0, ram_enable = 1, ram_destination=ad9910.RAM_DEST_FTW, manual_osk_external=0, osk_enable=1, select_auto_osk=0)
self.DDS_ad9910_channel3.sw.on()
self.DDS_ad9910_channel3.cpld.io_update.pulse_mu(8)
if self.list_parameter_ch2[i] == 0:
self.DDS_ad9910_channel2.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel2.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel2.set_att(self.list_ad9910_channel2_atten[i])
self.DDS_ad9910_channel2.set(self.list_ad9910_channel2_freq[i] * MHz, amplitude = self.list_ad9910_channel2_amp[i])
if self.list_parameter_ch2[i] == 1:
'''Urukul0 - Channel 2'''
'''initialize DDS channel'''
self.DDS_ad9910_channel2.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel2.set_amplitude(1.)
self.DDS_ad9910_channel2.set_att(0.*dB)
self.DDS_ad9910_channel2.set(100.*MHz)
'''prepare RAM profile:'''
self.DDS_ad9910_channel2.set_cfr1(ram_enable=0) #disable RAM for writing data
self.DDS_ad9910_channel2.cpld.io_update.pulse(100*ns) #I/O pulse to enact RAM change
self.DDS_ad9910_channel2.set_profile_ram(start=0, end=self.N-1, step=self.list_t_step_2[i], profile=0, mode=ad9910.RAM_MODE_CONT_RAMPUP)
self.DDS_ad9910_channel2.cpld.set_profile(0)
self.DDS_ad9910_channel2.cpld.io_update.pulse(100*ns)
'''write data to RAM:'''
self.DDS_ad9910_channel2.write_ram(self.list_f_ram_2[i])
'''enable RAM mode (enacted by IO pulse) and fix other parameters:'''
self.DDS_ad9910_channel2.set_cfr1(internal_profile=0, ram_enable = 1, ram_destination=ad9910.RAM_DEST_FTW, manual_osk_external=0, osk_enable=1, select_auto_osk=0)
self.DDS_ad9910_channel2.sw.on()
self.DDS_ad9910_channel2.cpld.io_update.pulse_mu(8)
if self.list_parameter_ch1[i] == 0:
self.DDS_ad9910_channel1.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel1.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel1.set_att(self.list_ad9910_channel1_atten[i])
self.DDS_ad9910_channel1.set(self.list_ad9910_channel1_freq[i] * MHz, amplitude = self.list_ad9910_channel1_amp[i])
if self.list_parameter_ch1[i] == 1:
'''Urukul0 - Channel 1'''
'''initialize DDS channel'''
self.DDS_ad9910_channel1.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel1.set_amplitude(1.)
self.DDS_ad9910_channel1.set_att(0.*dB)
self.DDS_ad9910_channel1.set(100.*MHz)
'''prepare RAM profile:'''
self.DDS_ad9910_channel1.set_cfr1(ram_enable=0) #disable RAM for writing data
self.DDS_ad9910_channel1.cpld.io_update.pulse(100*ns) #I/O pulse to enact RAM change
self.DDS_ad9910_channel1.set_profile_ram(start=0, end=self.N-1, step=self.list_t_step_1[i], profile=0, mode=ad9910.RAM_MODE_CONT_RAMPUP)
self.DDS_ad9910_channel1.cpld.set_profile(0)
self.DDS_ad9910_channel1.cpld.io_update.pulse(100*ns)
'''write data to RAM:'''
self.DDS_ad9910_channel1.write_ram(self.list_f_ram_1[i])
'''enable RAM mode (enacted by IO pulse) and fix other parameters:'''
self.DDS_ad9910_channel1.set_cfr1(internal_profile=0, ram_enable = 1, ram_destination=ad9910.RAM_DEST_FTW, manual_osk_external=0, osk_enable=1, select_auto_osk=0)
self.DDS_ad9910_channel1.sw.on()
self.DDS_ad9910_channel1.cpld.io_update.pulse_mu(8)
if self.list_parameter_ch0[i] == 0:
self.DDS_ad9910_channel0.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel0.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel0.set_att(self.list_ad9910_channel0_atten[i])
self.DDS_ad9910_channel0.set(self.list_ad9910_channel0_freq[i] * MHz, amplitude = self.list_ad9910_channel0_amp[i])
if self.list_parameter_ch0[i] == 1:
'''Urukul0 - Channel 1'''
'''initialize DDS channel'''
self.DDS_ad9910_channel0.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel0.set_amplitude(1.)
self.DDS_ad9910_channel0.set_att(0.*dB)
self.DDS_ad9910_channel0.set(100.*MHz)
'''prepare RAM profile:'''
self.DDS_ad9910_channel0.set_cfr1(ram_enable=0) #disable RAM for writing data
self.DDS_ad9910_channel0.cpld.io_update.pulse(100*ns) #I/O pulse to enact RAM change
self.DDS_ad9910_channel0.set_profile_ram(start=0, end=self.N-1, step=self.list_t_step_0[i], profile=0, mode=ad9910.RAM_MODE_CONT_RAMPUP)
self.DDS_ad9910_channel0.cpld.set_profile(0)
self.DDS_ad9910_channel0.cpld.io_update.pulse(100*ns)
'''write data to RAM:'''
self.DDS_ad9910_channel0.write_ram(self.list_f_ram_0[i])
'''enable RAM mode (enacted by IO pulse) and fix other parameters:'''
self.DDS_ad9910_channel0.set_cfr1(internal_profile=0, ram_enable = 1, ram_destination=ad9910.RAM_DEST_FTW, manual_osk_external=0, osk_enable=1, select_auto_osk=0)
self.DDS_ad9910_channel0.sw.on()
self.DDS_ad9910_channel0.cpld.io_update.pulse_mu(8)
if self.list_ttl4[i] == "on":
self.ttl_channel4.on()
else:
self.ttl_channel4.off()
delay (100 * ns)
if self.list_ttl5[i] == "on":
self.ttl_channel5.on()
else:
self.ttl_channel5.off()
delay (100 * ns)
if self.list_ttl6[i] == "on":
self.ttl_channel6.on()
else:
self.ttl_channel6.off()
delay (100 * ns)
if self.list_ttl7[i] == "on":
self.ttl_channel7.on()
else:
self.ttl_channel7.off()
delay (100 * ns)
if self.list_ttl8[i] == "on":
self.ttl_channel8.on()
else:
self.ttl_channel8.off()
delay (100 * ns)
if self.list_ttl9[i] == "on":
self.ttl_channel9.on()
else:
self.ttl_channel9.off()
delay (100 * ns)
if self.list_ttl10[i] == "on":
self.ttl_channel10.on()
else:
self.ttl_channel10.off()
delay (100 * ns)
if self.list_ttl11[i] == "on":
self.ttl_channel11.on()
else:
self.ttl_channel11.off()
delay (100 * ns)
if self.list_ttl12[i] == "on":
self.ttl_channel12.on()
else:
self.ttl_channel12.off()
delay (100 * ns)
if self.list_ttl13[i] == "on":
self.ttl_channel13.on()
else:
self.ttl_channel13.off()
delay (100 * ns)
if self.list_ttl14[i] == "on":
self.ttl_channel14.on()
else:
self.ttl_channel14.off()
delay (100 * ns)
if self.list_ttl15[i] == "on":
self.ttl_channel15.on()
else:
self.ttl_channel15.off()
if self.list_of_zotino_ramp_selector[i] == 1:
for u in range(len(self.list_of_updated_voltages)):
self.zotino0.write_dac(self.list_of_dac_channels[i][u], self.list_of_updated_voltages[i][u])
self.zotino0.load()
# delay(1 * us)
else:
for u in range(len(self.list_voltages)):
self.zotino0.write_dac(self.list_of_dac_channels[i][u], self.list_voltages[i][u])
self.zotino0.load()
# delay(1 * us)
if self.list_of_amplitude_modulation_selector[i] == 1:
if self.list_parameter_ch0[i] == 2:
self.DDS_ad9910_channel0.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel0.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel0.set_att(self.list_ad9910_channel0_atten[i])
delay(1 * us)
self.DDS_ad9910_channel0.set(self.list_ad9910_channel0_freq[i] * MHz, amplitude = 1.0)
if self.list_parameter_ch1[i] == 2:
self.DDS_ad9910_channel1.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel1.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel1.set_att(self.list_ad9910_channel1_atten[i])
delay(1 * us)
self.DDS_ad9910_channel1.set(self.list_ad9910_channel1_freq[i] * MHz, amplitude = 1.0)
if self.list_parameter_ch2[i] == 2:
self.DDS_ad9910_channel2.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel2.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel2.set_att(self.list_ad9910_channel2_atten[i])
delay(1 * us)
self.DDS_ad9910_channel2.set(self.list_ad9910_channel2_freq[i] * MHz, amplitude = 1.0)
if self.list_parameter_ch3[i] == 2:
self.DDS_ad9910_channel3.set_cfr1(ram_enable=0)
self.DDS_ad9910_channel3.cpld.io_update.pulse(100*ns)
self.DDS_ad9910_channel3.set_att(self.list_ad9910_channel3_atten[i])
delay(1 * us)
self.DDS_ad9910_channel3.set(self.list_ad9910_channel3_freq[i] * MHz, amplitude = 1.0)
kk4 = 0
for entry15 in self.final_time_list[i]:
if self.final_channel_list[i][kk4] == 3.01:
self.DDS_ad9910_channel3.set(self.list_ad9910_channel3_freq[i] * MHz, amplitude = self.final_voltage_list[i][kk4])
if self.final_channel_list[i][kk4] == 2.01:
self.DDS_ad9910_channel2.set(self.list_ad9910_channel2_freq[i] * MHz, amplitude = self.final_voltage_list[i][kk4])
if self.final_channel_list[i][kk4] == 1.01:
self.DDS_ad9910_channel1.set(self.list_ad9910_channel1_freq[i] * MHz, amplitude = self.final_voltage_list[i][kk4])
if self.final_channel_list[i][kk4] == 0.01:
self.DDS_ad9910_channel0.set(self.list_ad9910_channel0_freq[i] * MHz, amplitude = self.final_voltage_list[i][kk4])
if self.final_channel_list[i][kk4] == 0.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 1.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 2.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 3.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 4.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 5.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 6.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 7.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 8.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 9.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 10.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
if self.final_channel_list[i][kk4] == 11.0:
self.zotino0.write_dac(np.int32(self.final_channel_list[i][kk4]), self.final_voltage_list[i][kk4])
self.zotino0.load()
# print(now_mu()-t00, "execuetion time")
delay(self.final_time_list[i][kk4] * ns)
kk4 = kk4 + 1
self.sampler0.sample(self.list_of_sampler_values[i])
delay((self.list_t_duration[i] * ns) - (now_mu()-t0)*ns)`