10 vk=.65 : tpar=10 : jtemp=25 : delta_min=.0000001 : GOSUB 600 : DIM pvr(25) 20 RESTORE : FOR I%=1 TO 25 : READ pvr(I%) : NEXT I% 30 DATA 10,11,12,13,15,16,18,20,22,24,27,30,33 40 DATA 36,39,43,47,51,56,62,68,75,82,91,100 50 FOR I%=1 TO 27 : READ menu$(I%) : NEXT I% 60 DATA "AMP-3R-DES-5P","AMP-3R-DES-6P","AMP-3R-VAL-6P","AMP-4R-DES-5P" 70 DATA "AMP-4R-DES-6P","AMP-4R-VAL-7P","B-S.EM.FOL-4R-DES-5P" 80 DATA "B-S.EM.FOL-4R-VAL-8P","BRIDGED-T-ATT-4R-DES-2P","C.C.S-2R-DES-7P" 90 DATA "D.EM.FOL-3R-DES-5P","D.EM.FOL-3R-VAL-7P","DAR.PR-4R-DES-5P" 100 DATA "DAR.PR-4R-VAL-8P","D.SWITCH-3R-DES-5P","D.SWITCH-3R-VAL-7P" 110 DATA "EM.FOL-2R-DES-5P","EM.FOL-2R-VAL-6P","EM.FOL-3R-DES-5P" 120 DATA "EM.FOL-3R-VAL-7P","PI-ATT-3R-DES-2P","P.V.RES-E24-VAL" 130 DATA "P.V.RES-E12-VAL","SWITCH-3R-DES-5P","SWITCH-3R-VAL-7P" 140 DATA "T-ATT-3R-DES-2P","THY-3R-DES-4P" 150 CLS : @%=&90A : PRINT TAB(37,0);"MENU:-" : PRINT 160 FOR I%=1 TO 9 : PRINT TAB(1,I%);I%;"=";menu$(I%); : NEXT I% 170 FOR I%=10 TO 18 : PRINT TAB(27,I%-9);I%;"=";menu$(I%); : NEXT I% 180 FOR I%=19 TO 27 : PRINT TAB(54,I%-18);I%;"=";menu$(I%); : NEXT I% 190 PRINT TAB(0,11)" 0 = EXIT"; 200 PRINT TAB(40,11)"29 = SET PARAMETERS (T par. & J.temp.)" 210 INPUT "ROUTINE NUMBER=";N% 220 IF N%<=0 THEN STOP 230 CLS : @%=&2020A : IF N%>28 THEN PROCnew_par : GOTO 150 240 ON N% GOSUB 1000,1100,1300,1500,1600,1800,2400,4900,2300,5200,5900,6000,2500,4500,5600,5700,2600,2700,3000,3100,3300,3400,3400,3600,3700,4200,4000,999 250 GOTO 150 300 DEF PROCdefaults 310 ef=0 : INPUT "hFE=";hFE : IF hFE<10 THEN ef=1 : ENDPROC 320 beta=1+(1/hFE) : INPUT "Vs=";Vs : IF Vs<1 THEN ef=1 : ENDPROC 330 INPUT "Vces=";Vces : IF Vces<=0 THEN Vces=.2 340 ENDPROC 400 DEF PROCquery_dB : INPUT "dB=";dB : N=10^(dB/20) : ENDPROC 500 DEF PROCnew_par 510 INPUT "T par.=";tpar : INPUT "Junction temp.=";jtemp 520 IF jtemp=0 THEN jtemp=25 530 vk=.65+(.002*(25-jtemp)) : Vzn=VznT+(Tz*(jtemp-25)) 540 ENDPROC 600 DEF FNvb(x)=vk+(.026*LN(x)) 610 DEF FNpl(x,y)=1/((1/x)+(1/y)) 620 DEF FNvz(x)=Vzn+((x-IzmAN)*Rz/1000) 630 DEF FNvb2(x)=vk+(.026*LN(x*1000*beta*hFE)) 640 DEF FNvr2(x)=R2*(IR1R2-(k0*x)) 650 DEF FNvbd(x)=FNvb(x*beta2*hFE2*1000)+FNvb(x*beta2*beta2*hFE*1000) 660 DEF FNr1(x)=V1*hFE*1000/((tpar+1)*x) 670 DEF FNr2(x)=V2*hFE*1000/(tpar*x) 680 DIM menu$(30) : R1=0 : R2=0 : R3=0 : R4=0 : VznT=0 : Tz=0 690 ls$="*** " : lh$="### " : rs$=" ***" : rh$=" ###" : RETURN 700 Ib_min=delta_min/hFE : delta_Ib=1000*Ib_min : L%=INT(Ib_max/delta_Ib)+1 710 FOR I%=1 TO L% 720 Ib=I%*delta_Ib : V2=FNvr2(Ib) : Vbe=FNvb2(Ib) 730 IF VbeVbe THEN C%=1 : GOTO 1930 2030 GOSUB 700 : Vbe=(Vbe+V2)/2 : IemA=EXP((Vbe-vk)/.026) : IcmA=IemA/beta : C%=I%+J%+K% : GOTO 1970 2100 Ib_min=delta_min*100/hFE : delta_Ib=1000*Ib_min : L%=INT(Ib_max/delta_Ib)+1 2110 FOR I%=1 TO L% 2120 Ib=I%*delta_Ib : V2=FNvr2(Ib) : Vbe=FNvbd(Ib) 2130 IF VbeV2 THEN RETURN 2220 PRINT TAB(1,13);I%,J%,K%; : NEXT K% 2230 PRINT TAB(1,14);I%,J%; : NEXT J% 2240 PRINT TAB(1,15);I%; :NEXT I% 2250 RETURN 2300 pn=0 : INPUT "z=";z : IF z<.1 THEN z=50 2310 INPUT "N=";N : IF N<=0 THEN PROCquery_dB 2320 dB=20*LOG(N) 2330 R1=z : R4=z : R2=z*(N-1) : R3=z/(N-1) 2340 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ 2350 PRINT TAB(0,2);"z=";z;TAB(20,2);"N=";N;TAB(40,2);"dB=";dB 2360 PRINT TAB(0,3);"R1=";R1;TAB(20,3);"R2=";R2;TAB(40,3);"R3=";R3;TAB(60,3);"R4=";R4 2370 R%=1 : GOTO 9040 2400 pn=3 : INPUT "IcmA=";IcmA : IF IcmA<=0 THEN RETURN 2410 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 2420 re=26/IcmA : IemA=IcmA*beta : Vbe=FNvb(IemA) : V4=(Vs-Vces)/2 2430 R4=V4*1000/IemA : Rin=hFE*(R4+re) : Av=R4/(R4+re) : IF Rs<.1 THEN Rs=1E+07 2440 Ib=IcmA/(hFE*1000) : R3=Vbe*5/(tpar*Ib) : V3=R3*Ib : V2=V3+Vbe+V4 2450 R2=V2/(tpar*Ib) : V1=Vs-V2 : R1=V1/((tpar+1)*Ib) 2460 Rout=1/((hFE/Rs)+(1/R4)) : Vce=Vs-V4 2470 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ 2480 GOTO 9300 2500 pn=4 : INPUT "IcmA=";IcmA : IF IcmA<=0 THEN RETURN 2510 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 2520 re=26/IcmA : IemA=IcmA*beta : Vbe=FNvb(IemA) : V4=(Vs-Vces)/2 : IF Rs<.1 THEN Rs=1E+07 2530 R4=V4*1000/IemA : IbmA=IcmA/hFE : V3=V4+Vbe : IemA2=IbmA*((2*tpar)+1) 2540 IcmA2=IemA2/beta : Vbe2=FNvb(IemA2) : Vce=Vs-V4 : R3=V3*1000/(2*tpar*IbmA) 2550 re2=26/IcmA2 : V2=Vbe2+V3 : R2=FNr2(IcmA2) : V1=Vs-V2 2560 R1=FNr1(IcmA2) : z=FNpl(R1,R2) : ze=hFE*hFE*(R4+re) 2570 ze2=hFE*(R3+re2) : zIN=FNpl(z,ze) : Rin=FNpl(zIN,ze2) : Vbe=Vbe+Vbe2 2580 z0=FNpl(z,Rs) : Rout=1/((hFE*hFE/z0)+(1/R4)) : Av=R4*R3/((R4+re)*(R3+re2)) 2590 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ : GOTO 9600 2600 pn=5 : INPUT "IcmA=";IcmA : IF IcmA<=0 THEN RETURN 2610 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 2620 re=26/IcmA : IemA=IcmA*beta : Vbe=FNvb(IemA) : V4=(Vs-Vces)/2 : IF Rs<.1 THEN Rs=1E+07 2630 R4=V4*1000/IemA : ze=hFE*(R4+re) : Av=R4/(R4+re) : V1=Vs-V4-Vbe 2640 R1=V1*1000*hFE/IcmA : Rin=FNpl(R1,ze) : z=FNpl(Rin,Rs) 2650 Rout=1/((hFE/z)+(1/R4)) : Vce=Vs-V4 : R2=0 : V2=0 : R3=0 : V3=0 2660 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ : GOTO 9200 2700 pn=5 : INPUT "R1=";R1 : IF R1<.1 THEN RETURN 2710 INPUT "R4=";R4 2720 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 2730 I_max=(Vs-Vces)/R4 : Ib_max=I_max/(beta*hFE) : Ib_min=delta_min/hFE : IF Rs<.1 THEN Rs=1E+07 2740 delta_Ib=1000*Ib_min : L%=INT(Ib_max/delta_Ib)+1 2750 FOR I%=1 TO L% 2760 Ib=I%*delta_Ib : PROCvb4 2770 IF Vbv GOTO 2890 2860 PRINT TAB(1,13);I%,J%,K%; : NEXT K% 2870 PRINT TAB(1,14);I%,J%; : NEXT J% 2880 PRINT TAB(1,15);I%; : NEXT I% 2890 IcmA=Ib*hFE*1000 : IemA=IcmA*beta : V4=R4*IemA/1000 : Vbe=FNvb(IemA) 2900 V1=Vs-Vbe-V4 : re=26/IcmA : ze=hFE*(R4+re) : Av=R4/(R4+re) 2910 Rin=FNpl(R1,ze) : z=FNpl(Rin,Rs) : Rout=1/((hFE/z)+(1/R4)) 2920 Vce=Vs-V4 : C%=I%+J%+K% : R2=0 : V2=0 : R3=0 : V3=0 2930 CLS : PRINT TAB(20,0);lh$;"EM.FOL-2R-VAL-6P";rh$ : GOSUB 9200 : GOTO 1420 2940 DEF PROCvb4 2950 v=Vs-(R1*Ib) : IcmA=Ib*hFE*1000 : IemA=IcmA*beta : V4=R4*IemA/1000 2960 Vbe=FNvb(IemA) : Vb=V4+Vbe 2970 ENDPROC 3000 pn=6 : INPUT "IcmA=";IcmA : IF IcmA<=0 THEN RETURN 3010 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 3020 re=26/IcmA : IemA=IcmA*beta : Vbe=FNvb(IemA) : V4=(Vs-Vces)/2 3030 R4=V4*1000/IemA : ze=hFE*(R4+re) : Av=R4/(R4+re) : V2=Vbe+V4 : IF Rs<.1 THEN Rs=1E+07 3040 R2=FNr2(IcmA) : V1=Vs-V2 : R1=FNr1(IcmA) 3050 z=FNpl(R1,R2) : Rin=FNpl(z,ze) : z0=FNpl(z,Rs) 3060 Rout=1/((hFE/z0)+(1/R4)) : Vce=Vs-V4 : R3=0 : V3=0 3070 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ : GOTO 9300 3100 pn=6 : INPUT "R1=";R1 : IF R1<.1 THEN RETURN 3110 INPUT "R2=";R2 : IF R2<.1 THEN RETURN 3120 INPUT "R4=";R4 3130 INPUT "Rs=";Rs : PROCdefaults : IF ef THEN RETURN 3140 IR1R2=Vs/(R1+R2) : k0=R1/(R1+R2) : z=R2/(1+(1/tpar)) : V2=Vs*z/(R1+z) 3150 V4=V2-vk : C%=0 : IF V4<=0 THEN V4=vk 3160 IemA=1000*V4/R4 : IF Rs<.1 THEN Rs=1E+07 3170 IcmA=IemA/beta : Vbe=FNvb(IemA) : Ib=IcmA/(hFE*1000) : V2=FNvr2(Ib) 3180 V4=V2-Vbe : new_IemA=1000*V4/R4 : C%=C%+1 : delta_IemA=ABS(IemA-new_IemA) 3190 IF delta_IemA99 GOTO 3210 3200 IemA=(IemA+new_IemA)/2 : GOTO 3170 3210 IemA=(IemA+new_IemA)/2 : IcmA=IemA/beta : V4=R4*IemA/1000 : Vbe=FNvb(IemA) 3220 V2=V4+Vbe : V1=Vs-V2 : Vce=Vs-V4 : re=26/IcmA : ze=hFE*(R4+re) 3230 Av=R4/(R4+re) : z=FNpl(R1,R2) : Rin=FNpl(z,ze) : z0=FNpl(z,Rs) 3240 Rout=1/((hFE/z0)+(1/R4)) : R3=0 : V3=0 3250 CLS : PRINT TAB(20,0);lh$;"EM.FOL-3R-VAL-7P";rh$ : GOSUB 9300 : GOTO 1420 3300 pn=10 : INPUT "z=";z : IF z<.1 THEN z=50 3310 INPUT "N=";N : IF N<=0 THEN PROCquery_dB 3320 dB=20*LOG(N) 3330 R1=z*(N+1)/(N-1) : R3=R1 : R2=z*((N*N)-1)/(2*N) 3340 CLS : PRINT TAB(20,0);ls$;menu$(N%);rs$ 3350 PRINT TAB(0,2);"z=";z;TAB(20,2);"N=";N;TAB(40,2);"dB=";dB 3360 PRINT TAB(0,3);"R1=";R1;TAB(20,3);"R2=";R2;TAB(40,3);"R3=";R3 3370 R%=4 : GOTO 9040 3400 J%=1 : IF N%=23 THEN J%=2 3410 r=R1 : PROCpreval : R1=r 3420 r=R2 : PROCpreval : R2=r 3430 r=R3 : PROCpreval : R3=r 3440 r=R4 : PROCpreval : R4=r 3450 ON pn GOTO 1330,1850,4950,4550,2730,3140,3750,4110,4300,4400,5340,5760,6050 3460 RETURN 3495 DEF PROCpreval 3500 m=.01 : IF r<.1 THEN r=0 : ENDPROC 3510 FOR I%=0 TO 9 3520 IF r>10^I% THEN m=10^(I%-1) 3530 NEXT I% 3540 FOR I%=1 TO 24 STEP J% 3550 rl=pvr(I%)*m : ru=pvr(I%+J%)*m : IF r<=rl THEN I%=25 : GOTO 3580 3560 IF r>ru GOTO 3580 3570 dl=r-rl : du=ru-r : r=ru : IF dl