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