occheung
5c962c64d4
Obviously, the import statements cannot be put right before the methods in the same indentation. It was there because there wasn't a better way to put these code. Now, it is replaced with an worded instruction that imports are needed.
50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
from artiq.experiment import *
|
|
from scipy import signal
|
|
import numpy
|
|
|
|
|
|
class Voltage(EnvExperiment):
|
|
def build(self):
|
|
self.setattr_device("core")
|
|
self.zotino = self.get_device("zotino0")
|
|
|
|
def prepare(self):
|
|
self.channels = [0, 1, 2, 3]
|
|
self.voltages = [1.0, 2.0, 3.0, 4.0]
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.zotino.init()
|
|
|
|
delay(1*ms)
|
|
self.zotino.set_dac(self.voltages, self.channels)
|
|
|
|
|
|
class TriangularWave(EnvExperiment):
|
|
def build(self):
|
|
self.setattr_device("core")
|
|
self.zotino = self.get_device("zotino0")
|
|
|
|
def prepare(self):
|
|
self.period = 0.1*s
|
|
self.sample = 128
|
|
t = numpy.linspace(0, 1, self.sample)
|
|
self.voltages = 8*signal.sawtooth(2*numpy.pi*t, 0.5)
|
|
self.interval = self.period/self.sample
|
|
|
|
@kernel
|
|
def run(self):
|
|
self.core.reset()
|
|
self.core.break_realtime()
|
|
self.zotino.init()
|
|
|
|
delay(1*ms)
|
|
|
|
counter = 0
|
|
while True:
|
|
self.zotino.set_dac([self.voltages[counter]], [0])
|
|
counter = (counter + 1) % self.sample
|
|
delay(self.interval)
|