Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import numpy as np
from artiq.experiment import *
from pyLIAF.artiq.controllers import UrukulCh
from pyLIAF.RaspberryPi.PD_reader import PDreader as rpi
from time import sleep
class PMTCalibration(EnvExperiment):
"""Plotting photodiode signal in time"""
def build(self):
self.setattr_device("ccb")
self.setattr_device("scheduler")
self.setattr_device("core")
self.laserUV = UrukulCh(self, ch=2, freq=110.0, amp=0.3, name="UV") #corresponde a 0.7 Vpp
self.laserIR = UrukulCh(self, ch=1, freq=208.0, amp=0.35, name="IR") #corresponde a 0.8 Vpp
self.setattr_argument(f"IR_freq",
NumberValue(210*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Laser params")
self.setattr_argument(f"IR_amp",
NumberValue(0.3, min=0.01, max=0.35),
"Laser params")
self.setattr_argument(f"UV_freq",
NumberValue(110*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
"Laser params")
self.setattr_argument(f"UV_amp",
NumberValue(0.3, min=0.01, max=0.3),
"Laser params")
@rpc
def create_datasets(self):
self.set_dataset("Current_PD", np.array([0.0]), broadcast=True, archive=False)
@rpc
def create_applets(self):
self.ccb.issue("create_applet", "PD_signal",
"${python} -m pyLIAF.artiq.applets.realtime "
"40 "
"Current_PD")
@kernel
def init_kernel(self):
self.core.reset()
#self.laserIR.initialize_channel()
#self.laserUV.channel.cpld.init()
#self.laserUV.channel.init()
#self.laserIR.channel.cpld.init()
#self.core.wait_until_mu(now_mu())
#self.laserIR.channel.init()
#self.laserUV.initialize_channel()
delay(1000*us)
self.laserIR.set_channel()
self.laserUV.set_channel()
self.core.wait_until_mu(now_mu())
delay(1*ms)
self.laserIR.on()
self.laserUV.on()
self.laserUV.set_frequency(self.UV_freq, self.UV_amp)
self.laserIR.set_frequency(self.IR_freq, self.IR_amp)
def run(self):
self.create_datasets()
self.create_applets()
self.init_kernel()
try:
while True:
self.measure_PD()
while self.scheduler.check_pause():
print("PAUSED BLINKING")
self.core.comm.close()
self.scheduler.pause()
# TODO: reset freqs/amps
print("RESUMED BLINKING")
except TerminationRequested:
print("STOPPED BLINKING")
return cuentas
@rpc(flags={"async"})
def measure_PD(self, dump=False):
value = rpi.ReadPD_average_pi(0, 1)
#print(type(value))
if not dump:
self.mutate_dataset("Current_PD", 0, np.abs(value))
sleep(0.1)