allow tabs and newlines in graph expressions in addition to spaces; updated example schematics

This commit is contained in:
Stefan Frederik 2022-09-23 02:18:51 +02:00
parent 48d1b44220
commit 314acbabda
9 changed files with 388 additions and 130 deletions

View File

@ -879,7 +879,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
} else {
my_strdup2(1506, &express, ntok);
}
if(strstr(express, " ")) {
if(strpbrk(express, " \n\t")) {
/* just probe a single point to get the index. custom data column already calculated */
j = calc_custom_data_yrange(sweep_idx, express, gr);
} else {

View File

@ -2555,7 +2555,7 @@ int find_closest_wave(int i, Graph_ctx *gr)
} else {
my_strdup2(1192, &express, ntok);
}
if(strstr(express, " ")) {
if(strpbrk(express, " \n\t")) {
expression = 1;
}
}
@ -2719,7 +2719,7 @@ void draw_graph(int i, const int flags, Graph_ctx *gr)
} else {
my_strdup2(473, &express, ntok);
}
if(strstr(express, " ")) {
if(strpbrk(express, " \n\t")) {
expression = 1;
}
}

View File

@ -1,8 +1,9 @@
v {xschem version=2.9.8 file_version=1.2}
v {xschem version=3.1.0 file_version=1.2
}
G {}
K {type=isource
format="@name @pinlist CUR=' @CUR ' MIN=' @MIN ' MAX=' @MAX ' "
template="name=G1 CUR=cos(V(IN)) MIN=-2 MAX=2"}
format="@name @pinlist CUR=' @CUR '"
template="name=G1 CUR=cos(V(IN))"}
V {}
S {}
E {}
@ -17,8 +18,6 @@ B 5 -2.5 -32.5 2.5 -27.5 {name=p dir=inout}
B 5 -2.5 27.5 2.5 32.5 {name=m dir=inout}
A 4 0 0 15 270 360 {}
T {@name} 20 -17.5 0 0 0.2 0.2 {}
T {@CUR
MIN=@MIN
MAX=@MAX} 20 0 0 0 0.2 0.2 {}
T {@CUR} 20 0 0 0 0.2 0.2 {}
T {@#0:net_name} 5 -42.5 0 0 0.15 0.15 {layer=15}
T {@#1:net_name} 5 32.5 0 0 0.15 0.15 {layer=15}

View File

@ -92,8 +92,8 @@ ypos2=36.4765
divy=5
subdivy=1
unity=1
x1=0.000509817
x2=0.000687424
x1=1e-09
x2=0.002
divx=5
subdivx=1
node="out
@ -111,8 +111,8 @@ ypos2=7.14491
divy=5
subdivy=1
unity=1
x1=0.000509817
x2=0.000687424
x1=1e-09
x2=0.002
divx=5
subdivx=1
@ -127,15 +127,15 @@ drived
ref"
}
B 2 1060 -990 2040 -680 {flags=graph
y1=-0.11
y1=-0.1
y2=11
ypos1=-3.90706
ypos2=14.7089
divy=5
subdivy=1
unity=1
x1=0.000509817
x2=0.000687424
x1=1e-09
x2=0.002
divx=5
subdivx=1
@ -152,15 +152,15 @@ B 2 600 -780 996 -635 {flags=image,unscaled
alpha=0.6
image_data=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}
B 2 1060 -1310 2040 -1000 {flags=graph
y1=-13.9952
y2=248.859
y1=1.84926
y2=186.399
ypos1=2.19058
ypos2=36.4765
divy=5
subdivy=1
unity=1
x1=0.000509817
x2=0.000687424
x1=1e-09
x2=0.002
divx=5
subdivx=1

View File

@ -15,14 +15,12 @@ C {lab_pin.sym} 180 -260 0 1 {name=l6 sig_type=std_logic lab=IPLUS}
C {lab_pin.sym} 180 -210 0 1 {name=l1 sig_type=std_logic lab=IMINUS}
C {lab_pin.sym} 450 -240 0 0 {name=l2 sig_type=std_logic lab=IOUT}
C {lab_pin.sym} 450 -120 0 0 {name=p35 lab=0}
C {bsource.sym} 450 -150 0 1 {name=B1 VAR=V FUNC="\{OFFSET + AMPLITUDE/2*(tanh(V(IPLUS,IMINUS)*300))\}"
C {bsource.sym} 450 -150 0 1 {name=B1 VAR=V FUNC="\{OFFSET + AMPLITUDE/2*(tanh(V(IPLUS,IMINUS)*GAIN*2/AMPLITUDE))\}"
}
C {title.sym} 160 -30 0 0 {name=l3 author="Stefan Schippers"}
C {res.sym} 570 -240 1 0 {name=R1
value=1k
footprint=1206
device=resistor
value=ROUT
m=1}
C {parax_cap.sym} 630 -230 0 0 {name=C3 gnd=0 value=8f m=1}
C {parax_cap.sym} 630 -230 0 0 {name=C3 gnd=0 value=COUT m=1}
C {vsource.sym} 150 -260 1 0 {name=V1 value=0}
C {vsource.sym} 150 -210 1 0 {name=V2 value=0}

View File

@ -1,8 +1,9 @@
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 OFFSET=@OFFSET AMPLITUDE=@AMPLITUDE"
template="name=x1 OFFSET=0 AMPLITUDE=5"
format="@name @pinlist @symname OFFSET=@OFFSET AMPLITUDE=@AMPLITUDE GAIN=@GAIN ROUT=@ROUT COUT=@COUT"
template="name=x1 OFFSET=0 AMPLITUDE=5 GAIN=100 ROUT=1000 COUT=1p"
}
V {}
S {}
@ -13,11 +14,40 @@ L 4 40 0 60 0 {}
L 4 -60 30 -40 30 {}
L 4 -40 -50 40 0 {}
L 4 -40 50 40 0 {}
L 4 17.5 45 37.5 45 {}
L 4 37.5 15 37.5 45 {}
L 4 37.5 15 57.5 15 {}
L 4 17.5 30 57.5 30 {dash=3}
L 4 37.5 45 55 45 {dash=3}
L 6 53.75 17.5 53.75 42.5 {}
L 6 52.5 17.5 53.75 17.5 {}
L 6 52.5 17.5 53.75 15 {}
L 6 53.75 15 55 17.5 {}
L 6 53.75 17.5 55 17.5 {}
L 6 53.75 42.5 55 42.5 {}
L 6 53.75 45 55 42.5 {}
L 6 52.5 42.5 53.75 45 {}
L 6 52.5 42.5 53.75 42.5 {}
L 7 10 40 60 40 {}
L 8 43.75 32.5 43.75 37.5 {}
L 8 42.5 32.5 43.75 32.5 {}
L 8 42.5 32.5 43.75 30 {}
L 8 43.75 30 45 32.5 {}
L 8 43.75 32.5 45 32.5 {}
L 8 43.75 37.5 45 37.5 {}
L 8 43.75 40 45 37.5 {}
L 8 42.5 37.5 43.75 40 {}
L 8 42.5 37.5 43.75 37.5 {}
B 5 -62.5 -32.5 -57.5 -27.5 {name=PLUS dir=in }
B 5 57.5 -2.5 62.5 2.5 {name=OUT dir=out }
B 5 -62.5 27.5 -57.5 32.5 {name=MINUS dir=in }
T {@symname} -32 44 0 0 0.3 0.3 {}
T {@name} -10 -48.25 0 0 0.2 0.2 {}
T {@name} -20 -48.25 0 0 0.2 0.2 {}
T {PLUS} -38.75 -30.25 0 0 0.2 0.2 {}
T {OUT} 28.75 -5.25 0 1 0.2 0.2 {}
T {MINUS} -38.75 18.5 0 0 0.2 0.2 {}
T {GAIN=@GAIN
ROUT=@ROUT
COUT=@COUT} 28 -46 0 0 0.2 0.2 {}
T {@OFFSET} 57.5 30 0 0 0.15 0.15 {layer=8}
T {@AMPLITUDE} 55 18.75 0 0 0.15 0.15 {layer=6}

View File

@ -5,50 +5,184 @@ K {}
V {}
S {}
E {}
T {Voc = 21
B 2 760 -620 1166 -170 {flags=image,unscaled
alpha=0.8
image=/home/schippes/x/1.png
image_data="
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"
}
T {Voc = 22
Wp = 100W
Vmp = 18.2} 610 -370 0 0 0.4 0.4 {}
N 510 -340 510 -320 {
lab=minus}
N 510 -140 510 -120 {
Vmp = 17.5} 610 -370 0 0 0.4 0.4 {}
N 510 -340 510 -120 {
lab=minus}
N 510 -430 510 -400 {
lab=mn}
N 510 -320 510 -260 {
lab=minus}
N 510 -580 510 -490 {
N 280 -360 300 -360 {
lab=fade}
N 510 -560 510 -490 {
lab=pn}
N 510 -490 600 -490 {
lab=pn}
N 510 -430 600 -430 {
lab=mn}
N 510 -260 510 -140 {
lab=minus}
N 510 -680 510 -640 {
N 510 -680 510 -620 {
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 {bsource.sym} 510 -460 2 0 {name=B1 VAR=I FUNC="pwl(V(pn,mn),
+ 0, 6.3,
+ 18, 5.7,
+ 18.3, 5.6,
+ 18.6, 5.4,
+ 18.9, 5.1,
+ 19.5, 4.0,
+ 21, 0,
+ 22, 0)"
}
C {lab_pin.sym} 510 -510 2 0 {name=l2 sig_type=std_logic lab=pn}
C {lab_pin.sym} 510 -410 2 0 {name=l3 sig_type=std_logic lab=mn}
C {res.sym} 600 -460 0 0 {name=R1
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}
C {isource_arith.sym} 510 -460 2 0 {name=G1
CUR="v(f) * 6.35 * (1 - exp( (v(pn,mn)
+ -19 - v(f)*3 ) * .5) -
+ 0.002 * (v(pn,mn) - 19 - v(f)*3))"}
C {ipin.sym} 280 -360 2 1 {name=p2 lab=fade}
C {ammeter.sym} 330 -360 3 0 {name=Vf}
C {lab_pin.sym} 360 -360 2 0 {name=l3 sig_type=std_logic lab=f}
C {ammeter.sym} 510 -590 2 1 {name=Vp}

View File

@ -2,12 +2,11 @@ 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"
function1="U H 0 m"
function0="L U 1 m"
format="@name @pinlist @symname m=@m"
template="name=X1 m=1 R1=0.1 R2=10 Vmp=17 Voc=21"}
template="name=X1 m=1"}
V {}
S {}
E {}
@ -19,9 +18,11 @@ 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}
B 5 -2.5 27.5 2.5 32.5 {name=minus dir=inout}
B 5 -42.5 -2.5 -37.5 2.5 {name=fade dir=in}
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 {}
T {Voc = 21
T {Voc = 22
Wp = 100W
Vmp = 18.2} 30 -10 0 0 0.2 0.2 {}
Vmp = 17.5} 30 -10 0 0 0.2 0.2 {}
T {m=@m} -5 16.25 0 1 0.2 0.2 {}

View File

@ -33,51 +33,107 @@ L 4 75 -735 85 -735 {}
L 4 75 -775 85 -775 {}
L 4 75 -815 85 -815 {}
L 4 75 -855 85 -855 {}
L 4 610 -1140 630 -1180 {}
L 4 630 -1180 650 -1140 {}
L 4 650 -1140 670 -1180 {}
L 4 670 -1180 690 -1140 {}
L 4 690 -1140 710 -1180 {}
L 4 710 -1180 730 -1140 {}
L 4 1050 -1080 1060 -1080 {}
L 4 1060 -1120 1060 -1080 {}
L 4 1060 -1120 1070 -1120 {}
L 4 1070 -1120 1070 -1080 {}
L 4 1070 -1080 1080 -1080 {}
L 4 1080 -1120 1080 -1080 {}
L 4 1080 -1120 1090 -1120 {}
L 4 1090 -1120 1090 -1080 {}
L 4 1090 -1080 1100 -1080 {}
L 4 1100 -1120 1100 -1080 {}
L 4 1100 -1120 1110 -1120 {}
L 4 1110 -1120 1110 -1080 {}
L 4 1110 -1080 1120 -1080 {}
L 4 1120 -1120 1120 -1080 {}
L 4 1120 -1120 1130 -1120 {}
B 2 1270 -740 1690 -570 {flags=graph
y1 = -0.00013
y2 = 21
y1 = -0.00011
y2 = 22
divy = 6
subdivy=1
x1=1e-11
x2=0.0006
x1=5e-10
x2=0.001
divx=8
node="panel
led" unitx=m
color="7 4"}
B 2 1270 -570 1690 -400 {flags=graph
y1 = 0.0012
y2 = 6.3
y1 = -0.003
y2 = 6.7
divy = 4
subdivy=1
x1=1e-11
x2=0.0006
x1=5e-10
x2=0.001
divx=8
unitx=m
color="7 4"
color="7 4 6"
node="i(vpanel)
i(vled)"}
i(vled)
\\"R.Avg. I(vpanel); i(vpanel) 20u ravg()\\""}
B 2 1270 -930 1690 -740 {flags=graph
y1 = -4.1e-08
y2 = 100
y1 = -0.064
y2 = 110
divy = 5
subdivy=1
x1=1e-11
x2=0.0006
x1=5e-10
x2=0.001
divx=9
unitx=m subdivx=4
color="7 4 6"
color="7 4 6 10"
node="\\"Panel power; i(vpanel) v(panel) *\\"
\\"Led power; i(vled) v(led) *\\"
\\"R.Avg.Pan. Pwr; i(vpanel) v(panel) * 20u ravg()\\""
\\"R.Avg.Pan. Pwr; i(vpanel) v(panel) * 20u ravg()\\"
\\"SUN %; sun 100 *\\""
hilight_wave=-1}
B 2 1270 -1120 1690 -930 {flags=graph
y1 = 0
y2 = 1
divy = 5
subdivy=1
x1=5e-10
x2=0.001
divx=9
unitx=u subdivx=4
color="14 7"
node="triang
level"
hilight_wave=-1
digital=0
ypos1=0.00261891
ypos2=0.51596}
B 2 1270 -1320 1690 -1130 {flags=graph
y1 = 0
y2 = 1
divy = 5
subdivy=1
x1=5e-10
x2=0.001
divx=9
unitx=u subdivx=4
hilight_wave=-1
digital=0
ypos1=0.00261891
ypos2=0.51596
color=8
node="\\"CTRL1 Duty cycle; ctrl1 20u ravg()\\""}
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 {}
T {2x10 1W white LED} 1230 -340 0 0 0.4 0.4 {layer=8}
T {2xseries 1W white LEDs} 1250 -230 0 0 0.4 0.4 {}
T {Select one or more graphs (and no other objects)
and use arrow keys to zoom / pan waveforms} 1190 -1010 0 0 0.3 0.3 {}
T {2.5} 115 -635 0 0 0.2 0.2 {}
T {5.0} 155 -635 0 0 0.2 0.2 {}
T {7.5} 195 -635 0 0 0.2 0.2 {}
@ -96,6 +152,10 @@ T {V} 430 -645 0 0 0.4 0.4 {}
T {I} 60 -900 0 0 0.4 0.4 {}
T {SOLAR PANEL} 165 -935 0 0 0.4 0.4 {}
T {Maximum Power} 327.5 -860 0 0 0.2 0.2 {layer=8}
T {set between 0 and 1
to simulate
sun radiation
level} 30 -440 0 0 0.2 0.2 {}
N 1050 -250 1140 -250 {lab=0}
N 1140 -290 1140 -250 {lab=0}
N 680 -650 770 -650 {lab=#net1}
@ -104,7 +164,6 @@ N 1050 -480 1050 -350 {lab=VO}
N 1050 -290 1050 -250 {lab=0}
N 570 -650 620 -650 {lab=PANEL}
N 1050 -650 1050 -480 {lab=VO}
N 610 -870 610 -810 {lab=CTRL1}
N 860 -650 900 -650 {lab=SW}
N 860 -650 860 -530 {lab=SW}
N 830 -650 860 -650 {lab=SW}
@ -116,31 +175,55 @@ N 1140 -480 1140 -350 {lab=LED}
N 860 -370 860 -250 {lab=0}
N 860 -470 860 -430 { lab=#net2}
N 960 -650 980 -650 { lab=#net3}
N 280 -530 280 -480 {
N 380 -530 380 -480 {
lab=#net4}
N 280 -420 280 -370 {lab=0}
N 280 -530 320 -530 {
N 380 -420 380 -370 {lab=0}
N 380 -530 420 -530 {
lab=#net4}
N 610 -870 800 -870 {
N 800 -760 800 -690 {
lab=CTRL1}
N 800 -870 800 -690 {
lab=CTRL1}
N 380 -530 450 -530 {
N 480 -530 550 -530 {
lab=#net5}
N 510 -530 570 -530 {
N 610 -530 670 -530 {
lab=PANEL}
N 420 -390 420 -370 {
N 520 -390 520 -370 {
lab=0}
N 420 -470 420 -450 {
N 520 -470 520 -450 {
lab=#net6}
N 170 -450 230 -450 {
lab=#net7}
N 170 -390 170 -370 {
N 180 -450 340 -450 {
lab=SUN}
N 180 -360 180 -340 {
lab=0}
N 610 -1050 610 -1030 {
lab=0}
N 610 -1120 610 -1110 {
lab=TRIANG}
N 610 -1120 770 -1120 {
lab=TRIANG}
N 720 -910 830 -910 {
lab=LEVEL}
N 550 -880 550 -840 {
lab=REF}
N 550 -880 600 -880 {
lab=REF}
N 550 -940 600 -940 {
lab=LED}
N 1010 -1040 1060 -1040 {
lab=CTRL1}
N 180 -450 180 -420 {
lab=SUN}
N 830 -1010 830 -910 {
lab=LEVEL}
N 830 -1010 890 -1010 {
lab=LEVEL}
N 770 -1120 770 -1070 {
lab=TRIANG}
N 770 -1070 890 -1070 {
lab=TRIANG}
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 all
tran 1u 600u uic
tran .05u 1m uic
write solar_panel.raw
.endc
@ -148,28 +231,23 @@ write solar_panel.raw
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} 670 -250 0 0 {name=l6 sig_type=std_logic lab=0 net_name=true}
C {lab_pin.sym} 670 -530 0 1 {name=l4 lab=PANEL }
C {lab_pin.sym} 670 -250 0 0 {name=l6 lab=0 }
C {ammeter.sym} 1110 -480 3 0 {name=Vled net_name=true}
C {ind.sym} 930 -650 3 1 {name=L1
m=1
value=40u
footprint=1206
device=inductor net_name=true}
C {lab_pin.sym} 1180 -480 0 1 {name=l7 sig_type=std_logic lab=LED net_name=true}
C {lab_pin.sym} 610 -870 0 0 {name=l8 sig_type=std_logic lab=CTRL1 net_name=true}
C {lab_pin.sym} 860 -590 0 1 {name=l9 sig_type=std_logic lab=SW net_name=true}
C {lab_pin.sym} 1180 -480 0 1 {name=l7 lab=LED }
C {lab_pin.sym} 860 -590 0 1 {name=l9 lab=SW }
C {capa.sym} 1050 -320 0 0 {name=C1
m=1
value=10u
value=1u
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="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 {lab_pin.sym} 1050 -440 0 1 {name=l10 lab=VO }
C {lab_pin.sym} 570 -650 0 0 {name=l2 lab=PANEL }
C {ammeter.sym} 1010 -650 3 0 {name=Vind net_name=true}
C {launcher.sym} 660 -110 0 0 {name=h2
descr="Simulate"
@ -196,28 +274,46 @@ C {launcher.sym} 660 -170 0 0 {name=h1
descr="Simulate + gaw reload"
tclcommand="set sim(spice,default) 1; set sim(spice,1,fg) 1; set sim(spice,1,st) 0;xschem netlist; xschem simulate; gaw_cmd reload_all" net_name=true}
C {spice_probe.sym} 1160 -480 0 0 {name=p1 analysis=tran}
C {spice_probe.sym} 570 -530 0 0 {name=p2 analysis=tran}
C {spice_probe.sym} 670 -530 0 0 {name=p2 analysis=tran}
C {spice_probe.sym} 860 -550 0 1 {name=p3 analysis=tran}
C {launcher.sym} 1200 -1050 0 0 {name=h3
descr="Select arrow and
Ctrl-Left-Click to load/unload waveforms"
C {launcher.sym} 1080 -1180 0 0 {name=h3
descr="Reload Waves"
tclcommand="
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw tran
"
}
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} 420 -500 0 0 {name=C11
C {pv_ngspice.sym} 380 -450 0 0 {name=X1 m=1}
C {lab_pin.sym} 380 -370 0 0 {name=l12 lab=0 }
C {capa.sym} 520 -500 0 0 {name=C11
m=1
value=10u
value=1u
footprint=1206
device="ceramic capacitor" 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 {lab_pin.sym} 520 -370 0 0 {name=l90 lab=0 }
C {ammeter.sym} 450 -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}
C {lab_pin.sym} 780 -690 0 0 {name=l3 lab=0 }
C {ammeter.sym} 580 -530 3 1 {name=Vpanel1 net_name=true}
C {ammeter.sym} 520 -420 0 0 {name=Vcap net_name=true}
C {vsource.sym} 180 -390 0 0 {name=Vfade value="pwl 0 1 1m 0"}
C {lab_pin.sym} 180 -340 0 0 {name=l5 lab=0 }
C {ngspice_get_expr.sym} 1160 -360 0 0 {name=r29
node="[format %.4g [expr \{[ngspice::get_voltage led] * [ngspice::get_current vled]\}]] W"
descr = power
}
C {vsource.sym} 610 -1080 0 0 {name=Vtriang value="pulse 0 1 0 2u 2u 1f 4u"}
C {lab_pin.sym} 610 -1030 0 0 {name=l11 lab=0 }
C {lab_pin.sym} 770 -1120 0 1 {name=l14
lab=TRIANG }
C {vsource.sym} 550 -810 0 0 {name=Vref value=7}
C {lab_pin.sym} 550 -780 0 0 {name=l17 lab=0 }
C {lab_pin.sym} 800 -760 0 0 {name=l8 lab=CTRL1 }
C {comp_ngspice.sym} 660 -910 0 0 {name=x3 OFFSET=0.5 AMPLITUDE=1 ROUT=10k COUT=1n}
C {lab_pin.sym} 550 -880 0 0 {name=l16
lab=REF}
C {lab_pin.sym} 550 -940 0 0 {name=l7 lab=LED }
C {lab_pin.sym} 830 -910 0 1 {name=l18 lab=LEVEL}
C {comp_ngspice.sym} 950 -1040 0 0 {name=x4 OFFSET=0.5 AMPLITUDE=1 ROUT=1 COUT=1p}
C {lab_pin.sym} 1060 -1040 0 1 {name=l8 lab=CTRL1 }
C {lab_pin.sym} 180 -450 0 0 {name=l4 lab=SUN }