프루버
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