Agilent B1500A Semiconductor Device Analyzer VXIplug&play Driver User’s Guide Agilent Technologies
Notices © Agilent Technologies 2005, 2006, 2011 Warranty No part of this manual may be reproduced in any form or by any means (including electronic storage and retrieval or translation into a foreign language) without prior agreement and written consent from Agilent Technologies, Inc. as governed by United States and international copyright laws. The material contained in this document is provided “as is,” and is subject to being changed, without notice, in future editions.
In This Manual This manual describes the installation and reference information of the VXIplug&play driver for the Agilent B1500, and consists of the following chapters: • Chapter 1, “Installation” Describes the installation information of the B1500 VXIplug&play driver. • Chapter 2, “Driver Functions” Describes the reference information of the B1500 VXIplug&play driver.
Contents 1. Installation System Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 Installing VXIplug&play Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4 Before Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6 2. Driver Functions Function List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contents agb1500_cmdString_Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . agb1500_dcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . agb1500_error_message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . agb1500_error_query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . agb1500_errorQueryDetect . . . . . . . . . . . . . . . . . . . . . . .
Contents agb1500_setAdcType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-46 agb1500_setBdv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-47 agb1500_setCmuAdjustMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-48 agb1500_setCmuFreq. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-48 agb1500_setCmuInteg . . . . . . . . . . . . . . . . . . . .
Contents 3. Programming Examples for Visual Basic Users Programming Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3 To Create Your Project Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3 To Create Measurement Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6 High Speed Spot Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Contents Breakdown Voltage Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-37 Leakage Current Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-39 Sampling Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-41 High Speed Spot C Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-45 CV Sweep Measurement . . . . . . . . . . . . . . . . . . . . . .
Contents Agilent B1500 VXIplug&play Driver User’s Guide, Edition 3
1 Installation
Installation This chapter describes the system requirements and installation procedure for the Agilent B1500 VXIplug&play driver.
Installation System Requirements The following system environments are required. • Operating System Microsoft Windows 7 Professional or Windows XP Professional. It must be supported by the application development environment. • Application Development Environment (programming environment) Microsoft Visual Basic, Microsoft Visual C++, Borland C++Builder, National Instruments LabWindows/CVI or LabView, or Agilent VEE.
Installation Installing VXIplug&play Driver The installation flow is shown below. If you have already installed the GPIB (IEEE 488) interface, VISA I/O library, and programming software on your computer, skip steps 1 through 4. 1. Install the GPIB interface to your PC. See manual of the GPIB interface. Note the model number of the GPIB interface, as you may need it to configure the interface (in step 3). 2. Install VISA I/O library. Follow the setup program instructions. 3.
Installation Table 1-1 Agilent B1500 VXIplug&play Driver Files File Name a Description \Winnt\Agb1500\agb1500.bas Driver for Microsoft Visual Basic \Winnt\Agb1500\agb1500.c Driver source code file \Winnt\Agb1500\agb1500.def DLL export definition file \Winnt\Agb1500\agb1500.fp Front panel file \Winnt\Agb1500\agb1500.h Driver header file \Winnt\Agb1500\agb1500.
Installation Before Programming Before starting the programming using the Agilent B1500 VXIplug&play driver, perform following. 1. Terminate the Agilent EasyEXPERT software as follows. a. Select File > Exit on the EasyEXPERT main window. b. Click [x] at the upper right corner of the Start EasyEXPERT button. 2. Open the Agilent Connection Expert window by clicking Agilent IO Control icon on the Windows task bar and selecting Agilent Connection Expert. 3. Change the following setup items as shown below.
2 Driver Functions
Driver Functions This chapter is the complete reference of VXIplug&play driver for the Agilent B1500. NOTE • “Function List” • “Parameters” • “Status Code” • “Function Reference” Additional information See the on-line help of the VXIplug&play drivers, or open the Agb1500.hlp file in the directory that the driver is installed. See “Installing VXIplug&play Driver” on page 1-4. For measurement functions of the Agilent B1500, see Agilent B1500 Programming Guide.
Driver Functions Function List Table 2-1 lists all the driver functions for the Agilent B1500. You will see a brief description of the functions in the table. Table 2-1 Category B1500 Driver Functions Function Description Initialize agb1500_init Initializes the software connection with the B1500. Close agb1500_close Closes the software connection with the B1500. Miscellaneous agb1500_autoCal Sets the auto calibration mode agb1500_resetTimestamp Clears the timer count (time stamp data).
Driver Functions Category Spot measurement Spot C measurement Pulsed spot measurement Function Description agb1500_force Applies DC current or voltage from the specified SMU. agb1500_spotMeas Performs high speed spot measurement. agb1500_measureM Performs spot measurement by multiple channels. agb1500_force Applies DC current or voltage from the specified SMU. agb1500_setCmuFreq Sets the MFCMU measurement frequency. agb1500_forceCmuAcLevel Applies AC voltage from the MFCMU.
Driver Functions Category Function Staircase sweep agb1500_force with pulsed bias agb1500_setIv measurement agb1500_setPbias Multi channel sweep measurement Sampling measurement Breakdown voltage measurement Description Applies DC current or voltage from the specified SMU. Sets the sweep source. Sets the pulsed bias source. agb1500_setSweepSync Sets the synchronous sweep source. agb1500_stopMode Sets automatic sweep abort and post sweep output.
Driver Functions Category Function Description Leakage current agb1500_force measurement agb1500_setIleak Applies DC current or voltage from the specified SMU. Sets the quasi pulse source. agb1500_measureIleak Performs quasi pulsed spot leakage current measurement. agb1500_force Applies DC current or voltage from the specified SMU. agb1500_setCmuFreq Sets the MFCMU measurement frequency. agb1500_forceCmuAcLevel Applies AC voltage from the MFCMU. agb1500_setCv Sets the DC bias sweep source.
Driver Functions Category MFCMU data correction Passthrough Functions Function Description agb1500_setCmuAdjustMode Selects the correction data setup mode for the MFCMU. agb1500_execCmuAdjust Gets the correction data for the MFCMU. agb1500_setLoadCorrMode Sets the CMU load correction function ON or OFF. agb1500_execLoadCorr Performs the CMU load correction agb1500_setOpenCorrMode Sets the CMU open correction function ON or OFF.
Driver Functions Parameters The parameters used by several functions are explained in this section. • “channel value” • “SMU range value and ranging mode” • “SMU output voltage, resolution, and compliance by range” • “SMU output current, resolution, and compliance by range” • “MFCMU measurement parameters” • “MFCMU measurement range” In this section, the parameters are put in italics such as channel. NOTE Macros Some functions can use macros to set the parameter values.
Driver Functions Table 2-3 SMU range value and ranging mode Available range values a b Ranging mode used for output/measurement range = 0 Auto ranging 0 < |range| ≤ 0.5 V 0.5 V limited auto ranging 0.
Driver Functions NOTE Auto ranging mode SMU uses the optimum range to force/measure voltage or current. NOTE Limited auto ranging mode SMU uses the optimum range to force/measure voltage or current. Then, the SMU never uses the range less than the specified range. Table 2-4 SMU output voltage, resolution, and compliance by range Output range (actually used) Setting resolution in V 0.5 V 25E-6 2V Output voltage a in V Maximum comp value b in A HPSMU MPSMU HRSMU 0 to ± 0.
Driver Functions Table 2-5 SMU output current, resolution, and compliance by range Output range (actually used) Setting resolution in A Output current a in A 1 pA 1E-15 0 to ± 1.15 E-12 10 pA 5E-15 0 to ± 11.5 E-12 ±100 100 pA 5E-15 0 to ± 115 E-12 ±100 1 nA 50E-15 0 to ± 1.15 E-9 ±200 ±100 ±100 10 nA 500E-15 0 to ± 11.5 E-9 ±200 ±100 ±100 100 nA 5E-12 0 to ± 115 E-9 ±200 ±100 ±100 1 μA 50E-12 0 to ± 1.15E-6 ±200 ±100 ±100 10 μA 500E-12 0 to ± 11.
Driver Functions Table 2-6 MFCMU measurement parameters mode 2-12 Primary Parameter Secondary Parameter 1 R (resistance, Ω) X (reactance, Ω) 2 G (conductance, S) B (susceptance, S) 10 Z (impedance, Ω) θ (phase, radian) 11 Z (impedance, Ω) θ (phase, degree) 20 Y (admittance, S) θ (phase, radian) 21 Y (admittance, S) θ (phase, degree) 100 Cp (parallel capacitance, F) G (conductance, S) 101 Cp (parallel capacitance, F) D (dissipation factor) 102 Cp (parallel capacitance, F) Q (q
Driver Functions Table 2-7 MFCMU measurement range Measurement range a range ≤ 200 kHz range = 0 ≤ 2 MHz ≤ 5 MHz auto ranging 0 < range < 100 50 Ω 50 Ω 50 Ω 100 ≤ range < 300 100 Ω 100 Ω 100 Ω 300 ≤ range < 1000 300 Ω 300 Ω 300 Ω 1000 ≤ range < 3000 1 kΩ 1 kΩ 1 kΩ 3000 ≤ range < 10000 3 kΩ 3 kΩ 3 kΩ 10000 ≤ range < 30000 10 kΩ 10 kΩ 30000 ≤ range < 100000 30 kΩ 30 kΩ 100000 ≤ range < 300000 100 kΩ 300000 ≤ range 300 kΩ a.
Driver Functions Status Code After measurement is performed, the Agilent B1500 returns a status code to notify you if the measurement has been completed successfully. The status code will be returned with the measurement data by the following functions that perform measurement. Available status values are listed in Table 2-8.
Driver Functions Table 2-8 Status Values Value Bit 0 - 1 1 (LSB) 2 2 Description No error. A/D converter overflowed. One or more channels are oscillating. For SMU. MFCMU is in the NULL loop unbalance condition. 4 3 Another channel reached its compliance setting. For SMU. MFCMU is in the IV amplifier saturation condition. 8 4 This channel reached its compliance setting. Normal post-measurement state by agb1500_measureBdv. 16 5 Target value was not found within the search range.
Driver Functions agb1500_abortMeasure Function Reference This section describes the functions of VXIplug&play driver for the Agilent B1500. The functions are appeared in alphabetical order. agb1500_abortMeasure This function aborts the B1500’s present operation, such as the measurement executed by the agb1500_startMeasure function, the dc bias output by the agb1500_force function, and so on.
Driver Functions agb1500_asuLed agb1500_asuLed This function is available for the Agilent B1500 installed with the high resolution SMU (HRSMU) and the atto sense and switch unit (ASU). Disables or enables the connection status indicator (LED) of the ASU. This function is effective for the specified channel. Syntax ViStatus _VI_FUNC agb1500_asuLed(ViSession vi, ViInt32 channel, ViInt32 mode); Parameters vi Instrument handle returned from agb1500_init( ).
Driver Functions agb1500_asuRange path NOTE Path connected to the ASU output. 1 (the ASU output will be connected to the SMU connector side) or 2 (the ASU output will be connected to the AUX connector side). To use ASU To use the ASU, connect it to the correct HRSMU properly before turning the Agilent B1500A on. For the connection, see User’s Guide. The ASU will add the connection switch function described above to the B1500A and the 1 pA measurement range to the HRSMU.
Driver Functions agb1500_clearCorrData agb1500_clearCorrData This function clears the CMU open/short/load correction data. Syntax ViStatus _VI_FUNC agb1500_clearCorrData(ViSession vi, ViInt32 channel, ViInt32 mode); Parameters vi Instrument handle returned from agb1500_init( ). channel Slot number of the slot that installs the MFCMU to be used. See Table 2-2. channel=-1 detects the slot automatically. mode 0: Resets frequency settings after clearing the correction data.
Driver Functions agb1500_cmd agb1500_cmd This function passes the cmd_str string to the instrument. Must be a NULL terminated C string. Syntax ViStatus _VI_FUNC agb1500_cmd(ViSession vi, ViString cmd_str); Parameters vi Instrument handle returned from agb1500_init( ). cmd_str Instrument command (cannot exceed 256 bytes in length). Example ViSession vi; ViStatus ret; ret = agb1500_cmd(vi, "AB"); /* sends the AB command */ agb1500_cmdData_Q This function passes the cmd_str string to the instrument.
Driver Functions agb1500_cmdInt16Arr_Q value Parameter for command. -2147483647 to 2147483647. agb1500_cmdInt16Arr_Q This function passes the cmd_str string to the instrument. This function expects a response that is a definite arbitrary block of 16 bit integers. You specify the cmd_str and size parameters, and get result[ ] and count.
Driver Functions agb1500_cmdInt32_Q Parameters vi Instrument handle returned from agb1500_init( ). cmd_str Instrument command (cannot exceed 256 bytes in length). size Size of result[ ] (number of items in the array). 1 to 2147483647. result[ ] Response from instrument. count Count of valid items in result[ ]. Returned data. agb1500_cmdInt32_Q This function passes the cmd_str string to the instrument. This function expects a response that can be returned as a 32 bit integer.
Driver Functions agb1500_cmdReal64_Q Syntax ViStatus _VI_FUNC agb1500_cmdReal64Arr_Q(ViSession vi, ViString cmd_str, ViInt32 size, ViReal64 _VI_FAR result[ ], ViPInt32 count); Parameters vi Instrument handle returned from agb1500_init( ). cmd_str Instrument command (cannot exceed 256 bytes in length). size Size of result[ ] (number of items in the array). 1 to 2147483647. result[ ] Response from instrument. count Count of valid items in result[ ]. Returned data.
Driver Functions agb1500_dcl agb1500_dcl This function sends a device clear (DCL) to the instrument. A device clear will abort the present operation and enable the instrument to accept a new command or query. This is particularly useful in situations where it is not possible to determine the instrument state. In this case, it is customary to send a device clear before issuing a new instrument driver function. The device clear ensures that the instrument will be able to begin processing the new commands.
Driver Functions agb1500_errorQueryDetect error_message[ ] Instrument’s error message. Returned data. This is limited to 256 characters. agb1500_errorQueryDetect This function enables or disables automatic instrument error checking. If automatic error checking is enabled then the driver will query the instrument for an error at the end of each function call.
Driver Functions agb1500_execLoadCorr channel Slot number of the slot that installs the MFCMU to be used. See Table 2-2. channel=-1 detects the slot automatically. result Execution result of this function. Returned value. 0: Passed. No failure detected. 1: Failed. 2: Aborted. agb1500_execLoadCorr This function performs the CMU load correction for the specified measurement frequency, and sets the correction data to the B1500. This function also returns the execution results.
Driver Functions agb1500_execOpenCorr 0: Passed. No failure detected. 1: Failed. 2: Aborted. agb1500_execOpenCorr This function performs the CMU open correction for the specified measurement frequency, and sets the correction data to the B1500. This function also returns the execution results. This function initializes the MFCMU. To execute this function, open the measurement terminals at the end of the device side, or connect the open standard that has the reference value or calibration value.
Driver Functions agb1500_execShortCorr agb1500_execShortCorr This function performs the CMU short correction for the specified measurement frequency, and sets the correction data to the B1500. This function also returns the execution results. This function initializes the MFCMU. To execute this function, short the measurement terminals at the end of the device side, or connect the short standard that has the reference value or calibration value.
Driver Functions agb1500_forceCmuAcLevel Syntax ViStatus _VI_FUNC agb1500_force(ViSession vi, ViInt32 channel, ViInt32 mode, ViReal64 range, ViReal64 value, ViReal64 comp, ViInt32 polarity); NOTE range, value, comp parameters Available values depend on the unit. See “Parameters” on page 2-8. Parameters vi Instrument handle returned from agb1500_init( ). channel Slot number of the slot that installs the SMU to be used. See Table 2-2. mode Source output mode. 1 (current) or 2 (voltage).
Driver Functions agb1500_forceCmuDcBias agb1500_forceCmuDcBias This function forces DC voltage from the MFCMU or the SMU connected to the Force1/Sense1 terminals of the SCUU (SMU CMU unify unit). If you want to apply DC voltage over ±25 V, the SCUU must be connected correctly. The SCUU can be used with the MFCMU and two SMUs (MPSMU or HRSMU). The SCUU cannot be used if the HPSMU is connected to the SCUU or if the number of SMUs connected to the SCUU is only one.
Driver Functions agb1500_measureBdv id_query VI_TRUE (to perform system verification), or VI_FALSE (do not perform system verification). do_reset VI_TRUE (to perform reset operation), or VI_FALSE (do not perform reset operation). vi Instrument handle. This is VI_NULL if an error occurred during the init. agb1500_measureBdv This function triggers quasi-pulsed spot measurement to measure breakdown voltage, and returns breakdown voltage data and measurement status data.
Driver Functions agb1500_measureM channel Slot number of the slot that installs the SMU to be used. See Table 2-2. interval Settling detection interval. 0 (interval short) or 1 (interval long). value Leakage current measurement result. Returned data. status Measurement status. Returned data. See “Status Code” on page 2-14. To disable the status data output, set 0 (NULL pointer) instead.
Driver Functions agb1500_measureP Example ViSession vi; ViStatus ret; ViReal64 v1 = 3; /* output voltage */ ViInt32 vmode = 2; /* voltage output mode */ ViInt32 mch[3]; /* source and measurement channels */ mch[0] = 1; /* SMU1 for the 1st measurement channel*/ mch[1] = 2; /* SMU2 for the 2nd measurement channel*/ mch[2] = 0; ret = agb1500_setSwitch(vi, mch[0], 1); ret = agb1500_setSwitch(vi, mch[1], 1); ret = agb1500_force(vi, mch[0], vmode, 0, 0, 0.1, 0); ret = agb1500_force(vi, mch[1], vmode, 0, v1, 0.
Driver Functions agb1500_msweepIv agb1500_msweepIv This function performs sweep measurement, and returns the number of measurement steps, sweep source data, measurement data, measurement status, and time stamp data. Before this function, execute the agb1500_setIv function to set the primary sweep source and execute the agb1500_setNthSweep function to set an synchronous sweep source. Up to nine synchronous sweep sources can be set by using the agb1500_setNthSweep function for each channel.
Driver Functions agb1500_msweepIv ViReal64 ve = 0; ViReal64 ibcomp = 0.01; ViReal64 iccomp = 0.1; ViReal64 iecomp = 0.
Driver Functions agb1500_msweepMiv agb1500_msweepMiv This function performs a multi channel sweep measurement using up to ten measurement channels at a time, and returns the number of measurement steps, sweep source data, measurement data, measurement status, and time stamp data. Before this function, execute the agb1500_setIv function to set the primary sweep source and execute the agb1500_setNthSweep function to set an synchronous sweep source.
Driver Functions agb1500_msweepMiv Example ViSession vi; ViStatus ret; ViInt32 emitter = 1; /* SMU1 */ ViInt32 base = 2; /* SMU2 */ ViInt32 collector = 4; /* SMU4 */ ViReal64 vb1 = 0.25; ViReal64 vb2 = 0.75; ViReal64 vc = 3; ViReal64 ve = 0; ViReal64 ibcomp = 0.01; ViReal64 iccomp = 0.1; ViReal64 iecomp = 0.1; ViReal64 pcomp = 0.
Driver Functions agb1500_opc_Q agb1500_opc_Q This function does the *OPC? common command. Syntax ViStatus _VI_FUNC agb1500_opc_Q(ViSession vi, ViPBoolean result); Parameters vi Instrument handle returned from agb1500_init( ). result *OPC? command execution result. Returned data. VI_TRUE (Operation complete), or VI_FALSE (Operation is pending).
Driver Functions agb1500_readStatusByte_Q 15: Sampling index 16: Invalid data -1: No channel related data value Measurement data or source setup data. Returned data. status Status. Returned data. See “Status Code” on page 2-14. To disable the status data output, set 0 (NULL pointer) instead. channel Slot number of the slot that installs the SMU/MFCMU used for measurement/output. Returned data. If value is regardless of channel settings, -1 is returned.
Driver Functions agb1500_reset agb1500_reset This function places the instrument in a default state. Before issuing this function, it may be necessary to send a device clear to ensure that the instrument can execute a reset. A device clear can be issued by invoking agb1500_dcl function. Syntax ViStatus _VI_FUNC agb1500_reset(ViSession vi); Parameters vi Instrument handle returned from agb1500_init( ). agb1500_resetTimestamp This function clears the count of the timer (time stamp).
Driver Functions agb1500_sampleIv agb1500_sampleIv This function executes a sampling measurement by the specified channels, and returns the number of measurement points, measurement data index, measurement data, measurement status, and time stamp data. Before this function, execute the agb1500_setSample function to set the sampling timing and execute the agb1500_setSampleMode function to set the sampling mode.
Driver Functions agb1500_sampleIv Example ViSession vi; ViStatus ret; ViInt32 mch[3]; /* measurement channels */ mch[0] = 1; mch[1] = 2; mch[2] = 0; ret = agb1500_setSwitch(vi, mch[0], 1); ret = agb1500_setSwitch(vi, mch[1], 1); ViReal64 h_bias = 0.1; /* bias hold time */ ViReal64 h_base = 0.1; /* base hold time */ ViReal64 intvl = 0.
Driver Functions agb1500_scuuLed agb1500_scuuLed This function is available for the Agilent B1500 installed with the multi frequency capacitance measurement unit (MFCMU) and the SMU CMU unify unit (SCUU). To use the SCUU, connect it to the MFCMU and two SMUs (MPSMU or HRSMU) correctly. The SCUU cannot be used with the HPSMU or when only one SMU is connected. This function enables or disables the connection status indicator of the SCUU.
Driver Functions agb1500_scuuPath agb1500_scuuPath This function is available for the Agilent B1500 installed with the multi frequency capacitance measurement unit (MFCMU) and the SMU CMU unify unit (SCUU). To use the SCUU, connect it to the MFCMU and two SMUs (MPSMU or HRSMU) correctly. The SCUU cannot be used with the HPSMU or when only one SMU is connected. This function is not effective when the High Voltage indicator of the Agilent B1500 has been lighted.
Driver Functions agb1500_self_test Table 2-9 SCUU Input Output Connection Control SCUU output connection after the function path CMUH/Force1/Sense1 CMUL/Force2/Sense2 1 Force1/Sense1 Open 2 Open Force2/Sense2 3 Force1/Sense1 Force2/Sense2 4 CMUH CMUL where, MFCMU will be installed in the slot numbered slot. Then, Force1/Sense1 is connected to the SMU installed in the slot numbered slot-1. And Force2/Sense2 is connected to the SMU installed in the slot numbered slot-2.
Driver Functions agb1500_setAdc agb1500_setAdc This function sets the integration time or number of samples that is taken or averaged for the measurement. See also “agb1500_setAdcType”. Syntax ViStatus _VI_FUNC agb1500_setAdc(ViSession vi, ViInt32 adc, ViInt32 mode,ViInt32 value, ViInt32 autozero); Parameters vi Instrument handle returned from agb1500_init( ). adc A/D converter type. 0 (high-speed) or 1 (high-resolution). mode Integration/averaging mode. 0 (auto), 1 (manual), or 2 (PLC).
Driver Functions agb1500_setBdv agb1500_setBdv This function sets the quasi pulse source used to perform breakdown voltage measurement. After the source setup, execute the agb1500_measureBdv function to trigger the measurement. After the measurement trigger, the quasi pulse source keeps the start voltage during the hold time. After the hold time, the quasi pulse source starts the voltage transition and settling detection.
Driver Functions agb1500_setCmuAdjustMode agb1500_setCmuAdjustMode This function selects the phase compensation mode of the MFCMU. After this function, the MFCMU is initialized. Syntax ViStatus _VI_FUNC agb1500_setCmuAdjustMode(ViSession vi, ViInt32 channel, ViInt32 mode); Parameters vi Instrument handle returned from agb1500_init( ). channel Slot number of the slot that installs the MFCMU to be used. See Table 2-2. channel=-1 detects the slot automatically. mode 0: Auto mode.
Driver Functions agb1500_setCv Syntax ViStatus _VI_FUNC agb1500_setCmuInteg(ViSession vi, ViInt32 mode, ViInt32 value); Parameters vi Instrument handle returned from agb1500_init( ). mode Integration/averaging mode. 0 (auto) or 2 (PLC). value Coefficient for a reference value to set the integration time or number of averaging samples. 1 to 1023 for auto mode, or 1 to 100 for PLC mode.
Driver Functions agb1500_setFilter Source module is automatically selected by the setting value. The MFCMU is selected if the voltage from start to stop is ±25 V or less (setting resolution: 0.001 V), or the SMU is selected if it is greater than ±25 V (setting resolution: 0.005 V). The SMU will operate with the 100 V limited auto ranging and 20 mA compliance settings. point Number of sweep steps. 1 to 1001. hold Hold time. 0 to 655.35 seconds, in 0.01 ms resolution. delay Delay time. 0 to 655.
Driver Functions agb1500_setIv b. Output voltage slew rate becomes 1/2 of the rate when starting the settling detection. The condition b means that the quasi-pulse source applies the voltage close to the measurement voltage. Syntax ViStatus _VI_FUNC agb1500_setIleak(ViSession vi, ViInt32 channel, ViReal64 range, ViReal64 voltage, ViReal64 compliance, ViReal64 start, ViReal64 hold, ViReal64 delay); Parameters vi Instrument handle returned from agb1500_init( ).
Driver Functions agb1500_setLoadCorrMode channel Slot number of the slot that installs the SMU to be used. See Table 2-2. mode Source output mode. 1, 2, 3, 4, -1, -2, -3, or -4. For the log sweep mode, start and stop must be the same polarity.
Driver Functions agb1500_setNthSweep Syntax ViStatus _VI_FUNC agb1500_setLoadCorrMode(ViSession vi, ViInt32 channel, ViInt32 mode); Parameters vi Instrument handle returned from agb1500_init( ). channel Slot number of the slot that installs the MFCMU to be used. See Table 2-2. channel=-1 detects the slot automatically. mode 0: CMU load correction function ON. 1: CMU load correction function OFF.
Driver Functions agb1500_setOpenCorrMode mode Source output mode. 1 (current) or 2 (voltage). range Output ranging mode. 0 (auto) or positive value (limited auto). start Sweep start value (in A or V). stop Sweep stop value (in A or V). comp Compliance value (in V or A). It must be voltage for the current sweep source, or current for the voltage sweep source. Compliance polarity is automatically set to the same polarity as the output value, regardless of the specified comp polarity.
Driver Functions agb1500_setPbias Measurement channel always uses the high-speed A/D converter, and performs measurement so that the pulse width and pulse period are kept. The integration time is automatically set by the Agilent B1500, and you cannot change. The agb1500_setAdc and agb1500_setAdcType settings are ignored. Also the timing parameters of the agb1500_setIv function are also ignored.
Driver Functions agb1500_setPiv agb1500_setPiv This function specifies pulsed sweep source and sets the parameters. The pulsed sweep source is used for the pulsed sweep measurements. Measurement channel always uses the high-speed A/D converter, and performs measurement so that the pulse width and pulse period are kept. The integration time is automatically set by the Agilent B1500, and you cannot change. The agb1500_setAdc and agb1500_setAdcType settings are ignored.
Driver Functions agb1500_setSample period Pulse period (in seconds). 0.005 to 5.0 s. 0.1 ms resolution. • period ≥ width +2 msec (for width ≤ 100 ms) • period ≥ width +10 msec (for width > 100 ms) If you set period=0, the B1500 automatically sets the pulse period to 5 msec (for width ≤ 3 ms), width +2 msec (for 3 ms < width ≤ 100 ms), or width +10 msec (for width > 100 ms). comp Compliance value (in V or A). It must be voltage for the current sweep source, or current for the voltage sweep source.
Driver Functions agb1500_setSample interval Interval of the sampling. Numeric expression. in seconds. 0.002 (initial setting) to 65.535 s, 0.001 s resolution. interval < 0.002 s in 0.00001 s resolution is also available for the linear sampling. It must satisfy the following formula. See NOTE below. interval ≥ 0.0001 + 0.00002 × (Num_ch -1) Num_ch: number of measurement channels point Number of samples. Integer expression. 1 to the following value.
Driver Functions agb1500_setSampleMode 3. Another bias_hold seconds later, the measurement channels start measurement for the first sampling point. The measurement channels perform the measurement in series by the order set to the agb1500_sampleIv function. 4. After that, the following operation is repeated with the specified time interval. • Measurement channels start measurement if they are ready to measure. • Measurement channels keep the condition if they are busy.
Driver Functions agb1500_setSerRes mode Sampling mode, linear or logarithm. 0: linear sampling 1: logarithmic sampling, 10 data/decade. 2: logarithmic sampling, 25 data/decade. 3: logarithmic sampling, 50 data/decade. 4: logarithmic sampling, 100 data/decade. 5: logarithmic sampling, 250 data/decade. 6: logarithmic sampling, 500 data/decade. agb1500_setSerRes This function sets the series resistor of the specified channel.
Driver Functions agb1500_setSweepSync agb1500_setSweepSync This function specifies synchronous sweep source and sets the parameters. The synchronous sweep source will be the additional staircase sweep source for the staircase sweep measurements, the pulsed sweep measurements, or the staircase sweep with pulsed bias measurements. The agb1500_setIv or agb1500_setPiv function must be executed before this function.
Driver Functions agb1500_setSwitch comp Compliance value (in V or A). It must be voltage for the current sweep source, or current for the voltage sweep source. Compliance polarity is automatically set to the same polarity as the output value, regardless of the specified comp polarity. The compliance polarity is positive if the output value is 0. p_comp Power compliance. 0.001 to 4.0 VA (for MPSMU), or 0.001 to 20.0 VA (for HPSMU) in 0.001 VA resolution.
Driver Functions agb1500_spotCmuMeas Example channel Slot number of the slot that installs the MFCMU. See Table 2-2. channel=-1 detects the slot automatically. mode MFCMU measurement parameters. 1 to 402. See Table 2-6. Specify a couple of measurement parameters. The MFCMU can measure two parameters. range MFCMU measurement range. 0 (auto) or positive value (fixed range). See Table 2-7. value[ ] Measurement data. Returned data. status[ ] Measurement status. Returned data.
Driver Functions agb1500_spotMeas md[1]: Secondary parameter measurement data (ex: G). st[n]: Status for the md[n] data. mon[0]: MFCMU monitor data (AC level monitor data). mon[1]: MFCMU monitor data (DC bias monitor data). stmon[n]: Status for the mon[n] data. where n=0 or 1. agb1500_spotMeas This function executes a high speed spot measurement by the specified channel, and returns the measurement result data, measurement status, and time stamp data.
Driver Functions agb1500_startMeasure agb1500_startMeasure This function starts the specified measurement by the specified channels. You can read the measured data by using the agb1500_readData function. The measurement data is entered to the B1500 output buffer in the measurement order. If you want to abort the measurement, use the agb1500_abortMeasure function.
Driver Functions agb1500_startMeasure For SMU: 1 (current) or 2 (voltage). For MFCMU: 1 to 402. See Table 2-6. range[ ] Measurement ranging mode. For SMU: 0 (auto), positive value (limited auto), or negative value (fixed range). See Table 2-3. For MFCMU: 0 (auto) or positive value (fixed range). See Table 2-7. source Enables or disables source data output. 0 (disable) or 1 (enable). For meas_type=9, 14, and 15, enter 0 (zero). Source data output is not available for these measurement types.
Driver Functions agb1500_stopMode ViReal64 range[2]; mode[0] = 1; mode[1] = 1; range[0] = 0; range[1] = 0; /* /* /* /* /* measurement range */ current for 1st measurement channel */ current for 2nd measurement channel */ auto for 1st measurement channel */ auto for 2nd measurement channel */ ret = agb1500_startMeasure(vi, type, mch, mode, range, 0, 0, 0); ViInt32 eod; ViInt32 dtype; ViReal64 md; ViInt32 st; ViInt32 ch; /* /* /* /* /* eod */ data type */ measurement value */ measurement status */ channe
Driver Functions agb1500_sweepCv agb1500_sweepCv This function executes CV sweep measurement, and returns the number of measurement steps, sweep source data, measurement data, measurement status, MFCMU monitor data, MFCMU monitor status, and time stamp data. Before this function, execute the agb1500_setCmuFreq, agb1500_forceCmuAcLevel, and agb1500_setCv functions to set the oscillator and DC bias sweep source.
Driver Functions agb1500_sweepCv Example ViSession vi; ViStatus ret; ViInt32 ch = 9; /* MFCMU */ ViReal64 freq = 1E6; /* frequency */ ViReal64 acv = 0.05; /* oscillator level */ ViInt32 om= 1; /* sweep mode: single-linear */ ViReal64 v1 = 5; /* start voltage */ ViReal64 v2 = -5; /* stop voltage */ ViInt32 pts = 11; /* point */ ViReal64 th = 0.01; /* hold time */ ViReal64 td = 0.
Driver Functions agb1500_sweepIv agb1500_sweepIv This function executes a staircase sweep measurement by the specified channel, and returns the number of measurement steps, sweep source data, measurement data, measurement status, and time stamp data. Before executing this function, set the sweep source setup by using the agb1500_setIv function. If you want to use the synchronous sweep source, execute the agb1500_setSweepSync function.
Driver Functions agb1500_sweepIv Example ViSession vi; ViStatus ret; ViInt32 sch = 1; /* SMU1 for sweep channel */ ViInt32 mch = 2; /* SMU2 for measurement channel */ ViInt32 sm = 1; /* sweep mode: voltage-single-linear */ ViInt32 om = 2; /* output mode: voltage */ ViReal64 or = 0; /* output range: auto */ ViReal64 v1 = 0; /* start voltage */ ViReal64 v2 = 1.5; /* stop voltage */ ViInt32 pts = 11; /* point */ ViReal64 th = 0.01; /* hold time */ ViReal64 td = 0.
Driver Functions agb1500_sweepMiv agb1500_sweepMiv This function executes a multi channel sweep measurement by the specified channels, and returns the number of measurement steps, sweep source data, measurement data, measurement status, and time stamp data. Before executing this function, set the sweep source setup by using the agb1500_setIv function. If you want to use the synchronous sweep source, execute the agb1500_setSweepSync function.
Driver Functions agb1500_sweepMiv Example ViSession vi; ViStatus ret; ViInt32 mch[3]; /* measurement channels */ mch[0] = 1; mch[1] = 2; mch[2] = 0; ret = agb1500_setSwitch(vi, mch[0], 1); ret = agb1500_setSwitch(vi, mch[1], 1); ViInt32 om = 2; /* output mode: voltage */ ViInt32 sm = 1; /* sweep mode: voltage-single-linear mode */ ViReal64 or = 0; /* output range: auto */ ViReal64 v1 = 0; /* start voltage */ ViReal64 v2 = 1.5; /* stop voltage */ ViInt32 pts = 11; /* point */ ViReal64 th = 0.
Driver Functions agb1500_sweepPbias agb1500_sweepPbias This function executes a staircase sweep with pulsed bias measurement by the specified channel, and returns the number of measurement steps, sweep source data, measurement data, measurement status, and time stamp data. Before executing this function, set the sweep source setup and pulsed bias setup by using the agb1500_setIv function and the agb1500_setPbias function.
Driver Functions agb1500_sweepPbias Example ViSession vi; ViStatus ret; ViInt32 pch = 1; ViInt32 om = 2; ViReal64 or = 0; ViReal64 th = 0; ViReal64 tw = 0.001; ViReal64 tp = 0.01; ViReal64 v1 = 0; ViReal64 v2 = 1.5; ViReal64 ic = 0.
Driver Functions agb1500_sweepPiv agb1500_sweepPiv This function executes a pulsed sweep measurement by the specified channel, and returns the number of measurement steps, sweep source data, measurement value, measurement status, and time stamp data. Before executing this function, set the pulsed sweep source setup by using the agb1500_setPiv function. If you want to use the synchronous sweep source, execute the agb1500_setSweepSync function.
Driver Functions agb1500_sweepPiv Example ViSession vi; ViStatus ret; ViInt32 pch = 1; /* SMU1 for pulse sweep source */ ret = agb1500_setSwitch(vi, pch, 1); ViInt32 sm = 1; ViReal64 or = 0; ViReal64 v0 = 0; ViReal64 v1 = 0; ViReal64 v2 = 10; ViInt32 pts = 11; ViReal64 th = 0; ViReal64 tw = 0.001; ViReal64 tp = 0.01; ViReal64 ic = 0.
Driver Functions agb1500_timeOut agb1500_timeOut This function sets a minimum timeout value for driver I/O transactions in milliseconds. The default timeout period is 5 seconds. Syntax ViStatus_VI_FUNC agb1500_timeOut(ViSession vi, ViInt32 timeOut); Parameters vi Instrument handle returned from agb1500_init( ). timeOut I/O timeout value for all functions in the driver. in milliseconds. 0 to 2147483647.
3 Programming Examples for Visual Basic Users
Programming Examples for Visual Basic Users This chapter explains programming examples to perform the following measurements using the Agilent B1500 and the B1500 VXIplug&play driver, and consists of the following sections.
Programming Examples for Visual Basic Users Programming Basics Programming Basics This section provides the basic information for programming using the Agilent B1500 VXIplug&play driver. • “To Create Your Project Template” • “To Create Measurement Program” To Create Your Project Template This section explains how to create a project template by using Microsoft Visual Basic. Before starting programming, create your project template, and keep it as your reference.
Programming Examples for Visual Basic Users Programming Basics Table 3-1 Example Template Program Code for Visual Basic 6.0 Sub Main() ’Starting the session ******************************************* Dim vi As Long Dim ret As Long Dim msg As String Dim err_msg As String * 256 ret = agb1500_init("GPIB0::17::INSTR", VI_TRUE, VI_TRUE, vi) If ((vi = VI_NULL) Or (ret < VI_SUCCESS)) Then msg = "Initialization failure.
Programming Examples for Visual Basic Users Programming Basics ’Closing the session ******************************************** ret = agb1500_close(vi) check_err vi, ret msg = "Click OK to stop the program.
Programming Examples for Visual Basic Users Programming Basics To Create Measurement Program Create the measurement program as shown below. The following procedure needs your project template. If the procedure does not fit your programming environment, arrange it to suit your environment. Step 1. Plan the automatic measurements. Then decide the following items: • Measurement devices Discrete, packaged, on-wafer, and so on.
Programming Examples for Visual Basic Users High Speed Spot Measurement High Speed Spot Measurement Table 3-2 explains example subprograms that enable/disable measurement channels (perform_meas), perform the high speed spot measurement (spot_meas), and display measurement result data (display_data). This example measures MOSFET drain current.
Programming Examples for Visual Basic Users High Speed Spot Measurement Sub spot_meas(vi As Long, ret As Long, pins() As Long) ’1 Dim vd As Double Dim vg As Double Dim idcomp As Double Dim igcomp As Double Dim meas As Double Dim status As Long vd = 0.5 idcomp = 0.05 vg = 0.5 igcomp = 0.
Programming Examples for Visual Basic Users High Speed Spot Measurement Sub display_data(meas As Double, status As Long, vi As Long, ret As Long, pins() As Long) Dim title As String Dim value As String Dim rbx As Integer title = "Spot Measurement Result" ’3 ’6 If status = 0 Then ’8 value = "Id = " & meas * 1000 & " (mA)" & Chr(10) & Chr(10) value = value & "Do you want to perform measurement again?" rbx = MsgBox(value, vbYesNo + vbQuestion, title) If rbx = vbYes Then spot_meas vi, ret, pins() End If Else
Programming Examples for Visual Basic Users Multi Channel Spot Measurement Multi Channel Spot Measurement Table 3-3 explains example subprograms that enable/disable measurement channels (perform_meas), perform the multi channel spot measurement (mspot_meas), and display measurement result data (display_data). This example measures bipolar transistor collector current and base current.
Programming Examples for Visual Basic Users Multi Channel Spot Measurement Sub mspot_meas(vi As Long, ret As Long, pins() As Long) ’1 Dim Dim Dim Dim Dim Dim ’3 vc As Double vb As Double ve As Double iccomp As Double ibcomp As Double iecomp As Double ve = iecomp = vb = ibcomp = vc = iccomp = 0 0.2 0.7 0.01 3 0.
Programming Examples for Visual Basic Users Multi Channel Spot Measurement ret = agb1500_resetTimestamp(vi) check_err vi, ret ’34 ret = agb1500_force(vi, pins(0), agb1500_VF_MODE, 0, ve, iecomp, 0) ret = agb1500_force(vi, pins(1), agb1500_VF_MODE, 0, vb, ibcomp, 0) ret = agb1500_force(vi, pins(2), agb1500_VF_MODE, 0, vc, iccomp, 0) check_err vi, ret ’40 ret = agb1500_measureM(vi, mch(0), mode(0), range(0), md(0), st(0), tm(0)) check_err vi, ret ’43 ret = agb1500_zeroOutput(vi, agb1500_CH_ALL) check_err v
Programming Examples for Visual Basic Users Multi Channel Spot Measurement Sub display_data(md() As Double, st() As Long, tm() As Double, vi As Long, ret As Long, pins() As Long) ’1 Dim title As String Dim value As String Dim rbx As Integer title = "Spot Measurement Result" ’3 ’6 If st(0) = 0 Then ’8 value = "Ic = " & md(0) * 1000 & " (mA)" value = value & Chr(10) & "Time = " & tm(0) & "(sec)" If st(1) = 0 Then value = value & Chr(10) & Chr(10) & "Ib = " & md(1) * 1000 & " (mA)" value = value & Chr(10) &
Programming Examples for Visual Basic Users Pulsed Spot Measurement Pulsed Spot Measurement Table 3-4 explains example subprograms that enable/disable measurement channels (perform_meas), perform the pulsed spot measurement (spot_meas), and display measurement result data (display_data). This example measures MOSFET drain current.
Programming Examples for Visual Basic Users Pulsed Spot Measurement Sub spot_meas(vi As Long, ret As Long, pins() As Long) ’1 Dim vd As Double Dim vg As Double Dim idcomp As Double Dim igcomp As Double Dim meas As Double Dim status As Long vd = 0.5 idcomp = 0.05 vg = 0.5 igcomp = 0.01 ’3 ’12 Dim base As Double Dim width As Double Dim period As Double Dim hold As Double base = 0 width = 0.001 period = 0.01 hold = 0.
Programming Examples for Visual Basic Users Pulsed Spot Measurement ret = agb1500_measureP(vi, pins(0), agb1500_IM_MODE, 0, meas, status, 0) ’31 check_err vi, ret ret = agb1500_zeroOutput(vi, agb1500_CH_ALL) check_err vi, ret ’34 display_data meas, status, vi, ret, pins() ’37 End Sub ’39 Line 31 Performs the pulsed spot measurement. 34 Sets the specified port to the zero output state.
Programming Examples for Visual Basic Users Pulsed Spot Measurement Sub display_data(meas As Double, status As Long, vi As Long, ret As Long, pins() As Long) Dim title As String Dim value As String Dim rbx As Integer title = "Spot Measurement Result" ’3 ’6 If status = 0 Then ’8 value = "Id = " & meas * 1000 & " (mA)" & Chr(10) & Chr(10) value = value & "Do you want to perform measurement again?" rbx = MsgBox(value, vbYesNo + vbQuestion, title) If rbx = vbYes Then spot_meas vi, ret, pins() End If Else val
Programming Examples for Visual Basic Users Staircase Sweep Measurement Staircase Sweep Measurement Table 3-5 explains example subprograms that enable/disable measurement channels (perform_meas), perform the staircase sweep measurement (sweep_meas), and save measurement result data into a file (save_data). This example measures MOSFET Id-Vd characteristics.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vd1 As Dim vd2 As Dim idcomp As Dim vg1 As Dim vg2 As Dim igcomp As Dim hold As Dim delay As Dim s_delay As Dim p_comp As Dim nop1 As Dim nop2 As vd1 = 0 vd2 = 3 idcomp = 0.05 vg1 = 1 vg2 = 3 igcomp = 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement ret = agb1500_resetTimestamp(vi) check_err vi, ret ’45 ret = agb1500_force(vi, m(3), agb1500_VF_MODE, 0, 0, 0.05, 0) ret = agb1500_force(vi, m(2), agb1500_VF_MODE, 0, 0, 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement For j = 1 To nop2 ’array counter for secondary sweep output data ’63 dvg(j - 1) = vg ret = agb1500_force(vi, m(1), agb1500_VF_MODE, 0, vg, igcomp, 0) ret = agb1500_setIv(vi, m(0), agb1500_SWP_VF_SGLLIN, 0, vd1, vd2, nop1, hold, delay, s_delay, idcomp, p_comp) check_err vi, ret ret = agb1500_sweepIv(vi, m(0), agb1500_IM_MODE, 0, rep, sc(i), md(i), st(i), tm(i)) check_err vi, ret vg = vg + d_vg If rep = nop1 Then i = i + nop1 Else msg =
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub save_data(nop1 As Long, nop2 As Long, dvg() As Double, md() As Double, st() As Long, sc() As Double, tm() As Double, vi As Long, ret As Long, m() As Long) Dim Dim Dim val i j val = "Vg As Integer ’array counter for primary sweep As Integer ’array counter for secondary sweep As String ’data to be saved to a file (V), Vd (V), Id (mA), Time (sec), Status" ’3 For j = 1 To nop2 ’8 For i = nop1 * (j - 1) To nop1 * j - 1 val = val & C
Programming Examples for Visual Basic Users Staircase Sweep Measurement Measurement Result Example Vg (V), Vd (V), Id (mA), Time (sec), Status 1,0,-0.00011721,0.0703,0 1,0.3,3.1915,0.086,0 1,0.6,5.8795,0.0875,0 1,0.9,8.1215,0.0889,0 1,1.2,10.004,0.0904,0 1,1.5,11.64,0.0936,0 1,1.8,13.09,0.0948,0 1,2.1,14.385,0.0962,0 1,2.4,15.57,0.0972,0 1,2.7,16.63,0.0985,0 1,3,17.6,0.0995,0 2,0,-0.000117215,0.1983,0 2,0.3,4.178,0.2168,0 2,0.6,7.9075,0.2182,0 2,0.9,11.193,0.2197,0 2,1.2,14.035,0.2232,0 2,1.5,16.49,0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Table 3-6 explains example subprograms that enable/disable measurement channels (perform_meas), perform the staircase sweep measurement (sweep_meas), and save measurement result data into a file (save_data). This example measures MOSFET Id-Vg characteristics. The subprogram uses the synchronous sweep source set by the agb1500_setSweepSync function.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vpri1 As Dim vpri2 As Dim vsyn1 As Dim vsyn2 As Dim vcon1 As Dim vcon2 As Dim i1comp As Dim i2comp As Dim hold As Dim delay As Dim s_delay As Dim p1comp As Dim p2comp As Dim nop As vpri1 = 0 vpri2 = 3 i1comp = 0.01 vsyn1 = 0 vsyn2 = 3 i2comp = 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement ret = agb1500_resetTimestamp(vi) ’40 ret = agb1500_force(vi, m(3), agb1500_VF_MODE, 0, vcon1, 0.05, 0) ret = agb1500_force(vi, m(2), agb1500_VF_MODE, 0, vcon2, 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub save_data(nop As Long, md() As Double, st() As Long, sc() As Double, tm() As Double, vi As Long, ret As Long, m() As Long) ’1 Dim i As Integer ’array counter for primary sweep Dim val As String ’data to be saved to a file val = "Vg (V), Id (mA), Time (sec), Status" ’3 For i = 0 To nop - 1 ’7 val = val & Chr(13) & Chr(10) & sc(i) & "," & md(i) * 1000 & "," & tm(i) & "," & st(i) Next i Dim fname As String ’data file name Dim fnum A
Programming Examples for Visual Basic Users Staircase Sweep Measurement Measurement Result Example Vg (V), Id (mA), Time (sec), Status 0,-0.000098485,0.0714,0 0.3,2.338,0.0901,0 0.6,4.9295,0.0921,0 0.9,7.7645,0.0938,0 1.2,10.8095,0.0951,0 1.5,14.05,0.0985,0 1.8,17.465,0.1001,0 2.1,21.045,0.1016,0 2.4,24.755,0.1028,0 2.7,28.59,0.1043,0 3,32.54,0.1058,0 Data save completed.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Table 3-7 explains example subprograms that enable/disable measurement channels (perform_meas), perform the staircase sweep measurement (sweep_meas), and save measurement result data into a file (save_data). This example uses the multi channel sweep measurement mode to perform the same measurement as the previous example (Table 3-6, MOSFET Id-Vg measurement).
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vpri1 As Dim vpri2 As Dim vsyn1 As Dim vsyn2 As Dim vcon1 As Dim vcon2 As Dim i1comp As Dim i2comp As Dim hold As Dim delay As Dim s_delay As Dim p1comp As Dim p2comp As Dim nop As vpri1 = 0 vpri2 = 3 i1comp = 0.01 vsyn1 = 0 vsyn2 = 3 i2comp = 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement ret = agb1500_resetTimestamp(vi) ’40 ret = agb1500_force(vi, m(3), agb1500_VF_MODE, 0, vcon1, 0.05, 0) ret = agb1500_force(vi, m(2), agb1500_VF_MODE, 0, vcon2, 0.
Programming Examples for Visual Basic Users Staircase Sweep Measurement Sub save_data(nop As Long, md() As Double, st() As Long, sc() As Double, tm() As Double, vi As Long, ret As Long, m() As Long) ’1 Dim i As Integer ’array counter for primary sweep Dim val As String ’data to be saved to a file val = "Vg (V), Id (mA), Time (sec), Status" ’3 For i = 0 To nop - 1 ’7 val = val & Chr(13) & Chr(10) & sc(i) & "," & md(i) * 1000 & "," & tm(i) & "," & st(i) Next i Dim fname As String ’data file name Dim fnum A
Programming Examples for Visual Basic Users Staircase Sweep Measurement Measurement Result Example Vg (V), Id (mA), Time (sec), Status 0,-0.000117215,0.0715,0 0.3,2.335,0.0904,0 0.6,4.928,0.092,0 0.9,7.767,0.0937,0 1.2,10.812,0.0953,0 1.5,14.045,0.0987,0 1.8,17.465,0.1,0 2.1,21.045,0.1015,0 2.4,24.765,0.103,0 2.7,28.6,0.1046,0 3,32.555,0.1058,0 Data save completed.
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Multi Channel Sweep Measurement Table 3-8 explains example subprograms that enable/disable measurement channels (perform_meas), perform the multi channel sweep measurement (sweep_meas), and save measurement result data into a file (save_data). This example measures bipolar transistor Ic-Vb and Ib-Vb characteristics.
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vc Dim ve Dim vb1 Dim vb2 Dim iccomp Dim ibcomp Dim iecomp Dim hold Dim delay Dim s_delay Dim pcomp Dim nop Dim n Dim smpl vc = iccomp = ve = iecomp = vb1 = vb2 = ibcomp = hold = delay = s_delay = pcomp = nop = smpl = n = Dim msg Dim mch(3) Dim mode(2) Dim range(2) mch(0) = mch(1) = mch(2) = mode(0) = mode(1) = range(0) = range(1) = ’3 Line 1 As Double As Double As Do
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Dim sc() Dim md() Dim st() Dim tm() ReDim Preserve ReDim Preserve ReDim Preserve ReDim Preserve As As As As sc(nop) As md(n) As st(n) As tm(n) As Double Double Long Double Double Double Long Double ’primary sweep output data ’sweep measurement data ’status data at each step ’time data at each step ’43 ’50 ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_FLAG_OFF) ret = agb1500_setAdcType(vi, ag
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement If rep = nop Then ’68 save_data nop, md(), st(), sc(), tm(), vi, ret, m() Else msg = rep & " measurement steps were returned. It must be " & nop & " steps. " MsgBox msg, vbOKOnly, "" End If ’73 End Sub Line 68 to 73 75 ’75 Description Calls the save_data subprogram to save measurement data. Or, displays a message box if the number of returned data is not equal to the nop value. End of the sweep_meas subprogram.
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Dim fname As String ’data file name Dim fnum As Integer ’file number fname = "C:\Agilent\mdata\data4.txt" fnum = 1 ’saves data into the file specified by fname Open fname For Output Access Write Lock Read Write As fnum Print #fnum, val Close fnum ’displays data on a MsgBox Dim title As String Dim rbx As Integer title = "Sweep Measurement Result" val = val & Chr(10) & Chr(10) & "Data save completed.
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Table 3-9 explains example subprograms that enable/disable measurement channels (perform_meas), perform the multi channel sweep measurement (sweep_meas), and save measurement result data into a file (save_data). The following subprogram uses the multi channel sweep measurement mode to perform the same measurement as the previous example (Table 3-8, bipolar transistor Ic-Vb and Ib-Vb measurement).
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vc Dim ve Dim vb1 Dim vb2 Dim iccomp Dim ibcomp Dim iecomp Dim hold Dim delay Dim s_delay Dim pcomp Dim nop Dim n Dim smpl vc = iccomp = ve = iecomp = vb1 = vb2 = ibcomp = hold = delay = s_delay = pcomp = nop = smpl = n = Dim msg Dim mch(3) Dim mode(2) Dim range(2) mch(0) = mch(1) = mch(2) = mode(0) = mode(1) = range(0) = range(1) = ’3 Line 1 As Double As Double As Do
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Dim sc() Dim md() Dim st() Dim tm() ReDim Preserve ReDim Preserve ReDim Preserve ReDim Preserve As As As As sc(nop) As md(n) As st(n) As tm(n) As Double Double Long Double Double Double Long Double ’primary sweep output data ’sweep measurement data ’status data at each step ’time data at each step ’43 ’50 ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_FLAG_OFF) ret = agb1500_setAdcType(vi, ag
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement If rep = nop Then ’68 save_data nop, md(), st(), sc(), tm(), vi, ret, m() Else msg = rep & " measurement steps were returned. It must be " & nop & " steps. " MsgBox msg, vbOKOnly, "" End If ’73 End Sub Line 68 to 73 75 ’75 Description Calls the save_data subprogram to save measurement data. Or, displays a message box if the number of returned data is not equal to the nop value. End of the sweep_meas subprogram.
Programming Examples for Visual Basic Users Multi Channel Sweep Measurement Dim fname As String ’data file name Dim fnum As Integer ’file number fname = "C:\Agilent\mdata\data5.txt" fnum = 1 ’saves data into the file specified by fname Open fname For Output Access Write Lock Read Write As fnum Print #fnum, val Close fnum ’displays data on a MsgBox Dim title As String Dim rbx As Integer title = "Sweep Measurement Result" val = val & Chr(10) & Chr(10) & "Data save completed.
Programming Examples for Visual Basic Users Pulsed Sweep Measurement Pulsed Sweep Measurement Table 3-10 explains example subprograms that enable/disable measurement channels (perform_meas), perform the pulsed sweep measurement (sweep_meas), and save measurement result data into a file (save_data). This example measures bipolar transistor Ic-Vc characteristics.
Programming Examples for Visual Basic Users Pulsed Sweep Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim vc1 Dim vc2 Dim iccomp Dim ib1 Dim ib2 Dim vbcomp Dim hold Dim width Dim period Dim base Dim smpl Dim nop1 Dim nop2 vc1 = 0 vc2 = 3 iccomp = 0.05 ib1 = 0.00005 ib2 = 0.00015 vbcomp = 5 hold = 0.1 width = 0.001 period = 0.
Programming Examples for Visual Basic Users Pulsed Sweep Measurement ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_FLAG_OFF) ret = agb1500_setAdcType(vi, agb1500_CH_ALL, agb1500_HSPEED_ADC) ret = agb1500_resetTimestamp(vi) check_err vi, ret ’47 ’50 ret = agb1500_force(vi, m(2), agb1500_VF_MODE, 0, 0, 0.
Programming Examples for Visual Basic Users Pulsed Sweep Measurement For j = 1 To nop2 ’66 dib(j - 1) = ibo ret = agb1500_force(vi, m(1), agb1500_IF_MODE, 0, ibo, vbcomp, 0) ret = agb1500_setPiv(vi, m(0), agb1500_SWP_VF_SGLLIN, 0, base, vc1, vc2, nop1, hold, width, period, iccomp) check_err vi, ret ret = agb1500_sweepPiv(vi, m(0), agb1500_IM_MODE, 0, rep, sc(i), md(i), st(i), tm(i)) check_err vi, ret ibo = ibo + d_ib If rep = nop1 Then ’74 i = i + nop1 Else msg = rep & " measurement steps were returned.
Programming Examples for Visual Basic Users Pulsed Sweep Measurement Sub save_data(nop1 As Long, nop2 As Long, md() As Double, st() As Long, sc() As Double, tm() As Double, dib() As Double, vi As Long, ret As Long, m() As Long) ’1 Dim i As Integer Dim j As Integer Dim val As String ’array counter for sweepPiv returned data ’array counter for secondary sweep output data ’data to be saved to a file ’3 val = "Ib (uA), Vc (V), Ic (mA), Time (sec), Status" For j = 1 To nop2 ’9 For i = nop1 * (j - 1) To nop1
Programming Examples for Visual Basic Users Pulsed Sweep Measurement Measurement Result Example Ib (uA), Vc (V), Ic (mA), Time (sec), Status 50,0,-0.05,0.1539,0 50,0.3,8.965,0.1639,0 50,0.6,9.705,0.1739,0 50,0.9,9.735,0.1839,0 50,1.2,9.765,0.1939,0 50,1.5,9.805,0.2039,0 50,1.8,9.83,0.2139,0 50,2.1,9.835,0.2239,0 50,2.4,9.85,0.2339,0 50,2.7,9.9,0.2439,0 50,3,9.915,0.2539,0 100,0,-0.1,0.4039,0 100,0.3,15.725,0.4139,0 100,0.6,18.115,0.4239,0 100,0.9,18.715,0.4339,0 100,1.2,18.84,0.4439,0 100,1.5,18.925,0.
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement Staircase Sweep with Pulsed Bias Measurement Table 3-11 explains example subprograms that enable/disable measurement channels (perform_meas), perform the staircase sweep with pulsed bias measurement (sweep_meas), and save measurement result data into a file (save_data). This example measures MOSFET Id-Vd characteristics.
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement Sub sweep_meas(vi As Long, ret As Long, m() As Long) ’1 Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim ’3 vd1 vd2 idcomp vg1 vg2 igcomp hold delay s_delay p_comp As As As As As As As As As As Double Double Double Double Double Double Double Double Double Double vd1 = 0 vd2 = 3 idcomp = 0.05 vg1 = 1 vg2 = 3 igcomp = 0.
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement ret = agb1500_resetTimestamp(vi) check_err vi, ret ’47 ret = agb1500_force(vi, m(3), agb1500_VF_MODE, 0, 0, 0.05, 0) ret = agb1500_force(vi, m(2), agb1500_VF_MODE, 0, 0, 0.
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement For j = 1 To nop2 ’array counter for secondary sweep output data ’72 dvg(j - 1) = vg ret = agb1500_setPbias(vi, m(1), agb1500_VF_MODE, 0, 0, vg, width, period, p_hold, igcomp) ret = agb1500_setIv(vi, m(0), agb1500_SWP_VF_SGLLIN, 0, vd1, vd2, nop1, hold, delay, s_delay, idcomp, p_comp) check_err vi, ret ret = agb1500_sweepPbias(vi, m(0), agb1500_IM_MODE, 0, rep, sc(i), md(i), st(i), tm(i)) check_err vi, ret vg = vg + d_
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement Sub save_data(nop1 As Long, nop2 As Long, dvg() As Double, md() As Double, st() As Long, sc() As Double, tm() As Double, vi As Long, ret As Long, m() As Long) Dim Dim Dim val i j val = "Vg As Integer ’array counter for primary sweep As Integer ’array counter for secondary sweep As String ’data to be saved to a file (V), Vd (V), Id (mA), Time (sec), Status" ’3 For j = 1 To nop2 ’8 For i = nop1 * (j - 1) To nop1 * j
Programming Examples for Visual Basic Users Staircase Sweep with Pulsed Bias Measurement Measurement Result Example Vg (V), Vd (V), Id (mA), Time (sec), Status 1,0,0,0.1664,0 1,0.3,3.205,0.1764,0 1,0.6,5.9,0.1864,0 1,0.9,8.15,0.1964,0 1,1.2,10.035,0.2064,0 1,1.5,11.68,0.2164,0 1,1.8,13.13,0.2264,0 1,2.1,14.425,0.2364,0 1,2.4,15.61,0.2464,0 1,2.7,16.675,0.2564,0 1,3,17.65,0.2664,0 2,0,-0.005,0.4182,0 2,0.3,4.205,0.4282,0 2,0.6,7.955,0.4382,0 2,0.9,11.245,0.4482,0 2,1.2,14.11,0.4582,0 2,1.5,16.55,0.
Programming Examples for Visual Basic Users Breakdown Voltage Measurement Breakdown Voltage Measurement Table 3-12 explains example subprograms that enable/disable measurement channels (perform_meas), perform the quasi pulsed spot measurement (vbd_meas), and display measurement result data (display_data). This example measures bipolar transistor breakdown voltage.
Programming Examples for Visual Basic Users Breakdown Voltage Measurement Sub vbd_meas(vi As Long, ret As Long, pins() As Long) Dim vstart As Double Dim vstop As Double Dim vb As Double Dim ve As Double Dim iccomp As Double Dim ibcomp As Double Dim iecomp As Double Dim hold As Double Dim delay As Double vstart = 0 vstop = 100 ’interlock cable must be connected. vb = 0.7 ve = 0 iccomp = 0.005 ibcomp = 0.01 iecomp = 0.
Programming Examples for Visual Basic Users Breakdown Voltage Measurement Sub display_data(meas As Double, status As Long, vi As Long, ret As Long, pins() As Long) ’1 Dim title As String Dim value As String Dim rbx As Integer title = "Vbd Measurement Result" If status = 8 Then ’status=8 is returned when Vbd was measured normally ’6 value = "Vbd = " & meas & " (V)" Else value = "Vbd = " & meas & " (V)" value = value & Chr(10) & Chr(10) & "Status value = " & status End If value = value & Chr(10) & Chr(10) &
Programming Examples for Visual Basic Users Leakage Current Measurement Leakage Current Measurement Table 3-13 explains example subprograms that enable/disable measurement channels (perform_meas), perform the quasi pulsed spot measurement (spot_meas), and display measurement result data (display_data). This example measures MOSFET drain current.
Programming Examples for Visual Basic Users Leakage Current Measurement Sub spot_meas(vi As Long, ret As Long, pins() As Long) Dim vstart As Double Dim vstop As Double Dim vg As Double Dim idcomp As Double Dim igcomp As Double Dim hold As Double Dim delay As Double Dim meas As Double Dim status As Long vstart = -5 vstop = 5 idcomp = 0.05 vg = 0 igcomp = 0.01 hold = 0.1 delay = 0.001 ’1 ret = agb1500_force(vi, pins(3), agb1500_VF_MODE, 0, 0, 0.
Programming Examples for Visual Basic Users Leakage Current Measurement Sub display_data(meas As Double, status As Long, vi As Long, ret As Long, pins() As Long) Dim title As String Dim value As String Dim rbx As Integer title = "Ileak Measurement Result" ’3 ’6 If status = 0 Then ’8 value = "Id = " & meas * 1000 & " (mA)" & Chr(10) & Chr(10) value = value & "Do you want to perform measurement again?" rbx = MsgBox(value, vbYesNo + vbQuestion, title) If rbx = vbYes Then spot_meas vi, ret, pins() End If Els
Programming Examples for Visual Basic Users Leakage Current Measurement 3-62 Agilent B1500 VXIplug&play Driver User’s Guide, Edition 3
4 Programming Examples for C++ Users
Programming Examples for C++ Users This chapter explains programming examples to perform the following measurements using the Agilent B1500 and the B1500 VXIplug&play driver, and consists of the following sections.
Programming Examples for C++ Users Programming Basics Programming Basics This section provides the basic information for programming using the Agilent B1500 VXIplug&play driver. • “To Create Your Project Template” • “To Create Measurement Program” To Create Your Project Template This section explains how to create a project template in the C language. Before starting programming, create your project template, and keep it as your reference. It will remove the conventional task in the future programming.
Programming Examples for C++ Users Programming Basics Table 4-1 #include #include #include #include Example Template Program Code for Visual C++ "agb1500.
Programming Examples for C++ Users Programming Basics /* Starting the session */ ret = agb1500_init("GPIB0::17::INSTR", VI_TRUE, VI_TRUE, &vi); if ( ( ret < VI_SUCCESS ) || ( vi == VI_NULL ) ) { printf("Initialization failure.\n Status code: %d.
Programming Examples for C++ Users Programming Basics To Create Measurement Program Create the measurement program as shown below. The following procedure needs your project template. If the procedure does not fit your programming environment, arrange it to suit your environment. Step 1. Plan the automatic measurements. Then decide the following items: • Measurement devices Discrete, packaged, on-wafer, and so on. • Parameters/characteristics to be measured hFE, Vth, sheet resistance, and so on.
Programming Examples for C++ Users High Speed Spot Measurement High Speed Spot Measurement Table 4-2 explains an example subprogram that performs the high speed spot measurement. The following subprogram will apply voltage to a MOSFET, measure drain current, and display the measurement result data.
Programming Examples for C++ Users High Speed Spot Measurement ret = agb1500_force(vi, ret = agb1500_force(vi, ret = agb1500_force(vi, ret = agb1500_force(vi, check_err (vi, ret); bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Multi Channel Spot Measurement Multi Channel Spot Measurement Table 4-3 explains an example subprogram that performs the multi channel spot measurement. The following subprogram will apply voltage to a bipolar transistor, measure Ic and Ib, calculate hfe value, and display the measurement result data.
Programming Examples for C++ Users Multi Channel Spot Measurement mch[0] = collector; mch[1] = base; mch[2] = 0; mode[0] = 1; mode[1] = 1; range[0] = 0; range[1] = 0; ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, emitter, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Pulsed Spot Measurement Pulsed Spot Measurement Table 4-4 explains an example subprogram that performs the pulsed spot measurement. The following subprogram will apply voltage to a MOSFET, measure drain current, and display the measurement result data.
Programming Examples for C++ Users Pulsed Spot Measurement vd = idcomp = vg = igcomp = base = width = period = hold = 1.5; 0.05; 1.5; 0.01; 0; 0.001; 0.01; 0.1; /* 30 */ /* 37 */ ret = agb1500_force(vi, bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); ret = agb1500_force(vi, source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Staircase Sweep Measurement Staircase Sweep Measurement Table 4-5 explains an example subprogram that performs the staircase sweep measurement. The following subprogram performs I-V measurement and save the measurement results (MOSFET Id-Vd characteristics) into a file.
Programming Examples for C++ Users Staircase Sweep Measurement ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, check_err (vi, ret); drain, 1); gate, 1); source, 1); bulk, 1); /* 38 */ /* 42 */ ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); ret = agb1500_force(vi, source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Staircase Sweep Measurement printf(" Vg (V), Vd (V), Id (mA)\n"); /* 72 */ for (j = 0; j < nop2; j++){ n = j * nop1; for (i = n; i < n + nop1; i++){ printf(" %4.2f, %4.2f, %9.
Programming Examples for C++ Users Staircase Sweep Measurement Measurement Result Example Vg (V), Vd (V), Id (mA), Time (sec), Status 1.00, 0.00, -0.000114, 0.072100, 0 1.00, 0.30, 3.180000, 0.090500, 0 1.00, 0.60, 5.850000, 0.092300, 0 1.00, 0.90, 8.085500, 0.093500, 0 1.00, 1.20, 9.972000, 0.094900, 0 1.00, 1.50, 11.625000, 0.098300, 0 1.00, 1.80, 13.085000, 0.099300, 0 1.00, 2.10, 14.410000, 0.100600, 0 1.00, 2.40, 15.595000, 0.101600, 0 1.00, 2.70, 16.690000, 0.102900, 0 1.00, 3.00, 17.680000, 0.
Programming Examples for C++ Users Staircase Sweep Measurement Table 4-6 uses the agb1500_setSweepSync function to perform MOSFET Id-Vg measurement.
Programming Examples for C++ Users Staircase Sweep Measurement ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); ret = agb1500_force(vi, source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Staircase Sweep Measurement FILE *stream; /* 66 */ if( ( stream = fopen( f_name, "w+" )) == NULL ){ printf( "Data file was not opened\n" ); } else { printf( "%s%c", msg1, c ); fprintf( stream, "%s%c", head1, c ); for (i = 0; i < nop; i++){ fprintf( stream, "%4.2f, %9.6f, %8.
Programming Examples for C++ Users Staircase Sweep Measurement Table 4-7 uses the multi channel sweep measurement mode to perform the same measurement as the previous example (Table 4-6, MOSFET Id-Vg measurement).
Programming Examples for C++ Users Staircase Sweep Measurement ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); ret = agb1500_force(vi, source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Staircase Sweep Measurement FILE *stream; /* 66 */ if( ( stream = fopen( f_name, "w+" )) == NULL ){ printf( "Data file was not opened\n" ); } else { printf( "%s%c", msg1, c ); fprintf( stream, "%s%c", head1, c ); for (i = 0; i < nop; i++){ fprintf( stream, "%4.2f, %9.6f, %8.
Programming Examples for C++ Users Multi Channel Sweep Measurement Multi Channel Sweep Measurement Table 4-8 explains an example subprogram that performs the multi channel sweep measurement. The following subprogram performs I-V measurement and saves the measurement results (bipolar transistor Ic-Vb and Ib-Vb characteristics) into a file.
Programming Examples for C++ Users Multi Channel Sweep Measurement ret = agb1500_setSwitch(vi, emitter, 1); ret = agb1500_setSwitch(vi, base, 1); ret = agb1500_setSwitch(vi, collector, 1); check_err (vi, ret); /* 36 */ /* 39 */ ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_FLAG_OFF); ret = agb1500_setAdcType(vi, agb1500_CH_ALL, agb1500_HSPEED_ADC); /* 42 */ ret = agb1500_resetTimestamp(vi); check_err (vi, ret); /* 45 */ ret = agb1500_force(vi, emitter, agb1500_VF_MO
Programming Examples for C++ Users Multi Channel Sweep Measurement ViInt32 i; ViInt32 n; printf(" Vb (V), Ic (mA), for (i = 0; i < nop; i++){ printf(" %4.2f, %11.8f, } /* 64 */ Ib (mA)\n"); %11.8f\n", sc[i], md[2*i] * 1000, md[2*i+1] * 1000); ViChar f_name[] = "C:\\Agilent\\ex\\data4.txt"; /* 71 */ ViChar head1[] = "Vb (V), Ic (mA), Ib (mA), hfe, Tc (sec), Tb (sec), Status_c, Status_b"; ViChar msg1[] = "Saving data..."; ViChar msg2[] = "Data save completed.
Programming Examples for C++ Users Multi Channel Sweep Measurement Table 4-9 uses the multi channel sweep measurement mode to perform the same measurement as the previous example (Table 4-8, Ic-Vb, Ib-Vb). Table 4-9 Multi Channel Sweep Measurement Example 2 void perform_meas (ViSession vi, ViStatus ret) { ViInt32 emitter = 1; /* SMU1 */ ViInt32 base = 2; /* SMU2 */ ViInt32 collector = 4; /* SMU4 */ ViReal64 vb1 = 0.25; ViReal64 vb2 = 0.75; ViReal64 vc = 3; ViReal64 ve = 0; ViReal64 ibcomp = 0.
Programming Examples for C++ Users Multi Channel Sweep Measurement ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_FLAG_OFF); ret = agb1500_setAdcType(vi, agb1500_CH_ALL, agb1500_HSPEED_ADC); ret = agb1500_resetTimestamp(vi); check_err (vi, ret); /* 41 */ /* 45 */ ret = agb1500_force(vi, emitter, agb1500_VF_MODE, 0, ve, iecomp, 0); /* 47 */ ret = agb1500_force(vi, collector, agb1500_VF_MODE, 0, vc, iccomp, 0); ret = agb1500_setIv(vi, base, agb1500_SWP_VF_SGLLIN, 0, vb1,
Programming Examples for C++ Users Multi Channel Sweep Measurement ViChar f_name[] = "C:\\Agilent\\ex\\data5.txt"; /* 71 */ ViChar head1[] = "Vb (V), Ic (mA), Ib (mA), hfe, Tc (sec), Tb (sec), Status_c, Status_b"; ViChar msg1[] = "Saving data..."; ViChar msg2[] = "Data save completed.
Programming Examples for C++ Users Pulsed Sweep Measurement Pulsed Sweep Measurement Table 4-10 explains an example subprogram that performs the pulsed sweep measurement and saves the measurement results (bipolar transistor Ic-Vc characteristics) into a file.
Programming Examples for C++ Users Pulsed Sweep Measurement ret = agb1500_setAdc(vi, agb1500_HSPEED_ADC, agb1500_INTEG_MANUAL, smpl, agb1500_F LAG_OFF); /* 36 */ ret = agb1500_setAdcType(vi, agb1500_CH_ALL, agb1500_HSPEED_ADC); ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, emitter, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Pulsed Sweep Measurement printf(" Ib (uA), Vc (V), Ic (mA)\n"); /* 64 */ for (j = 0; j < nop2; j++){ n = j * nop1; for (i = n; i < n + nop1; i++){ printf(" %5.1f, %4.2f, %9.
Programming Examples for C++ Users Pulsed Sweep Measurement Measurement Result Example Ib (uA), Vc (V), Ic (mA), Time (sec), Status 50.0, 0.00, -0.050000, 0.152900, 0 50.0, 0.30, 9.015000, 0.162900, 0 50.0, 0.60, 9.760000, 0.172900, 0 50.0, 0.90, 9.825000, 0.182900, 0 50.0, 1.20, 9.840000, 0.192900, 0 50.0, 1.50, 9.875000, 0.202900, 0 50.0, 1.80, 9.905000, 0.212900, 0 50.0, 2.10, 9.950000, 0.222900, 0 50.0, 2.40, 9.935000, 0.232900, 0 50.0, 2.70, 9.970000, 0.242900, 0 50.0, 3.00, 10.010000, 0.
Programming Examples for C++ Users Staircase Sweep with Pulsed Bias Measurement Staircase Sweep with Pulsed Bias Measurement Table 4-11 explains an example subprogram that performs the staircase sweep with pulsed bias measurement and saves the measurement results (MOSFET Id-Vd characteristics) into a file.
Programming Examples for C++ Users Staircase Sweep with Pulsed Bias Measurement ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, ret = agb1500_setSwitch(vi, check_err (vi, ret); drain, 1); gate, 1); source, 1); bulk, 1); /* 38 */ /* 42 */ ret = agb1500_resetTimestamp(vi); ret = agb1500_force(vi, bulk, agb1500_VF_MODE, 0, 0, 0.1, 0); ret = agb1500_force(vi, source, agb1500_VF_MODE, 0, 0, 0.
Programming Examples for C++ Users Staircase Sweep with Pulsed Bias Measurement printf(" Vg (V), Vd (V), Id (mA)\n"); /* 72 */ for (j = 0; j < nop2; j++){ n = j * nop1; for (i = n; i < n + nop1; i++){ printf(" %4.2f, %4.2f, %9.
Programming Examples for C++ Users Staircase Sweep with Pulsed Bias Measurement Measurement Result Example Vg (V), Vd (V), Id (mA), Time (sec), Status 1.00, 0.00, 0.005000, 0.166900, 0 1.00, 0.30, 3.170000, 0.176900, 0 1.00, 0.60, 5.835000, 0.186900, 0 1.00, 0.90, 8.040000, 0.196900, 0 1.00, 1.20, 9.905000, 0.206900, 0 1.00, 1.50, 11.530000, 0.216900, 0 1.00, 1.80, 12.965000, 0.226900, 0 1.00, 2.10, 14.270000, 0.236900, 0 1.00, 2.40, 15.425000, 0.246900, 0 1.00, 2.70, 16.495000, 0.256900, 0 1.00, 3.00, 17.
Programming Examples for C++ Users Breakdown Voltage Measurement Breakdown Voltage Measurement Table 4-12 explains an example subprogram that performs the quasi pulsed spot measurement and displays the measurement result data (bipolar transistor breakdown voltage).
Programming Examples for C++ Users Breakdown Voltage Measurement ret = agb1500_measureBdv(vi, agb1500_SHORT_INTERVAL, &meas, &status); /* 25 */ check_err (vi, ret); ret = agb1500_zeroOutput(vi, agb1500_CH_ALL); check_err (vi, ret); /* 28 */ if (status = 8){ printf("Vbd = %9.6f V \n", meas); } else { printf("Error occurred during measurement.
Programming Examples for C++ Users Leakage Current Measurement Leakage Current Measurement Table 4-13 explains an example subprogram that performs the quasi pulsed spot measurement and displays the measurement result data (MOSFET drain current).
Programming Examples for C++ Users Leakage Current Measurement ret = agb1500_setIleak(vi, drain, 0, vd, idcomp, start, hold, delay); /* 29 */ check_err (vi, ret); ret = agb1500_measureIleak(vi, drain, agb1500_SHORT_INTERVAL, &meas, &status); /* 32 */ check_err (vi, ret); ret = agb1500_zeroOutput(vi, agb1500_CH_ALL); check_err (vi, ret); /* 35 */ printf("Id = %9.6f mA\n", meas * 1000); printf("Vd = %5.2f to %4.2f V\n", start, vd); printf("Vg = %4.
Programming Examples for C++ Users Sampling Measurement Sampling Measurement Table 4-14 explains example subprogram that performs sampling measurement. This example measures current that flows to resistors R1 and R2, and then calculates the resistance. Table 4-14 Sampling Measurement Example void perform_meas (ViSession vi, ViStatus ret) { ViInt32 t1 =3; /* SMU3 */ ViInt32 t2 =4; /* SMU4 */ ViInt32 low =1; /* SMU1 */ ViReal64 base =0; ViReal64 bias =0.1; ViReal64 icomp =0.
Programming Examples for C++ Users Sampling Measurement ret = agb1500_setSwitch(vi, t1, 1); ret = agb1500_setSwitch(vi, t2, 1); ret = agb1500_setSwitch(vi, low, 1); ret = agb1500_setFilter(vi, agb1500_CH_ALL, agb1500_FLAG_ON); ret = agb1500_setAdc(vi, agb1500_HRESOLN_ADC, agb1500_INTEG_MANUAL, 2, agb1500_FLAG_OFF); check_err (vi, ret); /* 30 */ /* 35 */ ret = agb1500_setSample(vi, bias_h, base_h, interval, nop); /* 37 */ ret = agb1500_addSampleSyncIv(vi, t1, agb1500_VF_MODE, 0, base, bias, icomp); ret =
Programming Examples for C++ Users Sampling Measurement ViInt32 ViChar ViChar ViChar ViChar ViChar i; f_name[] = head1[] = msg1[] = msg2[] = c = /* 57 */ "C:\\Agilent\\ex\\data8.txt"; "Index, I1 (mA), R1 (ohm), I2 (mA), R2 (ohm), Status"; "Saving data..."; "Data save completed."; ’\n’; printf(" Index, R1 (ohm), R2 (ohm)\n"); for (i = 0; i < nop; i++){ printf(" %2d, %6.3f, %6.
Programming Examples for C++ Users Sampling Measurement Measurement Result Example Index, I1 (mA), R1 1, 10.600, 9.434, 2, 10.580, 9.452, 3, 10.600, 9.434, 4, 10.585, 9.447, 5, 10.590, 9.443, 6, 10.605, 9.430, 7, 10.600, 9.434, 8, 10.585, 9.447, 9, 10.585, 9.447, 10, 10.595, 9.438, 11, 10.595, 9.438, 12, 10.595, 9.438, 13, 10.600, 9.434, 14, 10.605, 9.430, 15, 10.585, 9.447, 16, 10.590, 9.443, 17, 10.615, 9.421, 18, 10.585, 9.447, 19, 10.600, 9.434, 20, 10.585, 9.447, 21, 10.600, 9.434, 22, 10.585, 9.
Programming Examples for C++ Users High Speed Spot C Measurement High Speed Spot C Measurement Table 4-17 explains example subprogram that performs capacitance spot measurement. This example measures MOSFET gate-substrate capacitance by using the multi frequency capacitance measurement unit (MFCMU) and a SMU/CMU unify unit (SCUU). To perform the example subprogram shown in Table 4-17, you need the following setup. • Insert the following line to the program (at the top of the program). #include
Programming Examples for C++ Users High Speed Spot C Measurement Table 4-16 Open Correction Subprogram void open_corr (ViSession vi, ViStatus ret, ViReal64 freq, ViReal64 ref_cp, ViReal64 ref_g) /* 1 */ { ViInt32 rbx; ViInt16 result; rbx = MessageBox(NULL , "Do you want to perform Open Correction?", "Open Correction", MB_YESNO); if (rbx != IDNO) { MessageBox(NULL ,"Open measurement terminal. Then click OK.", "Open Correction", MB_OK); printf("Wait a minute . . .
Programming Examples for C++ Users High Speed Spot C Measurement Table 4-17 High Speed Spot C Measurement Example void perform_meas (ViSession vi, ViStatus ret) { ViInt32 drain= 1; /* SMU1 */ ViInt32 gate /* CMUH */ ViInt32 source= 4; /* SMU4 */ ViInt32 substrate /* CMUL */ ViReal64 freq= 1000000; ViReal64 ref_cp= 0; ViReal64 ref_g= 0; ViReal64 osc_level= 0.
Programming Examples for C++ Users High Speed Spot C Measurement ret = agb1500_setCmuFreq(vi, agb1500_CH_CMU, freq); ret = agb1500_forceCmuAcLevel(vi, agb1500_CH_CMU, osc_level); open_corr (vi, ret, freq, ref_cp, ref_g); /* 32 */ ViInt32 rbx; /* 36 */ rbx = MessageBox(NULL , "Connect DUT. Then click OK.
Programming Examples for C++ Users CV Sweep Measurement CV Sweep Measurement Table 4-18 explains example subprogram that performs capacitance-voltage (CV) sweep measurement. This example measures MOSFET gate-substrate capacitance by using the multi frequency capacitance measurement unit (MFCMU) and a SMU/CMU unify unit (SCUU). To perform the example subprogram shown in Table 4-18, you need the following setup. • Insert the following line to the program (at the top of the program). #include
Programming Examples for C++ Users CV Sweep Measurement Table 4-18 CV Sweep Measurement Example void perform_meas (ViSession vi, ViStatus ret) /* 1 */ { ViInt32 drain= 1; /* SMU1 */ ViInt32 gate /* CMUH */ ViInt32 source= 4; /* SMU4 */ ViInt32 substrate /* CMUL */ ViReal64 freq= 1000000; ViReal64 ref_cp= 0; ViReal64 ref_g= 0; ViReal64 osc_level= 0.
Programming Examples for C++ Users CV Sweep Measurement phase_compen (vi, ret); /* 43 */ ret = agb1500_setCmuFreq(vi, agb1500_CH_CMU, freq); ret = agb1500_forceCmuAcLevel(vi, agb1500_CH_CMU, osc_level); open_corr (vi, ret, freq, ref_cp, ref_g); ViInt32 rbx; /* 49 */ rbx = MessageBox(NULL , "Connect DUT. Then click OK.
Programming Examples for C++ Users CV Sweep Measurement printf("Vg (V), Cp (pF), C_st, G (uS), G_st, OSC (mV), Osc_st, DC (V), Dc_st, Time (s)\n"); /* 61 */ for (j = 0; j < nop2; j++){ n = j * nop1; for (i = n; i < n + nop1; i++){ printf(" %3.2f, %8.6f, %1d, %8.6f,%1d, %8.6f, %1d, %8.6f,%1d, %8.