From 5fcfd99a2fd49dcacc7ddbe1084f4d53f7fb1f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Gunyh=C3=B3?= Date: Wed, 14 Aug 2024 16:12:47 +0300 Subject: [PATCH] Add parameters related to reference oscillator to ZNB driver --- .../instrument_drivers/rohde_schwarz/ZNB.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/qcodes/instrument_drivers/rohde_schwarz/ZNB.py b/src/qcodes/instrument_drivers/rohde_schwarz/ZNB.py index a699702b4359..5e2d1df1579f 100644 --- a/src/qcodes/instrument_drivers/rohde_schwarz/ZNB.py +++ b/src/qcodes/instrument_drivers/rohde_schwarz/ZNB.py @@ -1065,6 +1065,54 @@ def __init__( val_mapping={True: "1\n", False: "0\n"}, ) """Parameter rf_power""" + + self.ref_osc_source: Parameter = self.add_parameter( + name="ref_osc_source", + label="Reference oscillator source", + get_cmd="ROSC:SOUR?", + set_cmd="ROSC:SOUR {}", + # strip newline + get_parser=lambda s: s.rstrip(), + vals=vals.Enum("INT", "EXT", "int", "ext", "internal", "external"), + ) + """Reference oscillator source""" + + self.ref_osc_external_freq: Parameter = self.add_parameter( + name="ref_osc_external_freq", + label="Reference oscillator frequency", + docstring="Frequency of the external reference clock signal at REF IN", + get_cmd="ROSC:EXT:FREQ?", + set_cmd="ROSC:EXT:FREQ {}Hz", + # The response contains the unit (Hz), so we have to strip it + get_parser=lambda f: float(f.strip("Hz")), + unit="Hz", + # Data sheet: 1 MHz to 20 MHz, in steps of 1 MHz + vals=vals.Enum(*np.linspace(1e6, 20e6, 20)), + ) + """Frequency of the external reference clock signal at REF IN""" + + self.ref_osc_PLL_locked: Parameter = self.add_parameter( + name="ref_osc_PLL_locked", + label="Reference frequency PLL lock", + get_cmd=self._get_PLL_locked, + docstring="If an external reference signal or an internal high " + "precision clock (option B4) is used, the local oscillator is " + "phase locked to a reference signal. This parameter will be " + "False if the phase locked loop (PLL) fails. " + "\n" + "For external reference: check frequency and level of the " + "supplied reference signal.", + ) + """ + If an external reference signal or an internal high precision clock + (option B4) is used, the local oscillator is phase locked to a + reference signal. This parameter will be False if the phase locked loop + (PLL) fails. + + For external reference: check frequency and level of the supplied + reference signal. + """ + self.add_function("reset", call_cmd="*RST") self.add_function("tooltip_on", call_cmd="SYST:ERR:DISP ON") self.add_function("tooltip_off", call_cmd="SYST:ERR:DISP OFF") @@ -1105,6 +1153,13 @@ def __init__( self.rf_off() self.connect_message() + def _get_PLL_locked(self) -> bool: + # query the bits of the "questionable hardware integrity" register + hw_integrity_bits = int(self.ask("STATus:QUEStionable:INTegrity:HARDware?")) + # if bit number 1 is set, the PLL locking has failed + pll_lock_failed = bool(hw_integrity_bits & 0b10) + return not pll_lock_failed + def display_grid(self, rows: int, cols: int) -> None: """ Display a grid of channels rows by columns.