[Init] MAINWIN 80 43:ON ERROR GOTO [Init]:CLS:PI=asn(1)*2:PRINT PRINT TAB(15);"Passive Filter Design 1968 - 2005 Bill Yotter" PRINT TAB(12);"Books to ZX81 BASIC to GWBASIC to APBASIC to JustBASIC" PRINT PRINT TAB(8);"This program makes the assumption that the user has at minimum" PRINT TAB(8);"a rudimentary knowledge of electronics; experienced users may " PRINT TAB(8);"understand and benefit the most from this suite of design tools." PRINT TAB(8);"Note: Selecting configurations or values outside the bounds of" PRINT TAB(8);"reality will produce program errors which run automatic restart." PRINT PRINT tab(8);"Most of the abbreviations used are listed in RCL Calculator." PRINT PRINT TAB(14);"Example filter description: C1s - L1p,C2s - C3s,L2p" PRINT PRINT TAB(14);"Equates to: o---(C1s)---+---+--(C3s)--+---o" PRINT TAB(14);" | | |" PRINT TAB(14);" (L1p) +--(L2p)--+" PRINT TAB(14);" |" PRINT TAB(14);" (C2s)" PRINT TAB(14);" |" PRINT TAB(14);" o-----------+-----------------o" PRINT:PRINT PRINT TAB(30);"1) Bandpass K" PRINT TAB(30);"2) Bandstop K" PRINT TAB(30);"3) Lowpass K" PRINT TAB(30);"4) Highpass K" PRINT TAB(30);"5) Lowpass M" PRINT TAB(30);"6) Highpass M" PRINT TAB(30);"7) Air Capacitor" PRINT TAB(30);"8) Air Inductor" PRINT TAB(30);"9) RCL Calculator" PRINT TAB(30);"0) Exit" PRINT:PRINT TAB(30);"Selection ? ";:X$=INPUT$(1) IF X$="1" THEN [BandpassK] IF X$="2" THEN [BandstopK] IF X$="3" THEN [LowpassK] IF X$="4" THEN [HighpassK] IF X$="5" THEN [LowpassM] IF X$="6" THEN [HighpassM] IF X$="7" THEN [AirCap] IF X$="8" THEN [AirInd] IF X$="9" THEN [RCL] IF X$="0" THEN END GOTO [Init] [BandpassK] CLS:PRINT PRINT" Bandpass K :":PRINT PRINT" L1s,C1s - C2p,L2p":PRINT PRINT" C6p,L4p - L1s,C1s - C6p,L4p":PRINT PRINT" L5s,C3s - C2p,L2p - L5s,C3s":PRINT INPUT" Impedance ? ";Z INPUT" Low frequency ? ";F1 INPUT" High frequency ? ";F2:PRINT L1=Z/(PI*(F2-F1)) C1=(F2-F1)/(4*PI*F1*F2*Z) L2=((F2-F1)*Z)/(4*PI*F1*F2) C2=1/(PI*(F2-F1)*Z) PRINT" L1 = ";L1;TAB(30);"C1 = ";C1 PRINT" L2 = ";L2;TAB(30);"C2 = ";C2 PRINT" L3 = ";L1*2;TAB(30);"C3 = ";C1*2 PRINT" L4 = ";L2*2;TAB(30);"C4 = ";C2*2 PRINT" L5 = ";L1/2;TAB(30);"C5 = ";C1/2 PRINT" L6 = ";L2/2;TAB(30);"C6 = ";C2/2 PRINT:X$=INPUT$(2):GOTO [Init] [BandstopK] CLS:PRINT PRINT" Bandstop K :":PRINT PRINT" L1s,C1p - L2p,C2s":PRINT PRINT" L4p,C6s - L1s,C1p - L4p,C6s":PRINT PRINT" L5s,C3p - L2p,C2s - L5s,C3p":PRINT INPUT" Impedance ? ";Z INPUT" Low frequency ? ";F1 INPUT" High frequency ? ";F2:PRINT L1=((F2-F1)*Z)/(PI*F1*F2) C1=1/(4*PI*Z*(F2-F1)) L2=Z/(4*PI*(F2-F1)) C2=(F2-F1)/(PI*Z*F1*F2) PRINT" L1 = ";L1;TAB(30);"C1 = ";C1 PRINT" L2 = ";L2;TAB(30);"C2 = ";C2 PRINT" L3 = ";L1*2;TAB(30);"C3 = ";C1*2 PRINT" L4 = ";L2*2;TAB(30);"C4 = ";C2*2 PRINT" L5 = ";L1/2;TAB(30);"C5 = ";C1/2 PRINT" L6 = ";L2/2;TAB(30);"C6 = ";C2/2 PRINT:X$=INPUT$(1):GOTO [Init] [LowpassK] CLS:PRINT PRINT" Lowpass K :":PRINT PRINT" Ls - Cp":PRINT INPUT" Impedance ? ";Z INPUT" Cutoff freq ? ";F:PRINT L=Z/(PI*F) C=1/(PI*F*Z) PRINT" L1 = ";L PRINT" C1 = ";C PRINT:X$=INPUT$(1):GOTO [Init] [HighpassK] CLS:PRINT PRINT" Highpass K :":PRINT PRINT" Cs - Lp":PRINT INPUT" Impedance ? ";Z INPUT" Cutoff freq ? ";F:PRINT L=Z/(4*PI*F) C=1/(4*PI*F*Z) PRINT" L1 = ";L PRINT" C1 = ";C PRINT:X$=INPUT$(1):GOTO [Init] [LowpassM] CLS:PRINT PRINT" Lowpass M :":PRINT PRINT" L3s - L2p,C1s - L3s":PRINT PRINT" L1s - L2p,C1s":PRINT PRINT" C3p - L1s,C2p - C3p":PRINT INPUT" Impedance ";Z INPUT" Cutoff freq ? ";FC INPUT" Infinite freq ? ";FI:PRINT M=SQR(1-(FC/FI)^2) L1=(M*Z)/(PI*FC) L2=((1-M^2)*Z)/(4*PI*M*FC) C1=M/(PI*FC*Z) C2=(1-M^2)/(4*PI*FC*Z) PRINT" L1 = ";L1;TAB(30);"C1 = ";C1 PRINT" L2 = ";L2;TAB(30);"C2 = ";C2 PRINT" L3 = ";L1/2;TAB(30);"C3 = ";C1/2 PRINT:X$=INPUT$(1):GOTO [Init] [HighpassM] CLS:PRINT PRINT" Highpass M :":PRINT PRINT" C1s - L1p,C2s":PRINT PRINT" C3s - L1p,C2s - C3s":PRINT PRINT" L3p - L2s,C1p - L3p":PRINT INPUT" Impedance ? ";Z INPUT" Cutoff freq ? ";FC INPUT" Infinite freq ? ";FI:PRINT M=(SQR(1-(FI/FC)^2)) L1=Z/(4*PI*M*FC) L2=ABS((M*Z)/((1-M^2)*PI*FC)) C1=1/(4*PI*M*FC*Z) C2=ABS(M/((1-M^2)*PI*FC*Z)) PRINT" L1 = ";L1;TAB(30);"C1 = ";C1 PRINT" L2 = ";L2;TAB(30);"C2 = ";C2 PRINT" L3 = ";L1*2;TAB(30);"C3 = ";C1*2 PRINT:X$=INPUT$(1):GOTO [Init] [AirCap] CLS:PRINT PRINT TAB(15);" Enter a 0 for the unknown parameters :":PRINT PRINT TAB(10);" Dialectric for: air=1.00059 paper=2.25 glass=7 water=77":PRINT PRINT TAB(20);:INPUT"Area in inches ? ";A PRINT TAB(20);:INPUT"Distance in inches ? ";D PRINT TAB(20);:INPUT"Capacitance in pf ? ";C PRINT TAB(20);:INPUT"Dialectric (er') ? ";ER PRINT:IF ER<=0 THEN ER=1.00059 IF (A<>0 AND C<>0 AND D<>0) THEN PRINT TAB(20);"er' = ";((C*D)/.222091193)/A:GOTO [LOOP] IF (A<>0 AND D<>0) THEN PRINT TAB(20);"Capacitance in pf = ";.222091193*((ER*A)/D) IF (A<>0 AND C<>0) THEN PRINT TAB(20);"Distance in inchs = ";(.222091193*ER*A)/C;" (";SQR(A);CHR$(34);" per side)" IF (C<>0 AND D<>0) THEN PRINT TAB(20);"Area in inches = ";((C*D)/.222091193)/ER;" "; IF (C<>0 AND D<>0) THEN PRINT"(";SQR(((C*D)/.222091193)/ER);CHR$(34);" per side)" [LOOP] PRINT:X$=INPUT$(1):GOTO [Init] [AirInd] CLS:PRINT PRINT TAB(15);"Enter 0 for the number of turns and/or inductance :":PRINT PRINT TAB(20);:INPUT"Inductance ? ";H PRINT TAB(20);:INPUT"Number of Turns ? ";N PRINT TAB(20);:INPUT"Length in inchs ? ";L PRINT TAB(20);:INPUT"Wire Diameter ? ";D PRINT:R=D/2 IF H=0 AND N=0 THEN [SWIND] IF H<>0 THEN [TURNS] PRINT TAB(20);"The inductance = ";(R^2*N^2)/(9*R+10*L)/1000000 PRINT:X$=INPUT$(1):GOTO [Init] [TURNS] PRINT TAB(20);"The number needed = ";((SQR(H*(9*R+(10*L))))/R)*1000 PRINT:X$=INPUT$(1):GOTO [Init] [SWIND] X=((4*(L*2.54)/(D*2.54)-1)+1.00059)/4 LS=.002*(L*2.54)*LOG(X)/1000000 PRINT TAB(20);"Straight wire Ind = ";LS PRINT:X$=INPUT$(1):GOTO [Init] [RCL] CLS:PRINT:PI=asn(1)*2 PRINT TAB(3);"RCL Passive Component Value Calculations 1968 - 2005 Bill Yotter" PRINT TAB(5);"Books to Z80 ASM to ZX81 BASIC to GWBASIC to APBASIC to JustBASIC" PRINT " " PRINT " c = capacitance l = inductance p = parallel R = resistance" PRINT " s = series t = total v = voltage X = reactance" PRINT " I = amperage Q = selectivity z = impedance V = your value" PRINT " BW= bandwidth Fr= resonat freq PI= asn(1)*2 N = repeating.." PRINT:PRINT:PRINT TAB(5);"Menu follows, select 0 to 9:":PRINT PRINT " 1) Fr = 1/((2*PI*SQR(C*L))" PRINT " 2) Cr or Lr = 1/((2*PI*Fr)^2*V) Frs I Qs = X/R" PRINT " 3) Xl = 2*PI*F*L Frp >Z >v Parallel Conversions" PRINT " 7) Rt = Rp 1/((1/N1)+(1/N2)..)" PRINT " Ct = Cs" PRINT " Lt = Lp" PRINT " Xt = Xp" PRINT " 8) Rt = Rs 1N+2N+.." PRINT " Ct = Cp" PRINT " Lt = Ls" PRINT " Vt = Vs" PRINT " It = Ip" PRINT " Xt = Xs" PRINT " 9) Zt = Rs Xcs Xls SQR(A^2+(B-C)^2)" PRINT " Vt = Vrs Vxcs Vxls" PRINT " It = Irp Ixcp Ixlp" PRINT " 0) Return to Passive Filter Design" PRINT:PRINT TAB(25);"Selection ? ";:X$=INPUT$(1):PRINT T=0:PRINT:PRINT TAB(25);"# ";X$;")" IF X$="1" THEN [RCLa] IF X$="2" THEN [RCLb] IF X$="3" THEN [RCLc] IF X$="4" THEN [RCLd] IF X$="5" THEN [RCLe] IF X$="6" THEN [RCLf] IF X$="7" THEN [RCLg] IF X$="8" THEN [RCLh] IF X$="9" THEN [RCLi] IF X$="0" THEN [Init] GOTO [RCL] [RCLa] ' Resonant Freq PRINT TAB(25);:INPUT"Cap ? ";C PRINT TAB(25);:INPUT"Ind ? ";L PRINT:PRINT TAB(25);"Fr = ";1/(2*PI*SQR(C*L)):X$=INPUT$(1):GOTO [RCL] [RCLb] ' resonant component PRINT TAB(25);:INPUT"Cr/Lr ? ";X PRINT TAB(25);:INPUT"Fr ? ";F PRINT:PRINT TAB(25);"Part = ";1/((2*PI*F)^2*X):X$=INPUT$(1):GOTO [RCL] [RCLc] ' ind reactance PRINT TAB(25);:INPUT"Ind ? ";L PRINT TAB(25);:INPUT"Freq ? ";F PRINT:PRINT TAB(25);"XL = ";2*PI*F*L:X$=INPUT$(1):GOTO [RCL] [RCLe] ' cap reactance PRINT TAB(25);:INPUT"Xc/C ? ";X PRINT TAB(25);:INPUT"Freq ? ";F IF X>1 THEN X$="Cap " ELSE X$="Xc " PRINT:PRINT TAB(25);X$;" = ";1/(2*PI*F*X):X$=INPUT$(1):GOTO [RCL] [RCLg] ' parallel PRINT TAB(25);:INPUT "Value ? ";X T=1/(1/X):GOTO [RCLga] [RCLgb] PRINT TAB(25);:INPUT "Value ? ";X IF X=0 THEN [RCL] T=1/((1/T)+(1/X)) [RCLga] PRINT TAB(25);:PRINT"Total = ";T:GOTO [RCLgb] [RCLh] ' series PRINT TAB(25);:INPUT "Value ? ";X IF X=0 THEN [RCL] T=T+X PRINT TAB(25);"Total = ";T:GOTO [RCLh] [RCLi] ' vector equation PRINT TAB(25);:INPUT"Value ? ";A PRINT TAB(25);:INPUT"Value ? ";B PRINT TAB(25);:INPUT"Value ? ";C PRINT:PRINT TAB(25);"Total = ";SQR(A^2+(B-C)^2):X$=INPUT$(1):GOTO [RCL] [RCLd] ' l from Xl PRINT TAB(25);:INPUT"Xl ? ";XL PRINT TAB(25);:INPUT"Freq ? ";F PRINT:PRINT TAB(25);"Ind = ";XL/(2*PI*F):X$=INPUT$(1):GOTO [RCL] [RCLf] ' rs - rp conversion PRINT TAB(25);"1) S > P" PRINT TAB(25);"2) P > S ";:X$=INPUT$(1) IF X$="1" THEN PRINT:GOTO [RCLfa] IF X$="2" THEN PRINT:GOTO [RCLfb] GOTO [RCL] [RCLfa] PRINT:PRINT TAB(25);:INPUT"Rs ? ";RS PRINT TAB(25);:INPUT"Xs ? ";XS PRINT:PRINT TAB(25);"Rp = ";RS*(1+(XS/RS)^2) PRINT TAB(25);:PRINT"Xp = ";(RS*(1+(XS/RS)^2))/(XS/RS):X$=INPUT$(1):GOTO [RCL] [RCLfb] PRINT:PRINT TAB(25);:INPUT"Rp ? ";RP PRINT TAB(25);:INPUT"Xp ? ";XP PRINT:PRINT TAB(25);"Rs = ";RP/(1+(RP/XP)^2) PRINT TAB(25);"Xs = ";(RP/(1+(RP/XP)^2))*(RP/XP):X$=INPUT$(1):GOTO [RCL]