10   !*************************************************
20   !*
30   !* FILE       :  CPF
40   !* DESCRIPTION:  Program for Charge Pumping Test
50   !* PRODUCT    :  4155,4156
60   !* REVISION   :  Rev.A.01.01
70   !*
80   !*   (c) Copyright Agilent Technologies 1998
90   !*              All rights reserved.
100  !*
110  !*
120  !*  Customer shall have the personal, non-
130  !* transferable right to use, copy or modify
140  !* this SAMPLE PROGRAM for Customer's internal
150  !* operations.  Customer shall use the SAMPLE
160  !* PROGRAM solely and exclusively for its own
170  !* purpose and shall not license, lease, market
180  !* or distribute the SAMPLE PROGRAM or modification
190  !* or any part thereof.
200  !*
210  !*  Agilent shall not be liable for the quality,
220  !* performance or behavior of the SAMPLE PROGRAM.
230  !* Agilent especially disclaims that the operation
240  !* of the SAMPLE PROGRAM shall be uninterrupted or
250  !* error free.  This SAMPLE PROGRAM is provided
260  !* AS IS.
270  !*
280  !*  AGILENT DISCLAIMS THE IMPLIED WARRANTIES OF
290  !* MERCHANTABILITY AND FITNESS FOR A PARTICULAR
300  !* PURPOSE.
310  !*
320  !*  Agilent shall not be liable for any infringement
330  !* of any patent, trademark copyright or other
340  !* proprietary rights by the SAMPLE PROGRAM or
350  !* its use. Agilent does not warrant that the SAMPLE
360  !* PROGRAM is free from infringements or such
370  !* right of third parties. However, Agilent will not
380  !* knowingly infringe or deliver a software that
390  !* infringes the patent, trademark, copyright or
400  !* other proprietary right of a third party.
410  !*
420  !*************************************************
430  !
440    COM @Hp415x,@Form_off,INTEGER Hpib_sc
450    COM /File_name1/ Setup_file$[12],Save_ascii$[12],Save_data$[12]
460    COM /Condition1/ REAL Pulse_base,Pulse_peak
470    COM /Condition2/ INTEGER No_of_freq
480    COM /Condition3/ REAL Drain_source_v,Sub_v
490    COM /Condition4/ REAL Weff,Leff,T,Vfb,Vt
500    COM /Const/ REAL Q,K,Ni,Nuth
510    COM /Meas_data/ Pulse_freq(1:200),Icp(1:200),Qss(1:200)
520    COM /Calc_data/ REAL Dit,Capt_cross
530   !
540   ! ---------- Input Parameters --------------------------------------------
550   !
560   ! ---------- GPIB Setup -------------------------------------------------
570    INTEGER Hpib_addr,Swm_sc,Swm_addr
580   !
590    Hpib_sc=8           ! 415X GPIB Select Code
600    Hpib_addr=0         ! 415X GPIB Address
610   !
620    ASSIGN @Hp415x TO Hpib_sc*100+Hpib_addr
630    ASSIGN @Form_off TO Hpib_sc*100+Hpib_addr;FORMAT OFF
640   !
650   ! ---------- Pulse Voltage Conditions ------------------------------------
660    Pulse_base=-4       ! Pulse Base Voltage
670    Pulse_peak=4        ! Pulse Peak Voltage
680   !
690   ! ---------- Pulse Frequency ---------------------------------------------
700    No_of_freq=10
710 Freq_data: !
720    DATA 5E2,1E3,2E3,5E3,1E4,2E4,5E4,1E5,2E5,5E5
730   !
740    REDIM Pulse_freq(1:No_of_freq)
750    REDIM Icp(1:No_of_freq),Qss(1:No_of_freq)
760    RESTORE Freq_data
770   !
780    READ Pulse_freq(*)
790   !
800   ! ---------- Bias Conditions ---------------------------------------------
810    Drain_source_v=.5   ! Drain and Source Voltage
820    Sub_v=0             ! Substrate Voltage
830   !
840   ! ---------- Device geometry and temperature -----------------------------
850    Weff=.005           ! Channel width [cm]
860    Leff=.0005          ! Channel length [cm]
870    T=300               ! Temperature [K]
880    Vfb=-1.3            ! Flat band voltage [V]
890    Vt=.75              ! Threshold voltage [V]
900   !
910   ! ---------- Constans ----------------------------------------------------
920    Q=1.60218E-19   ! Electronic charge [C]
930    K=8.61738E-5    ! Boltzmann's constant [ev/K]
940    Ni=1.45E+10     ! Intrinsic carrier concentration of Si at 300 K [cm^-3]
950    Nuth=1.55E+7    ! Thermal verocity of carriers
960   !
970   ! ---------- Definition of measurement and stress setup files ------------
980   !
990    Setup_file$="SETUP.MES"    ! Charge Pumping Test Setup file
1000  !
1010  ! ---------- File name to save ASCII data --------------------------------
1020   Save_ascii$="CPF.ASC"    ! Charge Pumping Test Data ASCII file
1030  !
1040  ! ---------- File name to save GRAPHICS data -----------------------------
1050   Save_data$="CPF.DAT"     ! Charge Pumping Test Data file
1060  !
1070  !///////////////// Main //////////////////////////////////////////////////
1080  !
1090   ON INTR Hpib_sc CALL Err_check  ! Enables GPIB interrupt
1100   ENABLE INTR Hpib_sc;2
1110  !
1120   CALL Input_param                ! Input Parameters
1130   CALL Init_hp415x                ! Initialize 415X
1140   CALL Measure                    ! Measure Charge Pumping Current
1150   CALL Graph                      ! Draw Graph of Icp - Pulse Base Voltage
1160   CALL Save_ascii                 ! Save ASCII file
1170   CALL Save_data                  ! Save DAT file
1180   CALL Test_end                   !
1190   DISP "HCI Degradation Test is Completed!!"
1200  !
1210   END
1220  !
1230  !/////////////// Sub //////////////////////////////////////////////
1240 Input_param:SUB Input_param
1250     COM @Hp415x,@Form_off,INTEGER Hpib_sc
1260     COM /File_name1/ Setup_file$,Save_ascii$,Save_data$
1270     COM /Condition1/ REAL Pulse_base,Pulse_peak
1280     COM /Condition2/ INTEGER No_of_freq
1290     COM /Condition3/ REAL Drain_source_v,Sub_v
1300     COM /Condition4/ REAL Weff,Leff,T,Vfb,Vt
1310     COM /Const/ REAL Q,K,Ni,Nuth
1320     COM /Meas_data/ Pulse_freq(*),Icp(*),Qss(*)
1330    !
1340     CLEAR SCREEN
1350     OUTPUT @Hp415x;":DISP:WIND:ALL BAS"   ! All IBASIC screeen
1360    !
1370     PRINT "Menu to Change Measurement Conditions"
1380    !
1390     PRINT TABXY(2,2);"--------------- File Name -----------------"
1400     PRINT TABXY(2,3);"Setup file name :";Setup_file$
1410     PRINT TABXY(2,4);"ASCII file name to save data :";Save_ascii$
1420     PRINT TABXY(2,5);"DAT file name to save data :";Save_data$
1430     PRINT TABXY(2,6);"--------------- Pulse Voltage -------------"
1440     PRINT TABXY(2,7);"Pulse base voltage :";Pulse_base;"[V]"
1450     PRINT TABXY(2,8);"Pulse peak voltage :";Pulse_peak;"[V]"
1460     PRINT TABXY(2,9);"--------------- Pulse Frequency ----------"
1470     PRINT TABXY(2,10);"No. of frequencies :";No_of_freq
1480     PRINT TABXY(2,11);"Measurement frequency :";Pulse_freq(*)
1490     PRINT TABXY(2,13);"--------------- SMU Bias -----------------"
1500     PRINT TABXY(2,14);"Drain and Source bias :";Drain_source_v;"[V]"
1510     PRINT TABXY(2,15);"Substrate bias :";Sub_v;"[V]"
1520     PRINT TABXY(2,16);"------ Device geometry & Temperature ------"
1530     PRINT TABXY(2,17);"Channel width :";Weff;"[cm]"
1540     PRINT TABXY(2,18);"Channel length :";Leff;"[cm]"
1550     PRINT TABXY(2,19);"Temperature :";T;"[K]"
1560     PRINT TABXY(2,20);"Flat band voltage :";Vfb;"[V]"
1570     PRINT TABXY(2,21);"Threshold voltage :";Vt;"[V]"
1580    !
1590     ON KEY 1 LABEL "File   Name   ",1 CALL Input_file_name
1600     ON KEY 2 LABEL "Pulse  Voltage",1 CALL Input_pulse_v
1610     ON KEY 3 LABEL "Pulse  Frequency",1 CALL Input_pulse_f
1620     ON KEY 4 LABEL "SMU    BIAS   ",1 CALL Input_smu_bias
1630     ON KEY 5 LABEL "Device Geometry",1 CALL Device_geometry
1640     ON KEY 6 LABEL "              ",1 CALL Nop
1650     ON KEY 7 LABEL "Measure        ",1 GOTO End_of_sub
1660    !
1670     LOOP
1680       DISP "Select softkey to change parameters."
1690       WAIT .5
1700     END LOOP 
1710    !
1720 End_of_sub:!
1730     OFF KEY
1740     DISP 
1750     CLEAR SCREEN
1760     OUTPUT @Hp415x;":DISP:WIND:ALL BST"   ! IBASIC status screeen
1770   SUBEND
1780  !
1790 Input_file_name:SUB Input_file_name
1800     COM /File_name1/ Setup_file$,Save_ascii$,Save_data$
1810    !
1820     ON KEY 1 LABEL "Setup  File  ",2 GOSUB Setup_file
1830     ON KEY 2 LABEL "ASCII  File  ",2 GOSUB Ascii_file
1840     ON KEY 3 LABEL "DAT    File  ",2 GOSUB Dat_file
1850     ON KEY 4 LABEL "              ",2 CALL Nop
1860     ON KEY 5 LABEL "              ",2 CALL Nop
1870     ON KEY 6 LABEL "              ",2 CALL Nop
1880     ON KEY 7 LABEL "RETURN        ",2 GOTO End_of_sub
1890     LOOP
1900       DISP "Select softkey to change parameter."
1910       WAIT .5
1920     END LOOP 
1930    !
1940 Setup_file:!
1950     INPUT "Enter setup file name(XXX.MES)",Setup_file$
1960     PRINT TABXY(2,3);"                                                          "
1970     PRINT TABXY(2,3);"Setup file name :";Setup_file$
1980     RETURN
1990 Ascii_file:!
2000     INPUT "Enter ASCII data file name",Save_ascii$
2010     PRINT TABXY(2,4);"                                                          "
2020     PRINT TABXY(2,4);"ASCII file name to save data :";Save_ascii$
2030     RETURN
2040 Dat_file:!
2050     INPUT "Enter DAT type data file name",Save_data$
2060     PRINT TABXY(2,5);"                                                          "
2070     PRINT TABXY(2,5);"DAT file name to save data :";Save_data$
2080     RETURN
2090 End_of_sub:!
2100     OFF KEY
2110     DISP 
2120   SUBEND
2130  !
2140 Input_pulse_v:SUB Input_pulse_v
2150     COM /Condition1/ REAL Pulse_base,Pulse_peak
2160    !
2170     ON KEY 1 LABEL "Pulse  Base   Voltage",2 GOSUB Pulse_base
2180     ON KEY 2 LABEL "Pulse  Peak   Voltage",2 GOSUB Pulse_peak
2190     ON KEY 3 LABEL "              ",2 CALL Nop
2200     ON KEY 4 LABEL "              ",2 CALL Nop
2210     ON KEY 5 LABEL "              ",2 CALL Nop
2220     ON KEY 6 LABEL "              ",2 CALL Nop
2230     ON KEY 7 LABEL "RETURN        ",2 GOTO End_of_sub
2240     LOOP
2250       DISP "Select softkey to change parameter."
2260       WAIT .5
2270     END LOOP 
2280 Pulse_base:!
2290     INPUT "Enter Pulse Base Voltage [V]",Pulse_base
2300     PRINT TABXY(2,7);"                                                          "
2310     PRINT TABXY(2,7);"Pulse base voltage :";Pulse_base;"[V]"
2320     RETURN
2330 Pulse_peak:!
2340     INPUT "Enter Pulse Peak Voltage [V]",Pulse_peak
2350     PRINT TABXY(2,8);"                                                          "
2360     PRINT TABXY(2,8);"Pulse peak voltage :";Pulse_peak;"[V]"
2370     RETURN
2380    !
2390 End_of_sub:!
2400     OFF KEY
2410     DISP 
2420   SUBEND
2430  !
2440 Input_pulse_f:SUB Input_pulse_f
2450     COM /Condition2/ INTEGER No_of_freq
2460     COM /Meas_data/ Pulse_freq(*),Icp(*),Qss(*)
2470    !
2480     FOR I=1 TO 7
2490       ON KEY I LABEL "              ",2 CALL Nop
2500     NEXT I
2510    !
2520     INPUT "Enter No. of frequency",No_of_freq
2530    !
2540     REDIM Pulse_freq(1:No_of_freq)
2550     REDIM Icp(1:No_of_freq),Qss(1:No_of_freq)
2560    !
2570     FOR I=1 TO No_of_freq
2580       PRINT TABXY(1,23);"Enter pulse frequency. Pulse_freq(";I;")"
2590       INPUT Pulse_freq(I)
2600     NEXT I
2610     DISP 
2620    !
2630     PRINT TABXY(1,23);"                                                          "
2640     PRINT TABXY(1,10);"                                                             "
2650     PRINT TABXY(2,10);"No. of frequencies :";No_of_freq
2660     PRINT TABXY(1,11);"                                                             "
2670     PRINT TABXY(1,12);"                                                             "
2680     PRINT TABXY(2,11);"Measurement frequency :";Pulse_freq(*)
2690    !
2700     OFF KEY
2710    !
2720   SUBEND
2730  !
2740 Input_smu_bias:SUB Input_smu_bias
2750     COM /Condition3/ REAL Drain_source_v,Sub_v
2760    !
2770     ON KEY 1 LABEL "Drain  Source Voltage",2 GOSUB D_s_v
2780     ON KEY 2 LABEL "Sub    Voltage",2 GOSUB Sub_v
2790     ON KEY 3 LABEL "              ",2 CALL Nop
2800     ON KEY 4 LABEL "              ",2 CALL Nop
2810     ON KEY 5 LABEL "              ",2 CALL Nop
2820     ON KEY 6 LABEL "              ",2 CALL Nop
2830     ON KEY 7 LABEL "RETURN        ",2 GOTO End_of_sub
2840     LOOP
2850       DISP "Select softkey to change parameter."
2860       WAIT .5
2870     END LOOP 
2880 D_s_v:   !
2890     INPUT "Enter Drain and Source Voltage [V]",Drain_source_v
2900     PRINT TABXY(2,14);"                                                          "
2910     PRINT TABXY(2,14);"Drain and Source bias :";Drain_source_v;"[V]"
2920     RETURN
2930 Sub_v:   !
2940     INPUT "Enter Substrate Voltage [V]",Sub_v
2950     PRINT TABXY(2,15);"                                                          "
2960     PRINT TABXY(2,15);"Substrate bias :";Sub_v;"[V]"
2970     RETURN
2980    !
2990 End_of_sub:   !
3000     OFF KEY
3010     DISP 
3020   SUBEND
3030  !
3040 Device_geometry:SUB Device_geometry
3050     COM /Condition4/ REAL Weff,Leff,T,Vfb,Vt
3060    !
3070     ON KEY 1 LABEL "Weff          ",2 GOSUB Weff
3080     ON KEY 2 LABEL "Leff          ",2 GOSUB Leff
3090     ON KEY 3 LABEL "Temp          ",2 GOSUB Temp
3100     ON KEY 4 LABEL "Vfb           ",2 GOSUB Vfb
3110     ON KEY 5 LABEL "Vt            ",2 GOSUB Vt
3120     ON KEY 6 LABEL "              ",2 CALL Nop
3130     ON KEY 7 LABEL "RETURN        ",2 GOTO End_of_sub
3140    !
3150     LOOP
3160       DISP "Select softkey to change parameter."
3170       WAIT .5
3180     END LOOP 
3190 Weff:!
3200     INPUT "Enter effective channel width [cm]",Weff
3210     PRINT TABXY(2,17);"                                                          "
3220     PRINT TABXY(2,17);"Channel width :";Weff;"[cm]"
3230     RETURN
3240 Leff:!
3250     INPUT "Enter effective channel length [cm]",Leff
3260     PRINT TABXY(2,18);"                                                          "
3270     PRINT TABXY(2,18);"Channel length :";Leff;"[cm]"
3280     RETURN
3290 Temp:!
3300     INPUT "Enter temperature [K]",T
3310     PRINT TABXY(2,19);"                                                          "
3320     PRINT TABXY(2,19);"Temperature :";T;"[K]"
3330     RETURN
3340 Vfb:!
3350     INPUT "Enter flat band voltage [V]",Vfb
3360     PRINT TABXY(2,20);"                                                          "
3370     PRINT TABXY(2,20);"Flat band voltage :";Vfb;"[V]"
3380     RETURN
3390 Vt:!
3400     INPUT "Enter threshold voltage [V]",Vt
3410     PRINT TABXY(2,21);"                                                          "
3420     PRINT TABXY(2,21);"Threshold voltage :";Vt;"[V]"
3430     RETURN
3440    !
3450 End_of_sub:   !
3460     OFF KEY
3470     DISP 
3480   SUBEND
3490   !
3500 Nop:SUB Nop
3510   SUBEND
3520  !
3530 Init_hp415x:SUB Init_hp415x
3540     COM @Hp415x,@Form_off,INTEGER Hpib_sc
3550     COM /File_name1/ Setup_file$,Save_ascii$,Save_data$
3560     COM /Condition1/ REAL Pulse_base,Pulse_peak
3570     COM /Condition3/ REAL Drain_source_v,Sub_v
3580     DIM Comment$[58]
3590    !
3600     CLEAR SCREEN
3610     CLEAR @Hp415x
3620     OUTPUT @Hp415x;"*RST"                 ! Device reset
3630     OUTPUT @Hp415x;"*CLS"                 ! Clear status data
3640     OUTPUT @Hp415x;":STAT:PRES"           ! Preset event enable mask register
3650     OUTPUT @Hp415x;":DISP:WIND:STAT OFF"  ! Screen update off
3660     OUTPUT @Hp415x;":CAL:AUTO OFF"        ! Auto calibration off
3670     OUTPUT @Hp415x;"*ESE 60;*SRE 32;*OPC?"! Event status/service request enable register setup
3680     ENTER @Hp415x;Complete
3690     OUTPUT @Hp415x;":DISP:WIND:ALL BST"   ! Display IBASIC status screen
3700    !
3710    ! Load setup file and set bias conditions
3720    !
3730     OUTPUT @Hp415x;":MMEM:LOAD:STAT 0,'"&Setup_file$&"','DISK'"   ! Get setup file
3740     Comment$="Charge Pumping Current Measurement"
3750     OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"               ! User omment
3760     CALL Set_pulse_volt                   ! Set pulse voltage
3770     OUTPUT @Hp415x;":PAGE:MEAS:SAMP:CONS:SMU1:SOUR ";Drain_source_v! SMU1 const voltage
3780     OUTPUT @Hp415x;":PAGE:MEAS:SAMP:CONS:SMU4:SOUR ";Sub_v         ! SMU4 const voltage
3790    !
3800     ON ERROR GOTO Error_disp
3810    !
3820     OFF ERROR
3830     SUBEXIT
3840 Error_disp:   !
3850     DISP "Setup file was not resaved."
3860     WAIT 3
3870     DISP 
3880    !
3890   SUBEND
3900  !
3910 Measure:SUB Measure
3920     COM @Hp415x,@Form_off,INTEGER Hpib_sc
3930     COM /Condition2/ INTEGER No_of_freq
3940     COM /Meas_data/ Pulse_freq(*),Icp(*),Qss(*)
3950     REAL Pulse_period,Pulse_width,Pulse_lead,Pulse_trail
3960    !
3970     INTEGER Number
3980     DIM Comment$[58]
3990     Number=0
4000    !
4010     FOR I=1 TO No_of_freq
4020      !
4030       Pulse_period=1/Pulse_freq(I)
4040       Pulse_width=Pulse_period*.5
4050       Pulse_lead=Pulse_width*.8
4060       Pulse_trail=Pulse_width*.8
4070      !
4080       OUTPUT @Hp415x;":DISP:WIND:STAT OFF"  ! Screen update off
4090       Comment$="Icp measurement. Pulse frequency ="&VAL$(Pulse_freq(I))&"[Hz]"
4100       OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"     ! User comment
4110       CALL Set_pulse_time(Pulse_period,Pulse_width,Pulse_lead,Pulse_trail)
4120       OUTPUT @Hp415x;":PAGE:GLIS:GRAP:MENU" ! Draw graph
4130      !
4140      ! CALL Pulse_enable
4150      !
4160       OUTPUT @Hp415x;":PAGE:SCON:MEAS:SING" ! Start sampling measurment
4170       OUTPUT @Hp415x;"*OPC?"                ! Check completion
4180       ENTER @Hp415x;Complete
4190       OUTPUT @Hp415x;":DISP:WIND:STAT ON"   ! Screen update on
4200      !
4210      ! CALL Pulse_disable
4220      !
4230       OUTPUT @Hp415x;":DATA:DATA? 'Icp'"    ! Transfer ISB
4240       ENTER @Hp415x;Icp(I)
4250       Qss(I)=Icp(I)/Pulse_freq(I)
4260       PRINT Pulse_freq(I),Icp(I),Qss(I)
4270      !
4280     NEXT I
4290    !
4300   SUBEND
4310  !
4320 Graph:SUB Graph
4330     COM @Hp415x,@Form_off,INTEGER Hpib_sc
4340     COM /Condition1/ REAL Pulse_base,Pulse_peak
4350     COM /Condition2/ INTEGER No_of_freq
4360     COM /Condition4/ REAL Weff,Leff,T,Vfb,Vt
4370     COM /Const/ REAL Q,K,Ni,Nuth
4380     COM /Meas_data/ Pulse_freq(*),Icp(*),Qss(*)
4390     COM /Calc_data/ REAL Dit,Capt_cross
4400     DIM Comment$[58]
4410    !
4420     OUTPUT @Hp415x;":DISP:WIND:STAT OFF"           ! Screen update off
4430    !
4440     Comment$="Recombined Charge(Qss) vs Pulse Frequency"
4450     OUTPUT @Hp415x;":PAGE:CHAN:COMM '"&Comment$&"'"! Set user comment
4460    !
4470     OUTPUT @Hp415x;":TRAC:DEL:ALL"                 ! Delete all user variable names
4480     OUTPUT @Hp415x;":TRAC:DEF 'Freq',";No_of_freq  ! Define user variable
4490     OUTPUT @Hp415x;":TRAC:UNIT 'Freq','Hz'"        ! 'Freq'
4500     OUTPUT @Hp415x;":TRAC:DEF 'Qss',";No_of_freq   ! Define user variable
4510     OUTPUT @Hp415x;":TRAC:UNIT 'Qss','C'"          ! 'Qss'
4520    !
4530     OUTPUT @Hp415x;":FORM:DATA REAL,64"            ! Binary data transfer
4540     OUTPUT @Hp415x;":FORM:BORD NORM"               ! Transfer in normal mode
4550     OUTPUT @Hp415x;":TRAC 'Freq',#0";              ! Transfer Frequency
4560     OUTPUT @Form_off;Pulse_freq(*),END
4570     OUTPUT @Hp415x;":TRAC 'Qss',#0";               ! Transfer Qss
4580     OUTPUT @Form_off;Qss(*),END
4590     OUTPUT @Hp415x;":FORM:DATA ASCII"              ! ASCII data transfer
4600    !
4610     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEL:ALL"
4620     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEF 'Q','C','";Q;"'"   ! Set user function
4630     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEF 'KT','eV','";K*T;"'"! Set user function
4640     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEF 'Ag','cm^2','";Weff*Leff;"'" ! Set user function
4650     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEF 'Dit','cm^-2','@L1G*LGT(EXP(1))/2/Q/KT/Ag'" ! Set user function
4660     OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:NAME 'Freq'" ! Set X axis to Freq
4670     OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:NAME 'Qss'" ! Set Y1 axis to Qss
4680     OUTPUT @Hp415x;":PAGE:DISP:GRAP:X:SCAL LOG"    ! X axis Log scale
4690     OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y1:SCAL LIN"   ! Y1 axis Linear scale
4700     OUTPUT @Hp415x;":PAGE:DISP:GRAP:Y2:DEL"        ! Delete Y2 axis
4710     OUTPUT @Hp415x;":PAGE:DISP:SET:DVAR:DEL:ALL"   ! Delete data variables
4720     OUTPUT @Hp415x;":PAGE:DISP:DVAR 'Dit'"         ! Set data variable
4730     OUTPUT @Hp415x;":PAGE:GLIS:GRAP:SCAL:AUTO ONCE"! Auto scale
4740     OUTPUT @Hp415x;":PAGE:GLIS:GRAP:MARK:STAT ON"  ! Marker on
4750     OUTPUT @Hp415x;":PAGE:GLIS:LINE:LSEL 1"        ! Select line 1
4760     OUTPUT @Hp415x;":PAGE:GLIS:LINE ON"            ! Draw line 1
4770     OUTPUT @Hp415x;":PAGE:GLIS:LINE:MODE REGR"     ! Line 1 regression mode
4780     OUTPUT @Hp415x;":PAGE:GLIS:CURS SHOR"          ! Short cursor on
4790     OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X ";MAX(Pulse_freq(*)) ! Marker moves to Max Pulse_freq
4800     OUTPUT @Hp415x;":PAGE:GLIS:LINE:CTM"           ! Cursor moves to marker
4810     OUTPUT @Hp415x;":PAGE:GLIS:LINE:SCUR"          ! Select another cursor
4820     OUTPUT @Hp415x;":PAGE:GLIS:MARK:DIR:X ";MIN(Pulse_freq(*)) ! Marker moves to Min Pulse_freq
4830     OUTPUT @Hp415x;":PAGE:GLIS:LINE:CTM"           ! Cursor moves to marker
4840    !
4850     OUTPUT @Hp415x;":DATA:DATA? '@L1G'"   ! Transfer Slope of line 1
4860     ENTER @Hp415x;Slope
4870     OUTPUT @Hp415x;":DATA:DATA? '@L1X'"   ! Transfer x intercept of line 1
4880     ENTER @Hp415x;X_inter
4890    !
4900     Dit=Slope*LGT(EXP(1))/(2*Q*K*T*Leff*Weff)
4910     Capt_cross=1/(Nuth*Ni)*ABS(Pulse_peak-Pulse_base)/ABS(Vfb-Vt)*X_inter/.5
4920    !
4930     OUTPUT @Hp415x;":PAGE:CHAN:UFUN:DEF 'CaptC','cm^2','";Capt_cross;"'"
4940     OUTPUT @Hp415x;":PAGE:DISP:DVAR 'CaptC'"         ! Set data variable
4950     OUTPUT @Hp415x;":PAGE:GLIS:GRAP:MENU" ! Draw graph
4960    !
4970     OUTPUT @Hp415x;":DISP:WIND:STAT ON"            ! Screen update on
4980     OUTPUT @Hp415x;":DISP:WIND:STAT OFF"           ! Screen update off
4990    !
5000   SUBEND
5010  !
5020 Save_ascii:SUB Save_ascii
5030     COM @Hp415x,@Form_off,INTEGER Hpib_sc
5040     COM /File_name1/ Setup_file$,Save_ascii$,Save_data$
5050     COM /Condition1/ REAL Pulse_base,Pulse_peak
5060     COM /Condition2/ INTEGER No_of_freq
5070     COM /Condition3/ REAL Drain_source_v,Sub_v
5080     COM /Condition4/ REAL Weff,Leff,T,Vfb,Vt
5090     COM /Const/ REAL Q,K,Ni,Nuth
5100     COM /Meas_data/ Pulse_freq(*),Icp(*),Qss(*)
5110     COM /Calc_data/ REAL Dit,Capt_cross
5120    ! ---------- Create charge pumping data to ASCII file ------------------
5130     ON ERROR GOSUB Error
5140     CREATE Save_ascii$,100
5150     OFF ERROR
5160     ASSIGN @File TO Save_ascii$;FORMAT ON
5170     OUTPUT @File;No_of_freq
5180     OUTPUT @File;Pulse_base,Pulse_peak
5190     OUTPUT @File;Drain_source_v,Sub_v
5200     OUTPUT @File;Weff,Leff,T,Vfb,Vt
5210     OUTPUT @File;Pulse_freq(*)
5220     OUTPUT @File;Icp(*)
5230     OUTPUT @File;Qss(*)
5240     OUTPUT @File;Dit,Capt_cross
5250     ASSIGN @File TO *
5260     SUBEXIT
5270    !
5280 Error:   !
5290    !
5300     OUTPUT @Hp415x;":DISP:WIND:STAT ON"   ! Screen update on
5310     OUTPUT @Hp415x;":DISP:WIND:ALL BAS"   ! All IBASIC screen
5320     IF ERRN=56 THEN
5330       PRINT "Old";Save_sacii$;"exists. Rename old file and press [Continue]."
5340     ELSE 
5350       PRINT ERRM$
5360       PRINT "Take measure(s) to prevent the error and press [Continue]."
5370     END IF 
5380     PAUSE
5390    !
5400     CLEAR SCREEN
5410     OUTPUT @Hp415x;":DISP:WIND:ALL BST"   ! Display IBASIC status screen
5420     RETURN
5430    !
5440   SUBEND
5450  !
5460 Save_data:SUB Save_data
5470     COM @Hp415x,@Form_off,INTEGER Hpib_sc
5480     COM /File_name1/ Setup_file$,Save_ascii$,Save_data$
5490    ! ----------- Save charge pumping data to DAT file ---------------------
5500     ON ERROR GOSUB Error
5510     OUTPUT @Hp415x;":MMEM:STOR:TRAC DEF,'"&Save_data$&"','DISK'"
5520     OFF ERROR
5530     SUBEXIT
5540    !
5550 Error:   !
5560    !
5570     OUTPUT @Hp415x;":DISP:WIND:STAT ON"   ! Screen update on
5580     OUTPUT @Hp415x;":DISP:WIND:ALL BAS"   ! All IBASIC screen
5590     IF ERRN=56 THEN
5600       PRINT "Old";Save_file$;"exists. Rename old file and press [Continue]."
5610     ELSE 
5620       PRINT ERRM$
5630       PRINT "Take measure(s) to prevent the error and press [Continue]."
5640     END IF 
5650     PAUSE
5660    !
5670     CLEAR SCREEN
5680     OUTPUT @Hp415x;":DISP:WIND:ALL BST"   ! Display IBASIC status screen
5690     RETURN
5700    !
5710   SUBEND
5720    !
5730 Test_end:SUB Test_end
5740     COM @Hp415x,@Form_off,INTEGER Hpib_sc
5750    !
5760     OUTPUT @Hp415x;"*CLS"                 ! Clear status data
5770     OUTPUT @Hp415x;":DISP:WIND:STAT ON"   ! Screen update on
5780     OUTPUT @Hp415x;":DISP:WIND:ALL INST"  ! All instrument screen
5790    !
5800   SUBEND
5810    !
5820 Err_check:SUB Err_check
5830     COM @Hp415x,@Form_off,INTEGER Hpib_sc
5840    !
5850     INTEGER I,J
5860     DIM Err_message$(10)[100]
5870    !
5880     OUTPUT @Hp415x;":PAGE:SCON:STOP"      ! Stop measurement
5890     I=0
5900     REPEAT
5910       I=I+1
5920       OUTPUT @Hp415x;":SYST:ERR?"         ! Read error
5930       ENTER @Hp415x;Err_num(I),Err_message$(I)
5940     UNTIL Err_num(I)=0
5950     IF I=1 THEN
5960       PRINT "No Error"
5970     ELSE 
5980       PRINT 
5990       PRINT 
6000       PRINT "### ERROR Occurred ###:"
6010       FOR J=1 TO I-1
6020         PRINT Err_num(J);Err_message$(J)
6030       NEXT J
6040       OUTPUT @Hp415x;":DISP:WIND:STAT ON" ! Screen update on
6050       OUTPUT @Hp415x;":DISP:WIND:ALL BAS" ! All IBASIC screen
6060       PRINT 
6070       PRINT "              === Test Aborted ==="
6080       STOP
6090     END IF 
6100   SUBEND
6110  !
6120 Set_pulse_time:SUB Set_pulse_time(Pulse_period,Pulse_width,Pulse_lead,Pulse_trail)
6130     COM @Hp415x,@Form_off,INTEGER Hpib_sc
6140    !
6150     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:PER ";Pulse_period
6160     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:WIDT ";Pulse_width
6170     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:LEAD ";Pulse_lead
6180     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:TRA ";Pulse_trail
6190   SUBEND
6200  !
6210 Set_pulse_volt:SUB Set_pulse_volt
6220     COM @Hp415x,@Form_off,INTEGER Hpib_sc
6230     COM /Condition1/ REAL Pulse_base,Pulse_peak
6240    !
6250     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:PEAK ";Pulse_peak   ! PGU1 pulse peak voltage
6260     OUTPUT @Hp415x;":PAGE:MEAS:PGUS:PULS:PGU1:BASE ";Pulse_base   ! PGU1 pulse base voltage
6270   SUBEND
6280  !
6290 Pulse_enable:SUB Pulse_enable   ! This subprogram is used to enable
6300  ! external pulse generator output
6310  ! OUTPUT Ext_pg;"ENABLE COMMAND"
6320  !
6330   SUBEND
6340 Pulse_disable:SUB Pulse_disable   ! This subprogram is used to disable
6350  ! external pulse generator output
6360  ! OUTPUT Ext_pg;"DISABLE COMMAND"
6370  !
6380   SUBEND
