10 REM **************************************************************** 20 REM * Selftest Audio Analyzer UPL * 30 REM * Rohde & Schwarz 1GPP Betz 03.03.2005 * 40 REM **************************************************************** 45 UPL OUT "disp:ann off" 50 CLEAR : CLEAR 1 60 MOVE 80,320: LABEL "Selftest Program UPL",2 70 SET 2,3: MOVE 40,230: LABEL "!!! IMPORTANT !!!",3: SET 2,15 80 MOVE 100,170: LABEL "Please remove all cables",1 90 MOVE 100,140: LABEL "from generator and analyzer",1 100 MOVE 100,110: LABEL "inputs and outputs",1 110 PRINT "Are you sure? - "; 120 PRINT "Continue with - break with any other key" 130 Key=0: INKEY Q$: Key=ASC(Q$): IF Key=0 THEN 130 140 IF Key=13 THEN 150 ELSE SOFTKEY : CLEAR : CLEAR 1: END 150 CLEAR : CLEAR 1: UPL OUT "*rst": UPL OUT "disp:ann off" 160 UPL OUT "*opt?": UPL IN Q$ 170 Opt$=Q$: B1=0: Dig=0: O33=0 180 IF LEN(Q$)=0 THEN 270 190 FOR I=LEN(Q$) TO 1 STEP -1 200 IF MID$(Q$,I,1)<>"," AND I>0 THEN NEXT 210 B$=RIGHT$(Q$,(LEN(Q$)-I)): IF I>1 THEN Q$=LEFT$(Q$,(I-1)) 220 Opt=VAL(RIGHT$(B$,(LEN(B$)-1))) 230 IF Opt=1 THEN B1=1 240 IF Opt=2 OR Opt=29 THEN Dig=1 250 IF Opt=33 THEN O33=1 260 IF I>0 THEN NEXT 270 MOVE 35,390: LABEL "Selftest Program Audio Analyzer UPL",1 280 UPL OUT "DIAG:DEV SERN" 290 UPL OUT "DIAG:DEV:ADDR 0" 300 UPL OUT "DIAG:DEV:DATA?" 310 UPL IN Q$: Ser$=Q$ 320 UPL OUT "DIAG:DEV:ADDR 1" 330 UPL OUT "DIAG:DEV:DATA?" 340 UPL IN Q$: Ser$=Ser$+"/"+Q$ 350 PRINT "Serial no: ";Ser$ 360 PRINT "Installed options: ";Opt$ 370 REM * basic settings * 380 UPL OUT "SOUR:LOWD OFF" 390 UPL OUT "OUTP:TYPE BAL" 400 UPL OUT "SOUR:VOLT 1e-20 V" 410 UPL OUT "INP:SEL CH2I" 420 UPL OUT "INP:TYPE GEN2" 430 UPL OUT "SENS2:FUNC 'OFF'" 440 UPL OUT "SENS3:FUNC 'OFF'" 450 UPL OUT "CAL:ZERO:AUTO ONCE;*wai" 460 UPL OUT "INST2 A100" 470 UPL OUT "CAL:ZERO:AUTO ONCE;*wai" 480 UPL OUT "INST2 A22" 500 REM * test sequencing * 510 Fail=0: Tb$=CHR$(9) 520 OPENO# 1,"Selftest.txt" 530 PRINT# 1,"Selftest Audio Analyzer UPL" 540 PRINT# 1,"Date: ";DATE$;Tb$;"Time: ";LEFT$(TIME$,8) 550 PRINT# 1,"Serial number: ";Ser$ 560 PRINT# 1,"Installed options: ";Opt$ 570 PRINT# 1 580 GOSUB 1000: 'generator range control 590 PRINT# 1 600 GOSUB 1420: 'low distortion generator 610 PRINT# 1 620 GOSUB 2000: 'analyzer ranges 630 PRINT# 1 640 GOSUB 4000: 'THD+N 650 PRINT# 1 660 GOSUB 5000: 'DFD 670 PRINT# 1 680 GOSUB 6000: 'Noise 690 PRINT# 1 700 GOSUB 7000: 'Digital audio 710 IF Fail>0 THEN 720 PRINT# 1: PRINT# 1,"Selftest failed!" 730 SET 2,3: MOVE 140,30: LABEL "SELFTEST FAILED",2: SET 2,15 740 ELSE 750 PRINT# 1: PRINT# 1,"Selftest passed!" 760 SET 2,9: MOVE 140,30: LABEL "SELFTEST PASSED",2: SET 2,15 770 ENDIF 780 CLOSE# 1: END 1000 REM * generator range control * 1010 PRINT# 1,"Generator ranges" 1020 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/V";Tb$; 1030 PRINT# 1,"Dev/%";Tb$;"Tol/%" 1040 Fail1=0: Fail2=0 1050 UPL OUT "SENS:VOLT:RANG:AUTO OFF" 1060 UPL OUT "SENS:VOLT:RANG 3 V" 1070 Pl=5: Pc=35: Nb=6: GOSUB 10000: 'draw boxes 1080 Pl=6: Pc=35: Nb=6: GOSUB 10000 1090 PRINT "Generator ranges Channel 1:" 1100 PRINT " Channel 2:" 1110 Volt=0.030: Tol=2: 'voltage in V, Tolerance in % 1120 GOSUB 9000: IF F1>0 THEN Fail1=1 1130 IF F2>0 THEN Fail2=1 1140 Pl=5: Pc=35: GOSUB 8000 1150 Volt=0.250: Tol=1.8: 'voltage in V, Tolerance in % 1160 GOSUB 9000: IF F1>0 THEN Fail1=1 1170 IF F2>0 THEN Fail2=1 1180 Pl=5: Pc=Pc+1: GOSUB 8000 1190 Volt=0.500: Tol=1.6: 'voltage in V, Tolerance in % 1200 GOSUB 9000: IF F1>0 THEN Fail1=1 1210 IF F2>0 THEN Fail2=1 1220 Pl=5: Pc=Pc+1: GOSUB 8000 1230 Volt=1.000: Tol=1.6: 'voltage in V, Tolerance in % 1240 GOSUB 9000: IF F1>0 THEN Fail1=1 1250 IF F2>0 THEN Fail2=1 1260 Pl=5: Pc=Pc+1: GOSUB 8000 1270 Volt=2.000: Tol=1.6: 'voltage in V, Tolerance in % 1280 GOSUB 9000: IF F1>0 THEN Fail1=1 1290 IF F2>0 THEN Fail2=1 1300 Pl=5: Pc=Pc+1: GOSUB 8000 1310 UPL OUT "SENS:VOLT:RANG 30 V" 1320 UPL OUT "SOUR:VOLT:LIM 20 V" 1330 Volt=20.000: Tol=1.6: 'voltage in V, Tolerance in % 1340 GOSUB 9000: IF F1>0 THEN Fail1=1 1350 IF F2>0 THEN Fail2=1 1360 Pl=5: Pc=Pc+1: GOSUB 8000 1370 UPL OUT "sour:volt 0 V" 1380 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 1390 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 1400 IF Fail1=1 OR Fail2=1 THEN Fail=1 1410 RETURN 1420 REM * low distortion generator * 1425 IF B1=0 THEN RETURN 1430 PRINT# 1,"Low distortion generator level and frequency" 1440 PRINT# 1,"Channel";Tb$;"Set";Tb$;"Meas";Tb$; 1450 PRINT# 1,"Dev/%";Tb$;"Tol/%" 1460 Fail1=0: Fail2=0 1470 UPL OUT "SENS3:FUNC 'FREQ'" 1480 UPL OUT "SENS:VOLT:RANG 3 V" 1490 PRINT "Low Dist. Generator Amp:" 1500 PRINT " Freq:" 1560 UPL OUT "SOUR:LOWD ON" 1570 Pl=7: Pc=35: Nb=4: GOSUB 10000: 'draw boxes 1580 Pl=8: Pc=35: Nb=4: GOSUB 10000: 'draw boxes 1590 Volt=1.000: Freq=1000: Tol=1.6: Tfreq=0.8: 'voltage in V, Tolerance in % 1600 GOSUB 9300: IF F1>0 OR F2>0 THEN Fail1=1: F1=1 1610 Pl=7: Pc=35: GOSUB 8200 1620 IF Ff=1 THEN F1=1: Fail2=1 ELSE F1=0 1630 Pl=8: Pc=35: GOSUB 8200 1640 Volt=1.000: Freq=150: Tol=2.7: Tfreq=0.8: 'voltage in V, Tolerance in % 1650 UPL OUT "sour:freq "+STR$(Freq)+"HZ;*wai" 1660 GOSUB 9300: IF F1>0 OR F2>0 THEN Fail1=1: F1=1 1670 Pl=7: Pc=36: GOSUB 8200 1680 IF Ff=1 THEN F1=1: Fail2=1 ELSE F1=0 1690 Pl=8: Pc=36: GOSUB 8200 1700 Volt=1.000: Freq=5000: Tol=2.7: Tfreq=0.8: 'voltage in V, Tolerance in % 1710 UPL OUT "sour:freq "+STR$(Freq)+"HZ;*wai" 1720 GOSUB 9300: IF F1>0 OR F2>0 THEN Fail1=1: F1=1 1730 Pl=7: Pc=37: GOSUB 8200 1740 IF Ff=1 THEN F1=1: Fail2=1 ELSE F1=0 1750 Pl=8: Pc=37: GOSUB 8200 1760 Volt=1.000: Freq=25000: Tol=2.7: Tfreq=0.8: 'voltage in V, Tolerance in % 1770 UPL OUT "INST2 A100" 1780 UPL OUT "INP:SEL CH2I" 1790 UPL OUT "INP:TYPE GEN2" 1800 UPL OUT "SENS:VOLT:RANG:AUTO OFF" 1810 UPL OUT "SENS:VOLT:RANG 3 V" 1820 UPL OUT "SENS2:FUNC 'OFF'" 1830 UPL OUT "sour:freq "+STR$(Freq)+"HZ;*wai" 1840 GOSUB 9300: IF F1>0 OR F2>0 THEN Fail1=1: F1=1 1850 Pl=7: Pc=38: GOSUB 8200 1860 IF Ff=1 THEN F1=1: Fail2=1 ELSE F1=0 1870 Pl=8: Pc=38: GOSUB 8200 1880 Pl=7: Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 1890 Z2$=RIGHT$(STR$(Pl+1),(LEN(STR$(Pl+1))-1)) 1900 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 1910 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 1920 UPL OUT "INST2 A22" 1930 IF Fail1=1 OR Fail2=1 THEN Fail=1 1940 RETURN 2000 REM * analyzer ranges @ 1kHz * 2010 PRINT# 1,"Analyzer ranges @ 1kHz" 2020 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/V";Tb$; 2030 PRINT# 1,"Dev/%";Tb$;"Tol/%" 2040 Fail1=0: Fail2=0 2050 UPL OUT "SENS3:FUNC 'OFF'" 2060 UPL OUT "SOUR:LOWD OFF" 2070 UPL OUT "SOUR:VOLT:LIM 20 V" 2080 UPL OUT "OUTP:TYPE BAL" 2090 UPL OUT "SOUR:VOLT 1e-20 V" 2100 UPL OUT "INP:SEL CH2I" 2110 UPL OUT "INP:TYPE GEN2" 2120 UPL OUT "SENS2:FUNC 'OFF'" 2130 UPL OUT "SENS3:FUNC 'OFF'" 2140 UPL OUT "SENS:VOLT:RANG:AUTO OFF" 2150 UPL OUT "SENS:VOLT:RANG 3 V;*wai" 2160 Pl=9: Pc=35: Nb=16: GOSUB 10000: 'draw boxes 2170 Pl=10: Pc=35: Nb=16: GOSUB 10000 2180 PRINT "Analyzer ranges Channel 1:" 2190 PRINT "@ 1kHz Channel 2:" 2200 Pl=9: Pc=34 2210 Volt=0.018: Tol=1.5: 'voltage in V, Tolerance in % 2220 GOSUB 3800 2230 Volt=0.030: Tol=1.5 2240 GOSUB 3800 2250 Volt=0.060: Tol=1.5 2260 GOSUB 3800 2270 Volt=0.100: Tol=1.5 2280 GOSUB 3800 2290 Volt=0.180: Tol=1.5 2300 GOSUB 3800 2310 Volt=0.300: Tol=1.5 2320 GOSUB 3800 2330 Volt=0.600: Tol=1.5 2340 GOSUB 3800 2350 Volt=1.000: Tol=1.5 2360 GOSUB 3800 2370 Volt=1.800: Tol=1.5 2380 GOSUB 3800 2390 Volt=3.000: Tol=1.5 2400 GOSUB 3800 2410 Volt=6.000: Tol=1.5 2420 GOSUB 3800 2430 Volt=10.000: Tol=1.5 2440 GOSUB 3800 2450 Volt=18.000: Tol=1.5 2460 GOSUB 3800 2470 UPL OUT "SENS:VOLT:RANG 30 V": Tol=1.6 2480 GOSUB 9000: IF F1>0 THEN Fail1=1 2490 IF F2>0 THEN Fail2=1 2500 Pc=Pc+1: GOSUB 8000 2510 UPL OUT "SENS:VOLT:RANG 60 V": Tol=1.6 2520 GOSUB 9000: IF F1>0 THEN Fail1=1 2530 IF F2>0 THEN Fail2=1 2540 Pc=Pc+1: GOSUB 8000 2550 UPL OUT "SENS:VOLT:RANG 100 V": Tol=1.8 2560 GOSUB 9000: IF F1>0 THEN Fail1=1 2570 IF F2>0 THEN Fail2=1 2580 Pc=Pc+1: GOSUB 8000 2590 UPL OUT "sour:volt 0 V": UPL OUT "init;*wai" 2600 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 2610 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 2620 IF Fail1=1 OR Fail2=1 THEN Fail=1 2630 REM * analyzer ranges @ 40Hz * 2640 PRINT# 1 2650 PRINT# 1,"Analyzer ranges @ 40Hz" 2660 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/V";Tb$; 2670 PRINT# 1,"Dev/%";Tb$;"Tol/%" 2680 Fail1=0: Fail2=0 2690 UPL OUT "SOUR:FREQ 40 HZ" 2700 Pl=11: Pc=35: Nb=16: GOSUB 10000: 'draw boxes 2710 Pl=12: Pc=35: Nb=16: GOSUB 10000 2720 PRINT "Analyzer ranges Channel 1:" 2730 PRINT "@ 40Hz Channel 2:" 2740 Pl=11: Pc=34 2750 Volt=0.018: Tol=2.7: 'voltage in V, Tolerance in % 2760 GOSUB 3800 2770 Volt=0.030: Tol=2.7 2780 GOSUB 3800 2790 Volt=0.060: Tol=2.7 2800 GOSUB 3800 2810 Volt=0.100: Tol=2.7 2820 GOSUB 3800 2830 Volt=0.180: Tol=2.7 2840 GOSUB 3800 2850 Volt=0.300: Tol=2.7 2860 GOSUB 3800 2870 Volt=0.600: Tol=2.7 2880 GOSUB 3800 2890 Volt=1.000: Tol=2.7 2900 GOSUB 3800 2910 Volt=1.800: Tol=2.7 2920 GOSUB 3800 2930 Volt=3.000: Tol=2.7 2940 GOSUB 3800 2950 Volt=6.000: Tol=2.7 2960 GOSUB 3800 2970 Volt=10.000: Tol=2.7 2980 GOSUB 3800 2990 Volt=18.000: Tol=2.7 3000 GOSUB 3800 3010 UPL OUT "SENS:VOLT:RANG 30 V": Tol=2.7 3020 GOSUB 9000: IF F1>0 THEN Fail1=1 3030 IF F2>0 THEN Fail2=1 3040 Pc=Pc+1: GOSUB 8000 3050 UPL OUT "SENS:VOLT:RANG 60 V": Tol=2.8 3060 GOSUB 9000: IF F1>0 THEN Fail1=1 3070 IF F2>0 THEN Fail2=1 3080 Pc=Pc+1: GOSUB 8000 3090 UPL OUT "SENS:VOLT:RANG 100 V": Tol=3 3100 GOSUB 9000: IF F1>0 THEN Fail1=1 3110 IF F2>0 THEN Fail2=1 3120 Pc=Pc+1: GOSUB 8000 3130 UPL OUT "sour:volt 0 V": UPL OUT "init;*wai" 3140 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 3150 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 3160 IF Fail1=1 OR Fail2=1 THEN Fail=1 3170 REM * analyzer ranges @ 15kHz * 3180 PRINT# 1 3190 PRINT# 1,"Analyzer ranges @ 15kHz" 3200 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/V";Tb$; 3210 PRINT# 1,"Dev/%";Tb$;"Tol/%" 3220 Fail1=0: Fail2=0 3230 UPL OUT "SOUR:FREQ 15 KHZ;*wai" 3240 Pl=13: Pc=35: Nb=16: GOSUB 10000: 'draw boxes 3250 Pl=14: Pc=35: Nb=16: GOSUB 10000 3260 PRINT "Analyzer ranges Channel 1:" 3270 PRINT "@ 15kHz Channel 2:" 3280 Pl=13: Pc=34 3290 Volt=0.018: Tol=2.7: 'voltage in V, Tolerance in % 3300 GOSUB 3800 3310 Volt=0.030: Tol=2.7 3320 GOSUB 3800 3330 Volt=0.060: Tol=2.7 3340 GOSUB 3800 3350 Volt=0.100: Tol=2.7 3360 GOSUB 3800 3370 Volt=0.180: Tol=2.7 3380 GOSUB 3800 3390 Volt=0.300: Tol=2.7 3400 GOSUB 3800 3410 Volt=0.600: Tol=2.7 3420 GOSUB 3800 3430 Volt=1.000: Tol=2.7 3440 GOSUB 3800 3450 Volt=1.800: Tol=2.7 3460 GOSUB 3800 3470 Volt=3.000: Tol=2.7 3480 GOSUB 3800 3490 Volt=6.000: Tol=2.7 3500 GOSUB 3800 3510 Volt=10.000: Tol=2.7 3520 GOSUB 3800 3530 Volt=18.000: Tol=2.7 3540 GOSUB 3800 3550 UPL OUT "SENS:VOLT:RANG 30 V": Tol=2.7 3560 GOSUB 9000: IF F1>0 THEN Fail1=1 3570 IF F2>0 THEN Fail2=1 3580 Pc=Pc+1: GOSUB 8000 3590 UPL OUT "SENS:VOLT:RANG 60 V": Tol=2.8 3600 GOSUB 9000: IF F1>0 THEN Fail1=1 3610 IF F2>0 THEN Fail2=1 3620 Pc=Pc+1: GOSUB 8000 3630 UPL OUT "SENS:VOLT:RANG 100 V": Tol=3 3640 GOSUB 9000: IF F1>0 THEN Fail1=1 3650 IF F2>0 THEN Fail2=1 3660 Pc=Pc+1: GOSUB 8000 3670 UPL OUT "sour:volt 0 V" 3680 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 3690 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 3700 IF Fail1=1 OR Fail2=1 THEN Fail=1 3710 RETURN 3800 ' set range and run measurement 3810 UPL OUT "SENS:VOLT:RANG "+STR$(Volt)+"V" 3820 GOSUB 9000: IF F1>0 THEN Fail1=1 3830 IF F2>0 THEN Fail2=1 3840 Pc=Pc+1: GOSUB 8000 3850 RETURN 4000 REM * analyzer inherent THD+N @ 1kHz * 4005 F1=0: F2=0: REM reset temporary error flag 4010 PRINT# 1,"Inherent THD+N @ 1kHz" 4020 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/dB";Tb$; 4030 PRINT# 1,"Dev/dB";Tb$;"Tol/dB" 4040 Fail1=0: Fail2=0 4050 Volt=2: Tol=-93: REM tolerance limit in dB 4060 UPL OUT "SOUR:FREQ 1 KHZ" 4070 UPL OUT "SENS:FUNC 'THDN'" 4080 UPL OUT "SOUR:VOLT "+STR$(Volt)+"V" 4090 UPL OUT "INP:SEL CH2I" 4100 UPL OUT "INP:TYPE GEN2" 4110 UPL OUT "SENS2:FUNC 'OFF'" 4120 UPL OUT "SENS3:FUNC 'OFF'" 4130 UPL OUT "SENS:VOLT:RANG:AUTO OFF" 4140 UPL OUT "SENS:VOLT:RANG 3 V;*wai" 4150 Pl=15: Pc=35: Nb=3: GOSUB 10000: 'draw boxes 4160 Pl=16: Pc=35: Nb=3: GOSUB 10000 4170 PRINT "THD+N Channel 1:" 4180 PRINT "@ 1kHz Channel 2:" 4190 UPL OUT "init:cont off;*wai" 4200 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 4210 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 4220 Pl=15: Pc=35 4230 IF W1>Tol THEN F1=1: Fail1=1 4240 IF W2>Tol THEN F2=1: Fail2=1 4250 GOSUB 8000 4260 W1$=STR$(W1,USING "-###.##") 4270 T1$="-": T2$="-" 4280 W2$=STR$(W2,USING "-###.##") 4290 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 4300 PRINT# 1,Tb$;STR$(Tol); 4310 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4320 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 4330 PRINT# 1,Tb$;STR$(Tol); 4340 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4350 PRINT# 1 4360 REM * analyzer THD+N @ 1kHz -60dB * 4365 F1=0: F2=0: REM reset temporary error flag 4370 PRINT# 1,"THD+N @ 1kHz -60dB" 4380 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/dB";Tb$; 4390 PRINT# 1,"Dev/dB";Tb$;"Tol/dB" 4400 Volt=2: Tol=0.5: REM tolerance limit in dB 4410 UPL OUT "SOUR:FUNC MULT" 4420 UPL OUT "SOUR:MULT:COUN 2" 4430 UPL OUT "SOUR:VOLT "+STR$(Volt)+"V" 4440 UPL OUT "SOUR:FREQ2 2000 HZ" 4450 UPL OUT "SOUR:VOLT2 "+STR$(Volt)+"MV;*wai" 4460 UPL OUT "init:cont off;*wai" 4470 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 4480 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 4490 IF ABS(W1+60)>Tol THEN F1=1: Fail1=1 4500 IF ABS(W2+60)>Tol THEN F2=1: Fail2=1 4510 Pc=36: GOSUB 8000 4520 W1$=STR$(W1,USING "-###.##") 4530 T1$=STR$((W1+60),USING "-##.##") 4540 T2$=STR$((W2+60),USING "-##.##") 4550 W2$=STR$(W2,USING "-###.##") 4560 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 4570 PRINT# 1,Tb$;STR$(Tol); 4580 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4590 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 4600 PRINT# 1,Tb$;STR$(Tol); 4610 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4620 PRINT# 1 4630 REM * analyzer THD+N @ 1kHz 100 kHz analyzer * 4635 F1=0: F2=0: REM reset temporary error flag 4640 PRINT# 1,"Inherent THD+N @ 1kHz in 100kHz analyzer" 4650 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/dB";Tb$; 4660 PRINT# 1,"Dev/dB";Tb$;"Tol/dB" 4670 Volt=2: Tol=-84: REM tolerance limit in dB 4680 UPL OUT "SOUR:FUNC SIN" 4690 UPL OUT "INST2 A100" 4700 UPL OUT "INP:SEL CH2I" 4710 UPL OUT "INP:TYPE GEN2" 4720 UPL OUT "SENS:VOLT:RANG:AUTO OFF" 4730 UPL OUT "SENS:VOLT:RANG 3 V" 4740 UPL OUT "SENS2:FUNC 'OFF'" 4750 UPL OUT "SENS3:FUNC 'OFF'" 4760 UPL OUT "SENS:FUNC 'THDN'" 4770 'UPL OUT "CAL:ZERO:AUTO ONCE;*wai" 4780 UPL OUT "init:cont off;*wai" 4790 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 4800 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 4810 IF W1>Tol THEN F1=1: Fail1=1 4820 IF W2>Tol THEN F2=1: Fail2=1 4830 Pc=37: GOSUB 8000 4840 W1$=STR$(W1,USING "-###.##") 4850 T1$="-": T2$="-" 4860 W2$=STR$(W2,USING "-###.##") 4870 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 4880 PRINT# 1,Tb$;STR$(Tol); 4890 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4900 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 4910 PRINT# 1,Tb$;STR$(Tol); 4920 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 4930 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 4940 Z2$=RIGHT$(STR$(Pl+1),(LEN(STR$(Pl+1))-1)) 4950 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 4960 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 4970 UPL OUT "INST2 A22" 4980 IF Fail1=1 OR Fail2=1 THEN Fail=1 4990 RETURN 5000 REM * analyzer inherent D2 @ 10kHz * 5005 F1=0: F2=0: REM reset temporary error flag 5010 PRINT# 1,"Inherent D2 @ 1kHz" 5020 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/dB";Tb$; 5030 PRINT# 1,"Dev/dB";Tb$;"Tol/dB" 5040 Fail1=0: Fail2=0 5050 Volt=2: Tol=-110: REM tolerance limit in dB 5060 PRINT "DFD D2 @ 10kHz Ch 1/2:" 5070 Pl=17: Pc=35: Nb=2: GOSUB 10000 5080 UPL OUT "SOUR:FUNC DFD" 5090 UPL OUT "SOUR:FREQ:MEAN 10 KHZ" 5100 UPL OUT "SOUR:FREQ:DIFF 200 HZ" 5110 UPL OUT "SOUR:VOLT:TOT "+STR$(Volt)+"V" 5120 UPL OUT "SENS:FUNC 'DFD';*wai" 5130 UPL OUT "init:cont off;*wai" 5140 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 5150 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 5160 IF W1>Tol THEN F1=1: Fail1=1 5170 IF W2>Tol THEN F2=1: Fail2=1 5180 Pl=17: GOSUB 8100 5190 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 5195 IF Fail1=1 OR Fail2=1 THEN Fail=1 5200 IF F1=1 OR F2=1 THEN 5210 PRINT "["+Z1$+";60HFail" 5220 ELSE 5230 PRINT "["+Z1$+";60HPASS" 5240 ENDIF 5260 W1$=STR$(W1,USING "-###.##") 5270 W2$=STR$(W2,USING "-###.##") 5280 T1$="-": T2$="-" 5290 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 5300 PRINT# 1,Tb$;STR$(Tol); 5310 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 5320 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 5330 PRINT# 1,Tb$;STR$(Tol); 5340 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 5350 RETURN 6000 REM * analyzer inherent noise 22 kHz analyzer * 6005 F1=0: F2=0: REM reset temporary error flag 6010 PRINT# 1,"Inherent noise 22kHz analyzer" 6020 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/";CHR$(230);"V";Tb$; 6030 PRINT# 1,"Dev/%";Tb$;"Tol/";CHR$(230);"V" 6040 Fail1=0: Fail2=0 6050 Volt=0: Tol=2: REM tolerance limit noise in uV 6060 PRINT "Inherent noise Channel 1:" 6070 PRINT " Channel 2:" 6080 Pl=18: Pc=35: Nb=2: GOSUB 10000 6090 Pl=19: Pc=35: Nb=2: GOSUB 10000 6100 UPL OUT "SOUR:FUNC SIN" 6110 UPL OUT "SOUR:VOLT 0 V" 6120 UPL OUT "SENS:FUNC 'RMS'" 6122 UPL OUT "INP:TYPE BAL" 6124 UPL OUT "INP:IMP R300" 6130 UPL OUT "SENS:VOLT:RANG 18 MV;*wai" 6140 Rep=0 6150 UPL OUT "init:cont off;*wai" 6160 UPL OUT "sens:data?": UPL IN Q$: W1=1E6*VAL(Q$) 6170 UPL OUT "sens:data2?": UPL IN Q$: W2=1E6*VAL(Q$) 6180 IF (W1>Tol OR W2>Tol) AND Rep<3 THEN Rep=Rep+1: GOTO 6150 6190 IF W1>Tol THEN F1=1: Fail1=1 6200 IF W2>Tol THEN F2=1: Fail2=1 6210 Pl=18: Pc=35: GOSUB 8000 6220 W1$=STR$(W1,USING "##.#") 6230 W2$=STR$(W2,USING "##.#") 6240 T1$="-": T2$="-" 6250 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "#.#");Tb$;W1$;Tb$;T1$; 6260 PRINT# 1,Tb$;STR$(Tol); 6270 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 6280 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "#.#");Tb$;W2$;Tb$;T2$; 6290 PRINT# 1,Tb$;STR$(Tol); 6300 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 6310 PRINT# 1 6320 REM * analyzer inherent noise 110 kHz analyzer * 6325 F1=0: F2=0: REM reset temporary error flag 6330 PRINT# 1,"Inherent noise 100kHz analyzer" 6340 PRINT# 1,"Channel";Tb$;"Set/V";Tb$;"Meas/";CHR$(230);"V";Tb$; 6350 PRINT# 1,"Dev/%";Tb$;"Tol/";CHR$(230);"V" 6360 Volt=0: Tol=8: REM tolerance limit noise in uV 6370 UPL OUT "INST2 A100" 6380 UPL OUT "SOUR:VOLT 0 V" 6390 UPL OUT "SENS:FUNC 'RMS'" 6392 UPL OUT "INP:TYPE BAL" 6394 UPL OUT "INP:IMP R300" 6400 UPL OUT "SENS:VOLT:RANG 18 MV;*wai" 6410 Rep=0 6420 UPL OUT "init:cont off;*wai" 6430 UPL OUT "sens:data?": UPL IN Q$: W1=1E6*VAL(Q$) 6440 UPL OUT "sens:data2?": UPL IN Q$: W2=1E6*VAL(Q$) 6450 IF (W1>Tol OR W2>Tol) AND Rep<3 THEN Rep=Rep+1: GOTO 6420 6460 IF W1>Tol THEN F1=1: Fail1=1 6470 IF W2>Tol THEN F2=1: Fail2=1 6480 Pl=18: Pc=36: GOSUB 8000 6500 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 6510 Z2$=RIGHT$(STR$(Pl+1),(LEN(STR$(Pl+1))-1)) 6520 IF Fail1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 6530 IF Fail2=1 THEN PRINT "["+Z2$+";60HFail" ELSE PRINT "["+Z2$+";60HPASS" 6540 IF Fail1=1 OR Fail2=1 THEN Fail=1 6550 W1$=STR$(W1,USING "##.#") 6560 W2$=STR$(W2,USING "##.#") 6570 T1$="-": T2$="-" 6580 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "#.#");Tb$;W1$;Tb$;T1$; 6590 PRINT# 1,Tb$;STR$(Tol); 6600 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 6610 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "#.#");Tb$;W2$;Tb$;T2$; 6620 PRINT# 1,Tb$;STR$(Tol); 6630 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 6640 RETURN 7000 REM * digital audio * 7005 F1=0: F2=0: REM reset temporary error flag 7010 IF Dig=0 THEN RETURN : REM no digital audio 7020 PRINT# 1,"Digital audio" 7030 PRINT# 1,"Channel";Tb$;"Set";Tb$;"Meas";Tb$; 7040 PRINT# 1,"Dev/%";Tb$;"Tol/%" 7050 Volt=0.5: Tol=0.1: Freq=1000: Tfreq=0.01 7060 Fail1=0: Fail2=0 7070 UPL OUT "INST D48" 7080 UPL OUT "INST2 D48" 7090 UPL OUT "INP:SEL BOTH" 7100 UPL OUT "INP:TYPE INT" 7110 UPL OUT "OUTP:AUD 24" 7120 UPL OUT "INP:AUD 24" 7130 UPL OUT "SENS2:FUNC 'OFF'" 7140 PRINT "Digital audio:" 7150 Pl=20: Pc=35: Nb=5: GOSUB 10000 7160 UPL OUT "init:cont off;*wai" 7170 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 7180 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 7190 UPL OUT "sens3:data?": UPL IN Q$: Wf=VAL(Q$) 7200 T1=100*(W1-Volt)/Volt: T2=100*(W2-Volt)/Volt: Tf=100*(Wf-Freq)/Freq 7210 IF ABS(T1)>Tol THEN F1=1: Fail=1 ELSE F1=0 7220 IF ABS(T2)>Tol THEN F2=1: Fail=1 ELSE F2=0 7230 Pl=20: Pc=35: GOSUB 8100 7240 IF ABS(Tf)>Tfreq THEN Ff=1 ELSE Ff=0 7250 IF Ff=1 THEN F1=1: Fail1=1 7260 Pl=20: Pc=37: GOSUB 8200 7270 W1$=STR$(W1,USING "#.######") 7280 W2$=STR$(W2,USING "#.######") 7290 T1$=STR$(T1,USING "-#.###") 7300 T2$=STR$(T2,USING "-#.###") 7310 Wf$=STR$(Wf,USING "####.###") 7320 Tf$=STR$(Tf,USING "-#.###") 7330 Tfreq$=STR$(Tfreq,USING "#.###") 7340 PRINT# 1,"Amp/Fs Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 7350 PRINT# 1,Tb$;STR$(Tol); 7360 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 7370 PRINT# 1,"Amp/Fs Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 7380 PRINT# 1,Tb$;STR$(Tol); 7390 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 7400 PRINT# 1,"Freq/Hz: ";Tb$;STR$(Freq);Tb$;Wf$;Tb$;Tf$;Tb$;Tfreq$; 7410 IF Ff=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 7420 UPL OUT "SENS3:FUNC 'SFRE'" 7430 Freq=48000: Tfreq=0.01 7440 UPL OUT "init:cont off;*wai" 7450 UPL OUT "sens3:data?": UPL IN Q$: Wf=VAL(Q$) 7460 Tf=100*(Wf-Freq)/Freq 7470 IF ABS(Tf)>Tfreq THEN Ff=1 ELSE Ff=0 7480 IF Ff=1 THEN F1=1: Fail1=1 7490 Pl=20: Pc=38: GOSUB 8200 7500 Wf$=STR$(Wf,USING "#####.#") 7510 Tf$=STR$(Tf,USING "-#.###") 7520 Tfreq$=STR$(Tfreq,USING "#.###") 7530 PRINT# 1,"Samplefreq/Hz: ";Tb$;STR$(Freq);Tb$;Wf$;Tb$;Tf$;Tb$;Tfreq$; 7540 IF Ff=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 7550 UPL OUT "INP:SAMP:FREQ:MODE AUTO" 7560 UPL OUT "OUTP:SAMP:MODE F44" 7570 Freq=44100: Tfreq=0.01 7580 UPL OUT "init:cont off;*wai" 7590 UPL OUT "sens3:data?": UPL IN Q$: Wf=VAL(Q$) 7600 Tf=100*(Wf-Freq)/Freq 7610 IF ABS(Tf)>Tfreq THEN Ff=1 ELSE Ff=0 7620 IF Ff=1 THEN F1=1: Fail1=1 7630 Pl=20: Pc=39: GOSUB 8200 7640 Wf$=STR$(Wf,USING "#####.#") 7650 Tf$=STR$(Tf,USING "-#.###") 7660 Tfreq$=STR$(Tfreq,USING "#.###") 7670 PRINT# 1,"Samplefreq/Hz: ";Tb$;STR$(Freq);Tb$;Wf$;Tb$;Tf$;Tb$;Tfreq$; 7680 IF Ff=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 7690 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 7700 IF F1=1 THEN PRINT "["+Z1$+";60HFail" ELSE PRINT "["+Z1$+";60HPASS" 7710 IF Fail1=1 OR Fail2=1 THEN Fail=1 7720 RETURN 8000 ' draw tolerance marks ch1 and ch2 in 2 lines 8010 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 8020 Z2$=RIGHT$(STR$(Pl+1),(LEN(STR$(Pl+1))-1)) 8030 C$=RIGHT$(STR$(Pc),(LEN(STR$(Pc))-1)) 8040 IF F1=0 THEN PRINT "["+Z1$+";"+C$+"H+" ELSE PRINT "["+Z1$+";"+C$+"H?" 8050 IF F2=0 THEN PRINT "["+Z2$+";"+C$+"H+" ELSE PRINT "["+Z2$+";"+C$+"H?" 8060 RETURN 8100 ' draw tolerance marks ch1 and ch2 in one line 8110 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 8120 C$=RIGHT$(STR$(Pc),(LEN(STR$(Pc))-1)) 8130 C2$=RIGHT$(STR$(Pc+1),(LEN(STR$(Pc+1))-1)) 8140 IF F1=0 THEN PRINT "["+Z1$+";"+C$+"H+" ELSE PRINT "["+Z1$+";"+C$+"H?" 8150 IF F2=0 THEN PRINT "["+Z1$+";"+C2$+"H+" ELSE PRINT "["+Z1$+";"+C2$+"H?" 8160 RETURN 8200 ' draw only one tolerance mark 8210 Z1$=RIGHT$(STR$(Pl),(LEN(STR$(Pl))-1)) 8220 C$=RIGHT$(STR$(Pc),(LEN(STR$(Pc))-1)) 8240 IF F1=0 THEN PRINT "["+Z1$+";"+C$+"H+" ELSE PRINT "["+Z1$+";"+C$+"H?" 8260 RETURN 9000 ' measure and read value, returns W1,W2,T1,T2,F1,F2 9010 UPL OUT "sour:volt "+STR$(Volt)+" V;*wai" 9020 UPL OUT "init:cont off;*wai" 9030 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 9040 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 9050 T1=100*(W1-Volt)/Volt: T2=100*(W2-Volt)/Volt 9060 IF ABS(T1)>Tol THEN F1=1 ELSE F1=0 9070 IF ABS(T2)>Tol THEN F2=1 ELSE F2=0 9080 W1$=STR$(W1,USING "#.######") 9090 IF W1>1 THEN W1$=STR$(W1,USING "##.#####") 9100 IF W1>10 THEN W1$=STR$(W1,USING "###.####") 9110 W2$=STR$(W2,USING "#.######") 9120 IF W2>1 THEN W2$=STR$(W2,USING "##.#####") 9130 IF W2>10 THEN W2$=STR$(W2,USING "###.####") 9140 T1$=STR$(T1,USING "-##.##") 9150 T2$=STR$(T2,USING "-##.##") 9170 PRINT# 1,"Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 9180 PRINT# 1,Tb$;STR$(Tol); 9190 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 9200 PRINT# 1,"Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 9210 PRINT# 1,Tb$;STR$(Tol); 9220 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 9230 RETURN 9300 ' measure and read value amp and freq, returns W1,W2,Wf,T1,T2;Tf,F1,F2,Ff 9310 UPL OUT "sour:volt "+STR$(Volt)+" V;*wai" 9320 UPL OUT "init:cont off;*wai" 9330 UPL OUT "sens:data?": UPL IN Q$: W1=VAL(Q$) 9340 UPL OUT "sens:data2?": UPL IN Q$: W2=VAL(Q$) 9350 UPL OUT "sens3:data?": UPL IN Q$: Wf=VAL(Q$) 9360 T1=100*(W1-Volt)/Volt: T2=100*(W2-Volt)/Volt: Tf=100*(Wf-Freq)/Freq 9370 IF ABS(T1)>Tol THEN F1=1 ELSE F1=0 9380 IF ABS(T2)>Tol THEN F2=1 ELSE F2=0 9390 IF ABS(Tf)>Tfreq THEN Ff=1 ELSE Ff=0 9400 W1$=STR$(W1,USING "#.######") 9410 IF W1>1 THEN W1$=STR$(W1,USING "##.#####") 9420 IF W1>10 THEN W1$=STR$(W1,USING "###.####") 9430 W2$=STR$(W2,USING "#.######") 9440 IF W2>1 THEN W2$=STR$(W2,USING "##.#####") 9450 IF W2>10 THEN W2$=STR$(W2,USING "###.####") 9460 T1$=STR$(T1,USING "-##.##") 9470 T2$=STR$(T2,USING "-##.##") 9480 Wf$=STR$(Wf,USING "###.###") 9490 IF Wf>1000 THEN Wf$=STR$(Wf,USING "####.##") 9500 IF Wf>10000 THEN Wf$=STR$(Wf,USING "#####.#") 9510 Tf$=STR$(Tf,USING "-##.##") 9520 PRINT# 1,"Amp/V Ch1: ";Tb$;STR$(Volt,USING "##.###");Tb$;W1$;Tb$;T1$; 9530 PRINT# 1,Tb$;STR$(Tol); 9540 IF F1=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 9550 PRINT# 1,"Amp/V Ch2: ";Tb$;STR$(Volt,USING "##.###");Tb$;W2$;Tb$;T2$; 9560 PRINT# 1,Tb$;STR$(Tol); 9570 IF F2=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 9580 PRINT# 1,"Freq/Hz: ";Tb$;STR$(Freq);Tb$;Wf$;Tb$;Tf$;Tb$;STR$(Tfreq); 9590 IF Ff=0 THEN PRINT# 1,Tb$;"Pass" ELSE PRINT# 1,Tb$;"Fail" 9600 RETURN 10000 REM **************************************************************** 10010 REM * Draw grid * 10020 REM * Pl=line position Pc=start character position Nb=number * 10030 REM **************************************************************** 10040 SET 2,1 10050 FOR I=1 TO Nb+1 10060 MOVE ((Pc+I-1)*8-1),399-Pl*16: DRAW ((Pc+I-1)*8-1),385-Pl*16 10070 NEXT 10080 MOVE ((Pc)*8-1),399-Pl*16: DRAW ((Pc+Nb)*8-1),399-Pl*16 10090 MOVE ((Pc)*8-1),385-Pl*16: DRAW ((Pc+Nb)*8),385-Pl*16 10100 SET 1,1: RETURN