"4284all-bas"의 두 판 사이의 차이
잔글 |
|||
(같은 사용자의 중간 판 3개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | + | [[LCR-4284A]] | |
<pre> | <pre> | ||
+ | 10 ![[LCR-4284A.bas]] 4284A, 2024/04/25 | ||
20 OPTION BASE 1 | 20 OPTION BASE 1 | ||
30 INTEGER I,Count,Btn | 30 INTEGER I,Count,Btn | ||
37번째 줄: | 38번째 줄: | ||
360 Typeselect: ! | 360 Typeselect: ! | ||
370 INTEGER Type_size,Type_length,Typeno | 370 INTEGER Type_size,Type_length,Typeno | ||
− | 380 Type_size= | + | 380 Type_size=20 !문자열 배열의 크기 |
390 Type_length=15 !문자열의 길이 | 390 Type_length=15 !문자열의 길이 | ||
400 ALLOCATE Type$(Type_size)[Type_length] | 400 ALLOCATE Type$(Type_size)[Type_length] | ||
48번째 줄: | 49번째 줄: | ||
470 Type$(7)="Freq St-Sp" | 470 Type$(7)="Freq St-Sp" | ||
480 Type$(8)="Freq 1k-1M" | 480 Type$(8)="Freq 1k-1M" | ||
− | + | 490 Type$(9)="TCC" !SU-222 오븐사용 | |
− | + | 500 Type$(10)="TC Freq Sweep" !주파수스윕하면서 | |
− | + | 510 Type$(11)="Speaker-Nexvell" !스피커 | |
− | + | 520 Type$(12)="Earphone" !이어폰 osc=0.1V | |
− | + | 530 Type$(13)="Speaker" !스피커 | |
− | + | 540 Type$(14)="Piezo Buzzer" ! | |
− | + | 550 Type$(15)="AF-VCM 20-1k" ! | |
− | + | 560 Type$(16)="Galvano" !400-600Hz !20Hz~1KHz | |
− | + | 570 Type$(17)="Osc Spk" | |
− | + | 580 Type$(18)="100-300Hz" | |
− | + | 590 Type$(19)="150-200Hz" | |
− | + | 600 Msg$="테스트 종류를 선택하십시오." | |
− | + | 610 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Type$(*),"COLUMNS":Type_length,"ROWS":Type_size),RETURN("SELECTION":Typeno) | |
− | + | 620 Typeno=Typeno+1 | |
− | + | 630 SELECT Type$(Typeno) | |
− | + | 640 CASE "Norm" !샘플이 있는지 없는지 자동 인식 | |
− | + | 650 INTEGER Go_count | |
− | + | 660 Msg$="A-value lower limit" | |
− | + | 670 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) | |
− | + | 680 IF Btn=-1 OR Btn=1 THEN A_lcl=2.5E-11 | |
− | + | 690 A_lcl=VAL(String$) | |
+ | 700 Msg$="A-value upper limit" | ||
+ | 710 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) | ||
+ | 720 IF Btn=-1 OR Btn=1 THEN A_ucl=3.5E-11 | ||
+ | 730 A_ucl=VAL(String$) | ||
+ | 740 Msg$="유효값 연속 횟수" | ||
+ | 750 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) | ||
+ | 760 IF Btn=-1 OR Btn=1 THEN Go_limit=5 | ||
+ | 770 Go_limit=VAL(String$) | ||
+ | 780 Msg$="허용오차 [%]" | ||
+ | 790 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) | ||
+ | 800 IF Btn=-1 OR Btn=1 THEN A_err=.1 | ||
+ | 810 A_err=VAL(String$) | ||
+ | 820 OUTPUT @File;"No, A, B, Vm[V], Im[A]" | ||
+ | 830 Count=0 | ||
+ | 840 LOOP | ||
+ | 850 Count=Count+1 | ||
+ | 860 REPEAT!샘플이 있나? | ||
+ | 870 GOSUB Reading | ||
+ | 880 UNTIL A>A_lcl AND A<A_ucl !LCL=lower control limit, UCL=upper control limit | ||
+ | 890 Go_count=0 | ||
+ | 900 A_pre=A | ||
+ | 910 REPEAT | ||
+ | 920 GOSUB Reading | ||
+ | 930 A_cur=A | ||
+ | 940 IF A_cur=0 THEN STOP | ||
+ | 950 A_delta=ABS((A_cur-A_pre)/A_cur)*100 | ||
+ | 960 IF A_delta<A_err THEN | ||
+ | 970 Go_count=Go_count+1 | ||
+ | 980 ELSE | ||
+ | 990 Go_count=0 | ||
+ | 1000 END IF | ||
+ | 1010 A_pre=A_cur | ||
+ | 1020 UNTIL Go_count=Go_limit | ||
+ | 1030 PRINT "No.=";Count;",A=";A;",B=";B | ||
+ | 1040 OUTPUT @File;Count,A,B,Vm,Im | ||
+ | 1050 BEEP | ||
+ | 1060 REPEAT!샘플이 없나? | ||
+ | 1070 GOSUB Reading | ||
+ | 1080 UNTIL | ||
</pre> | </pre> |
2024년 4월 25일 (목) 12:48 기준 최신판
10 ![[LCR-4284A.bas]] 4284A, 2024/04/25 20 OPTION BASE 1 30 INTEGER I,Count,Btn 40 DIM Msg$[50],Id$[50],String$[50] 50 CLEAR SCREEN 60 GOSUB Fileopen 70 GOSUB Setup 80 GOSUB Funcselect 90 GOSUB Typeselect 100 OUTPUT @Lcr;"TRIG:SOUR INT" 110 STOP 120 Setup: ! 130 ASSIGN @Lcr TO 717 140 REMOTE @Lcr 150 !OUTPUT @Lcr;"*RST" 160 OUTPUT @Lcr;"*CLS" 170 OUTPUT @Lcr;"*ESE 60" 180 OUTPUT @Lcr;"*SRE 32" 190 ON INTR 7 CALL Errors 200 ENABLE INTR 7;2 210 OUTPUT @Lcr;"*IDN?" 220 ENTER @Lcr;Id$ 230 PRINT Id$ 240 OUTPUT @Lcr;"TRIG:SOUR BUS" 250 OUTPUT @Lcr;"ABORT;:INIT" 260 RETURN 270 Fileopen: ! 280 DIM Filename$[20],Dhms$[8] 290 Time$=TIME$(TIMEDATE) 300 Date$=DATE$(TIMEDATE) 310 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] 320 Filename$=Dhms$&".txt" 330 CREATE Filename$,1 340 ASSIGN @File TO Filename$;FORMAT ON 350 RETURN 360 Typeselect: ! 370 INTEGER Type_size,Type_length,Typeno 380 Type_size=20 !문자열 배열의 크기 390 Type_length=15 !문자열의 길이 400 ALLOCATE Type$(Type_size)[Type_length] 410 Type$(1)="Norm" 420 Type$(2)="Freq Sweep" 430 Type$(3)="Freq-48 Sweep" 440 Type$(4)="DC Bias Sweep" 450 Type$(5)="Osc Level Sweep" 460 Type$(6)="Time Sweep" 470 Type$(7)="Freq St-Sp" 480 Type$(8)="Freq 1k-1M" 490 Type$(9)="TCC" !SU-222 오븐사용 500 Type$(10)="TC Freq Sweep" !주파수스윕하면서 510 Type$(11)="Speaker-Nexvell" !스피커 520 Type$(12)="Earphone" !이어폰 osc=0.1V 530 Type$(13)="Speaker" !스피커 540 Type$(14)="Piezo Buzzer" ! 550 Type$(15)="AF-VCM 20-1k" ! 560 Type$(16)="Galvano" !400-600Hz !20Hz~1KHz 570 Type$(17)="Osc Spk" 580 Type$(18)="100-300Hz" 590 Type$(19)="150-200Hz" 600 Msg$="테스트 종류를 선택하십시오." 610 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Type$(*),"COLUMNS":Type_length,"ROWS":Type_size),RETURN("SELECTION":Typeno) 620 Typeno=Typeno+1 630 SELECT Type$(Typeno) 640 CASE "Norm" !샘플이 있는지 없는지 자동 인식 650 INTEGER Go_count 660 Msg$="A-value lower limit" 670 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 680 IF Btn=-1 OR Btn=1 THEN A_lcl=2.5E-11 690 A_lcl=VAL(String$) 700 Msg$="A-value upper limit" 710 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 720 IF Btn=-1 OR Btn=1 THEN A_ucl=3.5E-11 730 A_ucl=VAL(String$) 740 Msg$="유효값 연속 횟수" 750 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 760 IF Btn=-1 OR Btn=1 THEN Go_limit=5 770 Go_limit=VAL(String$) 780 Msg$="허용오차 [%]" 790 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 800 IF Btn=-1 OR Btn=1 THEN A_err=.1 810 A_err=VAL(String$) 820 OUTPUT @File;"No, A, B, Vm[V], Im[A]" 830 Count=0 840 LOOP 850 Count=Count+1 860 REPEAT!샘플이 있나? 870 GOSUB Reading 880 UNTIL A>A_lcl AND A<A_ucl !LCL=lower control limit, UCL=upper control limit 890 Go_count=0 900 A_pre=A 910 REPEAT 920 GOSUB Reading 930 A_cur=A 940 IF A_cur=0 THEN STOP 950 A_delta=ABS((A_cur-A_pre)/A_cur)*100 960 IF A_delta<A_err THEN 970 Go_count=Go_count+1 980 ELSE 990 Go_count=0 1000 END IF 1010 A_pre=A_cur 1020 UNTIL Go_count=Go_limit 1030 PRINT "No.=";Count;",A=";A;",B=";B 1040 OUTPUT @File;Count,A,B,Vm,Im 1050 BEEP 1060 REPEAT!샘플이 없나? 1070 GOSUB Reading 1080 UNTIL A<A_lcl OR A>A_ucl 1090 END LOOP 1100 CASE "Freq Sweep","Speaker-Nexvell","Speaker","Earphone" 1110 SELECT Type$(Typeno) 1120 CASE "Earphone" 1130 OUTPUT @Lcr;"VOLT:LEV 0.1V" 1140 CASE ELSE 1150 GOSUB Oscselect 1160 END SELECT 1170 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 1180 OUTPUT @Lcr;"FREQ:CW? MIN" 1190 ENTER @Lcr;Freq_min !20Hz 1200 OUTPUT @Lcr;"FREQ:CW? MAX" 1210 ENTER @Lcr;Freq_max !1MHz 1220 SELECT Type$(Typeno) 1230 CASE "Freq Sweep" 1240 Freq_octv=20 1250 Freq_min=20 1260 Freq_max=1.E+6 1270 GOSUB Chart_var 1280 GOSUB Init_chart 1290 CASE "Speaker-Nexvell" 1300 Freq_octv=50 1310 Freq_min=20 1320 Freq_max=10000 1330 CASE "Earphone" 1340 Freq_octv=100 1350 Freq_min=20 1360 Freq_max=20000 1370 CASE "Speaker" 1380 Freq_octv=100 1390 Freq_min=20 1400 Freq_max=20000 1410 END SELECT 1420 Freq=Freq_min 1430 Count=0 1440 Freq_p=0 1450 LOOP 1460 IF Freq>Freq_max THEN Freq=Freq_max 1470 OUTPUT @Lcr;"FREQ:CW ";Freq !command 1480 OUTPUT @Lcr;"FREQ:CW?" 1490 ENTER @Lcr;Freq_level 1500 IF Freq_p<>Freq_level THEN 1510 Count=Count+1 1520 Freq_p=Freq_level 1530 Log_freq=LOG(Freq_level)/LOG(10) 1540 GOSUB Reading 1550 IF A<0 THEN 1560 Y(1)=.1 1570 ELSE 1580 Y(1)=LOG(A)/LOG(10) 1590 END IF 1600 Y(2)=.1 !사용하지 않음 1610 CONTROL @Strip;SET("POINT LOCATION":Log_freq,"VALUES":Y(*)) 1620 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 1630 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 1640 BEEP 1650 END IF 1660 Freq=Freq*10^(1/Freq_octv) 1670 EXIT IF Freq_level>=Freq_max 1680 END LOOP 1690 OUTPUT @Lcr;"FREQ:CW 1000" !연결되었는지 확인하기 위해 1kHz 발진 1700 SELECT Type$(Typeno) 1710 CASE "Earphone" 1720 OUTPUT @Lcr;"VOLT:LEV 0.1V" 1730 CASE ELSE 1740 OUTPUT @Lcr;"VOLT:LEV 1V" !init 1750 END SELECT 1760 CASE "Piezo Buzzer" 1770 GOSUB Oscselect 1780 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 1790 Freq_min=1000 !반드시 1800 Freq_max=5000 !1M 이내에서 1810 Freq=Freq_min 1820 GOSUB Freq1k1m_read 1830 Count=0 1840 LOOP 1850 Count=Count+1 1860 OUTPUT @Lcr;"FREQ:CW ";Freq1k1m(Count) !command 1870 OUTPUT @Lcr;"FREQ:CW?" 1880 ENTER @Lcr;Freq_level 1890 GOSUB Reading 1900 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 1910 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 1920 BEEP 1930 EXIT IF Freq_level>Freq_max 1940 END LOOP 1950 OUTPUT @Lcr;"FREQ:CW ";Freq1k1m(1) !1kHz 1960 OUTPUT @Lcr;"VOLT:LEV 1V" !init 1970 CASE "AF-VCM 20-1k" 1980 GOSUB Oscselect 1990 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 2000 Freq_min=20 !100 2010 Freq_max=1000 !1000 2020 Freq=Freq_min 2030 Count=0 2040 Freq_p=0 2050 FOR Freq=Freq_min TO Freq_max STEP 5 !5 2060 OUTPUT @Lcr;"FREQ:CW ";Freq !command 2070 OUTPUT @Lcr;"FREQ:CW?" 2080 ENTER @Lcr;Freq_level 2090 IF Freq_p<>Freq_level THEN 2100 Count=Count+1 2110 GOSUB Reading 2120 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 2130 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 2140 Freq_p=Freq_level 2150 BEEP 2160 END IF 2170 NEXT Freq 2180 OUTPUT @Lcr;"VOLT:LEV 1V" !init 2190 CASE "Galvano","100-300Hz","150-200Hz" 2200 GOSUB Chart_var 2210 GOSUB Init_chart 2220 GOSUB Oscselect 2230 OUTPUT @File;"No, Freq[Hz], A, B" 2240 SELECT Type$(Typeno) 2250 CASE "Galvano" 2260 Freq_min=20 !100 2270 Freq_max=200 !1000 2280 Freq_step=1 2290 CASE "100-300Hz" 2300 Freq_min=100 2310 Freq_max=300 2320 Freq_step=1 2330 CASE "150-200Hz" 2340 Freq_min=150 2350 Freq_max=200 2360 Freq_step=.1 2370 END SELECT 2380 Freq=Freq_min 2390 Count=0 2400 Freq_p=0 2410 FOR Freq=Freq_min TO Freq_max STEP Freq_step !5 2420 Count=Count+1 2430 OUTPUT @Lcr;"FREQ:CW ";Freq !command 2440 OUTPUT @Lcr;"FREQ:CW?" 2450 ENTER @Lcr;Freq_level 2460 IF Freq_level<>Freq_p THEN !주파수가 종래와 같지 않으면 2470 GOSUB Reading 2480 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 2490 OUTPUT @File;Count,Freq_level,A,B 2500 Y(1)=A*10 2510 Y(2)=B+50 2520 CONTROL @Strip;SET("POINT LOCATION":Freq_level,"VALUES":Y(*)) 2530 BEEP 2540 Freq_p=Freq_level 2550 END IF 2560 NEXT Freq 2570 OUTPUT @Lcr;"VOLT:LEV 1V" !init 2580 CASE "Freq St-Sp" 2590 GOSUB Oscselect 2600 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 2610 Freq_min=1000 !100 2620 Freq_max=6000 !1000 2630 Freq=Freq_min 2640 Count=0 2650 FOR Freq=Freq_min TO Freq_max STEP 10 !5 2660 Count=Count+1 2670 OUTPUT @Lcr;"FREQ:CW ";Freq !command 2680 OUTPUT @Lcr;"FREQ:CW?" 2690 ENTER @Lcr;Freq_level 2700 GOSUB Reading 2710 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 2720 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 2730 BEEP 2740 NEXT Freq 2750 OUTPUT @Lcr;"VOLT:LEV 1V" !init 2760 CASE "Freq-48 Sweep" 2770 GOSUB Oscselect 2780 GOSUB Freq48 2790 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 2800 FOR I=1 TO 48 2810 OUTPUT @Lcr;"FREQ:CW ";Freq48(I) 2820 GOSUB Reading 2830 PRINT "No.=";I;",Freq=";Freq48(I);"Hz,A=";A;",B=";B 2840 OUTPUT @File;I,Freq48(I),A,B,Vm,Im 2850 BEEP 2860 NEXT I 2870 OUTPUT @Lcr;"VOLT:LEV 1V" !init 2880 CASE "Freq 1k-1M" 2890 GOSUB Oscselect 2900 GOSUB Freq1k1m_read 2910 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 2920 FOR I=1 TO 279 2930 OUTPUT @Lcr;"FREQ:CW ";Freq1k1m(I) 2940 GOSUB Reading 2950 PRINT "No.=";I;",Freq=";Freq1k1m(I);"Hz,A=";A;",B=";B 2960 OUTPUT @File;I,Freq1k1m(I),A,B,Vm,Im 2970 BEEP 2980 NEXT I 2990 OUTPUT @Lcr;"VOLT:LEV 1V" !init 3000 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3010 CASE "DC Bias Sweep" 3020 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3030 OUTPUT @Lcr;"BIAS:VOLT:LEV? MIN" 3040 ENTER @Lcr;Bias_min 3050 OUTPUT @Lcr;"BIAS:VOLT:LEV? MAX" 3060 ENTER @Lcr;Bias_max 3070 OUTPUT @Lcr;"BIAS:STAT ON" ! DC BIAS ON 3080 Count=0 3090 Bias_type=5 !!1 2 3 4 5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3100 SELECT Bias_type 3110 CASE 1 !DC bias Volt 3120 GOSUB Oscselect 3130 GOSUB Freqselect 3140 OUTPUT @File;"No, DC-Bias[V], A, B, Vm[V], Im[A]" 3150 FOR Bias=-40 TO +40 STEP .2 !0~5V NOP=100 3160 Count=Count+1 3170 OUTPUT @Lcr;"BIAS:VOLT:LEV ";Bias 3180 GOSUB Reading 3190 PRINT "No.=";Count;",Bias=";Bias;"V, A=";A;",B=";B 3200 OUTPUT @File;Count,Bias,A,B,Vm,Im 3210 BEEP 3220 NEXT Bias 3230 CASE 2 !DC bias Curr 3240 GOSUB Oscselect 3250 GOSUB Freqselect 3260 OUTPUT @File;"No, DC-Bias[mA], A, B, Vm[V], Im[A]" 3270 FOR Bias=-.1 TO +.1 STEP .001 !-100mA~+100mA 3280 Count=Count+1 3290 OUTPUT @Lcr;"BIAS:CURR:LEV ";Bias !command 3300 GOSUB Reading 3310 PRINT "No.=";Count;",Bias=";Bias;"A, A=";A;",B=";B 3320 OUTPUT @File;Count,Bias*1000,A,B,Vm,Im 3330 BEEP 3340 NEXT Bias 3350 CASE 5 !DC bias: -10V -1V 0V +0.25V +0.5V +1V 3360 DIM Bias_array(6) 3370 Bias_array(1)=-10 3380 Bias_array(2)=-1 3390 Bias_array(3)=0 3400 Bias_array(4)=.25 3410 Bias_array(5)=.5 3420 Bias_array(6)=1 3430 OUTPUT @Lcr;"FREQ 1MHZ" !1MHz osc !!!!!!!!!!!!!!! 3440 OUTPUT @Lcr;"VOLT 0.02V" !20mV osc !!!!!!!!!!!!!!!!! 3450 OUTPUT @File;"No, DC-Bias[V], Z[ohm], Phase[deg]" 3460 FOR I=1 TO 6 STEP 1 3470 OUTPUT @Lcr;"BIAS:VOLT:LEV ";Bias_array(I) 3480 GOSUB Reading 3490 PRINT "No.=";I;",Bias=";Bias_array(I);"V, Z=";A;",Phase=";B 3500 OUTPUT @File;I,Bias_array(I),A,B 3510 BEEP 3520 NEXT I 3530 CASE 3 !DC bias Volt + 1MHz C 3540 GOSUB Oscselect 3550 GOSUB Freqselect 3560 Count=0 3570 OUTPUT @File;"No, DC-Bias[V], A, B, Vm[V], Im[A]" 3580 FOR Bias=10 TO 1 STEP -1 3590 Count=Count+1 3600 OUTPUT @Lcr;"BIAS:VOLT:LEV ";-Bias 3610 GOSUB Reading 3620 PRINT "No.=";Count;",Bias=";-Bias;"V, A=";A;",B=";B 3630 OUTPUT @File;Count,-Bias,A,B,Vm,Im 3640 BEEP 3650 NEXT Bias 3660 FOR Bias=.9 TO .1 STEP -.1 3670 Count=Count+1 3680 OUTPUT @Lcr;"BIAS:VOLT:LEV ";-Bias 3690 GOSUB Reading 3700 PRINT "No.=";Count;",Bias=";-Bias;"V, A=";A;",B=";B 3710 OUTPUT @File;Count,-Bias,A,B,Vm,Im 3720 BEEP 3730 NEXT Bias 3740 FOR Bias=.09 TO .01 STEP -.01 3750 Count=Count+1 3760 OUTPUT @Lcr;"BIAS:VOLT:LEV ";-Bias 3770 GOSUB Reading 3780 PRINT "No.=";Count;",-Bias=";Bias;"V, A=";A;",B=";B 3790 OUTPUT @File;Count,-Bias,A,B,Vm,Im 3800 BEEP 3810 NEXT Bias 3820 FOR Bias=.009 TO 0. STEP -.001 3830 Count=Count+1 3840 OUTPUT @Lcr;"BIAS:VOLT:LEV ";-Bias 3850 GOSUB Reading 3860 PRINT "No.=";Count;",Bias=";-Bias;"V, A=";A;",B=";B 3870 OUTPUT @File;Count,-Bias,A,B,Vm,Im 3880 BEEP 3890 NEXT Bias 3900 !!!!!!!!!!!!!!!!!! + 바이어스 3910 FOR Bias=.001 TO .009 STEP .001 3920 Count=Count+1 3930 OUTPUT @Lcr;"BIAS:VOLT:LEV ";Bias 3940 GOSUB Reading 3950 PRINT "No.=";Count;",Bias=";Bias;"V, A=";A;",B=";B 3960 OUTPUT @File;Count,Bias,A,B,Vm,Im 3970 BEEP 3980 NEXT Bias 3990 FOR Bias=.01 TO .09 STEP .01 4000 Count=Count+1 4010 OUTPUT @Lcr;"BIAS:VOLT:LEV ";Bias 4020 GOSUB Reading 4030 PRINT "No.=";Count;",Bias=";Bias;"V, A=";A;",B=";B 4040 OUTPUT @File;Count,Bias,A,B,Vm,Im 4050 BEEP 4060 NEXT Bias 4070 FOR Bias=.1 TO 1. STEP .01 4080 Count=Count+1 4090 OUTPUT @Lcr;"BIAS:VOLT:LEV ";Bias 4100 GOSUB Reading 4110 PRINT "No.=";Count;",Bias=";Bias;"V, A=";A;",B=";B 4120 OUTPUT @File;Count,Bias,A,B,Vm,Im 4130 BEEP 4140 NEXT Bias 4150 CASE 4 !DC bias Curr + Freq Sweep !diode 4160 GOSUB Oscselect 4170 OUTPUT @File;"No, DC-Bias[A], Freq[Hz], A, B, Vm[V], Im[A]" 4180 FOR Bias=-.1 TO +.101 STEP .002 !!!!!!!!!!!!!!-100mA~+100mA 4190 Count=0 4200 Freq_p=0 4210 OUTPUT @Lcr;"BIAS:CURR:LEV ";Bias !command 4220 FOR Freq=150 TO 200 STEP .1 !!!!!!!!!!!!!!!!!!!!! 4230 OUTPUT @Lcr;"FREQ:CW ";Freq !command 4240 OUTPUT @Lcr;"FREQ:CW?" 4250 ENTER @Lcr;Freq_level 4260 IF Freq_p<>Freq_level THEN 4270 Count=Count+1 4280 Freq_p=Freq_level 4290 ! WAIT 1 4300 GOSUB Reading 4310 PRINT "No.=";Count;"Bias=";Bias*1000;"mA, Freq=";Freq_level;"Hz,A=";A;",B=";B 4320 OUTPUT @File;Count,Bias,Freq_level,A,B,Vm,Im 4330 BEEP 4340 END IF 4350 NEXT Freq 4360 NEXT Bias 4370 END SELECT 4380 OUTPUT @Lcr;"BIAS:VOLT:LEV 0V" !command 4390 OUTPUT @Lcr;"BIAS:STAT OFF" ! DC BIAS OFF 4400 CASE "Osc Level Sweep" 4410 GOSUB Freqselect 4420 OUTPUT @File;"No, Osc-Level[V], A, B, Vm[V], Im[A]" 4430 OUTPUT @Lcr;"VOLT:LEV? MIN" 4440 ENTER @Lcr;Osc_min !5mV 4450 OUTPUT @Lcr;"VOLT:LEV? MAX" 4460 ENTER @Lcr;Osc_max !20V 4470 Osc_octv=20 4480 Osc=Osc_min 4490 Count=0 4500 LOOP 4510 Count=Count+1 4520 OUTPUT @Lcr;"VOLT:LEV ";Osc !command 4530 Osc=Osc*10^(1/Osc_octv) 4540 OUTPUT @Lcr;"VOLT:LEV?" 4550 ENTER @Lcr;Osc_level 4560 GOSUB Reading 4570 PRINT "No.=";Count;",Osc=";Osc_level;"V,A=";A;",B=";B 4580 OUTPUT @File;Count,Osc_level,A,B,Vm,Im 4590 BEEP 4600 EXIT IF Osc>Osc_max 4610 END LOOP 4620 OUTPUT @Lcr;"VOLT:LEV 1V" !init 4630 CASE "Osc Spk" 4640 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 4650 OUTPUT @Lcr;"VOLT:LEV? MIN" 4660 ENTER @Lcr;Osc_min !5mV 4670 OUTPUT @Lcr;"VOLT:LEV? MAX" 4680 ENTER @Lcr;Osc_max !20V 4690 Osc_min=.01 !10mV 4700 Osc_max=10 !100mV 이어폰인경우 4710 Osc_octv=5 !=5 4720 Osc=Osc_min 4730 Freq_octv=75 !=75 4740 Freq_min=100 4750 Freq_max=10000 4760 Count=0 4770 LOOP 4780 OUTPUT @Lcr;"VOLT:LEV ";Osc !command 4790 Osc=Osc*10^(1/Osc_octv) 4800 OUTPUT @Lcr;"VOLT:LEV?" 4810 ENTER @Lcr;Osc_level 4820 PRINT "No.=";Count;",Osc=";Osc_level 4830 OUTPUT @File;Count,Osc_level,Osc_level 4840 Freq=Freq_min 4850 LOOP 4860 Count=Count+1 4870 IF Freq>Freq_max THEN Freq=Freq_max 4880 OUTPUT @Lcr;"FREQ:CW ";Freq !command 4890 Freq=Freq*10^(1/Freq_octv) 4900 OUTPUT @Lcr;"FREQ:CW?" 4910 ENTER @Lcr;Freq_level 4920 GOSUB Reading 4930 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 4940 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 4950 BEEP 4960 EXIT IF Freq>=Freq_max*1.01 4970 END LOOP 4980 BEEP 4990 EXIT IF Osc>Osc_max*1.01 5000 END LOOP 5010 OUTPUT @Lcr;"VOLT:LEV 1V" !init 5020 CASE "Time Sweep" !몇 초 간격으로 몇 회 5030 INTEGER Nop,L1,L2 5040 Msg$="시간간격 [ms]" 5050 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 5060 IF Btn=-1 OR Btn=1 THEN STOP 5070 Period=VAL(String$) 5080 Msg$="측정횟수 " 5090 DIALOG "STRING",Msg$,Btn;RETURN("VALUE":String$) 5100 IF Btn=-1 OR Btn=1 THEN STOP 5110 Nop=VAL(String$) 5120 GOSUB Freqselect 5130 OUTPUT @File;"No, Time[S], A, B, Vm[V], Im[A]" 5140 Count=0 5150 T0=TIMEDATE 5160 T=TIMEDATE-T0 !second. 5170 LOOP 5180 Count=Count+1 5190 GOSUB Reading 5200 T1=Period/1000.*(Count-1) 5210 PRINT "No.=";Count;",Time=";T1;"s,A=";A;",B=";B 5220 OUTPUT @File;Count,T,A,B,Vm,Im 5230 BEEP 5240 LOOP 5250 T=TIMEDATE-T0 !second. 5260 IF T>3276.7 THEN 5270 L1=INT(T) 5280 L2=INT(Period/1000) 5290 ELSE 5300 L1=INT(T*10) 5310 L2=INT(Period/100) 5320 END IF 5330 EXIT IF (L1 MOD L2)=0 5340 END LOOP 5350 EXIT IF Count=Nop 5360 END LOOP 5370 CASE "TCC" 5380 ASSIGN @Su TO 701 5390 GOSUB Freqselect 5400 GOSUB Oscselect 5410 OUTPUT @File;"No, Time[m], Temp['C], A, B, Vm[V], Im[A]" 5420 Count=0 5430 Temp0=0 5440 T0=TIMEDATE 5450 LOOP 5460 T1=TIMEDATE-T0 !초단위 5470 OUTPUT @Su;"TEMP?" 5480 WAIT .1 5490 ENTER @Su;Temp,Tmp,Tmp,Tmp 5500 IF Temp0<>Temp THEN !온도차이가 0.1도 이상 발생되면 LCR 값을 측정한다. 5510 Count=Count+1 5520 GOSUB Reading !A,B,Vm,Im 5530 PRINT "No.=";Count;" Time=";T1;"s, Temp=";Temp;"'C, A=";A;", B=";B 5540 OUTPUT @File;T1/60.,Temp,A,B,Vm,Im 5550 END IF 5560 Temp0=Temp 5570 END LOOP 5580 OUTPUT @Su;"POWER,OFF" 5590 CASE "TC Freq Sweep" 5600 GOSUB Oscselect 5610 OUTPUT @File;"No, Freq[Hz], A, B, Vm[V], Im[A]" 5620 ASSIGN @Su TO 701 5630 OUTPUT @Su;"MODE,CONSTANT" 5640 Freq_min=100 !100 5650 Freq_max=300 !1000 5660 Count=0 5670 FOR Temp_set=-20 TO 150 STEP 10 5680 OUTPUT @Su;"TEMP,S";Temp_set !해당온도로 세팅 5690 Set=0 5700 LOOP 5710 OUTPUT @Su;"TEMP?" 5720 WAIT .1 5730 ENTER @Su;Temp,Tmp,Tmp,Tmp 5740 IF Temp=Temp_set THEN 5750 Set=1 5760 WAIT 100 !100초동안 기다린다. 5770 END IF 5780 IF Set=1 THEN 5790 OUTPUT @Su;"TEMP?" 5800 WAIT .1 5810 ENTER @Su;Temp,Tmp,Tmp,Tmp 5820 END IF 5830 EXIT IF Set=1 5840 END LOOP !현재 온도가 세팅온도가 되면 루프에서 탈출 5850 OUTPUT @File;Temp,"'C" 5860 FOR Freq=Freq_min TO Freq_max STEP 1 !5 5870 Count=Count+1 5880 OUTPUT @Lcr;"FREQ:CW ";Freq !command 5890 OUTPUT @Lcr;"FREQ:CW?" 5900 ENTER @Lcr;Freq_level 5910 GOSUB Reading 5920 PRINT "No.=";Count;",Freq=";Freq_level;"Hz,A=";A;",B=";B 5930 OUTPUT @File;Count,Freq_level,A,B,Vm,Im 5940 NEXT Freq 5950 NEXT Temp_set 5960 OUTPUT @Su;"POWER,OFF" 5970 END SELECT 5980 RETURN 5990 Funcselect:! 6000 INTEGER Func_size,Func_length,Funcno 6010 Func_size=20 !문자열 배열의 크기 6020 Func_length=5 !문자열의 길이 6030 ALLOCATE Funcdis$(Func_size)[Func_length] 6040 DATA "Cp-D","Cp-Q","Cp-G","Cp-Rp","Cs-D","Cs-Q","Cs-Rs" 6050 DATA "Lp-Q","Lp-D","Lp-G","Lp-Rp","Ls-D","Ls-Q","Ls-Rs" 6060 DATA "R-X","Z-deg","Z-rad","G-B","Y-deg","Y-rad" 6070 FOR I=1 TO Func_size 6080 READ Funcdis$(I) 6090 NEXT I 6100 ALLOCATE Func$(Func_size)[Func_length] 6110 DATA "CPD","CPQ","CPG","CPRP","CSD","CSQ","CSRS" 6120 DATA "LPQ","LPD","LPG","LPRP","LSD","LSQ","LSRS" 6130 DATA "RX","ZTD","ZTR","GB","YTD","YTR" 6140 FOR I=1 TO Func_size 6150 READ Func$(I) 6160 NEXT I 6170 Msg$="테스트 종류를 선택하십시오." 6180 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Funcdis$(*),"COLUMNS":Func_length,"ROWS":Func_size),RETURN("SELECTION":Funcno) 6190 IF Btn=-1 OR Btn=1 THEN STOP 6200 Funcno=Funcno+1 6210 OUTPUT @Lcr;"FUNC:IMP:TYPE ";TRIM$(Func$(Funcno)) 6220 RETURN 6230 Oscselect: ! 6240 INTEGER Osc_size,Osc_length,Oscno 6250 Osc_size=12 !문자열 배열의 크기 6260 Osc_length=5 !문자열의 길이 6270 ALLOCATE Oscdis$(Osc_size)[Osc_length] 6280 Oscdis$(1)="0.02V" !diode 6290 Oscdis$(2)="0.05V" 6300 Oscdis$(3)="0.1V" 6310 Oscdis$(4)="0.5V" 6320 Oscdis$(5)="1V" 6330 Oscdis$(6)="5V" 6340 Oscdis$(7)="6V" 6350 Oscdis$(8)="7V" 6360 Oscdis$(9)="7.1V" 6370 Oscdis$(10)="7.3V" 6380 Oscdis$(11)="10V" 6390 Msg$="측정 전압을 선택하십시요" 6400 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Oscdis$(*),"COLUMNS":Osc_length,"ROWS":Osc_size),RETURN("SELECTION":Oscno) 6410 IF Btn=-1 OR Btn=1 THEN STOP 6420 Oscno=Oscno+1 6430 OUTPUT @Lcr;"VOLT ";TRIM$(Oscdis$(Oscno)) 6440 RETURN 6450 Freqselect: ! 6460 INTEGER Freq_size,Freq_length,Freqno 6470 Freq_size=6 !문자열 배열의 크기 6480 Freq_length=5 !문자열의 길이 6490 ALLOCATE Freqdis$(Freq_size)[Freq_length] 6500 Freqdis$(1)="1KHZ" 6510 Freqdis$(2)="1MHZ" 6520 Freqdis$(3)="214HZ" 6530 Freqdis$(4)="330HZ" 6540 Freqdis$(5)="355HZ" 6550 Freqdis$(6)="173HZ" 6560 Msg$="주파수를 선택하십시오." 6570 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Freqdis$(*),"COLUMNS":Freq_length,"ROWS":Freq_size),RETURN("SELECTION":Freqno) 6580 IF Btn=-1 OR Btn=1 THEN STOP 6590 Freqno=Freqno+1 6600 OUTPUT @Lcr;"FREQ ";TRIM$(Freqdis$(Freqno)) 6610 RETURN 6620 Freq48: ! 6630 DIM Freq48(48) 6640 DATA 20,25,30,40,50,60,80 6650 DATA 100,120,150,200,250,300,400,500,600,800 6660 DATA 1000,1200,1500,2000,2500,3000,4000,5000,6000,8000 6670 DATA 10000,12000,15000,20000,25000,30000,40000,50000,60000,80000 6680 DATA 100000,120000,150000,200000,250000,300000,400000,500000,600000,800000 6690 DATA 1000000 6700 FOR I=1 TO 48 6710 READ Freq48(I) 6720 NEXT I 6730 RETURN 6740 Freq1k1m_read: ! 6750 DIM Freq1k1m(279) 6760 DATA 1,1.00806,1.01351,1.01695,1.02459,1.0274,1.03448,1.04167,1.05263,1.05634 6770 DATA 1.05932,1.07143,1.07759,1.08696,1.0909,1.09649,1.10294,1.11111,1.11607,1.1194 6780 DATA 1.13208,1.13637,1.15385,1.15741,1.17188,1.17647,1.17925,1.19048,1.2,1.20192 6790 DATA 1.20968,1.22449,1.22549,1.22951,1.25,1.27119,1.27551,1.2766,1.2931,1.30208 6800 DATA 1.30435,1.31579,1.32979,1.33929,1.3587,1.36364,1.38889,1.39535,1.41509,1.42045 6810 DATA 1.42857,1.44231,1.45349,1.46341,1.47059,1.4881,1.5,1.52439,1.53061,1.53846 6820 DATA 1.5625,1.57895,1.59574,1.60256,1.62612,1.63043,1.64474,1.66667,1.68919,1.70455 6830 DATA 1.71429,1.73611,1.74419,1.76471,1.78571,1.81818,1.82927,1.83824,1.875,1.89394 6840 DATA 1.92308,1.93548,1.95313,1.97368,2,2.01613,2.02703,2.06897,2.08333,2.14286 6850 DATA 2.15517,2.20588,2.22222,2.23214,2.27273,2.30769,2.31481,2.34375,2.4,2.40385 6860 DATA 2.41935,2.5,2.58621,2.60417,2.6087,2.67857,2.71739,2.72727,2.77778,2.84091 6870 DATA 2.85714,2.88462,2.97619,3,3.125,3.15789,3.26087,3.28947,3.33333,3.40909 6880 DATA 3.47222,3.52942,3.57143,3.67647,3.75,3.90625,3.94737,4,4.16667,4.28571 6890 DATA 4.41176,4.46429,4.61538,4.6875,4.80769,5,5.17241,5.20833,5.21739,5.35714 6900 DATA 5.43478,5.45455,5.55556,5.68182,5.71429,5.76923,5.95238,6,6.25,6.31579 6910 DATA 6.52174,6.57895,6.66666,6.81818,6.94444,7.05882,7.14286,7.35294,7.5,7.8125 6920 DATA 7.89474,8,8.33333,8.57243,8.82352,8.92857,9.23077,9.375,9.61538,10 6930 DATA 10.3448,10.4167,10.4348,10.7143,10.8696,10.9091,11.1111,11.3636,11.4286,11.5385 6940 DATA 11.9048,12,12.5,12.6316,13.0435,13.1579,13.3333,13.6364,13.8889,14.1176 6950 DATA 14.2857,14.7059,15,15.625,15.7895,16,16.6667,17.1429,17.6471,17.8571 6960 DATA 18.4615,18.75,19.2308,20,20.6897,20.8333,20.8696,21.4286,21.7391,21.8182 6970 DATA 22.2222,22.7272,22.8571,23.0769,23.8095,24,25,25.2632,26.087,26.3158 6980 DATA 26.6667,27.2727,27.7778,28.2353,28.5714,29.4118,30,31.25,31.5789,32 6990 DATA 33.3333,34.2857,35.2941,35.7143,36.9231,37.5,38.4615,40,41.6667,42.8571 7000 DATA 43.6364,45.4545,46.1538,48,50,53.3333,54.5455,55.5556,60,62.5 7010 DATA 66.6666,68.5714,72.4286,75,80,83.3333,85.7143,96,100,120 7020 DATA 125,150,160,166.667,200,240,250,300,320,333.333 7030 DATA 400,480,500,600,640,666.667,800,960,1000 7040 RESTORE 6760 7050 FOR I=1 TO 279 7060 READ Freq1k1m(I) 7070 Freq1k1m(I)=Freq1k1m(I)*1000. 7080 PRINT Freq1k1m(I) 7090 NEXT I 7100 RETURN 7110 Reading: !A,B,Vm,Im 7120 OUTPUT @Lcr;"TRIGGER:IMMEDIATE" 7130 OUTPUT @Lcr;"FETC:IMP?" 7140 ENTER @Lcr;A,B,Status 7150 ! OUTPUT @Lcr;"FETC:SMON:VAC?" 7160 ! ENTER @Lcr;Vm 7170 ! OUTPUT @Lcr;"FETC:SMON:IAC?" 7180 ! ENTER @Lcr;Im 7190 RETURN 7200 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 7210 Chart_var: ! 7220 SELECT Type$(Typeno) 7230 CASE "150-200Hz" ! 7240 X_origin=150 7250 X_range=50 7260 X_axis_label$="Frequency[Hz]" 7270 Y_origin=.1 7280 Y_range=100 7290 Y_axis_label$="A value" 7300 CASE "100-300Hz" ! 7310 X_origin=100 7320 X_range=200 7330 X_axis_label$="Frequency[Hz]" 7340 Y_origin=.1 7350 Y_range=100 7360 Y_axis_label$="A value" 7370 CASE ELSE 7380 X_origin=LOG(20)/LOG(10) 7390 X_range=6 7400 X_axis_label$="Frequency log[Hz]" 7410 Y_origin=.1 7420 Y_range=10 7430 Y_axis_label$="A value" 7440 END SELECT 7450 RETURN 7460 Init_chart: ! 7470 DIM X_axis_label$[25],Y_axis_label$[25] 7480 INTEGER Trace_num 7490 INTEGER Screen_dims(1:2),Gwindow_dims(1:4) 7500 REAL Y(1:2) !Y(1)=A, Y(2)=B 7510 GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height. 7520 ! 7530 ! Set the dimensions of the graphics window using GESCAPE 33 so 7540 ! that it is centered on the screen. 7550 ! 7560 Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left. 7570 Gwindow_dims(2)=Screen_dims(2)*.2 ! Y of upper left. 7580 Gwindow_dims(3)=Screen_dims(1)*.7 ! Width. 7590 Gwindow_dims(4)=Screen_dims(2)*.6 ! Height. 7600 GESCAPE CRT,33;Gwindow_dims(*) ! Set graphics window geometry. 7610 ! 7620 GESCAPE CRT,35 ! Move the graphics window to the top. 7630 ! 7640 ! Create a stripchart. Make it invisible until all changes are made. 7650 ! 7660 ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0) 7670 ! 7680 ! Set the overall attributes. 7690 ! 7700 CONTROL @Strip;SET("TITLE":"Data Logger") 7710 CONTROL @Strip;SET("MINIMUM SCROLL":2) 7720 CONTROL @Strip;SET("MOVABLE":0) 7730 CONTROL @Strip;SET("MAXIMIZABLE":0) 7740 CONTROL @Strip;SET("X":0,"Y":0) 7750 ! 7760 ! Size the stripchart to exactly fill the graphics window. 7770 ! 7780 Vert_borders=26 7790 Horiz_borders=8 7800 Height=Gwindow_dims(4)-Vert_borders 7810 Width=Gwindow_dims(3)-Horiz_borders 7820 CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height) 7830 ! 7840 CONTROL @Strip;SET("CURRENT AXIS":"X") 7850 CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range) 7860 CONTROL @Strip;SET("AXIS LABEL":X_axis_label$) 7870 !CONTROL @Strip;SET("DIGITS":5) 7880 ! 7890 CONTROL @Strip;SET("CURRENT AXIS":"Y") 7900 CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range) 7910 CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$) 7920 ! 7930 CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart. 7940 ! 7950 RETURN 7960 END 7970 SUB Errors 7980 DIM Err$[50] 7990 Sp=SPOLL(717) 8000 IF BIT(Sp,5) THEN 8010 OUTPUT 717;"*ESR?" 8020 ENTER 717;Esr 8030 PRINT "Event Status Resister = ";Esr 8040 LOOP 8050 OUTPUT 717;"SYST:ERR?" 8060 ENTER 717;Err$ 8070 EXIT IF VAL(Err$)=0 8080 PRINT Err$ 8090 END LOOP 8100 END IF 8110 ENABLE INTR 7;2 8120 SUBEND