Test Equipment
Hardware, Usage, & Automation Notes
| Author: | Mitch Richling |
| Generated: | 2026-03-24 13:22:04 |
| Updated: | 2026-03-24 12:40:22 |
Copyright 2026 Mitch Richling. All rights reserved.
This document originally started as a place to keep operational notes about my test equipment. The sort of stuff I found myself looking up while at the
bench like DMM resister test current or the IP address I used for my counter. Later I added web links to product information & downloads.
After discovering Zotero, I added documentation links to my local laptop's Zotero repository. When I developed mrSCPI I started adding little bits of
executable code to the notes for various equipment configurations and measurements.
I decided to publish these notes as a response to requests for mrSCPI examples – the mrSCPI blocks below being ready-made examples! I expect most of the
remaining content here isn't very useful to anyone other than myself.
1. Table of Contents
Table of Contents
- 1. Table of Contents
- 2. SCPI Connected Instruments
- 2.1. Rohde & Schwarz HMC8043 Power Supply
- 2.2. Agilent 33210A Arbitrary Waveform Generator
- 2.3. Keysight 34401A Bench Digital Multimeter
- 2.4. HP 53131A Counter
- 2.5. Keithley DMM6500 Bench Digital Multimeter
- 2.6. Rigol DHO4204 High Resolution Digital Oscilloscope
- 2.7. Siglent SDS2504X Plus Super Phosphor Oscilloscope
- 2.8. Tektronix TDS2024 Digital Storage Oscilloscope
- 2.9. Tektronix TDS3052B Digital Phosphor Oscilloscope
- 2.10. Rigol DG2052 Function/Arbitrary Waveform Generator
- 3. Virtual Instruments
- 4. ARM Programmers
- 5. Disconnected Instruments
- 5.1. Tektronix AN/USM-488 or 2235 Analog Oscilloscope
- 5.2. Tektronix 2205 Analog Oscilloscope
- 5.3. Fluke 54 II Data Logging Thermometer with Dual Input
- 5.4. B&K Precision 1621A Power Supply
- 5.5. HIOKI 3030-10 HiTESTER
- 5.6. Sanwa EM7000 FET multitester
- 5.7. Gossen-Metrawatt METRAmax2 Analog Multimeter
- 5.8. Keysight U1233A Handheld DMM
- 5.9. Thurlby Thandar Instruments WA301 Wideband Amplifier
- 5.10. Fluke 107 Pocket Digital Multimeter
- 6. Sending SCPI commands over IP network from command line
- 7. Bench Computer
- 8. Document Meta Data
- 9. Detailed TOC
2. SCPI Connected Instruments
2.1. Rohde & Schwarz HMC8043 Power Supply
2.1.1. Links
2.1.2. Documentation (These links only work on my personal laptop)
- HMC8043 Power Supply: User Manual version 5
- HMC8043 Power Supply: Programmers Manual version 2
- HMC8043 Power Supply: User Manual version 4
- HMC8043 Power Supply: WAGO MULTI CONNECTION SYSTEM MINI HD
- HMC8043 Power Supply: WAGO 713-1108 With Lock And Strain Relief Plate
- HMC8043 Power Supply: WAGO 713-1108 With Lock
- HMC8043 Power Supply: WAGO 713-1108 Without Lock
2.1.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
ps-rns.home.mitchr.me - Device Web Server: http://ps-rns.home.mitchr.me (DIRECT) or http://127.0.0.1:9013 (SSH)
2.1.4. Notes
2.1.4.1. Back Ports
- Bottom (Right To Left)
- 2x8 Rectangular Connector – Wago 713-1108 (non-latching), 713-1108/037-000 (latching), 713-1108/037-9037/033-000 (latching + strain relief plate)
- 10/100 Base-T Ethernet
- USB Type B 2.0 Device
- Center: IEC C14/C13: AC Power Connector
The pinout of the rectangular connector, as viewed from the back:
| CH3+ | CH3 SENSE+ | CH2+ | CH2 SENSE+ | CH1+ | CH1 SENSE+ | U+ interface / Trigger | I+ interface |
| CH3- | CH3 SENSE- | CH2- | CH2 SENSE- | CH1- | CH1 SENSE- | U- interface | I- interface |
2.1.4.2. Remote control notes
This instrument has a very robust SCPI stack. It has never crashed on me from poor network communication or invalid SCPI commands.
Results are always terminated by a single newline character. If a SCPI command line with multiple, semicolon separated commands has a result, then it is returned as a single line with the individual results separated by semicolons.
2.1.5. Remote Control
2.1.5.1. *IDN?
:url @hmc8043 :cmd *IDN?
>>*IDN?>> Rohde&Schwarz,HMC8043,042973185,HW42000000,SW01.400
2.1.5.2. Default Setup
:url @hmc8043 :result_type nil :echo false :delay_after_complete 50 :cmd *RST
2.1.5.3. Set voltage & current for each channel
:url @hmc8043 :result_type nil :delay_after_complete 200 :cmd :OUTPut:MASTer:STATe OFF :cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :OUTPut:CHANnel:STATe ON :cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :OUTPut:CHANnel:STATe ON :cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${dvol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${dcur}; :OUTPut:CHANnel:STATe ON :result_type :string :delay_after_complete 10 :cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude? :cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude? :cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?
>>:OUTPut:MASTer:STATe OFF>> >>:INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 15.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.15; :OUTPut:CHANnel:STATe ON>> >>:INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 15.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.15; :OUTPut:CHANnel:STATe ON>> >>:INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude 5.0; :SOURce:CURRent:LEVel:IMMediate:AMPLitude 0.07; :OUTPut:CHANnel:STATe ON>> >>:INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>> 1.5000E+01;1.5000E-01 >>:INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>> 1.5000E+01;1.5000E-01 >>:INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude?; :SOURce:CURRent:LEVel:IMMediate:AMPLitude?>> 5.000E+00;7.0000E-02
2.1.5.4. Turn on master output
Check the values above to make sure the settings are correct, and then activate the supply output like this:
:url @hmc8043 :result_type nil :delay_after_complete 50 :cmd :OUTPut:MASTer:STATe ON :result_type string :delay_after_complete 10 :cmd :OUTPut:MASTer:STATe?
>>":OUTPut:MASTer:STATe ON\n">> >>":OUTPut:MASTer:STATe?\n">> 1
2.1.5.5. Check voltage and current
We can check the current voltage and current like so:
:url @hmc8043 :delay_after_complete 10 :read_timeout_next_byte 20 :result_type nil :cmd :INSTrument:NSELect 1 :result_split :ssv # Note: R&S devices return semicolon seporated values from compound SCPI statements :result_type :float :cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC? :result_type nil # Note: We don't have to turn off split because a nil type means we don't even try and read a result :cmd :INSTrument:NSELect 2 :result_type :float :cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC? :result_type nil :cmd :INSTrument:NSELect 3 :result_type :float :cmd :MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?
>>:INSTrument:NSELect 1>> >>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>> [0.0, 0.0] >>:INSTrument:NSELect 2>> >>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>> [0.0, 0.0] >>:INSTrument:NSELect 3>> >>:MEASure:SCALar:VOLTage:DC?; :MEASure:SCALar:CURRent:DC?>> [0.0, 0.0]
2.1.5.6. Sequenceing
Here we sequence the thrid channel to come on 90ms after the first two.
:url @hmc8043 :echo false :result_type nil :delay_after_complete 200 :cmd :OUTPut:MASTer:STATe OFF # Set 9V & 08mA on Ch1 & Ch2. Set 5V @ 60mA on Ch1. :cmd :INSTrument:NSELect 1; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :cmd :INSTrument:NSELect 2; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${avol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${acur}; :cmd :INSTrument:NSELect 3; :SOURce:VOLTage:LEVel:IMMediate:AMPLitude ${dvol}; :SOURce:CURRent:LEVel:IMMediate:AMPLitude ${dcur}; # Set Ch1 & Ch2 to start first, and then Ch3 90ms later. :cmd :SEQuence:STATe OFF :cmd :INSTrument:NSELect 1; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del1}; :SEQuence:TRIGgered OFF :cmd :INSTrument:NSELect 2; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del1}; :SEQuence:TRIGgered OFF :cmd :INSTrument:NSELect 3; :SEQuence:CHANnel:STATe ON; :SEQuence:DELay ${del2}; :SEQuence:TRIGgered OFF :cmd :SEQuence:STATe ON # Activate all the channels :cmd :INSTrument:NSELect 1; :OUTPut:CHANnel:STATe ON :cmd :INSTrument:NSELect 2; :OUTPut:CHANnel:STATe ON :cmd :INSTrument:NSELect 3; :OUTPut:CHANnel:STATe ON # At this point, the master enable needs to be pressed.
2.2. Agilent 33210A Arbitrary Waveform Generator
2.2.1. Links
2.2.2. Documentation (These links only work on my personal laptop)
- 33210A AWG: Quick Start
- 33210A AWG: User Guide 1ed
- 33210A AWG: Service Guide 2ed
- 33210A AWG: Option 001 External Timebase Reference Install
- 33210A AWG: Generating Narrow Pulses with a Function Generator
- 33210A AWG: Maximum Output Current
- 33210A AWG: Transferring Arbitrary Waveform Data to the 33200A Family of Function/Arbitrary Waveform Gene(...)
- 33210A AWG: 10 Hints for Getting More from Your Function Generator
- 33210A AWG: Waveform Capture, Modification and Playback Using a Function Generator
- 33210A AWG: Datasheet
- 33210A AWG: User Guide 3ed
- 33210A AWG: Service Guide 1ed
2.2.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
awg-agilent.home.mitchr.me - Device Web Server: https://awg-agilent.home.mitchr.me (DIRECT) or https://127.0.0.1:9002 (SSH)
2.2.4. Notes
2.2.4.1. Performance & Operational Facts
- Primary Output
- 50 Ω typical
- Isolation 42 Vp maximum to earth
- Short-circuit protected. Overload disables main output.
- Typical Current
- 10 Vpp sine wave at 1 kHz into a 0.5 Ω load: 135 mArms
- 1 Vpp sine wave at 1 kHz into a 0.5 Ω load: 13 mArms
- Current is a linear function of V between 1 Vpp and 10 Vpp
- 10 MHz Reference Clock (input/output)
- Input
- Lock range: 10 MHz ± 500 Hz;
- Level: 100 mVpp to 5 Vpp
- Impedance: 1 kΩ
- Output
- Frequency: 10 MHz
- Level: 632 mVpp
- Impedance: 50 Ω AC coupled
- Input
- Arb Spec
- Frequency: 1 mHz to 3 MHz
- Points: 2 pts to 8 kPts
- Resolution: 14 bits
- Sample rate: 50 MSa/s
- Minimum rise/fall time: 70 ns (vs 20 ns for square & pulse waveforms)
2.2.4.2. Back Ports
- Right Side Top (4 ports arranged in a square)
- Top Right: BNC External 10 MHz Reference Input (Option 001)
- Top Left: BNC External 10 MHz Reference Output (Option 001)
- Bottom Right: BNC External Modulation Input Terminal
- Bottom Left: BNC External Trigger Input, Burst Gate Input, or rigger Output
- Bottom Center Right To Left
- USB 2.0 Device
- 10/100 Base-T Ethernet
- GPIB Interface
- Left Side Top: IEC C14/C13: AC Power Connector
2.2.5. Remote Control
2.2.5.1. *IDN?
:url @33210a :cmd *IDN?
>>"*IDN?\n">> Agilent Technologies,33210A,MY48001014,1.04-1.02-22-2
2.2.5.2. Standard Waveforms
APPLy arguments are frequency, amplitude, and offset:
:url @33210a :echo false :result_type nil :cmd :APPLy:SINusoid 5 KHZ, 3.0 VPP, -1.0V
2.2.5.3. ARB
We use the command DATA for floating point values in the range [-1.0, 1.0].
:url @33210a :echo false :result_type nil # Turn off the output :cmd :OUTPut OFF # upload 4 floating point values for the waveform to VOLATILE memory :cmd :DATA VOLATILE,-1.0,1.0,0.0 # Select the waveform in VOLATILE memory :cmd :FUNCtion:USER VOLATILE # Set waveform properties :cmd :FREQuency 5 kHz :cmd :VOLTage 3.0 VPP :cmd :VOLTage:OFFS 0 # Turn on the output :cmd :OUTPut ON
We use the command DATA:DAC for integer values in the range [-8191, 8191].
:url @33210a :result_type nil # Turn off the output :cmd :OUTPut OFF # upload 4 (up to 8k supported) integer values for the waveform :cmd :DATA:DAC VOLATILE,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,8191 # Move the VOLATILE waveform into non-VOLATILE storage. The system can store 4 non-VOLATILE waveforms. Names for waveforms may be up to 12 characters. :cmd :DATA:COPY AN_ARB_NAME :result_type :string # List non-VOLATILE waveforms stored. :cmd :DATA:NVOLatile:CATalog? :result_type nil # Select the waveform we just saved :cmd :FUNCtion:USER AN_ARB_NAME # Set waveform properties :cmd :FREQuency 5 kHz :cmd :VOLTage 3.0 VPP :cmd :VOLTage:OFFS 0 # Turn on the output :cmd :OUTPut ON
>>":OUTPut OFF\n">> >>":DATA:DAC VOLATILE,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,-8191,8191\n">> >>":DATA:COPY AN_ARB_NAME\n">> >>":DATA:NVOLatile:CATalog?\n">> "AN_ARB_NAME" >>":FUNCtion:USER AN_ARB_NAME\n">> >>":FREQuency 5 kHz\n">> >>":VOLTage 3.0 VPP\n">> >>":VOLTage:OFFS 0\n">> >>":OUTPut ON\n">>
2.3. Keysight 34401A Bench Digital Multimeter
2.3.1. Links
2.3.2. Documentation (These links only work on my personal laptop)
2.3.3. Local LAN Settings & Addresses (These links only work on my home network)
- Serial over IP access: soip://serial.home.mitchr.me:10001 (DIRECT) or soip://127.0.0.1:9004 (SSH)
2.3.4. Serial Settings (Lantronix console server)
| Parameter | Setting |
|---|---|
| Cable | crossover (null modem) |
| Line | 1 |
| TCP/IP Port | 10001 |
| Serial | RS232 |
| Baud | 9600 |
| Parity | Even |
| Data Bits | 7 |
| Stop Bits | 2 |
| Flow Control | SOFT |
| Xon | ^Q |
| Xof | ^S |
2.3.5. Notes
2.3.5.1. Performance & Operational Facts
- Voltage Measurement Input Impedance
- With
INPut:IMPedance:AUTOset toOFF(startup default), 10MΩ for all ranges - With
INPut:IMPedance:AUTOset toON, 10 Gohm for 100 mVdc, 1 Vdc, and 10 Vdc ranges and 10MΩ for the rest.
- With
- Front Panel Digits Buttons (Resolution) for DC measurements
| Digits | Description | Integration Time |
|---|---|---|
| 4 | Slow 4 Digit | 1 PLC |
| 5 | Slow 5 Digit | 10 PLC |
| 6 | Fast 6 Digit | 10 PLC |
- Digits/Resolution for AC measurements
- Fixed at 6.5 digits
- Fixed at 5.5 digits for continuity and diode tests
- AC Current Shunt Resistance: 0.1Ωfor 1A& 3 A. 5Ωfor 10mA and 100mA.
- AC Bandwidth: 300kHz
- Resistance Test Current
| Range | Current |
|---|---|
| 100Ω | 1mA |
| 1kΩ | 1mA |
| 10kΩ | 100μA |
| 100kΩ | 10μA |
| 1MΩ | 5μA |
| 10MΩ | 500nA |
| 100MΩ | 500nA |
- Continuity & Diode Test Current: 1mA
- VM Complete Output: 5V TTL normally high. 2 μs low pulse after the completion of each measurement.
- External Trigger Terminal: 5V TTL normally high. Trigger measurement via a low pulse with a width greater than 1 μs. This low pulse may be created by shorting the input to ground.
2.3.5.2. Back Ports
- Right Side (6 ports arranged 3x2 grid mirroring the front banana inputs)
- Top Right: Banana HI Sense (4W Ω)
- Top Left: Banana HI Input (V Ω Diode)
- Middle Right: Banana Sense LO
- Middle Left: Banana Input LO
- Bottom Right: Current Fuse
- Bottom Left: Banana 3A input
- Bottom Center (Right To Left)
- BNC VM Complete Output
- BNC External Trigger
- Bottom Left (Right To Left)
- GPIB Interface
- DB9 Serial Interface
- Center: Chassis Ground Screw
- Top (Left of center): IEC C14/C13: AC Power Connector
2.3.5.3. Remote control notes
Results read from this instrument use MS-DOS line ending conventions – i.e. they end with a carriage return and newline (\r\n). For this reason I generally
set :result_chomp to true in mrSCPI scripts.
For reliable results over the serial interface, the instrument must be set to "remote" mode before any other commands are issued. When finished, the
instrument should be released to "local" mode. Simple, single SCPI command sessions may sometimes be preformed without this mode switching – for example,
sending a simple *IDN? command generally works. See: .
I have tested the Prologix Ethernet adapter with this meter's GPIB interface and it works perfectly. That said, I normally use the serial interface.
2.3.5.4. Undocumented
2.3.5.4.1. PEEK & POKE
| SCPI Command | Function |
|---|---|
DIAG:POKE 25,0,<1/0> |
Enable/Disable 10mA AC range |
DIAG:POKE 27,0,<1/0> |
Enable/Disable 10kHz AC filter |
DIAG:POKE 28,0,<1191/0> |
Enable/Disable standard deviation and peak-to-peak |
DIAG:POKE 30,0,<1191/0> |
Enable/Disable internal and external temperature sensors |
DIAG:POKE 31,0,<1191/0> |
Enable/Disable scale calculations |
DIAG:POKE 32,0,<1191/0> |
Enable/Disable custom conversion apertures |
DIAG:POKE 33,0,<1191/0> |
Enable/Disable state storage and power-on auto-recall |
DIAG:POKE 29,0,1 |
Display original measured values in temperature measurement mode |
DIAG:PEEK? -10,1,0 |
Check feature: Standard deviation and peak-to-peak |
DIAG:PEEK? -10,2,0 |
Check feature: Internal temperature and external temperature sensors |
DIAG:PEEK? -10,3,0 |
Check feature: Scale calculation |
DIAG:PEEK? -10,4,0 |
Check feature: Custom conversion aperture |
DIAG:PEEK? -10,5,0 |
Check feature: state store |
DIAG:PEEK? 0,<ADDR>,0 |
Read RAM byte |
DIAG:PEEK? 1,<ADDR>,0 |
Read RAM word |
DIAG:PEEK? 2,<ADDR>,0 |
Read RAM double word |
DIAG:PEEK? 3,<ADDR>,0 |
Read RAM floating-point |
DIAG:PEEK? -1,<ADDR>,0 |
reads the EEPROM low zone (set) word and returns it in decimal |
DIAG:PEEK? -2,<ADDR>,0 |
reads the EEPROM high zone (calibration) word and returns it in a specific format |
DIAG:PEEK? -3,<BLOCK>,0 |
ROM ref values for specified block |
DIAG:PEEK? -4,0,0 |
reads power line frequency 1=50/400Hz |
DIAG:PEEK? -5,0,0 |
Whether there is a waiting interrupt |
DIAG:PEEK? -6,0,0 |
Read the stack dump from the previous interrupt |
DIAG:PEEK? -7,0,0 |
reads ADC raw data |
DIAG:PEEK? -8,0,0 |
DANGEROUS: [unsecured] enable: ZERO DCV |
DIAG:PEEK? -9,0,0 |
Number of rows in the block table |
DIAG:PEEK? -11,0,0 |
lookup NVRAM data by block using the index to stored address |
DIAG:PEEK? -12,0,0 |
lookup block table in ROM data using index to stored address |
DIAG:POKE 34,0,0 |
DANGEROUS: reset CPU |
DIAG:POKE 23,0,0 |
DANGEROUS: resets calibration count |
DIAG:POKE 0,0,0 |
DANGEROUS: increases the calibration count |
DIAG:POKE -2,<ADDR>,<DATA> |
DANGEROUS: Write RAM bytes |
DIAG:POKE -3,<ADDR>,<DATA> |
DANGEROUS: Write RAM words |
DIAG:POKE -4,<ADDR>,<DATA> |
DANGEROUS: Write RAM floating-point |
DIAG:PEEK? -2,<RANGE>,0 |
Obtain 34401 calibration data |
The range numbers for "DIAG:PEEK? -2" are:
| Func | RANGE values |
|---|---|
| DCV | 75-79 |
| DCI | 82-85 |
| OHM | 87-92 |
| OHM4 | 94-99 |
| ACV | 104-108 |
The returned value for "DIAG:PEEK? -2" is: "<coefficient>,<left shift number>,<0>,<front panel offset>,<rear panel offset>".
NVRAM storage is split into numbered blocks. The low part is for safe changes. The high part is for calibration data and can only be written when unsecured.
Example blocks:
| BLOCK | Description |
|---|---|
| 70 | Count gain between T2 ticks and residual on 80C196 AD |
| 71 | Non-linear correction coeff1 (quadratic) |
| 73 | Non-linear correction coeff2 (cubic) |
| 76 | Transform params for DC 1V range (multiplier, shift, NA, offset, ?) must be scaled for line/NPLC |
2.3.5.4.2. Features
- Standard deviation and peak-to-peak (
DIAG:POKE 28) - New SCPI Commands:
CALCulate:AVERage:SDEViation?CALCulate:AVERage:PTPeak?
- New Menu:
math menu -> min-max: sdev, pp
- New SCPI Commands:
- Internal and external temperature sensors (
DIAG:POKE 30) - New SCPI Commands:
CONF:TEMPerature?CONF:TEMPerature {TCouple|RTD|FRTD|THERmistor|DEFault},{TC type, or (F)RTD alpha, or Thermistor type},{<range>|MIN|MAX|DEF},{<resolution>|MIN|MAX|DEF}- Temperature measurement mode/transducer/subtype.
No query possible.
Transducer value ofDEFaultmeans "last used"
Range is ignored CONF?- With temperature enabled, this also returns transducer type and subtype in addition to range/resolution (range fixed as "1")
UNIT:TEMPerature?UNIT:TEMPerature {Cel|Far|K}SENSe:TEMPerature:TRANsducer:TYPE?SENSe:TEMPerature:TRANsducer:TYPE {TCouple|RTD|FRTD|THERmistor|DEFault}- FRTD is 4W RTD
RTD is 2W
DEFault = TC – WARNING: this behaviour is diffrent from CONF:TEMP SENSe:TEMPerature:NPLCycles?SENSe:TEMPerature:NPLCycles {0.02|0.2|1|10|100|MINimum|MAXimum}SENSe:TEMPerature:TRANsducer:TCouple:TYPE?SENSe:TEMPerature:TRANsducer:TCouple:TYPE {B|E|J|K|N|R|S|T}SENSe:TEMPerature:TRANsducer:TCouple:RJUNction?SENSe:TEMPerature:TRANsducer:TCouple:RJUNction {MIN|MAX}[SENSe]:TEMPerature:TRANsducer:TCouple:RJUNction?[SENSe]:TEMPerature:TRANsducer:TCouple:RJUNction {<temperature>|MIN|MAX}- Reference junction temperature for TC, -1 to 55C range
SENSe:TEMPerature:TRANsducer:RTD:TYPE?SENSe:TEMPerature:TRANsducer:RTD:TYPE {85|91}- RTD alpha value, 0.00385 or 0.00391
SENSe:TEMPerature:TRANsducer:RTD:RESistance:REFerence?SENSe:TEMPerature:TRANsducer:RTD:RESistance:REFerence {R0 resistance>|MIN|MAX}- RTD reference (25C) resistance, 4.9 - 2100 ohm range
SENSe:TEMPerature:TRANsducer:THERMistor:TYPE?SENSe:TEMPerature:TRANsducer:THERMistor:TYPE {2200,5000,10000}- Thermistor type (in ohms)
The first two are B=3975. The last is B=3695 DIAGnostic:TEMPerature?- Read internal on-chip temperature sensor.
This causes relay(s) to activate regardless of selected function.
- New Menu:
temp menu
- New SCPI Commands:
- Scale calculations (
DIAG:POKE 31) - New SCPI Commands:
CALCulate:FUNCtion SCALe?CALCulate:FUNCtion SCALe- Only one math operation is available at a time. For example min/max can't be used at the same time as SCALE.
CALCulate:SCALe:GAIN?CALCulate:SCALe:GAINCALCulate:SCALe:OFFSet?CALCulate:SCALe:OFFSet
- New Menu:
menu -> scale
- New SCPI Commands:
- Custom conversion apertures (
DIAG:POKE 32) - New SCPI Commands:
<Measure>:APERture?<Measure>:APERture {<Time>|MIN|MAX}- Without the custom aperture option enabled: Only accepts values which correspont to the standard NPLC settings.
When the custom aperture option is enabled: Accepts values anywhere in the range of 0.4ms to 2s.
The NPLC option will not accept "non-standard" values - when set to a non-standard value the next highest standard value will be used instead.
- New Menu:
resolution menu -> custom aperture
- New SCPI Commands:
- State storage and power-on auto-recall (
DIAG:POKE 33) - New SCPI Commands:
*RCL 0*SAV 0MEMory:STATe:RECall:AUTO?MEMory:STATe:RECall:AUTO {OFF|0|ON|1}
- New Menu:
system menu -> store state, recall state
- New SCPI Commands:
2.3.6. Remote Control
2.3.6.1. *IDN?
:url @34401a :result_chomp true :cmd *IDN?
>>*IDN?>> HEWLETT-PACKARD,34401A,0,11-5-2
2.3.6.2. Default Setup
:url @34401a :result_type nil :cmd :SYSTem:REMote :cmd *RST :cmd *CLS :cmd :SYSTem:BEEPer:STATe ON :cmd :CALCulate:DBM:REFerence 600 :cmd :SYSTem:LOCal
2.3.6.3. Query For Errors
:url @34401a :result_chomp true :cmd :SYSTem:ERRor?
>>:SYSTem:ERRor?>> +0,"No error"
Here is an example showing an error
>>:SYSTem:ERRor?>> -113,"Undefined header"
Note: In mrSCPI we can use :result_split :csv to split this result into components.
2.3.6.4. Serial Remote Control Best Practice
For RS-232 remote control, one must run:
:url bench@34401a :result_type nil :cmd :SYSTem:REMote :cmd :DISPlay:TEXT "Remote" # It's good to display a message when in remote mode so it's easy to notice:
Return to local control by pressing the "shift/local" button on the front panel or running the following SCPI command:
:url bench@34401a :result_type nil :cmd :SYSTem:LOCal
2.3.6.5. Measure DC Voltage
Normal accuracy: Read a voltage with high resolution and 10 NPLC.
For more accuracy, bump :SENSe:VOLTage:DC:NPLCycles up to 100, and the :delay_before_first_read up to 3500.
:url @34401a :result_type nil :cmd :SYSTem:REMote # Only required for rs-232, but no harm over GPIB :cmd *CLS :cmd :SENSe:FUNCtion "VOLTage:DC" :cmd :SENSe:VOLTage:DC:RANGe:AUTO ON :cmd :INPut:IMPedance:AUTO ON :cmd :SENSe:VOLTage:DC:RESolution MAXimum :cmd :SENSe:ZERO:AUTO ON :cmd :SENSe:VOLTage:DC:NPLCycles 10 :result_chomp true :result_type :string :delay_before_first_read 600 # It takes about 600ms for the meter to respond :read_timeout_first_byte 500 :read_timeout_next_byte 20 :cmd :READ? :result_type nil :cmd :SYSTem:LOCal # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">> >>"*CLS\n">> >>":SENSe:FUNCtion \"VOLTage:DC\"\n">> >>":SENSe:VOLTage:DC:RANGe:AUTO ON\n">> >>":INPut:IMPedance:AUTO ON\n">> >>":SENSe:VOLTage:DC:RESolution MAXimum\n">> >>":SENSe:ZERO:AUTO ON\n">> >>":SENSe:VOLTage:DC:NPLCycles 10\n">> >>":READ?\n">> -2.87309150E-02 >>":SYSTem:LOCal\n">>
2.3.6.6. Measure AC Voltage
For AC voltage, we should be carefull about setting the bandwidth.
:url @34401a :result_type nil :cmd :SYSTem:REMote # Only required for rs-232, but no harm over GPIB :cmd *CLS :cmd :SENSe:FUNCtion "VOLTage:AC" :cmd :SENSe:VOLTage:AC:RANGe:AUTO ON :cmd :SENSe:DETector:BANDwidth 200 # Typical values are 3, 20, & 200 :cmd :SENSe:VOLTage:AC:RESolution MAXimum :result_chomp true :result_type :string :delay_before_first_read 1000 # 1000 for BANDwidth of 200, 1300 for BW of 10, 700 for BW of 3 TODO????? :read_timeout_first_byte 500 :read_timeout_next_byte 20 :cmd :READ? :result_type nil :cmd :SYSTem:LOCal # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">> >>"*CLS\n">> >>":SENSe:FUNCtion \"VOLTage:AC\"\n">> >>":SENSe:VOLTage:AC:RANGe:AUTO ON\n">> >>":SENSe:DETector:BANDwidth 200\n">> >>":SENSe:VOLTage:AC:RESolution MAXimum\n">> >>":READ?\n">> +1.15295240E-02 >>":SYSTem:LOCal\n">>
2.3.6.7. Measure Frequency
:url @34401a :result_type nil :cmd :SYSTem:REMote # Only required for rs-232, but no harm over GPIB :cmd *CLS :cmd :SENSe:FUNCtion "FREQuency" :cmd :SENSe:FREQuency:APERture 1 # Use 1, 0.1, or 0.01 :cmd :SENSe:FREQuency:VOLTage:RANGe:AUTO ON :result_chomp true :result_type :string :delay_before_first_read 2000 # 2000 for APERture of 1, 1000 for 0.1 & 0.01 :read_timeout_first_byte 500 :read_timeout_next_byte 20 :cmd :READ? :result_type nil :cmd :SYSTem:LOCal # Only required for rs-232, but no harm over GPIB
>>":SYSTem:REMote\n">> >>"*CLS\n">> >>":SENSe:FUNCtion \"FREQuency\"\n">> >>":SENSe:FREQuency:APERture 1\n">> >>":SENSe:FREQuency:VOLTage:RANGe:AUTO ON\n">> >>":READ?\n">> +2.15933960E+02 >>":SYSTem:LOCal\n">>
2.3.6.8. Measure Period
:url @34401a :result_type nil :cmd :SYSTem:REMote # Only required for rs-232, but no harm over GPIB :cmd *CLS :cmd :SENSe:FUNCtion "PERiod" :cmd :SENSe:PERiod:APERture 1 # Use 1, 0.1, or 0.01 :cmd :SENSe:PERiod:VOLTage:RANGe:AUTO ON :result_chomp true :result_type :string :delay_before_first_read 2000 # 2000 for APERture of 1, 1000 for 0.1 & 0.001 :read_timeout_first_byte 1000 :read_timeout_next_byte 20 :cmd :READ? :result_type nil :cmd :SYSTem:LOCal # Only required for rs-232, but no harm over GPIB
>>:SYSTem:REMote>> >>*CLS>> >>:SENSe:FUNCtion "PERiod">> >>:SENSe:PERiod:APERture 1>> >>:SENSe:PERiod:VOLTage:RANGe:AUTO ON>> >>:READ?>> +4.99999720E-03 >>SYSTem:LOCal>>
2.4. HP 53131A Counter
2.4.1. Links
2.4.2. Documentation (These links only work on my personal laptop)
2.4.3. Local LAN Settings & Addresses (These links only work on my home network)
- GPIB adapter host name & port: gpib-rover.home.mitchr.me :1234
2.4.4. Notes
2.4.4.1. Performance & Operational Facts
- Channel 1-3 Input Characteristics
- 50 ohm OR 1MΩ + 30pF
- Damage level 5 Vrms
- External Time Base Input
- Voltage Range: 200 mVrms to 10 Vrms
- Damage Level: 10Vrms
- Impedance: 1kΩ + 23pF
- Time base output
- Voltage > 1 Vpp into 50Ω (centered around 0V)
2.4.4.2. Back Ports
2.4.4.3. Quirks
When it's plugged in, it consume power and runs the fan. Presumably this is to keep a fancy OCXO warmed up and ready for when the unit is needed. At least the fan is pretty quiet. Still, I don't have a fancy oscillator option installed in my unit making the fan wear and tear a waste. My solution is an IEC C14 to IEC C13 power cable with an inline switch.
2.4.4.4. Remote control notes
The RS-232 interface is "talk-only" – i.e. for logging, printing, or limit-detect output. It can not be used for SCPI control.
A Prologix Ethernet to GPIB adapter works well with this device. I have one of these adapters semi-permanently attached.
2.4.5. Remote Control
2.4.5.1. *IDN?
:url @53131a :cmd *IDN?
>>*IDN?>> HEWLETT-PACKARD,53131A,0,3703
2.4.5.2. Default Setup & Measure Frequency
:url @53131a :result_type nil :cmd *RST # Reset the counter :cmd *CLS # Clear event registers and error queue :cmd *SRE 0 # Clear service request enable register :cmd *ESE 0 # Clear event status enable register :cmd :STATus:PRESet # Preset enable registers and transition filters for operation and questionable status structures :cmd :SENSe:FUNCion 'FREQuency 1' # Measure frequency on channel 1 :cmd :SENSe:EVENt1:LEVel:ABSolute 0.0 # Set trigger level :cmd :INITiate:IMMediate # Trigger a measurement :result_type :float :cmd :FETCh:SCALar:VOLTage:FREQuency? # Pull the frequency :cmd :FETCh:SCALar:VOLTage:PERiod? # Pull the period
>>*RST>> >>*CLS>> >>*SRE 0>> >>*ESE 0>> >>:STATus:PRESet>> >>:SENSe:FUNCion 'FREQuency 1'>> >>:SENSe:EVENt1:LEVel:ABSolute 0.0>> >>:INITiate:IMMediate>> >>:FETCh:SCALar:VOLTage:FREQuency?>> 1000.000419 >>:FETCh:SCALar:VOLTage:PERiod?>> 0.000999999581
2.5. Keithley DMM6500 Bench Digital Multimeter
2.5.1. Links
2.5.2. Documentation (These links only work on my personal laptop)
- DMM6500 DMM: Quick Start
- DMM6500 DMM: User Manual
- DMM6500 DMM: Reference Manual
- DMM6500 DMM: Version 1.7.3 Firmware Release Notes
- DMM6500 DMM: Calibration Manual
- DMM6500 DMM: 2001-TCSCAN: User Manual
- DMM6500 DMM: 2000-SCAN: User Manual
- DMM6500 DMM: How to Write Scripts for Test Script Processing
- DMM6500 DMM: Scan Card Support
- DMM6500 DMM: Model 2000 Application Emulation and Migration Guid
- DMM6500 DMM: Keysight 34401A Application Emulation and Migration Guide
- DMM6500 DMM: Data Acquisition Primer: An Introduction to MultiChannel Measurement Systems
- DMM6500 DMM: How to Transition Code to TSP from SCPI
- DMM6500 DMM: Specs
- DMM6500 DMM: Datasheet
2.5.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
dmm-keithley.home.mitchr.me - Device Web Server: http://dmm-keithley.home.mitchr.me (DIRECT) or http://127.0.0.1:9011 (SSH)
2.5.4. Notes
2.5.4.1. Performance & Operational Facts
- Voltage Measurement Input Impedance
- 100 mV to 10V Ranges: Selectable: (>10GΩ or 10MΩ ±1%) in parallel with <400pF.
- 100V to 1000V Ranges: 10MΩ ±1% in parallel with <400pF
- Current Shunt Resistance:
| Range | Resistance |
|---|---|
| 10μA | 10kΩ |
| 100μA | 1kΩ |
| 1mA | 100Ω |
| 10mA | 10Ω |
| 100mA | 1Ω |
| 1A | 100mΩ |
| 3A | 100mΩ |
| 10A | 5mΩ |
- AC Bandwidth: 300kHz
- Resistance Test Current
| Range | Current |
|---|---|
| 1Ω | 10mA |
| 10Ω | 10mA |
| 100Ω | 1mA |
| 1kΩ | 1mA |
| 10kΩ | 100μA |
| 100kΩ | 10μA |
| 1MΩ | 10μA |
| 10MΩ | 700nA |
| 100MΩ | 700nA |
- Continuity Test Current: 1mA @ 9.2V
- Diode Test (bias) Current (selectable):
| Bias Current | Test Voltage |
|---|---|
| 10μA | 12V |
| 100μA | 10V |
| 1mA | 7V |
| 10mA | 7V |
- Capacitance Test Current:
| Range | Charge Current |
|---|---|
| 1nF | 1μA |
| 10nF | 10μA |
| 100nF | 100μA |
| 1µF | 100μA |
| 10µF | 1mA |
| 100µF | 1mA |
2.5.4.2. Back Ports
- Right Side Bottom (6 ports arranged 2x3 grid mirroring the front banana inputs rotated clockwise 90 degrees)
- Top Right: Banana 10A
- Top Middle: Banana LO Sense
- Top Left: Banana HI Sense (4W Ω)
- Bottom Right: Fuse
- Bottom Middle: Banana LO Input
- Bottom Left: Banana HI Input
- Top Left (Right To Left)
- 10/100 Base-T Ethernet
- BNC External Trigger IN
- BNC External Trigger OUT
- USB Type B 2.0 Device
- Bottom Left (Right To Left)
- GPIB Interface
- DB9 Serial Interface
- Center: Chassis Ground Screw
- Bottom Left: IEC C14/C13: AC Power Connector
2.5.5. Remote Control
2.5.5.1. *IDN?
:url @dmm6500 :cmd *idn?
>>*idn?>> KEITHLEY INSTRUMENTS,MODEL DMM6500,04467350,1.7.12b
2.5.5.2. High accruacy DCV Measurement (10V Range)
For this one, we set NPLC 1o 10 with 100 averages – that takes about 17 seconds.
:url @dmm6500 :result_type nil :cmd *RST :cmd :SENS:FUNCtion "VOLT:DC" :cmd :SENSe1:VOLTage:DC:RANGe:UPPer 10 :cmd :SENSe1:VOLTage:DC:INPutimpedance AUTO :cmd :SENSe1:VOLTage:DC:NPLCycles 10 :cmd :SENSe1:VOLTage:DC:AZERo:STATe ON :cmd :SENSe1:VOLTage:DC:AVERage:TCONtrol REP :cmd :SENSe1:VOLTage:DC:AVERage:COUNt 100 :cmd :SENSe1:VOLTage:DC:AVERage:STATe ON :result_type :string # It takes 17 seconds to get measurement :delay_before_first_read 20000 :read_timeout_first_byte 1000 :cmd :READ?
>>*RST>> >>:SENS:FUNCtion "VOLT:DC">> >>:SENSe1:VOLTage:DC:RANGe:UPPer 10>> >>:SENSe1:VOLTage:DC:INPutimpedance AUTO>> >>:SENSe1:VOLTage:DC:NPLCycles 10>> >>:SENSe1:VOLTage:DC:AZERo:STATe ON>> >>:SENSe1:VOLTage:DC:AVERage:TCONtrol REP>> >>:SENSe1:VOLTage:DC:AVERage:COUNt 100>> >>:SENSe1:VOLTage:DC:AVERage:STATe ON>> >>:READ?>> 1.000837E+00
2.6. Rigol DHO4204 High Resolution Digital Oscilloscope
2.6.1. Links
2.6.2. Documentation (These links only work on my personal laptop)
2.6.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
oscope-rigol.home.mitchr.me - Device Web Server: http://oscope-rigol.home.mitchr.me (DIRECT) or http://127.0.0.1:9009 (SSH)
2.6.4. Notes
2.6.4.1. Performance & Operational Facts
- Trigger Input
- Sensitivity: 200 mVpp from DC-100 MHz, and 500 mVpp from 100 MHz - 200 MHz
- Input Impedance: 1 MΩ
- Voltage Limit: ±5 V
- Bandwidth: 200 MHz
- Jitter: <1 nsrms
- 10 MHz Reference Clock (input/output mode)
- Input Mode: 50 Ω impedance with the amplitude 130 mVpp to 4.1 Vpp at 10 MHz ± 10 ppm
- Output Mode: 50 Ω impedance with a 1.5 Vpp sine waveform
- Trigger & Pass/Fail output:
- High: ≥ 2.5 V open circuit; ≥ 1.0 V 50 Ω to GND
- Low: ≤ 0.7 V to load ≤ 4 mA; ≤ 0.25 V 50 Ω to GND
- Pulse polarity and width are user selectable. Rise Time is ≤ 1.5 ns
2.6.4.2. Sampleing Modes
- Single Channel
- Only one channel is turned on.
- Max sample rate: 4 GSa/s
- Max record length: 500 Mpts
- Half Channel
- Two channels are turned on.
- Max sample rate: 2 GSa/s
- Max record length: 250 Mpts
- All Channel
- Three or four channels are turned on.
- Max sample rate: 1 GSa/s
- Max record length: 125 Mpts
- Maximum analog bandwidth is only 400MHz.
2.6.4.3. Back Ports
2.6.4.4. Undocumented: Test mode
"Test mode" is enabled via 3 taps on "About" under "Utility".
- Enables "Advanced Settings" in XY dialog.
- Utility -> Debug (new menu)
- XY: This dialog is the same one that is available from other locations in the UI (like the hamburger menu on XY-windows).
- DDR: Text in Chinese (address, length, name, file path, load). duno what this is for
- ADC Clock: duno what this is for
- ADC Ser: For each ADC channel, TCMP 0 to 4, TDMX on or off, "save" button
- Logcat: logging with a filter textbox. The buttons, labeled in Chinese, are "refresh" and "save" on the right.
- Utility -> SelfCal
- Adds a checkbox selection of what things to calibrate
- Adds Default, User, & Export option buttons at the bottom
- Utility -> Other
- HDMI resolution can be adjusted
- DSP option (on/off) – duno what this is for.
- Utility -> About
- Adds more information
2.6.5. Remote Control
2.6.5.1. *IDN?
:url @dho4204 :cmd *idn?
>>*idn?>> RIGOL TECHNOLOGIES,DHO4204,HDO4A244801592,00.02.14
2.6.5.2. Screenshot
The :DISPlay:DATA? TYPE command returns a screenshot (TYPE is PNG, JPG, or BMP). The return is wrapped with a TMC header, and the binary payload is
followed by a terminator.
:url @dho4204 :result_macro_block true # For mrSCPI "scripts", :print_cmd and :print_result are set to true. :print_cmd false :out_file screenshot.png :cmd :DISPlay:DATA? PNG
2.6.5.3. Two sinusoidal waveforms
:url @dho4204 # Setup the measurements :print_cmd false :verbose 1 :result_type nil :cmd :MEASure:CLEar :cmd :MEASure:AMSource OFF :cmd :MEASure:ITEM RRPHase,${chan1},${chan2} :cmd :MEASure:ITEM VRMS,${chan1} :cmd :MEASure:ITEM VRMS,${chan2} :cmd :MEASure:ITEM FREQuency,${chan1} :cmd :MEASure:ITEM FREQuency,${chan2} :cmd :MEASure:STATistic:COUNt 50 # Wait 3 seconds after we reset the stats before we measure things :delay_after_complete 3000 :cmd :MEASure:STATistic:RESet :delay_after_complete 0 :print_cmd true :result_type :string :read_timeout_next_byte 10 :delay_before_first_read 10 :delay_after_complete 0 :read_retry_delay 100 :cmd :MEASure:STATistic:ITEM? CNT,RRPHase,${chan1},${chan2} :cmd :MEASure:STATistic:ITEM? AVERages,RRPHase,${chan1},${chan2} :cmd :MEASure:STATistic:ITEM? AVERages,VRMS,${chan1} :cmd :MEASure:STATistic:ITEM? AVERages,VRMS,${chan2} :cmd :MEASure:STATistic:ITEM? AVERages,FREQuency,${chan1} :cmd :MEASure:STATistic:ITEM? AVERages,FREQuency,${chan2}
>>:MEASure:STATistic:ITEM? CNT,RRPHase,CHANnel1,CHANnel2>> 5.000E+01 >>:MEASure:STATistic:ITEM? AVERages,RRPHase,CHANnel1,CHANnel2>> 3.350E+01 >>:MEASure:STATistic:ITEM? AVERages,VRMS,CHANnel1>> 6.974E-01 >>:MEASure:STATistic:ITEM? AVERages,VRMS,CHANnel2>> 5.753E-01 >>:MEASure:STATistic:ITEM? AVERages,FREQuency,CHANnel1>> 5.000E+03 >>:MEASure:STATistic:ITEM? AVERages,FREQuency,CHANnel2>> 4.999E+03
2.7. Siglent SDS2504X Plus Super Phosphor Oscilloscope
2.7.1. Links
2.7.2. Documentation (These links only work on my personal laptop)
- SDS2000XP Digital OScope: User Manual version EN01E
- SDS2000XP Digital OScope: Programming Guide version EN11F
- SDS2000XP Digital OScope: Quick Start version EN01C
- SDS2000XP Digital OScope: Service Manual version E01A
- SDS2000XP Digital OScope: Binary Files version EN03B
- SDS2000XP Digital OScope: IVI-C-Programming Guide version E01A
- SDS2000XP Digital OScope: Programming Example: Screen Capture
- SDS2000XP Digital OScope: Bode Plot of a filter
- SDS2000XP Digital OScope: Datasheet
- SDS2000XP Digital OScope: User Manual version EN01D
- SDS2000XP Digital OScope: Quick Start version E01A
- SDS2000XP Digital OScope: Programming Guide version EN11C
- SDS2000XP Digital OScope: Binary Files
2.7.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
oscope-sig.home.mitchr.me - Device Web Server: http://oscope-sig.home.mitchr.me (DIRECT) or http://127.0.0.1:9015 (SSH)
2.7.4. Notes
2.7.4.1. Performance & Operational Facts
- Triger Inputs
- Sensitivity
- EXT: 200 mVpp for DC-10 MHz, and 300 mVpp for 10 MHz - 300 MHz
- EXT/5: 1 Vpp for DC-10 MHz, and 1.5 Vpp for 10 MHz - 300 MHz
- Level
- EXT: ±0.61 V
- EXT/5: ±3.05 V
- Voltage Limits
- Ext: ≤ 1.5 Vrms
- EXT/5: ≤ 7.5 Vrms
- Sensitivity
- Analog Output
- Triger: 3.3 V LVCMOS (Hi: 2.4 V, Low: 0.4 V)
- PASS/FAIL: 3.3 V TTL (Hi: 2.4 V, Low: 0.4 V)
- Probe compensation: 3 Vpp square wave at 1 kHz
- C1-C2 Max Voltage
- 1 MΩ: ≤ 400 Vpk (DC+AC), DC-10 kHz
- 50 Ω: ≤ 5 Vrms, ±10 V Peak
- C1-C2 frequency responce at 50 Ω in single-channel mode
- Bandwidth: 500 MHz
- Risetime: 800 ps
2.7.4.2. Back Ports
2.7.4.3. Sampleing Modes
- Single-channel mode (interleaving mode)
- Only one of C1/C2 is turned on, and only one of C3/C4 is turned on.
- Max sample rate: 2 GSa/s
- Max record length: 200M
- Dual-channel mode (non-interleaving mode)
- Both C1/C2 are turned on, or both C3/C4 are turned on.
- Max sample rate: 1 GSa/s
- Max record length: 100M
- If channel bandwidth is set to 350MHz on a 500MHz scope, the anti-aliasing filter with bandwidth of 350MHz is automatically turned on.
2.7.4.4. Record Length & Memory Management
Vocabulary:
- Acquisition memory
- All of the scope's memory used for trace storage. Size is measured in terms of samples.
- Record
- A single capture associated with a trigger event. Size is measured in terms of samples.
- Sequence Mode
- Acquisition memory contains multiple records. These records generally have time gaps (dead space) between them.
- Continuous Capture
- Acquisition memory contains a single record.
SDS2000X+ record length is fixed (not user adjustable) to the screen width, and the scope operates in segmented memory mode by default. In this mode the scope displays one record width of data on screen and automatically stores as many records (available to view via the "history" button) as will fit in acquisition memory.
Many scopes allow the record length to be larger than the screen size, and provide a way to scroll the screen around to view these longer records. This is usually achieved in the UI with a small (just a few pixels tall) schematic of the record at the top or bottom of the screen with a little box indicating the part of the record currently being displayed.
Sequence mode can usually meet my needs for off screen data. That said, the dead space gaps between records can miss fast waveform features. In addition, smoothly scrolling in time can be more natural than flipping through the records for some waveforms. In these cases the solution provided by the SDS2000X+ is to simply expand the time base (and thus the record length) to include the data in question and then hit the "zoom" key to see the details.
| Time Base | Time Base | Screen Width | Max Record Length @2Gs | Max Signal Frequency |
|---|---|---|---|---|
| 2e-10 | 200ps/div | 2ns | 4 pt | 500MHz |
| 5e-10 | 500ps/div | 5ns | 10 pt | 200MHz |
| 1e-09 | 1ns/div | 10ns | 20 pt | 100MHz |
| 2e-09 | 2ns/div | 20ns | 40 pt | 50MHz |
| 5e-09 | 5ns/div | 50ns | 100 pt | 20MHz |
| 1e-08 | 10ns/div | 100ns | 200 pt | 10MHz |
| 2e-08 | 20ns/div | 200ns | 400 pt | 5MHz |
| 5e-08 | 50ns/div | 500ns | 1 Kpt | 2MHz |
| 1e-07 | 100ns/div | 1us | 2 Kpt | 1MHz |
| 2e-07 | 200ns/div | 2us | 4 Kpt | 500kHz |
| 5e-07 | 500ns/div | 5us | 10 Kpt | 200kHz |
| 1e-06 | 1us/div | 10us | 20 Kpt | 100kHz |
| 2e-06 | 2us/div | 20us | 40 Kpt | 50kHz |
| 5e-06 | 5us/div | 50us | 100 Kpt | 20kHz |
| 1e-05 | 10us/div | 100us | 200 Kpt | 10kHz |
| 2e-05 | 20us/div | 200us | 400 Kpt | 5kHz |
| 5e-05 | 50us/div | 500us | 1 Mpt | 2kHz |
| 1e-04 | 100us/div | 1ms | 2 Mpt | 1kHz |
| 2e-04 | 200us/div | 2ms | 4 Mpt | 500 Hz |
| 5e-04 | 500us/div | 5ms | 10 Mpt | 200 Hz |
| 1e-03 | 1ms/div | 10ms | 20 Mpt | 100 Hz |
| 2e-03 | 2ms/div | 20ms | 40 Mpt | 50 Hz |
| 5e-03 | 5ms/div | 50ms | 100 Mpt | 20 Hz |
| 1e-02 | 10ms/div | 100ms | 200 Mpt | 10 Hz |
| 2e-02 | 20ms/div | 200ms | 400 Mpt | 5 Hz |
| 5e-02 | 50ms/div | 500ms | 1 Gpt | 2 Hz |
| 1e-01 | 100ms/div | 1s | 2 Gpt | 1 Hz |
2.7.5. VNC Movie
Put vnc viewer at upper left of screen – if using RealVNC set the autoscale to "off", and drag to left of the screen, hit escape to get out of the "select second window" bit, and it will put it at the top left. On windows the border is 36px. Capture with VLC via the media capture device "display". The advanced options should be something like this:
:screen-fps=12.000000 :live-caching=300 :screen-left=265 :screen-top=75 :screen-width=490 :screen-height=490 :stop-time=30.000
Set fps to whatever works for the application (5fps is good for a rotating Lorenz demonstration).
2.7.6. Remote Control
2.7.6.1. *IDN?
:url @sds2504xp :cmd *idn?
>>*idn?>> Siglent Technologies,SDS2504X Plus,SDS2PCBX4R0395,5.4.0.1.6.2
2.7.6.2. Simple AWG Use
:url @sds2504xp :echo false :result_type nil # Turn off output: :cmd :C1:OUTPut OFF # Set waveform type (SINE, SQUARE, RAMP, PULSE, NOISE, ARB, DC, PRBS, IQ) :cmd :C1:BaSic_WaVe WVTP,SQUARE # Set frequency :cmd :C1:BaSic_WaVe FRQ,30000 # Set Vpp: :cmd :C1:BaSic_WaVe AMP,1.5 # Set offset :cmd :C1:BaSic_WaVe OFST,0.2 # Turn on output: :cmd :C1:OUTPut ON
2.7.6.3. Two sinusoidal waveforms
:url @sds2504xp # Setup the measurements :print_cmd false :verbose 1 :result_type nil :cmd :MEASure ON :cmd :MEASure:MODE ADVanced :cmd :MEASure:ADVanced:LINenumber 5 :cmd :MEASure:ADVanced:P1 ON; :MEASure:ADVanced:P1:SOURce1 ${chan1}; :MEASure:ADVanced:P1:SOURce2 ${chan2}; :MEASure:ADVanced:P1:TYPE PHA :cmd :MEASure:ADVanced:P2 ON; :MEASure:ADVanced:P2:SOURce1 ${chan1}; :MEASure:ADVanced:P2:TYPE CRMS :cmd :MEASure:ADVanced:P3 ON; :MEASure:ADVanced:P3:SOURce1 ${chan2}; :MEASure:ADVanced:P3:TYPE CRMS :cmd :MEASure:ADVanced:P4 ON; :MEASure:ADVanced:P4:SOURce1 ${chan1}; :MEASure:ADVanced:P4:TYPE FREQ :cmd :MEASure:ADVanced:P5 ON; :MEASure:ADVanced:P5:SOURce1 ${chan2}; :MEASure:ADVanced:P5:TYPE FREQ # Now we verify everything is set, and pull the current measurement :print_cmd true :result_type :string :read_timeout_next_byte 10 :delay_before_first_read 10 :delay_after_complete 0 :read_retry_delay 100 :cmd :MEASure?; :MEASure:MODE?; :MEASure:ADVanced:LINenumber? :cmd :MEASure:ADVanced:P1?; :MEASure:ADVanced:P1:SOURce1?; :MEASure:ADVanced:P1:SOURce2?; :MEASure:ADVanced:P1:TYPE?; :MEASure:ADVanced:P1:VALue? :cmd :MEASure:ADVanced:P2?; :MEASure:ADVanced:P2:SOURce1?; :MEASure:ADVanced:P2:TYPE?; :MEASure:ADVanced:P2:VALue? :cmd :MEASure:ADVanced:P3?; :MEASure:ADVanced:P3:SOURce1?; :MEASure:ADVanced:P3:TYPE?; :MEASure:ADVanced:P3:VALue? :cmd :MEASure:ADVanced:P4?; :MEASure:ADVanced:P4:SOURce1?; :MEASure:ADVanced:P4:TYPE?; :MEASure:ADVanced:P4:VALue? :cmd :MEASure:ADVanced:P5?; :MEASure:ADVanced:P5:SOURce1?; :MEASure:ADVanced:P5:TYPE?; :MEASure:ADVanced:P5:VALue?
>>:MEASure?; :MEASure:MODE?; :MEASure:ADVanced:LINenumber?>> ON;ADVanced;5 >>:MEASure:ADVanced:P1?; :MEASure:ADVanced:P1:SOURce1?; :MEASure:ADVanced:P1:SOURce2?; :MEASure:ADVanced:P1:TYPE?; :MEASure:ADVanced:P1:VALue?>> ON;C3;C4;PHA;-5.9131E+01 >>:MEASure:ADVanced:P2?; :MEASure:ADVanced:P2:SOURce1?; :MEASure:ADVanced:P2:TYPE?; :MEASure:ADVanced:P2:VALue?>> ON;C3;CRMS;1.75569E+01 >>:MEASure:ADVanced:P3?; :MEASure:ADVanced:P3:SOURce1?; :MEASure:ADVanced:P3:TYPE?; :MEASure:ADVanced:P3:VALue?>> ON;C4;CRMS;1.75451E+01 >>:MEASure:ADVanced:P4?; :MEASure:ADVanced:P4:SOURce1?; :MEASure:ADVanced:P4:TYPE?; :MEASure:ADVanced:P4:VALue?>> ON;C3;FREQ;9.99931670E+02 >>:MEASure:ADVanced:P5?; :MEASure:ADVanced:P5:SOURce1?; :MEASure:ADVanced:P5:TYPE?; :MEASure:ADVanced:P5:VALue?>> ON;C4;FREQ;9.99955476E+02
2.8. Tektronix TDS2024 Digital Storage Oscilloscope
2.8.1. Links
- TekWiki (scope): https://w140.com/tekwiki/wiki/TDS2024
- TekWiki (probes): https://w140.com/tekwiki/wiki/P2200
2.8.2. Documentation (These links only work on my personal laptop)
- TDS2000 Digital OScope: User Manual
- TDS2000 Digital OScope: User Manual Change
- TDS2000 Digital OScope: Programmer Manual
- TDS2000 Digital OScope: Service Manual
- TDS2000 Digital OScope: Extension Module Install
- TDS2000 Digital OScope: tds2mem User Guide
- TDS2000/3000b- Digital OScope: FFT Applications
- P2220 Passive OScope Probe: 200MHz 1X/10X Passive Prob
2.8.3. Local LAN Settings & Addresses (These links only work on my home network)
- Serial over IP access: soip://serial.home.mitchr.me:10002 (DIRECT) or soip://127.0.0.1:9017 (SSH)
2.8.4. Serial Settings (Lantronix console server)
| Parameter | Setting |
|---|---|
| Cable | crossover (null modem) |
| Line | 2 |
| TCP/IP Port | 10002 |
| Serial | RS232 |
| Baud | 19200 |
| Parity | Even |
| Data Bits | 8 |
| Stop Bits | 2 |
| Flow Control | Hardware |
| Xon | ^Q |
| Xof | ^S |
2.8.5. *IDN?
:url @tds2024 :cmd *idn?
>>*idn?>> TEKTRONIX,TDS 2024,0,CF:91.1CT TDS2MEM:FV:v6.08
2.9. Tektronix TDS3052B Digital Phosphor Oscilloscope
2.9.1. Links
- TekWiki (scope): https://w140.com/tekwiki/wiki/TDS3052
- TekWiki (probes): https://w140.com/tekwiki/wiki/P6139
2.9.2. Documentation (These links only work on my personal laptop)
- TDS3000B Digital OScope: User Manual
- TDS3000B Digital OScope: Service Manual
- TDS3000B Digital OScope: Programmer Manual
- TDS3000 Digital OScope: Service Manual
- TDS3000 Digital OScope: Module Install
- TDS3000 Digital OScope: Module: TDS3VID
- TDS3000 Digital OScope: Module: TDS3TRG
- TDS3000 Digital OScope: Module: TDS3TMT
- TDS3000 Digital OScope: Module: TDS3LIM
- TDS3000 Digital OScope: Module: TDS3FFT
- TDS3000 Digital OScope: Module: TDS3AAM
- TDS3000 Digital OScope: Module: eeprom_m24c16
- TDS3000 Digital OScope: Module: eeprom_m24c02.pdf
- TDS3000 Digital OScope: Undocumented Notes
- TDS3000B Digital OScope: Training Kit
- CT3290RA-PRO Passive OScope Probe: 500MHz 3.5 mm Compact Oscilloscope Probe
- P61xx Passive OScope Probe: Passive Voltage Probes
- P6139A Passive OScope Probe: 10X Passive Probe
2.9.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
oscope-tek.home.mitchr.me - Serial over IP access: soip://serial.home.mitchr.me:10003 (DIRECT) or soip://127.0.0.1:9020 (SSH)
- Device Web Server: http://oscope-tek.home.mitchr.me (DIRECT) or http://127.0.0.1:9021 (SSH)
t3kprotocal IP access: t3k://oscope-tek.home.mitchr.me:80 (DIRECT) or t3k://127.0.0.1:9018 (SSH)
2.9.4. Notes
2.9.4.1. Back Ports
2.9.4.2. Remote control notes
This scope has serial, GPIB, & ethernet interfaces. The serial and GPIB interfaces are provided by a TDS3GV add-on board. Via ethernet the instrument provides a web interface and LXI for SCPI; however, it doesn't provide a raw sockets interface for SCPI. I find the lack of support for raw sockets a truly baffling omission.
The web interface provides some cool features:
- An HTML form accepting SCPI commands and returning the result. The form doesn't support binary data or semicolon separated SCPI commands. The lack of binary data support isn't necessarly an issue for waveform data because the record length of this scope is so short that using ASCII mode for the transfer is more than acceptable. See: SCPI via HTTP.
- A static link for a screen shot in PNG format. See: grab a screenshot via HTTP.
- An HTML form that can produce a CSV, with both time & voltage, for any channel. See: grab a waveform via HTTP
The mrSCPI.rb script supports a protocol named "t3k" which actually uses the SCPI web form to facilitate SCPI control. This is my primary method
of running SCPI commands on this scope. As for the other interfaces, I have tested them:
- The Prologix Ethernet adapter via the scope's GPIB interface works perfectly.
- A Lantronix serial console works well with the scope's RS-232 interface.
2.9.5. Serial Settings (Lantronix console server)
| Parameter | Setting |
|---|---|
| Cable | crossover (null modem) |
| Line | 3 |
| TCP/IP Port | 10003 |
| Serial | RS232 |
| Baud | 38400 |
| Parity | None |
| Data Bits | 8 |
| Stop Bits | 1 |
| Flow Control | Hardware |
| Xon | ^Q |
| Xof | ^S |
2.9.6. View scope VGA output via video capture device on bench-pi
- Start up
vlc:- Open capture device
- Webcam
/dev/video0
- Advanced options
- Width 640
- Height 480
- Framerate 24 to 60
- Open capture device
To crop just to waveform part of display: top: 17, bot: 57, left: 19, right: 57
2.9.7. Web Interface
2.9.7.1. Grab screen from web interface with curl
2.9.7.2. SCPI command from web interface with curl
curl -s -H 'Content-Type: text/plain' -d 'COMMAND=*IDN?' -X POST "`./my_prog/teAlias.rb @tds3052bw`/Comm.html" | sed 's/^.*name">//; s/<\/TEXTAREA.*$/\n/;'
TEKTRONIX,TDS 3052B,0,CF:91.1CT FV:v3.41 TDS3FFT:v1.00 TDS3TRG:v1.00
2.9.7.3. Capture an analog waveform CSV from web interface with curl
TODO: Verify command. Check preamble bit. Add link to script.
Grab a waveform. Note that you can grab a waveform via SCPI too.
curl -i -H 'Content-Type: text/plain' -d 'command=select:ch1 on' -d 'command=save:waveform:fileformat spreadsheet' -d 'wfmsend=Get' -X POST "`teAlias.rb @tds3052bw`/getwfm.isf" > waveform.txt
Valid channels are: CH1, CH2, MATH, MATH1, REF1, & REF2.
The file waveform.txt will contain a preamble that needs to be deleted:
tail -n +11 waveform.txt | waveform.csv
2.9.8. Remote Control
2.9.8.1. *IDN?
:url @tds3052b :cmd *idn?
>>*idn?>> TEKTRONIX,TDS 3052B,0,CF:91.1CT FV:v3.41 TDS3FFT:v1.00 TDS3TRG:v1.00
2.9.8.2. Setup the serial interface
If the serial interface somehow got setup funny, we can set it up via the web interface with mrSCPI.rb:
:url @tds3052b :echo false :result_type nil :cmd :RS232:BAUd 38400 :cmd :RS232:HARDFlagging ON :result_type :string :cmd :RS232?
2.9.8.3. Capture an analog waveform
TODO: Add link to script. Test this. Check -m 3000 arg.
Note that you can grab a waveform via HTTP too.
Possible channels: CH1, CH2, REFA, REFB, MATH
:url @3052 :echo false :result_type nil :cmd :DATa:SOUrce ${chan}; :DATa:ENCdg ASCII; :DATa:WIDth 2; :DATa:STARt 1; :DATa:STOP 10000 :result_type :string :print_raw_result true :out_file waveform.pre :cmd :WFMPRe? :out_file waveform.dat :cmd :CURVe?
Plot it like so:
tdsRAW2CSV.rb waveform.pre waveform.dat > waveform.csv
printf "set datafile separator ','\nplot 'waveform.csv' using 1:2 with linespoints\npause mouse\n" > waveform.gplt
gnuplot -c waveform.gplt
Plot an 'ENVelope' type waveform – max and min point per time value
tdsRAW2CSV.rb waveform.pre waveform.dat > waveform.csv
printf "set datafile separator ','\nplot 'waveform.csv' using 1:(\$2+\$3)/2:2:3 with yerrorlines, 'waveform.csv' using 1:2 with points, 'waveform.csv' using 1:3 with points\npause mouse\n" > waveform.gplt
gnuplot -c waveform.gplt
Notes:
- Binary data is not supported via HTTP (-m 3000), so you MUST use 'ASCIi' for the encoding
- Semicolon separated SCPI commands are not supported
- The TDS3052B has a 9-bit ADC so width should always be set to 2 bytes.
If we do it over serial or GPIB, then we can use binary and group commands with semicolons.
:url @tds3052bs :echo false :result_type nil :cmd :DATa:SOUrce ${chan}; :DATa:ENCdg RIBinary; :DATa:WIDth 2; :DATa:STARt 1; :DATa:STOP 10000 :result_type :string :print_raw_result true :out_file waveform.pre :cmd :WFMPRe? :out_file waveform.dat :cmd :CURVe?
2.9.8.4. Programatically Measure two sinusoidal waveforms
Given two channels, pull the following measurements:
- Cyclic RMS for both
- Frequency for both
- Phase difference between them
:url @tds3052b :verbose 1 :result_type nil :cmd :MEASUrement:IMMed:SOUrce1 ${chan1} :cmd :MEASUrement:IMMed:SOUrce2 ${chan2} :cmd :MEASUrement:IMMed:TYPe Phase :result_type :string :cmd :MEASUrement:IMMed:SOUrce1? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:SOUrce2? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:TYPe? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:VALue? :cmd :MEASUrement:IMMed:UNIts? :result_type nil :cmd :MEASUrement:IMMed:SOUrce1 ${chan1} :cmd :MEASUrement:IMMed:TYPe CRMs :result_type :string :cmd :MEASUrement:IMMed:SOUrce? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:TYPe? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:VALue? :cmd :MEASUrement:IMMed:UNIts? :result_type nil :cmd :MEASUrement:IMMed:SOUrce1 ${chan2} :cmd :MEASUrement:IMMed:TYPe CRMs :result_type :string :cmd :MEASUrement:IMMed:SOUrce? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:TYPe? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:VALue? :cmd :MEASUrement:IMMed:UNIts? :result_type nil :cmd :MEASUrement:IMMed:SOUrce1 ${chan1} :cmd :MEASUrement:IMMed:TYPe FREQuency :result_type :string :cmd :MEASUrement:IMMed:SOUrce? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:TYPe? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:VALue? :cmd :MEASUrement:IMMed:UNIts? :result_type nil :cmd :MEASUrement:IMMed:SOUrce1 ${chan2} :cmd :MEASUrement:IMMed:TYPe FREQuency :result_type :string :cmd :MEASUrement:IMMed:SOUrce? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:TYPe? # Just to make sure it's set correctly :cmd :MEASUrement:IMMed:VALue? :cmd :MEASUrement:IMMed:UNIts?
>>:MEASUrement:IMMed:SOUrce1 CH1>> >>:MEASUrement:IMMed:SOUrce2 CH2>> >>:MEASUrement:IMMed:TYPe Phase>> >>:MEASUrement:IMMed:SOUrce1?>> CH1 >>:MEASUrement:IMMed:SOUrce2?>> CH2 >>:MEASUrement:IMMed:TYPe?>> PHASE >>:MEASUrement:IMMed:VALue?>> -5.9603E1 >>:MEASUrement:IMMed:UNIts?>> "degrees" >>:MEASUrement:IMMed:SOUrce1 CH1>> >>:MEASUrement:IMMed:TYPe CRMs>> >>:MEASUrement:IMMed:SOUrce?>> CH1 >>:MEASUrement:IMMed:TYPe?>> CRMS >>:MEASUrement:IMMed:VALue?>> 1.79E0 >>:MEASUrement:IMMed:UNIts?>> "V" >>:MEASUrement:IMMed:SOUrce1 CH2>> >>:MEASUrement:IMMed:TYPe CRMs>> >>:MEASUrement:IMMed:SOUrce?>> CH2 >>:MEASUrement:IMMed:TYPe?>> CRMS >>:MEASUrement:IMMed:VALue?>> 1.7757E0 >>:MEASUrement:IMMed:UNIts?>> "V" >>:MEASUrement:IMMed:SOUrce1 CH1>> >>:MEASUrement:IMMed:TYPe FREQuency>> >>:MEASUrement:IMMed:SOUrce?>> CH1 >>:MEASUrement:IMMed:TYPe?>> FREQUENCY >>:MEASUrement:IMMed:VALue?>> 9.986E2 >>:MEASUrement:IMMed:UNIts?>> "Hz" >>:MEASUrement:IMMed:SOUrce1 CH2>> >>:MEASUrement:IMMed:TYPe FREQuency>> >>:MEASUrement:IMMed:SOUrce?>> CH2 >>:MEASUrement:IMMed:TYPe?>> FREQUENCY >>:MEASUrement:IMMed:VALue?>> 9.9798E2 >>:MEASUrement:IMMed:UNIts?>> "Hz"
2.9.8.5. Setup Interactive Measurements for two sinusoidal waveforms
Given two channels, set the system to measure the following:
- Cyclic RMS for both
- Frequency for both
- Phase difference between them
:url @tds3052b :verbose 1 :result_type nil :cmd :MEASUrement:MEAS1:SOUrce1 ${chan1} :cmd :MEASUrement:MEAS1:SOUrce2 ${chan2} :cmd :MEASUrement:MEAS1:TYPe Phase :cmd :MEASUrement:MEAS1:STATE ON :cmd :MEASUrement:MEAS2:SOUrce1 ${chan1} :cmd :MEASUrement:MEAS2:TYPe CRMs :cmd :MEASUrement:MEAS2:STATE ON :cmd :MEASUrement:MEAS3:SOUrce1 ${chan2} :cmd :MEASUrement:MEAS3:TYPe CRMs :cmd :MEASUrement:MEAS3:STATE ON :cmd :MEASUrement:MEAS4:SOUrce1 ${chan1} :cmd :MEASUrement:MEAS4:TYPe FREQuency :cmd :MEASUrement:MEAS4:STATE ON :cmd :MEASUrement:MEAS5:SOUrce1 ${chan2} :cmd :MEASUrement:MEAS5:TYPe FREQuency :cmd :MEASUrement:MEAS5:STATE ON
>>:MEASUrement:MEAS1:SOUrce1 CH1>> >>:MEASUrement:MEAS1:SOUrce2 CH2>> >>:MEASUrement:MEAS1:TYPe Phase>> >>:MEASUrement:MEAS1:STATE ON>> >>:MEASUrement:MEAS2:SOUrce1 CH1>> >>:MEASUrement:MEAS2:TYPe CRMs>> >>:MEASUrement:MEAS2:STATE ON>> >>:MEASUrement:MEAS3:SOUrce1 CH2>> >>:MEASUrement:MEAS3:TYPe CRMs>> >>:MEASUrement:MEAS3:STATE ON>> >>:MEASUrement:MEAS4:SOUrce1 CH1>> >>:MEASUrement:MEAS4:TYPe FREQuency>> >>:MEASUrement:MEAS4:STATE ON>> >>:MEASUrement:MEAS5:SOUrce1 CH2>> >>:MEASUrement:MEAS5:TYPe FREQuency>> >>:MEASUrement:MEAS5:STATE ON>>
2.10. Rigol DG2052 Function/Arbitrary Waveform Generator
2.10.1. Links
2.10.2. Documentation (These links only work on my personal laptop)
2.10.3. Local LAN Settings & Addresses (These links only work on my home network)
- Host name:
awg-rigol.home.mitchr.me - Device Web Server: http://awg-rigol.home.mitchr.me (DIRECT) or http://127.0.0.1:9007 (SSH)
2.10.4. Notes
2.10.4.1. Performance & Operational Facts
- External Reference Clock Input
- Impedance ~1kΩ, AC coupling
- Level 250 mVpp to 5 Vpp
- Clock Output
- Level 3.3 Vpp
- Output Impedance 50 Ohm, AC coupled
- Counter
- Damage level 2.5V
- Input Impedance 1MΩ
- Sync output and External trigger input/output are TTL (0-5 V)
- External modulation
- Input impedance is 1000 Ω.
- Voltage range: ±5 V
2.10.4.2. Remote control notes
When the DG2052 receives a remote SCPI command it will usually switch into "remote mode" (also called "remote programming command mode"). This mode is
indicated on screen by an "S" shaped icon with arrows on the tips. Use the [SHIFT] and [HELP/LOCAL] keys to return the device to "local mode". I don't
have a full list of SCPI sequences or conditions that will trigger "remote mode". I have been unable to discover a way to switch the instrument to "local
mode" via SCPI.
This device is incredibly delicate when it comes to processing SCPI over TCP/IP. Some SCPI commands take a very long time to execute during which the device becomes unresponsive. Device lockups requiring a physical power cycle are common. Such lockups can occur in response to completely correct SCPI statements, but are usually triggered by incorrect commands. Returns usually are terminated by a single newline character, but malformed return strings appear occasionally. The SCPI documentation is both incomplete and inaccurate.
2.10.4.3. RAF File Format
The format Rigol uses by arbitrary waveform files is known as "RAF". This is one of the file types that the UltraStation software package can produce.
The file format is simple. It is a sequence of 16-bit integer values in little-endian order. The number 0 represents the minimum negative value and 16383 represents the maximum positive value. File can have between 2 points and to 16 Mpts (16,777,216 points).
2.10.5. Remote Control
2.10.5.1. *IDN?
:url @dg2052 :cmd *IDN?
>>*IDN?>> Rigol Technologies,DG2052,DG2P242400590,00.02.06.00.01
2.10.5.2. Default Setup
:url @dg2052 :echo false :result_type nil :cmd *RST
2.10.5.3. Error Condition Query
:url @dg2052 :cmd :SYSTem:ERRor?
>>:SYSTem:ERRor?>> 0,"No error"
2.10.5.4. Basic Sine Wave
The arguments to :SOURce1:APPLy:SINusoid are frequency, amplitude, offset, and phase.
For example, the following will produce a 2kHz sine wave at 5v peek-peek with a zero offset and phase.
:url @dg2052 :echo false :result_type nil :cmd :OUTPut1:STATe OFF :cmd :SOURce1:APPLy:SINusoid 2000,5,0,0 :cmd :OUTPut1:VOLLimit:STATe OFF :cmd :OUTPut1:IMPedance INFinity :cmd :OUTPut1:STATe ON
2.10.5.5. Channel two phase
Before we can set a phase diffrence between channel 1 and 2, we must "synchronize" the channels:
- Set channel 2 to the same settings as channel 1
- Make sure both channels have output enabled
- Execute a
SYNChronizecommand
If we set channel 1 as above, then the following will get us what we want.
:url @dg2052 :echo false :result_type nil # Reset the device :delay_after_complete 100 :cmd *RST # First we set chan 1 :cmd :SOURce1:APPLy:SINusoid 1000,5,0,0 :cmd :OUTPut1:VOLLimit:STATe OFF # Next we set chan 2 to the same thing :cmd :SOURce2:APPLy:SINusoid 1000,5,0,0 :cmd :OUTPut2:VOLLimit:STATe OFF # Synchronize -- Note the outputs must be on to sync :delay_after_complete 100 :cmd :OUTPut1:STATe ON :cmd :OUTPut2:STATe ON :cmd :SOURce2:PHASe:SYNChronize :delay_after_complete 10 # Now we can set the phase for chan2 :cmd :SOURce2:APPLy:SINusoid 1000,5,0,60 # Finally we activate the two channels
2.10.5.6. Sweep with frequency marker
One must turn on the sync signal as well set the marker
:url @dg2052 :echo false :result_type nil # First set channel 1 to a sinusoid -- the frequncy & phase are irrelevent, but we want to set the voltage & offset to zero :cmd :SOURce1:APPLy:SINusoid 50000,5,0,0 # Enable the sync output :cmd :OUTPut1:SYNC:STATe ON # Enable sweep function :cmd :SOURce1:SWEep:STATe ON # Linear sweep :cmd :SOURce1:SWEep:SPACing LINear # Set the sweep time to 3 seconds :cmd :SOURce1:SWEep:TIME 3 # Set the return time of the sweep 0 seconds :cmd :SOURce1:SWEep:RTIMe 0 # Set the start frequency to 1KHz :cmd :SOURce1:FREQuency:STARt 1000 # Set the stop frequency to 5KHz :cmd :SOURce1:FREQuency:STOP 5000 # Set the marker frequency to 3KHz :cmd :SOURce1:MARKer:FREQuency 3000 :cmd :SOURce1:MARKer:STATe ON # Set the start hold time of the sweep to 0 seconds :cmd :SOURce1:SWEep:HTIMe:STARt 0 # Set the stop hold time to 0 seconds :cmd :SOURce1:SWEep:HTIMe:STOP 0 # Set for manual trigger :cmd :SOURce1:SWEep:TRIGger:SOURce MANual # Enable output :cmd :OUTPut1:STATe ON # Trigger a sweep (this can be repeated as required) :cmd :SOURce1:SWEep:TRIGger:IMMediate
3. Virtual Instruments
3.1. Bus Pirate 5
3.1.1. Links
- Product page: https://buspirate.com/
- Docs: https://docs.buspirate.com/docs/overview/hardware/
- Latest Firmware: https://forum.buspirate.com/t/bus-pirate-5-auto-build-main-branch/20/99999
- Repos
3.1.2. Serial Settings (tio config)
[buspirate5] device = /dev/buspirate5 baudrate = 115200 databits = 8 parity = none stopbits = 1 flow = none map = INLCRNL,ODELBS
3.1.3. Host Computer Configuration
3.2. I2CDriver I2CD Protocol USB Host Adapter + display
3.2.1. Links
- Product page: https://i2cdriver.com/
- Software: https://github.com/alandoherty/i2cdriver-net
3.2.2. Serial Settings (tio config)
[i2cdriver] device = /dev/i2cdriver baudrate = 1000000 flow = none parity = none databits = 8 stopbits = 1 input-mode = line local-echo = true
3.2.3. Host Computer Configuration
3.3. SPIDriver SPI Protocol USB Host Adapter + display
3.3.1. Links
- Product page: https://spidriver.com/
- Software: https://github.com/alandoherty/spidriver-net
3.3.2. Serial Settings (tio config)
[spidriver] device = /dev/spidriver baudrate = 460800 flow = none parity = none databits = 8 stopbits = 1 input-mode = line local-echo = true
3.3.3. Host Computer Configuration
3.4. Digilent Analog & Digital Discovery
3.4.1. Waveforms Software WIP
3.4.1.1. Links
3.4.1.2. Screenshot
Grab all waveforms windows
~/bin/screenshot_waveforms.sh
Grab a window you click on
import -screen `date +%Y%m%d%H%M%S`_AD2_screenshot.png
3.4.2. Analog Discovery 2
3.4.2.1. Links
3.4.2.2. Documentation (These links only work on my personal laptop)
- Analog Discovery 2: Calibration
- Analog Discovery 2: Refrence
- Analog Discovery 2: Module: BNC Adapter: Refrence
- Analog Discovery 2: Module: BNC Adapter: Schematic
- Analog Discovery 2: Module: Impedance Analyzer: Quick Start
- Analog Discovery 2: Module: Impedance Analyzer: Refrence
- Analog Discovery 2: Module: Impedance Analyzer: Schematic
- Analog Discovery 2: Module: Impedance Analyzer: User Guide
- Analog Discovery 2: Module: Transistor Adapter: Quick Start
- Analog Discovery 2: Module: Transistor Adapter: Refrence
- Analog Discovery 2: Module: Transistor Adapter: Schematic
- Analog Discovery 2: Module: Transistor Adapter: User Guide
3.4.3. Digital Discovery
3.4.3.1. Links
3.4.3.2. Documentation (These links only work on my personal laptop)
4. ARM Programmers
4.1. Debug Ports
4.1.1. 19-pin connector
- Keyed rectangular 2x10 1.27mm pitch connector
- Samtec FTSH-1110-01
- Supports JTAG debug, Serial-Wire debug, Serial Wire Viewer, and ETM instruction trace operations.
- Variants with removed pin 7 (keying) can be used as well.
- Alias: Cortex Debug+ETM Connector
- Alias: JTAG-19
| 1 | VTref | TMS/SWDIO | 2 |
| 3 | GND | TCK/SWCLK | 4 |
| 5 | GND | TDO/SWO | 6 |
| 7 | -- | TDI/NC | 8 |
| 9 | GNDDetect | nRESET | 10 |
| 11 | 5V-Supply | TRACECLK/NC | 12 |
| 13 | 5V-Supply | TRACEDATA[0]/NC | 14 |
| 15 | GND | TRACEDATA[1]/NC | 16 |
| 17 | GND | TRACEDATA[2]/NC | 18 |
| 19 | GND | TRACEDATA[3]/NC | 20 |
On most boards pin 9 is NC.
4.1.2. 9-pin connector
Essentially the first half of the 19-pin cable – i.e. pins 1-10 all match in both cables.
- Keyed rectangular 2x5 1.27mm pitch connector
- Samtec FTSH-105-01
- Supports JTAG debug, Serial Wire debug and Serial Wire Viewer.
- Almost the same capabilities of the larger 20-Pin Standard Debug Connector
- Variants with removed pin 7 (keying) can be used as well.
- Alias: Cortex Debug Connector
- Alias: MIPI10
- Alias: JTAG-9
| 1 | VTref | TMS/SWDIO | 2 |
| 3 | GND | TCK/SWCLK | 4 |
| 5 | GND | TDO/SWO | 6 |
| 7 | -- | TDI/NC | 8 |
| 9 | GNDDetect | nRESET | 10 |
4.1.3. Standard 20-pin connector
- Keyed rectangular 2x10 2.54mm pitch connector
- Samtec TST-110-01-L-D
- Supports JTAG debug, Serial-Wire debug, and Serial Wire Viewer
- Alias: ARM Standard JTAG Connector
- Alias: Legacy 20-pin ARM JTAG Connector
- Alias: JTAG-20
| 1 | VTref | NC | 2 |
| 3 | nTRST/NC | GND | 4 |
| 5 | TDI/NC | GND | 6 |
| 7 | TMS/SWDIO | GND | 8 |
| 9 | TCK/SWCLK | GND | 10 |
| 11 | RTCK/NC | GND | 12 |
| 13 | TDO/SWO | GND | 14 |
| 15 | RESET | GND | 16 |
| 17 | DBGRQ/NC | GND | 18 |
| 19 | 5V-Supply | GND | 20 |
4.2. J-Link EDU Mini
4.2.1. Links
- Product Page: https://www.segger.com/products/debug-probes/j-link/models/j-link-edu-mini/
- Knowledge Base Links:
- J-Trace_User_Guide: https://kb.segger.com/UM08001_J-Link_/_J-Trace_User_Guide
- J-Link Commander: https://kb.segger.com/J-Link_Commander
- J-Link Scripts: https://kb.segger.com/J-Link_script_files
- J-Link GDB Server: https://kb.segger.com/J-Link_GDB_Server
- J-Flash Lite: https://kb.segger.com/J-Flash_Lite
- J-Link SWO Viewer: https://kb.segger.com/J-Link_SWO_Viewer
- J-Scope: https://kb.segger.com/UM08028_J-Scope
- EDU Mini Connector: https://kb.segger.com/9-pin_JTAG/SWD_connector
- J-Link EDU Mini Specific: https://kb.segger.com/J-Link_EDU_Mini
- User/Support Forum: https://forum.segger.com/
- Software: https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
- Other Software:
- Embedded Studio: https://www.segger.com/downloads/embedded-studio/
- Ozone Debugger: https://www.segger.com/downloads/jlink/#Ozone
4.2.2. Documentation (These links only work on my personal laptop)
4.2.3. Physical Interface
The Target Interface Port on the programmer is a male, 9-pin Cortex Debug Connector.
The target interface cable that came with my unit is a combo ribbon cable with a female JTAG-9 plug at both ends and a female JTAG-19 (with pins 11-20 NC) connected mid-cable.
On most boards nTRST is pulled up and may be left unconnected. On other boards it is floating and must be controlled by the debug probe.
Here is advice from Segger on this:
Should you run into issues setting up a JTAG connection, check the state of the nTRST signal. If it is pulled low either try to pull it high through an external wire manually or route nTRST to pin 9 of the J-Link EDU Mini debug interface. In the 9-pin Cortex-M specification pin 9 is usually defined as NC however in case of the J-Link EDU Mini that pin is used as nTRST instead to be able to connect to boards having that signal routed to their target device.
4.3. STLINK-V3SET
4.3.1. Links
4.3.2. Documentation (These links only work on my personal laptop)
4.3.3. Physical Interface
The Target Interface Port on the programmer is a male, rectangular 2x7, 14-pin with 1.27 mm pitch (Samtec FTSH-107-01-L-DV-K-A):
| 1 | Reserved | 2 | Reserved |
| 3 | T_VCC | 4 | T_JTMS/T_SWDIO |
| 5 | GND | 6 | T_JCLK/T_SWCLK |
| 7 | GND | 8 | T_JTDO/T_SWO |
| 9 | T_JRCLK/NC | 10 | T_JTDI/NC |
| 11 | GNDDetect | 12 | T_NRST |
| 13 | T_VCP_RX | 14 | T_VCP_TX |
This connector has the normal pins for JTAG-9 as pins 3-12 – note pin 9 would be NC for a standard JTAG-9 interface. Pins 13 & 14 provide RX & TX for the "Virtual COM port".
My unit came with three flat cables:
- STDC14
- Both ends have the female 14-pin connector that matches the programmer port (Samtec FFSD-07-D-05.90-01-N-R)
- JTAG-9
- Pin 7 is connected to
T_JRCLKand pin 9 is GND. - JTAG-19
- Pins 7 & 9 are as with MIPI10. Pins 11 to 20 are NC.
The MB1440B adds:
- SWD: CN6 (2.54 pitch header pin strip).
- Pins: T_VCC, T_SWCLK, GND, T_SWDIO, T_NRST, T_SWO
- Note pin numbers are from right to left when viewed from the bottom.
- JTAG-20: CN2 (standard JTAG-20 rectangular connector)
5. Disconnected Instruments
5.1. Tektronix AN/USM-488 or 2235 Analog Oscilloscope
5.1.1. Links
- TekWiki (2235): https://w140.com/tekwiki/wiki/2235
- TekWiki (AN/USM-488): https://w140.com/tekwiki/wiki/AN/USM-488
5.1.2. Documentation (These links only work on my personal laptop)
- tek2235 Analog OScope: ANUSM488: User Manual
- tek2235 Analog OScope: ANUSM488: Service Manual
- tek2235 Analog OScope: 2235 Service Upgrade: 050-2242-03
- tek2235 Analog OScope: 2235 Service Manual Foldouts.pdf
- tek2235 Analog OScope: 2235 UserManual (Small)
- tek2235 Analog OScope: 2235 UserManual (Large)
- tek2235 Analog OScope: 2235 Service Manual (Small)
- tek2235 Analog OScope: 2235 Service Manual (Large)
5.2. Tektronix 2205 Analog Oscilloscope
5.2.1. Links
- TekWiki: https://w140.com/tekwiki/wiki/2205
5.2.2. Documentation (These links only work on my personal laptop)
5.3. Fluke 54 II Data Logging Thermometer with Dual Input
5.3.1. Links
5.3.2. Documentation (These links only work on my personal laptop)
5.4. B&K Precision 1621A Power Supply
5.4.1. Documentation (These links only work on my personal laptop)
5.5. HIOKI 3030-10 HiTESTER
5.5.2. Documentation (These links only work on my personal laptop)
5.5.3. Notes
5.5.3.1. Performance & Operational Facts
- The 60μA & 0.3V range are wired right across the meeter, trimmer, & fuse.
- This is a simple average reading meter
- DC Voltage Input Impedance (measured)
| Range | Impedance |
|---|---|
| 600V | 12MΩ |
| 300V | 6MΩ |
| 120V | 2.4MΩ |
| 30V | 600kΩ |
| 12V | 240kΩ |
| 3V | 60kΩ |
| 0.3V | 5kΩ |
- Current Shunt Resistance (measured)
| Range | Resistance |
|---|---|
| 60μA | 5kΩ |
| 30mA | 12.7Ω |
| 300mA | 3.7Ω |
5.6. Sanwa EM7000 FET multitester
5.6.1. Links
5.6.2. Documentation (These links only work on my personal laptop)
5.6.3. Notes
5.6.3.1. Performance & Operational Facts
- This is a p-p measureing meter. i.e. it indicates the value between positive and negative peak values of the input.
- A 10 μs pulse train at 1 Hz will cause the needle to deflect to halfway between 0 and 1 on the scale where it will visibally oscilate a bit.
- DC Voltage Input Impedance
| Range | Impedance |
|---|---|
| 0.3V | 2.50MΩ |
| 1.2V | 12MΩ |
| 3V | 11MΩ |
| Others | 10MΩ |
- DC/AC Voltage Accuracy is about 3% in positive mode, and 7% in plus/minus mode
- AC Voltage Input Impedance
| Range (rms) | Range (p-p) | Impedance |
|---|---|---|
| 3V | 8.4V | 2.50MΩ |
| 12V | 33V | 1.10MΩ |
| 30V | 84V | 800kΩ |
| 120V | 300V | 800kΩ |
| 300V | 840V | 800kΩ |
| 750V | - | 10MΩ |
- AC Voltage Bandwidth
- Accuracy at 50 Hz is around 3%
- On ranges 12 Vrms and below it is around 5% up to 1 MHz.
- On 8.4 Vpp range for symmetric square/triangle waves it is 4% up to 100 kHz.
- Observation: On 8.4 Vpp range, the needle doesn't move till we hit 4 MHz.
- If computing the ratio of two voltage measurements, the meter is accurate well beyond 10 MHz.
- Resistance measurement applies a 3V test voltage at full scale
5.7. Gossen-Metrawatt METRAmax2 Analog Multimeter
5.7.2. Documentation (These links only work on my personal laptop)
5.7.3. Notes
5.7.3.1. Performance & Operational Facts
- AC/DC Voltage Input Impedance: 10MΩ
- AC Voltage Measurement Bandwidth
| Frequency Range | Accuracy |
|---|---|
| DC - 30Hz | 2% |
| 30Hz - 1.5kHz | 2.5% |
| 1.5kHz - 3kHz | 5% |
- DC Current Shunt (measured)
| Range | Resistance |
|---|---|
| 3A | 0.1Ω |
| 1A | 0.14Ω |
| 100mA | 0.64Ω |
| 10mA | 5.6Ω |
| 1mA | 55.6Ω |
| 100μA | 5kΩ |
5.8. Keysight U1233A Handheld DMM
5.8.1. Links
5.8.2. Documentation (These links only work on my personal laptop)
5.9. Thurlby Thandar Instruments WA301 Wideband Amplifier
5.9.1. Links
5.9.2. Documentation (These links only work on my personal laptop)
5.9.2.1. Notes
5.10. Fluke 107 Pocket Digital Multimeter
5.10.1. Links
5.10.2. Documentation (These links only work on my personal laptop)
6. Sending SCPI commands over IP network from command line
6.1. mrSCPI.rb
mrSCPI.rb -a my-scope-ip -c '*IDN?'
6.2. netcat
printf '*IDN?\n' | nc -w 3 -N my-scope-ip 5025
6.3. lxi-tool
lxi scpi -a my-scope-ip -p 5025 -r '*IDN?'
7. Bench Computer
7.1. Configuration
7.1.1. Install stuff
apt --fix-broken install sudo apt update sudo apt upgrade -y sudo apt install \ emacs emacs-common-non-dfsg emacs-editing-major-modes \ zsh zsh-doc \ tmux \ gitk git-doc \ cu xterm \ ruby ruby-dev ri \ telnet \ imagemagick imagemagick-7-doc nomacs \ kicad kicad-packages3d kicad-doc-en \ gnuplot gnuplot-doc \ octave octave-dev \ ckermit minicom tio \ gtkwave \ sbcl sbcl-doc sbcl-source \ maxima maxima-doc xmaxima maxima-emacs \ liblxi-dev lxi-tools \ pulseview sigrok-cli sigrok \ default-jre swaks enscript graphviz gawk mplayer povray
7.1.2. /usr/local/bin links
for f in ruby perl sbcl; do sudo ln -s /usr/bin/$f /usr/local/bin/$f done
7.1.3. Acount Setup
7.1.3.1. Create directories
mkdir -p ~/bin mkdir -p ~/tmp mkdir -p ~/tmp/tmux/sockets mkdir -p ~/synced/from-bench/; mkdir -p ~/synced/to-bench/; mkdir -p ~/synced/rpi-software/; mkdir -p ~/synced/DataSheets/; mkdir -p ~/synced/ee_parts/; mkdir -p ~/synced/world/ee/; mkdir -p ~/synced/world/dotfiles/; mkdir -p ~/synced/world/dotfilesSecure/; mkdir -p ~/synced/world/stuff/homeNetwork/; mkdir -p ~/synced/world/stuff/my_ref/; mkdir -p ~/synced/world/stuff/notes/; mkdir -p ~/synced/world/my_prog/dir-inventory/; mkdir -p ~/synced/world/my_prog/learn/ex-ruby/; mkdir -p ~/synced/world/my_prog/mpms/; mkdir -p ~/synced/world/my_prog/verGo/; mkdir -p ~/synced/world/my_prog/lineSets/; mkdir -p ~/synced/world/my_prog/tmuxHelper/; mkdir -p ~/synced/world/my_prog/UNIXutils/; mkdir -p ~/synced/world/my_prog/utils/; mkdir -p ~/synced/core/;
7.1.3.2. Create Links
cd
ln -s synced/world world
ln -s synced/core core
7.1.3.3. Change my shell
sudo usermod -s /usr/bin/zsh richmit
7.1.3.4. Setup up ssh keys
Create .ssh directory on bench-pi
cd
mkdir .ssh
chmod 700 .ssh
On primary workstation, extract public key and copy it to bench-pi.
cd ~/.ssh
ssh-keygen -y -f $(ls id_rsa_benchpi_* | tail -n 1) > tmp
scppw tmp bench-pi.home.mitchr.me:.ssh/authorized_keys
rm tmp
7.1.3.5. Sync data from workstation
See
7.1.3.6. Setup up dot files
~/world/my_prog/UNIXutils/SelectSetup.rb --loc=HOME; ~/world/my_prog/UNIXutils/SetupBin.rb
7.1.4. Bench Data Sync From Off Bench
date; echo back-sync; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --rsh='ssh' bench-pi.home.mitchr.me:synced/from-bench/ /c/Users/richmit/MJR/world/bench-pi/from-bench/; date; echo forw-sync; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --rsh='ssh' /c/Users/richmit/MJR/world/bench-pi/to-bench/ bench-pi.home.mitchr.me:synced/to-bench/; date; echo rpi-soft; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/softwareArchive/rpi/ bench-pi.home.mitchr.me:synced/rpi-software/; date; echo datasheets; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/reading/Doc2/ee/DataSheets/ bench-pi.home.mitchr.me:synced/DataSheets/; date; echo ee_parts; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/dataArch/ee_parts/ bench-pi.home.mitchr.me:synced/ee_parts/; date; echo te-stuff; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/ee/ bench-pi.home.mitchr.me:synced/world/ee/; date; echo dotfiles; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/dotfiles/ bench-pi.home.mitchr.me:synced/world/dotfiles/; date; echo dotfilesSecure; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/dotfilesSecure/ bench-pi.home.mitchr.me:synced/world/dotfilesSecure/; date; echo homeNetwork; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/homeNetwork/ bench-pi.home.mitchr.me:synced/world/stuff/homeNetwork/; date; echo my_ref; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/my_ref/ bench-pi.home.mitchr.me:synced/world/stuff/my_ref/; date; echo notes; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/stuff/notes/ bench-pi.home.mitchr.me:synced/world/stuff/notes/; date; echo dir-inventory; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/dir-inventory/ bench-pi.home.mitchr.me:synced/world/my_prog/dir-inventory/; date; echo ruby-examples; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/learn/ex-ruby/ bench-pi.home.mitchr.me:synced/world/my_prog/learn/ex-ruby/; date; echo ruby-examples; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/mpms/ bench-pi.home.mitchr.me:synced/world/my_prog/mpms/; date; echo ruby-examples; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/verGo/ bench-pi.home.mitchr.me:synced/world/my_prog/verGo/; date; echo lineSets; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/lineSets/ bench-pi.home.mitchr.me:synced/world/my_prog/lineSets/; date; echo tmuxHelper; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/tmuxHelper/ bench-pi.home.mitchr.me:synced/world/my_prog/tmuxHelper/; date; echo UNIXutils; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/UNIXutils/ bench-pi.home.mitchr.me:synced/world/my_prog/UNIXutils/; date; echo utils; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/world/my_prog/utils/ bench-pi.home.mitchr.me:synced/world/my_prog/utils/; date; echo core; rsync -rlt --log-format=%f --delete --delete-excluded --modify-window=2 --exclude '.git' --rsh='ssh' /c/Users/richmit/MJR/core/ bench-pi.home.mitchr.me:synced/core/; date
7.1.5. Display
We want screen blanking, but it can get confused if the display is blanked and then switches to another input. Add the following to
/boot/firmware/config.txt:
## Keep RPI screen connection when screen is switched to another computer # HDMI output with sound -- no DVI mode hdmi_drive=2 # DMT (Display Monitor Timings) group. hdmi_group=2 # 1920x1080 @ 60Hz. hdmi_mode=82 # Force the RPI to act like the HDMI display is always connected #hdmi_force_hotplug=1 hdmi_force_hotplug:0=1
7.1.6. Waveforms
sudo dpkg -i ~/synced/rpi-software/digilent-2025-01/digilent.adept.runtime_2.27.9-arm64.deb sudo dpkg -i ~/synced/rpi-software/digilent-2025-01/digilent.waveforms_3.24.4_arm64.deb
7.1.7. Serial'ish Hardware Setup
7.1.7.1. buspirate5
echo 'SUBSYSTEM=="tty", ATTRS{interface}=="Bus Pirate CDC", GROUP="dialout", MODE="0660", SYMLINK+="buspirate5"' | sudo tee /etc/udev/rules.d/99-buspirate5.rules sudo chmod a+r /etc/udev/rules.d/99-buspirate5.rules
7.1.7.2. SPI Driver
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="DO02C6OO", GROUP="dialout", MODE="0660", SYMLINK+="spidriver"' | sudo tee /etc/udev/rules.d/99-spidriver.rules sudo chmod a+r /etc/udev/rules.d/99-spidriver.rules
7.1.7.3. I2C Driver
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="DO02C6UI", GROUP="dialout", MODE="0660", SYMLINK+="i2cdriver"' | sudo tee /etc/udev/rules.d/99-i2cdriver.rules sudo chmod a+r /etc/udev/rules.d/99-i2cdriver.rules
7.1.7.4. HUP udev
sudo udevadm control --reload-rules sudo udevadm trigger
7.1.8. SPI Driver Software
7.1.8.1. Download Compile
I install this stuff in the root of my home directory on the bench-pi.
cd ~ rm -rf spidriver git clone 'https://github.com/jamesbowman/spidriver' cd spidriver gcc -o spicl -I c/common c/linux/spi.c c/common/spidriver.c
7.1.8.2. Test
./spicl /dev/spidriver i ./spicl /dev/spidriver s a 1 a 0 w 0x2a u
7.1.9. I2CDriver Software
7.1.9.1. Download & Compile
I install this stuff in the root of my home directory on the bench-pi.
cd ~ rm -rf i2cdriver git clone 'https://github.com/jamesbowman/i2cdriver.git' cd i2cdriver gcc -o i2ccl -I c/common c/linux/i2c.c c/common/i2cdriver.c
7.1.9.2. Test
./i2ccl /dev/i2cdriver i
7.2. Access To Bench From Off Bench
7.2.1. SSH
ssh bench-pi.home.mitchr.me
7.2.2. SSH forwards
For systems on networks unable to access the bench network, I use SSH tunnels via bench-pi to connect to the instruments directly. I prefer to create these
tunnels automatically when I ssh to bench-pi, and so I have several LocalForward statements in the bench-pi section of my ~/.ssh/config file. If we
have an already running session that has created the tunnels, then starting a new ssh session will result in numerous warning messages about the tunnels
already existing. I automatically generate this part of the configuration file from the data table in this org-mode document via a bit of lisp.
LocalForward 127.0.0.1:5900 oscope-sig.home.mitchr.me:5900 LocalForward 127.0.0.1:9001 awg-agilent.home.mitchr.me:5025 LocalForward 127.0.0.1:9002 awg-agilent.home.mitchr.me:443 LocalForward 127.0.0.1:9003 gpib-rover.home.mitchr.me:1234 LocalForward 127.0.0.1:9004 serial.home.mitchr.me:10001 LocalForward 127.0.0.1:9005 gpib-rover.home.mitchr.me:1234 LocalForward 127.0.0.1:9006 awg-rigol.home.mitchr.me:5555 LocalForward 127.0.0.1:9007 awg-rigol.home.mitchr.me:80 LocalForward 127.0.0.1:9008 oscope-rigol.home.mitchr.me:5555 LocalForward 127.0.0.1:9009 oscope-rigol.home.mitchr.me:80 LocalForward 127.0.0.1:9010 dmm-keithley.home.mitchr.me:5025 LocalForward 127.0.0.1:9011 dmm-keithley.home.mitchr.me:80 LocalForward 127.0.0.1:9012 ps-rns.home.mitchr.me:5025 LocalForward 127.0.0.1:9013 ps-rns.home.mitchr.me:80 LocalForward 127.0.0.1:9014 oscope-sig.home.mitchr.me:5025 LocalForward 127.0.0.1:9015 oscope-sig.home.mitchr.me:80 LocalForward 127.0.0.1:9016 serial.home.mitchr.me:80 LocalForward 127.0.0.1:9017 serial.home.mitchr.me:10002 LocalForward 127.0.0.1:9018 oscope-tek.home.mitchr.me:80 LocalForward 127.0.0.1:9019 gpib-rover.home.mitchr.me:1234 LocalForward 127.0.0.1:9020 serial.home.mitchr.me:10003 LocalForward 127.0.0.1:9021 oscope-tek.home.mitchr.me:80
We use 5900 on local side for the oscope-sig VNC forward because the scope's built in web site uses client side javascript to grab screenshots via VNC. Ugh…
7.3. Using teAlias.rb For Access Information
teAlias.rb provides a way to keep track of instrument IP addresses and access methods. To open Microsoft Edge and connect to my Tektronix TDS3052B:
start msedge `teAlias.rb @3052w`
Fire up chromium and connect to my Tektronix TDS3052B.
chromium-browser `teAlias.rb @3052w`
7.4. mrSCPIrc file
The "nickname" section of my mrSCPIrc configuration provides information that lets mrSCPI find test equipment using short aliases. I generate this part
of the configuration file from the data table in this org-mode document via a bit of lisp. Here are the nicknames:
nickname 33210ae 33210a aawge aawg => bench@raw://awg-agilent.home.mitchr.me:5025 ssh@raw://127.0.0.1:9001 nickname 33210aw aawgw => bench@https://awg-agilent.home.mitchr.me:443 ssh@https://127.0.0.1:9002 nickname 34401ap dmmp => bench@plgx://gpib-rover.home.mitchr.me:1234 ssh@plgx://127.0.0.1:9003 nickname 34401as 34401a dmms dmm => bench@soip://serial.home.mitchr.me:10001 ssh@soip://127.0.0.1:9004 nickname 53131ap 53131a countp count => bench@plgx://gpib-rover.home.mitchr.me:1234 ssh@plgx://127.0.0.1:9005 nickname dg2052e dg2052 dg2ke dg2k => bench@raw://awg-rigol.home.mitchr.me:5555 ssh@raw://127.0.0.1:9006 nickname dg2052w dg2kw => bench@http://awg-rigol.home.mitchr.me:80 ssh@http://127.0.0.1:9007 nickname dho4204e dho4204 dho4ke dho4k => bench@raw://oscope-rigol.home.mitchr.me:5555 ssh@raw://127.0.0.1:9008 nickname dho4204w dho4kw => bench@http://oscope-rigol.home.mitchr.me:80 ssh@http://127.0.0.1:9009 nickname dmm6500e dmm6500 6500e 6500 => bench@raw://dmm-keithley.home.mitchr.me:5025 ssh@raw://127.0.0.1:9010 nickname dmm6500w 6500w => bench@http://dmm-keithley.home.mitchr.me:80 ssh@http://127.0.0.1:9011 nickname hmc8043e hmc8043 pse ps => bench@raw://ps-rns.home.mitchr.me:5025 ssh@raw://127.0.0.1:9012 nickname hmc8043w psw => bench@http://ps-rns.home.mitchr.me:80 ssh@http://127.0.0.1:9013 nickname sds2504xpe sds2504xp sig2ke sig2k => bench@raw://oscope-sig.home.mitchr.me:5025 ssh@raw://127.0.0.1:9014 nickname sds2504xpw sig2kw => bench@http://oscope-sig.home.mitchr.me:80 ssh@http://127.0.0.1:9015 nickname serialw serial => bench@http://serial.home.mitchr.me:80 ssh@http://127.0.0.1:9016 nickname tds2024s tek2ks tek2k => bench@soip://serial.home.mitchr.me:10002 ssh@soip://127.0.0.1:9017 nickname tds3052bh tds3052b tek3kh tek3k => bench@t3k://oscope-tek.home.mitchr.me:80 ssh@t3k://127.0.0.1:9018 nickname tds3052bp tek3kp => bench@plgx://gpib-rover.home.mitchr.me:1234 ssh@plgx://127.0.0.1:9019 nickname tds3052bs tek3ks => bench@soip://serial.home.mitchr.me:10003 ssh@soip://127.0.0.1:9020 nickname tds3052bw tek3kw => bench@http://oscope-tek.home.mitchr.me:80 ssh@http://127.0.0.1:9021
8. Document Meta Data
- Master location for org-mode source code for this document
- https://github.com/richmit/TestEquipmentNotes/blob/main/index.org
- Master location for the HTML rendered from org-mode source for this document
- https://richmit.github.io/TestEquipmentNotes/
- Repository with all code and data for this document
- https://github.com/richmit/TestEquipmentNotes
9. Detailed TOC
Table of Contents
- 1. Table of Contents
- 2. SCPI Connected Instruments
- 2.1. Rohde & Schwarz HMC8043 Power Supply
- 2.2. Agilent 33210A Arbitrary Waveform Generator
- 2.3. Keysight 34401A Bench Digital Multimeter
- 2.4. HP 53131A Counter
- 2.5. Keithley DMM6500 Bench Digital Multimeter
- 2.6. Rigol DHO4204 High Resolution Digital Oscilloscope
- 2.7. Siglent SDS2504X Plus Super Phosphor Oscilloscope
- 2.8. Tektronix TDS2024 Digital Storage Oscilloscope
- 2.9. Tektronix TDS3052B Digital Phosphor Oscilloscope
- 2.9.1. Links
- 2.9.2. Documentation (These links only work on my personal laptop)
- 2.9.3. Local LAN Settings & Addresses (These links only work on my home network)
- 2.9.4. Notes
- 2.9.5. Serial Settings (Lantronix console server)
- 2.9.6. View scope VGA output via video capture device on bench-pi
- 2.9.7. Web Interface
- 2.9.8. Remote Control
- 2.10. Rigol DG2052 Function/Arbitrary Waveform Generator
- 3. Virtual Instruments
- 4. ARM Programmers
- 5. Disconnected Instruments
- 5.1. Tektronix AN/USM-488 or 2235 Analog Oscilloscope
- 5.2. Tektronix 2205 Analog Oscilloscope
- 5.3. Fluke 54 II Data Logging Thermometer with Dual Input
- 5.4. B&K Precision 1621A Power Supply
- 5.5. HIOKI 3030-10 HiTESTER
- 5.6. Sanwa EM7000 FET multitester
- 5.7. Gossen-Metrawatt METRAmax2 Analog Multimeter
- 5.8. Keysight U1233A Handheld DMM
- 5.9. Thurlby Thandar Instruments WA301 Wideband Amplifier
- 5.10. Fluke 107 Pocket Digital Multimeter
- 6. Sending SCPI commands over IP network from command line
- 7. Bench Computer
- 7.1. Configuration
- 7.2. Access To Bench From Off Bench
- 7.3. Using
teAlias.rbFor Access Information - 7.4. mrSCPIrc file
- 8. Document Meta Data
- 9. Detailed TOC












