aboutsummaryrefslogtreecommitdiff
path: root/qolab
diff options
context:
space:
mode:
Diffstat (limited to 'qolab')
-rw-r--r--qolab/hardware/rf_generator/__init__.py20
-rw-r--r--qolab/hardware/rf_generator/agilent_e8257d.py57
2 files changed, 77 insertions, 0 deletions
diff --git a/qolab/hardware/rf_generator/__init__.py b/qolab/hardware/rf_generator/__init__.py
new file mode 100644
index 0000000..a82c1a0
--- /dev/null
+++ b/qolab/hardware/rf_generator/__init__.py
@@ -0,0 +1,20 @@
+from qolab.hardware.scpi import SCPIinstr
+
+class RFGenerator:
+ # Minimal set of methods to be implemented.
+ pass
+
+class RFGeneratorSCPI(SCPIinstr, RFGenerator):
+ """
+ Do not instantiate directly, use
+ rm = pyvisa.ResourceManager()
+ ScopeSCPI(rm.open_resource('TCPIP::192.168.0.2::INSTR'))
+ """
+ pass
+ def __init__(self, resource):
+ SCPIinstr.__init__(self, resource)
+ RFGenerator.__init__(self)
+
+from .agilent_e8257d import AgilentE8257D
+
+
diff --git a/qolab/hardware/rf_generator/agilent_e8257d.py b/qolab/hardware/rf_generator/agilent_e8257d.py
new file mode 100644
index 0000000..eef3c7a
--- /dev/null
+++ b/qolab/hardware/rf_generator/agilent_e8257d.py
@@ -0,0 +1,57 @@
+from qolab.hardware.rf_generator import RFGeneratorSCPI
+from qolab.data.trace import Trace
+import re
+import numpy as np
+
+class AgilentE8257D(RFGeneratorSCPI):
+ """ Agilent E8257D RF generator """
+ def __init__(self, resource):
+ super().__init__(resource)
+ self.resource.read_termination='\n'
+
+ """ Note: Fixed frequency and Center frequency (of sweep) are different in this model """
+
+ def getFreq(self):
+ qstr = f':FREQuency:Fixed?'
+ rstr = self.query(qstr)
+ return( float(rstr) )
+
+ def setFreq(self, freq):
+ cstr = f':FREQuency:FIXED {freq}Hz'
+ self.write(cstr)
+
+ def getSweepCentralFreq(self):
+ qstr = f':FREQuency:CENTer?'
+ rstr = self.query(qstr)
+ return( float(rstr) )
+
+ def setSweepCentralFreq(self, cfreq):
+ cstr = f':FREQuency:CENTer {cfreq}Hz'
+ self.write(cstr)
+
+ def getSweepSpan(self):
+ qstr = f':FREQuency:SPAN?'
+ rstr = self.query(qstr)
+ return( float(rstr) )
+
+ def setSweepSpan(self, span):
+ cstr = f':FREQuency:SPAN {span}Hz'
+ self.write(cstr)
+
+ def setSweep(self, cfreq=None, span=None):
+ if cfreq is not None:
+ self.setSweepCentralFreq(cfreq)
+ if cfreq is not None:
+ self.setSweepSpan(span)
+
+if __name__ == '__main__':
+ import pyvisa
+ print("testing")
+ rm = pyvisa.ResourceManager()
+ print(rm.list_resources())
+ instr=rm.open_resource('TCPIP::192.168.0.114::INSTR')
+ rfgen = AgilentE8257D(instr)
+ print(f'Fixed frequency: {rfgen.getFreq()}')
+ print(f'Sweep Central frequency: {rfgen.getSweepCentralFreq()}')
+ print(f'Sweep Span: {rfgen.getSweepSpan()}')
+