diff --git a/2118-2128.tex b/2118-2128.tex index 0e09029..f27fabe 100644 --- a/2118-2128.tex +++ b/2118-2128.tex @@ -36,7 +36,7 @@ Each channel supports 50\textOmega~terminations, individually controllable using DIP switches. Outputs tolerate short circuits indefinitely. Both cards are capable of a minimum pulse width of 3ns. - Note that isolated TTL cards are less suited to low-noise applications as the isolator itself injects noise between primary and secondary sides. Cable shields may also radiate EMI from the isolated grounds. For low-noise applications, use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL. + Isolated TTL cards are not well suited to low-noise or low-jitter applications due to interference from isolation components. For low-noise applications, use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL. % Switch to next column \vfill\break @@ -359,6 +359,8 @@ \end{threeparttable} \end{table} + Low-jitter applications should note carefully the jitter introduced by the signal isolator. Noise is also introduced between the primary and secondary domains by the DC/DC converter. Where noise or jtter are crucial, it is instead recommended to use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL. + Minimum pulse width was measured by generating pulses of progressively longer duration through a DDS generator and using them as input for a BNC-TTL card. The input BNC-TTL card was connected to another BNC-TTL card as output. The output signal is measured and shown in Figure \ref{fig:pulsewidth}. \begin{figure}[ht] diff --git a/examples/unsorted b/examples/unsorted new file mode 100644 index 0000000..40baaa5 --- /dev/null +++ b/examples/unsorted @@ -0,0 +1,99 @@ +from artiq.experiment import * + +class SineWave(EnvExperiment): + def build(self): + self.setattr_device("core") + + self.leds = dict() + self.ttl_outs = dict() + + self.dacs_config = dict() + self.dac_volt = dict() + self.dac_dds = dict() + self.dac_trigger = dict() + + ddb = self.get_device_db() + for name, desc in ddb.items(): + if isinstance(desc, dict) and desc["type"] == "local": + module, cls = desc["module"], desc["class"] + if (module, cls) == ("artiq.coredevice.ttl", "TTLOut"): + dev = self.get_device(name) + if "led" in name: + self.leds[name] = dev + else: + self.ttl_outs[name] = dev + + if (module, cls) == ("artiq.coredevice.shuttler", "Config"): + dev = self.get_device(name) + self.dacs_config[name] = dev + + if (module, cls) == ("artiq.coredevice.shuttler", "Volt"): + dev = self.get_device(name) + self.dac_volt[name] = dev + + if (module, cls) == ("artiq.coredevice.shuttler", "Dds"): + dev = self.get_device(name) + self.dac_dds[name] = dev + + if (module, cls) == ("artiq.coredevice.shuttler", "Trigger"): + dev = self.get_device(name) + self.dac_trigger[name] = dev + + + self.leds = sorted(self.leds.items(), key=lambda x: x[1].channel) + self.ttl_outs = sorted(self.ttl_outs.items(), key=lambda x: x[1].channel) + + self.dacs_config = sorted(self.dacs_config.items(), key=lambda x: x[1].channel) + self.dac_volt = sorted(self.dac_volt.items(), key=lambda x: x[1].channel) + self.dac_dds = sorted(self.dac_dds.items(), key=lambda x: x[1].channel) + self.dac_trigger = sorted(self.dac_trigger.items(), key=lambda x: x[1].channel) + + + @kernel + def set_dac_config(self, config): + config.set_config(0xFFFF) + + @kernel + def set_test_dac_volt(self, volt): + a0 = 0 + a1 = 0 + a2 = 0 + a3 = 0 + volt.set_waveform(a0, a1, a2, a3) + + + @kernel + def set_test_dac_dds(self, dds): + b0 = 0x0FFF + b1 = 0 + b2 = 0 + b3 = 0 + c0 = 0 + c1 = 0x147AE148 # Frequency = 10MHz + c2 = 0 + dds.set_waveform(b0, b1, b2, b3, c0, c1, c2) + + @kernel + def set_dac_trigger(self, trigger): + trigger.trigger(0xFFFF) + + @kernel + def run(self): + self.core.reset() + + self.core.break_realtime() + t = now_mu() - self.core.seconds_to_mu(0.2) + while self.core.get_rtio_counter_mu() < t: + pass + + for dac_config_name, dac_config_dev in self.dacs_config: + self.set_dac_config(dac_config_dev) + + for dac_volt_name, dac_volt_dev in self.dac_volt: + self.set_test_dac_volt(dac_volt_dev) + + for dac_dds_name, dac_dds_dev in self.dac_dds: + self.set_test_dac_dds(dac_dds_dev) + + for dac_trigger_name, dac_trigger_dev in self.dac_trigger: + self.set_dac_trigger(dac_trigger_dev)