diff --git a/artiq/dashboard/moninj.py b/artiq/dashboard/moninj.py index e83497289..fb7eed390 100644 --- a/artiq/dashboard/moninj.py +++ b/artiq/dashboard/moninj.py @@ -333,22 +333,24 @@ class _DDSWidget(QtWidgets.QFrame): class _DACWidget(QtWidgets.QFrame): - def __init__(self, dm, spi_channel, channel, title): + def __init__(self, dm, spi_channel, channel, title, vref, offset_dacs): QtWidgets.QFrame.__init__(self) self.spi_channel = spi_channel self.channel = channel - self.cur_value = 0 + self.cur_value = 0x8000; self.title = title + self.vref = vref + self.offset_dacs = offset_dacs self.setFrameShape(QtWidgets.QFrame.Box) self.setFrameShadow(QtWidgets.QFrame.Raised) grid = QtWidgets.QGridLayout() - grid.setContentsMargins(0, 0, 0, 0) - grid.setHorizontalSpacing(0) - grid.setVerticalSpacing(0) + grid.setContentsMargins(5, 5, 5, 5) + grid.setHorizontalSpacing(5) + grid.setVerticalSpacing(5) self.setLayout(grid) - label = QtWidgets.QLabel("{} ch{}".format(title, channel)) + label = QtWidgets.QLabel("{}[{}]".format(title, channel)) label.setAlignment(QtCore.Qt.AlignCenter) grid.addWidget(label, 1, 1) @@ -362,9 +364,13 @@ class _DACWidget(QtWidgets.QFrame): self.refresh_display() + def mu_to_voltage(self, code): + voltage = ((code - self.offset_dacs * 0x4) / (1 << 16)) * (4. * self.vref) + return voltage + def refresh_display(self): - self.value.setText("{:.3f} %" - .format(self.cur_value * 100 / 2**16)) + self.value.setText("{:+.3f} V" + .format(self.mu_to_voltage(self.cur_value))) def sort_key(self): return (2, self.spi_channel, self.channel) @@ -373,7 +379,7 @@ class _DACWidget(QtWidgets.QFrame): return (self.title, self.channel) def to_model_path(self): - return "dac/{} ch{}".format(self.title, self.channel) + return "dac/{}[{}]".format(self.title, self.channel) _WidgetDesc = namedtuple("_WidgetDesc", "uid comment cls arguments") @@ -426,9 +432,11 @@ def setup_from_ddb(ddb): while isinstance(spi_device, str): spi_device = ddb[spi_device] spi_channel = spi_device["arguments"]["channel"] + vref = v["arguments"].get("vref", 5.) + offset_dacs = v["arguments"].get("offset_dacs", 8192) for channel in range(32): widget = _WidgetDesc((k, channel), comment, _DACWidget, - (spi_channel, channel, k)) + (spi_channel, channel, k, vref, offset_dacs)) description.add(widget) elif v["type"] == "controller" and k == "core_moninj": mi_addr = v["host"]