Once the Soviet Union (1970) released the domestic radio set VEF204, the question was arise!
How those Soviet engineers could adapt the (9-360PF) variable capacitor (VC) used in that set to any Minimum-Maximum value they need to cover its eight bands?
Actually, they did that by connecting two fixed capacitors to the VC, but how they calculate the two capacitors values easily?
If we try to use calculator we will discover we going to lose our mind!
Sure those Soviet engineers developed equations to calculate the two values easily.
But for me, I can develop a program to do that visually easily. Using the simple two ways to solve the total value of two capacitors connected either in parallel or series. That what I am going to present here.
How to use the program:
1- Choose any of the two connection we think it is suitable for us.
2- Enter the minimum maximum values of our VC in pf.
3- Enter the minimum maximum values we want to obtain.
4- Enter values for C1 C2 randomly as we like and watch the draw of the lower line which represents the two values we get. Since we see the lower line look to subtend the two blue and red arrows which they represent the two values we want then we start comparing the figures of the two values we want with the two values we get on the GUI of the program. Till they became each one equal to the other.
Code: Select all
NOMAINWIN
WindowWidth = 931 : WindowHeight = 504
UpperLeftX = INT((DisplayWidth-WindowWidth)/2)
UpperLeftY = INT((DisplayHeight-WindowHeight)/2)
tx1i=0: tx1o=0
tx2i=0: tx2o=0
tx3i=0: tx3o=0
tx4i=0: tx4o=0
tx5i=0: tx5o=0
tx6i=0: tx6o=0
tx7i=0: tx7o=0
tx8i=0: tx8o=0
statictext #w.statictext1, "VC min max Values We Have", 5, 128, 200, 25
statictext #w.statictext2, "VC min max Values We Want", 5, 163, 200, 25
statictext #w.statictext3, "VC min max Values We Get", 5, 198, 200, 25
statictext #w.statictext4, "C1 C2 Values We Add", 5, 363, 200, 25
statictext #w.statictext6, "C1 PF", 310, 365, 60, 25
statictext #w.statictext7, "C2 PF", 500, 365, 60, 25
statictext #w.ST1, "Min. Value PF", 230, 108, 120, 15
statictext #w.ST2, "Max. Value PF", 425, 108, 120, 15
statictext #w.ChoseOne, "First we chose the net method we going to use:",210, 40, 340, 25
button #w.Bcnet1, "Parallel C then Serial", [Cnet_1], UL, 210, 70, 160, 20
button #w.Bcnet2, "Serial C then Parallel", [Cnet_2], UL, 395, 70, 160, 20
stylebits #w.textbox1, _ES_CENTER, 0, 0, 0
textbox #w.textbox1, 215, 125, 150, 25
stylebits #w.textbox2, _ES_CENTER, 0, 0, 0
textbox #w.textbox2, 405, 125, 150, 25
TextboxColor$= "176 176 255"
stylebits #w.textbox3, _ES_CENTER, 0, 0, 0
textbox #w.textbox3, 215, 160, 150, 25
TextboxColor$= "255 147 147"
stylebits #w.textbox4, _ES_CENTER, 0, 0, 0
textbox #w.textbox4, 405, 160, 150, 25
TextboxColor$= "255 255 255"
stylebits #w.textbox5,_ES_READONLY OR _ES_CENTER, _WS_BORDER, 0, 0
textbox #w.textbox5, 215, 195, 150, 25
stylebits #w.textbox6,_ES_READONLY OR _ES_CENTER, _WS_BORDER, 0, 0
textbox #w.textbox6, 405, 195, 150, 25
stylebits #w.textbox7, _ES_CENTER, 0, 0, 0
textbox #w.textbox7, 215, 360, 85, 25
stylebits #w.textbox8, _ES_CENTER, 0, 0, 0
textbox #w.textbox8, 405, 360, 85, 25
button #w.b1p1, "+1", [b1p1], UL, 215, 388, 42, 16'
button #w.b1m1, "-1", [b1m1], UL, 260, 388, 42, 16'
button #w.b1p5, "+5", [b1p5], UL, 215, 405, 42, 16'
button #w.b1m5, "-5", [b1m5], UL, 260, 405, 42, 16'
button #w.b1p10, "+10", [b1p10], UL, 215, 422, 42, 16'
button #w.b1m10, "-10", [b1m10], UL, 260, 422, 42, 16
button #w.b2p1, "+1", [b2p1], UL, 405, 388, 42, 16
button #w.b2m1, "-1", [b2m1], UL, 450, 388, 42, 16
button #w.b2p5, "+5", [b2p5], UL, 405, 405, 42, 16
button #w.b2m5, "-5", [b2m5], UL, 450, 405, 42, 16
button #w.b2p10, "+10", [b2p10], UL, 405, 422, 42, 16
button #w.b2m10, "-10", [b2m10], UL, 450, 422, 42, 16
graphicbox #w.GBox, 650, 55, 190, 162
StyleBits #w.GLBox, 0, _WS_BORDER, 0, 0
graphicbox #w.GLBox, 50, 240, 803, 110
CHECKBOX #w.Cnet1, "", [a1], [a2], 197, 70, 13, 20
CHECKBOX #w.Cnet2, "", [b1], [b2], 555, 70, 13, 20
'radiobutton #w.Cnet2, "", [click2], [b], 545, 70, 13, 20
Menu #w, "&File" , "E&xit", [quit]
Open "Variable Capacitor Value Adapter " for Window as #w
#w "font Arial 10 bold"
#w "trapclose [quit]"
#w.Cnet1 "set"
#w.textbox1 "9"
#w.textbox2 "330"
#w.textbox3 "10"
#w.textbox4 "100"
#w.textbox7 "1"
#w.textbox8 "1"
'----Drawing the scale
A= 0
B= 33
C= 800
D= 33
print #w.GLBox, "size 1"
print #w.GLBox, "up": #w.GLBox, "home"
print #w.GLBox, "goto 0 23"
'-------------
print #w.GLBox, "fill Buttonface";
#w.GLBox, "down"
print #w.GLBox, "line ";A;" "; B;" ";C;" ";D
print #w.GLBox, "up": #w.GLBox, "home"
'-------------
For xDis =0 to 800 step 200
#w.GLBox, "down"
print #w.GLBox, "line ";xDis;" "; 33;" ";xDis;" ";38
print #w.GLBox, "up": #w.GLBox, "home"
next
For xDis =0 to 800 step 20
#w.GLBox, "down"
print #w.GLBox, "line ";xDis;" "; 33;" ";xDis;" ";38
print #w.GLBox, "up": #w.GLBox, "home"
next
For xDis =0 to 800 step 100
#w.GLBox, "down"
print #w.GLBox, "line ";xDis;" "; 33;" ";xDis;" ";48
print #w.GLBox, "up": #w.GLBox, "home"
next
print #w.GLBox, "goto ";0;" ";62
#w.GLBox, "down"
#w.GLBox "backcolor buttonface ;size 10;color 0 0 0"' pen color 0 0 0
print #w.GLBox, "\0"
#w.GLBox, "up"
print #w.GLBox, "goto ";185;" ";62
#w.GLBox, "down"
print #w.GLBox, "\100pf"
#w.GLBox, "up"
print #w.GLBox, "goto ";385;" ";62
#w.GLBox, "down"
print #w.GLBox, "\200pf"
#w.GLBox, "up"
print #w.GLBox, "goto ";585;" ";62
#w.GLBox, "down"
print #w.GLBox, "\300pf"
#w.GLBox, "up"
print #w.GLBox, "goto ";765;" ";62
#w.GLBox, "down"
print #w.GLBox, "\400pf"
#w.GLBox, "up"
'--------End Drawing the scale End
'-------- Drawing the circuit diagram
loadbmp "PSimage", DefaultDir$;"\PS.bmp"
print #w.GBox, "drawbmp PSimage 0 0"
unloadbmp "PSimage"
PS= 1: SP=0
'-------- End Drawing the circuit diagram
'----Drawing the Red Blue Triangle
loadbmp "clearB", DefaultDir$;"\clearB.bmp"
loadbmp "clearR", DefaultDir$;"\clearR.bmp"
loadbmp "copyimageb", DefaultDir$;"\b.bmp"
loadbmp "copyimager", DefaultDir$;"\r.bmp"
xb = (2*10)-6
print #w.GLBox, "drawbmp copyimageb ";xb;" ";18 '452
xr = (2*100)-8
print #w.GLBox, "drawbmp copyimager ";xr;" ";0 '452
'----End Drawing the Red Blue Triangle End
'---- Drawing the lower Line
print #w.GLBox, "size 4"
print #w.GLBox, "up": #w.GLBox, "home"
#w.GLBox, "down"
print #w.GLBox, "color 0 128 0"'Line color
print #w.GLBox, "line ";A;" "; 70;" ";1;" ";70
print #w.GLBox, "up": #w.GLBox, "home"
'---- End Drawing the lower Line End
#w.textbox1, "!contents? Txx1$";
#w.textbox2, "!contents? Txx2$";
#w.textbox3, "!contents? Txx3";
#w.textbox4, "!contents? Txx4";
#w.textbox5, "!contents? Txx5$";
#w.textbox6, "!contents? Txx6$";
#w.textbox7, "!contents? Txx7$";
#w.textbox8, "!contents? Txx8$";
htxt1= hWnd(#w.textbox1)
htxt2= hWnd(#w.textbox2)
htxt3= hWnd(#w.textbox3)
htxt4= hWnd(#w.textbox4)
htxt5= hWnd(#w.textbox5)
htxt6= hWnd(#w.textbox6)
htxt7= hWnd(#w.textbox7)
htxt8= hWnd(#w.textbox8)
[Loop]
Timer 150, [events]
wait
[UpdateLine]
L1=L1*2
L2=L2*2
print #w.GLBox, "size 4"
print #w.GLBox, "up": #w.GLBox, "home"
#w.GLBox, "down"
print #w.GLBox, "color 236 233 216"'to clear the color
print #w.GLBox, "line ";0;" "; 70;" ";800;" ";70'draw color with the same background
if L1 > L2 then
print #w.GLBox, "color 228 0 0"'Line color
Else
print #w.GLBox, "color 0 128 0"'Line color
End If
print #w.GLBox, "line ";L1;" "; 70;" ";L2;" ";70' draw a new line
'print #w.GLBox, "up": #w.GLBox, "home"
Return
[events]
CallDLL #user32, "GetFocus", Fh As long 'Gheck the focus
if Fh<>htxt1 then
#w.textbox1, "!contents? Tx1$"
if tx1i=1 then tx1o=1: tx1i=0: Timer 0: Goto [AfterUpdate1]
End if
if Fh= htxt1 AND tx1i=0 then tx1i=1: tx1o=0: Timer 0: Goto [BeforUpdate1]
'--------------------------------------------
if Fh<>htxt2 then
#w.textbox2, "!contents? Tx2$"
if tx2i=1 then tx2o=1: tx2i=0: Timer 0: Goto [AfterUpdate2]
End if
if Fh= htxt2 AND tx2i=0 then tx2i=1: tx2o=0: Timer 0: Goto [BeforUpdate2]
'--------------------------------------------
if Fh<>htxt3 then ' #w.textbox3 Blue
#w.textbox3, "!contents? Tx3"
if tx3i=1 then tx3o=1: tx3i=0: Timer 0: Goto [AfterUpdate3]
End if
if Fh= htxt3 AND tx3i=0 then tx3i=1: tx3o=0: Timer 0: Goto [BeforUpdate3]
'--------------------------------------------
if Fh<>htxt4 then '#w.textbox4 Red
#w.textbox4, "!contents? Tx4"
if tx4i=1 then tx4o=1: tx4i=0: Timer 0: Goto [AfterUpdate4]
End if
if Fh= htxt4 AND tx4i=0 then tx4i=1: tx4o=0: Timer 0: Goto [BeforUpdate4]
'--------------------------------------------
if Fh<>htxt5 then
#w.textbox5, "!contents? Tx5$"
if tx5i=1 then tx5o=1: tx5i=0: Timer 0: Goto [AfterUpdate5]
End if
if Fh= htxt5 AND tx5i=0 then tx5i=1: tx5o=0: Timer 0: Goto [BeforUpdate5]
'--------------------------------------------
if Fh<>htxt6 then
#w.textbox6, "!contents? Tx6$"
if tx6i=1 then tx6o=1: tx6i=0: Timer 0: Goto [AfterUpdate6]
End if
if Fh= htxt6 AND tx6i=0 then tx6i=1: tx6o=0: Timer 0: Goto [BeforUpdate6]
'--------------------------------------------
if Fh<>htxt7 then
#w.textbox7, "!contents? Tx7$"
if tx7i=1 then tx7o=1: tx7i=0: Timer 0: Goto [AfterUpdate7]
End if
if Fh= htxt7 AND tx7i=0 then tx7i=1: tx7o=0: Timer 0: Goto [BeforUpdate7]
'--------------------------------------------
if Fh<>htxt8 then
#w.textbox8, "!contents? Tx8$"
if tx8i=1 then tx8o=1: tx8i=0: Timer 0: Goto [AfterUpdate8]
End if
if Fh= htxt8 AND tx8i=0 then tx8i=1: tx8o=0: Timer 0: Goto [BeforUpdate8]
Goto [Loop]
[Cnet_1]
Timer 0
PS= 1
SP=0
loadbmp "PSimage", DefaultDir$;"\PS.bmp"
print #w.GBox, "drawbmp PSimage 0 0"
unloadbmp "PSimage"
#w.Cnet1 "set"
#w.Cnet2 "reset"
Goto [Loop]
[Cnet_2]
Timer 0
SP= 1
PS=0
loadbmp "SPimage", DefaultDir$;"\SP.bmp"
print #w.GBox, "drawbmp SPimage 0 0"
unloadbmp "SPimage"
#w.Cnet2 "set"
#w.Cnet1 "reset"
Goto [Loop]
[AfterUpdate1]
IF Tx1$<>Txx1$ then 'Update
Gosub [CalculateValueWeGet]
end if
Goto [Loop]
[AfterUpdate2]
IF Tx2$<>Txx2$ then 'Update
Gosub [CalculateValueWeGet]
end if
Goto [Loop]
[AfterUpdate3]
IF Tx3<>Txx3 then 'Update
'notice "AfterUpdate 3"
print #w.GLBox, "drawbmp clearB ";xb;" ";18 '
#w.textbox3, "!contents? xb";
xb= (xb*2)-6
print #w.GLBox, "drawbmp copyimageb ";xb;" ";18 '
'print ABS(Tx3-Txx4)
if ABS(Txx4-Tx3)<18 then 'If one of the Triangles over the other
print #w.GLBox, "drawbmp copyimager ";xr;" ";0 '
print #w.GLBox, "drawbmp copyimageb ";xb;" ";18 '
end if
end if
Goto [Loop]
[AfterUpdate4]
IF Tx4<>Txx4 then 'Update
'notice "AfterUpdate 4"
print #w.GLBox, "drawbmp clearR ";xr;" ";0 '
#w.textbox4, "!contents? xr";
xr= (xr*2)-8
print #w.GLBox, "drawbmp copyimager ";xr;" ";0 '
if Txx4=Txx3 then 'If one of the Triangles over the other
print #w.GLBox, "drawbmp copyimageb ";xb;" ";5 '
end if
end if
Goto [Loop]
[AfterUpdate5]
IF Tx5$<>Txx5$ then 'Update
'notice "AfterUpdate 5"
end if
Goto [Loop]
[AfterUpdate6]
IF Tx6$<>Txx6$ then 'Update
'notice "AfterUpdate 6"
end if
Goto [Loop]
[AfterUpdate7]
IF Tx7$<>Txx7$ then 'Update
#w.textbox7, "!contents? C1add";
GoSub [CalculateValueWeGet]
'notice "AfterUpdate 7"
end if
Goto [Loop]
[AfterUpdate8]
IF Tx8$<>Txx8$ then 'Update
'notice "AfterUpdate 8"
#w.textbox8, "!contents? C2add";
GoSub [CalculateValueWeGet]
end if
Goto [Loop]
[CalculateValueWeGet]
if PS= 1 AND SP=0 then
print #w.textbox1, "!contents? MinVC"; 'Min VC
print #w.textbox2, "!contents? MaxVC"; 'Max VC
print #w.textbox7, "!contents? C1ad"; 'C1 Add
print #w.textbox8, "!contents? C2ad"; 'C2 Add
CPMax = C1ad + MaxVC: CPMin = C1ad + MinVC
L1= INT((CPMin * C2ad) / (CPMin + C2ad))'Minimum End
L2= INT((CPMax * C2ad) / (CPMax + C2ad))'Maximum End
#w.textbox5, L1
#w.textbox6, L2
Else
If PS= 0 AND SP=1 then
print #w.textbox1, "!contents? MinVC"; 'Min VC
print #w.textbox2, "!contents? MaxVC"; 'Max VC
print #w.textbox7, "!contents? C1ad"; 'C1 Add
print #w.textbox8, "!contents? C2ad"; 'C2 Add
CSmn= INT((MinVC * C1ad) / (MinVC + C1ad))
CSmx= INT((MaxVC * C1ad) / (MaxVC + C1ad))
L1= CSmn + C1ad 'Minimum End
L2= CSmx + C2ad 'Maximum End
#w.textbox5, L1
#w.textbox6, L2
End if
End if
Gosub [UpdateLine]
'#w.textbox5, L1
'#w.textbox6, L2
Return
[b1p1]
#w.textbox7, "!contents? C1add";
C1add = C1add + 1
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
'L1=10: L2=30
'Gosub [UpdateLine]
Goto [Loop]
[b1m1]
#w.textbox7, "!contents? C1add";
if C1add-1 <=0 then Beep: Goto [Loop]
C1add = C1add - 1
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b1p5]
#w.textbox7, "!contents? C1add";
C1add = C1add + 5
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b1m5]
#w.textbox7, "!contents? C1add";
if C1add-5 <=0 then Beep: Goto [Loop]
C1add = C1add - 5
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b1p10]
#w.textbox7, "!contents? C1add";
C1add = C1add + 10
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b1m10]
#w.textbox7, "!contents? C1add";
if C1add-10 <=0 then Beep: Goto [Loop]
C1add = C1add - 10
#w.textbox7 C1add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2p1]
#w.textbox8, "!contents? C2add";
C2add = C2add + 1
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2m1]
#w.textbox8, "!contents? C2add";
if C2add-1 <=0 then Beep: Goto [Loop]
C2add = C2add - 1
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2p5]
#w.textbox8, "!contents? C2add";
C2add = C2add + 5
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2m5]
#w.textbox8, "!contents? C2add";
if C2add-5 <=0 then Beep: Goto [Loop]
C2add = C2add - 5
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2p10]
#w.textbox8, "!contents? C2add";
C2add = C2add + 10
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[b2m10]
#w.textbox8, "!contents? C2add";
if C2add-10 <=0 then Beep: Goto [Loop]
C2add = C2add - 10
#w.textbox8 C2add
GoSub [CalculateValueWeGet]
Goto [Loop]
[BeforUpdate1]
#w.textbox1, "!contents? Txx1$";
'notice "BeforUpdate 1"
Goto [Loop]
[BeforUpdate2]
#w.textbox2, "!contents? Txx2$";
'notice "BeforUpdate 2"
Goto [Loop]
[BeforUpdate3]
#w.textbox3, "!contents? Txx3";
'notice "BeforUpdate 3"
Goto [Loop]
[BeforUpdate4]
#w.textbox4, "!contents? Txx4";
'notice "BeforUpdate 4"
Goto [Loop]
[BeforUpdate5]
#w.textbox5, "!contents? Txx5$";
'notice "BeforUpdate 5"
Goto [Loop]
[BeforUpdate6]
#w.textbox6, "!contents? Txx6$";
'notice "BeforUpdate 6"
Goto [Loop]
[BeforUpdate7]
#w.textbox7, "!contents? Txx7$";
'notice "BeforUpdate 7"
Goto [Loop]
[BeforUpdate8]
#w.textbox8, "!contents? Txx8$";
'notice "BeforUpdate 8"
Goto [Loop]
'--------------------------
[a1]
#w.Cnet1 "value? setVal1$"
if setVal1$="set" then #w.Cnet1 "reset" Else if setVal1$="reset" then #w.Cnet1 "set"
Goto [Loop]
[a2]
#w.Cnet1 "value? setVal1$"
if setVal1$="set" then #w.Cnet1 "reset" Else if setVal1$="reset" then #w.Cnet1 "set"
Goto [Loop]
[b1]
#w.Cnet2 "value? setVal2$"
if setVal2$="set" then #w.Cnet2 "reset" Else if setVal2$="reset" then #w.Cnet2 "set"
Goto [Loop]
[b2]
#w.Cnet2 "value? setVal2$"
if setVal2$="set" then #w.Cnet2 "reset" Else if setVal2$="reset" then #w.Cnet2 "set"
Goto [Loop]
[quit]
close #w : END
'code Ends
Sarmed Nafi
A zip file (folder) contains the code and the necessary pictures for the program.
You can access this file at the URL:
https://groups.yahoo.com/neo/groups/lbb ... dapter.zip
You need to sign up to this LBB group to get access to file location.