"Prober03-ibw.txt"의 두 판 사이의 차이
(새 문서: 프루버 <pre> 10 !프루버를 수동으로 조작할 때 자동으로 측정하는 프로그램 20 !hp 3478A DMM 30 !hp 4284A LCR 40 !Keithley 2420 SourceMeter...) |
|||
1번째 줄: | 1번째 줄: | ||
[[프루버]] | [[프루버]] | ||
<pre> | <pre> | ||
− | 10 !프루버를 수동으로 | + | 10 !프루버를 수동으로 조작해 다이 좌표를 추출함. |
+ | 11 ! inst=4는 V-I커브 데이터(nop)를 샘플수(Nos)만큼 추출함. | ||
20 !hp 3478A DMM | 20 !hp 3478A DMM | ||
30 !hp 4284A LCR | 30 !hp 4284A LCR | ||
40 !Keithley 2420 SourceMeter | 40 !Keithley 2420 SourceMeter | ||
− | 50 DIM Infilename$[20],Outfilename$[20],Dhms$[8] | + | 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 | ||
</pre> | </pre> |
2020년 5월 23일 (토) 13:51 기준 최신판
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