allow spice multipliers in numbers (20u, 10k, 20p) in graph expressions

This commit is contained in:
Stefan Frederik 2022-09-22 21:12:40 +02:00
parent 3e2bc9f95e
commit 48d1b44220
6 changed files with 72 additions and 47 deletions

View File

@ -692,7 +692,7 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
const char *n;
char *endptr, *ntok_copy = NULL, *ntok_save, *ntok_ptr;
Stack1 stack1[STACKMAX];
double v, stack2[STACKMAX], tmp, integ, deriv, avg;
double stack2[STACKMAX], tmp, integ, deriv, avg;
int stackptr1 = 0, stackptr2 = 0;
SPICE_DATA *y = xctx->graph_values[xctx->graph_nvars]; /* custom plot data column */
SPICE_DATA *x = xctx->graph_values[sweep_idx];
@ -731,9 +731,9 @@ int plot_raw_custom_data(int sweep_idx, int first, int last, const char *expr)
else if(!strcmp(n, "deriv0()")) stack1[stackptr1++].i = DERIV0;
else if(!strcmp(n, "exch()")) stack1[stackptr1++].i = EXCH;
else if(!strcmp(n, "dup()")) stack1[stackptr1++].i = DUP;
else if( (v = strtod(n, &endptr)), !*endptr) {
else if( (strtod(n, &endptr)), endptr > n) {
stack1[stackptr1].i = NUMBER;
stack1[stackptr1++].d = v;
stack1[stackptr1++].d = atof_spice(n);
}
else {
idx = get_raw_index(n);

View File

@ -12,8 +12,8 @@ y1=-47
y2=50
divy=4
subdivy=4
x1=0.00819414
x2=0.00888885
x1=0.00824068
x2=0.00893539
divx=8
subdivx=1
dataset=0
@ -30,8 +30,8 @@ y1=0
y2=160
divy=4
subdivy=9
x1=0.00819414
x2=0.00888885
x1=0.00824068
x2=0.00893539
divx=8
subdivx=9
dataset=0
@ -41,15 +41,15 @@ unitx=m
color="8 7"
node="tcleval(\\"Xm1 power;vpp $\{path\}outi - i(v.$\{path\}vu) *\\"
\\"Average;vpp $\{path\}outi - i(v.$\{path\}vu) * 2e-4 ravg()\\")"
\\"Average;vpp $\{path\}outi - i(v.$\{path\}vu) * 200u ravg()\\")"
}
B 2 1520 -1130 2440 -830 {flags=graph
y1=-0.19
y2=160
divy=4
subdivy=9
x1=0.00819414
x2=0.00888885
x1=0.00824068
x2=0.00893539
divx=8
subdivx=9
dataset=0
@ -57,7 +57,7 @@ unitx=m
color="8 7"
node="tcleval(\\"Xm2 Power;$\{path\}outi vnn - i(v.$\{path\}vd) *\\"
\\"Average;$\{path\}outi vnn - i(v.$\{path\}vd) * 2e-4 ravg()\\")"
\\"Average;$\{path\}outi vnn - i(v.$\{path\}vd) * 200u ravg()\\")"
}
B 2 960 -960 1094 -897 {flags=image
alpha=0.7

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,5 @@
v {xschem version=3.0.0 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {}
V {}
@ -15,7 +16,7 @@ N 510 -430 510 -400 {
lab=mn}
N 510 -320 510 -260 {
lab=minus}
N 510 -550 510 -490 {
N 510 -580 510 -490 {
lab=pn}
N 510 -490 600 -490 {
lab=pn}
@ -23,14 +24,15 @@ N 510 -430 600 -430 {
lab=mn}
N 510 -260 510 -140 {
lab=minus}
C {iopin.sym} 510 -610 2 1 {name=p1 lab=plus}
N 510 -680 510 -640 {
lab=plus}
C {iopin.sym} 510 -680 2 1 {name=p1 lab=plus}
C {iopin.sym} 510 -120 2 1 {name=p2 lab=minus}
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
C {ammeter.sym} 510 -370 2 1 {name=Vm}
C {ammeter.sym} 510 -580 2 1 {name=Vp}
C {bsource.sym} 510 -460 2 0 {name=B1 VAR=I FUNC="pwl(V(pn,mn),
+ 0, 6.3,
+ 18, 5.7,
+ 0, 6.3,
+ 18, 5.7,
+ 18.3, 5.6,
+ 18.6, 5.4,
+ 18.9, 5.1,
@ -45,3 +47,8 @@ value=500000
footprint=1206
device=resistor
m=1}
C {res.sym} 510 -610 0 0 {name=R2
value=0.1
footprint=1206
device=resistor
m=1}

View File

@ -1,4 +1,5 @@
v {xschem version=3.0.0 file_version=1.2 }
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=subcircuit
format="@name @pinlist @symname R1=@R1 R2=@R2 Vmp=@Vmp Voc=@Voc m=@m"
@ -16,8 +17,8 @@ L 4 -10 5 10 5 {}
L 4 -20 -5 20 -5 {}
L 4 -15 -20 -5 -20 {}
L 4 -10 -25 -10 -15 {}
B 5 -2.5 -32.5 2.5 -27.5 {name=plus dir=inout pinnumber=1 propag=1 goto=1}
B 5 -2.5 27.5 2.5 32.5 {name=minus dir=inout pinnumber=2 goto=0}
B 5 -2.5 -32.5 2.5 -27.5 {name=plus dir=inout}
B 5 -2.5 27.5 2.5 32.5 {name=minus dir=inout}
P 4 7 -35 -30 -25 -20 -20 -25 -15 -10 -30 -15 -25 -20 -35 -30 {}
P 4 7 -35 -5 -25 5 -20 0 -15 15 -30 10 -25 5 -35 -5 {}
T {@name} 15 -28.75 0 0 0.2 0.2 {}

View File

@ -34,11 +34,11 @@ L 4 75 -775 85 -775 {}
L 4 75 -815 85 -815 {}
L 4 75 -855 85 -855 {}
B 2 1270 -740 1690 -570 {flags=graph
y1 = -3.3e-05
y1 = -0.00013
y2 = 21
divy = 6
subdivy=1
x1=-9.66825e-10
x1=1e-11
x2=0.0006
divx=8
node="panel
@ -49,7 +49,7 @@ y1 = 0.0012
y2 = 6.3
divy = 4
subdivy=1
x1=-9.66825e-10
x1=1e-11
x2=0.0006
divx=8
unitx=m
@ -58,17 +58,19 @@ node="i(vpanel)
i(vled)"}
B 2 1270 -930 1690 -740 {flags=graph
y1 = -4.1e-08
y2 = 110
y2 = 100
divy = 5
subdivy=1
x1=-9.66825e-10
x1=1e-11
x2=0.0006
divx=9
unitx=m subdivx=4
color="7 4"
color="7 4 6"
node="\\"Panel power; i(vpanel) v(panel) *\\"
\\"Led power; i(vled) v(led) *\\""}
\\"Led power; i(vled) v(led) *\\"
\\"R.Avg.Pan. Pwr; i(vpanel) v(panel) * 20u ravg()\\""
hilight_wave=-1}
B 18 85 -840 340 -655 {}
A 5 340 -840 5.590169943749475 243.434948822922 360 {fill=true}
P 7 6 415 -655 360 -811.25 355 -825 342.5 -840 330 -845 85 -855 {}
@ -107,7 +109,7 @@ N 860 -650 900 -650 {lab=SW}
N 860 -650 860 -530 {lab=SW}
N 830 -650 860 -650 {lab=SW}
N 860 -250 1050 -250 {lab=0}
N 570 -250 860 -250 {lab=0}
N 670 -250 860 -250 {lab=0}
N 1040 -650 1050 -650 {lab=VO}
N 1140 -480 1180 -480 {lab=LED}
N 1140 -480 1140 -350 {lab=LED}
@ -117,28 +119,37 @@ N 960 -650 980 -650 { lab=#net3}
N 280 -530 280 -480 {
lab=#net4}
N 280 -420 280 -370 {lab=0}
N 415 -470 415 -420 {lab=0}
N 280 -530 320 -530 {
lab=#net4}
N 380 -530 570 -530 {
lab=PANEL}
N 610 -870 800 -870 {
lab=CTRL1}
N 800 -870 800 -690 {
lab=CTRL1}
N 380 -530 450 -530 {
lab=#net5}
N 510 -530 570 -530 {
lab=PANEL}
N 420 -390 420 -370 {
lab=0}
N 420 -470 420 -450 {
lab=#net6}
N 170 -450 230 -450 {
lab=#net7}
N 170 -390 170 -370 {
lab=0}
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
C {code_shown.sym} 190 -240 0 0 {name=CONTROL value=".control
save v(panel) v(sw) v(led) i(vpanel)
save all
tran 1u 600u uic
write solar_panel.raw
.endc
* .dc VP 0 21 0.01
" net_name=true}
C {code.sym} 20 -230 0 0 {name=MODELS value=".MODEL DIODE D(IS=1.139e-08 RS=0.99 CJO=9.3e-12 VJ=1.6 M=0.411 BV=30 EG=0.7 )
.MODEL swmod SW(VT=0.5 VH=0.01 RON=0.01 ROFF=10000000)
" net_name=true}
C {lab_pin.sym} 570 -530 0 1 {name=l4 sig_type=std_logic lab=PANEL net_name=true}
C {lab_pin.sym} 570 -250 0 0 {name=l6 sig_type=std_logic lab=0 net_name=true}
C {lab_pin.sym} 670 -250 0 0 {name=l6 sig_type=std_logic lab=0 net_name=true}
C {ammeter.sym} 1110 -480 3 0 {name=Vled net_name=true}
C {ind.sym} 930 -650 3 1 {name=L1
m=1
@ -154,7 +165,9 @@ value=10u
footprint=1206
device="ceramic capacitor" net_name=true}
C {lab_pin.sym} 1050 -440 0 1 {name=l10 sig_type=std_logic lab=VO net_name=true}
C {vsource.sym} 610 -780 0 0 {name=Vset1 value="pulse 0 1 0 1n 1n 1.7u 5u" net_name=true}
C {vsource.sym} 610 -780 0 0 {name=Vset1
value="dc 0 pulse 0 1 0 1n 1n 1.7u 5u"
net_name=true}
C {lab_pin.sym} 610 -750 0 0 {name=l13 sig_type=std_logic lab=0 net_name=true}
C {lab_pin.sym} 570 -650 0 0 {name=l2 sig_type=std_logic lab=PANEL net_name=true}
C {ammeter.sym} 1010 -650 3 0 {name=Vind net_name=true}
@ -194,13 +207,17 @@ xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]
}
C {pv_ngspice.sym} 280 -450 0 0 {name=X1 m=1 roff=1e9}
C {lab_pin.sym} 280 -370 0 0 {name=l12 sig_type=std_logic lab=0 net_name=true}
C {capa.sym} 415 -500 0 0 {name=C11
C {capa.sym} 420 -500 0 0 {name=C11
m=1
value=10u
footprint=1206
device="ceramic capacitor" net_name=true}
C {lab_pin.sym} 415 -420 0 0 {name=l90 sig_type=std_logic lab=0 net_name=true}
C {lab_pin.sym} 420 -370 0 0 {name=l90 sig_type=std_logic lab=0 net_name=true}
C {ammeter.sym} 350 -530 3 1 {name=Vpanel net_name=true}
C {diode_ngspice.sym} 860 -500 2 0 {name=X2 m=1 Roff=1e9 Ron=0.1}
C {switch_ngspice.sym} 800 -650 1 0 {name=S1 model=swmod}
C {lab_pin.sym} 780 -690 0 0 {name=l3 sig_type=std_logic lab=0 net_name=true}
C {ammeter.sym} 480 -530 3 1 {name=Vpanel1 net_name=true}
C {ammeter.sym} 420 -420 0 0 {name=Vcap net_name=true}
C {vsource.sym} 170 -420 0 0 {name=Vfade value=1}
C {lab_pin.sym} 170 -370 0 0 {name=l12 sig_type=std_logic lab=0 net_name=true}