Prober03-ibw.txt

프루버

10     !프루버를 수동으로 조작해 다이 좌표를 추출함.
11     !   inst=4는 V-I커브 데이터(nop)를 샘플수(Nos)만큼 추출함.
20     !hp 3478A DMM
30     !hp 4284A LCR
40     !Keithley 2420 SourceMeter
50     OPTION BASE 1
60     DIM Infilename$[20],Outfilename$[20],Dhms$[8]
70     INTEGER I,J,X,X_pre,Y,Y_pre,Zup,Len,Nop,Nos
80     DIM Tmp$[1]
90     Time$=TIME$(TIMEDATE)
100    Date$=DATE$(TIMEDATE)
110    Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
120    Outfilename$=Dhms$&".txt"
130    CREATE Outfilename$,1
140    ASSIGN @Outfile TO Outfilename$;FORMAT ON
150    ASSIGN @Probe TO 402
160    Inst=4
170    Nop=101      !측정 지점수
180    Nos=100     !측정 샘플 수량
190    Zup=220      ! 척 Z UP일 때 높이
200    SELECT Inst
210    CASE 1  !3478A
220      ASSIGN @Dmm TO 427
230      OUTPUT @Outfile;"No.,Time,X,Y,R"
240    CASE 2  !4284A
250      ASSIGN @Lcr TO 417
260      OUTPUT @Lcr;"TRIG:SOUR BUS"
270      OUTPUT @Lcr;"ABORT;:INIT"
280      OUTPUT @Outfile;"No.,Time,X,Y,A-value,B-value"
290    CASE 3  !2420  single trigger 측정
300      ASSIGN @Sm TO 424
310      OUTPUT @Sm;"FORM:ELEM VOLT, CURR"
320      OUTPUT @Sm;"SOURCE:CLEAR:AUTO ON"
330      OUTPUT @Outfile;"No.,Time,X,Y,Volt,Curr"
340    CASE 4  !2420 log sweep 측정
350      ASSIGN @Sm TO 424
360      OUTPUT @Sm;"FORM:ELEM VOLT, CURR"
370      OUTPUT @Sm;"SOURCE:CLEAR:AUTO ON"
380      ALLOCATE D(Nos,Nop),D0(Nop,2)     !샘플 100개, Nop, 전압/전류
390      OUTPUT @Sm;"SOUR:FUNC CURR"
400      OUTPUT @Sm;"SOUR:CURR:MODE SWE"
410      OUTPUT @Sm;"SOUR:SWE:SPAC LOG"
420      OUTPUT @Sm;"SOUR:CURR:STAR .0001"   !-10mA 부터
430      OUTPUT @Sm;"SOUR:CURR:STOP 0.03"    !+10mA 까지
440      OUTPUT @Sm;"SOUR:SWE:POIN ";Nop     ! 101 번 측정
450      OUTPUT @Sm;"SENS:FUNC ""VOLT"""
460      OUTPUT @Sm;"SENS:VOLT:NPLC 0.01"
470      OUTPUT @Sm;"TRIG:COUN ";Nop
480      OUTPUT @Sm;"*OPC?"
490      ENTER @Sm;Tmp       !앞 명령이 다 수행될 때까지 기다려
500    END SELECT 
510    I=0
520    T0=TIMEDATE
530    LOOP
540      ! 척 UP될때까지 기다린다.
550      LOOP
560        OUTPUT @Probe;"?ZO"     !현재 척높이는? Znnnn
570        WAIT .1
580        ENTER @Probe;Res_z$
590        Len=LEN(Res_z$)
600        Zheight=VAL(Res_z$[2,Len])        ![start;length] [start,stop]
610        Zheight=INT(Zheight/10)    ! 0.1단위이므로
620      EXIT IF Zheight=Zup
630      END LOOP 
640      I=I+1
650      ! 이 때 다이좌표를 읽는다.
660      GOSUB Read_xy
670      T1=TIMEDATE-T0
680      SELECT Inst
690      CASE 1   !3478A
700        ENTER @Dmm;R
710        PRINT I,INT(T1);"sec","X=";X,"Y=";Y,"R=";R
720        OUTPUT @Outfile;I,T1,X,Y,R
730      CASE 2   !4284A
740        OUTPUT @Lcr;"TRIGGER:IMMEDIATE"
750        OUTPUT @Lcr;"FETCH?"
760        ENTER @Lcr;A,B,C
770        PRINT I,INT(T1);"sec","X=";X,"Y=";Y,"A=";A,"B=";B
780        OUTPUT @Outfile;I,T1,X,Y,A,B
790      CASE 3   !2420
800        OUTPUT @Sm;"READ?"
810        ENTER @Sm;Volt,Curr
820        PRINT I,INT(T1);"sec","X=";X,"Y=";Y,"V=";Volt,"i=";Curr
830        OUTPUT @Outfile;I,T1,X,Y,Volt,Curr
840      CASE 4
850        OUTPUT @Sm;"READ?"                  !Trigger sweep and acquire data.
860        ENTER @Sm;D0(*)
870        FOR J=1 TO Nop
880          D(I,J)=D0(J,1)        !측정된 전압값을 전체 배열에 입력한다.
890        NEXT J
900      END SELECT 
910    ! 다음위치 이동 때까지 대기한다.
920      X_pre=X!현재 위치 기억
930      Y_pre=Y
940      LOOP
950        GOSUB Read_xy
960      EXIT IF X<>X_pre
970      EXIT IF Y<>Y_pre
980      END LOOP 
990    EXIT IF I=Nos       !현재 샘플수가 지정된 샘플수량이면 루프 탈출
1000   END LOOP 
1010   SELECT Inst
1020   CASE 4
1030     FOR I=1 TO Nop
1040       OUTPUT @Outfile;I,D0(I,2);","; !마지막 측정된 Curr를 출력한다.
1050       FOR J=1 TO Nos
1060         OUTPUT @Outfile;D(J,I);","; !해당 전류에서 측정된 모든 샘플의 전압값을 출력한다.
1070       NEXT J
1080       OUTPUT @Outfile;" "
1090     NEXT I
1100   END SELECT 
1110   STOP
1120 Read_xy:  !!!
1130   LOOP
1140     OUTPUT @Probe;"?P"        !현재 다이좌표는?
1150     ENTER @Probe;Res_xy$        !Xn...Yn...
1160   EXIT IF POS(Res_xy$,"X")=1
1170   END LOOP 
1180   Len=LEN(Res_xy$)
1190          ! POS(A$,B$) A$에서 B$ 위치. 0 이면 없다.
1200   X=VAL(Res_xy$[2,POS(Res_xy$,"Y")-1])          !두번째부터 Y등장 바로앞까지
1210   Y=VAL(Res_xy$[POS(Res_xy$,"Y")+1,Len])        !Y등장 다음부터 len까지
1220   RETURN
1230   END