Post Reply 
Smith Chart program
06-09-2017, 04:52 PM
Post: #1
Smith Chart program
I still have not really figured out how to create a source file, and I currently do not have a computer with the simulator running on it, so I typed this into Word. There may be typos and some odd characters.

Anyway, this program displays a Smith chart and if you tap a point will display many of the relevant data about that point, I.e., Z, X, Gamma, Return Loss, VSWR and Q.

Code:

DISPSMITH(F);

EXPORT SMITH()
BEGIN

LOCAL pp,r,p2,cw,cb,x1,y1,m1;
LOCAL ff,cc,vv,ll,x2,y2;
LOCAL cr,lc,qq,zz,xx;

STARTAPP("Function");

x2:=1.2;
y2:=0,0;
cw:=RGB(255,255,255);
cb:=RGB(0,0,0);
cr:=RGB(255,0,0);
Xmin:=-1.4521;
Xmax:= 1.4521;
Ymin:=-1.0;
Ymax:=1.0;
ff = 1.0; // GHz

DISPSMITH(ff);

WHILE 1 DO // forever

L1:= WAIT(-1);
m1:= B→R(L1(1)); //Note: May need editing!

IF m1=3 THEN

x1:= B→R(L1(2)); //Note: May need editing!
y1:= B→R(L1(3)); //Note: May need editing!

L2 := PX→C(x1,y1); //Note: May need editing!

IF L2(1) > -1.4 AND L2(1) < -0.4 THEN
IF L2(2) < 1 AND L2(2) > 0.6 THEN
BREAK;  // Tapped "QUIT"
END;
END;

IF L2(1) > 0.7 AND L2(1) < 1.4 THEN
IF L2(2) < 1 AND L2(2) > 0.6 THEN
INPUT(ff, "ENTER FREQUENCY", "FREQUENCY", "IN GHZ");
DISPSMITH(ff);
END;
END;

Z1:= L2(1)+i*L2(2); // Reflection Coef.
Z2:= 50*((1+Z1)/(1-Z1)); // Impedance

IF ABS(Z1) ≥ 1 THEN // May need Editing
CONTINUE; // Make sure we are inside the positive Z Chart
END;

// Undraw, then draw the cursor
LINE(x2+0.05,y2,x2-.05,y2,cw);
LINE(x2,y2+.05,x2,y2-.05,cw);
x2:=L2(1);
y2:=L2(2);
LINE(x2+0.05,y2,x2-.05,y2,cr);
LINE(x2,y2+.05,x2,y2-.05,cr);

vv:= (1+ABS(Z1))/(1-ABS(Z1)); //VSWR
qq:= ABS(IM(Z2)/RE(Z2)); // Q

zz:= ABS(RE(Z2));

// Autoscale May need editing
CASE
IF zz≥1000 THEN L2(3):=STRING(zz,2,0); END;
IF zz≥100 THEN L2(3):=STRING(zz,2,1); END;
IF zz≥10 THEN L2(3):=STRING(zz,2,1); END;
IF zz≥1 THEN L2(3):=STRING(zz,2,2); END;
DEFAULT L2(3):=STRING(zz,2,2); 
END;

RECT(-1.4,-0.55,-0.75,-0.67);
TEXTOUT("R="+L2(3)+" Ω ", -1.4,-0.55,0,cb,100,cw); // 'Ω' is unicode 2126

IF ABS(Z1) ≠ 0.0 THEN // needs editing for not equal
ll:= 10*LOG(ABS(Z1)^2); // return loss
ELSE
ll:= -99;
END;

L2(3):= STRING(ll,2,2);
RECT(-1.4,-0.85,-0.60, -0.97);
TEXTOUT("RL="+L2(3)+ " dB",-1.4,-0.85,0,cb,100,cw);

xx:= ABS(IM(Z2));

// Autoscale May need editing
CASE
IF xx≥1000 THEN L2(3):=STRING(xx,2,0); END;
IF xx≥100 THEN L2(3):=STRING(xx,2,1); END;
IF xx≥10 THEN L2(3):=STRING(xx,2,1); END;
IF xx≥1 THEN L2(3):=STRING(xx,2,2); END;
DEFAULT L2(3):=STRING(xx,2,2); 
END;

RECT(-1.4,-0.70,-0.70,-0.82);
IF(IM(Z2) ≥ 0) THEN // Needs to be edited to greater than or equal
L2(4):= " j";
ELSE
L2(4):= "-j";
END

TEXTOUT("X="+L2(4)+L2(3)+" Ω", -1.4,-0.70,0,cb,100,cw); // 'Ω' is unicode 2126

RECT(-1.4,-1.0,-0.63,-1.12);
IF y2 ≥ 0.0 THEN
lc:=y2/(2*π*ff);
L2(3) :=STRING(lc,2,3);
TEXTOUT(“L=”+L2(3)+”nH”,-1.4,-1.0,0,cb,100,cw);
ELSE
Lc:=ABS(y2)*2* π*ff;
L2(3) :=STRING(lc,2,3);
TEXTOUT(“C=”+L2(3)+”pF”,-1.4,-1.0,0,cb,100,cw);
END;

RECT(0.8, -0.70,1.4,-0,82);
L2(3):=STRING(qq,2,2);
TEXTOUT(“Q=”+L2(3),0.8,-0.7,0,cb,100,cw);

RECT(0.8,-0.85,1.4,-0.97);
L2(3):=STRING(ABS(Z1),2,2);
TEXTOUT(“Γ=”+L2(3), 0.8,-0.85,0,cb,100,cw); // may need editing “Γ” is Unicode 0393

RECT(0.6,-1.0,1.4,-1.12);
L2(3):=STRING(vv,2,2);
TEXTOUT(“VSWR=”+L2(3)+”:1”,0.6,-1.0,0,cb,100,cw);
END;
END; // IF m1
END; // WHILE 1
END; // SMITH

DISPSMITH(f)
BEGIN
LOCAL pp, r, cl;
RECT();
L9:=C→PX(0,0);
pp:=320/(Xmax-Xmin);

LINE_P(L9(1)-pp,L9(2),L9(1)+pp,L9(2));
ARC_P(L9(1),L9(2),pp);
r:=pp/(1+50/50);
ARC_P(L9(1)+pp-r,L9(2),r);

r:=pp/(1+100/50);
ARC_P(L9(1)+pp-r,L9(2),r);

r:=pp/(1+25/50);
ARC_P(L9(1)+pp-r,L9(2),r);

r:=pp/(1+12.5/50);
ARC_P(L9(1)+pp-r,L9(2),r);

r:=pp/(50/50);
ARC_P(L9(1)+pp,L9(2)-r,r,π,3*π/2);
ARC_P(L9(1)+pp,L9(2)+r,r,π/2,π);

r:=pp/(25/50);
ARC_P(L9(1)+pp,L9(2)-r,r,3*π/2-0.95,3*π/2);
ARC_P(L9(1)+pp,L9(2)+r,r,π/2,π/2+.95);

r:=pp/(75/50);
ARC_P(L9(1)+pp,L9(2)-r,r,3*π/2-2,3*π/2);
ARC_P(L9(1)+pp,L9(2)+r,r,π/2,π/2+2);

r:=pp/(12.5/50);
ARC_P(L9(1)+pp,L9(2)-r,r,3*π/2-0.5,3*π/2);
ARC_P(L9(1)+pp,L9(2)+r,r,π/2,π/2+.5);

Cl:=RGB(0,0,255);
TEXTOUT(“50”,0,0,1,cl);
TEXTOUT(“25”,-0.33333,0,1,cl);
TEXTOUT(“12.5”,-0.80,0,1,cl);
TEXTOUT(“100”,0.33333,0,1,cl);

TEXTOUT(“50”,-0.9,1,1,cl);
TEXTOUT(“25”,-0.55,-0.75,1,cl);
TEXTOUT(“12.5”,-0.90,-0.30,1,cl);
TEXTOUT(“75”,0.4,-0.85,1,cl);

TEXTOUT(“QUIT”,-1.4,0.9);
L2(3) = STRING(f,2,3);
TEXTOUT(L2(3)+” GHz”,0.8,0.9);

END; // DISPSMITH
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
Smith Chart program - KeithB - 06-09-2017 04:52 PM
RE: Smith Chart program - Freire - 06-09-2017, 05:10 PM
RE: Smith Chart program - grsbanks - 06-10-2017, 11:21 AM
RE: Smith Chart program - KeithB - 06-12-2017, 06:57 PM
RE: Smith Chart program - KeithB - 06-15-2017, 02:51 PM
RE: Smith Chart program - compsystems - 06-18-2017, 12:13 PM
RE: Smith Chart program - dmusic - 12-25-2017, 06:22 PM



User(s) browsing this thread: 1 Guest(s)