Hi, I am using variant CU3. I have two Zotinos in my crate, and I wish to use it (26 channels spread across both Zotinos) to give a coordinated waveform across all 26 channels. These waveforms are used for axial confinement of our multiplexed ion trap.
I discretized the waveform (a sinusoid with well defined initial phase [arbitrary] and frequency [25 Hz]) into 10 points per period. I have a table of these values self.Vs
to write and the delays self.delays
between each write. I have an execute
function that sets DAC values:
def execute(self,handle):
""" Run DAC sequences on ARTIQ """
for i in range(len(self.chs)):
chs0,Vs0 = self.chs[i][0], self.Vs[i][0]
chs1,Vs1 = self.chs[i][1], self.Vs[i][1]
if bool(Vs0):
handle.zotino0.set_dac(Vs0,channels=chs0)
if bool(Vs1):
handle.zotino1.set_dac(Vs1,channels=chs1)
try:
delay(self.delays[i])
# at_mu(now_mu()+handle.core.seconds_to_mu(self.delays[i]))
except IndexError:
pass
Looking at the waveform generated from the DACs on a scope, I see that not all values are written (the first few points of the waveform are fine, but it would stop updated after some number of points). The point at which it stops updating varies from shot to shot. I am guessing that this is due to the system not writing fast enough, but the manual seems to suggest a 1.5 µs dead time between writes, which is much faster than time between writes (4 ms).
I also tried using at_mu
instead of delay
.
Is there a much more efficient way to write to the Zotinos? Or am I doing this wrong? Please help, thank you!