From f3e6b2ebf725b94c2ef79122c8a4a60e0eb74633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 14:30:09 +0100 Subject: [PATCH 01/33] schematics of a dosimeter with flash storage --- sym/AT45DB081D-1.sym | 108 +++++ sym/nmos-ub.sym | 56 +++ turbo.sch | 1044 +++++++++++++++++++++--------------------- 3 files changed, 683 insertions(+), 525 deletions(-) create mode 100644 sym/AT45DB081D-1.sym create mode 100644 sym/nmos-ub.sym diff --git a/sym/AT45DB081D-1.sym b/sym/AT45DB081D-1.sym new file mode 100644 index 0000000..b63fc0e --- /dev/null +++ b/sym/AT45DB081D-1.sym @@ -0,0 +1,108 @@ +v 20140308 2 +T 1000 1600 8 10 1 1 0 4 1 +refdes=U? +T 300 2950 8 10 0 1 0 0 1 +device=AT45DB081D +T 1000 1050 8 10 1 1 0 4 1 +footprint=SOIC8 +T 300 3350 8 10 0 0 0 0 1 +author=bpaddock(at)csonline.net +T 300 3550 8 10 0 0 0 0 1 +documentation=http://www.atmel.com/ +T 300 3750 8 10 0 0 0 0 1 +description=2-Megabit DataFlash +T 300 3950 8 10 0 0 0 0 1 +numslots=0 +P 1100 2600 1100 2300 1 0 0 +{ +T 1050 2400 5 8 1 1 90 0 1 +pinnumber=6 +T 1150 2400 5 8 0 1 90 2 1 +pinseq=6 +T 1100 2250 9 8 1 1 90 6 1 +pinlabel=VCC +T 1100 2250 5 8 0 1 90 8 1 +pintype=pwr +} +P 2000 1900 1700 1900 1 0 0 +{ +T 1800 1950 5 8 1 1 0 0 1 +pinnumber=4 +T 1800 1850 5 8 0 1 0 2 1 +pinseq=4 +T 1650 1900 9 8 1 1 0 6 1 +pinlabel=\_CS\_ +T 1650 1900 5 8 0 1 0 8 1 +pintype=in +} +P 2000 1500 1700 1500 1 0 0 +{ +T 1800 1550 5 8 1 1 0 0 1 +pinnumber=8 +T 1800 1450 5 8 0 1 0 2 1 +pinseq=8 +T 1650 1500 9 8 1 1 0 6 1 +pinlabel=SO +T 1650 1500 5 8 0 1 0 8 1 +pintype=tri +} +P 0 700 300 700 1 0 0 +{ +T 200 750 5 8 1 1 0 6 1 +pinnumber=3 +T 200 650 5 8 0 1 0 8 1 +pinseq=3 +T 350 700 9 8 1 1 0 0 1 +pinlabel=\_RESET\_ +T 350 700 5 8 0 1 0 2 1 +pintype=in +} +P 0 1100 300 1100 1 0 0 +{ +T 200 1150 5 8 1 1 0 6 1 +pinnumber=2 +T 200 1050 5 8 0 1 0 8 1 +pinseq=2 +T 350 1100 9 8 1 1 0 0 1 +pinlabel=SCK +T 350 1100 5 8 0 1 0 2 1 +pintype=in +} +P 0 1500 300 1500 1 0 0 +{ +T 200 1550 5 8 1 1 0 6 1 +pinnumber=1 +T 200 1450 5 8 0 1 0 8 1 +pinseq=1 +T 350 1500 9 8 1 1 0 0 1 +pinlabel=SI +T 350 1500 5 8 0 1 0 2 1 +pintype=in +} +P 0 1900 300 1900 1 0 0 +{ +T 200 1950 5 8 1 1 0 6 1 +pinnumber=5 +T 200 1850 5 8 0 1 0 8 1 +pinseq=5 +T 350 1900 9 8 1 1 0 0 1 +pinlabel=\_WP\_ +T 350 1900 5 8 0 1 0 2 1 +pintype=in +} +P 1100 0 1100 300 1 0 0 +{ +T 1050 200 5 8 1 1 90 6 1 +pinnumber=7 +T 1150 200 5 8 0 1 90 8 1 +pinseq=7 +T 1100 350 9 8 1 1 90 0 1 +pinlabel=GND +T 1100 350 5 8 0 1 90 2 1 +pintype=pwr +} +B 300 300 1400 2000 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 +T 300 4200 8 10 0 0 0 0 1 +symversion=1.0 +T 1000 1350 8 10 1 1 0 4 1 +value=AT45DB161E diff --git a/sym/nmos-ub.sym b/sym/nmos-ub.sym new file mode 100644 index 0000000..8be8c76 --- /dev/null +++ b/sym/nmos-ub.sym @@ -0,0 +1,56 @@ +v 20111231 2 +T 600 900 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 600 1100 5 10 0 0 0 0 1 +numslots=0 +T 600 1300 5 10 0 0 0 0 1 +description=generic N channel MOS transistor (enhancement type) +L 250 600 500 600 3 0 0 0 -1 -1 +L 250 200 500 200 3 0 0 0 -1 -1 +L 250 400 350 450 3 0 0 0 -1 -1 +L 250 400 350 350 3 0 0 0 -1 -1 +P 0 200 200 200 1 0 0 +{ +T 0 300 5 10 0 1 0 0 1 +pinnumber=1 +T 0 300 9 10 0 1 0 0 1 +pinlabel=G +T 0 300 5 10 0 0 0 0 1 +pinseq=2 +T 0 300 5 10 0 0 0 0 1 +pintype=pas +} +P 500 600 500 800 1 0 1 +{ +T 300 700 5 10 0 1 0 0 1 +pinnumber=3 +T 300 700 9 10 0 1 0 0 1 +pinlabel=D +T 300 700 5 10 0 0 0 0 1 +pinseq=1 +T 300 700 5 10 0 0 0 0 1 +pintype=pas +} +P 500 200 500 0 1 0 1 +{ +T 300 0 5 10 0 1 0 0 1 +pinnumber=2 +T 300 0 9 10 0 1 0 0 1 +pinlabel=S +T 300 0 5 10 0 0 0 0 1 +pinseq=3 +T 300 0 5 10 0 0 0 0 1 +pintype=pas +} +T 700 600 8 10 1 1 0 0 1 +refdes=Q? +L 250 675 250 525 3 0 0 0 -1 -1 +L 250 475 250 325 3 0 0 0 -1 -1 +L 250 275 250 125 3 0 0 0 -1 -1 +L 200 600 200 200 3 0 0 0 -1 -1 +L 250 400 400 400 3 0 0 0 -1 -1 +L 400 400 400 200 3 0 0 0 -1 -1 +T 700 400 8 10 1 1 0 0 1 +footprint=UB +T 700 200 8 10 1 1 0 0 1 +value=2N7616UB diff --git a/turbo.sch b/turbo.sch index cf466be..61a3ade 100644 --- a/turbo.sch +++ b/turbo.sch @@ -2,7 +2,7 @@ v 20220529 2 C 40000 40000 0 0 0 title-B.sym { T 50200 41100 5 10 1 1 0 0 1 -title=Turbo the Turtle's Winter Weather Station +title=Turbo the Turtle's Dosimeter T 54200 40100 5 10 1 1 0 0 1 author=Stephan I. Böttcher T 50200 40400 5 10 1 1 0 0 1 @@ -23,25 +23,14 @@ net=GND:1 } C 42300 46200 1 0 0 header4.sym { -T 42800 47700 5 10 1 1 0 6 1 -device=LPD433 ASK Radio +T 42800 47500 5 10 1 1 0 6 1 +device=MOSFET T 42200 46350 5 10 1 1 0 4 1 refdes=U3 T 42900 46100 5 10 1 1 0 6 1 footprint=SIL_100_4 -T 42200 47500 5 10 1 1 0 6 1 -value=WRL-10534 -} -C 50600 48900 1 180 0 MS5534C.sym -{ -T 50000 48200 5 10 1 1 180 4 1 -refdes=U2 -T 49800 49100 5 10 1 1 180 4 1 -value=MS5534C -T 50000 48300 5 10 0 1 180 4 1 -footprint=MS5534C -T 48400 49400 5 10 1 1 0 0 1 -device=Pressure and Temperature Sensor +T 42200 47500 5 10 0 1 0 6 1 +value=SIL4 } C 45100 46800 1 0 0 ATtiny404.sym { @@ -54,41 +43,7 @@ footprint=SOIC_150_14 T 45100 46800 5 10 0 1 0 0 1 value=ATtiny4x4SS } -N 47300 47300 48500 47300 4 -N 48500 47300 48500 47900 4 -N 48500 47900 49100 47900 4 -{ -T 49000 47950 5 5 1 1 0 6 1 -netname=MCLK -} -N 47300 47900 48400 47900 4 -N 48400 47900 48400 48100 4 -N 48400 48100 49100 48100 4 -{ -T 49000 48150 5 5 1 1 0 6 1 -netname=MOSI -} -N 47300 48200 48300 48200 4 -N 48300 48200 48300 48300 4 -N 48300 48300 49100 48300 4 -{ -T 49000 48350 5 5 1 1 0 6 1 -netname=MISO -} -N 47300 48500 49100 48500 4 -{ -T 49000 48550 5 5 1 1 0 6 1 -netname=SCLK -} C 43000 47200 1 90 0 gnd-1.sym -N 42600 46400 43200 46400 4 -N 43200 44300 43200 46400 4 -{ -T 43150 44900 5 10 1 1 90 0 1 -netname=ANTENNA -} -N 43200 44300 42800 44300 4 -N 42600 46700 42700 46700 4 C 52900 47100 1 90 0 generic-power.sym { T 52650 47300 5 10 0 1 90 3 1 @@ -96,13 +51,6 @@ net=Vbat:1 T 52675 47300 5 7 1 1 90 3 1 documentation=Vbat } -C 42700 46900 1 270 0 generic-power.sym -{ -T 42950 46700 5 10 0 1 270 3 1 -net=Vrf:1 -T 42925 46700 5 7 1 1 270 3 1 -documentation=Vrf -} C 53400 45800 1 0 0 LT1761ES5-SD.sym { T 54900 47400 5 10 0 1 0 0 1 @@ -170,66 +118,6 @@ T 52000 45225 5 7 1 1 0 3 1 documentation=Vbat } C 51900 43800 1 0 0 gnd-1.sym -C 53500 49800 1 90 0 generic-power.sym -{ -T 53250 50000 5 10 0 1 90 3 1 -net=Vbat:1 -T 53275 50000 5 7 1 1 90 3 1 -documentation=Vbat -} -C 55800 50200 1 270 0 generic-power.sym -{ -T 56050 50000 5 10 0 1 270 3 1 -net=Vrf:1 -T 56025 50000 5 7 1 1 270 3 1 -documentation=Vrf -} -C 53400 48500 1 0 0 LT1761ES5-SD.sym -{ -T 54900 50100 5 10 0 1 0 0 1 -device=LT1761ES5-BYP -T 54300 49800 5 10 1 1 0 4 1 -refdes=U4 -T 54800 48800 5 5 1 1 0 8 1 -footprint=SOT23_5 -T 52800 48500 5 10 1 1 0 0 1 -value=LT1761-SD -} -C 54200 47900 1 0 0 gnd-1.sym -C 55700 49100 1 90 0 resistor-2.sym -{ -T 55350 49500 5 10 0 0 90 0 1 -device=RESISTOR -T 55200 49300 5 10 0 1 90 0 1 -footprint=C0603.fp -T 55000 49300 5 10 0 0 90 0 1 -symversion=0.1 -T 55700 49550 5 10 1 1 90 5 1 -refdes=R1 -T 55450 49550 5 10 1 1 90 3 1 -value=330kΩ -} -N 55800 50000 55100 50000 4 -N 55100 49100 55600 49100 4 -{ -T 55000 49150 5 5 1 1 0 0 1 -netname=ADJ_RF -} -C 55700 48200 1 90 0 resistor-2.sym -{ -T 55350 48600 5 10 0 0 90 0 1 -device=RESISTOR -T 55200 48400 5 10 0 1 90 0 1 -footprint=C0603.fp -T 55000 48400 5 10 0 0 90 0 1 -symversion=0.1 -T 55700 48650 5 10 1 1 90 5 1 -refdes=R2 -T 55450 48650 5 10 1 1 90 3 1 -value=220kΩ -} -C 55500 47900 1 0 0 gnd-1.sym -N 54300 48200 54300 48500 4 C 47600 48700 1 90 0 gnd-1.sym C 45100 48600 1 90 0 vcc-1.sym C 55800 47500 1 270 0 vcc-1.sym @@ -265,197 +153,84 @@ footprint=C0603 T 52000 46000 5 10 1 1 0 0 1 value=-BYP 100nF } -C 47600 43100 1 270 0 capacitor-4.sym -{ -T 48700 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 47450 42550 5 10 1 1 0 2 1 -refdes=C22 -T 48300 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 47700 41700 5 10 1 1 0 0 1 -footprint=P1206 -T 47700 41450 5 10 1 1 0 0 1 -value=10µF -} C 52000 46200 1 90 0 vcc-1.sym T 52400 46800 9 7 1 0 0 5 1 (for -BYP option) -C 52100 49000 1 0 0 input-2.sym +C 43700 48300 1 180 1 input-2.sym { -T 52100 49200 5 10 0 0 0 0 1 -net=RF_EN:1 -T 52700 49700 5 10 0 0 0 0 1 +T 43700 48100 5 10 0 0 180 6 1 +net=DRAIN:1 +T 44300 47600 5 10 0 0 180 6 1 device=none -T 52750 49100 5 7 1 1 0 1 1 -value=RF_EN -} -C 48700 47100 1 180 0 input-2.sym -{ -T 48700 46900 5 10 0 0 180 0 1 -net=RF_EN:1 -T 48100 46400 5 10 0 0 180 0 1 -device=none -T 48050 47000 5 7 1 1 180 1 1 -value=RF_EN +T 44350 48200 5 7 1 1 180 7 1 +value=DRAIN } N 45000 47600 45100 47600 4 -C 48600 48800 1 270 0 gnd-1.sym -C 49100 47500 1 90 0 vcc-1.sym -N 48900 48700 49100 48700 4 -C 50700 42200 1 90 0 capacitor-1.sym +C 52200 42400 1 90 0 capacitor-1.sym { -T 50000 42400 5 10 0 0 90 0 1 +T 51500 42600 5 10 0 0 90 0 1 device=CAPACITOR -T 50150 42600 5 10 1 1 0 2 1 +T 51650 42800 5 10 1 1 0 2 1 refdes=C11 -T 49800 42400 5 10 0 0 90 0 1 +T 51300 42600 5 10 0 0 90 0 1 symversion=0.2 -T 50000 42400 5 10 0 1 90 0 1 +T 51500 42600 5 10 0 1 90 0 1 footprint=C0603 -T 50400 42700 5 10 0 1 90 0 1 +T 51900 42900 5 10 0 1 90 0 1 value=100nF } -C 51200 42200 1 90 0 capacitor-1.sym +C 52700 42400 1 90 0 capacitor-1.sym { -T 50500 42400 5 10 0 0 90 0 1 +T 52000 42600 5 10 0 0 90 0 1 device=CAPACITOR -T 50950 42350 5 10 1 1 180 2 1 +T 52450 42550 5 10 1 1 180 2 1 refdes=C12 -T 50300 42400 5 10 0 0 90 0 1 +T 51800 42600 5 10 0 0 90 0 1 symversion=0.2 -T 50500 42400 5 10 0 1 90 0 1 +T 52000 42600 5 10 0 1 90 0 1 footprint=C0603 -T 50900 42700 5 10 0 1 90 0 1 +T 52400 42900 5 10 0 1 90 0 1 value=100nF } -N 50500 42200 53300 42200 4 -N 50500 43100 53300 43100 4 -C 50300 43100 1 0 0 vcc-1.sym -C 50400 41900 1 0 0 gnd-1.sym -C 47500 42200 1 90 0 capacitor-1.sym +N 52000 42400 53600 42400 4 +N 52000 43300 53600 43300 4 +C 51800 43300 1 0 0 vcc-1.sym +C 51900 42100 1 0 0 gnd-1.sym +C 52800 43300 1 270 0 capacitor-4.sym { -T 46800 42400 5 10 0 0 90 0 1 -device=CAPACITOR -T 46600 42400 5 10 0 0 90 0 1 -symversion=0.2 -T 46900 41700 5 10 1 1 0 0 1 -footprint=C0603 -T 47250 42700 5 10 1 1 180 2 1 -refdes=C10 -T 46900 41450 5 10 1 1 0 0 1 -value=100nF -} -N 47300 42200 49600 42200 4 -N 47300 43100 49600 43100 4 -C 47200 41900 1 0 0 gnd-1.sym -C 51300 43100 1 270 0 capacitor-4.sym -{ -T 52400 42900 5 10 0 0 270 0 1 +T 53900 43100 5 10 0 0 270 0 1 device=POLARIZED_CAPACITOR -T 51450 42300 5 10 1 1 180 2 1 +T 52950 42500 5 10 1 1 180 2 1 refdes=C26 -T 52000 42900 5 10 0 0 270 0 1 +T 53500 43100 5 10 0 0 270 0 1 symversion=0.2 -T 52000 42900 5 10 0 1 270 0 1 +T 53500 43100 5 10 0 1 270 0 1 footprint=P1206 -T 51600 42900 5 10 0 1 270 0 1 +T 53100 43100 5 10 0 1 270 0 1 value=10µF } -C 51900 43100 1 270 0 capacitor-4.sym +C 53400 43300 1 270 0 capacitor-4.sym { -T 53000 42900 5 10 0 0 270 0 1 +T 54500 43100 5 10 0 0 270 0 1 device=POLARIZED_CAPACITOR -T 52050 42300 5 10 1 1 180 2 1 +T 53550 42500 5 10 1 1 180 2 1 refdes=C27 -T 52600 42900 5 10 0 0 270 0 1 +T 54100 43100 5 10 0 0 270 0 1 symversion=0.2 -T 52600 42900 5 10 0 1 270 0 1 +T 54100 43100 5 10 0 1 270 0 1 footprint=P1206 -T 52200 42900 5 10 0 1 270 0 1 +T 53700 43100 5 10 0 1 270 0 1 value=10µF } -C 52500 43100 1 270 0 capacitor-4.sym +C 43900 49000 1 90 0 led-3.sym { -T 53600 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 52650 42300 5 10 1 1 180 2 1 -refdes=C28 -T 53200 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 53200 42900 5 10 0 1 270 0 1 -footprint=P1206 -T 52800 42900 5 10 0 1 270 0 1 -value=10µF -} -C 48200 43100 1 270 0 capacitor-4.sym -{ -T 49300 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 48050 42550 5 10 1 1 0 2 1 -refdes=C23 -T 48900 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 48900 42900 5 10 0 1 270 0 1 -footprint=P1206 -T 48500 42900 5 10 0 1 270 0 1 -value=10µF -} -C 48800 43100 1 270 0 capacitor-4.sym -{ -T 49900 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 48650 42550 5 10 1 1 0 2 1 -refdes=C24 -T 49500 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 49500 42900 5 10 0 1 270 0 1 -footprint=P1206 -T 49100 42900 5 10 0 1 270 0 1 -value=10µF -} -C 49400 43100 1 270 0 capacitor-4.sym -{ -T 50500 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 49250 42550 5 10 1 1 0 2 1 -refdes=C25 -T 50100 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 50100 42900 5 10 0 1 270 0 1 -footprint=P1206 -T 49700 42900 5 10 0 1 270 0 1 -value=10µF -} -C 53100 43100 1 270 0 capacitor-4.sym -{ -T 54200 42900 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 53250 42300 5 10 1 1 180 2 1 -refdes=C29 -T 53800 42900 5 10 0 0 270 0 1 -symversion=0.2 -T 53800 42900 5 10 0 1 270 0 1 -footprint=P1206 -T 53400 42900 5 10 0 1 270 0 1 -value=10µF -} -C 47100 43100 1 0 0 generic-power.sym -{ -T 47300 43350 5 10 0 1 0 3 1 -net=Vrf:1 -T 47300 43325 5 7 1 1 0 3 1 -documentation=Vrf -} -C 43500 49900 1 270 0 led-3.sym -{ -T 44150 48950 5 10 0 0 270 0 1 +T 43250 49950 5 10 0 0 90 0 1 device=LED -T 44050 49350 5 10 1 1 0 0 1 +T 43350 49550 5 10 1 1 180 0 1 refdes=D1 -T 43400 49200 5 10 1 1 0 6 1 +T 44000 49700 5 10 1 1 180 6 1 footprint=C0603 -T 43400 49400 5 10 1 1 0 6 1 +T 44000 49500 5 10 1 1 180 6 1 value=SMD-LED } C 43600 49100 1 270 0 resistor-2.sym @@ -471,11 +246,6 @@ value=10kΩ T 44300 48900 5 10 0 0 270 0 1 symversion=0.1 } -N 43700 48200 45100 48200 4 -{ -T 44200 48250 5 5 1 1 0 6 1 -netname=LED -} C 52600 45000 1 270 0 capacitor-4.sym { T 53700 44800 5 10 0 0 270 0 1 @@ -489,21 +259,8 @@ refdes=C20 T 52600 43900 5 10 0 1 0 0 1 value=10µF } -C 53200 45000 1 270 0 capacitor-4.sym -{ -T 54300 44800 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 53900 44800 5 10 0 0 270 0 1 -symversion=0.2 -T 53900 44800 5 10 0 1 270 0 1 -footprint=P1206 -T 53050 44450 5 10 1 1 0 2 1 -refdes=C21 -T 53200 43900 5 10 0 1 0 0 1 -value=10µF -} -N 53400 45000 52000 45000 4 -N 53400 44100 52000 44100 4 +N 52800 45000 52000 45000 4 +N 52800 44100 52000 44100 4 N 52000 44100 52000 44200 4 N 52000 45000 52000 44900 4 C 41600 41600 1 0 0 DB9-1.sym @@ -584,207 +341,26 @@ T 44700 42250 5 7 1 1 90 1 1 value=Reset } C 44300 42600 1 0 0 gnd-1.sym -C 45600 46100 1 0 0 generic-power.sym +C 43700 48400 1 0 0 input-2.sym { -T 45800 46350 5 10 0 1 0 3 1 -net=Vrf:1 -T 45800 46325 5 7 1 1 0 3 1 -documentation=Vrf -} -C 45900 44100 1 90 0 resistor-2.sym -{ -T 45550 44500 5 10 0 0 90 0 1 -device=RESISTOR -T 45400 44300 5 10 0 1 90 0 1 -footprint=C0603.fp -T 45200 44300 5 10 0 0 90 0 1 -symversion=0.1 -T 45800 44550 5 10 1 1 90 4 1 -refdes=R6 -T 45650 44550 5 10 1 1 90 3 1 -value=10kΩ NTC -} -C 45900 45200 1 90 0 resistor-2.sym -{ -T 45550 45600 5 10 0 0 90 0 1 -device=RESISTOR -T 45400 45400 5 10 0 1 90 0 1 -footprint=C0603.fp -T 45200 45400 5 10 0 0 90 0 1 -symversion=0.1 -T 45800 45650 5 10 1 1 90 4 1 -refdes=R5 -T 45650 45650 5 10 1 1 90 3 1 -value=10kΩ -} -C 46700 44100 1 90 0 capacitor-1.sym -{ -T 46000 44300 5 10 0 0 90 0 1 -device=CAPACITOR -T 45800 44300 5 10 0 0 90 0 1 -symversion=0.2 -T 46000 44300 5 10 0 1 90 0 1 -footprint=C0603 -T 46600 44500 5 10 1 1 0 2 1 -refdes=C1 -T 46600 44100 5 10 0 1 0 0 1 -value=100nF -} -N 46500 44100 45800 44100 4 -N 45800 45000 46500 45000 4 -C 45700 43800 1 0 0 gnd-1.sym -C 44200 45100 1 0 0 input-2.sym -{ -T 44200 45300 5 10 0 0 0 0 1 -net=ADC_T:1 -T 44800 45800 5 10 0 0 0 0 1 +T 43700 48600 5 10 0 0 0 0 1 +net=SSEL:1 +T 44300 49100 5 10 0 0 0 0 1 device=none -T 44850 45200 5 7 1 1 0 1 1 -value=ADC_T -} -N 45600 45200 45800 45200 4 -N 45800 45200 45800 45000 4 -C 46300 45100 1 0 0 input-2.sym -{ -T 46300 45300 5 10 0 0 0 0 1 -net=ADC_V:1 -T 46900 45800 5 10 0 0 0 0 1 -device=none -T 46950 45200 5 7 1 1 0 1 1 -value=ADC_V -} -C 43600 48400 1 0 0 input-2.sym -{ -T 43600 48600 5 10 0 0 0 0 1 -net=ADC_V:1 -T 44200 49100 5 10 0 0 0 0 1 -device=none -T 44250 48500 5 7 1 1 0 1 1 -value=ADC_V +T 44350 48500 5 7 1 1 0 1 1 +value=SSEL } C 43600 47800 1 0 0 input-2.sym { T 43600 48000 5 10 0 0 0 0 1 -net=ADC_T:1 +net=ADC:1 T 44200 48500 5 10 0 0 0 0 1 device=none T 44250 47900 5 7 1 1 0 1 1 -value=ADC_T +value=ADC } N 42600 47300 42700 47300 4 N 45000 47900 45100 47900 4 -N 45000 48500 45100 48500 4 -C 49600 46100 1 0 0 generic-power.sym -{ -T 49800 46350 5 10 0 1 0 3 1 -net=Vbat:1 -T 49800 46325 5 7 1 1 0 3 1 -documentation=Vbat -} -C 48000 44100 1 90 0 resistor-2.sym -{ -T 47650 44500 5 10 0 0 90 0 1 -device=RESISTOR -T 47500 44300 5 10 0 1 90 0 1 -footprint=C0603.fp -T 47300 44300 5 10 0 0 90 0 1 -symversion=0.1 -T 47900 44550 5 10 1 1 90 4 1 -refdes=R8 -T 47750 44550 5 10 1 1 90 3 1 -value=10kΩ -} -C 48800 44100 1 90 0 capacitor-1.sym -{ -T 48100 44300 5 10 0 0 90 0 1 -device=CAPACITOR -T 47900 44300 5 10 0 0 90 0 1 -symversion=0.2 -T 48100 44300 5 10 0 1 90 0 1 -footprint=C0603 -T 48700 44500 5 10 1 1 0 2 1 -refdes=C2 -T 48700 44100 5 10 0 1 0 0 1 -value=100nF -} -N 48600 44100 47900 44100 4 -N 47900 45000 48600 45000 4 -N 47700 45200 47900 45200 4 -N 47900 45200 47900 45000 4 -C 48000 45200 1 90 0 resistor-2.sym -{ -T 47900 45650 5 10 1 1 90 4 1 -refdes=R7 -T 47750 45650 5 10 1 1 90 3 1 -value=10kΩ -T 47650 45600 5 10 0 0 90 0 1 -device=RESISTOR -T 47500 45400 5 10 0 1 90 0 1 -footprint=C0603.fp -T 47300 45400 5 10 0 0 90 0 1 -symversion=0.1 -} -C 47800 43800 1 0 0 gnd-1.sym -C 47700 46100 1 0 0 generic-power.sym -{ -T 47900 46350 5 10 0 1 0 3 1 -net=Vrf:1 -T 47900 46325 5 7 1 1 0 3 1 -documentation=Vrf -} -C 49900 44100 1 90 0 resistor-2.sym -{ -T 49550 44500 5 10 0 0 90 0 1 -device=RESISTOR -T 49400 44300 5 10 0 1 90 0 1 -footprint=C0603.fp -T 49200 44300 5 10 0 0 90 0 1 -symversion=0.1 -T 49800 44550 5 10 1 1 90 4 1 -refdes=R10 -T 49650 44550 5 10 1 1 90 3 1 -value=1MΩ -} -C 50700 44100 1 90 0 capacitor-1.sym -{ -T 50000 44300 5 10 0 0 90 0 1 -device=CAPACITOR -T 49800 44300 5 10 0 0 90 0 1 -symversion=0.2 -T 50000 44300 5 10 0 1 90 0 1 -footprint=C0603 -T 50400 44600 5 10 1 1 180 2 1 -refdes=C3 -T 50100 43900 5 10 0 1 0 0 1 -value=100nF -} -N 49800 44100 51000 44100 4 -N 49800 45000 51000 45000 4 -N 49600 45200 49800 45200 4 -N 49800 45200 49800 45000 4 -C 49900 45200 1 90 0 resistor-2.sym -{ -T 49550 45600 5 10 0 0 90 0 1 -device=RESISTOR -T 49400 45400 5 10 0 1 90 0 1 -footprint=C0603.fp -T 49200 45400 5 10 0 0 90 0 1 -symversion=0.1 -T 49800 45650 5 10 1 1 90 4 1 -refdes=R9 -T 49650 45650 5 10 1 1 90 3 1 -value=10MΩ -} -C 49700 43800 1 0 0 gnd-1.sym -C 48200 45100 1 0 0 input-2.sym -{ -T 48200 45300 5 10 0 0 0 0 1 -net=ADC_B:1 -T 48800 45800 5 10 0 0 0 0 1 -device=none -T 48850 45200 5 7 1 1 0 1 1 -value=ADC_B -} N 44700 42900 44700 43400 4 C 44500 44200 1 0 0 vcc-1.sym N 44700 44200 44700 44300 4 @@ -808,16 +384,15 @@ N 43700 49000 43700 49100 4 T 43650 49000 5 5 1 1 90 0 1 netname=LEDR } -C 43600 47500 1 0 0 input-2.sym +C 48700 46900 1 0 1 input-2.sym { -T 43600 47700 5 10 0 0 0 0 1 -net=ADC_B:1 -T 44200 48200 5 10 0 0 0 0 1 +T 48700 47100 5 10 0 0 0 6 1 +net=AIN2:1 +T 48100 47600 5 10 0 0 0 6 1 device=none -T 44250 47600 5 7 1 1 0 1 1 -value=ADC_B +T 48050 47000 5 7 1 1 0 7 1 +value=AIN2 } -C 43800 50200 1 180 0 gnd-1.sym T 52900 46900 9 7 1 0 90 5 1 (for -SD option) C 43600 46900 1 0 0 input-2.sym @@ -830,56 +405,20 @@ T 44250 47000 5 7 1 1 0 1 1 value=TxD } N 45000 47000 45100 47000 4 -C 44700 47100 1 180 0 input-2.sym -{ -T 44700 46900 5 10 0 0 180 0 1 -net=TxD:1 -T 44100 46400 5 10 0 0 180 0 1 -device=none -T 44050 47000 5 7 1 1 180 1 1 -value=TxD -} -N 43300 47000 42600 47000 4 -C 50800 45000 1 270 0 capacitor-4.sym -{ -T 51900 44800 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 51500 44800 5 10 0 0 270 0 1 -symversion=0.2 -T 51500 44800 5 10 0 1 270 0 1 -footprint=P1206 -T 50950 44200 5 10 1 1 180 2 1 -refdes=C30 -T 50700 43900 5 10 0 1 0 0 1 -value=10µF -} -T 47700 40900 9 10 1 0 0 0 2 -C20…C30, 1206 +T 52300 41600 9 10 1 0 0 0 2 +C26…C27, 1206 use 10µF 25V X7R -T 46150 40900 9 10 1 0 0 0 2 -C1…C19, 0603 +T 50850 41600 9 10 1 0 0 0 2 +C11…C12, 0603 use 100nF X7R T 46750 40450 9 10 1 0 0 0 1 All R are size 0603 -T 52700 50350 9 10 1 0 0 0 2 -The Vrf regulator will be shut down -when the sensor is idle. Use an —SD part. -T 52650 47700 9 10 1 0 0 0 1 -The Vcc regulator may use a —BYP part. T 44950 49500 9 10 1 0 0 0 5 • SPI for SCK, MISO, MOSI • Timer PWM output for MCLK • UART TxD for output • UART RxD (optional) for configuration • Any IO for RF_EN -T 50050 45500 9 10 1 0 0 0 3 -High Impedance -V_bat monitor -drains ~½µA -T 46150 45550 9 10 1 0 0 0 3 -NTC bridge -powered down -when idle T 43800 41350 9 10 1 0 0 0 3 UPDI (Unified Program and Debug Interface) @@ -907,3 +446,458 @@ Vcc = 1.22V × (1+R₃/R₄) Vcc = 3.15V Vrf = 3.06V I_R₃ = 0.6 µA +C 53800 47900 1 0 0 resistor-2.sym +{ +T 54200 48250 5 10 0 0 0 0 1 +device=RESISTOR +T 54250 48000 5 10 1 1 0 4 1 +refdes=R10 +T 54000 48400 5 10 0 1 0 0 1 +footprint=C0603.fp +T 54250 48150 5 10 1 1 0 3 1 +value=∞Ω/0Ω +T 54000 48600 5 10 0 0 0 0 1 +symversion=0.1 +} +N 53400 47300 53400 48000 4 +N 53400 48000 53800 48000 4 +N 54700 48000 55600 48000 4 +N 55600 48000 55600 47300 4 +C 43500 49700 1 0 0 vcc-1.sym +C 43800 46900 1 90 0 input-2.sym +{ +T 43600 46900 5 10 0 0 90 0 1 +net=TxD:1 +T 43100 47500 5 10 0 0 90 0 1 +device=none +T 43700 47550 5 7 1 1 90 1 1 +value=TxD +} +N 43700 48300 43700 48200 4 +N 43700 49700 43700 49900 4 +C 48700 48400 1 0 1 input-2.sym +{ +T 48700 48600 5 10 0 0 0 6 1 +net=SCK:1 +T 48100 49100 5 10 0 0 0 6 1 +device=none +T 48050 48500 5 7 1 1 0 7 1 +value=SCK +} +C 48700 48100 1 0 1 input-2.sym +{ +T 48700 48300 5 10 0 0 0 6 1 +net=MISO:1 +T 48100 48800 5 10 0 0 0 6 1 +device=none +T 48050 48200 5 7 1 1 0 7 1 +value=MISO +} +C 48700 47800 1 0 1 input-2.sym +{ +T 48700 48000 5 10 0 0 0 6 1 +net=MOSI:1 +T 48100 48500 5 10 0 0 0 6 1 +device=none +T 48050 47900 5 7 1 1 0 7 1 +value=MOSI +} +C 48700 47200 1 0 1 input-2.sym +{ +T 48700 47400 5 10 0 0 0 6 1 +net=PWM:1 +T 48100 47900 5 10 0 0 0 6 1 +device=none +T 48050 47300 5 7 1 1 0 7 1 +value=PWM +} +C 43600 47500 1 0 0 input-2.sym +{ +T 43600 47700 5 10 0 0 0 0 1 +net=AIN1:1 +T 44200 48200 5 10 0 0 0 0 1 +device=none +T 44250 47600 5 7 1 1 0 1 1 +value=AIN1 +} +C 44000 46600 1 0 1 input-2.sym +{ +T 44000 46800 5 10 0 0 0 6 1 +net=GATE2:1 +T 43400 47300 5 10 0 0 0 6 1 +device=none +T 43350 46700 5 7 1 1 0 7 1 +value=GATE2 +} +C 48550 42400 1 0 0 nmos-ub.sym +{ +T 49150 43300 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 49250 43000 5 10 1 1 0 0 1 +refdes=Q31 +T 49250 42800 5 10 1 1 0 0 1 +footprint=UB +T 49250 42600 5 10 1 1 0 0 1 +value=2N7616UB +} +C 48950 41400 1 0 0 gnd-1.sym +C 46650 42500 1 0 0 resistor-2.sym +{ +T 47050 42850 5 10 0 0 0 0 1 +device=RESISTOR +T 47100 42600 5 10 1 1 0 4 1 +refdes=R30 +T 46850 43000 5 10 0 1 0 0 1 +footprint=C0603.fp +T 47100 42750 5 10 1 1 0 3 1 +value=100kΩ +T 46850 43200 5 10 0 0 0 0 1 +symversion=0.1 +} +C 45350 42500 1 0 0 input-2.sym +{ +T 45350 42700 5 10 0 0 0 0 1 +net=PWM:1 +T 45950 43200 5 10 0 0 0 0 1 +device=none +T 46000 42600 5 7 1 1 0 1 1 +value=PWM +} +C 47350 42600 1 270 0 capacitor-4.sym +{ +T 48450 42400 5 10 0 0 270 0 1 +device=POLARIZED_CAPACITOR +T 47500 41800 5 10 1 1 180 2 1 +refdes=C31 +T 48050 42400 5 10 0 0 270 0 1 +symversion=0.2 +T 48050 42400 5 10 0 1 270 0 1 +footprint=P1206 +T 47650 42400 5 10 0 1 270 0 1 +value=10µF +} +C 47450 41400 1 0 0 gnd-1.sym +C 47550 42500 1 0 0 resistor-2.sym +{ +T 47950 42850 5 10 0 0 0 0 1 +device=RESISTOR +T 48000 42600 5 10 1 1 0 4 1 +refdes=R32 +T 47750 43000 5 10 0 1 0 0 1 +footprint=C0603.fp +T 48000 42750 5 10 1 1 0 3 1 +value=100kΩ +T 47750 43200 5 10 0 0 0 0 1 +symversion=0.1 +} +C 48650 41700 1 90 0 capacitor-1.sym +{ +T 47950 41900 5 10 0 0 90 0 1 +device=CAPACITOR +T 48100 42100 5 10 1 1 0 2 1 +refdes=C32 +T 47750 41900 5 10 0 0 90 0 1 +symversion=0.2 +T 47950 41900 5 10 0 1 90 0 1 +footprint=C0603 +T 48350 42200 5 10 0 1 90 0 1 +value=100nF +} +C 48350 41400 1 0 0 gnd-1.sym +N 49050 41700 49050 42400 4 +C 49150 43200 1 90 0 resistor-2.sym +{ +T 48800 43600 5 10 0 0 90 0 1 +device=RESISTOR +T 49050 43650 5 10 1 1 90 4 1 +refdes=R34 +T 48650 43400 5 10 0 1 90 0 1 +footprint=C0603.fp +T 48900 43650 5 10 1 1 90 3 1 +value=100kΩ +T 48450 43400 5 10 0 0 90 0 1 +symversion=0.1 +} +C 49150 45400 1 90 1 input-2.sym +{ +T 48950 45400 5 10 0 0 90 6 1 +net=DRAIN:1 +T 48450 44800 5 10 0 0 90 6 1 +device=none +T 49050 44750 5 7 1 1 90 7 1 +value=DRAIN +} +C 51650 43100 1 0 1 input-2.sym +{ +T 51650 43300 5 10 0 0 0 6 1 +net=AIN1:1 +T 51050 43800 5 10 0 0 0 6 1 +device=none +T 51000 43200 5 7 1 1 0 7 1 +value=AIN1 +} +N 49050 44000 49050 44100 4 +C 47650 44400 1 90 1 input-2.sym +{ +T 47450 44400 5 10 0 0 90 6 1 +net=GATE:1 +T 46950 43800 5 10 0 0 90 6 1 +device=none +T 47550 43750 5 7 1 1 90 7 1 +value=GATE +} +N 47550 42600 47550 43000 4 +N 48450 42600 48550 42600 4 +{ +T 48700 42650 5 5 1 1 0 6 1 +netname=GATE1 +} +C 47950 44800 1 0 0 nmos-ub.sym +{ +T 48550 45700 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 48650 45400 5 10 1 1 0 0 1 +refdes=Q30 +T 48650 45200 5 10 1 1 0 0 1 +footprint=UB +T 48650 45000 5 10 1 1 0 0 1 +value=2N7616UB +} +C 48350 44600 1 0 0 gnd-1.sym +C 48050 44100 1 90 0 capacitor-1.sym +{ +T 47350 44300 5 10 0 0 90 0 1 +device=CAPACITOR +T 47150 44300 5 10 0 0 90 0 1 +symversion=0.2 +T 47350 44300 5 10 0 1 90 0 1 +footprint=C0603 +T 47750 44600 5 10 0 1 90 0 1 +value=100nF +T 47500 44500 5 10 1 1 0 2 1 +refdes=C30 +} +C 47750 44000 1 0 0 gnd-1.sym +N 48450 44900 48450 44800 4 +C 48550 45600 1 90 0 resistor-2.sym +{ +T 48200 46000 5 10 0 0 90 0 1 +device=RESISTOR +T 48050 45800 5 10 0 1 90 0 1 +footprint=C0603.fp +T 47850 45800 5 10 0 0 90 0 1 +symversion=0.1 +T 48450 46050 5 10 1 1 90 4 1 +refdes=R33 +T 48300 46050 5 10 1 1 90 3 1 +value=100kΩ +} +C 48550 47800 1 90 1 input-2.sym +{ +T 48350 47800 5 10 0 0 90 6 1 +net=DRAIN:1 +T 47850 47200 5 10 0 0 90 6 1 +device=none +T 48450 47150 5 7 1 1 90 7 1 +value=DRAIN +} +N 48450 46400 48450 46500 4 +N 47850 45000 47950 45000 4 +C 46950 44900 1 0 0 resistor-2.sym +{ +T 47400 45000 5 10 1 1 0 4 1 +refdes=R31 +T 47350 45250 5 10 0 0 0 0 1 +device=RESISTOR +T 47150 45400 5 10 0 1 0 0 1 +footprint=C0603.fp +T 47400 45150 5 10 1 1 0 3 1 +value=100kΩ +T 47150 45600 5 10 0 0 0 0 1 +symversion=0.1 +} +C 51150 45500 1 0 1 input-2.sym +{ +T 51150 45700 5 10 0 0 0 6 1 +net=AIN2:1 +T 50550 46200 5 10 0 0 0 6 1 +device=none +T 50500 45600 5 7 1 1 0 7 1 +value=AIN2 +} +C 45650 45100 1 180 1 input-2.sym +{ +T 45650 44900 5 10 0 0 180 6 1 +net=GATE:1 +T 46250 44400 5 10 0 0 180 6 1 +device=none +T 46300 45000 5 7 1 1 180 7 1 +value=GATE +} +N 47050 45000 46950 45000 4 +N 46750 42600 46650 42600 4 +C 44000 46900 1 0 1 input-2.sym +{ +T 44000 47100 5 10 0 0 0 6 1 +net=DRAIN2:1 +T 43400 47600 5 10 0 0 0 6 1 +device=none +T 43350 47000 5 7 1 1 0 7 1 +value=DRAIN2 +} +C 47950 46800 1 90 1 input-2.sym +{ +T 47750 46800 5 10 0 0 90 6 1 +net=GATE2:1 +T 47250 46200 5 10 0 0 90 6 1 +device=none +T 47850 46150 5 7 1 1 90 7 1 +value=GATE2 +} +N 47850 45000 47850 45400 4 +T 54150 48900 9 10 1 0 0 0 3 +To use Vbat directly: +R10=0Ω +U5 unpopulated. +C 49500 47400 1 0 0 AT45DB081D-1.sym +{ +T 50500 49000 5 10 1 1 0 4 1 +refdes=U? +T 49800 50350 5 10 0 1 0 0 1 +device=AT45DB081D +T 50500 48450 5 10 1 1 0 4 1 +footprint=SOIC8 +T 49800 51600 5 10 0 0 0 0 1 +symversion=1.0 +T 50500 48750 5 10 1 1 0 4 1 +value=AT45DB161E +} +C 48300 48800 1 0 0 input-2.sym +{ +T 48300 49000 5 10 0 0 0 0 1 +net=MOSI:1 +T 48900 49500 5 10 0 0 0 0 1 +device=none +T 48950 48900 5 7 1 1 0 1 1 +value=MOSI +} +C 52700 48800 1 0 1 input-2.sym +{ +T 52700 49000 5 10 0 0 0 6 1 +net=MISO:1 +T 52100 49500 5 10 0 0 0 6 1 +device=none +T 52050 48900 5 7 1 1 0 7 1 +value=MISO +} +C 48300 48400 1 0 0 input-2.sym +{ +T 48300 48600 5 10 0 0 0 0 1 +net=SCK:1 +T 48900 49100 5 10 0 0 0 0 1 +device=none +T 48950 48500 5 7 1 1 0 1 1 +value=SCK +} +C 52700 49200 1 0 1 input-2.sym +{ +T 52700 49400 5 10 0 0 0 6 1 +net=SSEL:1 +T 52100 49900 5 10 0 0 0 6 1 +device=none +T 52050 49300 5 7 1 1 0 7 1 +value=SSEL +} +C 50400 49800 1 0 0 vcc-1.sym +C 49700 47900 1 90 0 vcc-1.sym +C 49700 49100 1 90 0 vcc-1.sym +C 50500 47300 1 0 0 gnd-1.sym +N 50600 47600 50600 47400 4 +N 50600 49800 50600 50000 4 +N 51300 49300 51500 49300 4 +N 51300 48900 51500 48900 4 +N 49700 49300 49500 49300 4 +N 49700 48100 49500 48100 4 +N 49700 48500 49500 48500 4 +N 49700 48900 49500 48900 4 +C 44000 46300 1 0 1 input-2.sym +{ +T 44000 46500 5 10 0 0 0 6 1 +net=DRAIN:1 +T 43400 47000 5 10 0 0 0 6 1 +device=none +T 43350 46400 5 7 1 1 0 7 1 +value=DRAIN +} +C 48850 45500 1 0 0 resistor-2.sym +{ +T 49300 45600 5 10 1 1 0 4 1 +refdes=R35 +T 49250 45850 5 10 0 0 0 0 1 +device=RESISTOR +T 49050 46000 5 10 0 1 0 0 1 +footprint=C0603.fp +T 49300 45750 5 10 1 1 0 3 1 +value=100kΩ +T 49050 46200 5 10 0 0 0 0 1 +symversion=0.1 +} +N 48450 45600 48850 45600 4 +C 48950 47000 1 90 1 input-2.sym +{ +T 48750 47000 5 10 0 0 90 6 1 +net=DRAIN2:1 +T 48250 46400 5 10 0 0 90 6 1 +device=none +T 48850 46350 5 7 1 1 90 7 1 +value=DRAIN2 +} +C 49950 44700 1 90 0 capacitor-1.sym +{ +T 49250 44900 5 10 0 0 90 0 1 +device=CAPACITOR +T 49050 44900 5 10 0 0 90 0 1 +symversion=0.2 +T 49250 44900 5 10 0 1 90 0 1 +footprint=C0603 +T 49650 45200 5 10 0 1 90 0 1 +value=100nF +T 49400 45100 5 10 1 1 0 2 1 +refdes=C33 +} +C 49650 44600 1 0 0 gnd-1.sym +N 49750 44900 49750 44700 4 +N 47850 44300 47850 44100 4 +C 49350 43100 1 0 0 resistor-2.sym +{ +T 49800 43200 5 10 1 1 0 4 1 +refdes=R36 +T 49750 43450 5 10 0 0 0 0 1 +device=RESISTOR +T 49550 43600 5 10 0 1 0 0 1 +footprint=C0603.fp +T 49800 43350 5 10 1 1 0 3 1 +value=100kΩ +T 49550 43800 5 10 0 0 0 0 1 +symversion=0.1 +} +C 50450 42300 1 90 0 capacitor-1.sym +{ +T 49750 42500 5 10 0 0 90 0 1 +device=CAPACITOR +T 49550 42500 5 10 0 0 90 0 1 +symversion=0.2 +T 49750 42500 5 10 0 1 90 0 1 +footprint=C0603 +T 50150 42800 5 10 0 1 90 0 1 +value=100nF +T 49900 42700 5 10 1 1 0 2 1 +refdes=C34 +} +C 50150 42200 1 0 0 gnd-1.sym +N 50250 42500 50250 42300 4 +N 49050 43200 49350 43200 4 +{ +T 49450 43250 5 5 1 1 0 6 1 +netname=DRAIN1 +} From 7575ad5cda345fe62b70dd0c321ec41f3dc545c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 14:47:55 +0100 Subject: [PATCH 02/33] new footprints --- fp/SIL_100_3.fp | 6 +++--- fp/SIL_100_4.fp | 8 ++++---- fp/SOIC_150_8.fp | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 fp/SOIC_150_8.fp diff --git a/fp/SIL_100_3.fp b/fp/SIL_100_3.fp index 1c5dec8..e88efdd 100644 --- a/fp/SIL_100_3.fp +++ b/fp/SIL_100_3.fp @@ -1,7 +1,7 @@ Element["" "SIL_100_3" "U?" "unknown" 0 0 0 0 0 50 ""] ( - Pin[0mil -100mil 70mil 20mil 76mil 30mil "" "1" ""] - Pin[0mil 0mil 70mil 20mil 76mil 30mil "" "2" ""] - Pin[0mil 100mil 70mil 20mil 76mil 30mil "" "3" ""] + Pin[0mil -100mil 70mil 20mil 76mil 38mil "" "1" ""] + Pin[0mil 0mil 70mil 20mil 76mil 38mil "" "2" ""] + Pin[0mil 100mil 70mil 20mil 76mil 38mil "" "3" ""] ElementLine[50mil -150mil 50mil 150mil 5mil] ElementLine[50mil 150mil -50mil 150mil 5mil] ElementLine[-50mil 150mil -50mil -150mil 5mil] diff --git a/fp/SIL_100_4.fp b/fp/SIL_100_4.fp index 16b7b22..65ca6b1 100644 --- a/fp/SIL_100_4.fp +++ b/fp/SIL_100_4.fp @@ -1,8 +1,8 @@ Element["" "SIL_100_4" "U?" "unknown" 0 0 0 0 0 50 ""] ( - Pin[0mil -150mil 70mil 20mil 76mil 30mil "" "1" ""] - Pin[0mil -50mil 70mil 20mil 76mil 30mil "" "2" ""] - Pin[0mil 50mil 70mil 20mil 76mil 30mil "" "3" ""] - Pin[0mil 150mil 70mil 20mil 76mil 30mil "" "4" ""] + Pin[0mil -150mil 70mil 20mil 76mil 38mil "" "1" ""] + Pin[0mil -50mil 70mil 20mil 76mil 38mil "" "2" ""] + Pin[0mil 50mil 70mil 20mil 76mil 38mil "" "3" ""] + Pin[0mil 150mil 70mil 20mil 76mil 38mil "" "4" ""] ElementLine[50mil -200mil 50mil 200mil 5mil] ElementLine[50mil 200mil -50mil 200mil 5mil] ElementLine[-50mil 200mil -50mil -200mil 5mil] diff --git a/fp/SOIC_150_8.fp b/fp/SOIC_150_8.fp new file mode 100644 index 0000000..04a2746 --- /dev/null +++ b/fp/SOIC_150_8.fp @@ -0,0 +1,15 @@ +Element["" "SOIC_150_8" "U?" "unknown" 0 0 0 0 0 50 ""] ( + Pad[-87.5mil -75mil -122.5mil -75mil 25mil 20mil 31mil "" "1" "square"] + Pad[-87.5mil -25mil -122.5mil -25mil 25mil 20mil 31mil "" "2" "square"] + Pad[-87.5mil 25mil -122.5mil 25mil 25mil 20mil 31mil "" "3" "square"] + Pad[-87.5mil 75mil -122.5mil 75mil 25mil 20mil 31mil "" "4" "square"] + Pad[87.5mil 75mil 122.5mil 75mil 25mil 20mil 31mil "" "5" "square"] + Pad[87.5mil 25mil 122.5mil 25mil 25mil 20mil 31mil "" "6" "square"] + Pad[87.5mil -25mil 122.5mil -25mil 25mil 20mil 31mil "" "7" "square"] + Pad[87.5mil -75mil 122.5mil -75mil 25mil 20mil 31mil "" "8" "square"] + ElementLine[-87.5mil -100mil -87.5mil 100mil 5mil] + ElementLine[-87.5mil 100mil 87.5mil 100mil 5mil] + ElementLine[87.5mil 100mil 87.5mil -100mil 5mil] + ElementLine[87.5mil -100mil -87.5mil -100mil 5mil] + ElementLine[-70mil -100mil -70mil 100mil 5mil] +) From 45a055527ed895e8bb4bbe71590c34ae0495f858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 18:10:25 +0100 Subject: [PATCH 03/33] gsch2pcb --- make-fp.py | 2 +- turbo.net | 37 +-- turbo.pcb | 697 ++++++++++++++++++++++++----------------------------- turbo.sch | 42 ++-- 4 files changed, 357 insertions(+), 421 deletions(-) diff --git a/make-fp.py b/make-fp.py index 62a7ebf..e536e42 100755 --- a/make-fp.py +++ b/make-fp.py @@ -3,7 +3,7 @@ from fp import * make(SIL, (3,4)) -make(SOIC, (14,)) +make(SOIC, (8, 14)) make(HEADER, (2, 10,)) make(SOT, (3,5)) make(SOD, ("C0603", "P1206")) diff --git a/turbo.net b/turbo.net index 3adccc3..f7cee09 100644 --- a/turbo.net +++ b/turbo.net @@ -1,22 +1,23 @@ -LEDR R11-1 D1-2 -ADJ_RF R2-2 R1-1 U4-4 +DRAIN1 Q1-3 R36-1 R34-1 +GATE1 Q1-1 C32-2 R32-2 +GATE R31-1 R32-1 C31-1 R30-2 +LEDR R11-1 D1-1 BYP C4-2 R13-1 U5-3 ADJ_CC R4-2 R3-1 U5-4 -Vbat R9-2 CONN1-5 U4-1 C21-1 C20-1 B1-1 R13-2 U5-1 +Vbat CONN1-5 C20-1 B1-1 R10-1 R13-2 U5-1 +SCK U2-2 U1-13 +MISO U2-8 U1-12 +MOSI U2-1 U1-11 Reset J1-1 R12-2 CONN1-2 U1-10 +PWM R30-1 U1-9 +Vcc U2-5 U2-3 U2-6 J1-3 R12-1 D1-2 C29-1 C26-1 C12-2 C11-2 C4-1 R10-2 R3-2 U5-5 U1-1 +TxD CONN1-3 R11-2 U1-7 RxD CONN1-4 U1-6 -ADC_B C30-1 R9-1 C3-2 R10-2 U1-5 -LED R11-2 U1-3 -ADC_V R7-1 C2-2 R8-2 U1-2 -RF_EN U4-3 U1-8 -ADC_T R5-1 C1-2 R6-2 U1-4 -SCLK U1-13 U2-2 -MISO U1-12 U2-3 -MOSI U1-11 U2-4 -MCLK U1-9 U2-5 -Vcc J1-3 R12-1 C29-1 C28-1 C27-1 C26-1 C12-2 C11-2 C4-1 R3-2 U5-5 U1-1 U2-6 -ANTENNA CONN1-1 U3-4 -Vrf R7-2 R5-2 C25-1 C24-1 C23-1 C10-2 C22-1 R1-2 U4-5 U3-3 -TxD CONN1-3 U1-7 U3-2 -GND J1-2 C30-2 C3-1 R10-1 C2-1 R8-1 C1-1 R6-1 CONN1-6 CONN1-7 CONN1-8 CONN1-9 D1-1 C29-2 C28-2 C27-2 C26-2 C12-1 C11-1 C25-2 C24-2 C23-2 C10-1 C22-2 R2-1 U4-2 R4-1 C21-2 C20-2 B1-2 U5-2 U1-14 U2-1 U3-1 \ - BOARD-1 +AIN1 C34-2 R36-2 U1-5 +SSEL U2-4 U1-2 +AIN2 C33-2 R35-2 U1-8 +ADC U1-4 +DRAIN R33-2 R34-2 U1-3 U3-4 +GATE2 R31-2 C30-2 Q2-1 U3-3 +DRAIN2 R35-1 R33-1 Q2-3 U3-2 +GND Q1-2 C34-1 C33-1 U2-7 C30-1 Q2-2 C32-1 C31-2 J1-2 CONN1-6 CONN1-7 CONN1-8 CONN1-9 C29-2 C26-2 C12-1 C11-1 R4-1 C20-2 B1-2 U5-2 U1-14 U3-1 BOARD-1 diff --git a/turbo.pcb b/turbo.pcb index c85e91e..75141ab 100644 --- a/turbo.pcb +++ b/turbo.pcb @@ -1,15 +1,15 @@ -# release: pcb 4.3.0 +# release: pcb v4.3.0-g9dea9f5a # To read pcb files, the pcb version (or the git source date) must be >= the file version FileVersion[20180318] PCB["TURBO" 60.0000mm 60.0000mm] -Grid[0.1000mm 0.0000 0.0000 1] +Grid[0.1000mm 0.0000 0.0000 0] PolyArea[200000000.000000] Thermal[0.500000] DRC[0.2000mm 0.1000mm 0.2500mm 0.0800mm 0.4000mm 0.2500mm] -Flags("rubberband,nameonpcb,alldirection,clearnew,newfullpoly") +Flags("rubberband,nameonpcb,alldirection,clearnew,newfullpoly,locknames") Groups("1,c:2:3:4,s:5:6:7") Styles["Signal,10.00mil,0.9000mm,0.4000mm,0.2000mm,0.6000mm:Power,0.5000mm,1.1000mm,0.6000mm,0.2500mm,0.8000mm:Fat,27.56mil,160.00mil,90.00mil,0.2500mm:Skinny,0.1000mm,31.50mil,0.3000mm,10.00mil"] Symbol[' ' 18.00mil] @@ -820,7 +820,7 @@ Via[19.9000mm 38.4000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] Element["lock" "gseboard" "BOARD" "turbo" 5.0000mm 5.0000mm 0.7500mm 0.5000mm 0 100 ""] ( - Pin[1.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] + Pin[1.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "warn,lock,thermal(2S,3S)"] Pin[3.7500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] Pin[6.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] Pin[8.7500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] @@ -871,12 +871,12 @@ Element["lock" "gseboard" "BOARD" "turbo" 5.0000mm 5.0000mm 0.7500mm 0.5000mm 0 ) -Element["" "SIL_100_4" "U3" "WRL-10534" 7.7500mm 16.0000mm 3.2500mm -0.3000mm 0 50 ""] +Element["" "SIL_100_4" "U3" "SIL4" 7.7500mm 16.0000mm 3.2500mm -0.3000mm 0 50 ""] ( Pin[0.0000 -150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "1" "1" "thermal(2X,3X)"] - Pin[0.0000 -50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "2" "2" ""] + Pin[0.0000 -50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "2" "2" "warn"] Pin[0.0000 50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "3" "3" ""] - Pin[0.0000 150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "4" "4" ""] + Pin[0.0000 150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "4" "4" "warn"] ElementLine [50.00mil -200.00mil 50.00mil 200.00mil 5.00mil] ElementLine [50.00mil 200.00mil -50.00mil 200.00mil 5.00mil] ElementLine [-50.00mil 200.00mil -50.00mil -200.00mil 5.00mil] @@ -885,72 +885,10 @@ Element["" "SIL_100_4" "U3" "WRL-10534" 7.7500mm 16.0000mm 3.2500mm -0.3000mm 0 ) -Element["" "MS5534C" "U2" "MS5534C" 13.0000mm 43.7000mm -1.0000mm -1.0000mm 0 100 ""] -( - Pad[3.6000mm 1.9100mm 5.4000mm 1.9100mm 1.0000mm 20.00mil 46.00mil "SCLK" "2" "square,edge2"] - Pad[3.6000mm 3.1800mm 5.4000mm 3.1800mm 1.0000mm 20.00mil 46.00mil "GND" "1" "square,edge2"] - Pad[3.6000mm 0.6400mm 5.4000mm 0.6400mm 1.0000mm 20.00mil 46.00mil "DOUT" "3" "square,edge2"] - Pad[3.6000mm -1.9100mm 5.4000mm -1.9100mm 1.0000mm 20.00mil 46.00mil "MCLK" "5" "square,edge2"] - Pad[3.6000mm -3.1800mm 5.4000mm -3.1800mm 1.0000mm 20.00mil 46.00mil "VDD" "6" "square,edge2"] - Pad[3.6000mm -0.6400mm 5.4000mm -0.6400mm 1.0000mm 20.00mil 46.00mil "DIN" "4" "square,edge2"] - Pad[-1.9000mm -4.5000mm -1.9000mm -4.2000mm 1.0000mm 20.00mil 46.00mil "7" "7" "square"] - Pad[-5.1000mm 1.9100mm -4.6000mm 1.9100mm 1.0000mm 20.00mil 46.00mil "13" "13" "square"] - Pad[-5.1000mm 3.1800mm -4.8000mm 3.1800mm 1.0000mm 20.00mil 46.00mil "14" "14" "square"] - Pad[-5.1000mm 0.6400mm -4.6000mm 0.6400mm 1.0000mm 20.00mil 46.00mil "12" "12" "square"] - Pad[-5.1000mm -1.9100mm -4.6000mm -1.9100mm 1.0000mm 20.00mil 46.00mil "10" "10" "square"] - Pad[-5.1000mm -3.1800mm -4.6000mm -3.1800mm 1.0000mm 20.00mil 46.00mil "9" "9" "square"] - Pad[-5.1000mm -0.6400mm -4.6000mm -0.6400mm 1.0000mm 20.00mil 46.00mil "11" "11" "square"] - Pad[-3.5000mm 4.2000mm -3.5000mm 4.5000mm 1.0000mm 20.00mil 46.00mil "8" "8" "square,edge2"] - Pad[-3.6500mm 3.0500mm -3.6500mm 4.6500mm 27.56mil 20.00mil 46.00mil "8" "8" "square,edge2"] - ElementLine [-4.0000mm -4.5000mm 4.0000mm -4.5000mm 0.2000mm] - ElementLine [-4.5000mm -4.0000mm -4.5000mm 4.0000mm 0.2000mm] - ElementLine [-4.0000mm 4.5000mm 4.0000mm 4.5000mm 0.2000mm] - ElementLine [4.5000mm -4.0000mm 4.5000mm 4.0000mm 0.2000mm] - ElementLine [4.5000mm -4.0000mm 4.0000mm -4.5000mm 0.2000mm] - ElementLine [-4.0000mm -4.5000mm -4.5000mm -4.0000mm 0.2000mm] - ElementLine [-4.5000mm 4.0000mm -4.0000mm 4.5000mm 0.2000mm] - ElementLine [4.5000mm 4.0000mm 4.0000mm 4.5000mm 0.2000mm] - ElementArc [0.0000 0.0000 3.5000mm 3.5000mm 180.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 3.5000mm 3.5000mm 90.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 3.5000mm 3.5000mm 0.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 3.5000mm 3.5000mm 270.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 2.5000mm 2.5000mm 180.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 2.5000mm 2.5000mm 90.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 2.5000mm 2.5000mm 0.000000 90.000000 0.2000mm] - ElementArc [0.0000 0.0000 2.5000mm 2.5000mm 270.000000 90.000000 0.2000mm] - - ) - -Element["" "SOT23_5" "U4" "LT1761-SD" 19.4000mm 26.5000mm -0.4000mm -0.4000mm 0 50 ""] -( - Pad[-0.9500mm 1.0000mm -0.9500mm 1.4000mm 0.6000mm 20.00mil 0.7524mm "IN" "1" "square,edge2"] - Pad[0.0000 1.0000mm 0.0000 1.4000mm 0.6000mm 20.00mil 0.7524mm "GND" "2" "square,edge2"] - Pad[0.9500mm 1.0000mm 0.9500mm 1.4000mm 0.6000mm 20.00mil 0.7524mm "_SHDN_" "3" "square,edge2"] - Pad[0.9500mm -1.4000mm 0.9500mm -1.0000mm 0.6000mm 20.00mil 0.7524mm "ADJ" "4" "square"] - Pad[-0.9500mm -1.4000mm -0.9500mm -1.0000mm 0.6000mm 20.00mil 0.7524mm "OUT" "5" "square"] - ElementLine [-1.4250mm 1.0000mm 1.4250mm 1.0000mm 5.00mil] - ElementLine [1.4250mm -1.0000mm 1.4250mm 1.0000mm 5.00mil] - ElementLine [-1.4250mm -1.0000mm 1.4250mm -1.0000mm 5.00mil] - ElementLine [-1.4250mm -1.0000mm -1.4250mm 1.0000mm 5.00mil] - - ) - -Element["onsolder" "P1206" "C21" "10µF" 19.1000mm 26.0000mm 0.6500mm -0.3000mm 2 50 "onsolder"] -( - Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-60.00mil -30.00mil -60.00mil 30.00mil 5.00mil] - ElementLine [-60.00mil -30.00mil 60.00mil -30.00mil 5.00mil] - ElementLine [60.00mil -30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [-60.00mil 30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [-51.00mil -30.00mil -51.00mil 30.00mil 5.00mil] - - ) - Element["" "C0603" "D1" "SMD-LED" 6.0000mm 49.4000mm 0.4500mm 0.3000mm 1 50 ""] ( - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "CATHODE" "1" "square"] - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "ANODE" "2" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "CATHODE" "1" "square,warn"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "ANODE" "2" "square,warn"] ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] @@ -970,76 +908,6 @@ Element["onsolder" "P1206" "C29" "10µF" 19.6000mm 32.3000mm 0.5000mm -0.3500mm ) -Element["onsolder" "P1206" "C25" "10µF" 13.1000mm 14.7000mm 0.3500mm 0.5000mm 3 50 "onsolder"] -( - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 51.00mil 30.00mil 51.00mil 5.00mil] - - ) - -Element["onsolder" "P1206" "C24" "10µF" 19.2000mm 22.8000mm 0.7000mm -0.2500mm 2 50 "onsolder"] -( - Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-60.00mil -30.00mil -60.00mil 30.00mil 5.00mil] - ElementLine [-60.00mil -30.00mil 60.00mil -30.00mil 5.00mil] - ElementLine [60.00mil -30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [-60.00mil 30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [-51.00mil -30.00mil -51.00mil 30.00mil 5.00mil] - - ) - -Element["onsolder" "P1206" "C23" "10µF" 15.1000mm 14.7000mm 0.4000mm 0.6000mm 3 50 "onsolder"] -( - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 51.00mil 30.00mil 51.00mil 5.00mil] - - ) - -Element["onsolder" "C0603" "C10" "100nF" 9.5000mm 14.7000mm -0.7500mm 0.5500mm 3 50 "onsolder"] -( - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] - - ) - -Element["onsolder" "P1206" "C22" "10µF" 11.1000mm 14.7000mm 0.3500mm 0.7000mm 3 50 "onsolder"] -( - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 51.00mil 30.00mil 51.00mil 5.00mil] - - ) - -Element["" "C0603.fp" "R1" "330kΩ" 19.5000mm 24.1000mm 1.5000mm -0.4000mm 0 50 ""] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - - ) - Element["" "C0603.fp" "R12" "∞Ω" 18.7000mm 38.2000mm 0.6500mm 0.4000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] @@ -1053,11 +921,11 @@ Element["" "C0603.fp" "R12" "∞Ω" 18.7000mm 38.2000mm 0.6500mm 0.4000mm 1 50 " Element["" "SUBD9_PINS" "CONN1" "D9_pigtail" 10.5000mm 30.5000mm -4.2000mm 0.9000mm 1 50 ""] ( - Pin[1.4200mm -5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "1" "1" ""] + Pin[1.4200mm -5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "1" "1" "warn"] Pin[1.4200mm -2.7700mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "2" "2" ""] - Pin[1.4200mm 0.0000 2.0080mm 20.00mil 2.1604mm 1.0000mm "3" "3" ""] + Pin[1.4200mm 0.0000 2.0080mm 20.00mil 2.1604mm 1.0000mm "3" "3" "warn"] Pin[1.4200mm 2.7700mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "4" "4" ""] - Pin[1.4200mm 5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "5" "5" ""] + Pin[1.4200mm 5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "5" "5" "warn"] Pin[-1.4200mm -4.1550mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "6" "6" "thermal(2X,3X)"] Pin[-1.4200mm -1.3850mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "7" "7" "thermal(2X,3X)"] Pin[-1.4200mm 1.3850mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "8" "8" "thermal(2X,3X)"] @@ -1071,24 +939,13 @@ Element["" "SUBD9_PINS" "CONN1" "D9_pigtail" 10.5000mm 30.5000mm -4.2000mm 0.900 ) -Element["" "C0603.fp" "R2" "220kΩ" 19.5000mm 22.9000mm 1.5000mm -0.3000mm 0 50 ""] -( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - Element["" "SOIC_150_14" "U1" "ATtiny4x4SS" 24.4000mm 44.1000mm -0.3000mm -0.4000mm 0 50 ""] ( Pad[87.50mil 150.00mil 122.50mil 150.00mil 25.00mil 20.00mil 31.00mil "VCC" "1" "square,edge2"] Pad[87.50mil 100.00mil 122.50mil 100.00mil 25.00mil 20.00mil 31.00mil "PA4 (SS)" "2" "square,edge2"] Pad[87.50mil 50.00mil 122.50mil 50.00mil 25.00mil 20.00mil 31.00mil "PA5 (WOB)" "3" "square,edge2"] Pad[87.50mil 0.0000 122.50mil 0.0000 25.00mil 20.00mil 31.00mil "PA6" "4" "square,edge2"] - Pad[87.50mil -50.00mil 122.50mil -50.00mil 25.00mil 20.00mil 31.00mil "PA7" "5" "square,edge2"] + Pad[87.50mil -50.00mil 122.50mil -50.00mil 25.00mil 20.00mil 31.00mil "PA7" "5" "square,warn,edge2"] Pad[87.50mil -100.00mil 122.50mil -100.00mil 25.00mil 20.00mil 31.00mil "PB3 (RxD)" "6" "square,edge2"] Pad[87.50mil -150.00mil 122.50mil -150.00mil 25.00mil 20.00mil 31.00mil "PB2 (TxD)" "7" "square,edge2"] Pad[-122.50mil -150.00mil -87.50mil -150.00mil 25.00mil 20.00mil 31.00mil "(WO1) PB1" "8" "square"] @@ -1106,98 +963,10 @@ Element["" "SOIC_150_14" "U1" "ATtiny4x4SS" 24.4000mm 44.1000mm -0.3000mm -0.400 ) -Element["" "C0603.fp" "R9" "10MΩ" 26.1000mm 37.3000mm -0.4000mm -1.5000mm 1 50 ""] +Element["onsolder" "C0603.fp" "R10" "∞Ω/0Ω" 27.7000mm 41.8000mm 2.4000mm -0.3500mm 2 50 "onsolder"] ( - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] - - ) - -Element["onsolder" "C0603" "C3" "100nF" 27.7000mm 42.9000mm 2.0000mm -0.3500mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - -Element["onsolder" "C0603.fp" "R10" "1MΩ" 27.7000mm 41.8000mm 2.4000mm -0.3500mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - -Element["" "C0603.fp" "R7" "10kΩ" 23.5000mm 37.3000mm -0.4000mm -1.5000mm 1 50 ""] -( - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] - - ) - -Element["onsolder" "C0603" "C2" "100nF" 27.7000mm 47.7000mm 2.0000mm -1.5000mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - -Element["onsolder" "C0603.fp" "R8" "10kΩ" 27.7000mm 46.6000mm 2.0000mm 0.7000mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - -Element["onsolder" "C0603" "C1" "100nF" 27.7000mm 45.3000mm 2.0000mm -1.5000mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] - - ) - -Element["" "C0603.fp" "R5" "10kΩ" 24.8000mm 37.3000mm -0.4000mm -1.6000mm 1 50 ""] -( - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] - - ) - -Element["onsolder" "C0603.fp" "R6" "10kΩ_NTC" 27.7000mm 44.2000mm 2.0500mm 0.7000mm 2 50 "onsolder"] -( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square,warn"] + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square,warn"] ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] @@ -1219,7 +988,7 @@ Element["onsolder" "C0603" "C12" "100nF" 23.9000mm 48.9000mm 0.6000mm -1.3000mm Element["" "C0603.fp" "R11" "10kΩ" 28.6000mm 46.3000mm 0.7000mm 0.5000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square,warn"] ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] @@ -1227,13 +996,13 @@ Element["" "C0603.fp" "R11" "10kΩ" 28.6000mm 46.3000mm 0.7000mm 0.5000mm 1 50 " ) -Element["" "KEYSTONE-1025-7" "B1" "6V" 39.9000mm 26.0000mm -2.4000mm -0.7000mm 0 100 ""] +Element["lock" "KEYSTONE-1025-7" "B1" "6V" 39.9000mm 26.0000mm -2.4000mm -0.7000mm 0 100 "selected"] ( - Pin[-325.00mil -188.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "edge2"] - Pin[325.00mil -187.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "edge2"] - Pin[0.0000 375.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "edge2"] - Pin[-15.1000mm 0.0000 3.0000mm 0.5000mm 3.1500mm 1.5000mm "+" "1" "square,edge2"] - Pin[5.4000mm 0.0000 3.0000mm 0.5000mm 3.1500mm 1.5000mm "-" "2" "square,edge2,thermal(2X,3X)"] + Pin[-325.00mil -188.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "lock,edge2"] + Pin[325.00mil -187.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "lock,edge2"] + Pin[0.0000 375.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "lock,edge2"] + Pin[-15.1000mm 0.0000 3.0000mm 0.5000mm 3.1500mm 1.5000mm "+" "1" "square,lock,edge2"] + Pin[5.4000mm 0.0000 3.0000mm 0.5000mm 3.1500mm 1.5000mm "-" "2" "square,lock,edge2,thermal(2X,3X)"] ElementLine [-17.0000mm -3.0000mm -17.0000mm 3.0000mm 10.00mil] ElementLine [-17.0000mm 3.0000mm -14.0000mm 3.0000mm 10.00mil] ElementLine [-17.0000mm -3.0000mm -14.0000mm -3.0000mm 10.00mil] @@ -1311,30 +1080,6 @@ Element["onsolder" "P1206" "C20" "10µF" 19.6000mm 30.1000mm 0.6500mm -0.4000mm ) -Element["onsolder" "P1206" "C28" "10µF" 12.6000mm 43.7000mm 0.5500mm 0.8500mm 3 50 "onsolder"] -( - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -51.00mil 30.00mil -51.00mil 5.00mil] - - ) - -Element["onsolder" "P1206" "C27" "10µF" 14.6000mm 43.7000mm 0.4500mm 0.7500mm 3 50 "onsolder"] -( - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -51.00mil 30.00mil -51.00mil 5.00mil] - - ) - Element["onsolder" "P1206" "C26" "10µF" 16.6000mm 43.7000mm 0.4500mm 0.6500mm 3 50 "onsolder"] ( Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] @@ -1358,18 +1103,6 @@ Element["onsolder" "C0603" "C11" "100nF" 18.2000mm 43.7000mm 1.3500mm 0.5500mm 3 ) -Element["onsolder" "P1206" "C30" "10µF" 27.7000mm 40.2000mm 0.5000mm -0.4000mm 2 50 "onsolder"] -( - Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-60.00mil 30.00mil -60.00mil -30.00mil 5.00mil] - ElementLine [-60.00mil -30.00mil 60.00mil -30.00mil 5.00mil] - ElementLine [60.00mil -30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [60.00mil 30.00mil -60.00mil 30.00mil 5.00mil] - ElementLine [-51.00mil 30.00mil -51.00mil -30.00mil 5.00mil] - - ) - Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm 0 50 ""] ( Pin[0.0000 -100.00mil 70.00mil 20.00mil 76.00mil 30.00mil "1" "1" ""] @@ -1382,6 +1115,222 @@ Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm ElementLine [50.00mil -50.00mil -50.00mil -50.00mil 5.00mil] ) + +Element["" "C0603.fp" "R30" "100kΩ" 12.2000mm 11.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "SOIC_150_8" "U2" "AT45DB161E" 11.9000mm 43.8000mm 0.0000 0.0000 0 50 ""] +( + Pad[-122.50mil -75.00mil -87.50mil -75.00mil 25.00mil 20.00mil 31.00mil "SI" "1" "square"] + Pad[-122.50mil -25.00mil -87.50mil -25.00mil 25.00mil 20.00mil 31.00mil "SCK" "2" "square"] + Pad[-122.50mil 25.00mil -87.50mil 25.00mil 25.00mil 20.00mil 31.00mil "_RESET_" "3" "square"] + Pad[-122.50mil 75.00mil -87.50mil 75.00mil 25.00mil 20.00mil 31.00mil "_CS_" "4" "square"] + Pad[87.50mil 75.00mil 122.50mil 75.00mil 25.00mil 20.00mil 31.00mil "_WP_" "5" "square,edge2"] + Pad[87.50mil 25.00mil 122.50mil 25.00mil 25.00mil 20.00mil 31.00mil "VCC" "6" "square,edge2"] + Pad[87.50mil -25.00mil 122.50mil -25.00mil 25.00mil 20.00mil 31.00mil "GND" "7" "square,edge2"] + Pad[87.50mil -75.00mil 122.50mil -75.00mil 25.00mil 20.00mil 31.00mil "SO" "8" "square,edge2"] + ElementLine [-87.50mil -100.00mil -87.50mil 100.00mil 5.00mil] + ElementLine [-87.50mil 100.00mil 87.50mil 100.00mil 5.00mil] + ElementLine [87.50mil 100.00mil 87.50mil -100.00mil 5.00mil] + ElementLine [87.50mil -100.00mil -87.50mil -100.00mil 5.00mil] + ElementLine [-70.00mil -100.00mil -70.00mil 100.00mil 5.00mil] + + ) + +Element["" "SOT23_3" "Q1" "2N7002" 22.7000mm 14.3000mm 0.0000 0.0000 0 50 ""] +( + Pad[-1.4000mm -0.9500mm -1.0000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square"] + Pad[-1.4000mm 0.9500mm -1.0000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square"] + Pad[1.0000mm 0.0000 1.4000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square,edge2"] + ElementLine [-1.0000mm -1.4250mm -1.0000mm 1.4250mm 5.00mil] + ElementLine [-1.0000mm 1.4250mm 1.0000mm 1.4250mm 5.00mil] + ElementLine [1.0000mm 1.4250mm 1.0000mm -1.4250mm 5.00mil] + ElementLine [1.0000mm -1.4250mm -1.0000mm -1.4250mm 5.00mil] + + ) + +Element["" "SOT23_3" "Q2" "2N7002" 18.8000mm 14.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-1.4000mm -0.9500mm -1.0000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square"] + Pad[-1.4000mm 0.9500mm -1.0000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square"] + Pad[1.0000mm 0.0000 1.4000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square,edge2"] + ElementLine [-1.0000mm -1.4250mm -1.0000mm 1.4250mm 5.00mil] + ElementLine [-1.0000mm 1.4250mm 1.0000mm 1.4250mm 5.00mil] + ElementLine [1.0000mm 1.4250mm 1.0000mm -1.4250mm 5.00mil] + ElementLine [1.0000mm -1.4250mm -1.0000mm -1.4250mm 5.00mil] + + ) + +Element["" "P1206" "C31" "10µF" 14.8000mm 18.1000mm 0.0000 0.0000 0 50 ""] +( + Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "square"] + Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "square"] + ElementLine [-60.00mil -30.00mil -60.00mil 30.00mil 5.00mil] + ElementLine [-60.00mil 30.00mil 60.00mil 30.00mil 5.00mil] + ElementLine [60.00mil 30.00mil 60.00mil -30.00mil 5.00mil] + ElementLine [60.00mil -30.00mil -60.00mil -30.00mil 5.00mil] + ElementLine [-51.00mil -30.00mil -51.00mil 30.00mil 5.00mil] + + ) + +Element["" "C0603" "C34" "100nF" 15.9000mm 11.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R36" "100kΩ" 21.5000mm 11.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603" "C33" "100nF" 27.0000mm 11.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R35" "100kΩ" 32.6000mm 11.5000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R31" "100kΩ" 27.2000mm 13.8000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R33" "100kΩ" 32.7000mm 13.8000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603" "C30" "100nF" 38.3000mm 13.8000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R34" "100kΩ" 27.7000mm 16.4000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603" "C32" "100nF" 33.2000mm 16.4000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R32" "100kΩ" 38.8000mm 16.4000mm 0.0000 0.0000 0 50 ""] +( + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + + ) +Rat[16.7128mm 11.4492mm 0 22.3128mm 11.4492mm 0 ""] +Rat[22.3128mm 11.4492mm 0 25.8000mm 1500.00mil 0 ""] +Rat[27.8128mm 11.4492mm 0 33.4128mm 11.4492mm 0 ""] +Rat[27.8128mm 11.4492mm 0 21.6000mm 27.9000mm 0 ""] +Rat[1319.40mil 13.7492mm 0 28.5128mm 16.3492mm 0 ""] +Rat[28.5128mm 16.3492mm 0 11.9200mm 24.9600mm 0 ""] +Rat[11.9200mm 24.9600mm 0 27.1000mm 45.4000mm 0 ""] +Rat[24.1000mm 14.3000mm 0 26.8872mm 16.3492mm 0 ""] +Rat[24.1000mm 14.3000mm 0 20.6872mm 11.4492mm 0 ""] +Rat[20.2000mm 14.5000mm 0 1255.40mil 13.7492mm 0 ""] +Rat[1255.40mil 13.7492mm 0 31.7872mm 11.4492mm 0 ""] +Rat[20.2000mm 14.5000mm 0 7.7500mm 14.7300mm 0 ""] +Rat[13.4030mm 17.8460mm 0 13.0128mm 11.4492mm 0 ""] +Rat[13.0128mm 11.4492mm 0 26.3872mm 13.7492mm 0 ""] +Rat[26.3872mm 13.7492mm 0 37.9872mm 16.3492mm 0 ""] +Rat[34.0128mm 16.3492mm 0 39.6128mm 16.3492mm 0 ""] +Rat[34.0128mm 16.3492mm 0 21.3000mm 13.3500mm 0 ""] +Rat[39.1128mm 13.7492mm 0 28.0128mm 13.7492mm 0 ""] +Rat[28.0128mm 13.7492mm 0 17.4000mm 13.5500mm 0 ""] +Rat[17.4000mm 13.5500mm 0 15.1000mm 15.7000mm 3 ""] +Rat[37.4872mm 13.7492mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[16.1970mm 17.8460mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[32.3872mm 16.3492mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[26.1872mm 11.4492mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[15.0872mm 11.4492mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[21.3000mm 15.2500mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[17.4000mm 15.4500mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[15.0115mm 43.1650mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[28.5492mm 47.1128mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[17.5000mm 44.3000mm 0 15.0115mm 41.8950mm 0 ""] +Rat[17.5000mm 43.1000mm 0 8.7885mm 41.8950mm 0 ""] +Rat[11.3872mm 11.4492mm 0 17.5000mm 41.8000mm 0 ""] +Rat[17.5000mm 45.6000mm 0 8.7885mm 43.1650mm 0 ""] +Rat[24.2000mm 43.8000mm 0 8.7885mm 45.7050mm 0 ""] +Rat[6.3000mm 22.3000mm 0 7.7500mm 22.2500mm 0 ""] +Rat[15.0000mm 35.0000mm 3 52.5000mm 51.0000mm 3 "via"] +Rat[21.3000mm 33.9000mm 3 52.5000mm 51.0000mm 3 "via"] +Rat[25.8000mm 42.8000mm 3 52.5000mm 51.0000mm 3 "via"] +Rat[8.7885mm 44.4350mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[15.0115mm 45.7050mm 0 52.5000mm 51.0000mm 3 "via"] +Rat[15.0115mm 44.4350mm 0 52.5000mm 51.0000mm 3 "via"] Layer(1 "top" "copper") ( Line[53.2000mm 51.6000mm 53.5000mm 51.6000mm 10.00mil 20.00mil "clearline"] @@ -1674,14 +1623,6 @@ Layer(9 "top silk" "silk") ( Line[5.0000mm 10.0000mm 55.0000mm 10.0000mm 0.2000mm 20.00mil "clearline,lock"] Line[5.0000mm 51.0000mm 55.0000mm 51.0000mm 0.2000mm 20.00mil "clearline,lock"] - Line[10.2000mm 10.7000mm 25.5000mm 10.7000mm 0.2000mm 20.00mil "clearline"] - Line[25.5000mm 10.7000mm 25.5000mm 21.2000mm 0.2000mm 20.00mil "clearline"] - Line[25.5000mm 21.2000mm 10.2000mm 21.2000mm 0.2000mm 20.00mil "clearline"] - Line[10.2000mm 21.2000mm 10.2000mm 10.7000mm 0.2000mm 20.00mil "clearline"] - Line[7.7500mm 12.1900mm 9.8900mm 12.1900mm 0.2000mm 20.00mil "clearline"] - Line[7.7500mm 14.7300mm 9.8700mm 14.7300mm 0.2000mm 20.00mil "clearline"] - Line[7.7500mm 17.2700mm 9.8700mm 17.2700mm 0.2000mm 20.00mil "clearline"] - Line[7.7500mm 19.8100mm 9.9100mm 19.8100mm 0.2000mm 20.00mil "clearline"] Line[5.7500mm 49.7500mm 6.2500mm 49.7500mm 0.1000mm 20.00mil "clearline"] Line[6.2500mm 49.7500mm 6.0000mm 49.3000mm 0.1000mm 20.00mil "clearline"] Line[6.0000mm 49.3000mm 5.7500mm 49.7500mm 0.1000mm 20.00mil "clearline"] @@ -1691,44 +1632,27 @@ Layer(9 "top silk" "silk") ) NetList() ( - Net("ADC_B" "(unknown)") + Net("ADC" "(unknown)") ( - Connect("C3-2") - Connect("C30-1") - Connect("R9-1") - Connect("R10-2") - Connect("U1-5") - ) - Net("ADC_T" "(unknown)") - ( - Connect("C1-2") - Connect("R5-1") - Connect("R6-2") Connect("U1-4") ) - Net("ADC_V" "(unknown)") - ( - Connect("C2-2") - Connect("R7-1") - Connect("R8-2") - Connect("U1-2") - ) Net("ADJ_CC" "(unknown)") ( Connect("R3-1") Connect("R4-2") Connect("U5-4") ) - Net("ADJ_RF" "(unknown)") + Net("AIN1" "(unknown)") ( - Connect("R1-1") - Connect("R2-2") - Connect("U4-4") + Connect("C34-2") + Connect("R36-2") + Connect("U1-5") ) - Net("ANTENNA" "(unknown)") + Net("AIN2" "(unknown)") ( - Connect("CONN1-1") - Connect("U3-4") + Connect("C33-2") + Connect("R35-2") + Connect("U1-8") ) Net("BYP" "(unknown)") ( @@ -1736,68 +1660,92 @@ NetList() Connect("R13-1") Connect("U5-3") ) + Net("DRAIN" "(unknown)") + ( + Connect("R33-2") + Connect("R34-2") + Connect("U1-3") + Connect("U3-4") + ) + Net("DRAIN1" "(unknown)") + ( + Connect("Q1-3") + Connect("R34-1") + Connect("R36-1") + ) + Net("DRAIN2" "(unknown)") + ( + Connect("Q2-3") + Connect("R33-1") + Connect("R35-1") + Connect("U3-2") + ) + Net("GATE" "(unknown)") + ( + Connect("C31-1") + Connect("R30-2") + Connect("R31-1") + Connect("R32-1") + ) + Net("GATE1" "(unknown)") + ( + Connect("C32-2") + Connect("Q1-1") + Connect("R32-2") + ) + Net("GATE2" "(unknown)") + ( + Connect("C30-2") + Connect("Q2-1") + Connect("R31-2") + Connect("U3-3") + ) Net("GND" "(unknown)") ( Connect("B1-2") Connect("BOARD-1") - Connect("C1-1") - Connect("C2-1") - Connect("C3-1") - Connect("C10-1") Connect("C11-1") Connect("C12-1") Connect("C20-2") - Connect("C21-2") - Connect("C22-2") - Connect("C23-2") - Connect("C24-2") - Connect("C25-2") Connect("C26-2") - Connect("C27-2") - Connect("C28-2") Connect("C29-2") - Connect("C30-2") + Connect("C30-1") + Connect("C31-2") + Connect("C32-1") + Connect("C33-1") + Connect("C34-1") Connect("CONN1-6") Connect("CONN1-7") Connect("CONN1-8") Connect("CONN1-9") - Connect("D1-1") Connect("J1-2") - Connect("R2-1") + Connect("Q1-2") + Connect("Q2-2") Connect("R4-1") - Connect("R6-1") - Connect("R8-1") - Connect("R10-1") Connect("U1-14") - Connect("U2-1") + Connect("U2-7") Connect("U3-1") - Connect("U4-2") Connect("U5-2") ) - Net("LED" "(unknown)") - ( - Connect("R11-2") - Connect("U1-3") - ) Net("LEDR" "(unknown)") ( - Connect("D1-2") + Connect("D1-1") Connect("R11-1") ) - Net("MCLK" "(unknown)") - ( - Connect("U1-9") - Connect("U2-5") - ) Net("MISO" "(unknown)") ( Connect("U1-12") - Connect("U2-3") + Connect("U2-8") ) Net("MOSI" "(unknown)") ( Connect("U1-11") - Connect("U2-4") + Connect("U2-1") + ) + Net("PWM" "(unknown)") + ( + Connect("R30-1") + Connect("U1-9") ) Net("Reset" "(unknown)") ( @@ -1806,36 +1754,34 @@ NetList() Connect("R12-2") Connect("U1-10") ) - Net("RF_EN" "(unknown)") - ( - Connect("U1-8") - Connect("U4-3") - ) Net("RxD" "(unknown)") ( Connect("CONN1-4") Connect("U1-6") ) - Net("SCLK" "(unknown)") + Net("SCK" "(unknown)") ( Connect("U1-13") Connect("U2-2") ) + Net("SSEL" "(unknown)") + ( + Connect("U1-2") + Connect("U2-4") + ) Net("TxD" "(unknown)") ( Connect("CONN1-3") + Connect("R11-2") Connect("U1-7") - Connect("U3-2") ) Net("Vbat" "(unknown)") ( Connect("B1-1") Connect("C20-1") - Connect("C21-1") Connect("CONN1-5") - Connect("R9-2") + Connect("R10-1") Connect("R13-2") - Connect("U4-1") Connect("U5-1") ) Net("Vcc" "(unknown)") @@ -1844,27 +1790,16 @@ NetList() Connect("C11-2") Connect("C12-2") Connect("C26-1") - Connect("C27-1") - Connect("C28-1") Connect("C29-1") + Connect("D1-2") Connect("J1-3") Connect("R3-2") + Connect("R10-2") Connect("R12-1") Connect("U1-1") + Connect("U2-3") + Connect("U2-5") Connect("U2-6") Connect("U5-5") ) - Net("Vrf" "(unknown)") - ( - Connect("C10-2") - Connect("C22-1") - Connect("C23-1") - Connect("C24-1") - Connect("C25-1") - Connect("R1-2") - Connect("R5-2") - Connect("R7-2") - Connect("U3-3") - Connect("U4-5") - ) ) diff --git a/turbo.sch b/turbo.sch index 61a3ade..63236eb 100644 --- a/turbo.sch +++ b/turbo.sch @@ -214,7 +214,7 @@ C 53400 43300 1 270 0 capacitor-4.sym T 54500 43100 5 10 0 0 270 0 1 device=POLARIZED_CAPACITOR T 53550 42500 5 10 1 1 180 2 1 -refdes=C27 +refdes=C29 T 54100 43100 5 10 0 0 270 0 1 symversion=0.2 T 54100 43100 5 10 0 1 270 0 1 @@ -529,17 +529,6 @@ device=none T 43350 46700 5 7 1 1 0 7 1 value=GATE2 } -C 48550 42400 1 0 0 nmos-ub.sym -{ -T 49150 43300 5 10 0 0 0 0 1 -device=NMOS_TRANSISTOR -T 49250 43000 5 10 1 1 0 0 1 -refdes=Q31 -T 49250 42800 5 10 1 1 0 0 1 -footprint=UB -T 49250 42600 5 10 1 1 0 0 1 -value=2N7616UB -} C 48950 41400 1 0 0 gnd-1.sym C 46650 42500 1 0 0 resistor-2.sym { @@ -656,12 +645,12 @@ C 47950 44800 1 0 0 nmos-ub.sym { T 48550 45700 5 10 0 0 0 0 1 device=NMOS_TRANSISTOR -T 48650 45400 5 10 1 1 0 0 1 -refdes=Q30 -T 48650 45200 5 10 1 1 0 0 1 -footprint=UB -T 48650 45000 5 10 1 1 0 0 1 -value=2N7616UB +T 48550 45400 5 10 1 1 0 0 1 +refdes=Q2 +T 48550 45200 5 10 1 1 0 0 1 +footprint=SOT23_3 +T 48550 45000 5 10 1 1 0 0 1 +value=2N7002 } C 48350 44600 1 0 0 gnd-1.sym C 48050 44100 1 90 0 capacitor-1.sym @@ -762,11 +751,11 @@ U5 unpopulated. C 49500 47400 1 0 0 AT45DB081D-1.sym { T 50500 49000 5 10 1 1 0 4 1 -refdes=U? +refdes=U2 T 49800 50350 5 10 0 1 0 0 1 device=AT45DB081D -T 50500 48450 5 10 1 1 0 4 1 -footprint=SOIC8 +T 50500 48400 5 10 1 1 0 4 1 +footprint=SOIC_150_8 T 49800 51600 5 10 0 0 0 0 1 symversion=1.0 T 50500 48750 5 10 1 1 0 4 1 @@ -901,3 +890,14 @@ N 49050 43200 49350 43200 4 T 49450 43250 5 5 1 1 0 6 1 netname=DRAIN1 } +C 48550 42400 1 0 0 nmos-ub.sym +{ +T 49150 43300 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 49150 43000 5 10 1 1 0 0 1 +refdes=Q1 +T 49150 42800 5 10 1 1 0 0 1 +footprint=SOT23_3 +T 49150 42600 5 10 1 1 0 0 1 +value=2N7002 +} From 94625ffdc8d0180cd5ba7817e5d16e0ac7e56bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 20:56:59 +0100 Subject: [PATCH 04/33] layout complete --- turbo.net | 7 +- turbo.pcb | 829 +++++++++++++++++++++++++++--------------------------- turbo.sch | 542 ++++++++++++++++++----------------- 3 files changed, 681 insertions(+), 697 deletions(-) diff --git a/turbo.net b/turbo.net index f7cee09..1742551 100644 --- a/turbo.net +++ b/turbo.net @@ -1,6 +1,5 @@ DRAIN1 Q1-3 R36-1 R34-1 GATE1 Q1-1 C32-2 R32-2 -GATE R31-1 R32-1 C31-1 R30-2 LEDR R11-1 D1-1 BYP C4-2 R13-1 U5-3 ADJ_CC R4-2 R3-1 U5-4 @@ -16,8 +15,8 @@ RxD CONN1-4 U1-6 AIN1 C34-2 R36-2 U1-5 SSEL U2-4 U1-2 AIN2 C33-2 R35-2 U1-8 -ADC U1-4 +GATE R31-1 R32-1 C31-1 R30-2 U1-4 DRAIN R33-2 R34-2 U1-3 U3-4 -GATE2 R31-2 C30-2 Q2-1 U3-3 -DRAIN2 R35-1 R33-1 Q2-3 U3-2 +DRAIN2 R35-1 R33-1 Q2-3 U3-3 +GATE2 R31-2 C30-2 Q2-1 U3-2 GND Q1-2 C34-1 C33-1 U2-7 C30-1 Q2-2 C32-1 C31-2 J1-2 CONN1-6 CONN1-7 CONN1-8 CONN1-9 C29-2 C26-2 C12-1 C11-1 R4-1 C20-2 B1-2 U5-2 U1-14 U3-1 BOARD-1 diff --git a/turbo.pcb b/turbo.pcb index 75141ab..d1d844c 100644 --- a/turbo.pcb +++ b/turbo.pcb @@ -5,13 +5,13 @@ FileVersion[20180318] PCB["TURBO" 60.0000mm 60.0000mm] -Grid[0.1000mm 0.0000 0.0000 0] +Grid[0.1000mm 0.0000 0.0000 1] PolyArea[200000000.000000] Thermal[0.500000] -DRC[0.2000mm 0.1000mm 0.2500mm 0.0800mm 0.4000mm 0.2500mm] -Flags("rubberband,nameonpcb,alldirection,clearnew,newfullpoly,locknames") -Groups("1,c:2:3:4,s:5:6:7") -Styles["Signal,10.00mil,0.9000mm,0.4000mm,0.2000mm,0.6000mm:Power,0.5000mm,1.1000mm,0.6000mm,0.2500mm,0.8000mm:Fat,27.56mil,160.00mil,90.00mil,0.2500mm:Skinny,0.1000mm,31.50mil,0.3000mm,10.00mil"] +DRC[0.2000mm 0.1000mm 0.2500mm 0.0800mm 0.4000mm 0.2000mm] +Flags("nameonpcb,alldirection,clearnew,newfullpoly") +Groups("1,c:4,s:5:2,3,6,7") +Styles["Signal,10.00mil,0.9000mm,0.4000mm,0.2000mm,0.6000mm:Power,0.5000mm,1.1000mm,0.6000mm,0.2500mm,0.8000mm:Fat,27.56mil,2.5000mm,2.2000mm,0.2500mm:Skinny,0.1000mm,31.50mil,0.3000mm,10.00mil"] Symbol[' ' 18.00mil] ( ) @@ -792,35 +792,36 @@ Symbol['~' 12.00mil] SymbolLine[15.00mil 35.00mil 20.00mil 35.00mil 8.00mil] SymbolLine[20.00mil 35.00mil 25.00mil 30.00mil 8.00mil] ) -Attribute("PCB::grid::unit" "mil") +Attribute("PCB::grid::unit" "mm") Attribute("PCB::grid::size" "0.1000mm") -Via[19.4000mm 27.0000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(2X,3X)"] -Via[25.8000mm 44.1000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[25.8000mm 46.5000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[25.8000mm 42.8000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[25.7000mm 47.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[23.0000mm 47.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3t)"] -Via[19.4000mm 40.5000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[19.4000mm 46.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] +Via[25.7000mm 46.2000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[23.0000mm 46.2000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3t)"] Via[21.1000mm 28.9000mm 1.1000mm 0.5000mm 0.8000mm 0.6000mm "" ""] Via[19.4000mm 32.0000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(2X,3t)"] -Via[17.6000mm 27.5000mm 1.1000mm 0.5000mm 0.8000mm 0.6000mm "" ""] -Via[17.6000mm 24.3000mm 1.1000mm 0.5000mm 0.8000mm 0.6000mm "" ""] -Via[19.3000mm 21.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(2X,3X)"] Via[21.3000mm 33.9000mm 1.1000mm 0.5000mm 0.8000mm 0.6000mm "" ""] -Via[11.5000mm 49.4000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[15.0000mm 35.0000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[8.1000mm 38.7000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[9.5000mm 38.7000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] Via[16.6000mm 32.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] -Via[6.0000mm 47.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3S,8S)"] -Via[13.3000mm 49.4000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[22.4000mm 38.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] -Via[19.9000mm 38.4000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[17.6000mm 44.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] +Via[16.4000mm 44.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[12.1000mm 44.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[23.0000mm 39.8000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[24.5000mm 37.5000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[13.6000mm 14.5000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] +Via[17.0000mm 11.7000mm 2.7000mm 0.5000mm 0.0000 2.2000mm "" "lock"] +Via[23.0000mm 11.7000mm 2.7000mm 0.5000mm 0.0000 2.2000mm "" "lock"] +Via[23.0000mm 17.7000mm 2.7000mm 0.5000mm 0.0000 2.2000mm "" "lock"] +Via[17.0000mm 17.7000mm 2.7000mm 0.5000mm 0.0000 2.2000mm "" "lock"] +Via[12.6000mm 18.8000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(0X,3X)"] +Via[21.1000mm 22.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] +Via[24.5000mm 35.7000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[21.9000mm 24.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[23.4000mm 21.6000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[21.1000mm 14.5000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" "thermal(3X)"] +Via[19.0000mm 22.9000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] +Via[17.5000mm 24.8000mm 0.9000mm 0.4000mm 0.6000mm 0.4000mm "" ""] Element["lock" "gseboard" "BOARD" "turbo" 5.0000mm 5.0000mm 0.7500mm 0.5000mm 0 100 ""] ( - Pin[1.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "warn,lock,thermal(2S,3S)"] + Pin[1.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] Pin[3.7500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] Pin[6.2500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] Pin[8.7500mm 1.2500mm 1.5000mm 0.5000mm 1.6524mm 0.6000mm "" "1" "lock,thermal(2S,3S)"] @@ -871,12 +872,12 @@ Element["lock" "gseboard" "BOARD" "turbo" 5.0000mm 5.0000mm 0.7500mm 0.5000mm 0 ) -Element["" "SIL_100_4" "U3" "SIL4" 7.7500mm 16.0000mm 3.2500mm -0.3000mm 0 50 ""] +Element["" "SIL_100_4" "U3" "SIL4" 7.7500mm 16.0000mm -0.3500mm 5.3000mm 0 50 ""] ( Pin[0.0000 -150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "1" "1" "thermal(2X,3X)"] - Pin[0.0000 -50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "2" "2" "warn"] + Pin[0.0000 -50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "2" "2" ""] Pin[0.0000 50.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "3" "3" ""] - Pin[0.0000 150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "4" "4" "warn"] + Pin[0.0000 150.00mil 70.00mil 20.00mil 76.00mil 1.0000mm "4" "4" ""] ElementLine [50.00mil -200.00mil 50.00mil 200.00mil 5.00mil] ElementLine [50.00mil 200.00mil -50.00mil 200.00mil 5.00mil] ElementLine [-50.00mil 200.00mil -50.00mil -200.00mil 5.00mil] @@ -885,14 +886,14 @@ Element["" "SIL_100_4" "U3" "SIL4" 7.7500mm 16.0000mm 3.2500mm -0.3000mm 0 50 "" ) -Element["" "C0603" "D1" "SMD-LED" 6.0000mm 49.4000mm 0.4500mm 0.3000mm 1 50 ""] +Element["" "C0603" "D1" "SMD-LED" 6.0000mm 49.4000mm -0.4500mm -0.3000mm 3 50 ""] ( - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "CATHODE" "1" "square,warn"] - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "ANODE" "2" "square,warn"] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "CATHODE" "1" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "ANODE" "2" "square"] ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] ) @@ -908,24 +909,24 @@ Element["onsolder" "P1206" "C29" "10µF" 19.6000mm 32.3000mm 0.5000mm -0.3500mm ) -Element["" "C0603.fp" "R12" "∞Ω" 18.7000mm 38.2000mm 0.6500mm 0.4000mm 1 50 ""] +Element["" "C0603.fp" "R12" "∞Ω" 19.1000mm 38.5000mm -0.4000mm 0.6500mm 0 50 ""] ( - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] ) Element["" "SUBD9_PINS" "CONN1" "D9_pigtail" 10.5000mm 30.5000mm -4.2000mm 0.9000mm 1 50 ""] ( - Pin[1.4200mm -5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "1" "1" "warn"] + Pin[1.4200mm -5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "1" "1" ""] Pin[1.4200mm -2.7700mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "2" "2" ""] - Pin[1.4200mm 0.0000 2.0080mm 20.00mil 2.1604mm 1.0000mm "3" "3" "warn"] + Pin[1.4200mm 0.0000 2.0080mm 20.00mil 2.1604mm 1.0000mm "3" "3" ""] Pin[1.4200mm 2.7700mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "4" "4" ""] - Pin[1.4200mm 5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "5" "5" "warn"] + Pin[1.4200mm 5.5400mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "5" "5" ""] Pin[-1.4200mm -4.1550mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "6" "6" "thermal(2X,3X)"] Pin[-1.4200mm -1.3850mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "7" "7" "thermal(2X,3X)"] Pin[-1.4200mm 1.3850mm 2.0080mm 20.00mil 2.1604mm 1.0000mm "8" "8" "thermal(2X,3X)"] @@ -939,13 +940,13 @@ Element["" "SUBD9_PINS" "CONN1" "D9_pigtail" 10.5000mm 30.5000mm -4.2000mm 0.900 ) -Element["" "SOIC_150_14" "U1" "ATtiny4x4SS" 24.4000mm 44.1000mm -0.3000mm -0.4000mm 0 50 ""] +Element["" "SOIC_150_14" "U1" "ATtiny4x4SS" 24.3000mm 42.4000mm -0.3000mm -0.4000mm 0 50 ""] ( Pad[87.50mil 150.00mil 122.50mil 150.00mil 25.00mil 20.00mil 31.00mil "VCC" "1" "square,edge2"] Pad[87.50mil 100.00mil 122.50mil 100.00mil 25.00mil 20.00mil 31.00mil "PA4 (SS)" "2" "square,edge2"] Pad[87.50mil 50.00mil 122.50mil 50.00mil 25.00mil 20.00mil 31.00mil "PA5 (WOB)" "3" "square,edge2"] Pad[87.50mil 0.0000 122.50mil 0.0000 25.00mil 20.00mil 31.00mil "PA6" "4" "square,edge2"] - Pad[87.50mil -50.00mil 122.50mil -50.00mil 25.00mil 20.00mil 31.00mil "PA7" "5" "square,warn,edge2"] + Pad[87.50mil -50.00mil 122.50mil -50.00mil 25.00mil 20.00mil 31.00mil "PA7" "5" "square,edge2"] Pad[87.50mil -100.00mil 122.50mil -100.00mil 25.00mil 20.00mil 31.00mil "PB3 (RxD)" "6" "square,edge2"] Pad[87.50mil -150.00mil 122.50mil -150.00mil 25.00mil 20.00mil 31.00mil "PB2 (TxD)" "7" "square,edge2"] Pad[-122.50mil -150.00mil -87.50mil -150.00mil 25.00mil 20.00mil 31.00mil "(WO1) PB1" "8" "square"] @@ -963,18 +964,18 @@ Element["" "SOIC_150_14" "U1" "ATtiny4x4SS" 24.4000mm 44.1000mm -0.3000mm -0.400 ) -Element["onsolder" "C0603.fp" "R10" "∞Ω/0Ω" 27.7000mm 41.8000mm 2.4000mm -0.3500mm 2 50 "onsolder"] +Element["" "C0603.fp" "R10" "∞Ω/0Ω" 21.5000mm 31.8000mm 0.6000mm 0.6000mm 1 50 ""] ( - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square,warn"] - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square,warn"] - ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Element["onsolder" "C0603" "C12" "100nF" 23.9000mm 48.9000mm 0.6000mm -1.3000mm 2 50 "onsolder"] +Element["onsolder" "C0603" "C12" "100nF" 24.9000mm 45.0000mm 0.6000mm -1.3000mm 2 50 "onsolder"] ( Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] @@ -985,10 +986,10 @@ Element["onsolder" "C0603" "C12" "100nF" 23.9000mm 48.9000mm 0.6000mm -1.3000mm ) -Element["" "C0603.fp" "R11" "10kΩ" 28.6000mm 46.3000mm 0.7000mm 0.5000mm 1 50 ""] +Element["" "C0603.fp" "R11" "10kΩ" 7.4000mm 49.4000mm 0.7000mm 0.5000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square,warn"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] @@ -996,7 +997,7 @@ Element["" "C0603.fp" "R11" "10kΩ" 28.6000mm 46.3000mm 0.7000mm 0.5000mm 1 50 " ) -Element["lock" "KEYSTONE-1025-7" "B1" "6V" 39.9000mm 26.0000mm -2.4000mm -0.7000mm 0 100 "selected"] +Element["lock" "KEYSTONE-1025-7" "B1" "6V" 39.9000mm 26.0000mm -2.4000mm -0.7000mm 0 100 ""] ( Pin[-325.00mil -188.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "lock,edge2"] Pin[325.00mil -187.00mil 3.0000mm 0.5000mm 3.1500mm 1.5000mm "" "3" "lock,edge2"] @@ -1057,7 +1058,7 @@ Element["" "C0603.fp" "R3" "3.3MΩ" 19.4000mm 34.9000mm 1.3000mm -0.4000mm 0 50 ) -Element["" "C0603.fp" "R13" "-SD:_10kΩ" 19.4000mm 30.1000mm 1.5000mm -0.4000mm 0 50 ""] +Element["" "C0603.fp" "R13" "-SD:_10kΩ" 19.4000mm 30.1000mm -0.6000mm -1.3000mm 0 50 ""] ( Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1080,29 +1081,6 @@ Element["onsolder" "P1206" "C20" "10µF" 19.6000mm 30.1000mm 0.6500mm -0.4000mm ) -Element["onsolder" "P1206" "C26" "10µF" 16.6000mm 43.7000mm 0.4500mm 0.6500mm 3 50 "onsolder"] -( - Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] - Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] - ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] - ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] - ElementLine [-30.00mil -51.00mil 30.00mil -51.00mil 5.00mil] - - ) - -Element["onsolder" "C0603" "C11" "100nF" 18.2000mm 43.7000mm 1.3500mm 0.5500mm 3 50 "onsolder"] -( - Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] - Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] - ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] - ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] - ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] - - ) - Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm 0 50 ""] ( Pin[0.0000 -100.00mil 70.00mil 20.00mil 76.00mil 30.00mil "1" "1" ""] @@ -1116,368 +1094,412 @@ Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm ) -Element["" "C0603.fp" "R30" "100kΩ" 12.2000mm 11.5000mm 0.0000 0.0000 0 50 ""] +Element["" "SOT23_3" "Q1" "2N7002" 19.8000mm 14.6000mm 0.0000 0.0000 2 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] - - ) - -Element["" "SOIC_150_8" "U2" "AT45DB161E" 11.9000mm 43.8000mm 0.0000 0.0000 0 50 ""] -( - Pad[-122.50mil -75.00mil -87.50mil -75.00mil 25.00mil 20.00mil 31.00mil "SI" "1" "square"] - Pad[-122.50mil -25.00mil -87.50mil -25.00mil 25.00mil 20.00mil 31.00mil "SCK" "2" "square"] - Pad[-122.50mil 25.00mil -87.50mil 25.00mil 25.00mil 20.00mil 31.00mil "_RESET_" "3" "square"] - Pad[-122.50mil 75.00mil -87.50mil 75.00mil 25.00mil 20.00mil 31.00mil "_CS_" "4" "square"] - Pad[87.50mil 75.00mil 122.50mil 75.00mil 25.00mil 20.00mil 31.00mil "_WP_" "5" "square,edge2"] - Pad[87.50mil 25.00mil 122.50mil 25.00mil 25.00mil 20.00mil 31.00mil "VCC" "6" "square,edge2"] - Pad[87.50mil -25.00mil 122.50mil -25.00mil 25.00mil 20.00mil 31.00mil "GND" "7" "square,edge2"] - Pad[87.50mil -75.00mil 122.50mil -75.00mil 25.00mil 20.00mil 31.00mil "SO" "8" "square,edge2"] - ElementLine [-87.50mil -100.00mil -87.50mil 100.00mil 5.00mil] - ElementLine [-87.50mil 100.00mil 87.50mil 100.00mil 5.00mil] - ElementLine [87.50mil 100.00mil 87.50mil -100.00mil 5.00mil] - ElementLine [87.50mil -100.00mil -87.50mil -100.00mil 5.00mil] - ElementLine [-70.00mil -100.00mil -70.00mil 100.00mil 5.00mil] - - ) - -Element["" "SOT23_3" "Q1" "2N7002" 22.7000mm 14.3000mm 0.0000 0.0000 0 50 ""] -( - Pad[-1.4000mm -0.9500mm -1.0000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square"] - Pad[-1.4000mm 0.9500mm -1.0000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square"] - Pad[1.0000mm 0.0000 1.4000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square,edge2"] + Pad[1.0000mm 0.9500mm 1.4000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square,edge2"] + Pad[1.0000mm -0.9500mm 1.4000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square,edge2"] + Pad[-1.4000mm 0.0000 -1.0000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square"] + ElementLine [1.0000mm -1.4250mm 1.0000mm 1.4250mm 5.00mil] + ElementLine [-1.0000mm -1.4250mm 1.0000mm -1.4250mm 5.00mil] ElementLine [-1.0000mm -1.4250mm -1.0000mm 1.4250mm 5.00mil] ElementLine [-1.0000mm 1.4250mm 1.0000mm 1.4250mm 5.00mil] - ElementLine [1.0000mm 1.4250mm 1.0000mm -1.4250mm 5.00mil] - ElementLine [1.0000mm -1.4250mm -1.0000mm -1.4250mm 5.00mil] ) -Element["" "SOT23_3" "Q2" "2N7002" 18.8000mm 14.5000mm 0.0000 0.0000 0 50 ""] +Element["" "SOT23_3" "Q2" "2N7002" 12.3000mm 14.6000mm 0.0000 0.0000 2 50 ""] ( - Pad[-1.4000mm -0.9500mm -1.0000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square"] - Pad[-1.4000mm 0.9500mm -1.0000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square"] - Pad[1.0000mm 0.0000 1.4000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square,edge2"] + Pad[1.0000mm 0.9500mm 1.4000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square,edge2"] + Pad[1.0000mm -0.9500mm 1.4000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square,edge2"] + Pad[-1.4000mm 0.0000 -1.0000mm 0.0000 0.6000mm 20.00mil 0.7524mm "D" "3" "square"] + ElementLine [1.0000mm -1.4250mm 1.0000mm 1.4250mm 5.00mil] + ElementLine [-1.0000mm -1.4250mm 1.0000mm -1.4250mm 5.00mil] ElementLine [-1.0000mm -1.4250mm -1.0000mm 1.4250mm 5.00mil] ElementLine [-1.0000mm 1.4250mm 1.0000mm 1.4250mm 5.00mil] - ElementLine [1.0000mm 1.4250mm 1.0000mm -1.4250mm 5.00mil] - ElementLine [1.0000mm -1.4250mm -1.0000mm -1.4250mm 5.00mil] ) -Element["" "P1206" "C31" "10µF" 14.8000mm 18.1000mm 0.0000 0.0000 0 50 ""] +Element["onsolder" "P1206" "C31" "10µF" 25.0000mm 41.4000mm 0.0000 0.0000 1 50 "onsolder"] ( - Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "square"] - Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "square"] + Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] + Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] + ElementLine [-30.00mil -60.00mil 30.00mil -60.00mil 5.00mil] + ElementLine [30.00mil -60.00mil 30.00mil 60.00mil 5.00mil] + ElementLine [-30.00mil 60.00mil 30.00mil 60.00mil 5.00mil] + ElementLine [-30.00mil -60.00mil -30.00mil 60.00mil 5.00mil] + ElementLine [-30.00mil -51.00mil 30.00mil -51.00mil 5.00mil] + + ) + +Element["onsolder" "P1206" "C26" "10µF" 17.0000mm 41.7000mm 0.6500mm -0.4500mm 2 50 "onsolder"] +( + Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] + Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] ElementLine [-60.00mil -30.00mil -60.00mil 30.00mil 5.00mil] + ElementLine [-60.00mil -30.00mil 60.00mil -30.00mil 5.00mil] + ElementLine [60.00mil -30.00mil 60.00mil 30.00mil 5.00mil] ElementLine [-60.00mil 30.00mil 60.00mil 30.00mil 5.00mil] - ElementLine [60.00mil 30.00mil 60.00mil -30.00mil 5.00mil] - ElementLine [60.00mil -30.00mil -60.00mil -30.00mil 5.00mil] ElementLine [-51.00mil -30.00mil -51.00mil 30.00mil 5.00mil] ) -Element["" "C0603" "C34" "100nF" 15.9000mm 11.5000mm 0.0000 0.0000 0 50 ""] +Element["onsolder" "C0603" "C11" "100nF" 17.0000mm 43.3000mm 0.5500mm -1.3500mm 2 50 "onsolder"] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] + ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] ) -Element["" "C0603.fp" "R36" "100kΩ" 21.5000mm 11.5000mm 0.0000 0.0000 0 50 ""] +Element["" "SOIC_150_8" "U2" "AT45DB161E" 17.0000mm 43.2000mm 0.0000 0.0000 3 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[75.00mil -122.50mil 75.00mil -87.50mil 25.00mil 20.00mil 31.00mil "SI" "1" "square"] + Pad[25.00mil -122.50mil 25.00mil -87.50mil 25.00mil 20.00mil 31.00mil "SCK" "2" "square"] + Pad[-25.00mil -122.50mil -25.00mil -87.50mil 25.00mil 20.00mil 31.00mil "_RESET_" "3" "square"] + Pad[-75.00mil -122.50mil -75.00mil -87.50mil 25.00mil 20.00mil 31.00mil "_CS_" "4" "square"] + Pad[-75.00mil 87.50mil -75.00mil 122.50mil 25.00mil 20.00mil 31.00mil "_WP_" "5" "square,edge2"] + Pad[-25.00mil 87.50mil -25.00mil 122.50mil 25.00mil 20.00mil 31.00mil "VCC" "6" "square,edge2"] + Pad[25.00mil 87.50mil 25.00mil 122.50mil 25.00mil 20.00mil 31.00mil "GND" "7" "square,edge2"] + Pad[75.00mil 87.50mil 75.00mil 122.50mil 25.00mil 20.00mil 31.00mil "SO" "8" "square,edge2"] + ElementLine [-100.00mil -87.50mil 100.00mil -87.50mil 5.00mil] + ElementLine [-100.00mil -87.50mil -100.00mil 87.50mil 5.00mil] + ElementLine [-100.00mil 87.50mil 100.00mil 87.50mil 5.00mil] + ElementLine [100.00mil -87.50mil 100.00mil 87.50mil 5.00mil] + ElementLine [-100.00mil -70.00mil 100.00mil -70.00mil 5.00mil] ) -Element["" "C0603" "C33" "100nF" 27.0000mm 11.5000mm 0.0000 0.0000 0 50 ""] +Element["onsolder" "C0603.fp" "R30" "100kΩ" 23.7000mm 38.7000mm 0.0000 0.0000 0 50 "onsolder"] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] + Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] + ElementLine [-30.00mil -15.00mil 30.00mil -15.00mil 5.00mil] + ElementLine [30.00mil -15.00mil 30.00mil 15.00mil 5.00mil] ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] ) -Element["" "C0603.fp" "R35" "100kΩ" 32.6000mm 11.5000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603" "C33" "100nF" 13.3000mm 20.8000mm 0.0000 0.0000 3 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Element["" "C0603.fp" "R31" "100kΩ" 27.2000mm 13.8000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603.fp" "R35" "100kΩ" 12.0000mm 20.8000mm 0.0000 0.0000 3 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Element["" "C0603.fp" "R33" "100kΩ" 32.7000mm 13.8000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603.fp" "R31" "100kΩ" 15.9000mm 20.8000mm 0.0000 0.0000 1 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] ) -Element["" "C0603" "C30" "100nF" 38.3000mm 13.8000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603.fp" "R33" "100kΩ" 10.7000mm 20.8000mm 0.0000 0.0000 3 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Element["" "C0603.fp" "R34" "100kΩ" 27.7000mm 16.4000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603" "C30" "100nF" 14.6000mm 20.8000mm 0.0000 0.0000 1 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] ) -Element["" "C0603" "C32" "100nF" 33.2000mm 16.4000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603.fp" "R34" "100kΩ" 17.2000mm 20.8000mm 0.0000 0.0000 3 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Element["" "C0603.fp" "R32" "100kΩ" 38.8000mm 16.4000mm 0.0000 0.0000 0 50 ""] +Element["" "C0603" "C32" "100nF" 21.1000mm 20.8000mm 0.0000 0.0000 1 50 ""] ( - Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] - Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] - ElementLine [-30.00mil -15.00mil -30.00mil 15.00mil 5.00mil] - ElementLine [-30.00mil 15.00mil 30.00mil 15.00mil 5.00mil] - ElementLine [30.00mil 15.00mil 30.00mil -15.00mil 5.00mil] - ElementLine [30.00mil -15.00mil -30.00mil -15.00mil 5.00mil] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R32" "100kΩ" 22.4000mm 20.8000mm 0.0000 0.0000 1 50 ""] +( + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + + ) + +Element["" "C0603" "C34" "100nF" 19.8000mm 20.8000mm 0.0000 0.0000 3 50 ""] +( + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] + + ) + +Element["" "C0603.fp" "R36" "100kΩ" 18.5000mm 20.8000mm 0.0000 0.0000 3 50 ""] +( + Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] + Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] + ElementLine [-15.00mil -30.00mil 15.00mil -30.00mil 5.00mil] + ElementLine [-15.00mil -30.00mil -15.00mil 30.00mil 5.00mil] + ElementLine [-15.00mil 30.00mil 15.00mil 30.00mil 5.00mil] + ElementLine [15.00mil -30.00mil 15.00mil 30.00mil 5.00mil] ) -Rat[16.7128mm 11.4492mm 0 22.3128mm 11.4492mm 0 ""] -Rat[22.3128mm 11.4492mm 0 25.8000mm 1500.00mil 0 ""] -Rat[27.8128mm 11.4492mm 0 33.4128mm 11.4492mm 0 ""] -Rat[27.8128mm 11.4492mm 0 21.6000mm 27.9000mm 0 ""] -Rat[1319.40mil 13.7492mm 0 28.5128mm 16.3492mm 0 ""] -Rat[28.5128mm 16.3492mm 0 11.9200mm 24.9600mm 0 ""] -Rat[11.9200mm 24.9600mm 0 27.1000mm 45.4000mm 0 ""] -Rat[24.1000mm 14.3000mm 0 26.8872mm 16.3492mm 0 ""] -Rat[24.1000mm 14.3000mm 0 20.6872mm 11.4492mm 0 ""] -Rat[20.2000mm 14.5000mm 0 1255.40mil 13.7492mm 0 ""] -Rat[1255.40mil 13.7492mm 0 31.7872mm 11.4492mm 0 ""] -Rat[20.2000mm 14.5000mm 0 7.7500mm 14.7300mm 0 ""] -Rat[13.4030mm 17.8460mm 0 13.0128mm 11.4492mm 0 ""] -Rat[13.0128mm 11.4492mm 0 26.3872mm 13.7492mm 0 ""] -Rat[26.3872mm 13.7492mm 0 37.9872mm 16.3492mm 0 ""] -Rat[34.0128mm 16.3492mm 0 39.6128mm 16.3492mm 0 ""] -Rat[34.0128mm 16.3492mm 0 21.3000mm 13.3500mm 0 ""] -Rat[39.1128mm 13.7492mm 0 28.0128mm 13.7492mm 0 ""] -Rat[28.0128mm 13.7492mm 0 17.4000mm 13.5500mm 0 ""] -Rat[17.4000mm 13.5500mm 0 15.1000mm 15.7000mm 3 ""] -Rat[37.4872mm 13.7492mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[16.1970mm 17.8460mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[32.3872mm 16.3492mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[26.1872mm 11.4492mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[15.0872mm 11.4492mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[21.3000mm 15.2500mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[17.4000mm 15.4500mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[15.0115mm 43.1650mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[28.5492mm 47.1128mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[17.5000mm 44.3000mm 0 15.0115mm 41.8950mm 0 ""] -Rat[17.5000mm 43.1000mm 0 8.7885mm 41.8950mm 0 ""] -Rat[11.3872mm 11.4492mm 0 17.5000mm 41.8000mm 0 ""] -Rat[17.5000mm 45.6000mm 0 8.7885mm 43.1650mm 0 ""] -Rat[24.2000mm 43.8000mm 0 8.7885mm 45.7050mm 0 ""] -Rat[6.3000mm 22.3000mm 0 7.7500mm 22.2500mm 0 ""] -Rat[15.0000mm 35.0000mm 3 52.5000mm 51.0000mm 3 "via"] -Rat[21.3000mm 33.9000mm 3 52.5000mm 51.0000mm 3 "via"] -Rat[25.8000mm 42.8000mm 3 52.5000mm 51.0000mm 3 "via"] -Rat[8.7885mm 44.4350mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[15.0115mm 45.7050mm 0 52.5000mm 51.0000mm 3 "via"] -Rat[15.0115mm 44.4350mm 0 52.5000mm 51.0000mm 3 "via"] Layer(1 "top" "copper") ( Line[53.2000mm 51.6000mm 53.5000mm 51.6000mm 10.00mil 20.00mil "clearline"] - Line[19.4000mm 46.9000mm 17.5000mm 46.9000mm 0.5000mm 0.5000mm "clearline"] - Line[19.4000mm 40.5000mm 17.5000mm 40.5000mm 0.5000mm 0.5000mm "clearline"] - Line[23.0000mm 47.9000mm 21.7000mm 47.9000mm 0.5000mm 0.5000mm "clearline"] - Line[25.7000mm 47.9000mm 27.0000mm 47.9000mm 0.5000mm 0.5000mm "clearline"] - Line[27.1000mm 45.4000mm 28.6000mm 45.4000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 42.8000mm 27.1000mm 42.8000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 44.1000mm 27.1000mm 44.1000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 46.5000mm 27.1000mm 46.5000mm 10.00mil 0.4000mm "clearline"] - Line[17.5000mm 41.8000mm 19.2000mm 41.8000mm 10.00mil 0.4000mm "clearline"] - Line[19.2000mm 41.8000mm 20.8000mm 41.6000mm 10.00mil 0.4000mm "clearline"] - Line[20.8000mm 41.6000mm 21.7000mm 41.6000mm 10.00mil 0.4000mm "clearline"] - Line[17.5000mm 43.1000mm 19.1000mm 43.1000mm 10.00mil 0.4000mm "clearline"] - Line[19.1000mm 43.1000mm 20.6000mm 44.1000mm 10.00mil 0.4000mm "clearline"] - Line[20.6000mm 44.1000mm 21.7000mm 44.1000mm 10.00mil 0.4000mm "clearline"] - Line[17.5000mm 44.3000mm 19.1000mm 44.3000mm 10.00mil 0.4000mm "clearline"] - Line[19.1000mm 44.3000mm 20.6000mm 45.4000mm 10.00mil 0.4000mm "clearline"] - Line[20.6000mm 45.4000mm 21.7000mm 45.4000mm 10.00mil 0.4000mm "clearline"] - Line[17.5000mm 45.6000mm 19.1000mm 45.6000mm 10.00mil 0.4000mm "clearline"] - Line[19.1000mm 45.6000mm 20.6000mm 46.6000mm 10.00mil 0.4000mm "clearline"] - Line[20.6000mm 46.6000mm 21.7000mm 46.6000mm 10.00mil 0.4000mm "clearline"] - Line[21.7000mm 42.8000mm 22.7000mm 42.8000mm 10.00mil 0.4000mm "clearline"] - Line[22.7000mm 42.8000mm 23.0000mm 42.5000mm 10.00mil 0.4000mm "clearline"] - Line[23.0000mm 42.5000mm 23.0000mm 39.5000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 46.5000mm 24.2000mm 43.8000mm 10.00mil 0.4000mm "clearline"] - Line[24.2000mm 43.8000mm 24.2000mm 39.9000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 44.1000mm 24.9000mm 43.2000mm 10.00mil 0.4000mm "clearline"] - Line[24.9000mm 43.2000mm 24.9000mm 39.9000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 42.8000mm 25.8000mm 41.5000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 41.5000mm 25.8000mm 1500.00mil 10.00mil 0.4000mm "clearline"] - Line[24.9000mm 39.9000mm 24.9000mm 38.8000mm 10.00mil 0.4000mm "clearline"] - Line[24.9000mm 38.8000mm 24.9000mm 1500.00mil 10.00mil 0.4000mm "clearline"] - Line[24.2000mm 39.9000mm 23.6000mm 38.9000mm 10.00mil 0.4000mm "clearline"] - Line[23.6000mm 38.9000mm 23.6000mm 1500.00mil 10.00mil 0.4000mm "clearline"] - Line[7.7500mm 14.7300mm 6.3000mm 15.7000mm 10.00mil 0.4000mm "clearline"] - Line[6.3000mm 15.7000mm 6.3000mm 22.3000mm 10.00mil 0.4000mm "clearline"] - Line[6.3000mm 22.3000mm 7.4000mm 24.9000mm 10.00mil 0.4000mm "clearline"] - Line[7.4000mm 29.6000mm 8.1000mm 30.5000mm 10.00mil 0.4000mm "clearline"] - Line[8.1000mm 30.5000mm 11.9200mm 30.5000mm 10.00mil 0.4000mm "clearline"] - Line[7.4000mm 24.9000mm 7.4000mm 29.6000mm 10.00mil 0.4000mm "clearline"] + Line[23.0000mm 46.2000mm 21.7000mm 46.2000mm 0.5000mm 0.5000mm "clearline"] + Line[25.7000mm 46.2000mm 26.9000mm 46.2000mm 0.5000mm 0.5000mm "clearline"] Line[18.5000mm 31.3000mm 18.5000mm 29.9000mm 10.00mil 0.4000mm "clearline"] Line[18.5000mm 29.9000mm 17.2000mm 29.9000mm 10.00mil 0.4000mm "clearline"] Line[20.3000mm 33.4000mm 19.8000mm 33.4000mm 10.00mil 0.4000mm "clearline"] Line[19.8000mm 33.4000mm 18.9000mm 32.8000mm 10.00mil 0.4000mm "clearline"] - Line[19.0000mm 28.9000mm 18.5000mm 28.5000mm 0.5000mm 0.5000mm "clearline"] - Line[18.5000mm 28.5000mm 18.5000mm 27.5000mm 0.5000mm 0.5000mm "clearline"] Line[20.3000mm 31.3000mm 20.3000mm 28.9000mm 0.5000mm 0.5000mm "clearline"] - Line[19.0000mm 28.9000mm 20.3000mm 28.9000mm 0.5000mm 0.5000mm "clearline"] Line[20.3000mm 28.9000mm 21.1000mm 28.9000mm 0.5000mm 0.5000mm "clearline"] Line[21.1000mm 28.9000mm 21.1000mm 28.9000mm 0.5000mm 0.5000mm "clearline"] - Line[17.6000mm 27.5000mm 18.5000mm 27.5000mm 0.5000mm 0.5000mm "clearline"] - Line[18.5000mm 25.3000mm 18.5000mm 24.3000mm 0.5000mm 0.5000mm "clearline"] - Line[18.5000mm 24.3000mm 17.6000mm 24.3000mm 0.5000mm 0.5000mm "clearline"] - Line[20.4000mm 25.3000mm 20.4000mm 22.9000mm 10.00mil 0.4000mm "clearline"] - Line[19.3000mm 21.9000mm 18.9000mm 22.9000mm 10.00mil 0.4000mm "clearline"] Line[18.5000mm 33.7000mm 18.5000mm 34.9000mm 10.00mil 0.4000mm "clearline"] Line[20.3000mm 33.4000mm 20.3000mm 34.9000mm 10.00mil 0.4000mm "clearline"] Line[21.3000mm 33.9000mm 20.4000mm 33.9000mm 0.5000mm 0.5000mm "clearline"] - Line[20.4000mm 27.9000mm 21.6000mm 27.9000mm 10.00mil 0.4000mm "clearline"] - Line[21.6000mm 27.9000mm 22.0000mm 28.4000mm 10.00mil 0.4000mm "clearline"] - Line[22.0000mm 28.4000mm 22.0000mm 30.4000mm 10.00mil 0.4000mm "clearline"] - Line[18.5000mm 25.6000mm 18.9000mm 26.0000mm 10.00mil 0.4000mm "clearline"] - Line[18.9000mm 26.0000mm 19.5000mm 26.0000mm 10.00mil 0.4000mm "clearline"] - Line[19.5000mm 26.0000mm 21.9000mm 27.3000mm 10.00mil 0.4000mm "clearline"] - Line[21.9000mm 27.3000mm 22.5000mm 28.2000mm 10.00mil 0.4000mm "clearline"] - Line[22.5000mm 28.2000mm 22.5000mm 29.5000mm 10.00mil 0.4000mm "clearline"] - Line[21.6000mm 38.3000mm 21.6000mm 39.8000mm 10.00mil 0.4000mm "clearline"] - Line[22.3000mm 34.8000mm 22.3000mm 33.1000mm 10.00mil 0.4000mm "clearline"] - Line[22.5000mm 29.5000mm 23.4000mm 35.8000mm 10.00mil 0.4000mm "clearline"] - Line[23.4000mm 35.8000mm 23.4000mm 36.5000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 36.5000mm 25.8000mm 35.8000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 35.8000mm 25.8000mm 32.1000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 32.1000mm 25.8000mm 26.9000mm 10.00mil 0.4000mm "clearline"] - Line[27.5000mm 41.6000mm 28.2000mm 41.6000mm 10.00mil 0.4000mm "clearline"] - Line[28.2000mm 41.6000mm 29.7000mm 44.8000mm 10.00mil 0.4000mm "clearline"] - Line[29.7000mm 44.8000mm 29.7000mm 48.0000mm 10.00mil 0.4000mm "clearline"] - Line[28.4000mm 47.2000mm 28.4000mm 48.4000mm 10.00mil 0.4000mm "clearline"] - Line[28.4000mm 48.4000mm 27.9000mm 48.9000mm 10.00mil 0.4000mm "clearline"] - Line[27.9000mm 48.9000mm 14.5000mm 48.9000mm 10.00mil 0.4000mm "clearline"] - Line[29.7000mm 48.0000mm 28.3000mm 49.5000mm 10.00mil 0.4000mm "clearline"] - Line[28.3000mm 49.5000mm 14.2500mm 49.6000mm 10.00mil 0.4000mm "clearline"] - Line[27.5000mm 40.3000mm 28.5000mm 40.3000mm 10.00mil 0.4000mm "clearline"] - Line[28.5000mm 40.3000mm 30.4000mm 44.6000mm 10.00mil 0.4000mm "clearline"] - Line[30.4000mm 44.6000mm 30.4000mm 48.2000mm 10.00mil 0.4000mm "clearline"] - Line[30.4000mm 48.2000mm 28.5000mm 50.3000mm 10.00mil 0.4000mm "clearline"] - Line[28.5000mm 50.3000mm 12.3000mm 50.3000mm 10.00mil 0.4000mm "clearline"] - Line[14.2500mm 49.6000mm 13.3000mm 49.4000mm 10.00mil 0.4000mm "clearline"] - Line[12.3000mm 50.3000mm 11.5000mm 49.4000mm 10.00mil 0.4000mm "clearline"] - Line[14.5000mm 48.9000mm 13.7000mm 48.6000mm 10.00mil 0.4000mm "clearline"] - Line[13.7000mm 48.6000mm 11.1000mm 48.6000mm 10.00mil 0.4000mm "clearline"] - Line[11.1000mm 48.6000mm 9.5000mm 50.0000mm 10.00mil 0.4000mm "clearline"] - Line[9.5000mm 50.0000mm 7.6000mm 50.0000mm 10.00mil 0.4000mm "clearline"] - Line[7.6000mm 50.0000mm 6.7000mm 50.0000mm 10.00mil 0.4000mm "clearline"] - Line[6.7000mm 50.0000mm 6.0000mm 50.0000mm 10.00mil 0.4000mm "clearline"] - Line[23.0000mm 39.5000mm 22.4000mm 38.9000mm 10.00mil 0.4000mm "clearline"] - Line[18.5000mm 28.5000mm 17.9000mm 28.5000mm 10.00mil 0.4000mm "clearline"] - Line[8.1000mm 30.5000mm 7.4000mm 31.3000mm 10.00mil 0.4000mm "clearline"] - Line[7.4000mm 31.3000mm 7.4000mm 35.6000mm 10.00mil 0.4000mm "clearline"] - Line[7.4000mm 35.6000mm 8.1000mm 38.7000mm 10.00mil 0.4000mm "clearline"] - Line[11.9200mm 33.2700mm 9.9000mm 36.3000mm 10.00mil 0.4000mm "clearline"] - Line[9.9000mm 36.3000mm 9.5000mm 38.7000mm 10.00mil 0.4000mm "clearline"] - Line[17.6000mm 24.3000mm 17.6000mm 22.6000mm 0.5000mm 0.5000mm "clearline"] - Line[17.1000mm 22.1000mm 10.6000mm 22.1000mm 0.5000mm 0.5000mm "clearline"] - Line[10.6000mm 22.1000mm 9.2000mm 21.0000mm 0.5000mm 0.5000mm "clearline"] - Line[9.2000mm 21.0000mm 9.2000mm 18.8000mm 0.5000mm 0.5000mm "clearline"] - Line[9.2000mm 18.8000mm 7.7500mm 17.2700mm 0.5000mm 0.5000mm "clearline"] - Line[7.7500mm 19.8100mm 7.7500mm 22.2500mm 10.00mil 0.4000mm "clearline"] - Line[7.7500mm 22.2500mm 11.9200mm 24.9600mm 10.00mil 0.4000mm "clearline"] - Line[17.9000mm 28.5000mm 16.3000mm 28.9500mm 10.00mil 0.4000mm "clearline"] + Line[27.4000mm 39.9000mm 28.1000mm 39.9000mm 10.00mil 0.4000mm "clearline"] + Line[29.7000mm 47.6000mm 27.0000mm 49.7000mm 10.00mil 0.4000mm "clearline"] + Line[27.0000mm 49.7000mm 16.8000mm 49.7000mm 10.00mil 0.4000mm "clearline"] + Line[17.9000mm 28.5000mm 16.3100mm 28.9700mm 10.00mil 0.4000mm "clearline"] Line[18.9000mm 32.8000mm 17.2000mm 31.9000mm 10.00mil 0.4000mm "clearline"] Line[18.5000mm 34.9000mm 17.4000mm 34.9000mm 10.00mil 0.4000mm "clearline"] Line[16.6000mm 32.9000mm 17.1000mm 33.4000mm 10.00mil 0.4000mm "clearline"] - Line[21.6000mm 39.8000mm 21.6000mm 40.3000mm 10.00mil 0.4000mm "clearline"] - Line[6.0000mm 47.6000mm 6.0000mm 48.6000mm 10.00mil 0.4000mm "clearline"] - Line[18.0000mm 37.6000mm 14.2000mm 35.5000mm 10.00mil 0.4000mm "clearline"] - Line[16.3000mm 28.9500mm 14.6000mm 28.9500mm 10.00mil 0.4000mm "clearline"] - Line[19.4000mm 40.5000mm 20.9000mm 39.1000mm 0.5000mm 0.5000mm "clearline"] - Line[20.9000mm 39.1000mm 20.9000mm 37.6000mm 0.5000mm 0.5000mm "clearline"] - Line[20.9000mm 37.6000mm 21.3000mm 35.6000mm 0.5000mm 0.5000mm "clearline"] - Line[21.3000mm 35.6000mm 21.3000mm 33.9000mm 0.5000mm 0.5000mm "clearline"] - Line[21.6000mm 38.3000mm 22.3000mm 34.8000mm 10.00mil 0.4000mm "clearline"] - Line[22.3000mm 33.1000mm 22.0000mm 30.4000mm 10.00mil 0.4000mm "clearline"] - Line[18.0000mm 37.6000mm 19.4000mm 37.6000mm 10.00mil 0.4000mm "clearline"] - Line[19.4000mm 37.6000mm 19.9000mm 38.4000mm 10.00mil 0.4000mm "clearline"] - Line[18.7000mm 39.0000mm 18.7000mm 40.5000mm 10.00mil 0.4000mm "clearline"] - Line[23.4000mm 36.5000mm 24.8000mm 36.5000mm 10.00mil 0.4000mm "clearline"] - Line[17.6000mm 22.6000mm 17.1000mm 22.1000mm 0.5000mm 0.5000mm "clearline"] - Line[14.6000mm 28.9500mm 14.1000mm 29.5000mm 10.00mil 0.4000mm "clearline"] - Line[14.1000mm 29.5000mm 14.1000mm 31.1000mm 10.00mil 0.4000mm "clearline"] - Line[14.1000mm 31.1000mm 15.0000mm 35.0000mm 10.00mil 0.4000mm "clearline"] + Line[6.2000mm 47.9000mm 6.2000mm 48.6000mm 10.00mil 0.4000mm "clearline"] + Line[16.3100mm 28.9700mm 14.6100mm 28.9700mm 10.00mil 0.4000mm "clearline"] + Line[16.4000mm 38.0000mm 21.3000mm 35.7000mm 0.5000mm 0.5000mm "clearline"] + Line[14.6100mm 28.9700mm 13.7000mm 29.8000mm 10.00mil 0.4000mm "clearline"] + Line[13.7000mm 29.8000mm 13.7000mm 34.9000mm 10.00mil 0.4000mm "clearline"] Line[17.2000mm 31.6000mm 16.5000mm 31.6000mm 10.00mil 0.4000mm "clearline"] Line[16.5000mm 31.6000mm 15.4000mm 30.2400mm 10.00mil 0.4000mm "clearline"] Line[11.9200mm 27.7300mm 15.4000mm 25.1600mm 10.00mil 0.4000mm "clearline"] - Line[11.9200mm 27.7300mm 13.5000mm 29.1000mm 10.00mil 0.4000mm "clearline"] - Line[13.5000mm 29.1000mm 13.5000mm 31.8000mm 10.00mil 0.4000mm "clearline"] - Line[13.5000mm 31.8000mm 14.2000mm 35.5000mm 10.00mil 0.4000mm "clearline"] Line[17.2000mm 31.6000mm 17.2000mm 31.9000mm 10.00mil 0.4000mm "clearline"] - Text[6.5000mm 51.2000mm 0 139 "TURBO v01 2024-01-22" "clearline"] + Line[27.4000mm 38.6000mm 28.1000mm 38.6000mm 10.00mil 0.4000mm "clearline"] + Line[7.5000mm 50.2000mm 6.0000mm 50.2000mm 10.00mil 0.4000mm "clearline"] + Line[28.1000mm 39.9000mm 29.1000mm 40.6000mm 10.00mil 0.4000mm "clearline"] + Line[29.1000mm 40.6000mm 29.1000mm 47.2000mm 10.00mil 0.4000mm "clearline"] + Line[29.1000mm 47.2000mm 26.7000mm 49.1000mm 10.00mil 0.4000mm "clearline"] + Line[26.7000mm 49.1000mm 17.0000mm 49.1000mm 10.00mil 0.4000mm "clearline"] + Line[17.0000mm 49.1000mm 13.6000mm 47.2000mm 10.00mil 0.4000mm "clearline"] + Line[28.1000mm 38.6000mm 29.7000mm 39.8000mm 10.00mil 0.4000mm "clearline"] + Line[29.7000mm 39.8000mm 29.7000mm 47.6000mm 10.00mil 0.4000mm "clearline"] + Line[13.0000mm 47.6000mm 13.0000mm 44.0000mm 10.00mil 0.4000mm "clearline"] + Line[13.0000mm 44.0000mm 8.2000mm 36.8000mm 10.00mil 0.4000mm "clearline"] + Line[13.6000mm 47.2000mm 13.6000mm 43.9000mm 10.00mil 0.4000mm "clearline"] + Line[10.0000mm 38.4000mm 10.0000mm 36.1000mm 10.00mil 0.4000mm "clearline"] + Line[11.9200mm 33.2700mm 10.0000mm 36.1000mm 10.00mil 0.4000mm "clearline"] + Line[8.2000mm 36.8000mm 7.2000mm 35.3000mm 10.00mil 0.4000mm "clearline"] + Line[8.0000mm 33.3000mm 9.8000mm 33.3000mm 10.00mil 0.4000mm "clearline"] + Line[11.9200mm 30.5000mm 9.8000mm 33.3000mm 10.00mil 0.4000mm "clearline"] + Line[17.9000mm 28.5000mm 19.8000mm 28.5000mm 10.00mil 0.4000mm "clearline"] + Line[19.8000mm 28.5000mm 20.3000mm 29.0000mm 10.00mil 0.4000mm "clearline"] + Line[18.9000mm 47.8000mm 24.1000mm 47.8000mm 0.5000mm 0.5000mm "clearline"] + Line[24.1000mm 47.8000mm 25.7000mm 46.2000mm 0.5000mm 0.5000mm "clearline"] + Line[27.2000mm 44.9000mm 28.0000mm 44.9000mm 10.00mil 0.4000mm "clearline"] + Line[28.0000mm 44.9000mm 28.4000mm 45.2000mm 10.00mil 0.4000mm "clearline"] + Line[26.3000mm 48.5000mm 17.2000mm 48.5000mm 10.00mil 0.4000mm "clearline"] + Line[28.4000mm 45.2000mm 28.4000mm 46.9000mm 10.00mil 0.4000mm "clearline"] + Line[28.4000mm 46.9000mm 26.3000mm 48.5000mm 10.00mil 0.4000mm "clearline"] + Line[17.2000mm 48.5000mm 14.2000mm 46.9000mm 10.00mil 0.4000mm "clearline"] + Line[12.1000mm 44.6000mm 6.2000mm 47.9000mm 10.00mil 0.4000mm "clearline"] + Line[7.2000mm 34.1000mm 8.0000mm 33.3000mm 10.00mil 0.4000mm "clearline"] + Line[7.2000mm 35.3000mm 7.2000mm 34.1000mm 10.00mil 0.4000mm "clearline"] + Line[21.6000mm 43.7000mm 22.6000mm 43.7000mm 10.00mil 0.4000mm "clearline"] + Line[22.6000mm 43.7000mm 23.8000mm 45.6000mm 10.00mil 0.4000mm "clearline"] + Line[23.8000mm 45.6000mm 23.8000mm 46.7000mm 10.00mil 0.4000mm "clearline"] + Line[23.8000mm 46.7000mm 23.4000mm 47.1000mm 10.00mil 0.4000mm "clearline"] + Line[23.4000mm 47.1000mm 19.3000mm 47.1000mm 10.00mil 0.4000mm "clearline"] + Line[13.0000mm 47.6000mm 16.8000mm 49.7000mm 10.00mil 0.4000mm "clearline"] + Line[17.6000mm 46.2000mm 17.6000mm 44.6000mm 0.5000mm 0.5000mm "clearline"] + Line[15.1000mm 46.4000mm 16.4000mm 46.4000mm 10.00mil 0.4000mm "clearline"] + Line[16.4000mm 46.9000mm 18.9000mm 47.8000mm 0.5000mm 0.5000mm "clearline"] + Line[16.4000mm 46.9000mm 16.4000mm 38.0000mm 0.5000mm 0.5000mm "clearline"] + Line[14.2000mm 46.9000mm 14.2000mm 44.9000mm 10.00mil 0.4000mm "clearline"] + Line[14.2000mm 44.9000mm 15.1000mm 41.6000mm 10.00mil 0.4000mm "clearline"] + Line[15.1000mm 41.6000mm 15.1000mm 40.5000mm 10.00mil 0.4000mm "clearline"] + Line[19.3000mm 47.1000mm 19.0000mm 46.8000mm 10.00mil 0.4000mm "clearline"] + Line[19.0000mm 46.8000mm 19.0000mm 46.1000mm 10.00mil 0.4000mm "clearline"] + Line[13.6000mm 43.9000mm 10.0000mm 38.4000mm 10.00mil 0.4000mm "clearline"] + Line[7.4000mm 48.5000mm 8.1000mm 48.5000mm 10.00mil 0.4000mm "clearline"] + Line[8.1000mm 48.5000mm 13.0000mm 47.6000mm 10.00mil 0.4000mm "clearline"] + Line[21.2000mm 44.9000mm 20.3000mm 44.9000mm 10.00mil 0.4000mm "clearline"] + Line[20.3000mm 44.9000mm 17.7000mm 41.7000mm 10.00mil 0.4000mm "clearline"] + Line[17.7000mm 41.7000mm 17.7000mm 40.5000mm 10.00mil 0.4000mm "clearline"] + Line[21.2000mm 42.4000mm 19.5000mm 42.4000mm 10.00mil 0.4000mm "clearline"] + Line[19.5000mm 42.4000mm 18.9000mm 41.7000mm 10.00mil 0.4000mm "clearline"] + Line[18.9000mm 41.7000mm 18.9000mm 40.5000mm 10.00mil 0.4000mm "clearline"] + Line[21.2000mm 41.1000mm 20.7000mm 41.1000mm 10.00mil 0.4000mm "clearline"] + Line[20.7000mm 41.1000mm 20.1000mm 40.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 40.6000mm 20.1000mm 37.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 37.6000mm 22.8000mm 35.7000mm 10.00mil 0.4000mm "clearline"] + Line[22.8000mm 35.7000mm 22.8000mm 29.2000mm 10.00mil 0.4000mm "clearline"] + Line[15.4000mm 25.1600mm 21.7000mm 27.7000mm 10.00mil 0.4000mm "clearline"] + Line[20.3000mm 31.1000mm 21.5000mm 31.1000mm 0.5000mm 0.5000mm "clearline"] + Line[21.3000mm 35.7000mm 21.3000mm 32.6000mm 0.5000mm 0.5000mm "clearline"] + Line[18.2000mm 38.5000mm 16.4000mm 38.5000mm 10.00mil 0.4000mm "clearline"] + Line[26.8000mm 41.1000mm 25.9000mm 41.1000mm 10.00mil 0.4000mm "clearline"] + Line[25.9000mm 41.1000mm 1000.00mil 40.6000mm 10.00mil 0.4000mm "clearline"] + Line[1000.00mil 40.6000mm 1000.00mil 37.9000mm 10.00mil 0.4000mm "clearline"] + Line[26.8000mm 42.4000mm 25.9000mm 42.4000mm 10.00mil 0.4000mm "clearline"] + Line[25.9000mm 42.4000mm 24.5000mm 40.6000mm 10.00mil 0.4000mm "clearline"] + Line[24.5000mm 40.6000mm 24.5000mm 37.5000mm 10.00mil 0.4000mm "clearline"] + Line[26.8000mm 43.6000mm 25.9000mm 43.6000mm 10.00mil 0.4000mm "clearline"] + Line[25.9000mm 43.6000mm 23.9000mm 41.0000mm 10.00mil 0.4000mm "clearline"] + Line[23.9000mm 41.0000mm 23.9000mm 38.6000mm 10.00mil 0.4000mm "clearline"] + Line[21.7000mm 39.8000mm 23.0000mm 39.8000mm 10.00mil 0.4000mm "clearline"] + Line[22.1000mm 38.6000mm 22.1000mm 37.6000mm 10.00mil 0.4000mm "clearline"] + Line[22.1000mm 37.6000mm 23.5000mm 36.1000mm 10.00mil 0.4000mm "clearline"] + Line[23.5000mm 36.1000mm 23.5000mm 29.2000mm 10.00mil 0.4000mm "clearline"] + Line[1000.00mil 37.9000mm 29.8000mm 28.6000mm 10.00mil 0.4000mm "clearline"] + Line[28.4000mm 28.2000mm 28.4000mm 24.7000mm 10.00mil 0.4000mm "clearline"] + Line[28.4000mm 24.7000mm 27.0000mm 23.1000mm 10.00mil 0.4000mm "clearline"] + Line[29.1000mm 28.4000mm 29.1000mm 24.3000mm 10.00mil 0.4000mm "clearline"] + Line[29.1000mm 24.3000mm 27.3000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[29.8000mm 28.6000mm 29.8000mm 23.9000mm 10.00mil 0.4000mm "clearline"] + Line[29.8000mm 23.9000mm 27.7000mm 21.9000mm 10.00mil 0.4000mm "clearline"] + Line[23.9000mm 38.6000mm 23.6000mm 38.0000mm 10.00mil 0.4000mm "clearline"] + Line[23.6000mm 38.0000mm 23.6000mm 37.1000mm 10.00mil 0.4000mm "clearline"] + Line[13.6000mm 14.5000mm 13.6000mm 13.6000mm 10.00mil 0.4000mm "clearline"] + Line[12.0000mm 20.0000mm 10.8000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[10.8000mm 20.0000mm 10.8000mm 14.6000mm 10.00mil 0.4000mm "clearline"] + Line[7.7500mm 17.2700mm 10.7700mm 17.2700mm 10.00mil 0.4000mm "clearline"] + Line[7.7500mm 14.7300mm 10.4000mm 13.7000mm 10.00mil 0.4000mm ""] + Line[12.0000mm 13.7000mm 10.4000mm 13.7000mm 10.00mil 0.4000mm ""] + Line[12.8000mm 15.5000mm 12.0000mm 13.7000mm 10.00mil 0.4000mm ""] + Line[12.8000mm 15.5000mm 13.5000mm 15.5000mm 10.00mil 0.4000mm "clearline"] + Line[18.7000mm 14.6000mm 18.7000mm 15.1000mm 10.00mil 0.4000mm "clearline"] + Line[18.7000mm 15.1000mm 19.5000mm 15.9000mm 10.00mil 0.4000mm "clearline"] + Line[19.5000mm 15.9000mm 19.5000mm 18.9000mm 10.00mil 0.4000mm "clearline"] + Line[19.5000mm 18.9000mm 19.3000mm 19.1000mm 10.00mil 0.4000mm "clearline"] + Line[18.8000mm 19.4000mm 18.8000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[18.8000mm 20.0000mm 17.2000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[20.9000mm 15.6000mm 20.4000mm 15.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.4000mm 15.6000mm 20.1000mm 15.9000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 15.9000mm 20.1000mm 18.9000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 18.9000mm 20.3000mm 19.1000mm 10.00mil 0.4000mm "clearline"] + Line[20.9000mm 19.3000mm 20.9000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[20.9000mm 20.0000mm 22.4000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[13.5000mm 15.5000mm 13.5000mm 18.8000mm 10.00mil 0.4000mm "clearline"] + Line[13.5000mm 18.8000mm 14.4000mm 19.3000mm 10.00mil 0.4000mm "clearline"] + Line[14.4000mm 19.3000mm 14.4000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[14.4000mm 20.0000mm 15.9000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[12.0000mm 21.6000mm 13.5000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[18.5000mm 21.6000mm 20.0000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[10.9000mm 21.6000mm 10.9000mm 22.3000mm 10.00mil 0.4000mm "clearline"] + Line[10.9000mm 22.3000mm 14.5000mm 23.5000mm 10.00mil 0.4000mm "clearline"] + Line[14.5000mm 23.5000mm 16.1000mm 23.5000mm 10.00mil 0.4000mm "clearline"] + Line[13.5000mm 21.6000mm 13.5000mm 22.2000mm 10.00mil 0.4000mm "clearline"] + Line[13.5000mm 22.2000mm 14.7000mm 23.0000mm 10.00mil 0.4000mm "clearline"] + Line[14.7000mm 23.0000mm 16.6000mm 23.0000mm 10.00mil 0.4000mm "clearline"] + Line[16.1000mm 21.6000mm 16.1000mm 22.2000mm 10.00mil 0.4000mm "clearline"] + Line[16.1000mm 22.2000mm 16.5000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[16.5000mm 22.5000mm 16.9000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[12.6000mm 18.8000mm 13.1000mm 19.3000mm 10.00mil 0.4000mm "clearline"] + Line[13.1000mm 19.3000mm 13.1000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[13.1000mm 20.0000mm 13.6000mm 20.0000mm 10.00mil 0.4000mm "clearline"] + Line[10.9000mm 21.6000mm 10.0000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[10.0000mm 21.6000mm 7.7500mm 19.8100mm 10.00mil 0.4000mm "clearline"] + Line[17.5000mm 21.6000mm 17.5000mm 22.2000mm 10.00mil 0.4000mm "clearline"] + Line[16.9000mm 22.5000mm 19.9000mm 24.6000mm 10.00mil 0.4000mm "clearline"] + Line[16.6000mm 23.0000mm 22.2000mm 27.2000mm 10.00mil 0.4000mm "clearline"] + Line[16.1000mm 23.5000mm 17.5000mm 24.8000mm 10.00mil 0.4000mm "clearline"] + Line[21.1000mm 22.6000mm 21.1000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 20.0000mm 20.1000mm 20.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 20.6000mm 20.8000mm 21.0000mm 10.00mil 0.4000mm "clearline"] + Line[20.8000mm 21.0000mm 20.8000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.0000mm 21.6000mm 20.0000mm 22.2000mm 10.00mil 0.4000mm "clearline"] + Line[20.0000mm 22.2000mm 20.5000mm 23.4000mm 10.00mil 0.4000mm "clearline"] + Line[20.5000mm 23.4000mm 21.6000mm 23.4000mm 10.00mil 0.4000mm "clearline"] + Line[21.6000mm 23.4000mm 22.2000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[22.2000mm 22.5000mm 23.5000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[27.0000mm 23.1000mm 25.2000mm 23.1000mm 10.00mil 0.4000mm "clearline"] + Line[27.3000mm 22.5000mm 25.1000mm 22.5000mm 10.00mil 0.4000mm "clearline"] + Line[22.9000mm 23.5000mm 22.4000mm 24.4000mm 10.00mil 0.4000mm "clearline"] + Line[17.5000mm 22.2000mm 19.0000mm 22.9000mm 10.00mil 0.4000mm "clearline"] + Line[14.3000mm 21.0000mm 14.3000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[13.6000mm 20.0000mm 13.6000mm 20.6000mm 10.00mil 0.4000mm "clearline"] + Line[13.6000mm 20.6000mm 14.3000mm 21.0000mm 10.00mil 0.4000mm "clearline"] + Line[23.6000mm 37.1000mm 24.1000mm 36.6000mm 10.00mil 0.4000mm "clearline"] + Line[24.5000mm 35.7000mm 28.4000mm 28.2000mm 10.00mil 0.4000mm "clearline"] + Line[25.1000mm 36.6000mm 29.1000mm 28.4000mm 10.00mil 0.4000mm "clearline"] + Line[24.1000mm 36.6000mm 25.1000mm 36.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.1000mm 24.0000mm 21.9000mm 24.0000mm 10.00mil 0.4000mm ""] + Line[22.5000mm 23.0000mm 21.9000mm 24.0000mm 10.00mil 0.4000mm ""] + Line[21.9000mm 24.9000mm 21.1000mm 24.6000mm 10.00mil 0.4000mm "clearline"] + Line[21.1000mm 24.6000mm 19.9000mm 24.6000mm 10.00mil 0.4000mm "clearline"] + Line[23.4000mm 21.6000mm 22.4000mm 21.6000mm 10.00mil 0.4000mm "clearline"] + Line[21.1000mm 14.5000mm 21.1000mm 13.6000mm 10.00mil 0.4000mm "clearline"] + Line[20.3000mm 19.1000mm 20.7000mm 19.1000mm 10.00mil 0.4000mm "clearline"] + Line[20.7000mm 19.1000mm 20.9000mm 19.3000mm 10.00mil 0.4000mm "clearline"] + Line[19.0000mm 19.1000mm 18.8000mm 19.4000mm 10.00mil 0.4000mm "clearline"] + Line[19.3000mm 19.1000mm 19.0000mm 19.1000mm 10.00mil 0.4000mm "clearline"] + Line[19.0000mm 22.9000mm 20.1000mm 24.0000mm 10.00mil 0.4000mm "clearline"] + Line[22.2000mm 27.2000mm 23.5000mm 29.2000mm 10.00mil 0.4000mm "clearline"] + Line[21.7000mm 27.7000mm 22.8000mm 29.2000mm 10.00mil 0.4000mm "clearline"] + Line[13.7000mm 34.9000mm 11.9200mm 36.0400mm 10.00mil 0.4000mm "clearline"] + Line[25.0000mm 21.9000mm 27.7000mm 21.9000mm 10.00mil 0.4000mm "clearline"] + Line[25.1000mm 22.5000mm 23.6000mm 23.0000mm 10.00mil 0.4000mm "clearline"] + Line[25.2000mm 23.1000mm 23.8000mm 23.5000mm 10.00mil 0.4000mm "clearline"] + Line[23.8000mm 23.5000mm 22.9000mm 23.5000mm 10.00mil 0.4000mm "clearline"] + Line[23.6000mm 23.0000mm 22.5000mm 23.0000mm 10.00mil 0.4000mm "clearline"] + Line[23.5000mm 22.5000mm 25.0000mm 21.9000mm 10.00mil 0.4000mm "clearline"] + Line[22.4000mm 24.4000mm 21.9000mm 24.9000mm 10.00mil 0.4000mm "clearline"] + Text[6.5000mm 51.2000mm 0 139 "TURBO DOSE v01 2025-12-21" "clearline"] Text[52.9000mm 53.4000mm 1 100 "1" ""] - Text[43.1000mm 48.2000mm 0 139 "MS5534C" "clearline"] - Text[33.2000mm 45.6000mm 0 139 "WRL-10534 Radio" "clearline"] - Text[31.6000mm 48.2000mm 0 139 "ATtiny424" "clearline"] - Text[6.1000mm 7.4000mm 0 139 "TURBO the Turtle's Winter WEATHER station" "clearline"] - Text[31.4000mm 41.3000mm 0 253 "2x CR2430" "clearline"] - Text[42.7000mm 51.2000mm 0 139 "SiB CU Kiel" "clearline"] + Text[6.1000mm 7.4000mm 0 139 "TURBO the Turtle's TID monitor" "clearline"] + Text[31.4000mm 41.3000mm 0 253 "1x CR2450" "clearline"] + Text[36.7925mm 51.0962mm 0 139 "SiB64 Codeberg" "clearline"] + Text[31.7000mm 47.9000mm 0 139 "ATtiny424" "clearline"] + Text[31.7000mm 45.4000mm 0 139 "AT45DB161E flash" "clearline"] + Text[43.9000mm 48.0000mm 0 139 "nFETs" "clearline"] Polygon("") ( [51.0000mm 41.7000mm] [51.3430mm 42.4950mm] [51.6830mm 42.9100mm] [51.9540mm 43.0980mm] [52.1270mm 43.1360mm] @@ -1537,61 +1559,29 @@ Layer(3 "ground" "copper") ) Layer(4 "bottom" "copper") ( - Line[19.4000mm 40.5000mm 18.2000mm 41.9000mm 0.5000mm 0.5000mm "clearline"] - Line[25.7000mm 47.9000mm 24.7000mm 47.9000mm 0.5000mm 0.5000mm "clearline"] - Line[24.7000mm 47.9000mm 24.7000mm 48.8000mm 0.5000mm 0.5000mm "clearline"] - Line[24.7000mm 47.9000mm 19.4000mm 40.5000mm 0.5000mm 0.5000mm "clearline"] - Line[25.8000mm 42.8000mm 26.7000mm 42.8000mm 10.00mil 0.4000mm "clearline"] - Line[26.7000mm 42.8000mm 26.7000mm 40.2000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 44.1000mm 26.9000mm 44.1000mm 10.00mil 0.4000mm "clearline"] - Line[26.9000mm 44.1000mm 26.9000mm 45.3000mm 10.00mil 0.4000mm "clearline"] - Line[25.8000mm 46.5000mm 26.9000mm 46.5000mm 10.00mil 0.4000mm "clearline"] - Line[26.9000mm 46.5000mm 26.9000mm 47.7000mm 10.00mil 0.4000mm "clearline"] - Line[28.5000mm 41.8000mm 28.5000mm 48.5000mm 10.00mil 0.4500mm ""] - Line[9.5000mm 13.7000mm 16.3000mm 13.7000mm 10.00mil 0.4000mm ""] - Line[9.5000mm 15.7000mm 15.1000mm 15.7000mm 10.00mil 0.4000mm "clearline"] - Line[7.7500mm 12.1900mm 9.5000mm 13.0000mm 0.5000mm 0.5000mm "clearline"] - Line[7.7500mm 17.2700mm 9.5000mm 16.3000mm 0.5000mm 0.5000mm "clearline"] - Line[9.5000mm 13.0000mm 9.5000mm 13.8000mm 0.5000mm 0.5000mm "clearline"] - Line[9.5000mm 16.3000mm 9.5000mm 15.5000mm 0.5000mm 0.5000mm "clearline"] - Line[17.6000mm 27.5000mm 17.6000mm 26.0000mm 0.5000mm 0.5000mm "clearline"] - Line[17.6000mm 24.3000mm 17.6000mm 22.8000mm 0.5000mm 0.5000mm "clearline"] Line[21.3000mm 33.9000mm 21.3000mm 32.3000mm 0.5000mm 0.5000mm "clearline"] Line[21.1000mm 28.9000mm 21.1000mm 30.1000mm 0.5000mm 0.5000mm "clearline"] Line[21.1000mm 28.9000mm 24.8000mm 26.0000mm 0.5000mm 0.5000mm "clearline"] - Line[11.3000mm 44.7000mm 19.1000mm 44.7000mm 10.00mil 0.4000mm ""] - Line[18.2000mm 41.9000mm 18.2000mm 42.8000mm 0.5000mm 0.5000mm "clearline"] - Line[10.1000mm 46.4500mm 10.1000mm 40.3000mm 10.00mil 0.4000mm "clearline"] - Line[9.5000mm 46.6000mm 9.5000mm 40.8000mm 10.00mil 0.4000mm "clearline"] - Line[15.0000mm 35.0000mm 11.9200mm 36.0400mm 10.00mil 0.4000mm "clearline"] - Line[9.5000mm 38.7000mm 10.1000mm 40.3000mm 10.00mil 0.4000mm "clearline"] - Line[8.1000mm 38.7000mm 9.5000mm 40.8000mm 10.00mil 0.4000mm "clearline"] - Line[27.8000mm 41.8000mm 29.3000mm 41.8000mm 10.00mil 0.4000mm ""] - Line[27.8000mm 44.2000mm 29.3000mm 44.2000mm 10.00mil 0.4000mm ""] - Line[27.8000mm 46.6000mm 29.3000mm 46.6000mm 10.00mil 0.4000mm ""] - Line[23.8000mm 48.9000mm 22.3000mm 48.9000mm 10.00mil 0.4000mm ""] - Line[23.0000mm 47.9000mm 23.0000mm 49.7000mm 10.00mil 0.4000mm ""] - Line[11.5000mm 49.4000mm 9.5000mm 46.6000mm 10.00mil 0.4000mm "clearline"] + Line[24.8000mm 45.0000mm 23.3000mm 45.0000mm 10.00mil 0.4000mm ""] + Line[24.1000mm 44.2000mm 24.1000mm 45.8000mm 10.00mil 0.4000mm ""] Line[18.2000mm 28.8000mm 18.2000mm 33.6000mm 10.00mil 0.4000mm ""] Line[19.2000mm 30.1000mm 17.2000mm 30.1000mm 10.00mil 0.4000mm ""] Line[19.4000mm 32.0000mm 17.2000mm 32.0000mm 10.00mil 0.4000mm ""] - Line[19.4000mm 27.0000mm 20.1000mm 26.7000mm 10.00mil 0.4000mm "clearline"] - Line[19.5000mm 26.0000mm 21.5000mm 26.0000mm 10.00mil 0.4000mm ""] - Line[20.5000mm 24.8000mm 20.5000mm 27.2000mm 10.00mil 0.4000mm ""] - Line[20.6000mm 24.0000mm 20.6000mm 21.6000mm 10.00mil 0.4000mm ""] - Line[19.6000mm 22.8000mm 21.6000mm 22.8000mm 10.00mil 0.4000mm ""] - Line[16.6000mm 44.1000mm 16.6000mm 46.1000mm 10.00mil 0.4000mm ""] - Line[14.6000mm 44.1000mm 14.6000mm 46.1000mm 10.00mil 0.4000mm ""] - Line[12.6000mm 44.1000mm 12.6000mm 46.1000mm 10.00mil 0.4000mm ""] Line[53.8000mm 51.6000mm 54.1000mm 51.6000mm 10.00mil 20.00mil "clearline"] - Line[15.1000mm 14.3000mm 15.1000mm 12.3000mm 10.00mil 0.4000mm ""] - Line[13.1000mm 14.3000mm 13.1000mm 12.3000mm 10.00mil 0.4000mm ""] - Line[11.1000mm 14.3000mm 11.1000mm 12.3000mm 10.00mil 0.4000mm ""] - Line[18.2000mm 42.7000mm 12.6000mm 42.7000mm 10.00mil 0.4000mm "clearline"] - Line[13.3000mm 49.4000mm 11.1000mm 47.8000mm 10.00mil 0.4000mm "clearline"] - Line[22.4000mm 38.9000mm 19.9000mm 38.4000mm 10.00mil 0.4000mm "clearline"] - Line[11.1000mm 47.8000mm 10.1000mm 46.4500mm 10.00mil 0.4000mm "clearline"] - Line[28.1000mm 40.2000mm 30.1000mm 40.2000mm 10.00mil 0.4000mm ""] + Line[25.7000mm 46.2000mm 25.7000mm 45.0000mm 10.00mil 0.4000mm "clearline"] + Line[16.4000mm 44.6000mm 12.1000mm 44.6000mm 10.00mil 0.4000mm "clearline"] + Line[17.6000mm 44.6000mm 17.6000mm 43.3000mm 10.00mil 0.4000mm "clearline"] + Line[18.0000mm 41.7000mm 18.0000mm 43.3000mm 10.00mil 0.4000mm "clearline"] + Line[18.0000mm 43.3000mm 17.6000mm 43.3000mm 10.00mil 0.4000mm "clearline"] + Line[16.4000mm 44.6000mm 16.4000mm 43.3000mm 10.00mil 0.4000mm "clearline"] + Line[16.4000mm 43.3000mm 16.0000mm 43.3000mm 10.00mil 0.4000mm "clearline"] + Line[16.0000mm 43.3000mm 16.0000mm 41.7000mm 10.00mil 0.4000mm "clearline"] + Line[23.0000mm 39.8000mm 23.0000mm 38.7000mm 10.00mil 0.4000mm "clearline"] + Line[26.3000mm 42.8000mm 23.7000mm 42.8000mm 10.00mil 0.4000mm ""] + Line[25.0000mm 41.8000mm 25.0000mm 43.8000mm 10.00mil 0.4000mm ""] + Line[24.5000mm 39.9000mm 24.5000mm 35.7000mm 10.00mil 0.4000mm "clearline"] + Line[23.4000mm 21.6000mm 21.9000mm 24.9000mm 10.00mil 0.4000mm "clearline"] + Line[17.5000mm 24.8000mm 19.0000mm 22.9000mm 10.00mil 0.4000mm "clearline"] Text[52.9000mm 52.0000mm 1 100 "2" "onsolder"] Polygon("clearpoly,lock,fullpoly") ( @@ -1623,19 +1613,15 @@ Layer(9 "top silk" "silk") ( Line[5.0000mm 10.0000mm 55.0000mm 10.0000mm 0.2000mm 20.00mil "clearline,lock"] Line[5.0000mm 51.0000mm 55.0000mm 51.0000mm 0.2000mm 20.00mil "clearline,lock"] - Line[5.7500mm 49.7500mm 6.2500mm 49.7500mm 0.1000mm 20.00mil "clearline"] - Line[6.2500mm 49.7500mm 6.0000mm 49.3000mm 0.1000mm 20.00mil "clearline"] - Line[6.0000mm 49.3000mm 5.7500mm 49.7500mm 0.1000mm 20.00mil "clearline"] - Line[5.7500mm 49.3000mm 6.2500mm 49.3000mm 0.1000mm 20.00mil "clearline"] - Line[6.0000mm 49.9500mm 6.0000mm 49.7500mm 0.1000mm 20.00mil "clearline"] - Line[6.0000mm 49.3000mm 6.0000mm 49.0500mm 0.1000mm 20.00mil "clearline"] + Line[5.7500mm 49.1500mm 6.2500mm 49.1500mm 0.1000mm 20.00mil "clearline"] + Line[6.2500mm 49.1500mm 6.0000mm 49.6000mm 0.1000mm 20.00mil "clearline"] + Line[6.0000mm 49.6000mm 5.7500mm 49.1500mm 0.1000mm 20.00mil "clearline"] + Line[5.7500mm 49.6000mm 6.2500mm 49.6000mm 0.1000mm 20.00mil "clearline"] + Line[6.0000mm 48.9500mm 6.0000mm 49.1500mm 0.1000mm 20.00mil "clearline"] + Line[6.0000mm 49.6000mm 6.0000mm 49.8500mm 0.1000mm 20.00mil "clearline"] ) NetList() ( - Net("ADC" "(unknown)") - ( - Connect("U1-4") - ) Net("ADJ_CC" "(unknown)") ( Connect("R3-1") @@ -1678,7 +1664,7 @@ NetList() Connect("Q2-3") Connect("R33-1") Connect("R35-1") - Connect("U3-2") + Connect("U3-3") ) Net("GATE" "(unknown)") ( @@ -1686,6 +1672,7 @@ NetList() Connect("R30-2") Connect("R31-1") Connect("R32-1") + Connect("U1-4") ) Net("GATE1" "(unknown)") ( @@ -1698,7 +1685,7 @@ NetList() Connect("C30-2") Connect("Q2-1") Connect("R31-2") - Connect("U3-3") + Connect("U3-2") ) Net("GND" "(unknown)") ( diff --git a/turbo.sch b/turbo.sch index 63236eb..c8d3662 100644 --- a/turbo.sch +++ b/turbo.sch @@ -165,7 +165,6 @@ device=none T 44350 48200 5 7 1 1 180 7 1 value=DRAIN } -N 45000 47600 45100 47600 4 C 52200 42400 1 90 0 capacitor-1.sym { T 51500 42600 5 10 0 0 90 0 1 @@ -350,17 +349,7 @@ device=none T 44350 48500 5 7 1 1 0 1 1 value=SSEL } -C 43600 47800 1 0 0 input-2.sym -{ -T 43600 48000 5 10 0 0 0 0 1 -net=ADC:1 -T 44200 48500 5 10 0 0 0 0 1 -device=none -T 44250 47900 5 7 1 1 0 1 1 -value=ADC -} N 42600 47300 42700 47300 4 -N 45000 47900 45100 47900 4 N 44700 42900 44700 43400 4 C 44500 44200 1 0 0 vcc-1.sym N 44700 44200 44700 44300 4 @@ -511,239 +500,239 @@ device=none T 48050 47300 5 7 1 1 0 7 1 value=PWM } -C 43600 47500 1 0 0 input-2.sym +C 43700 47500 1 0 0 input-2.sym { -T 43600 47700 5 10 0 0 0 0 1 +T 43700 47700 5 10 0 0 0 0 1 net=AIN1:1 -T 44200 48200 5 10 0 0 0 0 1 +T 44300 48200 5 10 0 0 0 0 1 device=none -T 44250 47600 5 7 1 1 0 1 1 +T 44350 47600 5 7 1 1 0 1 1 value=AIN1 } -C 44000 46600 1 0 1 input-2.sym -{ -T 44000 46800 5 10 0 0 0 6 1 -net=GATE2:1 -T 43400 47300 5 10 0 0 0 6 1 -device=none -T 43350 46700 5 7 1 1 0 7 1 -value=GATE2 -} -C 48950 41400 1 0 0 gnd-1.sym -C 46650 42500 1 0 0 resistor-2.sym -{ -T 47050 42850 5 10 0 0 0 0 1 -device=RESISTOR -T 47100 42600 5 10 1 1 0 4 1 -refdes=R30 -T 46850 43000 5 10 0 1 0 0 1 -footprint=C0603.fp -T 47100 42750 5 10 1 1 0 3 1 -value=100kΩ -T 46850 43200 5 10 0 0 0 0 1 -symversion=0.1 -} -C 45350 42500 1 0 0 input-2.sym -{ -T 45350 42700 5 10 0 0 0 0 1 -net=PWM:1 -T 45950 43200 5 10 0 0 0 0 1 -device=none -T 46000 42600 5 7 1 1 0 1 1 -value=PWM -} -C 47350 42600 1 270 0 capacitor-4.sym -{ -T 48450 42400 5 10 0 0 270 0 1 -device=POLARIZED_CAPACITOR -T 47500 41800 5 10 1 1 180 2 1 -refdes=C31 -T 48050 42400 5 10 0 0 270 0 1 -symversion=0.2 -T 48050 42400 5 10 0 1 270 0 1 -footprint=P1206 -T 47650 42400 5 10 0 1 270 0 1 -value=10µF -} -C 47450 41400 1 0 0 gnd-1.sym -C 47550 42500 1 0 0 resistor-2.sym -{ -T 47950 42850 5 10 0 0 0 0 1 -device=RESISTOR -T 48000 42600 5 10 1 1 0 4 1 -refdes=R32 -T 47750 43000 5 10 0 1 0 0 1 -footprint=C0603.fp -T 48000 42750 5 10 1 1 0 3 1 -value=100kΩ -T 47750 43200 5 10 0 0 0 0 1 -symversion=0.1 -} -C 48650 41700 1 90 0 capacitor-1.sym -{ -T 47950 41900 5 10 0 0 90 0 1 -device=CAPACITOR -T 48100 42100 5 10 1 1 0 2 1 -refdes=C32 -T 47750 41900 5 10 0 0 90 0 1 -symversion=0.2 -T 47950 41900 5 10 0 1 90 0 1 -footprint=C0603 -T 48350 42200 5 10 0 1 90 0 1 -value=100nF -} -C 48350 41400 1 0 0 gnd-1.sym -N 49050 41700 49050 42400 4 -C 49150 43200 1 90 0 resistor-2.sym -{ -T 48800 43600 5 10 0 0 90 0 1 -device=RESISTOR -T 49050 43650 5 10 1 1 90 4 1 -refdes=R34 -T 48650 43400 5 10 0 1 90 0 1 -footprint=C0603.fp -T 48900 43650 5 10 1 1 90 3 1 -value=100kΩ -T 48450 43400 5 10 0 0 90 0 1 -symversion=0.1 -} -C 49150 45400 1 90 1 input-2.sym -{ -T 48950 45400 5 10 0 0 90 6 1 -net=DRAIN:1 -T 48450 44800 5 10 0 0 90 6 1 -device=none -T 49050 44750 5 7 1 1 90 7 1 -value=DRAIN -} -C 51650 43100 1 0 1 input-2.sym -{ -T 51650 43300 5 10 0 0 0 6 1 -net=AIN1:1 -T 51050 43800 5 10 0 0 0 6 1 -device=none -T 51000 43200 5 7 1 1 0 7 1 -value=AIN1 -} -N 49050 44000 49050 44100 4 -C 47650 44400 1 90 1 input-2.sym -{ -T 47450 44400 5 10 0 0 90 6 1 -net=GATE:1 -T 46950 43800 5 10 0 0 90 6 1 -device=none -T 47550 43750 5 7 1 1 90 7 1 -value=GATE -} -N 47550 42600 47550 43000 4 -N 48450 42600 48550 42600 4 -{ -T 48700 42650 5 5 1 1 0 6 1 -netname=GATE1 -} -C 47950 44800 1 0 0 nmos-ub.sym -{ -T 48550 45700 5 10 0 0 0 0 1 -device=NMOS_TRANSISTOR -T 48550 45400 5 10 1 1 0 0 1 -refdes=Q2 -T 48550 45200 5 10 1 1 0 0 1 -footprint=SOT23_3 -T 48550 45000 5 10 1 1 0 0 1 -value=2N7002 -} -C 48350 44600 1 0 0 gnd-1.sym -C 48050 44100 1 90 0 capacitor-1.sym -{ -T 47350 44300 5 10 0 0 90 0 1 -device=CAPACITOR -T 47150 44300 5 10 0 0 90 0 1 -symversion=0.2 -T 47350 44300 5 10 0 1 90 0 1 -footprint=C0603 -T 47750 44600 5 10 0 1 90 0 1 -value=100nF -T 47500 44500 5 10 1 1 0 2 1 -refdes=C30 -} -C 47750 44000 1 0 0 gnd-1.sym -N 48450 44900 48450 44800 4 -C 48550 45600 1 90 0 resistor-2.sym -{ -T 48200 46000 5 10 0 0 90 0 1 -device=RESISTOR -T 48050 45800 5 10 0 1 90 0 1 -footprint=C0603.fp -T 47850 45800 5 10 0 0 90 0 1 -symversion=0.1 -T 48450 46050 5 10 1 1 90 4 1 -refdes=R33 -T 48300 46050 5 10 1 1 90 3 1 -value=100kΩ -} -C 48550 47800 1 90 1 input-2.sym -{ -T 48350 47800 5 10 0 0 90 6 1 -net=DRAIN:1 -T 47850 47200 5 10 0 0 90 6 1 -device=none -T 48450 47150 5 7 1 1 90 7 1 -value=DRAIN -} -N 48450 46400 48450 46500 4 -N 47850 45000 47950 45000 4 -C 46950 44900 1 0 0 resistor-2.sym -{ -T 47400 45000 5 10 1 1 0 4 1 -refdes=R31 -T 47350 45250 5 10 0 0 0 0 1 -device=RESISTOR -T 47150 45400 5 10 0 1 0 0 1 -footprint=C0603.fp -T 47400 45150 5 10 1 1 0 3 1 -value=100kΩ -T 47150 45600 5 10 0 0 0 0 1 -symversion=0.1 -} -C 51150 45500 1 0 1 input-2.sym -{ -T 51150 45700 5 10 0 0 0 6 1 -net=AIN2:1 -T 50550 46200 5 10 0 0 0 6 1 -device=none -T 50500 45600 5 7 1 1 0 7 1 -value=AIN2 -} -C 45650 45100 1 180 1 input-2.sym -{ -T 45650 44900 5 10 0 0 180 6 1 -net=GATE:1 -T 46250 44400 5 10 0 0 180 6 1 -device=none -T 46300 45000 5 7 1 1 180 7 1 -value=GATE -} -N 47050 45000 46950 45000 4 -N 46750 42600 46650 42600 4 C 44000 46900 1 0 1 input-2.sym { T 44000 47100 5 10 0 0 0 6 1 -net=DRAIN2:1 +net=GATE2:1 T 43400 47600 5 10 0 0 0 6 1 device=none T 43350 47000 5 7 1 1 0 7 1 -value=DRAIN2 -} -C 47950 46800 1 90 1 input-2.sym -{ -T 47750 46800 5 10 0 0 90 6 1 -net=GATE2:1 -T 47250 46200 5 10 0 0 90 6 1 -device=none -T 47850 46150 5 7 1 1 90 7 1 value=GATE2 } -N 47850 45000 47850 45400 4 +C 48900 41400 1 0 0 gnd-1.sym +C 46600 42500 1 0 0 resistor-2.sym +{ +T 47000 42850 5 10 0 0 0 0 1 +device=RESISTOR +T 47050 42600 5 10 1 1 0 4 1 +refdes=R30 +T 46800 43000 5 10 0 1 0 0 1 +footprint=C0603.fp +T 47050 42750 5 10 1 1 0 3 1 +value=100kΩ +T 46800 43200 5 10 0 0 0 0 1 +symversion=0.1 +} +C 45300 42500 1 0 0 input-2.sym +{ +T 45300 42700 5 10 0 0 0 0 1 +net=PWM:1 +T 45900 43200 5 10 0 0 0 0 1 +device=none +T 45950 42600 5 7 1 1 0 1 1 +value=PWM +} +C 47300 42600 1 270 0 capacitor-4.sym +{ +T 48400 42400 5 10 0 0 270 0 1 +device=POLARIZED_CAPACITOR +T 47450 41800 5 10 1 1 180 2 1 +refdes=C31 +T 48000 42400 5 10 0 0 270 0 1 +symversion=0.2 +T 48000 42400 5 10 0 1 270 0 1 +footprint=P1206 +T 47600 42400 5 10 0 1 270 0 1 +value=10µF +} +C 47400 41400 1 0 0 gnd-1.sym +C 47500 42500 1 0 0 resistor-2.sym +{ +T 47900 42850 5 10 0 0 0 0 1 +device=RESISTOR +T 47950 42600 5 10 1 1 0 4 1 +refdes=R32 +T 47700 43000 5 10 0 1 0 0 1 +footprint=C0603.fp +T 47950 42750 5 10 1 1 0 3 1 +value=100kΩ +T 47700 43200 5 10 0 0 0 0 1 +symversion=0.1 +} +C 48600 41700 1 90 0 capacitor-1.sym +{ +T 47900 41900 5 10 0 0 90 0 1 +device=CAPACITOR +T 48050 42100 5 10 1 1 0 2 1 +refdes=C32 +T 47700 41900 5 10 0 0 90 0 1 +symversion=0.2 +T 47900 41900 5 10 0 1 90 0 1 +footprint=C0603 +T 48300 42200 5 10 0 1 90 0 1 +value=100nF +} +C 48300 41400 1 0 0 gnd-1.sym +N 49000 41700 49000 42400 4 +C 49100 43200 1 90 0 resistor-2.sym +{ +T 48750 43600 5 10 0 0 90 0 1 +device=RESISTOR +T 49000 43650 5 10 1 1 90 4 1 +refdes=R34 +T 48600 43400 5 10 0 1 90 0 1 +footprint=C0603.fp +T 48850 43650 5 10 1 1 90 3 1 +value=100kΩ +T 48400 43400 5 10 0 0 90 0 1 +symversion=0.1 +} +C 49100 45400 1 90 1 input-2.sym +{ +T 48900 45400 5 10 0 0 90 6 1 +net=DRAIN:1 +T 48400 44800 5 10 0 0 90 6 1 +device=none +T 49000 44750 5 7 1 1 90 7 1 +value=DRAIN +} +C 51600 43100 1 0 1 input-2.sym +{ +T 51600 43300 5 10 0 0 0 6 1 +net=AIN1:1 +T 51000 43800 5 10 0 0 0 6 1 +device=none +T 50950 43200 5 7 1 1 0 7 1 +value=AIN1 +} +N 49000 44000 49000 44100 4 +C 47600 44400 1 90 1 input-2.sym +{ +T 47400 44400 5 10 0 0 90 6 1 +net=GATE:1 +T 46900 43800 5 10 0 0 90 6 1 +device=none +T 47500 43750 5 7 1 1 90 7 1 +value=GATE +} +N 47500 42600 47500 43000 4 +N 48400 42600 48500 42600 4 +{ +T 48650 42650 5 5 1 1 0 6 1 +netname=GATE1 +} +C 47900 44800 1 0 0 nmos-ub.sym +{ +T 48500 45700 5 10 0 0 0 0 1 +device=NMOS_TRANSISTOR +T 48500 45400 5 10 1 1 0 0 1 +refdes=Q2 +T 48500 45200 5 10 1 1 0 0 1 +footprint=SOT23_3 +T 48500 45000 5 10 1 1 0 0 1 +value=2N7002 +} +C 48300 44600 1 0 0 gnd-1.sym +C 48000 44100 1 90 0 capacitor-1.sym +{ +T 47300 44300 5 10 0 0 90 0 1 +device=CAPACITOR +T 47100 44300 5 10 0 0 90 0 1 +symversion=0.2 +T 47300 44300 5 10 0 1 90 0 1 +footprint=C0603 +T 47700 44600 5 10 0 1 90 0 1 +value=100nF +T 47450 44500 5 10 1 1 0 2 1 +refdes=C30 +} +C 47700 44000 1 0 0 gnd-1.sym +N 48400 44900 48400 44800 4 +C 48500 45600 1 90 0 resistor-2.sym +{ +T 48150 46000 5 10 0 0 90 0 1 +device=RESISTOR +T 48000 45800 5 10 0 1 90 0 1 +footprint=C0603.fp +T 47800 45800 5 10 0 0 90 0 1 +symversion=0.1 +T 48400 46050 5 10 1 1 90 4 1 +refdes=R33 +T 48250 46050 5 10 1 1 90 3 1 +value=100kΩ +} +C 48500 47800 1 90 1 input-2.sym +{ +T 48300 47800 5 10 0 0 90 6 1 +net=DRAIN:1 +T 47800 47200 5 10 0 0 90 6 1 +device=none +T 48400 47150 5 7 1 1 90 7 1 +value=DRAIN +} +N 48400 46400 48400 46500 4 +N 47800 45000 47900 45000 4 +C 46900 44900 1 0 0 resistor-2.sym +{ +T 47350 45000 5 10 1 1 0 4 1 +refdes=R31 +T 47300 45250 5 10 0 0 0 0 1 +device=RESISTOR +T 47100 45400 5 10 0 1 0 0 1 +footprint=C0603.fp +T 47350 45150 5 10 1 1 0 3 1 +value=100kΩ +T 47100 45600 5 10 0 0 0 0 1 +symversion=0.1 +} +C 51100 45500 1 0 1 input-2.sym +{ +T 51100 45700 5 10 0 0 0 6 1 +net=AIN2:1 +T 50500 46200 5 10 0 0 0 6 1 +device=none +T 50450 45600 5 7 1 1 0 7 1 +value=AIN2 +} +C 45600 45100 1 180 1 input-2.sym +{ +T 45600 44900 5 10 0 0 180 6 1 +net=GATE:1 +T 46200 44400 5 10 0 0 180 6 1 +device=none +T 46250 45000 5 7 1 1 180 7 1 +value=GATE +} +N 47000 45000 46900 45000 4 +N 46700 42600 46600 42600 4 +C 44000 46600 1 0 1 input-2.sym +{ +T 44000 46800 5 10 0 0 0 6 1 +net=DRAIN2:1 +T 43400 47300 5 10 0 0 0 6 1 +device=none +T 43350 46700 5 7 1 1 0 7 1 +value=DRAIN2 +} +C 47900 46800 1 90 1 input-2.sym +{ +T 47700 46800 5 10 0 0 90 6 1 +net=GATE2:1 +T 47200 46200 5 10 0 0 90 6 1 +device=none +T 47800 46150 5 7 1 1 90 7 1 +value=GATE2 +} +N 47800 45000 47800 45400 4 T 54150 48900 9 10 1 0 0 0 3 To use Vbat directly: R10=0Ω @@ -818,86 +807,95 @@ device=none T 43350 46400 5 7 1 1 0 7 1 value=DRAIN } -C 48850 45500 1 0 0 resistor-2.sym +C 48800 45500 1 0 0 resistor-2.sym { -T 49300 45600 5 10 1 1 0 4 1 +T 49250 45600 5 10 1 1 0 4 1 refdes=R35 -T 49250 45850 5 10 0 0 0 0 1 +T 49200 45850 5 10 0 0 0 0 1 device=RESISTOR -T 49050 46000 5 10 0 1 0 0 1 +T 49000 46000 5 10 0 1 0 0 1 footprint=C0603.fp -T 49300 45750 5 10 1 1 0 3 1 +T 49250 45750 5 10 1 1 0 3 1 value=100kΩ -T 49050 46200 5 10 0 0 0 0 1 +T 49000 46200 5 10 0 0 0 0 1 symversion=0.1 } -N 48450 45600 48850 45600 4 -C 48950 47000 1 90 1 input-2.sym +N 48400 45600 48800 45600 4 +C 48900 47000 1 90 1 input-2.sym { -T 48750 47000 5 10 0 0 90 6 1 +T 48700 47000 5 10 0 0 90 6 1 net=DRAIN2:1 -T 48250 46400 5 10 0 0 90 6 1 +T 48200 46400 5 10 0 0 90 6 1 device=none -T 48850 46350 5 7 1 1 90 7 1 +T 48800 46350 5 7 1 1 90 7 1 value=DRAIN2 } -C 49950 44700 1 90 0 capacitor-1.sym +C 49900 44700 1 90 0 capacitor-1.sym { -T 49250 44900 5 10 0 0 90 0 1 +T 49200 44900 5 10 0 0 90 0 1 device=CAPACITOR -T 49050 44900 5 10 0 0 90 0 1 +T 49000 44900 5 10 0 0 90 0 1 symversion=0.2 -T 49250 44900 5 10 0 1 90 0 1 +T 49200 44900 5 10 0 1 90 0 1 footprint=C0603 -T 49650 45200 5 10 0 1 90 0 1 +T 49600 45200 5 10 0 1 90 0 1 value=100nF -T 49400 45100 5 10 1 1 0 2 1 +T 49350 45100 5 10 1 1 0 2 1 refdes=C33 } -C 49650 44600 1 0 0 gnd-1.sym -N 49750 44900 49750 44700 4 -N 47850 44300 47850 44100 4 -C 49350 43100 1 0 0 resistor-2.sym +C 49600 44600 1 0 0 gnd-1.sym +N 49700 44900 49700 44700 4 +N 47800 44300 47800 44100 4 +C 49300 43100 1 0 0 resistor-2.sym { -T 49800 43200 5 10 1 1 0 4 1 +T 49750 43200 5 10 1 1 0 4 1 refdes=R36 -T 49750 43450 5 10 0 0 0 0 1 +T 49700 43450 5 10 0 0 0 0 1 device=RESISTOR -T 49550 43600 5 10 0 1 0 0 1 +T 49500 43600 5 10 0 1 0 0 1 footprint=C0603.fp -T 49800 43350 5 10 1 1 0 3 1 +T 49750 43350 5 10 1 1 0 3 1 value=100kΩ -T 49550 43800 5 10 0 0 0 0 1 +T 49500 43800 5 10 0 0 0 0 1 symversion=0.1 } -C 50450 42300 1 90 0 capacitor-1.sym +C 50400 42300 1 90 0 capacitor-1.sym { -T 49750 42500 5 10 0 0 90 0 1 +T 49700 42500 5 10 0 0 90 0 1 device=CAPACITOR -T 49550 42500 5 10 0 0 90 0 1 +T 49500 42500 5 10 0 0 90 0 1 symversion=0.2 -T 49750 42500 5 10 0 1 90 0 1 +T 49700 42500 5 10 0 1 90 0 1 footprint=C0603 -T 50150 42800 5 10 0 1 90 0 1 +T 50100 42800 5 10 0 1 90 0 1 value=100nF -T 49900 42700 5 10 1 1 0 2 1 +T 49850 42700 5 10 1 1 0 2 1 refdes=C34 } -C 50150 42200 1 0 0 gnd-1.sym -N 50250 42500 50250 42300 4 -N 49050 43200 49350 43200 4 +C 50100 42200 1 0 0 gnd-1.sym +N 50200 42500 50200 42300 4 +N 49000 43200 49300 43200 4 { -T 49450 43250 5 5 1 1 0 6 1 +T 49400 43250 5 5 1 1 0 6 1 netname=DRAIN1 } -C 48550 42400 1 0 0 nmos-ub.sym +C 48500 42400 1 0 0 nmos-ub.sym { -T 49150 43300 5 10 0 0 0 0 1 +T 49100 43300 5 10 0 0 0 0 1 device=NMOS_TRANSISTOR -T 49150 43000 5 10 1 1 0 0 1 +T 49100 43000 5 10 1 1 0 0 1 refdes=Q1 -T 49150 42800 5 10 1 1 0 0 1 +T 49100 42800 5 10 1 1 0 0 1 footprint=SOT23_3 -T 49150 42600 5 10 1 1 0 0 1 +T 49100 42600 5 10 1 1 0 0 1 value=2N7002 } +C 43700 48000 1 180 1 input-2.sym +{ +T 43700 47800 5 10 0 0 180 6 1 +net=GATE:1 +T 44300 47300 5 10 0 0 180 6 1 +device=none +T 44350 47900 5 7 1 1 180 7 1 +value=GATE +} From 210779c07499a863dbd1f3013a41021e4f49b5b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 21:04:45 +0100 Subject: [PATCH 05/33] turbo_dose checkout --- gerber/Makefile | 11 +++++++---- gerber/turbo-bot.png | Bin 31055 -> 25708 bytes gerber/turbo.png | Bin 58993 -> 58640 bytes turbo.sch | 2 +- turbo_sch.png | Bin 218488 -> 190442 bytes 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gerber/Makefile b/gerber/Makefile index a899438..4909ca4 100644 --- a/gerber/Makefile +++ b/gerber/Makefile @@ -1,5 +1,8 @@ PROJ = turbo +SUBPROJ = _dose +SPROJ=$(PROJ)$(SUBPROJ) + VERSION = v01 GERBERS = $(PROJ).plated-drill.cnc @@ -13,9 +16,9 @@ png: $(patsubst %.gvp, %.png, $(wildcard $(PROJ)*.gvp)) %.png: %.gvp $(GERBERS) $(GVP2MAKE) -o $@ $< -w -B0 -w --background=#ffffff -A group=1.0 -X $(GV_OPT) -zip: $(PROJ)_$(VERSION).zip +zip: $(SPROJ)_$(VERSION).zip -%_$(VERSION).zip: %.README %.plated-drill.cnc +%$(SUBPROJ)_$(VERSION).zip: %.README %.plated-drill.cnc rm -fv $@ awk '/: *$*/{print $$2}' $< | xargs make zip $@ $< `awk '/: *$*/{print $$2}' $<` @@ -23,9 +26,9 @@ zip: $(PROJ)_$(VERSION).zip %.plated-drill.cnc: ../%.pcb pcb -x gerber --gerberfile $* --name-style single $< -bom: $(PROJ)_bom.pdf +bom: $(SPROJ)_bom.pdf -%.bom: ../%.pcb +%$(SUBPROJ).bom: ../%.pcb pcb -x bom --bomfile $@ $< %_bom.txt: %.bom diff --git a/gerber/turbo-bot.png b/gerber/turbo-bot.png index 63fc6489465eb717c959ce2322c74d173638d6f7..819ed1c220a1119a5c372b31f20e471ab2fce085 100644 GIT binary patch literal 25708 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 M3;O4a&e=r#2T*dN<^TWy literal 31055 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 FKL9d)5_|vv diff --git a/gerber/turbo.png b/gerber/turbo.png index ef438f7b2da6bd4e800a7082d13d326983afbca0..482eb9e3b715ae8a2c391a0647e8b26689ebc274 100644 GIT binary patch literal 58640 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 literal 58993 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 PgFsqp5AGG;wSN9zCLwt$ diff --git a/turbo.sch b/turbo.sch index c8d3662..5531f8d 100644 --- a/turbo.sch +++ b/turbo.sch @@ -17,7 +17,7 @@ footprint=gseboard T 55400 42675 5 10 1 1 0 4 1 refdes=BOARD T 55400 42450 5 10 1 1 0 4 1 -value=turbo +value=turbo_dose T 55400 42025 5 5 1 0 0 4 1 net=GND:1 } diff --git a/turbo_sch.png b/turbo_sch.png index 3e7e09ffd11d91af23580a64d0826cf621645b2c..10431d9e0cd58bc277279e422c736ad44e9b7bbb 100644 GIT binary patch literal 190442 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%0D~S#ksQPDKVsX5oXs_>sH`n0b*woRV-$I(o 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%0D%JWM{`kMA&VPvx|v| zal}2u!&6Y$(>3aap#@mT{+GCCV<~X1t zh)xx2LK&L6)qrS%!r(HaeP`md2=Axes^^)`E&RTtLVo*xTDbd-e=&EOaa^ zkMrvSzP7Mib>->of@<(gRY|ENC+D7I45-ymM%tR2A!D$B6$ajc#4GnnVP|J&Ik`TV z0gSq$lhV_v>FLKOLK4oDUen@34$y4mXLq8Yww6|HXTaJ59T3-K0VfFAr^U@k?1~N>*iuv zCwL?9E~K!loE$ug&M}xxwv2~U)^x9pVX%b_wf~h>OoI*nKWQmjc1h(ZsRX z%ywodl~x{ZL=Ex^fmU`=-^nZMU+_@+=e#ihT*0AQG;CC*5fmIOV7E31#%OGWo!wO% zY{A4HYKL*74i(i~EA@z}2BrVb3z5)A()i86*&ob^@T-1e*yZLoW{ryA2#Y+;Dd)ID zAcCKU>T8?o4Iaj7@>b3`8vGYtHxjNa1*sgiy1q$hgng?xnv8{3v%9y4jEwxem59O{ zNR?8H38>rSd38)A4G&+2~eC??j{)g@(Nu?dMGDi|t6MfE&nh#1u%k1+^dOLg@L z_-63_fdn5Qs>jB`5gZg`XLA<00XL3-^&b?3G2B)U9z3`PX{Y;ik&%VP#RgRQ*a*P9 zGLn+v5fLIN(g}QHEiF%&n0i`T(v~}ooId6=Y@Rad}E$bfW?_X)R9tk#_ zL$;?+b2`fs-sVASK?=J*BUak#~`i!MsF7`Db}KBPj`ogao=@ zTy*rW&Q55Us*y$JljU;I-a=;wMn-0eO~NxWGQff`>~%7Ob)(J~eT>MLwE2D(Ji?NY z8r8=7{j;O{A`e8~Jvn-hZOss~%lP3$fROBSBE8^{Xsh8yNdZw2vwc+kn$SZNB@=}| z>F399?-4(X>FVy5eiXXnSPlK~17f6z_VmrGS76LU?eDhX${TF3T&CQh+V+dvc{0X8c*@Fiizj$ZgmxHFZ z?eXpGX#1M=mV46N&_Kz{d$vB32RC$zXwZ1R?rq5v8>oE%))X>i&&X%F1N?&il|Lh#wLM{DE{oXpG<#(&Z-d{t_9ftg3oH zCBw_>W@HTlMO9rLBv!qV(Y?i@>KFWVC~nCa8EwC`lD1}?BWrSUa-h#_&COX|o;xWh z48RSo$N97Nj9Mn~(gL56oIKIr|CNLUDneXLETgj0x#<%|7Y#&LV0V&)goMC1*3;Ea zwmkfllwN(G|E;uJ&d3*1OZSR^+;ZdHk@`v5tGHL15p_ki80uXy&&8yryJu$V_MSbwO#>w0lW-^pJ&Yd- z?-8TThNIpnZCKdV`giQ^?wSqf#6b87u1Q6CIq^e2IQXx7>5k($I5euP9MCzd|7lhIIEXJQ4(D^r*(c0|A~F!f%y&ki@$3k}-;E_N2& z5}olG>TUe`^(%Dd=Q94f30}TQ1FM|xCLMQXUqGA;Y<>3jrGD)mK5NmIR{B3M%+p#r zI$i-evlQkFu%bq`OxG#W)ANStv$WJyZ*C4$zpHoR*eG|FLdXCYEe(;yxIFR()&fpx zt;@+%%h$ckh(wk;*enaml^E#fP{Y9zvprqI%f_bo;zh&ANZE4s?DF#R+{yME&QNif zOTQUpq$wkHG!@mg~g1&*p46MKiWrc2%(59i$t+S?z5cbJ-244D5#MOmc?{Y8&vtKkx;Et z6>v(4lBAw!nd?~EDA(5~+Pc*CQ}4T~ib}Qf!5Tm$U?rewKos!pjt^8}Z95<#|y?@hRDAmk}cq&jhy6*UAFodPk9K6QSaqD;X{(Upx_KfC)&&|(G zj4Js$fEB^^>+kOmMFTiiVH7uqu%$fFP;IOD2G2ZFtor=cLN$ixk)cJf(GgstK*1j3 zr#`IC`zx85nGi{S`5BX&hbMvCrnS2pBcu(g>^Y_XmL_iXY9*XPeAVd zMptw%v%7#tZ3?A9ApL#O%ZbW{<2o&j(|sX0r6OG$8xx z|6O}PwJ%U$cMdrCU60?x%7~1Ng#M3*i;F;E=eX=8{sO$_(udvGdUx-kpD7$Ac5$^k zJ}`aQk!dydCgYh*j6}2v+Ep)+;Y}GYykVLpnl6vm`<@}cqW-eC%>4E!{=G6yUi!UO zr?DH=|J?uY`QJfI)3uSo-Ts9b$#T7HlCsz8&)Q=m7$f%BmNuWy9O*}~pn#|gutE#g zATVnL49e!?#qE%LoNM$MC0D<3_a?wOV%&Ugq^H_KsCPbOXESgFd|_q(ZWIv_;c<0Q z78gfiAK*?gOlQO`vR!j|%CqruRKKjPrk7Qh`j=ERy&yXa_m2009~19})Y!?-wJD3X z2{-;iSSbivK|yUfxdK_ES zdcB_O7@hd>21Oh_Lv#9`Yb@cwTi?8VDQNxY)AY0%iWYT%3ij^qtTF4CnCsNu-j5Ua zy!`j%2|CPvXnoX6Ei`ooOFxt8>Fc}NUPFP!mt^GRd~RbQO~H4drH$&Je)`#u5}KpA zc!jAfv^>Xx{ep)xb8~kVM-JRMoGBa=IeQa1Gs1oK(%9Jh$g9=aL`Robx6Zppz-!S> zlbmgsdETzSUCvTCioZBIf40vvbF;lP(Q?kCthc?tsLPE{-%G-;aWUfHXYz^zZCAdY z?7w*VCA)W@EZs28X6-P==v~sFn~=0FDy;cG(m^YiiP z?(W8p-rd_<+pf>wIyg&4G);Bl1X}Tj)7wTjZZtA^Zl#b(i+qcrBQIV18;q--zaN|)!F&2i`}VDyo12G+hx*0SWWI~z-&vz|m4Vy%`@hM{3zJPNDJk*u_pf&T`&w9S z_|Komlw{=OSn#hDI56@XWq;~A{^iRTIIba6n(?P#0??AKG6|3c^Jv=!E5FK}JF`87 zZ!$6hBvJs*FoxE{9{jRj^YZJlBUh!R*-xJy`#aWRCsLV{1BeQW5ZL%jOG?fQ3qvuU zH+EodHpd8+)efQ~Y#Jg7a%oEXdU_c4o^(`BZmII$l#}zoXz5S~&pWQl^gvWn(g2{Q zxq)i=m){{M>B`Xnx?RW7jlGZ3n5JPdiD#gc%jx6&k6zMVnsixz*sUDCy1UV7ueJ{rp<3$^VJ%<&mM6B6HiA0F)FZM*kLNz$8Y?U=Vv zVrF73i|gl;?Chg+b33@Kr~<9VMVO2y$H%d{^F?|2KN55c%TAlC`2f|>76FzkDRDsg zgdS$Bf(~#u=47xjzkYq=<>QOND?B_L(`vzkfQ*a@Y=P>NkMiinJ>GxZ(NBDx@3H0L z%pSBmSllYGx%1T97bitOU{c=DtoSH7xWD+2=8Bu9P}=jdt^OESl77Y~C82bumdZ{Z zS>I`=ZQ5N4!JbuJ$O%{MRX_+E8X9C|WH`9Fkr=|_1Dfo-S$8rzZg&oun>TYcN)Itd zK6^%}rFbzjTh9-E2n(Z}mhVJ4sP@>(#9)5vR54J36QU0Ptdw@`@){o>kB?`-^p7?U zFMz$-($s}OZRVl54 za&oR=A3=?U)KU8S^`?dforqS~s`=S|7ej1*01q&9N8^J43$1ing8UGj!>_I^9S%Oe zq>Hxf4$>%WOiWDKeO0-+bE(&!jy5L{zTL~0gp8}DNmY80T}0#DhYp39{CExjJpp^c zsHk4f@W{(spV9NO9+vtxx~b`q-H+y0v0*qnJ8NjXc>n&AEp5=pj}n-6()sZqenx?e z)ku8)oQsDi=u{#Zs^@_NR1!{?v=kJ878Q@l2EsBA4Cm{a3k-1TTa%`I`Xm+Ij1dm$ zNA6{>}m6Dk$U5c+uQGaUtP15{YbKRZvwV=LBWW! z1#AFWcXIH^>Lvc8qNEH958q|Lx{Ih%MO|H8ORL`?W3H{O4ewA;u(M(vqzwu!4cRqm zX}^3PO)OaK6YlPn82)U%W)>G0@kj!eKwFuuNAnu9rm%2~^h=Y64-poD)$y~fjhY$H zC1IcjU2B*4F#5#{4P|9P({>I6gAv}RH^Li-`}*#qIXiVKEi*F{&11HYo}nRo2^&*q z@P8J6K*J%&gvcJ^*DnnXn8W~Lok25|k@3B)ZE|r0=H-@e-#$winDFuN3=a)qe5vCt z{OgPDSP5#rd+WV2{V?eOaWOYH_X#U46~>N(httN^w(&thbTpkU=hiH5b(3&<#gSdi zQfW%IHa6pS((;Y7S`JX4u6 zPX=*<$i<6G9*qAeK3$^WwPiaR{=dx6eVs9Wd=VCM(h_pw-yionknAQJ_YCWzC(Eq?c8jMY z*2t0&|7Rx5^1t9v{zvI{lPEKktComt)fDcAZOHHZuMJ2 zdcP*oK2n;8#6;wgV+JjJWA{BKw`u&#(~A~sHxF)^TlQ#usXAx$FTQ{7b9(9H+TX-` z_X6NHFf{a2<<}K(UVI=~YY`&}1s*@K`LFWgrc5pTy!C4?F6AJqKssSJ#?$*}Y|Ihu z8p?iP;C6$oEYT)C^mqL6mjEYXcfhQJDG?8ig@r}Xy}1M^@IjwPM@9lf%Dz`Dd+Sz^ z^Az?P;Jx@F8MZcPi|HRy{Hpd87ZE8>N%??hs;etThD~n!w*&l4xT*xTJj?@T(+cG|evRQ5Fi3Ag<=$g9hJ4r*h1 zX?puk{7UXKpC=hH`Tw*4^Yegzr2v1(|6N@4*qAA8j5tluSvoV5678cwHinK_;s#YYEwFHM z-nero+W81qR5|{532+LU5a!{@NmC1pZ4?O*8@O2jn*o&Qi>a!p5JnkPx!KO{%SrZC z$tfq@l$<>8yL8wam#Jm5**?8+HFKd3MawFZl9Gr_!xjoen3$|j%T{_n~Ki6(JFX|Zaaclke z?BfkR+9hPv%z!t6=QcJrmj9Ubg}y5H4Ltk6E;3ZOj@Ry~CM7Ixa{N)N@j2-AwU+si zIb&hb+1jd8WNc#M>+k<#;$KUWcuZs@df@3_6)Tv+vE5fyRds(_LjO-4@G3pMq5CE% z3$&m-B)RG77oecWwfFV$DL;_xU~N8^8*+6#vNd$(|8jchFJMB(Eyw|}@ZJRN95ppH zlydZ&={33gObPFYhK43gh7D7{)^cu6&NWhW0fP6Wq@*}#WcBs+2|$tY%+F$sw^#sB z-Q|^(G=q^@)@!_hOc?Z;dZEA(7*3o(hlM6UQ1_z`V9urbD1tg4FF!9xZt*}kmYDzq zMa`_*AXZxT#m|wm8>IKLGN{O#o#CoB)RMBAt#l=f2E7x&~ZzYP^;{5Mg z&#fgj4UOYXA0HF%_7b3veet5Vu`#2nY8%%9!yGV)zW2_5<+YFg?}wsocmHn{&`E@n=j6?q1yu6+5?Vs)e z!2=@%Tokkwq`Jk$C`#SzDBC<)kS2mt)3|r=qj}8n<74eR;QW`{0O?CO|iX3#%wEkb|)Jq^p?X&0e{3Wo#%W zDhlB~(P{ht_d&~ z$;rsDp#w5S5R(MycjF?I2yADw4tI-;zsCt0q4V{pEXUG9$vwiO{)iIABMHI;)QQ4^ z0>l|%li67tL;J|&6PA~khZO=U4(Xy9DwAM>IcNg?{YfOo8^T%94MWR|iF<8r4Y|fl zLZ1*W1YwoP!r+@^WI>NMrUP4dg9UB8pvtcYptmo>9l#JlOmv5}Yun zK%(Jw1%RBm?I`*AuUx{yju=JlL=qw*3Ng@WXozxg;f5y5$IPz`c%EisGd4A~=qWgb z<;}(h{jxX$iu|?z*9GwJR^W)lWkARb-iPx*mHYG|qhYXO=L7^Ao0^mr6|a&WC8Sp! zdmbB$sym5RHeo~m1Pd#xsE7!?Jc+0=Q8~e~;TMdq9P6EyjxIVX3T!kGTBsEqx{mtS zo)Gsyx?f&VkqS^sNT~AzUcA`&^Z6-Zyg79W7wYQ^>EL5aC}p_oFwdgx^Y!+=)KpR`$j{Gj(uA&oNz8?f ziz~49citO_+#q1Unx=o1ylb3_04d2?U5F=eC69N%Gyq4455)6pdwatYzwrqxBE0Nk z{GZ|dg@;erD911cfX2M%i~+ zgvf)KaOL_z!F4%niQo~{cs$|t=ur*UotT&y))6LP)JZA{To_bkBS+(8&%UqKaq7>z zWgmW~RtGpB7bw^L+TC(Fn3m}wx6xC|Kc74|J`VqFJ#8jIzZ}_rHIy%?>qy7W8u1-x zTjwiER}QAV&Zyk~ura+c*6!i6;-aMsjn>wCtsTi`FWI|(X=!YEuO^}Rabcx??TO^9 zCxcHbdKA&I=i(ll4VQ@iB6t}<4mP}wt}dp&aV)DKhG?beG4qx}ZhzkoF!c`?Ydz-@ zx6gD-ntHm!f>nc1bW-BojG?)2-x?Mjp{2DK4z6u(wjjt>Y!ND!#(RC$??4eOvmbf@xTQPa^;=)(%07VJJPFNFCnUX1&d|43T}gRg=@7<5EX5Zyih zElv=(+XB!UAf>u{=>Cq-(Jin2HNqeY5R%ZkIXg4^xVgLMYE^#e4hL#gR7B&7HWkm& z$8P9vjvPH2K>4M)8Qf|EYBYwv$jEl^KwDc|q7>ZS1qNWq8}Js;a~=&2WfT(uMv9+> z5f1ed>!eh_{t&P}4_8GZ`o!*MwP373_MquR{@P_gPhhL}jlE|*9xR;&MF&Jp&~kdS z!tcloVl_G`$rCsWD#ecpJM6m6qM+ze4N4LEn#Z~?`G^j!1X0aN0&)nE6ow>FJz!e)sn=;LL@ttLd_diqEl82KA=Og%bR{*>*?|*-h zgM(C~cNb9!B_*X3)br>$;s|sx(7KxUf9i2VPzQxUoS|_9a0NBXdBP0Q@Svcybfs`7 zCM>L``{^xqe0f;@1P~H+R~;Q4=+I!n1n*sF)>D8K$C-f^5!;JGLQB}0d4i#Iuy=Gk za`-T?kqTtA;bK9LgW+Ris)I;JU4J+an+3^O5P)oS37BahHw3|M=itB?|2M=;NJ!{r zG|vad-ku(GlxTJUCx*e}eOewWC3KUJ%?ZrunV1BqG94f%=i%iwytG$moRH@H=tFCN z|78G9_#k>iVZf^J*^pQbJfZupq|*fMttvh%UOWS3M{Kg=v;af*a(F9U<4LfBNb;=;AyYv0-p5B}cyQf?Ap>}%xn zLv-AUfl;&zGghL!XX5?y_x)kG4VjCdI`$gX@Fd{p>OH(O}~8I?M!s z=R^2FP!cUiuCYG4#SXropW@j^P<_I}!c!9y_Wi(IRnaC+qZ(ODOV?p1g3$iU`#D^H zXpRw&`qlW>jT>u2q2kb1RKeVq{kabvsu_{r6R0kLYT(Qa6}1pX2LH=~?b!%&_K+cR`g6myAc zF=IP@)m1rFRXP0{zg&Yq9BXlE`F!tb{?EOnDH-|7j&U=`xG#6&K`7;oiK*$mWnL0i z&@JHLPkMuxdHCpDkA!)EebDE1CO21wFl8$+{YlkDw`^Xk26bGY3#IO(R)6~Mu89z{ z5LbfiRPr~Kgfb<|Q@iAm2^1fmKA*9=CV2KqK!8B!QBaV;xUQ4lz31U740G?duU`=c zjuGjy=XMamb8!Cr`R+St_?`?xyu z$5Rq1ipWBulAt+e@c9RAZ=Hqmu-f#Mu&rH#^@Xa2zUa|%VfKDAwM)miwXMx% zbJbc;FEucbOn+DW-9ke#?3HMj5(?E~S67{~Yya!l5vc<;DKJKNk)^@V+I8Km!)hCo ztC#KESM}-+%zYoY+xVb*ZTrovymqq_XUpk1hn8U3H+nO84q^)UmR!y7?+mic0&=-f z#}LoUTh8xo-AoN8M~}SN*m_mT%*{PDIM_Nu^KnRz$GS5MP^NnA^=%j{^(=J*u zgvv7Np24!{jVmZjO%t!bqBzk${(ijD&=t_z?0eNPWqwf5Bk@h}E^axsRVjge#7J3O zY(QRpOu^DIbyDS1z|dQ{YnG0OKJNb@vxnfO_r8h|7FwPxrp8AdQ4f^7Yxrs6jt5A- zI~7`;<^^>|)8d!q*qProTdU?`oQXT8yp&eNK9qO%JxraJ60pdR-HaWu_pDx9drgxY z>HBK$9bfnA&mPtm*3m;c2M&}dXwaYeHuH^?`LbM9Q6>%mn?G$KZ$-LNYkg?9*)f^9 z-d#EeL=r4aO}SWEA&vI_MhVNuci_^1I~Zxoz}tcN27eKM!TKXoYXQ`S$APi@g*pC9 z6gQL~c6N5>E&49tpX?LN=YT6be|`*}RFop~-jdr_ukPyQK6{q>#nx#S7Mnkx0&YaG z3;ekYR1q8H(!YNI^^fktwu-r{si}#g?&Jcct+2FN>ZBMJ69=_fkA%dfTR*#-8pcWFgaE zv$NhCSerC?*}m+hSNc`Diw_I>uviKnEx!N$cXuMm{k+OnZDw%}mt>aovx*KZ!E!fq zZk=E~@0aGyACq@3*G@|_F{OLu&ia8X61#qlE^LIDYnRmyFTC2Rc2|h`{FbAJpAgAk zqcb=<>R@e+D`)obA(-ZRk4u-_*CT&fdnH|)OV)0wu*lVEiQV5VYbo~3VOVj2ReC0X z=~0LGc+j4DJQvb-TL0$Cs|U8-dNq4agw|gFPj12B31#TU5NV3TJy8kc-?hGedVbf> zg#Mv?`!1h8E5etO%Y-X@IDGh%t>1f!tEAsNFEBkkt=xc6pJ;*Te$)OYyO=Gj;VsaW zBpbV0f^M%h>4_aNotPGVEj~6CeA^ke?=*w)>oR==S!D9k>I}|;5&_Y8(I=i~A zlWM+q3YSeoW2buO4!F*W^76}|sPO9UzQD#Ng@I2&fgj9zYlsPPlfG=gFm-s3^5*ik_YJs7;0x zWw8;9>{mHThOgpVMCPn|b+Z;aosa#cl-T&TBG^?kX>)zLpWd(kDh2&v9Y%9THOek+ z#}eL=`!>oBlB8u^71F~}c5*uTpIRfl(;Wn+V!VEj_pqpJjrQt)NSw^u)ha|VpYM}| zk_kKb>(_?P&TD`WB_t)OByi=ROuSSfxkr4&Wa7u->&30+jgi%1`e1q4M5z(!rLdZh z`;5MipKD*adJp%9c}`O6&ih+gvZAK;G|aEWWj!Mn*rol;OUkEzPVYZ^_}{f9=YaPj zFYO?m%iqW%O##Xu{5hCPqFJ{2rSDFb+4km%H|!1=GCw)Oy8 zOu*AxRc>YIR?^b;YK-Hy=7Zdhi9te7tUwFZBW8#+!4>`nU`xOQSr^Ws878o!OA6pR zp^d?R>T)u6d2`7|)r*BL`AyBxcE?pt9;ABK06MwErsM!4Zw>%m~|?aR8{D>(oV$ufWxri(sET^3jeTs z0|JD~U)oVgJT0P|aVoC8)_6@@Wk>Eq!iMikZjYuU=|%3X7Or1Z7pdfBlZfdZ1hl*> z(f>e0fNr|fdPv&ZdI2B?@GB@RZzWyc+7R8t{|*WeBr%&IWFd?1@sMzP{fjj zIsj7zz{&*SjP&#{nODFwn_pmjGdXt;EhU~-q#QP-8sY&0$_KLPyrAF)&?f-8UPRj7 zALjYZe-;5wfLW+adB(R24mf^c;rhuh?rH~$KXdmtUF$Ij?@Ud)IB}B0k~d};hp>ff zG^VnBpIg38THJQevAX};_2J`uTjGvN<`3ZO%aJpR?|)E~QQ_`7fllu9wKwwt1EX4U z0SPuMO`2v`=tdtlsa4l|pp$c4F))$(6LCHIH%Rx_%Ud$^3j6jkx!LR?+UE^8>Hmj9 zBy>rU)E@AaE!$dKJ`{0+XJ(db_Jy`t2=|j(t_nxPlZHCEI@RL?*P0S}G+tJ-w{qmk zk0qp?fB56+Z7+S7;x4z~wT!3?aE2Ff(#?r~P|%1AmRiq)q1A@E8D>z_osr>T?B^hV z%2APkh~UvqKG4l0;nP}RFpv~@GerT2Scky|#2r9wL@d|mfA8^?P*hf)dOy*Tr6$Fq z2;XE+&t3Vs>XF-UyNtFZdH(sdKO3sgHPn5miRKp;CbsN%)o9^d87nKRyu!k%+eXp{ zv*GA4W0oKfkP@*Oegay+G4#q*^4jLqOTNr%_i285w!+o#f4)S^GVTr~dUIudbudxX zQl|fk%QZ|;x1J@~{n{2`tS?Wj)heu{2xQ!JQ^6Xm&khkteA}vFeR=9qbWOq2;+G1X zP7EHi<7HJM1BQMQCO3&(_H>mM)RE?SY_0DhIRw~)sKyaQpHCS}Mi^yf30<`BF*!8J zKQi0MuN}nZ#PgzGrHbkgjS`j0Rnp2#r&EoroGmT)3Nw;Zk~7m}Z%RG&ulbw0>ASo7 zF-ATWG*=%9ltDeyJlzT$|%SmkS>VmQ#b;Y6Qw2%CKuMe=ZMxql8 z3wuQQ<=Z!*^XJ*A1JFbO+#_WMN(+HGCN)+cIv#bn>3oAzQP%*m$X~fq13@@M%dD)d zr*A)JrH0{K6rIdG+RvU}9Ze9U1AS*~04tPSF9?%8D5$ z*C!8hrQh$RI1+h2iZTDvqJ9M?=XJnLaN2GirzMg+Oh|Uk3x4{v341KPye=`_crYsK zuemb+Ad0w@FXc4^f{Nemps%&`@1wsx({`3Zo5U-5*o7|medMmy`c=6b;dG!OT^ENN z=Vf(1kY;}nAZP~u8=9~oi{$>xPD}e7ty9BqUop7+?E1}n>1Uvcyt+&{d~95MrK(SK zez~U7WW`Tqnau9AxHxoyP1p>a7Kis&=Li}OyqkZasd&AC@>=v&>L%DkqCwka4OV<E-1W7dKO2@B9C>0CDGz1)s?$&}U}Wf;*$X_#Cr1RQ1>dC{#mn$dCS_zMgn} zVxraaN2gEvoHadb0qp6!@z9%c`K+WIX;SOM?}U7XjyyaQJr-l6){Tvy;Fc6|Z5b35 zA9r+eAi?+5G2Rc)Xr*guT-?!$J-hatf~N|jC`@4q!axe0@s7c5c{9=w)dnPoDU9uO zpP(Tctl!!mUg1u9yE?Jz+vD@?sF;6fgFm`_9%uE2m3ec&FO~qklx3Xa7ql8}wulbFl-w%1>lO{G+w?o!taAy84?NNPYwI z0?v$h?lNc??dy7X^}cjPHbw9q4?G%Z`&8qGM%>Nk`Y)nQ`3`PTKG%q8DmcLCKXz*I z%VJ~mkJuyp?1Sit_K8h0kAd}ka5nCj;v=dqTmT#{we#y$oy?~HU} zJeIsi25DN4ry22B1l9lEIkPSNG`{$j#+H2VJyb0gM2S?_R5nF! z6K;Fvr6dZNMl68lVKre)7z-stOOYQ5y~!xbC8GD2`0f*{fYsycxo#zkAwLpk9gegqS*h4>{@C;Bi?g)TUP~|u=1$!L2SqvzD7FMB$l9rNEzjv=dRGR{wYMZQha=GYznVaq6XlOqZm4sKLSJ&US6EZ4kqT0SPxy#yOK|oKx+l9(|#_H#9{kf3a%Fkc(ByVOc zD@)0Jf~fhuR6imk4>~ikd^$CpGaJ0*rm%V?QM+H|V^KmUW8|?S^Xc;}iLqCkyEhDT zy&u;KWa&Hg$p>e`u2_rBg_ed!5_kAKj+afEVvjz~uap~;aW zQJ)ztJ@SFq-13t*jG5r|p@jb;YvlME=c3u@-7{1{xE0#>Xd)_uWn`%=dWCXrA(lwSVe=qbDd}dAz+p!%2W1`K!+;=sx8#%6By!?@djt&KJeRUPm_5kEY zl)2+FU_7NE^9}y(rA^#U*nrSjC9%j4qf2YYRX?c3G@VEounb9xR@5$0u9`|n*T7Ou+(J6Y(A~4S9Zq46E zi4-hfPci7wTQP5ZY>{GNW~QR1{f^ZEyEQID&ABa8rP(x#wRDi!o(2fpJy>K*ffw1Gyv^HH|_CN zdjd^@ zBhM`g7~q>Xr+TJWB?XOyp9`$2S&$21@E<5k0NuvR z8zME?V!EzCeISV6e#i5sG-h{;79#%L-HpAsBNJk8H(R_uAIcJ}M6Dn}T9)-rPz2NN zpZGrBzXT4^ZOm1{o-f)<9`M>oHC=e7H^w`KhZ{)7V_ zExuUbjNy+?(UF!v$71vx6!2ylVNAvph_HsbO-lodh#Odp_Eu9YEB)0gQYlf*fikcW1V8#ZXhbn$K`6d5 z`|GBxEWxG^yrcUBEBzXw-5DnV(ul+Dewiaa=PoRII(33)&ndsS%T7*aLw3GMn7?%M zN?fK#C#QKT=I75&O*CbkL3AvMPS%T`V`%x5xs^52&**=u)A_LvUp7JVWAS?MXEKYfcKY(8L!G+)ndtINQ!?R_B=B=^Lg^~ zz~nD2*|zIY%pmI)lp4IvXnSkg?-6xB`L@St&!Fu=W*?A9sLlwt;MFYmDW(hn{(Abd z+bR-KDXGY{ zr($7wOi3_k{hNqD_m`Zk1Er8wf9cguTtVnwjvhS<-#wNgDYF?z1f=mWK@1r~p_Y-6 zLCOq}8!@xH%JMG%85~5`&kVK@G#U^+>?I~19vN9%tN!H<&K-FW29`cLp9tp1WG0;0 z=-Li^zi(;}SAfV7=$%;CKg- zxvcCLsB=LA0Xu}#@fsWSLWf_brs721lvl6pP~yPN0kT8{0O^4Pmat*qm~&_e(S!%> zF?{d<5<=+G@FEW4?=WlxbcP+A!53|IJ$h!HtVNB1@- z$9-j1^VY4epyvq(_=0ke)`W(&+O=D|#D>mSmf409wA?b;a!+C5z@18SGfS00HH9Ne zP$m&=(v%EbBau|lch#RB>u$OjQ`m6#hwAIOb3G=!CUTz+du}&?-_y6&*S8+RBJLeG z=WEig^9U)f(#<)OI+Hd!k~-X0`zMh!1)uC|f+#@J9k|=3fbMu+W+bX1MYssb@#8Nb zXw;X71Q=2pPIh)g7)%Wf;R@l<0)n#xrO=1cSAscQ2IwpHE{G_=uYszG6GS*e)YGZn zPh;?_fGTN;74X(nYfk_^1%bg#f8`770kjd#0|Vl)_aMk*I{09a(|?tA57ru}Xl-q6 z$N>qW={G+n)HiTxvGc?Bfb12#pxBzQbGd$<-CI#-eWtY9W zSiy?kd|Rzkg)W}ajd|*$)5JoPU33qG=(id(6RrPT%z2dq_}1aYjEBO%lPsrM_%B)k zC~UHixw#-~U)BW48Y%I|B9kAG9XU>Qo)H(X-W7NdO$CO3OE~Ybb*tY9hP5R7ayHCF zkfeV%W?)HEe+J5}Nx;1Cfx=3k4v5fnLH@7TOU9g&l?@@lu1tb^6{;`Ts@mQ$26 zu#CFT_F>?0M-YUBjH;>-E&z-^*yhsGe7~1fRWTm7`D_OM6G&5c7 zjk7GUV?bI2m7*9&S33z7#m?qmOjRv}l)t$F&(W`OUJY9ATk9QteQwwyVAvM58;AEy zQ9*(7eB++Y0v*B*DgF)T(m=4c?pmQOM6R(kIX)gy}fZZ=CzmKamVoP@hL03_Y#rQB0d2lr8-qQU_H>sS74d* z_Vz~clSr|$v3VXB2VojMpC~)~zT>%HrtvWm4FiJezl{QiD1Q3}(KIXPnzqCaP)Njb z0D=^c6Px41^{Ta5C&zMC54ch{c$S2OWc23h4Hyw1rc+Q-dIq;ilx%QNP+yUWvWv?) zHrl%$4Jxj92^r@8Du-Qk#a=e1T#g$L`- zK1P4-^fIgHpFGeW60MFv|A36hTw5&l_P##C+J^l8){FDEZ`{ae`h`nMeug}OLiDCw z*!$mBk{VL3kA`LhnR!!A{!Q+gEbJ1~b`+TU!`vhZ-WCNBD)s3@*gT~KWMjvMhhaB_ z2oFukvEUND&t#DFLhlLLd=l)lc>4NE%#U{}-@JLibsjQrEGT?PWa5=f^;Ro5>d63ctNTvRmz;=w4 ze6QG46{P2wyQso-W0bz{oIZ|+-F@kj22OoX%rJBC!p+J9dQ`MVBA-k5Lgx3Oq- zRG#{NB332%@6n@t@Fuyz2AOCK{fra~#3#W#3DDVvh>=oI7+DaY>g7jrZ%T`cbwlBC zg$ZUK*KF0(pdf}}!NvLc_Rj5=M+T^>K0d@y-$ROriHh9jk`BlJK0jDc7{|aOxBvv8 zA%ih>0uBW$|5v$$Oq*HP3!E2bO1s4s4Owlh$+kW~_&ZhYC>?PjUO9zQoMQ`@rYATZ7sN&ck zUd)m4s)&R0L0N+fA4}ge_pv`(eLP2g1+sh!4y3*jp4QNoSd{yG`L*HbO8vqMQOD;6 z!R*deOrBqzTQ1HyH@`9&jazZoN_W~@^C%)IsTzhh%nP%p-d24D)Ug8<{d9hAZtgSc zIUyxaO1MdS5QYYF>*95LqzvA#_HYNljruqJfN9nG3Y8-c=f(mD&2NVLg3?&Mxp?3~ zZq=iJ>>D4ZA0NJR+N{Hj*>!IX(O)sc6?B@IMZmy%Q63X>DGCjxP}`zn2`3o)aWqg} zowS3#h2*SH*5Pw(=j6yQF0d`_ze6!qk<6SzHAeG>{q6bRUwnd|lVA1ULo^L1gii`UrB^)$>yQ4u!(ISfax+11gpuyqfyLl7bgTlNo| zLLd&4NfN)VgsZFQ03X@<#nt=7M1$V5o@MZIsq=KglG6P&WNdWQhH;)#&|uw^U!t0o zmyLIv635eMV|0L$(I4d-&ndEX33@vCi9(JF=zRkDhZvh+^E;(?=H3In;alUZ@%+NVp&?r93->{1wj5i=)(k-n z#w5mb#*|FCr0e1Yeaos2JVZ&ZU(kEu1^We>ioBy7$>KWs>eyVnAO$gf_z(gvR50XC zvX3Vd?btgwywxb>g}R&D(1#K>p*}o;VC|tQhn*Ayedc-+?@4MSt6nsWFyGS%ljzc9ZAR_FtX-!9!e6%30TvS@mS`7_h^BK z4;vUN(P)>M?5#P=YY@bko1fWevYBTkJnxSvVCP&fdlP@z{U@peZXHq}{aPBeM>X7t zA=@ReO?X=2e!*xd2n95fEvvNmlHNhj3HTSAv5`I;bP(>QE53wP;=ZOPcF$5{MT)(Z zyLQ~P1IW3eL>y=Dzm;w#jz-oc#;ZdQ7)VO=n=TDuE__4c5~khy_wy1DMuOt3+Q9hVJ%moi6UGjR^1BVei^Jnro>Tz5 z+ktEp4G7i+QUdh&>G9$9a}&TRadT@RlNMMeOt$hVP%~i+A;c9F7b|A8!;t>2y!@HW zE7S*+M4ft=x$%)uT@lZ-Y~wLN$md(G+&nouP%RD@*(}VP1OX;q&@fn7%!V;bt~z~3 z74asa7#$vdg21)%av+jS{cK8LdVMY-HBK#Axz>SV)y{dfB!x-H^+GK zIGAkyNP--)?V(ysMWjqc_?Ds+j?ZmRS41ezVFkNK8c_2F(sE;`!8Zjo@<}fr-q!f% z&t>2I2xYiffX89^ivs#Sbl<>5K-)v9IP^tvId~?tbbzPosPGv%#asDvx!b|xvJ-Xk zPaVr9+B!Q*OorL9^LQxW$J~^cA2Y=p_yew#N&<{*mCeW(bV2zJs6alH-XGMF0szZg z>@D^U8kTU-t_?jmz=B#?@o&(wUbx_db`mljXpDL2o?bbb7wWdXS%%|D?d^+Ukl;&! zx5MDUgRjqp;21yxi6I_)kPd9r0n#rC@!xQR0@K8g0{92Qf7ECHVI;;P=zMKN{^0mw z=oTtz%1w=pf%gBI8%V&d0`jBGL4$BpY_d4N9A<5#|6^C2>n#nHV%b7sI;8%iL$p_S z{yY1J39?NRVq(k|2(7|$00zPy(E||p&K+bn2Op#^vqS5h6_T6KOYzf_ zH&djUp(vyEd2yvc?E{~8?h(z<1Ul~1TwN<_JFnB(OoQ};W`s0O6|_mb^nHAYjaz@_c-gXyYK+mX{}`b8abQ)5|L!YCz5 zWi2$%yua6R?-VPG;0^m{F;!jKxjTA!^iPA2u=fhY8-I3=$uA>)2-;cT%NH5ia+ig-aNbN{L9vwdBNn~ zkG`T`RonXr4&-T8pX%xz(4JLQk~K&05a0>W3H3$CK8ia)B>`{pKFaL+|EC48eL&2P zmC)W^6q8y)zK<2IOH5b4{B7LQo~|9)aayQ1AM4%2=jt1NIBKJQfvNXl$+M5o1nr!^ z*6dE!W~L56|Bf5bixTQ`5sK9_aM+$aNz_Yz=uk<1{zM{yE#Tw?4#)#h-Pc%wN;`FJ z?NCZ3l}$%-_O8^lctjqcP*$PK()QenO6b_V6@d^%G_-^a*@s=cK+?#3B~DVJf9bFG z46Pr64+?Wn6OJ4~j7Vc+z}D?auofKzbv&mq zVbGJ;@l|iOiP0))YGUME0)PV02y+^s_3X;Dv=O+DAi2rS%$$5Wz9XOa*;t87X_Woz z!TkLb6c=Io>_jT;*B8QbwnmPIorcY=2?BRarhDs3MU$p^OnJx{sGd-oz7qBu^JDdK z3w94!-PxSD8&SZX#hX?2GBGQw=u1&-slf4X=PzfwUEs6s_p&BY`K&td-qZU;Pi6Qc zR&@@I)wI=X-PhbYzO76*{AE@8s1&Fdcu7)%G{-e>)^Oolu;Fog&hl$Tsry{^NTjD{ zq(ANPJu$dalbcrf`EFAgNH)$o&RRjqpw+ovmwitclK))IR_39S|C-sfSUy54a?pMz2ivIe9}CQF5YCV{66QE#BsI#YVB`sODot~amplND2F-> z**|%>O}W#QZqbQaj{!JTR#w85Mp$x~_KyX#pRN~`M0f$dd}9NL2--wp+r{>}=spo7 zn&!BhX`i&H6nBL4*P~4QDh*sQ(|orp1cGH#3p|hR8ZYfcHb12cm~*~*gsXG0E|I*85CVtO<;A2CHoZf9%z^1Cr6O|%EF#J)#(YDh>knjr7TkB!eAGtwPo`hZTA z`8@L$vwsJCVUWZjZ&}-8ZRCJlS6C}Om#|%WpMprlcKuWFJmSu@&6}NEowPZ$*c_}! z@A8glV?U5SEB$L@?e9p^Uy^U92T4OS8H3f1iEA2(NEk={;V|QCk(SqN`8M(5fbm`t zrA@xEp3l=FTkHQiIMrOsU6k%Bsatdx9&L$ifT!$xVBfW)hs4F>e}o;Lp$xA7z4Yo| z(1V~NY5~UHuG=hQ(ryS^2`8gaGZ30(6;&mYMLhb~RsTr~2tLzcL z%22ke7NxHYP*PJL!_obyJz%A3!XfB{}X{G}ZyZzRc zbiHiO@-qq174ZkUy7}%K4vDHs2*WJJ@0Pn9%`l?2egEDF!lSvFmx~Ld**~aCu>50q z?xGi4!g*767xZiEt*|VaN4ht;wG>BsEeG_`9SJx^_;;Knl>BUtYe&o z=Odo5>Ls-}Yl)Tf|5WXzZPK!LEE}|u()zTw_du!-g=HaT$)SPID|TheZ9aeu^jQ*ug5PFj>}OU%yfig6@|BjOPVDwT zlqV^+b_AHP_&L>FZ>wXwN*Zjp$~eAbCOR-O)L9czx~ zp7Z$DD)jg8n4{;+?!gU0Dh8$pUiCbpUepGIe04lpu*9Ro?biFGJ?~zJxfvq_Y>Dp- zn&=P&`{W5uFotRs>M(7aJ;|1po;%yv-EpSF^$>=M?UI4k*1VNog)U_809+RvQ z2(dORS;of*K;a__RIjm-5d+{NIy!)PeBDF4y1Ug?R3alH1fk+bM{bjVz~Ak9CeMa1 zUs!w)bpq8Ms+ggPNnCvVB{Yw_`XqNw&ReUa6GCJJdRN03WrF2LUVQ7{gxIuuiSVkb z6?2Y4T(%o1W4N-{yUvN2XSa19lCEEGU+OULAk!lwP0^m+DL_ZOS72}Z%nv(7eJV!( zuEw#{n@ZhlV7+ooSCe`NtFqS6fUP;<81Yy}s}EQFx&B z%G+;GfXs6P{;9Fyq?kCK+K@{Nlb@DSaeBz6fp<)qX@$ewWFZ0S!zh@LknrGaPk%q7 zw9XO}YBkn6H60ycZVn5BJo_#VWkGybxXk9?7ICn3_;M-<7!^K*U}LR<_Y$K#XJi$} z%#nW_GEv!qs?HnMJVJM$D}@*Qe^k8(IF{`nKYUjzEwhX=A}Wz2yO1pz6@}~-vJ$eX z$S9FADyvA8O(mObl9ibeviIJ+pZod!|L^g>j*gCcp4|8Cy3Xr7zu(XL^1F}!YP`6c z@c=<@3avCke2r*D%UYkzEH0XapT>M8aR^%>V?NiCNzNz&#I|3Omf`{AK+?-vp z;Xg^-dH9Z|EE^%Xv9Pg4V*5XL12agGE;zW+hk&?*N&}k#+6&3|h{pyU84+PeJ1mP_ z4?g~{o~QKmlina%D67aMO*ux)%Eks|!BZ>ZFp78Y2)?E8H2!ICCu%)|l9Q62J%65( znu>IzZ(qL-M*daR(sG53r~KLW=0mt)C;IwI<|p6k+i8Fwz?WWgseRNawc5#RSJck< zKmEE9H81E@{yKt(mPNXll68*NgK5rAL-}<`dPr8-g?i<&&T(UzE%*C0^k?6uh_Bx- zG1*qzu51a)erq%N>G~}-fh>V}i~i{=I<8U4W;QJTR5B4GN|)-brYyxSj!wjWka;ln zp!A=(oAL|F&{5sh11w)U?Y|}`Cg*zRhNK^ErHVer?M*v(Wk!N@kni86BxeC_4j%D z0R&AQ_eRWs>4~D>t*t$|4oT1kVLPm-*rPQ#BRTXW@xb*1ziFgfWl+;KjV>US#J14q zlFLG3O3ERvfaLGrg%Dp3uibRUqA0@;#+Z9ubDsxsz^d|nBo$#G6q4L}8j>ab2~l%Q zLBopl`bDFt2@4jCkOLQ8T7EOlz2Th%SQorH9$!)R^yo{@O+7tir5@`=IKZx-4ndnn zPyYt6ITB+~b@D@+id9_jdvyEgi^!ebC5IuG@q|$f#2G@~KnQE++C%d~%<@Gv#osq5 zYBMyreqEV!i{z=71O9|AB=VIlj=Fn7T?hyP%tbVU=Rs0`mWvAwKlB+m#6lw?YCEvM z{e+_(Oj$-9I{6cFfeSaNV#R;5Zy4s@$dwxO$;?u>KPh@f{4O4KRsIC!mdM;Hr|VA2 zLXxLvuIoE!eN}lJr1DsW`|R?)A%kBXPgqHUAIM%b%{G+I=-87Lq$E_~tg&1{ChJQo z@lUHOoD{pkY|K6~ZFRv=ex;;;qW3*wYsx;oRox{^vSB}*5cVs~Q>uKP)Zz68549%s zgQYR&NxP#_Ll@g=U3VsoD^}L@o$vQMav=JUW&r8yI1AtdyT?G}Zeo}|qzOn! z(Ot_xMD?0y_ujiuHXyC$7yD;n)D5T_L7VEETQ|g*n3@7)WL$q7hX4DPpY#0rSuhFE zN4Gb=+546i}=x0fxp&|JTc!Nq6TJx^l3#5CRCPsPYsVA;Xz-2e_63(=L?_UufK_s0GCNhNplO=q9^ zbfuHeoTut?@Wd_$b=ONPCeJ!-j#EB85nvL~VfyLC&AWdr{^WIL7${Nwpwe)?X%Tux z^9V~>7A1>XlXk4+tyLPqSk~0J`ahoOm6y`Q{^&0S)5Ra8BrT%2YN7Pi}nL5|T0nCt^(XR>a=QP*Gw9$C)72MzbySB-}Y zGt!MujU2$8ORRaD;I8I*ZI7%(eDMn+~aq;KcuUVrJkW-Ik~bMUgj&+!o2 z-@Au7xu4(d+$DaPh|-c6VNEl@(K{!YQf6b)+%&;-E3sRf{25t#;;9uE|2fPXi= zI`HfwkODH+RBg<9J+0xm>xA!-uwxaTgfILF$Z-XxAFD4EyQph^N#HEm ziE}5@xKpEbqpUw!(uXjGsJ;Eb{;8$4Aj_*!o;TqoUHo(}4j(xJ zHSdOI!t1whQ#CU1YycP8b&SWArEjNBh=+Yoql&OQrkkN%?S8estN3GZgsj~2=y>s3 zHS50zxp!^eLa;KTuwCsSInleMw*u4@&ciDBtDh{cnJ zQMkc#!t+Lvk}?=#UJ!1m&av8;b^u-%Vn~JKk%bT8fY`hrP;xiKAkfDg>zc) zw+&jZUtysqIeP^P1}!@Tt(jd(k3@tQs!Qv7$7c?{pY`2;?106eyX;Tc9pdf%omeIP zOpTV-C+5QLYw>Fpb~ElZ$(%bqmYDQJyv3b5#zP=xwcFx|H{G<+qQvDX>L9$zO@2L$6Ac%mbs;6*)8>d zYPWA=3^o_Q`I|Qv8_BS|0Fb{?97-UUTDiDB{WrYC{}^?h$AFEk>edF=>4fi|Q`$La zyc_7o=u&CuuhY{vZo7FfvDU_=C#7XfgC(0Yb9TAm()qFzzqI$-+jK43tN*Pkwo%)K z8p!$IP`qP!?&x=a3TY=FZ;BrSGkXs2`bBg0%GqB^4*MJ&_AS0jQ@(v#^WLG3<9|uD zr6$Xsl*w@f_UDr1Nu8jNV>0RvI!fbiT4ei2oi%Kfko~&s~uDw}dz%&wFZZ zC@^Q9fwuGtMv8FGKcPVLiLXBAOGLF=01*0w0*Lyi&1q$|wcSwdbpJtiORn6`LRujP zZeHG(!^SE*AKk;b1qI;zM$WEcIihrGrsV%iXlW!rn&GztqXCH-fL=f8Sb&8{D}>$! zJXEE#BG7n@>%t}tpdEcR{;!MP+4Amgcfh>p0_1``nm$B`sw_(n$yJDy&nbo+bOJQk zmY_S#r1AU0$!9q~jGyGNPRs0CG5o$UbK%vmnRw+5jWG>$z=hJgFYEC_Lz10MeuZqG zE@S@RmB&GaQ+Vr`O8`!rbmLY*s;9d}=UM0T z&Re}bj*l$_45x8&2-fKu2yxbVJ}=4iT5TdHxDVj+K^ud2#jcv+Xn1o|Erl;Rw+KHS zj#*gRGO{plv|SWh15^_i;d})bQlLN8r}g$7uY{z0zwGRxQ%a{KDxo1D9MqWMr$k$e zN(dW07#r0aH%J%{ctRn8=^0D#kU``wU7^`9H5&&VVVYRb?>)#8i=g$SA40q%v4Xy{*CJ~rt>>os3Bdu4eY3tD@g+M5myv2bhNMdh$=T_Ce-*!PW6WU+ zf8DyJND+dPx?2Pa?~Wiqx_~bKoSNPLFe6VyGJtowWQsH(j*N z4Gl$X?0pbCc)aqye@8aJ2|+>7=MKQgfQVt(CUU49VP2n`Ta%rQtQ8x!m{=bzAN61m z@}B2k5{+=D!SVNShre<{LVP@=KS+E3lJGQ}jp|cS+)nYMD_`~z2pfo#0(~zw9+JSX zQefk}_x0`-I*%TId>^qzA`;ETw8xHJ#GwnM6;#`g=H_`+IcR(SH`7;wbaicwIAE}> zjE#rq8d48>dZMRGet&EGcPk9oC>LJ7)ro(_AFA}D>?xXBD~Fc>DIMtGq_TSXlWd^N6Ia{ z%t(w=AwS7_&Tzgeh)ZhLE8>%&-E>v~aoap7j|D?it(n?N5!UFECI5@9ZBRiA2$UBT zEaaRIp6-`=e+?H~z<%T!B0$cc&p<{}a#Xc(|Gj(*HAwUjm8*`oLiSlzRU!=i%_pkk z21Bz$w9aUG%oc2rCaa~O9zjAo2_s(LjT-nT#3GLacW!+D&(etaLr>^85kdkZ{ahDR zvRC37fq;YC2Zt(o8kZcifeMy85Jn5F4G0uZ7dpqvgL6y?6i#-Iw4M6lwL`0Sr(h_l}aK>Xg78AMi(=AB}322@% z&XB$R4#uwlM?u;JVp=soeK-+Sn22%MiZG_9^N!1^GT4GUfkxIKVA z<)XQW`>NFj4_D|}0G0L3e0mL!@F@tp4iVRwyVBpUO%mrYn}Ikyv9lBP#?r>Bou{Yg zQso_<7nrjN(E)LW3HmsVTJi0TEL1JHbr7@Q6G7pMR&c+7{6mVl`FSZ)IIV9WEjcdE z2qW*HUk4S9%@Bw&Rx2u(ijPF+8Uogl?E+bZl7`0ja4|?@kgK@{tP7V}<9yu-RQ&(OyI>FNUL!^zJ6gdfMqElfAnF&am1DkLv(;-cG+9EPm#Pq|^C`;<7sL*0w=xVHA0 zT_o8P$sCVOk#8^~CRrfB5D@Eb+7m0lrwJ_Ho7%XcxZRR|n=g@sUg4acnK>t?R|ioC zlrDD2;i}(1faY{aJfc~o36dJpDH zIg{;kP<9a2bNTsh094V+-M$Ug&oN18aqc~2PYQ;(2}ohiHfgK{%4ym#zI8pq0daLOURfm31KtNX;$Lgu`5@vW@(@=Wp95$=!H=avn!tZ``eyO2aVJo1eOp-FbU<+m2dcz zfegaDz!;%4^lkuBox#;47q9l=uk8v}7sSl0-jMecVZEb?N!Q@QP%@mjnAzlg&B9_F z{VMJ>u<^1iW;9J8yirF0|C?&h@bYwQEeiM;sQgL3PXQ+&woXoBkuqZh#Ntj6X+uj3 z)KJo-ARTd0p?o0a`?9t3n89^TO=pyB5X}R;l8_@=QG{rtJ>6iU+DjXDf$6TCd9d}1 zwrcOl1CH{KLGCx9WJ%hRP-Rs$$VE)q8-qx{02d2eM^+YftuBi=LRPCN{J7z9oL$^d9)9ZOJrGly9`^7;lSU$7{o;u`4=?#c70 zJN4Gd!BAN$kV4l_noUXV&3C&6Wz9x%lfO~cLL9*%%D1D8nH5E)j+}IR9r?Wz`GD_} zg!3?zoa{VVlA`+A{4Abd9MURlLz#B4@ou}J5BM2TVI z)1)cJtTxGxoh-jq)wVuufz&U0@3HMXbWuy~*C%<>tA8n!Wu@ z&0sB0c6#poLJ672p9O)x2AA(U^ZLu*Z?o+cyL+)H%y)i%9=?AQ^0Hl|Ec>5uj8Lq| z>}EOQ?ULGE=;vssEJYS=GlU$vaHlWnPHSs4a%hW`r`RxO~@eyzj&0jv+>V&w5 zv0gc!%kwtsLXAgEx4cam6M5({7v~z27?POZqn}9MTLoo*z0ld~RK$V;?{0MBv!oN= zF8*WcS$aw*6ir9#V_zm}3vM-y$A_e=SxcqLMf&n;(&xF@8+-}-a7)9Q?&9kR8yn@8 z*Djr7_E*)P83n{;1Y~3vE+=ficA=u6xCUe%Lb9~!yARFH=;Uj8=Ta{(@wpN0}=>VWgNgK92^MdJq)Z1T4+l0Ms69)RciVH)p?9uz{w zl_;<`AyAHl5bWB62Lf%!cRr**{v9;zr@6Ve9@`B{4|X|p>$Mh@36$EEMtzM+xtS8T zKQ=vV?AzVl89g7*MY-EONbS@1egR|x%&W%0dB{p1E-{QSmbAr2Drv zol5tNSwmYETgu0NUOryiJll*a-#I5p`<~nxt4p>_v7EjuN4iS466tK`Gc0rd*X>`l zbKL2IcvGFPI?l3MJvXdV^|=)ev-kVQ9gzb{jd3LT-0j4&jEbdPWA$Cbx zQ*Xaxrfk+w^{%G1rpre=+2l<%FB-S=v9BW&yMV>Jy-E9mfyG2^ppVb~ef!+qZS;%H zVg>mf1Z-13VMtMlJ`WnX^qfTOp{COc%E}c!)6mwTIDFs={0Ru4p3m9KHO3~l_ol>W z4G#Dci;};u{@W;};+jXXBcU0<22W$pwfO^Qs|v#Bfi;DNeKRP&y!Jod+%W% ztxp=DS12WMu9I^zKj6KXr+3&W?#`=CvApk}=vd11&vVmiN2gwh8a{i`T$u6aC8zV- zta;f%vL>G_-)Kkw%*y7zqwaFkr7KU!lF87(s4wrMBQ`qcQD=vG=L`zYf-~*_;-huk zbBSqU1upzhKtPlYh5}YAy$%*Sp8ZD;d|}7HXDFf2U!qpmOV=+!<%tIV%a;WxybvTp z3{(LIiY^cu2*eg*ek*ue$fZE(qCbGU1e5bnP0opaL%R>{{ylys5qo((J!aRR`aHyQ z5kWdhn>@7g65u< z7DKgY7#QG*xrB5*w9yR>*Df(pt&y^Pz)%>Nq?wt6O8X8TJc#;SYW1i2xdX3g_V+#c zSN<=-TuDpZO;mCORqD;m&(R^#sUg;Y)RxvQrOZqF=1ODg-BOQ#yd2m3m}z&N((8zk zmsL~$teUm17+gvA2=h6-Z{bx zO#+Twd3tHuC2Wg}D)`HEN8vj;37l-JWJ~2N+SAuZuP*>>>drgrX27#UuHi)kDIMkC z#8E$r{k8k%o0fqs^{n+gXq$X2yN7aiduvr}b&Tzb-|yyzbX};F;g(#wgJC34d?NWQ zLkZAJqA>}N!=wY4eRccllIwnxwaAk4H%Ca>Nje7h_*49-5x??Gewwa8>V&kHY{Hd&o-1xw$S_xGVr}BL;*X?Fu}+dDt@f+BCo5yx zWc17^p+ZsV{*@n@>Yz%L7CuhVn#{K@>qdTY+MHP&wyUpinx2$OOZt|S^ljYh>E5eT z+@ppMQs^>cmlN5Zuy=$HdAAfB+VE-wV4sM%7?IHtIQ^&hRLIHpBu~0_hm?^{XrgR{ zdj3ZCEcyeSK-173VPGKo%ala?I~bHqiq+}FB3F^(ZsJ#gYu=+rCBY};a5&8-q^@n0fDC1R&*!xHSYXFxgB6fpHfJ-o0=<_2{arV`y;McjAKCY z%+(v=*TQLE$&r3~npERo-OZ7AL1I2Ahec!p%>D@$P zCo>-;8`}0F;Y9p=<0*;=aX(R49B9nDVm>r|c>C>bSyS0_^J8g>Ik7D7XB(A^my?LN z%~t8>-B3ie$L>cb3Q!H8^vz=}I{0NhQi|P4@0@SQ=YmW4&^9uCz0_g0}(yZV+eSF*k#B z-Pb+S^`7D;4*QR#KGA&r<(jCp&SYfgQso~Nt(ex(CK=Lh&OFmpvtPH}i@DfZXxW26yQJS$x{_PIr9?7PXyTCt-o1#_;Ey9b;_PyPIg1KD0x!@p86oPu)>nvkJ^feToaSHrp84G*4;It!LO zEicG}1za$!Ur@G>d0CkJHkPK9T`qZotND<5?|+FG%!`Njt2Uh9IBvYs+UzO5ug9UF z_Um@xANSNScCT(s9v4en^GN$H7yn4?1V*J$+_kX@ zdj1@8ntC`{|A%xfojH9P5rHSXF`du?fx-~T1FF(>fdHP8mbUk+g}R)aFGjUP3J_hmh2cq+Jba`AnRunM@}6J~kbP+YY}Y+yJ4=NOccDs|l6F}hw7vpfBC!pdvb zzM)UU^ly*3BrF7e{k)hxvW?HrLCHaD6<(Ns`cGkiJ5ETBSD{5MyO&OA3|ZYzyT}yl)g4$b2avvP1)W8(=&jgmVR>s0sLwolg@)avQ{U^0CZ|(0Hef{*WUv;vrqrzIZPyIZ43{idO z-zZ*UiU|qfyZ=uc7EXw6JKvdos~mr||D7qg!r~_S`VT37v@){=%fl|Nk%yz@;xlgwnEUjn zA?UPMDF7I}L{hr3;fBd?D*h76YN@#?E^8{yMBKTf0|7Zu$I&w|B;!`yy!rJ`-BJ8I z$W1ViN?1sULB!q+jb*z(t`UTyn-i{E49H=_Wd=}+2_y1odQhLkhyp_%aW*jHy`i7< z-Y>$#X@@ld_&|@^%a>l$s-SsY^A`UB z7`Uwv@A2niAI8%{07?8c+x6$T-$BX)8BZggICBHpTWL;Ec=ee+AhsQ^bPOIefH0w@Q4Y%$(nYcr#&h*3pi{z68x^c+k?ZM zP^?ERCh@gGMciOn+;%8=`z(LAqny5@!_j>z+4Dd=wZAk!KcX|KQb}&%DL^nYu)El} zI2~>66{@M_)7dQ9Zkoa-^iQ&a*%Qr(pX||pY6AR8FY$e!t9HYij{WryykCgP zh%?69eIssadcT9p4Ke2f6ULlCSx}!;EFLJTJmpJ1XTEyChU*f~RI%r64pA|T!Ntcr zEIxAVf60zB{s%uCdY$a)8v!_yhb|!cBugNC0El?N97BzgWafrvowR$J_5iELH`1B? zAGn_2av@M8u$mZ!fUzP(UuenW-4Iu@Qn@lz6`^;A8wTTymrP!4%3&~p(3p^f9C5Eb z$oJnBDki!z(IK4}IbEEM85gd&=PKqT#qt$?@1$lT2XinF1uH8W^Vp&OU^z@ruZf2P zkR5VY(LMn4n{Wchju=}2$@}>3mYlZXu=yZJ_L9D=McKlvc&l$|dtKu=CGj)&awI|v zMR@27G6N!}bK2hc7wtZUyW><{COiV6QqvF<`B|9Ab8oq(>vb``UisS4-8n2>m zG9I0usopP1IB#@gPs~yT8MuO|lwL^JhNB}iBRaY|6pJYjmmNm)yiaJStGd`( zJ-Tzr-0y!mC|ozXep4&-qxZ>B>CMiD)%QgB-~-G1V0>5g1j8qumv%OQHBo71{LXOd z^0j%`Nk6&!%VXs`38^8e-(Ls~m*8(}fi7qKKc7tXp{V&>8{243%3^h85}*>}6-GRo zzXs^JWN(`sm6XSuvZg{x*4MTEW#|)L0J=|8BQ15UTRLGmv8%&9A5oeg{7P65JKKhyOhiq%6|HGL-hDr<=H&l)IJF&tn!gSP5KihN-Lj zzk?xv`tU^6v+5!%mp`p7G$O+GeiIayZNL$alpRi0DflJ!Jw4-|ME~OlvU$1Rb3;G3 zG?iRkwIkPi@89#!rJ4T+_fD2CV_Tnxzt-zH6%;qAkg}Y7Hp(=t+o^p!=iQBv<4-9> zR>%Hr1#F%%K5{+Q%tLBRyEJFViJdb-Zg!?wrunAeoA+z7=dt|JtaYw`EeiIG$;Ctd zO>(~D&mQ%~w7^0kmre}NX@OXe(TKsS#gd+@0#KRA4G~()bMpJIvU;D<;+#zVvr0a{ z%sf>uR+t~}c4y<~+oiXHJvM7o!aLpls*Q2@+%YvBm~}!rGOU5#4M1ZcOmA%FfLpjX z)8xRT%Oj%%?`u%ZV(Y_!CdT=Qn8hwQZ`dOvufNF3d+z?n9!272u_7s2c&w}U&#`hJ zne^kk$O{U-POYwbpQ2v)Pj55xNPpW{EX8@uz4l@;S8-*7+(QHG8lYv^1q5hVLV|-E zTUv0d2dAdCMn#k9bMJf}QuA&YTBy@%%GQ2!e>cm*_q7b~7t%XY{z8IgNkQ|fJkr6U zmBC9GJ~a0TtyQW7-I$|Fj43LOl>)xi}egn{ztZ?hB6?eISO@2Yfa7T2K zYUHz)lxq3_UMJhh4E$!pHvA_ovMPr@A~eEEpO!Zji>iFtbTC| zkKopI(KX0nrnlHtsK-T93&#dGH(5|6q=rWOxERRVR6TN_f`XkT$Va#seP3i^rwq~8Ws5))0LpwhD_t@wCTiUW+-wj^&?*WM=@1VccB)vO{UBW|; z62%^_R*t2Hc`4WEDN21hu!LvMoB=zBFBEM+U{D07Q>xiUbR`Eg(RrH;# zS8@%Y9yeiDyHtGpH~ViXD@mw&x8JVs-t2`-5F(u3d}kvwGrzAeYk`WGxul_}$aVU3 zB1R)1av*^Wyc4`0l{xl*6J8w&WxUFGOowiB_wW`eH?8hBwQmz!>tuMw35EX^S_`yL zT4jIi&b@ixLT2tM_nq*|h8mc6!n_UQ%+$)N03~Ss7)wl8%!$N~K{VlWzF|2bbc=>BVn!C#(Ap9j5? zj!sOJT%Ptl;S^q_;15n^{iL@zPr?0jx$|9a%25_J1&RWgd7$XVLD9CDMy*ZtPkOK? z-_z)b6~C0DPe9_&%G_-qg|}DnpUeCVBcESbG?o1)6QD*%uR|xQX~jFN@}VFp%7XRC zw~p49kKFG)dMCF=+Y;2{lV4K26f$wBLBTP8|8DKg>%IE6V1!bFLC4wHm9Z}M5=`9L~jO>ELTr8fF^y#Zt)RJbXeL#+rzDLu2 z!W$+6ScEG%5O|kO#jwJ2Z??Of z!zx@wlz6G*F2n-gMN8P2&o*UQk2*B0l-2g2L0B#He zpEW62klM>jmdyC=TllUITQMreEZ(i|PKp)}RjdgMsxLJ9&N+$g&?EBy1Q!U)kK?tO zn0_fk61+6kZDC|os?S5lD1sT?81yR7M&-G+3OfG&{Y*bUd1NL8uf(XUqc^ei^Ulhe z$D>#g#N4~?0LBvGt=OP53anj0HCkP<+UnKPgUsuvd(8Ts)?+OB6q1SP^)&wR9E}o? zzeC~Lc|7V$+IXVsVb#NCALMUK=Mw$9*L5Vj-K%U^_7NwD`Gc1=FJWt^|-%xZQjRz6?21gSfMWzbVU6hk3_}?0GbDrI`Kf3I@(veChFQI6_|&oiG1XeB)otHJA*o37>eq+t z3!NFwF>PYgg(L=!K%gTX2Ej$on>h;~64tXzAfOoMy8UG&OBs49BxgMh46GQKvG7Uh zaJI17Trdv4=#(0E&; zGB6UHAQNFbU8V=M&A$grA$Ak=v;H+d{v&WYp;U^s@uJF ztNJYTqrV8GLO+D!ZKb=4Jl~FYj#o+Znr5(2KCY@^;f%Q{e&HS6ac_C)mpPAx$E^R; zoon3}Hc@+`OZvtW|Q zuzf5>vSDqlm9-T^3x}LQ)bz0E1Tk$Ckk;;_t~g+Kc3)=!f&O>F-oLIS)V(VQqE%)> z|7!~Jb#m>iYigcKvtpVWrgul1?o5Js#r0vO=c^ql97j0hvH~lTpVNEJoX8>*r}pd- zwclQvNG~@?4SRL#RL*S}UQvfrN~%#g^tQXZ`FrbyMR4i8%DnTwQF3QsaUm@zo3-EL z?M7D&s*eQNh#uvuqK!z22vIQWd5)Xhe{&!^v6O@oQDPPk6V_&P>OL z(~nS8qG6p|Ttq$-vt`2x>QLFu>2gm>GD^{0J^qF0uFvWU2Ob|Mef&;>K7%<0e-Ppl z5)$IzxPssV;E8Af=;=i(XV1U+i6R(2AfzKgi-d-(@6hoaR%efmjjPn>-URy!y6$#= z#nJKmW+Q(*>!7Ll^@Vja&jX&nQhE1DNb$f1ih~)^H%AVrYbe}i@IziN7w!CmWN($q}mHK0kyhc@h|zhiU;Nc7^VH z$n_A_1m!EhLBPRq>~(*$(sFbZBs{D(hFy^PAmL7$kV*4vC7PE~njW^-ZjGnN=DwF` z7~#bjY}5x(d1H#vxh8Gt`0J`kH})U*&e$~U*v^UIbrR1byrXOMO_}X^RrcSUl zE2HrJvf5fm6TPH{&mTB^y;W z6soTwRn=Vtc_eI7`6C|4s09Hb$OCpqsAUih%#tru zsVON@F(4&Gxar3`xUGHU*`R6LPk0d%gM;iXCc?MNzN1Xd%X8fsfwPiqruceD0WQx@ z!USD*TyBBLalwbpk2Y?c%2fI7_}k_}SH3^mUDnTO5Z^AKo~*;@iKqI&|sv0R43J=;?Q9Z0c-Ty0KKWYzw6eZ6A|U z%+q!dCTiPHxnIu>yj7{&%h6fQQnQ2bH=^$u1G}5D#_H3#{O``Y7k5Vr?==hYN}`aI z`eIPJ2l?da3DF-Ag@LkhxPW9G>?cps&?C_F-HlJ6LWqUue@#R7jMF9813={S?+@-D zH&9i5g*`SaD+?iTOhK@XYJV{c#tHcKtAlvnS^$it2YpL*04t)bP5$xgmok(W5Wzz8 z0oV56@UR?=bU6WzkbQ%%&9mthgPXO-6@v-@^~%OI;?crrY{a4CS=Bjw*DpH?u?PTo z@VoB=AwEL`p4adklrZhiQl}t!F4AQ-b)c2j()!Pc-^lBiO2Ul4(q62bZxsI{Uc&$A zKwbH$2Cj9~R_>Fr13L)JTH?P7#n->D+Pa^2Cp;u%7Y7N7$r#kEZp;fi2v3Y3>~i+p z>s6unGGbw1GKge&t{y_@X@=}qxPKColTz_c@wfACXN_epnM~9s*9F8-6)C!QjCM84 z@dizt@AOi8#`)~(C;1%FQGvN@0mo@Z={g#_XH!R`^ul7sMcWdrRb*yZ#W|{etVzb4 z5}Q@+_q?%Akx)!R!$+Lh2x5@%5b7a5LBSYN*RasyABGuK+=Pe7f5D0d9s3=Z1n5>K z*)-xyW@l%Ca4s*)DUgtmfSbA}#4y+JUt}zcfIw?!XKsv+dj$;>Q=xG+6>_71=txOP zec%Ct{owF}QMz~&wOrTvfJ>7fvgD=1*>5IBEc;?C^4MCL~3a7ulBP>g5g zXrNDeMUbG-%R$xo0;+uOcI_8KuZHZo8m2G5RKM|3or+LgTYi9W?XVg{h0Ix{>W{Hb zjTfh<)3fPsQkig=b9hr9O*QRHUXNeKSRY}=@)(&XiLs~OkrH@V=^ZZQ3MN=vkC+|r z_v^XcgMhy6xXmE8G&X7;$AoDCR(eeZO;$OBMvZ?CLI_qC?$EvQzAyj-P7fKJz^HUnA9O?cDwFfBDn} zkhr)oJd-ep9E_UI-@c#rCGghrm;TYiPdKVdFWrsS3W)g0PTz4gGw^yKRHuZ8)_0cQ ztNSiUF0ygUk9d!1JG;lrWnq4faHO-)H@;hfYU=%uNq8S~C2*V0byvTXcsbVgo4i1z zj70I)=0HbfOWLPb+%L4Ja|*58IPI-H31$gBwC`iT z8am94oo}mr@mSuc?U2+n$>95W7a!P~*m`JslwFRUVAuS>gEtu~`1J31=7z~C;yBaw z&f}BTCq*;6Ib7Sy%-1xoSJ5VZww1BJjX&e=mfZb!d@i7!{^sOON}Cf0(~iA-EKhB% zET5!cbd&5HS!|Nuj!)}i&k3ALqe*Um^R0O% zm&MiJ<8`5p&$&$ZPcuy`GqWEKuzl74x;i`0`R9!0@L~$*M)!fmd9<+y_e&L15eT(k z!fXw`FBNr>6TZ(b$tvso8af}be(CAYt28J4+|9Nc;x_E3%)|4zM_Wce3M#U5%LkA% zduIRRwwQi4Mr$`P^jS|eJomJTW95`d-PI4561e3y@|}(qSYgU8eyR%7V~!suyFv@c zWfl+oyYK+7uOjU1N3BoJWkv`8DyEuKk$T(Qguq?|^cw>Dz}pfC*j}OV$n)Ixh!OM{ zwO_-@0Bt)86a*gXlgOumFl3wkz3WvqI2j1t zYr$J+TGTI+zY#zR-Yx>nw-~<$fCJM)@P}`f9g^>_;jcRgAgaI@YJ=Ry>4Aj0m+V*9 zEK}eQz=$lqqjlIwdH<)%lL9>8q<>YP~qfrDtQs2RMY1!fsuh?D=vtH>oS6 zONjBn!rs~1IlJrka(HJI+~qcL_0&(Lk!6wZBJjKp7|m#g7;D!_kOczbfAatKJw~bS z!XPGNTT}kyS=uq(B&wS`2+Lw!y9h$n7k3cE_&n2#jBF%%bIk0}pWSIOVJRpU5dDK= z+{w3(jPZJu+g-6I@}rC`UQK%id%L?VzNpik<5HkVF-y7k^Z_r+8}AO^0t=Vy*$&x* z`?GG_@Dq;zQ>qFazSv5iob@uZCb`c3nXSc?CDVk=$ejn_e4&;+?Z<0RxsEQzdopcb zkaasK^WuK{LOR@O`>M;dYL9vSAP@kuF~l*{vDbN7d0nKB^3`R`EHc`*T)QB~E%xD) z=(#0|bnm2Z>Z>_x8sdCB=Nc~mJgzT!SxT<7h+|thPw@G#chhv)UVbO0lzS%^tHxWB z)vKsY+DsyX>jXw@5~mZ1U5&+9Yt}8(;l!W9Z|r!#^0vG-4&ZZI@3x}dP0O&SZ9Qi# z1i33GP2iE;%#F<*JUgf&CMvO~W6|!(-uv(OxR&gF+^WR+j)vsl9GNmFK;n@*I}7Ci$Jw)!*X>Z4R+VYM zwgFtD>QQfZc~f^cBRxHaVJi?GVl*fWeN19*W;QnDgulbX2s`e7y!(Knl9H9BB^0SR zPO3d79_`v|-CI}y84PRiO1B-t_(4=6cZC1^dAyIreoe+gM9d&R8oIQnZ0X8TBK!_x zzcKoNK!C*x)4fnCxn>i`ufPWchnP!`2K4TRIJ}BfLrSbRWo0zn_W}+33vc+7X z*`wznE$P^+m+zVknoFx5IJhph4r>KZ?lmFTZOvDV4ohZ_-AyPqxTiX;bT;waHOzVt z?~1hK4xlZZ-})u8=|FgxxO{!+<&eDcKeb;RV%&xLdHTizg8!b!huv}&+urbawW)hl z7tz%F;>6-yZqARD|D;VODf5q{CgJMqFMH;6ut&Qo|4Yt-@vrL8T+YVR3$qgg)(Y10 zDhx(1Z3W{Z9QN-zRd>qWu1U#QOI=Mc`SgTL%YmoIWwfM^`Ih)omT4HVsTjvl{H6JR z*Y(Ji3(v#p(ma$l@AnOwbk=IL@i^b+rRiSI{)>^sG7-<5xR?kqfjIEZn{9-wWb_;D zAY44;sQffqt>*@J<+;6tmEM)@j6g7(xxg?9msK@XuS#?FTammhK4Z&J zI~&8XW^8Aj6P@qH89IT_+wYjwO!=;#}EEEsPSjpY`e6OZd|-`8*Bf2 zk6nso(!z!1ad%4#bqfQjzSJ)|tWLq^Pn%uT&EOOHx-6sX^wGFEAU)thj_C`Mu!xt( z#C$gkM-V{e;5tD#XAZVzuJKLaa zL6bb1z{@MYW7Gy~3MS()8}@wg(@-nX9X*OfU0AT!VZ?tlVR%JRF*!9AxrszSykQ1$ za8w*Aj0iAcWm|W@4G$MIsR_aBr!%i36pKUkBLmVjv1!NH5glKd8?jJlAUPia>M<=S zfxt8p2rx7NL_lC>vJMmvBl9niw*dHn&GiYgYMr3&7B9I>Y|GDIe{5zupuYXGhreJw z_>IMD#gCXiff)%15*?kG=z^`V^!(D7x_f`@<42bqCtRh)J|7XJ`O}+$tcL=JiFZX# zQVrz1;e4hyK`0;dWw$LV(G%*!-8dPw^kvndY4fKH5?Z+%^A-#^M35$bs<# z9d=U_2^aWCxFqOKbv1N2R<8d3tY%?u!RCrgmmmA+uh7M-eM~>2c>VQU%ES@EWpy>$ zYTX?K%y&J1I^a?Ju<`T5F%S&UpX=~CoTesKIqcNMF_qoZ9eZJf@K9^o`pS&_!Lg7@ zjL-b`jjoXIufk5nDa1y`MPbXY;%13# zpsHgJwF)iB)4TcQ7R4_A8?^B!d)`**^TtNTde6FZ89k9OI9M(olqMb5Ky7joXV+rt z$#Tx!1bv+cgkoIVQisP4@_StMC5Zi_55mn(d}27br`glwL&A|aiXIR{004#|4}2!R zA|fJo5U@nx2EaZ;AV8voFTz8Z!cib#bJhG5IUb{- zpwPfbH-u5+A7ad}uz3^P-o1N`+Yo(=G)=Vixc@ZN)blB?ByX`y0Cg90&jq$8zCAou ziG_s{CGgp^q|cwRJMSbYzUA9TX!!k`grJWwgcSb05pUnROi)o$Vl_{IVxBtU^UmN4 zOqyT5)Ms4+=(OBnKymbY$kULS{u#X)X$-M@#!pM0@8RU+WN*I!$%h6zlq?9aMIIfh z@Z@D#KQC0x%XcOgo%_9h1}=Y@8!esl-G0uzM!3uxOb4{aGEF;Y4ypu%Y?V@TMtohf zV0U7RjE$0`!~6 zpM=5dht<&u6lIGUJB6;s%!}+G%zawjcAYI+_-uc7Z>VTWvzDqU_4<)r1i!yB?Fl7g zo*j8v1rH0VQK{YkK5#GXA5&7+>u{g8zMrL@pSD}#b{ij&WY{Cu&$5_R zb&{EunRAGe7ggyY18wubM*`Xvq{h#a6}#6QKH z=sI0$-_l9A9HE&5RF-_s95TYo$B9AYjg7OA0agi>^=KqfK*>jnJ#hcni zXs|CM*@*T4H}4MOv1EN;J0?5X_p*!(#?J*!=eiRoA;S$D);e6s1hDok3UIs-#D7St z!~+PG+=Hnue>a|)SZ`WR^YtvBDWgOE>F}h3nQTmw<=g+m)O&zq-Tv?6cTpsyq9HSt ztc$SM|4@1$_l~5E6Nel6;4ThIbG$#R9T2u_GB_MMX=S{|)1^ zK6BA99F3?;txLjXm!W?0dpi+dE-!b7`9_#1fdJeM#lg}+64FgdFbog|lb!9_l)7h=37k0t zh=TDjVI^VH;f338VHX59a+sWh0c=oo|0D~G zu?N|wqM}Q3a>w_iqPPI`Pc*jU`*g6({a`>_2+Rvq0-?69@A{>8A zZaUkoCGo%388xY?8{jQ%jRA}F$m64L37qNNHlAxxKSH&lyG^Kh2^Y=?6`+*0Zs##AF|~6MS{Iz} zx3JOs_tLio$ktHJkU`)XQ;QQX$CcwoT-1G8h%_>TUM{09>6T8YoXkB|`*)}B|l*0}dA2&&Hj zec$>%RCzD2<9qLAdhugqF%3R)+?alpv9Ys{&;H2AW?I^&7I8#R&WLW1O>p1eL`P#_193eB?5mh~f;&b+SnI8s zh4%yg+;lG&p#sETxaeHh)m=rk2wF2VV~UDj07rwne&C5LSQi6-?)K$QU_K9h1QOw= z%+JYSd;z|nv!kN~auQ+sBrQDzLJKfcyfvsjZeS6>s%@9Em!01^cbFt)i0JV0vZ!EU#HE2j-YuSjI-94Jw85hL#KLFa{jB7?o>a=6 zaJrgpph~~vn6HdvhI5&c105PTd9#-M@$UpeRAtm?+NdL?TUdX>mbY$tjzq#~Q=9(l zyi~l$pXs#esrBmwK0Lh8_D46mL{Ck%O}!!8L+_rz_=&006rnQ1tal#e+kWr4V-T30 z<7B?h@b?s`$(Kx8M`K^7h!td~EtoDVvTnTOWkZ>SLNz-)3x*?F>RRXf&VSDE9zXwT zDsA+~m){aA3vc-h9n1Ro9J1F+^G3;KyQvLmL{%{^RI?B1!?=eWsrDjO1Be5Wi>Tu_K_3!6K6?DLbY-(L)?b3%g29r_29%JB4rr32vq%L)oeHjhD3+iJ>yFmKrTARGzu zS44-bx!tt4wdEHU9zb>$^d}cCRP^OpW3Po>{z9wNHdxgNhGOeN>IgG^5RUR9_#&a9 zgWqW*Oo|<>Ed<3RBp!iSj|LEFecfGMz#ql{0Z1OTABcI#X@!| z@+D*xZ&MReF`+rK>?ZQM?smFG+Pw2G-%B@=Pb=@qr?M|vKY8|X-OprBtedU+9`;9HeTTky&uR#P5Hb|Lr=ChQ+`+HqZ3@jbe9H^Y9?L-a9OL}< zFC0T}iBEbk;nZ!$;umC%XRinC9r5{hWTy8;{*-Hn%O&X=0Fj~BSPbY4jJivfn&I=us%R5eKpCC@8EQb?AL#kx3-6Mq)UPvI?o#$FAvjFh_^+20C+eb`I zuJe|;^(^t-U(X6?OFaCsuC+N9o**BNF0v*i6p{AY#23uCW{EtoA9JXa4ph%d%t{H< zO6xS}mAmV*Frj!&|C*Qe&V3Q)Q;TW5)`p+z-M2cePnsp3O2|KF_dv#}l5+Iu)#$5x zM)!!Y|Ddf2IDS}5V`WiRMuRq~-_89PAw)MkQY+f;Q8N?Q`G~xGtrrYiF{#EJ)#PuL zfUqz!`d9?~jSUTB0sCiPfw>l3g0LILx^3Y+`D%w=h62McdRwK z+as6QZplBCU3(>Be4;+Jc|&B?h+($_uw_j3=7rDnXn)+_;<;qzMTTTv|JEgpAwXx?|2gosJ@J0b|Bcxd zBnML)072A~r{#6!6WEKQLi&13aujw>xlOp<**_DU#%!cneqlD@T*J9+>T@sMTeNDI z9hwbUW%sm?Vb1Y98x;cAF+>^SN+PZ`(L){r0xy4 z@Qi|sn(HplTw5jPr1dZ^VfzkRfPg^N#?%qk-jp`t(Y~=CSNp-khZqG$3tFnjj!Yq? zD)f@_8uzyYZBHW^4sM7!%1u*h@A^iy`=hqObSD1QZh1H5}F<+7aF;`=E)1~4!7kT@61dvmh(L$r+qknNqimguCfTZR3jkZ0RaL9}oY6 z))&EJH=1A6!kTdbj(-@NI7p42_J~Rr58$(C zy8fc*4Kj!dAjS+Ft*KumqMT@Zmo*n@KL;=fiHk|Ox!ty$7ML+ZiIqCnu69!GF8u(3 zK(6Ce5b-ZlUi3fi5FgAk|1)5RzC`#sPt|l6&6{TN^-n{8DHD&5D318!5;6?7)GrkPtvj@Cl}4WW0JRd>tq;`H;`ESB$!e#gjVAS++wXw>Vn$;&Qy2#BX!y zP+f;y6d3l6nj1DxZB&xZuYOJ}EDI3Q3mIYSX8o-lHu{pv>EMA^%sqWwoXzZ|3J=2L-zpBNmJ8V4XmJIf^U0v1Wq&uoF zAE&DNKEtN-<@4v7+S*8ISGxRf<9H{mvLL@A{2Uqzh0^cP)-7g=ma$C4r{rX350tq! z*3^LD)o&7)wF76n^7F{TI>+GChO`8lg;TPa-Rqi0#RhEKf0@y3FuKJg8R|ORI^p&= zYt)22e$l7qiQA-(g5Iyf@$0Uxc8fX9Zjo-G;m7@LZ8Yr>ED6c8?&`7NIv8(@NJ+(h zF$LCa!uRTiQv|DNMu^lQFxpQXfL)<&;ozd2>o)fZ9*W7mW3|nrpBD-_ikekpK1b~c z@;(H2WiWZVtH2i~a#I}g?!L$gAAKo#+u1RCOKki0w(b6rrY~bTr*jxg8QrAI1E0-4 zd$o^0?ou4b3l8@Wn=jx+^oGUI$SC&BM&dYJe!rm`akoD~v&5bmmYp4zJ^YZiyguEw zxTkLGqIaIA^+fDqBn>@1!1T%Q=teP-v=pRIss3+BnUs)_sdV0L16>hx2_yuTEh#{R z7cW*J*TLS-j&S#5u#=pDRuj=_;To-pIxsB5+@{_%8-m$&b#Ltq!;@|^Xg&xY zv$L~^4}n#6_!m>iBZ0P-KU&TH*8xj75E@$$Q1pkB^`*EBT|eolAnmvQ z>D~Ryzi5JrJ#_B4?x^!k=aj!%Y*Ls(B!mP9wCXpm_b!=^ zy%)JkLOOqM4qei|^sVxo@Ak26DO)d5!dt`>E^iw^M~GyEDkcJ0ccju%_MUI6I@=+)oGz z3lqRk#(D1Mwgvejkzxp1&t~o^9-d7I3^AvEwDR-!@4_1w-3@-9J0EecFhMJ6Ct+vW z&QSlECHoh~FZMMvqah^_wtBbrb{_u8fAP!nAUPdD`^Fv~@eX^jFXvnflJ`)1A7p=Q z(iZ<$>Thr$gXw108!7hzQ1qO_F~@}S6evxpe=GoFVa@}O*HoN0VQXv7ckbNbJ_MlA z867nSNLVJY-53(jF(M17?Nj*PqwxJeQ@Z}uZ;%mHz+R}r-l8@r8eOJQe#Ts%-Y zJzZVg?|a}4Dnw&G1=*BZTWd5oW>_Jk{zzbgYbP*|-7hL2u8NXyT0q1QU<~K}yBPPr z11GM$T#7!3NyO$l@C~3Dx_h_}Jn3}lg$OntxJP%zL3~GG4*;33#z;h7V+SV8##U8R z<11t)1dj;@h7!1zVCXS6K5lKXbY1-i-h{UHKX@NwvVkqq(9m$R0His{hC7gR2h!^D z%i)3zrgN!W85vFQ9v$UVs5o%_mx0$H>0PFrqTC|Ee8FyqZi^YVvw|JZlNcMt?1ks1 z??;akJf=TQqgo3!K?)=A21dVag1uIAs5Bd}{_ zJAND;_}boVp1L+YdB3k<} z-o)|))pum*=R5k~Q^-h1`pRaKjq2gjN_W2qMF>GN%LNy*dNcfONiIrVCg<*fhix)$G zh*q&oi#Psisi`63k(EA3OINoD)B(?GV>w~{l=AM?kh7xOn+>I^<)zjuTKwyuT6>Kq z-PIn`E+4RCwG&Cq=;qc3I+VsqMNsY4a_U^Nm`kTAXEu`_^_`40rCa}V&AhUM^Hpq3Y*8)xEl`r_k|oT2!MDAZua#|Oe^$zYvFkwhq)T+X zok!ubm2j05qrIQYeAoTnl*(iyeK8M;kb34uFsuO>!+jEdk_dp9MkFM{(-DA&+}K|s z|8X0Z0I`t}Fezlhsz7EZQW-Kobp;X~5FMoYgB~4=T;aD3TzPf0;cSb3Ec>wA(zmD= zFY+wfj=Q?LVx3U2pA&|`uScNI$Fwvd zK0Zg_A&@6+`-4%;>}+@1`A%-{(9n#hki=m1V^7KQ%iD>|+QA2y8Dp7FPRdN;i{Js| ztyVFR#GQ~ZPCgaq`O4Gt6>J9eAjIyn0g5+`Z2Jo}hH!^a^ zvz)N&faODWxs1}H<+}~#A7#6aDxG~6#mHEDX$_AJg0O5%O$D!0ZQT~7RKBWk^{T?m zVTr@xUnD?GLp4=yMEBncHljY2`Sz{=KYuTLW~8M({rqY%>tJAHL^?}Rk&}!}B@8=I zlEGMXU9ayksuF;^z?@s^>c)#1)px(o%0g&+>|dH9-lzS0?^swUT)BeGJuP$dWcZ_D z>mO^4ZT$4CpPcvU>4y#y%%1Aq~_CTHF@Y4<&;+aAgHI78ARh;Q?k|huToFJ0@ zRCr`m)W_7+Cbs|=qX_33K>*Q-Ou{PbhBj@az8jB`zk0 zlMe-rFtQBU+1bG`U}cR%sq5nCNX(=7(1}ZRp6oU3FyM2|`GTI7)~9X+6N$AwP-nbt zo2@(Cf!-%OFYgC3UkS#r0t1jjBrgEKhX!p20dxbW?X6OXM^He$P>M#%I94)7|A-cW zVKn+D0s&V9KQi8S{-x)u&zVGzdJG*b1f5}N0vdskfWR6iADL1$@9jaXfh_c%7zN4< za<4TaePR%egPDcJtB8nG+}ur7RY-q>=Q?s2;8={oaSVzmlbzhAbd@+PW^ok5GYV_?nta zDk^iBPs7g(a4&3{5i)Ll`!*>7hOBK9OBkYHEi~Lelkzw_(r{5FCu^4M!L< z55*pgQ9hB?LsSj|)k7$-tL)pmSKMvG(Zq!9iEJN&Zi9Ct`kI`SxNsnoI!)Vv<+A2f z`gxje$>oTi6gTJ&7|)ox5Wn#u9_%{?c~*2%Qrk#&LEVp3R>E7DW}_}fNejse`$wH{WAhw5j_|FQwCJ7Zl6UyxB5x)pq!|eV6(Cu}; zi!wZuiR&+QabQuQ%F+HhXG(sK8}_*?^EXWOFI+&%C}r>R!op3XsScRFHaDl$c}m*& z!_j1OVD<6mmWOar#LG8T0x8Mip`m{s4AZ~Boc8B5IO5VYf?+s~I+@{3jn)Ku7hKBd zYsfl+%gYRr@Wmrth$vfBqln2pqn|&m&jUd$cwhVYD6z<~6#*~NO&L@-VG$Ab@Gq#$ zh{eeC^afhC(D0jguOqGz6MEXTI?^BttatKo#VS1N#a`!9_wW2q^s))U9Ck_!GH2U- zsfdpui^U0VRE|=P5(5<#Zxa%HN*%(W;oj{%QM$!aj8UqOpWiHogD+OsP!H(3@E^GX zMM6at&Hnw+eb-{!!+Su&b(TpTd|~zx2=EXORlraYsqElM!DbUa;?nAB*iT`y468W{ zOG{*A{;vR$^rMpb`gkYtxuP1&lp_ayW%;!_@yQ^Sj^AY^c&2&L;6L@&PeO9M2aAOu z>+S>R7A z#-R3UYVEWvBZFUr{8%hIX^_tRk3ALts4V8)8dJ%qJ$K=U5jJ!P(&au!dnvcl@c*?t zIzF8*J6n}PD$Vf6e|zFHEfXoLTyLrLf4d~{qT%be3dup8|Gm}!{qyVN-T(cDs>ts#UB0! zap*tJ_J;B_{@S$ zzaNTG`(MmgJfW_rxJSMURNys@M;j~rfO|*kfIE;frhuRTMdFjAlE8~Z;t`;kceTeUDcC-<@k?7(qO7K*2-kX% z&*cgO_~6gsjtUxd$$%Wm3GXd4Fiooe*f=~g{5qA-DQY;EDa}qm?68zx$)IUD%geX= zsmBN&$C|GWpDg0|#LBZI7vB*QWkIV)%WHMU^1QqmHIp|PfdL{AdD%L{Za0tdg~5RB zKm|F7@!sT0a1i;8r&D>ahi8wy={hICdz8rRDBJk5a1Yim^xwa>(P+{cMygfhSN*RWX!)x zc1bXrGVXQ+wb{gE1P=P3I&i*l{#mi(*JWC)!lfKo@YOfM&K8YN@uyE`Y|kTT6&jSmeu=~?ER z(_8WD=`Uzcc(0aJ_c9PmQ)oWn$iIUC_X^x-j2TE&jLnb{t{Gz~Bg|pR*}HhNbv@~y zew|ICy=qF|N3YvnVn?HQb$adEv-gaSQRa&*$u~|qA^P_cTN;vDl7u*{=Z|chD9RWM zl!~ys5~8o_#nRT-g;>=CBL}>zej0u&Uv~aQXF+GdW%6AdA|Vm=gTbF)3ckcZX4lxR zTIFYSzYaaT_R#K$y_3)s-HyvEvri;a9vw0`P-@wfM8dmIVs)k3poWn^v&ecXjdRAW zceA{6YbW7^s}d$6CT%@pdeJj?^f4B4`nX7bMCP_-s#C(Muc`4_eIH^y?8Te;YkRIlvV zipoc~?EKdXr51!&v$Jk+OxeLiTwSwE`a6mEH?qc{REW^TumppjWG(|5C{L z$%eVWAjT-BLt6Ucj{i0(Hm{?-(->GVwBCT0QtgB0Zf{Sy_#Ff=p-C(Mbx0cJRq!UW zf5g|fFTa;smj}h{x$yMYV6I9+sC^uyn6BWax7w*y+x@NQrJbhwC3Q@cTy_Suyp3&? za_IPTDn<69&czUYs5O2%buIcVkkY+tDF3n@lXITk=b+VumF~*DA*K<@Fp03#sI{AG zSW=$`9&GY%mU}0Wad^>E-3WSIu%GE8)1YJkaG%5Pc`M%XMTA8t(kWu_Cf(~j(a>Qc zRqdv1eC-6pbUO*uB@!%kybhMbCx7W&=D18tktbwl{mQk+e{A0ux-TbVPJ*NFb6ciJ z$?5xwmZItxjpoHGvyo@D%>5qy^`h`9$twx9v4-tAM3qz$o+nS7sHRWKy7OHaUWNbP zMHWSbACM!Mn`I{5AIvf#6Zm@qNNiPdgi7398LDb3iEEPVU#=b>Hh$^VMxi`R9Wyv~ zUmpxAdEL92xxp&X^HrvO=c=8cov>Ngtvdoe&ox73r;>IM zki5-(l4l12^WsI#@vMTMag(8{F&CziM%5Ot%4EBw%g?&A z&WJu>_?oDI9Rwl}A5I?bok3mu=&{q}a&D_5F8jy6kFcDk_wC-_b}rgwtvGqUY(kRW zS8gpLIQ)qA4=sak^$4|Se&w5QxXV*Ng{+0Es0jKBrF>7RQwrQg(9G4s!ptmSsbcS_ z`Tfx*#b(-qwt7!?1Ga~*nJxkW&;MBZSTGNB;%b7w{a?`Fb`|Z?ZPv=ucKuhP1BoXV z>K@Wcq^tsw{bDM*PJ*drh6aL^VMzJz-EnLZR8&Fe?Mht!DFfB)u(ch)AO4ve_*F%w zdjGci`V?qPQ?^N$+k6U2tk7=ANgKb&g zqi$BaT(SKnSS^ zQ`t#9>7Ww#OpD!XeWO#9(&kMykt_e}sj2u;ae_x_>L$c(u(7W_VPYdFLfq3t9E5TT zzIOJK5?GA)090fA!I-*W?<~ICcL(9En#FOE&_3yz&N)?ofL?N!Ci<#kX!lOdyvqf@Gcgpq21+oY?dAjL~{#UZa*BJ~EN&~S zzQmLn^hn0o;o9NH!;jyGoqkn8f9WTU4EY)>o+BWapoW(sT#{I;>dMNJQurcg1w%SG z`zCfwlul{>hmK!VQ3;kk{-e;gs|xA!vlfJ{}8Zmj4a7G^KBG-O(9Msp<|LWh2Uv6Zgy zp>U479P*sc^Pd0xy>mBC&>)=@tu!Q$L`u1Dq4b2gAMRdWZmwHN?^Mki5*s;)O(ZPoK%+ttt$LrTpQmM&6x1Ha6|xd4AYm47D}LP@G)=`p@gcEm zE8E!OVU))6j-UdO`jTJv&c&OI>o^bzglI*njY+-~di)w?M@x8nGBuGs>0jA|tF1{^ z%qu2=!IMji5^0W~wnw)NCW_%3XES{p-17m^TO*iezInEno)kU8Tjt8<=IB?iL?M$p zpL6WZ&TnE2XJF}J3+?RRzcZ7Q&YNopD;Nft7-9g^5RAJB1pG=y<`3KqQvUAt_WQuW zsunuq#r(UhqQvV<0kuaT*)RrrQxpIatepZu$QG`}p_~qNhSm&fOoM{vyW;Q!MEfhwDC{4>MuaJ4@5zV0sj=2?0|#q2Xi-Uw|k`FFWRxvzU&yOufESs_5> zy?R|KzGJ>8WB1*K`+w5g^zp`ouij{GZWZ|9s2{w%vF7?Fi=WESgPSQGmxC}2~N*Y=${k}2xm1FwLR0I!Olr~Yi% z{u%uPy?YkZLZW9#{rvg5*n zoRCD2ZqmvQ7pz@Sdooq##Jt->`q@PZ(Zb2E#@PSC@fPObKvAuTI15512BfG_;C0PP zLg~`^G9=`8X#1MdC`vp?jnxLA6jfK?U zt01gAxHh)z*e-1#DRIdC+p5iZAtGsJZwi}+wQCkN%{M9&m8Kg671+`jvi6YV|q1&{BM-s&wg??`<{m-hvyiRyS>D@6PsTnI5fO za4Mf=9+wzDH~#3>?5kVn7bRlN_sfv0ZEX+wHYTgZoiQnJ6HlI>lk)ntTlR$g+N%BA z^LHQm$|Tk=d|9(zTbEiaH+KlObeM}&Qa^dIl!xCYE4EoGGNgi@V>|WVv{}c8f%1so zWvA)74}T1J-?2TI6_Q8py4NVtj~TZ4d@NR0Vj0O>De6_GPWz{6+ZV>- zJqLZn8KwQ|hS(`orpMOw|K@MS%omS{%Ab)qyh$h8D=KcNdi7WA&f^9_TH@hOx1u@) z`!YYw@3#U|+rHQ>Gqz@~X4O~6GlVln%+K*H zNmFqXbrh&PP{s^6`Xl?YZfj_02vhB*Pc902^`G~V zF^frb?l-Ynw(9wMsN=ken_t{>m)NT>-p~v4r20qi65Tc1`(vc`!P(JnMqanNW$Jz6 ztrxB{;KS310N4c`;`VE$#I2P--W(d_{0z4lywBdaI;T?oIhf|%{du-hDY7BI(u$T^ zrdte$HaL&y(>i|DY0!fkZM*&8_9GQ5_NxbCsz2AV*77W;4IS%_(T)B98Om~72zd=-;3?z3Bv6^t#k0#{nyoZR+^?d&2<>etEG%4|fCggOb zA{>Bbcx((bH%B$K{Y=49ZX1O-L_t@@l;i$`2gv#cu?drrR=99KoKV-$=-A>t(b?Jk zi*Y=N=4p1Ymoy%BLdD~_jErE{+{~=3&w30D3^X#1k9gUi+s()<`#R9gZ5-IJ;HkS3 zY#Ctb&{qUiFDK_mjIFPn!kkhW3buyl95|o=iU&S@>OB8*N6tHXQJxu|i5C+v1ZY)? zY1W7-P&YX_^Hr-f?Op%7ccg97d;L7vCGI)SuY4a#o#fu3>?xna)OPAaQA%M-z)A}OlK3^e~Lnd@+@_gl^rok!`Kva zX+{wL5))5?YDoAoJfB-7IbDQ#Ax1O6m0&l^#1sPpCoVXc9K;!@>TMEF4|dYYjdjJq z^PV-WUzp!FH|?{O^sF078%@QRIFtH8wW)`EE1DlZxE8+z_2}_q@_a_@fSZqt)XpRe zCl|)8DZM#kabr{~6Y<5-_a8X<^j8etyr{RFq2h&s}H+iN-*U`55wtdd z(3G&!w~l5O>o}ZVo12#h4;z3!=7xZ@TKHGP`V6=cJA?_5ZSkWp9p~ zwBn7RO+Un=SKZ%3cwl?)9*fV)>MGtL4C8besR`aYtcZyV#8-t!V^b3*B!~wR#ZKbu zTXRA4UM&BuTBB3$be(i3XxZP>T(i*~oa~VYe+PO$H)Q09K|BoO3od}5wjnlU@OV0hM}2#+N3>R~bA)ngB!3Pv`VqE+>U5ITM!*|DSJ ztf(kbCmS1G<_08Ds=@Z^?_$b2wKwB!(fmxy8>SSIWdHbqSvn+zz+e+J%~EG8sENq0PBRZ(T}Vd-?tekrZX_-}B!U5_9-fzaQ6Q zr)S0F1w#1MD8UIBpr1IfC%CTMZL@D+Af{_Se*AALE z^F{Z|e8WR$io=JslebB^F-UG`u=**(SjOVn6$DN)H8r)c@cV44-896&Tf)P4sj1Td zpD;y9r6%PYgrN@-4J}VH@aMsfAR$Z50yw@#%DY&1hC`;^V%l2VP zU(eb7TKl!`UmPWCou9uaE-nr>s$sO5{dex-Q?I>)y#1r=uGHRsIdo>fm%1WM zW-{hu&#s1Oe6@Wua_9$-Bg2;U=C`-c-zJ2ez-1h_ZRzPJTT8(P+FT;O_@<_)ci$~G zpL*K+)-GJUWV|vKL1R%u;otcBOGEolKT!6I4Ubhyyr1(xB|Iu$(IGtht$>WhNI=j5 zi33xoGNy(|;#4{E)$&t>w0YgKMQd5*uF6ueE~Wm8tRnG0tjvpZ6fXGMN#FYmRww_y zhz{DkQ}f;6L-BxCNunypL7!8%zYZ9muYF^m*SVnCS{EZNCT;l9kUY+1*S{9C=wh>~ z!U~Oy7|H29y&)w-Z3Xg?Op&E4u|)H9HyD6mHrv?HkZxFNWo}L^L=6q%TKyJY<1SKK z7v&W-9(bAfBALTTy;kr2W2@tL1QZ?BwUa>(fm15B3O;V`K(GK=kw;bjaH1WKjG$If zsrOekygBy(1ZWtpp&nCO8=j8GQV;AaF4j=xwtivk|5NlJTTk2 zq!Dx{XjyGJ+=t!iz2jFStMS*-duw^W9_ZrK)A6BsS|3yxVmIWu={-wQf3KD17j3FV zy69^s``YNE!RC@$bm~7+b95J@l9Hb$pHK-_zb~?2gQmy&+|-9Kjo6px>kjB-4c>fm zz53O=Bix=Zu1DSGHfw6B-71<~OeM?l`s>xI|7P5H_A_Q7ew_5q$?Y@7})bQ8Nu3gcF z+t!=fzI!QjyL5Y&d-j?hwPTlgTz@Gyw4ms@>j(covCR_2 zs&=e0^|F1xbSKWH{`pf-=N7)fL?>BkkGmuCg8vedn~T3Wy;%%Xyu2d1QaFD-e?p>(G6$DILl_E@<4fF^eZ z&oA?tcK!KNST)|p#as417w3@pAylQpD(lT^c}7+t!lS`plG_3({Jl1@A(PB?yN^Q3y-1pi8PD&+$>H? z(11a+fqh15tM=RDR?-HaS5p^HwFi1nE>0~NZ8-94*q^$%{mm>RuR8blF{78I5#ujk z{*3s&bckYuLi&?5SGbn?`{!M)S{dK;GEThj%z7PNVxX>gApg$sJ2KyA4Ik(~&~u_c zRPrS7OF;W!P1((X`AzwbU^;rPcCL;Tg=?C!u75^$b&uBsAMRf0UeeBtDA<}`yl7y} zDD%5uPx+TWjcV^{*QigmpW={GKXT~lJIP~`PRl2pPHc8=ynoymE?@n#V9-q;9*W>h z<1vIE_1fb0C-$E}p9s6JYS~37`?N$n=aE0p#9waBv@!YZVDX6)ClFHx-#PGOpna}v zIj=PSn|PL-KFvp|2;Iq1nfEENONdFZlp+su1f>eZ*@=gDn0I>KLm3DO(=#wS=aKB& zaN5;nr^gd~H=qE@$3tOfhkGwSQ@$2$Wo5naY*CK@b3Qgl++tfvdRdpN<;z_&57+=G3-Oe5J0SM=u>A&MTi3qTi?AebrFpk`=`! z2fI}Cuc4ojDWWgS_zQ%!eS3cJRs^u0DKok^c&;|GQ*O;*=AZJq!h%9~UN^3rFvDvB zwR32D*!K-#vFuRZvEPeaM!`Uq(Z9;|N#1k&{OEoA8onR*q5l#DXA<|c?T-~17Y4_PJ`#sE%stLh`;QC{bDlZV{q<|b z?&F}{8hz^QxY5W~3xpMj9UT6_!~u^Ij6mVrJ;v770i$O1rVEgL5fheqcz*QtIb+)b z|8(n59dqh4=Ma#PEUm2U?Vg8+!^_|8Sd(MLZ_>fs9lu|KT!d&t4AQUY=)haO5OmPf zryqAoQ_=nZ+fozrsk!2-4<8C@sVt$_?D;o?UIKA}d=J3@1nUXz7I&&NrN|{s>7KmWJ%9D_WpZ)O3J%r5zW7*c zR*L`Q0uxXr4Y72yk{0t@ikSeukyH;q~kNU2W*Ku}GbroPrp|^Ha_fmY7kl{yq!}C*WT+)2u#_ z)CDt~+qsAPikm@M$3=FLlLZ%|D~$fl?tphOUOpk{x3QgwNMcZBed9*kz_iX~9SeN>f|pCu==Q~OW7(wHK#7hYyNB`?!1 zb8F!BQOkqp!fqKT{!wbyh;;b*W5;cgq|>*)Pu+32J@+s*t)=d>w#w|8!A>R1&B52( zJW+)fs6e!`wW1HDmPR^sT&bn}o_;rNeB|epV#o%=wjxiY!t0WaKLThyU)dg!saI;T zn)_ZV>T@=9)%@uoFcAJr{K5;uxf(YqOaw0p6{}SIm0+UxGr#+Is_L~zaq&7HW$>)b zo1;(?_-+c_aBnk+mRUbm{X8N9Yh-189Swd-hb1+7;OtfFwK*J*=3e_m#Q)Vb1dm=F zl|6G)&2_(w!W;QF9_%bWxNYv+rHi4B#_$~A(n_swXh3ucu^}k;zJKo?8f!QezE4fP za^Zq8EdJ4va#PxcfHc1wUUsCU;NSBzaPsp0o1Z5l9U>zBq=$~Es*>#W*g}jrc^phD z6u&U>+!G#7yq3`0U!WUbr${xqOlcfqWbn>#@YH2o4lxNC#I*LYRg?*)y~zg`!%q_ezI!fk!6K+~wT=-G?n zr`t^B6QfD`!Ub@U6kldw7oEL))q%tuH?x)^@W#t{){4>L@y*9LQ-k7ls znUy*>`X=g)t(PQc^V^CH)eb$4OCKxkuO?iLIVAOBPXrSlz|ty4)OHwNEInsJ zd%6T>u2oY#KSNDrR{F+w+&lkF|77B%5Z~twZ`c_j-wDr)sMEqPh+UvM5ML(Ng<4t> ziHT<0cd^b&@Zdl`h^`MosSS;dfD`!pxzMktbgb82?n(*Mv}C&ZO!?n(=SQ31Wivgq z@kcJ5dsBvGFKOszfehajE^Om3rR9jC=cqoo{v?o!w3^HfOmJV)W9e`+Bz} zJ83$4VDoZWz6n<@BZ5kAC91=jmK*wSX&d=j_|4}iX*czO`{6vr0tR%Lm^~3{1pXz(H zw2GDeKF@xnj;5v@atKpxT>5=xkiCNA=lkD|{8PiuX@7MBUL#>O>{xypPf~O-%i-^b zh7U9>G*#voudRQy{P5&Vpt7y<#MrZ?N2gZaw2G;uaJAA{Wg6bg9B}WpYd_TSEceOu znAc(MGhgRoTE)t*MBC1k8%nyo+9PxDlQVs>^I>`hSC@l@z_vh9ffg6?fU7RzROI9p zR>rIA>#fn^FNbLTIDE)iIbU!hju*3596ivvlKNM%0=Xrw@u2!A7FO2nG;Q-5i<o zNTbGSgeYn>S07SRI?7dmxgiZg^7LthY_znsWsTH8U;rfx;Cy%( zGyo)}w3~c4xy>F83~y8x`l4Fc_mCPa|2J?Xy}?K8rvzDV5^|#Xrwn`EuE9SHUR}@Z z^59_C-2bsh=l{`k9pG5D?f*$7GLw=r5>lb8C@LZ&o0L^XWMo!$8A((&$;gbzmW*st ziDVYCMfS+Z9{=Cd`~RM!<9NTX_vLw>`@Zh$I?vxacN@^gRLtg3xC>9;H#5nkeRvM_3pas*rs>IO=mmVq6||* zVeG^U(PaTf_B(g%02&Y-9_|RxIDni-Akxy@T>JWUOnJ6N&K@ooe(%SRmuP4L;pD(( zftz>UZ9U?e-gZAZR2_)bVD1WqL>}jjI167|rEjdso>E-g9d&BWB8pwO%89`VFoSV$U{dA@OhAOy8iuDX1ZJX%$9|4R zvUbR4hj#>y#{Km4d_wqw&R8qBNjERc87z2U;?_nk3SekYp}G&;s!{E_FLY>>>6*R$ zU*L6tEayeRA)mHrLycfGh1-kl!z;;(Y{7ED!NK*bjDKL##lcaSlhcuV>nqA(WLx-b zR%`|!@=HQO!p!VVSlGTR(>s51^9d|WDdDdSuyv(tW+$tsR!sVBP~CJ}U%u!rcl9c9 z$PY|yWdVl>1aDrFSc!y9UF$GKw$_=O!27^(;879HY~O^+AHYwwKuJZ#dd|tis#QjF57~~+Y+sm>6ib;&b2SY(##UZd0*W>7f=01=|HkCzDIEm` z-vJxUlMmT^js^uYUtb3%Y$sIm3AwL7m^ot;_w)h|Dm1<)bWd=RDH)7P9i~-|y8vf} z>)-LKaLQ*qA@ZW|c)*fnZk~#@3EQQpUNrQumyR?$plQKoGA3qs+K$4H19bu?Eg8I4 zqIZ6I0cMVi)0da8!q_7<3)4FB-Fr zdX&oKe8wIEzRi$f+e-;hvKvp}_4|ZN&&Mu-9q_D)U*v3ft$yL04eBV1CuWoU-L2*# z5c`7}!fyoc1ao28t5=@jcz|uA&HMa0IsNw#sHsA$E@E8)pP5$>AaJjb?$>so#BIAd zrN$>TVEcY+W5ylTB$~eAU%x`a!`*Sak}iivxFurCLR}zp=@NKD6!~Zn9>YY`SHT)s zgWHERrQY{<5VPz%wzN}YblY6<8F`fHoU0qsIk}uhrq7fW0R$|9YuY zb7iH6w&R1v$w=7w;^J5(5$Yrd9}u?mh6ZXj4lXY2D#?k7^BZf98OIJC;3N`h6|~ii z;jE-Ls>;hdWq)oJbNlA3Z<#!I{hqUSvvH1#ijrMwi-@F1EEU)3v3UV7!E2Y`0ltXq z*RSK27SEt<`}$D~)EZ7Vqb_Vd=!atX2Kqd$0o$X-2P_8p%GH0Y-H+wA98oXB&sud( zUoMzS3FjnG#tJp*O05vzLdN5oyoIuo@)g}sk_yiQg<2`DD0JP6u3=+5%nM>v(hPYn zj~>Xv(2IbZCI>WuW9bDT^e~+rY&*?e4UhbPObmV*fl%H1Y0?+a>7dET@L)f8#;NF& zf*TQI{6`oDwZ?EZ@bkRt!Dh9`ip_*z2BU3gNC?z>8ko$~+Y5&?wogbDL}+j2fRV?^ zf-p-j|F@#LP2`NaMMKKHS4;Cuf4#^bF!T$cy4ktvcpdxo<^~Rg|_{hewT%19T<&(m^sQ&j= zeui`Tu;uX2fb&+rt+MM&J*`-s+zo18GA~Wdv_2EwQBHX-_D=KwJrW5-vTSmuGR8Ap zZI(E<AciZ?3%eXesJ&vR3Me*UyWH){qw}E9F6sirSCl^D|}L%vnn&? zuNCI1!%RvoOij-6)V!tjMLMr0X!NNo{AM4js~x90uj=Y@BccQD+=hl;ByQl=BcUZd z{SXUF?~m0mS3$sII4qj=z}&rBkkv19!K7+s4oP0$=ABsBltv$Ik0^cy>4cZ&-K| z6`iUMx^+PDP@eFz;-8CTh_!FLFEj(;fX+=FGB&_lUbK;tdK;GZc7{Ux)W#a;+W#zR z%qH1rN9AbTSdJSDwc+l?GViMEVu^Lo^3%Hv@h}Z(d;7-j4th z;`W_y5uTpT?Rs43L|9a8Y&mKQV6#I*#^+cXKfbi?$Vo_-LYx-S5x+9eMWKJ!;175W z(5X3hupPi$52xhV_&9*f{cJ=Kig*y2nqmt$bN1}d&d!@XD4U+u4B~;$PD=U?L;`is z^0E^qwV8RE)eLv{1z*B`+f)4tt>}A`Y!#zI*4+?Bb#f*?Gus5JG~s56dxT z^RwJ*b-+4sqydaq?%RY(8|H5o@rLE?r*Nw(dHN2Pn?JkVQrJ(ctgBcOpA~Q9{TQMk zQ~*d<01*Iyi3*Qpl zN(xDuXlv)4(P@d}{KSnv(p}%OYB#U{UGbRRX6fksYi{Qt!(>cx_<-Ko{Il;^>gQsH z6q18lxl4GC$s`A{&mVDQoW6VIt`ymr!l=<9A%Ri>tsv2xq7Cv57O|Py!FiJUlC1X+ zOVvSWz`(1M=QMlM+kuH1TBAE-Eu1*1aNvOH5S&d06OCC7kaHlz6KCS9eRopSQ;}i+ z6Rj~&B0qnhpS$Ja#s6(622N)jr@NtN#??eo9)ZGx_5?3)enA1s# zTGn;Af*B7Tniv|wUGbvD-~AdGAm6>4j+RzVUj9`!;o0$H$B<5tpq>iUMN7fKp&%^m z2afHgEtNzk)V8?&01}sfe`P>~3<_FrU!;)nYUd`Ur9B%+>;h9j&2&cf%JxT`c%mrd zh2;+&y2+j&I(lg3%(Bk$%$UXS7cVZr^c3>yzl zmUpG9q<}~idd>$f@kPq;_u=k>vYxjubK~cBex(q+WorH4?QD3V^=*ss%U)-^x(ss$ zU8eu0pVe$v(rXXBLV5*tM~#ZA5U!`wxpKJgpE_n_XBWPGTl?h;?cTi>W@a5Y>v17X z8e13Cso`kbk2Yp z*g|-d5zL`g>cqczeD|S`n?tps*ox8pKq|%N1yHAbwhs3Z9%Xp)k7T~i&4rC1498y^ z9V6pPmrVs0r8Qb41o^&_cG1~0H9Fbu>}1!YKFC=evB zA|Yq8qd9Pa1ByY@`3~bk_?XhNv-@&y`9i*QPoW5s`2rw|XU{sfBwdEx10%ALck<-v z(;{T9BqU(OV<|EK_S)?7-uX{jaDW9N9`ISDYK-G)e|y#gJQIXsuk3?R&j$x1WjgWU z!)=*+(%T;1$}aZwk0c&z#H%-lONyiMs+yWMt~qiE5OfPI%iBa8<&Yy#lJh`43K>5N zi&bJ)2qF>oT_B1X4w#8#+E6$6zb`719dEJGyqBf^hQ5=hA~!kLh(;3}H)AO)&@&McSwwMc2rZTrn|S$G)o9&PlE5#nGW(B*FWm zMhC_YuQJA>z|{-akJg?gWKm#GgCXBeXRV?UPa$jv&p1Ef;Y0|wBML)&QzAQXmr;pN zok$*+C-O44aH~2ndz3e~wYe>fHe+}&=;_VnK^jaZNKQVAw_3e`@}IK09TYXdl>7Iy zajGF5&i2k7$omm_feF18nVJ5+z7%5ehiMUZu~wn5|Lk(;Y!Saf)aW*HD4bIiR{QE60eJh-ateqkzYsIGCP@luhz z`mOCnY=+7t*Eke3uRDJDP2PSldo6Y4?|M}3gWRY0_Sy{hoO|JBd8?)FU8Jc^SMUBI z`pGo$ooXGnJsabnPoUt!V#Oiz6agBjG*eUALTmBNTuD&|=uifu{k?a#sj{ML?&xM_);p^A=r6pFcu5En8bb3JMz+c4R^?8n5_0nR%pfj*4iHobKV2m!~@qZp6IH|y|dOuP0S>Y>n9l@^^d9cR9K{V?O~ zb?$IJN~Qvx-^}n4&GPHoFWysjUEtr?Asj&wSY2|wsOWf6PkqT)ct6AHNxPJ)hO8`A z4SkMpfnPg6yfd}KQifU}|U3s%#MhzKY2ba+I8gJ$s264)Do zXgjvylkGpfiEFePy^)OCi13m2-%$T{B`G7)yKyB7D1 zp55#%F8ggbGW+E3vd-4khx!kX7eW{J61xXvI`Hws43AbEyDK7H==SeN7|U@^&ezyu zxVgELyDk32tlO!}D(>PAdmKCv>a4X8R8EuX@5OtkW8Wd?m!<)YIab;iw7nA>2BS}z z>Q9^e_>eoC3(T}|)OyT*VS8g^V>SlQ4}5qG?n{x?@<$jVshBQ2h$zs7urD@Nx$iDe zhEAGD10f>5P|bp=!cYJqX#!jgMtlJI0@uO~2y*;A!5|mF8hZ67zP|43%gu;xK^#$Y zGynPXJwSvI98p@jjvXCPwiFrSx{m^^J8_~8hH_=)X>5-uNcs8r5E-$8uMLpH&G{7c zVela7=@BEBh^-;pP=7y0AYVol6}Vft!R6)TaG9~wb;wv*@iH)kN9l0oBaEBC_h~I| z2Kx6Q>dm} z2;CX?@*1{ivWu70RA<8}x;9$EqfSATaX$LYwdU*164nQ}`CcU4h){T+m9HEkJJ;yw zep2Jcm+FQ`v?0S`Cv8s5oOt*HwH|gX%tA#BddorJg%D*UtGxHE#~_Nt;_>>oKfK5~9n@)=$kp1>FHgr6yuDU@=S|d;^P&KhB>P6HimHlGeXTyb_KX|il`*SWgE$Ft* zjJ@DYa`KyGqO$AQTMo4lS#^(hvK1HZ4iqu5iuM+ks0^*D818PIjh%iwjg5V${m%Qz zlT`K8gTC21y$FRywOh+VyXd#N_jI{MqWuQgR8Z${<%-f$-0N--E=o+q+Elky^kw2QP=lwM?iie|D%{%O~&)dxrC74@uo zcluHs@zM`JZa~h;%8F+MAt4ZU4damm1hhU?*vG@mTcUp=rSaUkbELm=4YY`5-Ugrx zb0edBlO6n+T7k+OgifRz+q)`$I0yj>p`5^pi`+-hs|XrwE%({ZcQfbRJEO=3);mx)~SPxLwRwAcQDRu*9?I3hq-&-2IAvd0+SQo(0Z@J(A$op>cyQ zTT7;&Ys^&PzAwQ?!o)r~>%Dafdu;M$m9FFp(2Ofze@~okS5Xu<ickvG-h3 zQsOoTf3T*xUm_2!!zb%9=eEc;zLg@XzO<-IyeY5RxhzSIBkD+v6o7adV% zvosAAK1CzvH}3N{OjezJ=bw?>*lZD|fAZ`ZRy6X~#SzPc;R{f~pr$~Js+VJMk+rRU zTYMoAFRH+phL&qJ7{hbMw!gB!#-n-w)fQgZ)M0G1#hKgRZ*cy68J>P{k(6%d2$XkB zOiUIYC9MiCM?*CA^@Y2FM$`Ud5Q+1Bfj0h~MJ^R5mH1UxaJ%}=*Y{kZ7u2@9yU;$` zW7D#lt zZf&|^E{3abajTe|;VyO=nkB;u9sVM^;9m&1bN)Jyw+x2RysbrfW>|P=AA$ldH$yBQ2qgQ{X4;KsKxueDzJJ~MX=DKy&)YW2n|LRF0Rk0uk7nxh1TYsfAGQ|zh zp4_~@o*e#?r9)hTtoBc>mm>K^GG0GjC$X)?bHAM-NLx)^G5i!(EUp$=0u!& zgqGrJ`ZdUS3SoVrRwkjK+zI9r&^r}1bpT2&8XA~^9ut)fL{Pl~l}LqgZOHJj35w-T z4XY!;9nwoDev!&E_!O^sH5aLR(XOt{o8G-E;Q9_bC8h;tXA|2D0$=y{f;PIdjN*=A z!eMi{^Uv=2vSTo?7bYjpTg>l~^rrKs{F(l2_}Tc2+g?EeYK&~gyr%w2Y!5URzHs$& z)$)_G)SKEYINP_u*3{^`(?cYmPRn_Jcl=!$hOyst^ zae)Mc=5proPxU?fzU~4c;Y)jIZhY>22czi&@#AiETfC6fgRNMYs=M?%cUZtu_xa(v zuT=^aPTjD6)qE4xj(HULDEpblV=K+zG_xP?&G&3tZa(#Y_JL%gwkT%*4T${4wQ`>J zsqh?@w?-W?}4QpDo;3`r0-MFw(451G_Br4c~_NMmaFmjQhgier!$#WU4a z&AudtgoSP3B@Czy4F^#8PWDx7f%|7xI74#`-lvMK&6frD0rp`fRsC}&5j?JHJk}6Q z6F6}2@p~_D7BsGBhO&OSacu?g#ARR`N=f#4+Af278$swW zg&ql?%Q@(X^781}V7kE6o>u_$k9_#`*al5z+&SkDok*?0i`0iUJSZeyU0!>)q@35` zSCSf4ohnM=S1+esk9}VX=T==kHyN9n=bLBo@*?3OXi>K2%O=>{!!C2*S}}fGcjdr# z^6lrS1Fh!o%$YxP&>Mal_-H2i+c({n!fWEX=e6zTNT;Z@N?wL^y9Q(|KOO|>QHTJW>DP3Mcb~}Jryz$tFc6D<@3{*#2+HFl{N=iz289To1 zt339-vvYi4U=IU>&lDU(=(YPke)MV^z&An5&hw1gZ~s3|5MxIHdkeIE4vLF&M>ExF z4ecB_X7pH?#0-K)`@p|@TX{I*#OW~D9u(Oebxz*)V!QGsoc9#P9sBa=>FQTLIC^`y zazMg}Wi~5IanP~t-FARTUGwrz0g(b`f|?hj!y-^)!fm3xd6n!RCuz_zI4}@-=FSnT zLU8l&#z0Vu+7RPz3=9p3*Oc%`>c*v*A8d9{-3}UTJ*B;5cI%z!?ly|vuwskmkJ2c- zwS3P6p4rwIkp-n15Uv|Hh$yT4YXMFjzMC*FwV+%1@PUMlgNKI*JD~9r7q39O2#_J? z0rl>G99m@#*YV?Hzkf@2Sy@{vD<}Z3_fYr!_x3!p;#9Wr%$rWj_x_I9*G~M;$0=wB ze6*>}#4^d$_ncr^4JT^e&e< zTEN(9F@rY1>%cisMVq%+LCfQGm|l}$++B&N(?38BfB_|_7y*n%+|w6~V5_c9EGvt7 zJn&GBXk}fX;E(M+Ui?0QTO`q=! z+auX_x9!601rP{>PY1`=R8uuDqz@=~rtXqTY6coXZtipp2fui+3i10;F@xF%L*u!N z;LV5G5?R!<^YggJZnQ?*66tw>Qvdg2-?mL9UiEn14S~ms6}|u#bYUApcBvUJ@aJ_H zrBQN&5=Lo&atW7%UvAHKf<#~y(N#@+RW^P4;G$mLus%CqHdyLbSOD04ixjNs?PXyTLf$7L6+tH;(7sujG54x|l`83}LzQ-T z1`Q58qPh3q8?b5g=`=RhiW}AYRVZ#2hqEd1t?ue{)NVB-v?UVH0Cx z01#BenX&~?OWsVJLMJMDjE6^2L16+0Ozb)ol$6G!n5lLZ>Kz!GdwZ2J_AgWC_tX@; z!$SPlWrH%+&ebPb_xfC`hycpSI(!lrI-zqq)F3|GJ+xVFsox`CG1De-p@5H4&< zVXPO7reY5G*VGggQe?=)KgXi4s%l_v{*;y|G!XsQWi1FF+L=%J?+_Z5cJ+@sdR{4L zKJKgqr#~mFn_EtBp`n#VbwKfxRpu_Swccsn)VCpSJFaO$1pjtnM>6>R;$j_0STINu zp|aZ<&AE2$*Z}}jj-v&~gD`r1%r;<&jnIzKZqpE^WrL;T`0iuWAH#MjnV2L4Z+rdv zH$t(;_G%&eH#GE}(H78Y)N__4*sor$wPzn8kp2^G{JUm6@5Xwp_nWrrx z9U3vTUe8hKJBKM^aM9qb!Ld!h`*9m&iUHLFqKhLVBiU(b07_+W<(BbGR{8Gph<%8= z`0wR$>kGYr_%3m)@bE{4Ma<=Amvj{Fe|`StILMvWq?FpZ+F!I;ZxTiUL_^bixaaUS z+4h)c&vrvPc=BWbExx$Arsm8F5pBSq?fX0byZ}$e${JWbfch~sDoWl0&#H)^;6z7X zclSEDue?qzkYa#3urMC&g2KK7ef$1R=ia#U4D98?7dSJ60KpXNaEb7GBzqQd^lGi0O0QyU1ZbADXqc0DJu7n@DwjRh*q5YO zsWF=J#p&=pXP@qA+XK(1){(n=kkycD+!Asj8nJ%UzkYpK2y#L7fBNj%B5_S8z14L< zns8$7W!wuf#GxV)yN~u}`!Y`6(vRXd@fONnfQ=4N`57if*_& z$Xvm;A*!=_zLy98JlM>04# z7(Xut?#Ur76_&|CF9lU>%h7(Miesh+G?@^7r@ncUBP`5!28h$RNUh2hjlEsp(!Z5N z-Lv7B-PlGXn7TW%9u&=WdG+BRH;)?0SmXueAMPiIp!L9I#ud)x*Tu;W zt`E0~fMNi=}yR2t^YHJh5ybA$=yG`47@NCca-!lp62_C`3Dd62_Aalh7!DVmzUwqf;pyr2F zwnyjvAjhJ6b$9*lK->rI12m&gMGnyxZDaHLLN!Vym{R^X>Y-OvgNPW#1jX1PR`>gW zdMOw6weM-yyyJM!S#MnbtGvdrq#||mT8qYA_9fE2+t=Fu@TQA$%ZZG_MEN)KFSA(v z^BCh=6%{F^#9$ZjEdS3g@K#TWiX(p;_nmw98YB1zA!G#uO_qR) z4WXVS4}mr8Qd0T`jVg$p&!0bI-|6q~pB*&xtUX48t5XlE0Mi8k1A2GiVf zy4Ho_P2*4J5){i>_)C}gmpJ!o{P4NAIure&g7si6)f2hNg?Zlj7s7K>b6-wY-$ z*3UZQXHVNt&le(qQqCe_eCw^_$gFCn4WY6Rzl`x~M@@s)JL6NYZY&19zijS!e4hw! z=aRK~Yp;@du>9+=m-3t(C70;-F&nXuM4ee8lj-EubtY zQb}_`UlyTCM@xu&&Vs@nZSd|PaT|sMyijW*%rl5n91pw8q{?oN)9;tMg(h8AzHRsP z{th}6<(wDC@#)^O5(MKAJW^6%>=Q&u2vP%JAtdvN83myW+nA4-p4n(+`{x;XHML-< zk8rGmt%IZiGA10NC|=Q?F3rt>ZvsI=9G3#78V?Kv&q(@WU}dea?h(Cu^~dw)^ygSu z85!}DC%*4Eh|b1FV*WaT$bv#? z4eVu*_euk6Sx?IS*i>${zEbD0yCk~SO85UV*i7wX&_(1eq$@Uo9gs(=dwQ# zV>r7pYz2F>7-+aJ7f*yedyoX<{%fL&^PID~k`gZmN7AcTlK5}1(}2K>7Pdl3N*qj+ z<4v={vqir7l1})iS65z>j?)>Z$>WQ={Aeg0RhvW(u#nVF5HcD2S3CwJX!O>$U1z#( zVb`Wu(cU+EMf#gG|1JJqT&0Ojgb;dy&S8?LXWI>1Yy}i8xU@O)V z6f#Y1ZPS@V?6jB|-!nL9WL~=&$+qL-2D)DCq7XMSQhEb9U}D4M^9A8o1GNs&8w-tE_kB~Pv-axUR|pk} zb+Y{R)@W~FzGMEqdk^lZUSFGz)`{ut z{IQy_S^X*6cXRJL=M%b&%m+KlH$Ja1oY!5LC(lSP(k#m>J$L$ia8JmK5R0Prf z9SDXFofm-sBLQZjfPQ)6=eIsg$K7OLgmEy_DO)AJ6*vTN`({q`8Dbe@ooy z=qu3ISKQ)CY@z*bd&OSLQPcm%-#4Rs2$h=cBI&|VY8(pockt_~s;=5jFq^nN_-TI8 zg_q28lZN=9>;fK4@W8$RwKd3cZy%pSjEt`HJnrsWRWwwdZtkE=0gV_6MB;x`GgAoV z;yc?|qT+_^6sNFs;76d*pFbm4Bu3PJH)D??2OWY)`kI@G0>Y%gpdeM$y7u<@9v*~; z5(i#s{-}?GW4PXd)iP`{np(610D#Ns{V})9*>u5gCV373i|DE5gPFw_;n? z4KYN9wOs&qcGh{$*wQisQ_^ietxQCnIBlQyU89X1a>k63`Ku#KPNjvLqdBQ@Z|_dZ zx7`q+ah{F%L?Gxh>lehLj7L9@*s)iO7;BL?j=yqVGE`zom4m6^qDA$;raF~w|&&VJMUo4Fh`-%Mo1AzY! zl@cv|$T9Nrx}-1SA;ZB$3J-f77KV1c#FF2cWj$Acz_h~VKsvBU` zkG8hnccy{(F#t5!?3=Hi-UDbA?SA#X0Y{ANG2%M_tqAG>47FfmGsL^%&49rqsUCwd z2qx&^9#B<`r z>riP?5u|@ni5fvT|ZRVTf$gpT$L!p7XA&Ld8lPbog-RhW1=!-}%65JqyPY99zvd z5Y|5J3fC51!BfyjY$rg%L(Rgp?RR2AoOjJHicSl9I&`I2 ze9$;cU63M1pg~V&f!XxLQBcrTKxcF_;=?*MkP&Ep>_mGS8cu>E#TJd9L+1bu#xpeZ zWMmk-3GV%~ z=7Hg!700BSRK`bMf_pkGR9V4Ue~y?MNq-hSE*ca0 zK<2rw-TOxe`EZXl{>jxQGNmA5!E*~1(@)u#WdO1Su`ZaveTw0JC^U$C>W85=~7Qk!bcEia00+OOPY$;v)K}O7+SW_&VYs z|7#hao`%3~4L=9H3*FN^v{U%D??3KCggw&LJ;Wj$nl9IlA^ipXhL6~bhnjFF$Syvs zGRU}&C0-YXLz?&GNtU`ww*vx?gJcrVii+Zl+D%3VL-Y@rKFt5l&cc)RWkJs@=dqWU zv8kyKPl-*)|Fi%;K7t4QaN{sv2ejn?^=?m6X5xYg2Biacu!|)yo%#9sL%*E<8$lzJ z(5{?~(B6xSwc1cJ6ABN?whraj1MKtl0vtPOD@kO$-$W$s($HOWw);xRgfnxl;PV%9zd+uiH@ z{4hBVYO9F8ZIO}~^#q`}0dvB-2P9~P#);{;#LGpzVgx~9VUVoL5V(ef(CN0q#o5)_ z*>Pbum8d_^VI%*SnW$-`6x4~m-C9PyWaF*Tfy0lp&&Wzc$wUw{y;TH`rnF2fGJ<_rPuZWOvefj4W2@!=S8FtIAVm27WkH#9s< zoS<7Gf>uX5_x*zv0YX2(XtdW%b9`(Bf?T$;NSRUb?BCC*IZAJqI&jU961r*5hsGPy;Vn#)0VgaREEJ-gPvf_uK3NU`-_I- zyu9FYqaYZHJ%1lF1w^bmk;UTmpmTAwnH_3(OiRN>nFfM_tr`(%*y{R9kwLv7ol@=2 z&h~E(l8lf*PV0H*VExkPA9nn?mgNh4P;D!p6X$csiP`iY#n z+FI>AGc^P^LW6l2(vcWPF%Up~a9=+`+>Aa_*h=UA{Sr8rny{p{{$ zBKAW+1K=IJjHzfnuT_s><(HO1oD9^eAQ>ki#xz}+&NZy|hTIZ)F_p)?{`=t7S%GQi zbK)CMdHFo@kxx0&#gKbyQm&JKWR}S|oIHZw?OBRnBrI9CICD8q2tQ^)b_>w&JYcj8odp*Qy*C+PShQ zUhQ8Hi3wrNw%sj^GjxCqHpcvs+acTx2NwIoXzvf53-`; zO3hE-2W*)`lXFJCH{Z3}fz^t2=n4PN4yo$Inv(c^hHHblKY!0S5&rF^a@OeLZlkJbo-~ZGCd$OvgjqSK?V@ zR~R3UG)};D92^+U2A?I7)69c|zTfseOZGfy2Gm19BibH;JB4K@CohjFsh`bkp?|o) z*Eq*qYTcXIF+abt>i+9z#=G3o-1M5PX%$mtrjgY8D_nvqZE6z;u@^ft5FZtPkbuEK z_g2fs9#c@1>AB!UJE@`jzR#&*^43qlHk;p<_ns9w%--K!a?hUG9@i9=Y>u9A1%KaC zn2n^gCt8M-WG?DQzQ=vZ^U0)jX7+VMP1b*_{(Ma-6)d~BxW0x4y*5LMI1b9-#?xx_yQS6DbK_E^EXlMyQ<78g z87D5vK4YJl-v5aAi+8TaT`#MTO*=&dU3aw-! zLzw(d0vQDbO)oEW1c+<>WWX2H0|hR6AAv~4!?cJngC@sw@xk0sEl#fcB@O7o*tOxN zuSQu5e%;N<6kjhNQBceEun2;>tp!qQ{QfVdmG`lVYFI06_ut)N4_VJ_eYGle!q;ju!mIVhnQs>55%?)TSy z*tZxtc{wv^$l$ER(ksFOL`3VsgLne37ux}vd#w(iJ&g3)Vm96Ho4*4A70cVa&i8RdRc;)Ax4w;wyR8s??hzd&Zj~|V3JZ3!g06UwSmZk$4 zw7EI2Ug`U|u$+zcb)cue>wbZO?)&@0BYs8z`8VjKpb(l?0{Mm|0sd%;y?W=x?If7g ztY(ak5vq8cBgoppL!wpY@)vzLXohWsFS1&etj5xS^49wTHF|rBYy?n#(BonEl z*@pzt+dbaPRDBnS9I^k!^w({5b9IaF#KV-!ZaREY{9J$i^ZK}7`su0DhAaA}JazN6 zGb|PNqnFR@7JoeTu~j?8RL#UnxWiIWc=7v!-PJqNFOTeIN9CPW|NiDlqYF|dpY44o zD35Np>WM4p)9H078CWEz+v^a}Wq!=WNp#*$Jn?aSpQ4fJVEUZq)WX*H1J#a&zREuc&_*6n!t(MUvGF)u zF0f=k;BEbf53e8+nmQ9EeAvQaZUZ^E78TjqZoh``D8b;Lv%RlNh)bvEeaL0~? zd2QV7tMxZgv5C*^dlRtFRdAVvUZ7PziCpuW zsJ$;(_iHo#Y;?J*SUG86w=jPa9rN9L4WE(0`q-xyriUx%aln z@2rdQvmtsrvBaZN0V>qTxo8OeAMP+dVLaT0L)0&dl7f*UZ~n~eoeW2>!%z0@fAlT- zWsz}x$iw1zvhXMGLIeqwik+0Mp_1&oA{Be{%=d=Y!gEea$j~j!DlT3Hg(EkCFAUSr za6`;jhyAFN#o`9pSpLA?BGo-7Zl_#!ov|n3}j&M z{{1gPLZT4(1OJ9X7B9;i6(;QY2pJ47dIR!Gj82rPMc@NuXF?KIdt$~`O+%t z{z*4gP0b}ddgmA8AY=n{Q@(VP;6e0FRB8jfZ#|iKV~_M6i(hS}4lWzt8k~6ag0B2Q zu7L%^;*(3ujX{@D!3;NKbDw=;>$~8zUjRcY)+UTi*|M@Hlr{1-$?t8LvIsp5)#y{B zAxLaih&uco@5tsX-a)o?{0qrN+VmBbk&@J6q|O{Ec^dW<)$8H>k!!azuP<0OTPOCI zok;U-wqKu`?a0--sC@DM&b3YYh?1=_x7%0KO1$q&$VeDoN!We)lV*Fk2Pc#J{d2g* z&`K8#-=$)sN}7+Zxd%)(xIKtrmH&B_amSaR^;cqihTC3>zQiuCl&QS$Fd2`!uF%Ds zBrf6Dw|##yOo)zu_6?Mc+o{&1K^w)enl;V5|Iz6%z8eB280@Rkr7xEr=SOtOhBxbtc=Vr+cP}-OVH7XZyCp#T#yeU@v-l$5+%4SpLYKa zvn7n;P-r0bF*`MNU}Qv7LnHc}v%o_M0s-gp+iSs(;;RT4cK2N$sfnW(-mHBIW>YdjX_7Hu+`O+J-H9) zc3eE~a%0w|c)`wCEJ2`3xVtUF@|@bun>zMU)fLp_VdNPK$DC?heDC=BGq7$IEKZfC z%;OAid>;36>F-yauht`dZW;?_#r1ZWqDb+RfsT7`q(^FH3ZLGC2Tq3Xe@lJ!JIg2+ zvTFZn!s=<)LD7StkDo>PqT8;ssP8&!%|-C&l+J%(_EXX#GW}d(e5!%T$9md%T4Ws) zD(6E++|O-R%XOQD3?(f@Exc(|%h+c5pzLkxyIPG8dF6?2S3V@CEuKg^cABoE`h!m> z2N&^Ez8MYv>H6-wxH{+45Q0ZgcTm_V%?6DKb4B5Xtgk1nc&Eg?_nbU+>J(Hr$|>Q` zpA!LAh^f)s%e7)l#hfc*6N|?ljTtok?F;ehsW@Q;P3lK`Ip7}~giDfBU0uKZU9|xp zT74|Co|gza+(w*o53+>d0Zt8JlRHUC>Bzi@irAjwACT%^N*bX#=VnAT-M3LRS9v6p z{V$g{6qK+n1|kp>7=X~hDG=D;Bk@si=-i(hB3~uX!}t*Fb8y>nAz|$PlJ(J0XH;=W z{X&=5)#;`rO4KFkl^rA)py~bn`?Or(;&x=AyF{OvgY2`Qz@|RaJ3fv$Q1QDyQhxB+ zOvJvdiq$mYYl7;m#f^(is&h?$$Tn#o%x*{*aK3WMQ?*L?Y81}RnzdlssV1W& z!<`xSgo}i5q3}V2MZIo9{;!v&hUe9jwA2t6*<9vC5ekywyB>@ z4{csa9`-MIB24gLXiVqKxZ0%E)F@5IW+r6oKHU)Y5~ucJ+q}g1HdnQc`)x}>c{9bD z6CG_5s%)vzF?aX>ETAf+`bM!~0)3Ebn~sBF=i{Hx-fbh)kPAYvnDJdQLXKJe zkss-4jS6vzd!LCHJ_xwyCp9;yekqmRCLp6phpmB^C4yP2Nh4@ews?mc3BjYfzkthH zHbl1Mio?W{(eA>cK(Df2zjwFgJWAflChmzbetua#aV)RW)57v!#6;MAQ2Ied$hm&6 zNasoCBNZADZ>e_UsD8Nfu1%iq{JMJB^&{U0+-l-^qMQOBm2#xOEy%ddLgAkWu?-5M z6N&=Y<*Qg4kn=;u2w1rrL1Tl1ty?c~dILqyWr0f@wcy1lE$&@xU2=N~5?WeLIKIBr zXP_)0s{AmgLt?KM>cG+BX9z6XzWrpDjr#%#RS2+Ebis%UV+&P>!b;(2D7FjW77mEc zcbw7F)$Ibl2FoM~AxpnvdS+$|f(97nJ32d|qeOzpDr(o9++0bnUoa*RiS||n+2@Gz zf}itUrf@_|%oIlbVj?pU3EEA0kctS@uKFq-4XquzShn*Y?A8|FOX3+{js}!k`OF!? zn@80>lWbn(zOYWSo)~O*f3s!4Zc|-db*1?l4uqxf2K^o}%nQT$!+trv?D+jp?>}|4 zjZFKec#jk$SpnDKNWJ{i{wGePcqJ&)TS{9f68Br5?tWJDtI;&hW@c3<(dAv$u(QhW zp4m&F?RiLbn>5g(2faE+D!;?W6IZuzI$?+pfJ< z|EgZH5VY$c_pdd^NB-U6wcb%5q6h^1CSy%6g-d?2e)ch!umjoIjXe0Vva6Nm=+&d& zp2sn2Go4kseK6##WR@-ajLg;h`%c9!Dg8a21=+Nmp-5-=xUgdD-&qI4>#aeK$8|Zwa)wU_=NWNSCYZS8$a8P>TMH zK)|3bun9u0s|yezCc59v)-62A!;?`npb4^)jh5`lkt0yLLRJr@^q4ybv}JapF@NPi z@Ci)p_NfNB@|I;60okBOO5mis*vk0j&&jrf4A>`7!AdzI?>%@ds3`|K8;}SvOK36( z9;i;y_z@}*K9Z4{`BRkr_YcGKYvH|>lu~3u^V5RoR{ro;-?oW zHFa(L^Mb9#tLB%DcCXIb?aZz#B6M8lwGo^+^z6zLUT6G92jSB~v$KrmgQ4v+l4s?j zo&l3Xv*3Tec6%hwxvQRmc%>Yeus|q?zK|{_I_D zW;2kBdYZqPgqfkS*0?lj$E9LlH+TExmIh z7;P#C8|R4=z=mpEm~#BeaT?4F<^mm)OmC2?J_3J2QIWQi5-2AHXf|*np!eJWL4cYW z=^V}0NVw2Ak-xV59#KC>wr9X^y^o2>(#WVwuV1%nJJ@K z=!Ig+7Q2g5&#%XLY>QY)n;%JcGfHT&7}h7fn9;7=*p|eZ@uMtPX7)q&?}z+^ch?-J zbb9hfgXcc!*O2N_!W4!ljT(wQi6V|F-;te!JbPE(;g*Z0`Zn}| z8^JVNCGB4)jJ{nlrrLFhDxZ{4`FN0oVEgL~WEGY>J3l#n3>sp{_kG49&o-`9OzpU?R@M>i;vctm&(9%N!<1ldUt3B|y}F>DnwF8Kw=RIzW}PsL+Yr{zre zkHC$ifos4HAOmQD9MW!ROLtKF8fHQErK+u6l$VDVzM@fAICKZaEuz&F$UiVwM1zAg z8)6nzWfEliAJHl`nPP(=1t8#5!9dY%c zDkIbaMTYHg3Fv}^001M9D**)$Jo!8?4-l5Utt}`FIZD|C0?4&Ea50{hc_|3XM}B^c zXAO0AgLw-u3%($j7#d0$Ap~2N8@9M&l@|+tyMnDc~%(o zr}16X=ESBFXT$K1#+`DqAi`u_$?u7&REv3<1#%3*vD>lK!~Dj`X9i6T&3$x9z*c&{ zm1;lDFekh-e81AZriOzQH9p31C}~pkhld6aIUI2qw;kl0ZPb5rvHA7)WR?!{PP9$~ zNoA&5C$$VuzRs%3%BVVHs$5mdLNTFsGyoh+fC;QLXHa9nY!f)c+|OG{A=>B91F$Vj zNazK-2mY@p9IzeSn>&LE1v(n|S-H8meERUg3+M&L_>|K7Y)|edW{}0G9*lkuzyK*^ zgD6}a93TY#1{NTiSje$44+OE~vs)fa?9$SHz*q+d2u2(*mU)My;N;}|w6vQ{4 zPfPojhAfl9;r2j*wC4$uv*Ri522Do$-=}kgNYCw^&)sJ5tPfB4@(!Tbm*eIl~QHH;L92ZBm!{0FYBs6KJk@Re5 zP?kcN=#QxrY+^x&G^hLg`+r=3#B<#p9pnT6p#2r@!Y59+H-ylRhhG8%qv;(W&U?El z5Lb9E=}L7Lv2nSlnFeQa!m4&6FNwfgM7azsc->hnq}g@N!>+#9i5MhfyftHsaU zB3U_d!cE+|%bM*rTgvec5&|Hkg~u)&3>;6#b%E2fC$rnRE@3iL9$9|$riH4JYJ|hy zw=I$S7$r8hGj%FuC+!j6)1^J-dfL@+#-PV6zWZM2H2?>KJNO^HirrnhYj4Pm{;4sKhTZ=tI@b)hT0MIWv zQckm}UV9+W@&yI!b`qZw&QU}j)ANOXFWAk9wp`r`+B1MLsg-%vWmOCj{^W)>$uU_pAf4k)W;0kAffe-{)rE9d&*sFkqSNp6yIG0(p z4>kry1?F{dGo(B|A@0BFgOe9-K-dxMDt7$u9~I-iN2*d)!tv|XqW9TMr5f(P-&hWM zZJb%&G^Mz;boYqE5i`!3>RbJFVZ*;t+#{Gc_lO)d7jXa?C4U@qp#N;Nu%{g*oHQ|! z;pevn&&UK?7~~t2zI?fzni{oU1RV4cL5QINkYpd9b;vyD=jK2Hp*T))ES{Z_aqiFX zS;mQv^4rDOXrmf;PHLnw{C6m&-2Xv&^&rg!o>pZtP@LX0t(+0oF&@tuG3hYrP_(;0 z6vH)tk8*t*-$HMOB$d_=`Jg(b@-7HCQAW_6SdT z?Ao;pEb78UB)#V%ob-45!~*En;I@EXk@q4L$~VkpH%C|9v8SMPMN@$TUPk6(Ry~*x zuxleF6d2@Sp77*}i9f}trL{Gv|J#Gx-8n}-V8@5^FalFq^Pw_^PbQG(cSc{6&Sk=d z7biAc5|NHXLJ(o0!FV52F{2$@p?6tDdAYfN@Cnb^Da3vxy8TTlfB}g86Ha%y#dxxxGXc$C4tHA|n>4&^m)*zfHto-1X(X?0q|&6w-robEk2CpcxF<2Uo{( zuSFC|b>>jRK&Og4LjnO6H2e)n2QBqzka|~Skpd%2Ym6?y1pL6L+~q}Ho&%>On?OuCcwR_7k=ZxU(-YP>?Cax$ zVFV3fc77gT6D3r}mkHpfzw6U=~0N@~7 zFPA7h;-GK^)q|5W8TOJR+1SRBst7q32>}F;t@ZhxQgnqa7fDTS&=AR8en&Yc#x6Y5G!#hx zJQm2Y~9*hr`;anCi;u%)dWJM}PMejbQ`T#f>DRg|Bzv4~~1Sre=rCU^u`MXBCCUu;)VGCq-Q-fBV!AOjBSm zo){CejR4m}Vq7!WDEDnJ9z@!)L8${ruOT^UU48v!j5>g#b0;9mEi5b$Z4m1AyXMJk1i;Qsj zleBq3lXFr2;F6*`G4DKEC?q2;J{A&jWitqyaojTNJY(qHdt-l720if}l zPi_i|>6;&|qDwjVT)iyLw=gf=q4KYX@yeFaufE|TEcE>Fi|%e83|Y-s2`8=XGY0JB z-Cf-&?~pm&(SG_Rna$tmgHf}mjLleCV$Wia`~1u?LPOBCA9+KOjrAX1w3dQIV1?Ah zS#Bme9WN0XDHw93DEeISM zl-g;Pl_sZ82gA)SKk3dLRWGmdxVW#_9@eUb!%nTv4k^hypM)$2>^aC@WqAuA#X=yX z4@leB%|bOWLdGx~{7pi@ty>n5XkpL5qm9mA!fE7oQIV+B`klLRaR%^gj8Wyd_l)c; zHE7}Ehl&0jicMswpk!^i;HFowWd45C-B-%+Dpru)=;u*kK~}UF)P0 zCGy;gcs$YV!A=o$qkDa5$RHGgz0gH%ZD&At5VoP`v$f%QyRHF52$>?&oc`-=%O?+a zppS!I(EHO%n4E%@4GY>$6BvR(rF=wOd;@ajv>d-by{?h|2^Ur z53?SgaPC*0S0y7@E4LJEb<0(Xd^f9;tCrb3(|^}Ew$!@m6M^6nwJ2V0zu-POa8@G< zTt}Cw;lm>fnaRnIRT5+cJ!AC}t@*9vOds`q?U68aa^g#O9-g}Ud-69WFFOGyRY?|( zUk2+kDU0}v?lGa<-+Hz2i0mT?VLW~QON-|4hhfFTiXiI~2x^^=CPOFH7!Ov+H~oIt zC&ewbZ2x;$M1oLz=aFEmeDj(IGbUeu@BDo&;C$bv@WCrDv(+c>QicluLb=3nWM|IknKWGWnOzTcow=#!&q>kSxJouq?&k9F^#tLmzoJV%5kK(}=h_bBL*mj_kTk)N0?otHF7&-w=!wn6l6k zTEBl6;^Ql|Y1s$G?o&hyufa*f+dK2=Q-D?|6<#LAf!xZ(q>aRF28KW2cM0l$jsA9C z9_1o66&1uOCBu+u0k-D&nx+GyAbd*3vCNM2G9XwGVm*?|1E|0mh){Ct;8j~&4+wNn zzCjd-%D8nH)H_ss4J<6GXHQYSHzOhNs%gZI#zYE7K^hfvDs2At0ai`|fkD&df|Hld z0u@0->++Ax49(s4y9oh&$;s-`Ng2XfTR9`Fg#FdrxS~25=MTR)_5vfu>Pepwm+kVW zW1g}ZGl%!P2aj&&@!p1o;_P#}5+sG!Ig;%>EqwXHORfwqIw)%rCQmp&93#RcM2*w8 zZ;eIj51u?ce;<%wYS&Z!%(d~qt>eX*mW^~}Jjh^~weq@sx03cjm14CmEeEZ=sXh20 zTQ&E$z6JQb0~ZKz9T0ewA({Vq+Mre#9fj(k3a524NFPnyh1vz_M{V!Fy^maCX1Ryl zs*8UeR#_i8A36Kz%+6oO*LH^2o%wcp^TpO12*j{0`;SLWy$#<3S}#cWGbl$vcEZi^HAw{(pU~>ts*Q>e zCke2kzKw_9znd&%K#9|&@btDfntTA-Knf7jcQiJ83k9i;ZAAv)?KDo(p-oT@Oe;M#amTE z^fO-OKB%)~xwF^lhXj)VBh4Ecr%7j6I%dy2k6LB_nK`!SB7?lvWo|-B@vB{gg5RA| z>`Na9XrKwm5q)5}V%at=Cxr)FZC*9qkcSXJ9z`B=&dU3a(bdCDBKI%oQFRTjdBlc2 zVA}bVSX$kCmHbMsEBV-sj^LVC@-QAA#S;K`G2g$6k{Zz>uZ8glMI z2@S>2=@KAF-h;J|hDy<4g5YFO=9mgS8j-g4DgI0EZuEKkVfoD5tB7cW002>w9WVMc zSH_b49r{*}eU&_PC=9-GB}5lyNl97HIrNuQ8v5`-*}FGkeB8EVNS{FXZv?mSC*u47 zK(+#`ZP?dMPE4Q}1A+hjn>QmEqF@8%d@7CO)c;-{%|`iu;uW@CE>gZY!tsfrHjR_< ze2MI8j7{;guzF@j{D9?qM&4-2???UGzON*ksL;L&;XVl|@z9Eql<`-uAB7%56d!|! zkL?mwf39vjel2BI`yu(m3^mPV&H3x&wkMu)>xFuDb^orS= zGm+YW)VMq=yr)5RL|NALYIk>%X+(bCst2>uQKcj7`WLJ&bd2#^#{R(3;XXI>NjqM@ z)9kp46QkF5DYIXE8;bd~<2JD6(dK{HZ$zYmfqTfcpFbM=a-=T88$lFF_K)9>!MDLw}^VJ$-b)fbDJC>0n&LjW&~+K-reNHq-(ER5$&G6BP-wI zwW7YxBc?{80{kv^G8CdJ%03(9idtGn#l#-I+VlbjJMb(Y05-H*t5<)M(GrQ2z`sx^?XN(62QQ(Q zrKR%TOV_U3omXrPAnJ0VdOE+3u^bLQ3~3c(DZ#&1R(=lU{MWBA%m9VJb%dtS^Ws)g z^V0*OGmoVbK%@Dt(?=kHgGW)dGwW(T#98 zVSgAj5~5SAyI+O#X(pK9ao5&Av#gHis9&f~a<58F4}7Dd80qtTD}}#yv*#sdq4I(9 zRlFRAC+R(p6u*kH8G3Vr?KUeI<&80o97knI2_n(rz468KT5SiY)5tHF`EcZIADyGQi44R0Ih zt|`?n=zU(pKyY06+?M!WI#X3c!(D~XoZ9e}VTQYUy4+dA_l9lp3(s0&BboN@kvYH; z_4b6T_~(eY3680|-#G}5`GaOn5%haK_x@Ar3!3G9wJcCc(o9-3>$~+j$$O)#(U?K> zK*XE71VSpOlB}7B`h&+ozeouseD?m+3y(j|C*L^IDts7uIB40yMa-eh&B*~K!_Le+ zIx<2|Xu>Sz{ricEo4W3ZU>Ik?MvVH`+juTY^%-OWl{nAyYc?<2W##3eszQj$MxJre zJNn(bpQWb$vB*>!c!ntqroZDy0#8b~jNg0kpdE8F6pC=tk%}l(NT)RkeHOrq$h;-*~wo@=hdy;JwY8!GR&!Alc}u zJzu&g&xw&6e=OW--A8g%7^C|;tJHGTiyyusCzv1o`r?B2t$s=shG+ciy9k8fWUzFr zc^x$L?3tNFKs;kT&RUgA*LBv$^4{$MyBcPr9Wm!*HG|Nj^ZR6S7=(NeDE zri25wb^|TPw48pVr=4BoSX3^w(YT~>W8WV&$w$0ubRP)u7sp?bY|vmdgvV*=E2fuX z(3b)I0cFA{alVgQ^?`BtK;^)3%(~zt)&R&FIF#*#=8B@C8sIyC!l}7Rlg%2 zE^dy9)1NRWwN^TNtMJXEquSQ()|XZ;*-{c}dk)!DU9RNqk5{f`keW!8@klx!eqOSA zAL9vM7u4c%qCY>OCpjVCPfjrSXqeAdA&@DTxwhMl<#*HdPo-YA!Hqv&OOzc^uNYh% zQG5TOI@#*M2#=+tc=2X4Tz9*j@^jk^=jSi>|MpAmrdSZg;XgDo!XqFs`SWM+5hhfo z%nS@r=+Z%YR;|hDh^SWo%*{T9nZK>Gsn1`JC(KjU`S0k|`g_QQx2iIi{r!0yMhQ67 z&gNQ(u!7Fi{B)U*!hz0#Ay4?dq2-T)U0U1if7ajNqJF9QIT;JU<#Z66%3bQXV2xnq zo77<>b+^Vy2>bb#rXd8ee8aCA^Yp`Gdg5H9Mf>Ef53tAlr}|4f3pnLIEqWPXeV}&i z)9m>2B|0X?N>(u)(HB|36x&|hd=3+I7^R?&DTTc)l)N}4u5lnju0mL}(JdH-t&OE6 z&}7&@u}e6fG&9?G1!fE%K7FFuxf9Y7u)RPFLdiXG^cUbka2th6YHkU%3X&22{{4%9 z1YoE=Nskp%T{zdSV3ZANfuBjA=99GqVooI==+f-$zeY#jd3|qghCROr*0C?m>)@0? z(tq>S)|7GYCHm<1fP`K{4R`Ne>-jUC2ZSiR2Ua&R-o_I=d2=!+#t!O_=uPF-^INI$ zT{34JX@ryZ*mIjxZ++VgZy3DS#zY`UZ4OfxTGw=Y0KQ-CZa4%>VE_M7nE4 zQx6!*ckw5OqdNh!1sr(WrudG#LeBV}_IUs@X}M{U-x`F!zzYLhK}=nzq$fMcJ3anX zqWJj0^Ygk~cwn4DnY~2$t^)+~@H%Gw-TL;I>=&9e!V_{xrotyedqbEczhe zTPw^=G5iGhI||h_hzZcZbc3e1{`da5Om9H&07wl=JZHZOe!YI~E4wyx^o1Di<^z#* zsgq<(B0VMd6^y~mCa>Dbc0l3`qOGFd7Ih^|?KK*q>$JEcX?dT#>oUk^WQ2f>_hk}Z z{CBrBnyd_u5^gpBee9(~;iJ%y9o0#I8{(=h(NLh5L1teRv%*X>NHqP`-C~%W+azB? zi^RO3$5gfTsuV2Zo|dGInz>~E&7KYO0XreZ4K6`JZ?yI3c7AJMK#ch+3X93Z726fa z{%;zjkeZ$C4M-Z@kn5IZ3mpIIiiJ@g!JiVCg=l57A-jeTn zWBDD$>)R8yXd_$L+e_KcC;pf(J6_Vjth^fBh%^$GL(rSQvou_~vt$>0! zG8E&7`WWdZK%qVvRo*(6S>v_%p}rnmx{&axvuEf}){tPHrwc$16BHsh5=aHiiIHu9 z)|F@@0w9*`dMsps`{^6786NyVq$|-|CNex%!lW!kV)BjO-)VYY%40J!OjI8I@mOb%tPQS z$SN$5kq(hu+)EE6B3k?O>7TtD6c4LzZj`*SPy3$6)U;(W(@d87y`M55IsRybz53E& z?~=4r+{GV`ygVgd64mxUE)Q6+;=DK!S>xfMnS)N zN{`mak8X~ZTL@wJHAp_vtRqtD?XC?5ZWX{ zH0;9(zdMPevW9DW%vk_GqwI#mhX7InU{h&k=J&1m3MzU?X5?LxaM>`tgjg;sI~y3u z1wB2tS&Qo4Bo%K8(=Zy5@2#uv;L-hj%4}oYX(r$x@#M8lB%`ETFzoN_+>IXc!2_b= z1DhzYHc-Zulp4UjrJ|yuk>ojj>9o9s{1uW3g=Ef$yY8*`jW6q3=s$~nR{h*-=;;r! zv!2cT)ml_sGR*!q&530X%H~F$bQyGw5B5qY|GquHC3<}A^5?f%+*!g|X7@Z)T*k!i ziG6)q5ms{O4E_A$@q>rH}|OI^=h-O=so5aUj5Y1zm8p8vht*_f|sWh#VyI>(;WtFg~iKL$J@fi>ts+O zLA^js&8daAfQvbskVuXQiqxFQz(2?_VxXt5o#ZF5yaxRfIx$>cW0UonZ%RBD+nl>WW!pOG3CXiMJg^p#=!d8tf@8B)DooK^Du=kFZaR;iEzWKR|SrT zo|YzejN4qL2s_n|Xs)%TT#%$edO!vW+)JfePn;pe^q7Yc*dgqgEAV&Esho?xfB(<* zjjijiFs4Kz83asF)D(d`4+ssr4_JBLD|5&;Qa*qF9yHc{TuMuWA8$q6p($5X+omQP z#`&>`j3B|{qkM*{r?(ffOFEOxvGo|GziTvG6|CV0inxjXu}3bPKTnVEi8MKk;IZ@e ztMQVFu!EtU51j1F=c}-0b%F;nur4O1)st86GaWJ|KtpfZr$DPwQYBzksT$4Nw)ZE=~Up zNyUz@nbD-eVL+HM%mr4jR~enRHaAcqV&eswh*&zp`UFRP`k5i!VjatF%P+gnJ$T$< zV?`hg8cDnV##!!p@?-!~catwF?+*eSE;^m`I|Zzu9jkHi-eD4a<_wq-j9eqXfA3>t zJO+Chy~b^2Z_)DN&-eXv+C6jFljuSpBM7PjY83hLA&jGl22ygriI!w;)8A%1k5Cr` zr!Haybhoy)7Gnk+KA3xRNk|x6yy%aqAs}awwYA%fY;50JTODy&p~g9IHqzG44tKV^ ztPD{uv_6Bxx#q=c^}RPsuYBPJ5(88i%LwK}m`1ZpI`P1)k4vFE>V`Y#aPvKF=n^SK zj~|EA^*BVWATE6V^vQsOZt%i)IYveTT^D5k3=BiReu3re`|E2Vc$bZD-s}%zK4L=E zBUq~r$DDVU3yG^nK!7{?J*4yia*zb8qN%B`t-W_)7U_CmuYJn^yaS21YWH zi1fv=4W|zj+_(o&WP)rsF+KhHNmHFWz)NJ~AV1t60}&kT5FY{9v$41L#TCR{bTbkr zs~{Q{YaEM5wbln!^_6o?7<;P5B(N|~wI!sX6Fu4|v5kPyrk8^6!ud+!fwg@uCw2kGEdxLXHU0JrNa zy8*IoIaWGgU%X#VB$cDEoE*_Bd}VD7;>ssbx5DKy-~(zAfDzczF<8J0`xeWmnr!ln zr%%-%zxg$B1vyVie!fyZW5R#+9LK&SI;grQ3#QAitzLWCVL3UqaA(1At|&y9ada)U z`X~WkalmiQ9``STcBcrteMki=o6YKX%k%TZZ49SKS(yj)`OM+6?!VdTLeqakIe`Ql zlIVI29tpL#iT1n_U07|vh@OCN_iv1^2wnolGJ2HT%9_BG#CX>`7Ss{YhtbX*24HDK zjP2~7mr8~QNWd3Fx$cw-r0f0DI%n{-@OjIx-DlaH1|a=?1yU!$X7uMzt832#wB-CZ z!J}XT874Y99kEe~T~#%dr-74m;-LVUv%X%DF-#0xvB~;$9VE3wv$DO2l#=){mH&NA z*1(fc58#!Rn_K0#A?5m^7n+dsGwkmoIX+GjNcg58A(afLjX{Bzl_ii{S)+T60v?0- zQYzkY<9r*je-cFU3%XAUPiE+s>#HcK1X+<&T%uR(-kyK(Ax}^<-D#>Jk+S^Ui&0f_ zOVyiIPg1^rC=_hGv$?kSp;4^Y!7Wu&@5Jh-n^K9ciXL1+=Wi(e=_<}0iXF0XZjn3U zFI3O>Bjs1?*cX47DE?US7z!)O-M)esc5C%zmAVGJ(M#^;SPA)lVjWTD5{H8o!y+Q^ zG+F38861Pk1yX2ia5COY>R_M&oPn3}K+#p6eNhm@;x$vXgN=7<^Vd;jnop>VebJBKOIHx)F~|smWGC<7)gXQcf8Uv{E2!odtCSJ{B6_P8e+h zFUH=DVfaI>r5Z!J$cM-dek)NyvYsroukSA4|i>UyOfa| z7V+Nl#rsmZ{$o)m{EyBA=cEWJ@~7>;Jl*iBIjh-=(Mx~eV%74B+1wLLc8c!rJ?qPl zYB(4<&iuK1?BTIbdGF0U+%Jv)I`4hZyIjOeF3q6r!ckF&4BV3NEHx{;XG&>g@ru7i z|8C}eyqEl`;Bt61iC+@pWRTqZTq_-#Lo`S7fEALW$aY3h)B4J+m8Cx9nqK)n)6w4P zlsou%jm6z>-)1t6xp|9V@_=wvjq{IlM(?vH^!U~d*4Dh~UHd7`&2duT7{u9*lMmYoY(h}2 z8C8L>we)!^F6PuU5#HwrS4qpy79T}_+$O!*B^d2kaci9 z>mKS}UYc1lmU;;3M-CR>X}D<}9)6F@KK95fICUi8*}Go8<~I8t9rYNcK6QG?k|i6eGh-rMu}fztC^(yBhTvb?fTY{?>N&lx zm@?Z7s~5$m7^nGzT0Q>!(G*CcVQ-I~<10Gbl3|UoZ)e@HJm0bs_g4z}()D-OiK`FM zKdp4^?`dUKoZ1hs8AtPk-Z&KI=CrnQVodl`<)F{Ucs&*^`oP8?iMolD5(TAkX)LEN zy?q(`@?rZfwQX^fz!wPKL{oisoSIi#rBJx4-zIm=gy#n6V(`ibBLz1CT$;JrSur?L zBNzGK28K+a9+fxANjV9*|WcV8J?^#Bhi4l(+ugh4KTe#tXEw^C3@a*)l?SwVT2?8DA8A z>=Ec$@=5yR)#mESwL<-a>2kQm$Apivjb7V_f^l~3dnA9v?nv~W2c^0%4-QgMrDm06 zg_;79s}{iv|tgMelNug(l?DBk);|iHQ|wXNQMUZjuIEavA-E z1|b1T#YG`#r$HV;B2qno&btv2poJ0RV(Bmmo_^gMl+hzUInwpbwd(Cb? z+jVovZx^0id{V2Vd|2)C^QLjh_3cq_mpvsGle!e^Zo1iB&9ux^*V(sFyE%K=v$uRx zw9ZrCy_-Hy`az-E03qT6B-L;$zIZX}?d7mjKfrNCkwW=go}ISuoP)cvlZWo&)wGc} z1YiFWIU0y1uO-*kIjm=+YxOxYIhQ|2!pOtL+G=!2Ka}&6Z*BO` z+-oluTISr(-}uWHxVSow2cqz8AzQlGWbahfm#QtXHRrHV#-P?0Pqe+0r;k58_GZ7j zgGOG}%Z;!Xd?C#1f1V6uOMln?PIkuxw*r;y-?{xO+Q$wDE*Ab7{*te`lZAudUchwC z(camnXup}GEzx;{aDe1{HEC@jMxo=XO_oF~7z7&>&BW|z#2D+n*;aNM`PYSoH~hU( z2f;B4Td5b{A$moWr*LUEJU;^x!Ofdn{a#R+i3pq%Wi6`BsqIa6n7Tc2{;ZltOyX+6 zuS@T`BRIUIDP&EM1XI>Gy0`nJhI!&A$=BE0 zt7*&k(kpWGacFR8R7LsD{#0<&C>iDd9PcFh!dXX)^7dkmcBhf6z*vWAXa$a@L(dMW zo;v7#aE*kS@7ZfTM-3H&E5MmKv^aog&NpZ*AN@TrUqnoiIm3&{n%cw2*{tx}Sk1{1 z!jTRv2yL0(S#pW*Anbsb0Tfz+htYe6NQ9xdrG)^8c>{O%)e50(Q37yw3Ztcrc)G1`K|6}(pf6V&HUP1BL?;3vEYawsWUf89_ zZX|=FC-#|8#q3f&+Wxy7ccqhm{hB`)Gt_Ox>o&1>kk7Qt@e(R&&_&mWqvSzxy?yF3 zGHs#kM12D1C{)epb1JTZg?{HhZON)>+p%*CBhUa^?kh+Jlv2^Y+um z*L`Oc2Ap&*Jq&-mL-BU4Qh{#qU7?7ee-Rob6vXoQB3c2cSipL|L;tPd(k+w*Ey9H) zEW9}CHPzLLL^D*eAV;H0ag;Ct?-wH2_Ag)H=!hh-cAHIZF0R1%8*@W{X%5nI#>l=r zUyu^}X`igO+BarTF3)co6Sd9i@5NX&DgI~zE&a#JAR(~c8^KLS$EW0*UH}i zWuIVQc0zmAM{|8$;{j3Qqf6zV-W>5ITYrj5oI}RL5pApN4x)jkr6o$|w5Lx27B*(-Tn|m7H-1eOeJlCqpn4)$kxP5CXpnIC zPE(CV9k~ZN|LyiO4#N$95)=Kp=C5leI&xqg?sYlwoPHuS;t)g3u`w%b`CvBwQ2nvb z$MfWm1BnSYBFptzgext6L@qDR46FV~s*u}r;C7Xp|J}FdSaOlVtUe6yaqE!O4%FPw{yw9SCFX;$#3S;B5bBMDbhM+8kf8V7M^E26kU~LVIcH+B z4u^gHJd@X`SYS7Rs2*u)Y4``B0|(FuxtQ4T<7+Z7o_+W}b>DGWqy7t6N1A;P_dL)n z(PSRoouTV^-mNvdb;`5pQglP{_B8S~$MD%Zv3E4@CI`(b3UCW_P-p4f7NB;cmK9Z1 zdlf6iFTFq)@OynLVZCOtd`e#2M~6p1^^aPQz_<3i-B(yuq%ZlSvj6)0dO)(4q2Y`4 z^e+Qu=yCu_EWNgiV|#o={%!cr>DMYJO#AY$)R_6WYuP=Ft-L3*FMP&XKq_m~Zw9Fz z?WXO~^1PfM<*Zq(JUSM}x$kbt9J|7^*rF3dzV9X~+wvhTRE^Snzg=pktF_$ISrllv zPH{xU>&6^6b?{2ozczjKSyiM^#I6IkJ4?E|O1d}aDQ^6o3hwTnTqw*sgbQ2COuVp- zR}sowco@=UX@F zCo^0=Zu>|(l*STNs8?K~SKPnk(K{1g^W|UxMT}n3QpS=-fu~3=kA!ep+Or=86PJus zTAu2vC{ZtNi&u<1bf<^7c~cz8LhXBs`HUifG6G?ZmuYjaM8?GO61SpC~ zoxI4`uO$&1hRgJaj$LAKa&i@}>acCZxrBB&h~AYh2P+O}(P1F-SLzG|3|8fqeN8tW zKlYW2cYbhle2cGL%vGE#NGEJ-x>Hf5HMlI{;XKG=m{UDh`|tA18r-MxR>6V@d$ zr4QA1C~H1=vXHJ{tX6zrj!`!(3$r!J1wDAiAH6Yo!HT_{ z4o%dX^X4fuJ8Zg zWx45-yBT)phne|E$OW}pj5T)LKcD{h4BQk}(su||=6Fq9|D~BwnjPMLT-(9g&s1*l zc&<^7>$P+Cbis;+`X$#Vu6q9c$)%`_%k*OOLOIh9k+RxDfs50#J^0v!ih9S9!@uEV z1@52$$2P*XkW-U+`I*TXN zB~^nyNgCMdy?I;!7Hqs{x1Av!-%AitJ@G67hyh;eq|12(MO!7wp=XQtTo(PYw(+@-SX$m710PaIfw2J0i^FC_^k;3SlZZp$cTL^jZ%bLg3>^ zOj5V{$Q(;fQ5FjRKQPMp*R3q(ds_iNke04`>+Pb6-&OPQQT3kebmFIr zqa>oj+qMToj!SfmN1`7B^MJh`64?Ceq)ec>3sF|K65+tE1=>h=;L0fS;ai6Td-#us zUMQY&0%3_lFp{Kp1$lVDIPsZqN;3dOXJ8;9%83aLcaxLlxw+Fo{Daq4XCd*g1Wf;f zIf*965Lgktwd>6N)}~8A`>pqRj~|FTqpCUyh_m1ac-jPl-#(utLVyLpDlde`11AL0 z0{*D8#dP??(OZypdb@RKEpr0 z*MyYqv33>Yi*OZ!!UDo}$n7q>O5n%7GX86rfN-Ew1q9rov2$k>;C0kKkIRX9g1E}? zzb-s-lCYWHUsPRV%ES1gx_Y20U|0b+e&e`U@i9sS2f^~Y8j2#=NTZj6HUxBgM+x@q zVHB~o=L&N0^+ilTL~F7MEucDBG7Z7i3ZsXV+x{=4CGlrwQ*_uW`ZA3A{6goLV{W^khTg$ z24H9eoRLCS90~%+z(bV)FV8g*b1zWf~q@Jhv&7zPHp)Dv{A00Erwc z3}_i7e~I$`h&)n(stWWO{4?v#qF|E)smD1-$F%@TGMEhj-8(vTXedO-3o&>wEOkgM zE?&^AqO1*D-LTjz(K;|hlH@#QO|~&Mxiv;DuP!1&d_3M`vcU~2r?F8~j|RJTv25?! zl&)F)(#<8WvHKlGA+^ zd$=CnyC(uVA8B9!y%%&dm<7S1_b@_2eSH}e0do_t5K2{W4mLJ6zy*au9zh`(OyIvm zX8K6n$a|P5ZgTRn&=EI+=+^*w3#e<|U+NX3!FPWB)2VSNQbOU$|Lqx%0zxPnu7VRr z^fCkdwW)-6f~y@$VI(PCwy=Oy{`6sCLBR^&HSu`$lAl^-vV%Atcq(8TI^=l*w>V_Szcq>J2GV*RBY%GTsFtACcfDeuxaxgNL(8ONEfwj% zdvz-r^n(f{KLk#}tah_i5_2g4bfB!@i&=k)Q#kzOxE(Wd_}j~cIQ+3(5IOMf{(-ZQ zkDX0DPn4P(8^c~r;thPZ2?3q|PFO|;2B=?YTu;dotKvpQNb**f2mB8N zVMszlON+6Aw;m+BH}v$F=|U5rjJSVatHl%-AK^q#?eY9NAV#nzoI;)2z{7ngl24j0 zf!%r}frRGm^J<1&yNZ2QoW8yBgq9bXQX8@^WWKjnu!s&Ia{=&yeI(=6u_3^vP+vhI5K|&~`7MBfw%N=WExug`7cL{%tq!0%lEhOdoJqN^l$lWiBt*C&a-r$z!L;v?y25|r6qVq zOwOdWo`|~+HA9DF){9lUaX7rgOkK`vL0Lf|wXpCHrngm^uCSlL`$J8Mm{9nrzJkKF zCR|bJ76Vbo3GdC=cc-Z|VB?07FSsWF_hEkn|AFRDpO7vg1<@kNb z%w<#L=i@_4x%N&@7Wtk2K~_PhD}yUj)}5vmc*RycV<%B*p4f3NLJPqX1;hme|}p$EvqGDX>QKR)wK^@d@Uca zNe9(D8zP!ADse$6#u)MFTy1J#2NI)Q*$A~)zz7vEQMh|XMgujIZL|#%7*=Prk9wkNt*U-Fe zz0LF{JvTk~y3xn&AB+TzL}x!$$qqzHCD1EAFQUeOUHcNUc=bs@pl`$X?><0Ep>Aek zU_f-k4L7%a3zPU-qZkcib`LNgRXuo)sl94;1(2(JI~@5ssO2!(#L3OFFJQZtRcL?Yio$$bFsE$sQs`Am!Hu=&(u;D;G!cQm zz!$o~|2cZ}2DWWX4`ey{*a-`?yfCdN8sow+6kJ+xhWyv2PYA{OU7)(EbV5vQe-K67 zmpjN3qP$h-;^u}ZLRh8D&F_5KJg6xqwz^p|I;uBHF*!LIx^rvR@+z5nuB@2j9$E@Q z->t&IF>1em2frmQNTAAh$re1wAoF2M#?n4`=nyM2a|wLg%B9dZ;j2<{9X(nI$DfeK zdwNN3vv2Ey?5Q(CHCX-Tk{C6%s_fn_OK&m$rEFLWDJq)Bc(*Zv^?;zDG)CVuVI->* zOo%T+TYvWSX|ABjsVNMoM4U&}%cVL(cp1acA$DAHAxn0yySc4H*ABk~d;}@Gh@H0_aM@{N)P0w-jMhX!(8aTYqmy^ zsn8l48Q%ph+6Q)CJWy(C**5QiB|Q={d;p6Z$;aO|ELe%G5zZoK1Y+~OT29h zdF>~fZHmh6R6QBoj4vvx_f_9uedD-5%T9;sJ_j@N5?XQvvViJ3cAP5$LP8N?VM9m< zr-H*Y8w<;M&fUL?Qeo#ZJ~%kLGH-+U>CsVZ>xFbtC+jjUkAzRM)P0C^8crlV~P{v+KsM_m=B6GkQXG|?WJ_|Xi zg7Wx4*k=p~zOn-IHC1Jd<=&J*?fW%mk{&EhWQ!JEd{=c)SG+t z9SHvwv$3|hO7i zCjc=Ck^Zr?`w_t(q(WE;i|L`YcLg6|0ipOInO9L$1M7*Hj`VwrddCiot1%?Rur_nA z5?tj7t^Yn{c=>)WO>`CTj2|fZDclP{C&E?$9tdK*%3r@;SzT3CQ7M$-Cce32 zV$Ig(8jg5~2EjonEGYr)rq~pQU79$_a9CaPz)zi#_*b!m(E#(bQKX8X6ab|I-Q)k> zCOse^;1=ah0e=3$KYzh9xngGrije}6n>ufxVKd+RwGLKbU%y~L0$uHs_;^ovuAw4Q zB>M2dprZ}ZUX7goL>`f}^csqHuvt*mVZQ=gl|zSGfzTVkfOby^T~W|IRDa+_fQALP z#bCwMY-i8_^@9F&@<%S{=mgQjuj7!bHq`AhGT&QTT0Vb144)Tlu{lUlAP^G%;V$8i zYl%Y!g85;P!tr#&B7yt9vLMPLl*|2PH!LvzZdoDTg8(@qi7|2;wNNdIz?Zi9X?_Fh zg#W4v3q4BmGc@CSzXxy_$Fn)xFxBrU)cB;H0+M!G+8k7Gcx*~-&`nf;9D?FV|1rCa{n%YD-Ta59|0`Zs2F&E9;{s7V+QP|1^K*zxUCzqv2f;8jrX8 zBE6}(si}7OPnG+`)D-luy88N}BZ|Mi+Ea*J_R^^t+{s1=xI%0l^uZDX#Ummz62`uq z&@V%XgN6i8uOY`C!mZjJ8{UF9_gv1@e2*}<)cdZ>O_%=fpFH)2fk8Cv&4Z70q*0Af zzk$|)y+{1`aTEjhm3e?xaNp<0S2%E>AuhY%QYmXK)r8hYpu8=CV9jRePeMY7&^0o` zX{&`FL8FTm?cJ7k`rqc73!dCd{eZ*j|DA8UDn%YIP-dr-9H3sHb*PQZ{SHDeZUEI8j69zlv$_LmNJ@%1hFloL5*;DAxnUWIah@zrpX8d>trH5%%6oIf#9Gs_ zGXK#9b1>$G>Kha?JT`b>fcTW1!(;@LRtJZ?fPj-TRZz4+a=EfFp`ARRiX}bBgPk09 zB!ClMgoK=FaY9{yzYn|vDNz_~1#)2&L?Ar5!&Lo<$R^&}COtY{k=k85r0?4eCNE=P{e&ehGt7q#}~_ zw>V-frfXvI1g#TxT-2v{ACSCTCQ}G|ux%E;dNnQT9ZU~s*ADm!Kfk$?4n9vD;@|H8 zx;x_C866qfjQud4l@Y&R0)kMjIIs|Lhwl=&PSD&yvV;@S86-Cdu{x?yxPt{tq+R}< zz2xFj3?&#Wd7yBfo&}z=2}}h7I|<)MF@^J)IOn8xyK@r z2813Or#W&cz>)zUFpypfEH1PJ*o?B%$=LDepF4f}SxprXQF2mnYIWZhf&7i1xN~;2wWUTCnp7Xc}K^`L11Z`949m)Mjbot%=H;~?c-cWn%{rd zISY(Mkj=10j*dBDWn$G4ks%oPi;KsC=k_@;COH|&hl)?;$a+w%Yvy1lz_Mf^~L5A5ou|cVf6uOayHon#PC1w>=wk`Fu*<@ zz*I{mRJ#wDkP6R(>};3C0sx~fKM^*AV;>D0oIN@iW%g-qEX|<#M;$gXuLvFi zwhr`(E>2F98&>x#D}7W|w=3EP>|!y#7ZU^1AyJ=B>X4YCB4<#l6BGNOy}}M``xDJA zG}DNPUznT24Ys%x^#7=O4|uHGH*EY)cI(!VofXPRRz^k?l2NiUq9G$8lCsNPl9ZNJ zRw{dxl~G6{TUKO*WR;P<-{af!`@jFsdw-tKZ#>HV9oKbU$9bH`d7OX(yI}*MZG5x* zES_R0@OW5QMYcF*+Tj!7CVhe;>)Ngat6D6w8Ie*@;2S@~lLEFveuEotn*n=_kNaJg z<+!Cv7zYBToZ1TChR1-0nE~LQvFo{_l{_4PGHJ%Tq*V2liCZD_zaR3u@D zOql!v>vZ^WpL4s1yV-%cgmoiiQkga=kNTEZ@XR>MzjdlV4#O3_XQkj92Xyip%=Zr! zXV=Z&)bM37YspNi%|~Mabv?(o!kuwtQTozjZ2=4~9dW%wG!!pfIa4nW{0hMlJ}5MQ zFK`p~?_Njh1Q*haFohR|H@}KX*~N<~&!0cf$(ezm7JslBn}+0PhLj{zp1MRFEJf<( zI49(k4Naidq0aGBBnN(4Wj20Y7v3;Pm()oR;DWlbMJXKG=ZOwnn zjg_&qxt}$AbXD|#D-RcM>hcxlv$d7Ml$L&2qB!Gib7HjUuTKCPew@HYnRGZf(7TP) zj^G&`!@$wR#htOW9fGLKGgKMkzH zFg5Bpi8MADf8fRX0cn!WjemGs?kVUjBco7QECN19Xpd!WekL}#5#LPUj&J_ZyTc|0 zQCeC`NchTkH)hv-fj=MJ1tn1hbcKMf1}-)I3Sg}tMl!6zX$K-JFi z;{|5@X+nxxT|Jub2jwX~^E`;@@O>~TxH3#|rj^@uz3-2LK^K2?<`gH1)H8~64QC3N zF3f|%`iaJ+JbI*$ktM2?&CLXf2VMb7;p*kf0M?jWT7#yK z-%_c?_x2DITj`B;Bv~fpHP0eoH~fc5RUR@^B))&fONf3uv1MG7hvRJY>Fp0HAi++X zyTQ!N>|eo1YI`PS_Z2Am6bg+buME%|Alw6P-^PzosQXe~4f6nKtl*MEM?-@J9*_0_ zJQQR^-{C{&dy&8PrxZvP33aIHu<^nd)7b#BfhXz!o zG1+OUb2m4)c&9N@fDyvB#VQg}N14gKS;$CZoq7RS1kl7tQ?VdTP;$0LT{*`25y6;I5<0i|A*{1&lxS z78hqOqTglPRuj|}MOYWgsn=%DTe4fM zFe47~V`3C2j^2^xJxC!mtuD*JEwZ~?mz!+DS*a|vy$VcM7i{azJ;DP9m182<+1L>N zFi$&T2PfZ54QEK*L++;~t?Dip@BjQpB02mgQM`?*z(Z)0r%TVWZRABWXW8d|ekE9Hqa!0^RkZj8P&4mD>n|)i&R@Is z4*kOQfAK|V2XsIg;?=8LhHut=E=};!M)g}rSeP(!#5su(YoW=j@Ta?SWg1Hyh{A-Oi<9xz zO|m^^!)DyXoM)gMFqXh6NH)MUd3halGZGO`L;_@%=O}9V;dudEfJ}{yUZX`}-#$Ij zFPNRZXU}D4XDf?)Yv5SMFiZ9p89CC2Ym%b4Du6i0}Zc76iwpd&}rx+PFFkU9~g-O#SscBu|KY2!9V0a_Vn{B8+1R z5CSXY7^hgwoIr=s$E|zuv40X7189#^7~M=Ta$mnLntj_mZDejvR0}(P1?}92I$C4a zM|jO7$;C4rIey$3Cd|kP5$T&B;TWr`ti+_jH!|YLsB|a(0OtFhF-92y1PN-Q@Est4 zxq?ELJa35>6uH_0TaL%&tY>wNMA;o= zhUr#J)jAH_F!`gcnv##qT=^?#NmhJB6CJ5U99>n|h8Sy!{Qg_E-ASnb&u92SXF=N5 zgT6E9HeMwpNJ{dHbHM0==#u^}jLI-LKP7kXg}>!BH4ZqDutYH1f~adkWs2Q)Hz=qr z&CJHZ0nz{Cge|z?eZ|XLw{4pu$V1`cYm+y%1yFJnKe$nRs{z);KOG_J%<$#Ww6KU; zT;^7_MZBI^<_4e5xV(Z`EN%`iG7D@b%EWcy`}r`=8-owgaCDCzN0l;iJ%A$Al>*CG zmn=-t#sgz3z*A3Vs@dH>Qb59>W#JptC)tF<7`QMrb2F;+~OgQCpZbk+Y=WG1imIgzrxLSLQp&AV6JULjoLmCZs2Ru-Wt%K?+X<{UV?X2z9yZ;71)k zIum5I_*%qYZ{(0T{qVSeixF6mUZVWH$(cJsTTDoZynQ=|qK8xtKR`X+nYnpqY3U6k zdi9%lk8bc$1eQan0fWFPZEt`thUx{fU{o6WMn-U=HV)o^IRk#Y5|vv}5UIkw@nj9) z25u6cD+5R>@F}~}c<5o>!*JK;2^|A|Uf#2|w(|qkJ53q7USo%XX%M&YuB4~Fi6Jpa zFU3w5RVGrmHki8F(yiM1yQt``CppW!Lz_G|>kih^>!s%zS%Wg$rQ2g7m89KeHcT;A zZ>Ykw6{k3>GtkeImGwV}Q(GOLoSWNqCGxwHlkxMYC=}8WUde>l7H)`TqdICQ5C!2t zM)Tv{`}d9X_1W%+uOrf$nY`xMn3xz?jEw(<*91&iP`0Kt;DLj5K`_QUPJ8_tuVE*d z91Q-`|G9C?bg`e-AHww zZ^BZaj*E-uDdJxKT6hetGrJ>?jdYBjr?EaTg>= zCfHH1vqi`FYvCTWs6N#EpV9-68t!%&@&S8CVyS}R#W->_Ds8T4*0ib=(1|3BQ8A<( zc^ou@h^63r?LFjiNFjjN$7ATDUfgj6fzH-e0TB`HD4#?Kbl$u<0e22?2}CA3@||R! z8Xw<}qY<)XYl74u0aTUvS{q$B?cu&>@?4+D!YSYIhS( z@9n)?Fg>R4YBQyu_Dbot($?jb^yRK5+qg#G+WFD3!NLvWV(86xpW9z1ktRYi2Va3$ zR`vDkRvt`HX#)Usbpq{L;>y3jQ!_e)()9-(aHt&vaVw$g^M(pM$IWu=cSLAoBZ0>r zwhJCCUtTsasWu#-Rhz5+p0MuMAEXe`GM8XQ(8R*ld|dp} zS?*8Kn^qKETwM_tJ;Oi}z$zI>EhPlQB77gPO1L@-K=q8p1K>poLG2Zo05v%Px_bL- z2fHCl14~5@6EYHu1j;9la|MetCQy`R)CCooX6NdQqf};dVSZ&zZfUz zVT&rsaha+_5uN?}k$fT8IJUnnuc#O-xv?I^S*(%{QOraWY;AjcM8u@?$jVR6*o+Kc z6hIJmk;cRD03-p(KrT5K%Hffv+>@4;YnU1gY=)x?m0{3%@ZNZibQP;!bqKs-^G@yc z-sh}PQSom*^SfEKjGAq6P$xp-)r%K5)5$^QK4?_~;Rt?=pLTXLo7q~sThAf}!ts?FhL)ovXPD23eG%(;(P7W) zU8A^>G_Q*b!KrMHI@+xbJHgmt;1(hvnp>BUSwMT?>FEi$V^l%Uq7L>2l0#{N?9e0%bVf-DHt@T;XB`K^x-AM$U-7~Cu;8hJ*aZ)$7_$o19vVQ#r|y^I_x!6yOaY4^ zJf$TimG)0!jiI6iFllqT)9PAhfm;fYy-i?z{5kA1Fp+3j4uyPbI{K4^rKK{i3Lrp} zAE?JaAixIU89){R2=591iEU<6XGZGjM>8|HZ3GR%MI97DO3Em5bx_lEiW8o@)YSQ)E}UB?Ih>su43jdJlqo#zu`FOc_-?4%xcs1k2w!tr=^K< zb92Mu98U^8Ik4gB`*>l|F&;z0&`rvgJzx8{zYati_K11Jf#m&ug z49{T_QdgWe;uV{3H{yW0?Ikk3Dc8T$3WpRvn>pp5;Hc*0L_fMN|5k(z+!Oc|k6nbK z*Q)d;f_Hty`X(*jPlp~mBjr604Jb;iP#l3L1_=S)di@@Zt`HXP9~?yG0E*da)K5M3 zy(S|EH_1i(HRsW1{W z*eoY030{uDq~(~H9v~L{)Kg4~;hXV)vw_7d3NY>!07McJ86yp;5b!PFJ5ZrRF$3Wo zYZovQ4N53Q&D1=5{N+3y9UUOrSz&yvL%RfS6jnaqu~#=Cx`aM?VxI2;YyK1@ z@5rw~oiXp+iG+g!9v%~%kd2+}UdN)2E*#+XLS*~+6NqVvw-9iUyQ9exZN1}DP#`;` zy?-AiPX&}~23j3S6Et(hRfxsNA;2@$+#_#{L3#u0eWnK$@M`8#xGKWU?WZl!q_|5S zvPTp+vi7P*E-!mwi@@Un4W6I~^YZehCMOZ6kEp5=P8N#WOi)C`zJL|8$UP`G-Z6q= z8yp%M)0__>FN?`$h>h{0#^ezz2MBk_&w&iQzo+R+E|i{GPkUt3>4 z?%IX~6jWr=Xc9cp^o{p#+p(hyO*B|^XKwRtMsAM70NKkhrsJF~XGBvc$7ZC@`lhDn zBI(DYxbEqRisk#c8(0QR5!yZ|&ceF}up2$Vsi(4lO3q-uU46as#0_L|Ho6o)22@*V zqjI&Omy|2rSW{6^0n}b!|DfP#)Qb%PW%x4idFSvRvLnH9hCF^e>YA<&yj8XidwZLg z?K1h%P8aF5WHcVWGClU^$?t1#{P(#?dA+1r48O)ga>Q0dgC=PQyxoutC(9l<)RAq_$Qx ze$;AHX~?tJ#WCo&nZm;A@9V?i2NaWm-UOsLT?0RU5QD5ySV7#QkZ-9T)zpOdTYkom{-xrQH>4@EebGi-kvIU6>LI9s?O4|u&(Ta${uw7-ioF9Q3yvS~4uUlW zd3nOM8p{S6E>IH!0?fO1>FHQulntbQrBnVmxU@l|It;ru4OU+dQ=3wI8d$|;%GJx< z>-CN)n^tnm?Ao`&scS-QYra3)zE#MFp074)*J9rh_w+Hd=;4k=)zKs;JGn)Jj=A@b zAM3uVYgA{yo2`|Ut#Ip!15aVYz0#WT2Xe&=^O_LJe=drCuo|8}_D9;aM{4S-MO$!; z2uT7X+d=xl%&j&;GGTS@F-}D2*ZPN$A$!@iXP#M)5mhe+FiiT=Lsn`v4UL3APa25c zAJtxfVS-e__O{!$3&=o_-=F|ApSFW7>XSE$HK;g7$+-$Rz0JaJC(JFv!&A-kB@`9A z{;L99ieT$t3@RrEt6-2kGzZs3A=w2jW%l+wgW-x0yU^afFB)wTAR%3gM!A|O2J1$3 z6uLX%gU-|w@#>gsdCPqP9yAbHO7GX_B9TlvKV0w^O6qSdzfi%Yrxa}xGSpb!|F!bi zh2#qc0aSjU!9QIB6N7fS($Z28Oo(&<8$^1D@kJ+2$Uz$v5TFsyj`e^zijQ<76>lvn zzTYy>AUSe#cRwI03G;bKk1?VIXapHP3TMxhyup3Xwz2nhkVS);6C(TZNPsOtY78nu z*gpp>gS`c+oD=p$Nd8)@>2IDiFpzTjS&69i?%g{CE(p&Hkpc?}4uZ(RDM7gB;}N#7 zqH}>YtQwjHl&1wKXcd4t8li|q=1&R17RPZ;JlJpFSo-PKk*K%Oh>$m3H@wc1#3Oi8 zcVzF-V)zneIN~K5jgOtVC6zI0gH(tLm%nPpTfKr zL{4N)#W{xHm$=pRQ*doysB?3Xl7}fbG3udU04!F_b+&!;mC@EeIKV+*%*@T%NJK1O zWeY~7J|C?@D5FXh@T6~2)kIMn`vYey@Nvgz*dRppi^i)BacX!n2&Ma>d0;$wLeuK8 zbIx#P1r7)h${##tk`G=g-j%V=1?<xmaA;9=dsEw``sYJIOWY-^C) zUf&&vUL%B5yvF4#yO?>v9OmKtxh(q}e*lUWnP+KWjWROomu7{2eQ>*k`DM^GuEI)O ziY*Pn0xKMfdD}2wnloALfX2%SxNQpg^4PVO%>unp9|r+=1qZJbxW0mF0hIx0t3Vm$ z0M=;rO-`;F;|$Hp&it{9K4C= z&@A{Xp;&*7@hC%MNYjMGl)S|Jotsyd7L4NK;x6Mc04AK|q*ftwDS3SxO7J>$svTGs zh8O)73ZN#DNumY;j3Z@LLXvqF6&^mny5f0yW&~+7Xz2ao;<54N4cW>|-AYA(C z+X`i#C8`%lcyN73FUcgQn&qYA2t)s!KA4AyU8#e4FxTf!W13+EGD8G{2yKBV-2~Yy?B6g)t4UPIDv%jx5{9z&I)5;n#@V** zkw*hEL$qAs-9wTL)(@7Gc~+%Vt6#w*H4RS#B-2t;A7|N0QaKpsNAvMT$f;}cf2IR} zZe#q)*!`g$7kMqb{gJgUC-Q>~Jx|fdjt4N$2q+^i&!Ave>kprY!S+`| z96UMYgzM1E0)PyyJna^)&LKurgmN(!&mr;iCa#0?Pypd+de2V~j`}F^z*1oT7;+52 zM4SsUSTu}kRHQqC+cW*nntyyB$>GAf`THDXmhdXD`~cFy zL)#wj`2zfQ|9(1#tmNg5cNHFx&VQzZ@phO$+h*yjh*Ta?V`SgiHzq`R26Y`6kab4} zObec$)pP6swS)uE=i)E|>W9Jr9CT2sju*Lh#HrE2#RslAz@TUbMod6|wcYnIV#rmp{j~ zq*x_UWiUwPCld!k2G1QV{R%FbIE@sSY>ExDH=u8y5<)x2v0WIIUKmtDbBL#A<`!(} zvv6eN29w%i8N6uF1XuCqa<|M(L5nSqlMX{dFv<@1o7_*IgfsvH8XyZo7OtVIJBIuS z2?a5rO;{N9aRhQh9LuLfTJhkB=1MSd-9}KZAfp^@PI`=jH5ilvx6zR;uG@6+=!2{6NE01|h!9)iY#01ji(WRRo**+9~tdo~jo53Oj}OAuOT zR=?<(_3B`NjBA zF&~e;X|aE9%$&xKhAr-o`!}cf8Ob^4btE2lOvwVbvM7q1#?)bY28Lc=-d%DoFIjZ^ z>YlyPd`@>1R(J$CgE)yRcqJd?Z1*eYVOZD!EK6J~3V00sZF(=7hQTbc?mv4NLm)$V z)DrLW-2-6?=L=MEkR8A`hn@$F6Tl2oKIC#(fX@Iu#*^QnRE8IX)pc#|lL^Kn0tgb4 z!61MGlxrxT~+%`Z^Ax6oeoE@S48V41M4S^8^skj6SXS!hT^*8S8MlMGQV%uZy3=W*F3W~&ZX~DAZ|l_Cyw*` zb0z2r!on^(!2erU#uPG+fNmCj*gh^sCDTH-L;t0=b~gpQ!3Up}NaY`ns1Jhe z#P%;T`$UhiS;^=@g#8qP+iB^5^0QwmE9t*{`jbWswuAvD)MmkA1I8KjJSYZJLU6sR zl_1yfGB8@u=^^SSU??3SpT0|zigHN#=g&CY-!&>lFAIlg7#kl@Qi`6t_UR52u6?X6 zqX*S^Q(-){`qDuLa<-^mUSd`9*yV3(d{W6-WL5f<(45io^q}FLP09(+#I?;gTC8TY ztu?-)zO0cjJ$+>z2Tez1XoA^imf#5M$?=U$miEQ68nQi{zB_5)Xk}Bc&v{4_B_Mc> zJy-Jf09|ch6Q_-=0kILTrk9fa>BGiPvpdLmVxFM6*c>7%T%Vboi(>po47Xtc$wHy< zYhx5v+|ATf2XJi+Jb0Wq$xzbh-}k2}p&s}CUEDTE5!^jO@{C|{im%4aT+lUZIH1uf zaKLsAD&mU!Y0Jg4$X#({KRX$Yf(l)l!X~ zRmtm`s}VRd)-@`y>4=Yf6e|G*Qmnb>Qal}fesW~;<2{0N9pgJ5jTkbdd>XrHan*YE zA&-WVhxbM{jwdIdo^z{9rWmTaNs+IPS#*~51Wd)KTOW2a9Jc=`&O;Hu7@@Zz=5^>R zmoLS;WWK$Lz#l=rI9Dg}D+zhay3do0f@slJlI{7$xLlL>qIL+4(AQ(KIoO zZ|CA{jO#PZ66?fdk)-nbrx>lXNOM4OWxaXR z>ynSPhtv-`cLR;}ccm|1O0_IrML!l2`rh8PwCFi7@1?cFDhA>aH3)~a)-IgW|=MKpgF4t8k6#j9~ zvOo2~-AhkCnj=*qJg=iov@aftd;}o?3*-e+U@sAJU%vc_y8s)H8ARi~y>IMW_M(cA zd`=(Tc4u)3P^TfY*Vfd;Y&FEAB00x-DJdzOtchCm26lZNRuU1Qcd`5MS)KvRJ6^K& z#1(l94BJ9kBG3)q*0r8w$mww+K`{<$QcfeLAPIS z;hXhQy2`*B|JC+jHc=(qhr+*k;nlPq4|rkNn4BC5k?^!VBxa~7LnbPTBrr#uFCHjTR{az;B_=4;3#M0WoLInAR^4gMvBde^`oI0XzO~wR6~yLIL?$+ zdAvRI&^f_Zx(icNtW&I_opNQxuRIg!)Yxu4^xQeOk}E}W#DM02vT@MpH3 z=OS|jpJsn&cW$W(Q~-`G85dku1Hspo28yl*CR#Ao2=GZX0E@e$f|tP8Y1`1=6k0Ca3XXm6mC=9 zdvWj6muoiSl~{Cq($a3gfjyD0+b|;*Brka2Ke>Jbdi1}x+)(fBAk)<<5RHkb{~{0k zG55)i>RBylYkmsmdZO727g&H4tLO-@A*KoT=~0vU<)eIn2kj-%twRhT#yUWcGpY*M z+;%hR>VSe1)6>wky+q@A+c69Z#SBDb%(rO=t0Ch$dUTJBOe>~mkU{lgn7u62KWpiY zecM2!wga%EV1k}XD8FS)kW^x%tRWQfoSZ8&UtiPrJf$W5VG+1Y_eQ4s+H$VVcQ&c9 zYq{rACrz~e`q@5w{D}RM?BegjEG&_8!JoIPPCuQ_N_m@NpFBV6)y1m>tOEt@avGtX zIiJ;D^z6=h(wziU4w2~B69k;fNBo4W3LEsr;U+1>O7hRhu`TpHZL!$yr{|^5~+iavV0Q*1~ z|6N}Kh-`FCfEQ=tIp6-4aHr|bj zb+|y7z}n>E1LGqZFDee7SK9zJB?Z)TI%o@b*lB%AmpiAhzP^>r&} z>L8pv@|HU5f7g$=jI>6!TIL;(GF5>oM!+U^83@9$zi|p8kRS*NJdQw`9undV8WREF z;>8WsqR=^0>seS3Y94^_VL&&?bwJgFas-$87dbkf3jFu4{OK^%&=5q=2+|SgZC%~n z2QR(DRsmu_XF29YV!n2&$(xT58g#Vr*5GxrEx$jEMQz4OF>^$?gz^CI_ZsA(h^h#b z&!eIkco0BEL`C1@n~<_C2;+1aMUF`!Bhbn`dk-ptImr6rMRus?g@wNtlomkV32|g3JSf$RNS*GsE|9 z@z)hFt; z*#)zeZBfs(Slx1r!JPf<3&p6RUGmjPDDW3SPoenowV@$1Cr4URvfo)2Sq5f->sedx z_AkxE++WG1nD0NJn%x869uQ)_YpboTo7SXw9l}_j)uIh=ydloNTo$5oJZ~Ugc-r>Ao0b%1J4C;@WD-C>9`N0 zsqso!7UU_2nJvD83_Pe*;V=b2+D;4FP405vVJj=El@I64#SRDv&?@GWs52~#j)>Et zjFl~l`$khXGGjDYL;qnuKR&aW)KCXO-vjmoVtjn@KIb4%Mdn4bEf$S9$W;vu*P@st z04V@HQHmj^vH;pb+`;zA-w6m}YIgR1U|>>D_@hS>?qlZ3ypym^ft{dsq*P$}*-3T? zeF^tQZczaFL+c=zB#~kjPaZ!GrDPL^^Iki7drAb3V>m}{GNALu!puy;wt?HH8f7>P zX~0l144>+Ra_o>l?d0n-H-BMLInf0NNx*_AB%#ZH2aZA7cPoh=&ursxOG+DsVcWGi zUTzBJwXa~50aYQvIF|8`p_B8+;A>kus@suNBtMd@f_W{`LZbC>x4?Un#gtA{F##dr5r+L&oGU|HfykA1106JR~>A-|Q$9O#$y1|)3 zr4!a5ii_-t{f$__zys(ulkkz6G;b$_!s@c$h1O>s?al1UHt1ADq|nL8g3hmdP6(~5 z7jY_uf!%|-`}8z4g9Pym9huc;I0t;XkcDtzZ*5&Z;DQ=jy_GnI0erT+0g-FIc`3zi z7w9lN6XXz3?5W@9hyWmtjuxAj%VgU@Cda~@#;U{*Cq26Ke|HtOm6iFA949q!0fdl9 zmu}Wx5aj3Aj*>UTiEd_j40I07b4HTN^G$40Ly%-aCf{A?o)HlNLG==~YbR>(@1W6v z@12|+BvNR@MJD{9hbQP?&Jq{L6E6PeHquihHFJNy@7%r}Nem%X?bT)TBS_7){XhEdc8CFP0!?egosT6!S2VNc1LGu1KxDK@J3hmnNnc z%m%myqAUaVOq3s>0ayt7=5Q6322f*B$7pTm#AqoEjet25U0p}$YgPZYqVL`lmQ~9M zsLX>(+5T&t-z*)C2&oEvjJ<$3khxpojq(`|XFt@-NDZ%@cdC*YUnV3VO}Yj|L)`1N zN#2&rq>j75IIuJTrIffCsu2TtEag9a+5*1`YMDz1u}PJ&Q0UnL%FyzE7dmq+iux#p z1H|6iwl13oOKnx>H3=Lnd~_gjAs!}JN8gp1omF^x6WflLP?59e=da-`K9zL=4q^q_ z*-u7fNvdfQk2|M$G&cSnTL`JrPHyrOFU{fEe0Wl1Cx3{Lr_0Aok*etJ{KuozZ87R$ z1x5_$8b*zA1G7kGZmwgYMC+O|&DKBt+kf1pBK-h`uhM`9FSNaZfp`N|AfO{ixf44_Q`uhc@qekUo2nQjKbx?QcW8eZ!29pGk38P%Mm}-Qc zS+o``QIm`QK3P**ou`PiaE!cNPTZQjKHK%3%%>Yd(F5CVudPfu>%6i(&nyn|0+I(% zG$29H>DXW^by^{)-2UmxRF&d##S0%s%Ie*Z`=m%@j_sKwY8@>tdw>amT?!cmW&nRw zSh79VZHV#dJmJ>s?hBM$>=>^AjXebD5J0>5$}s1A6dxQoN7_=bCcJfnUmO z^=lY;A8KpD#GIg2c6a*pF*i1{!2j;*gF;~TRvwC`@WT%ZNxFPeh&~{CS^?BBngk^1 z0N?^L(n}}a^R6k7Hvnpp65Y^31XS964qyyiYH>Jigcp!2lZc@Q-}##V3fPyaMxX6Iv-x-#&Uf!#?oxr_r2+_rV2O!=%GB zeBp=O&=5m>{C3@@V!jjJwmX9}oAZO?u2^aAB>tll*Z=z|DK_oQW)brKM^azZ2QMZt zv0Y>cdUN=W2h0BDJ)5%ptNfv>BR<)@+cQ-@T`?Z_!GmyK>D|;ZKF~Gl{bKIV<-9#d zXQZnJbt-HR;SZ9zv;|zzDO^;6y*U%JRTUIM3aXYTr0}y%z%O?u_s_LYpKs#sI^^=m zW%=_+!3dbPnqirQz)d&EH$9mUqWpfqq-=V$Z5+yrJ1Q10O-u)^gV=av^j{=58t|3@yfEQ|t(ATKOmmO#!p!-|m;RrX0vV2XNvFY(TlHWUY zhCBmRjubx!HFt zY<;QqdJ=aezQHzT;*0it7aDF++Je}IXxZ(|&jJ|&H6E^=;6NcALBC`2dPX)e(|Kk< zYAQifj&JSlpq4Izm`0x|P`PEc?TKTvw=dF?R8k2np%M)H60~t(`e#(n3-oBCfeiSK z5Z`{!t*xuO|B-M(NxM~k7K0o9#t?QtIA87r2czR)d+_YI#mnIbycb9sR@@39!(4j<012f4NeyrO4$!6_ z6%^3QS0co zam~M7*K_ltn)Z*wd4kC0A@;cBz1>_Ai;Nvm=O&OvF&_Qjf^M{o22d!me!Fj@(vB)R z>`@81T1FV$#ZcPoz;H}|!igCldY-KYbR@C@=(6P-=kUGy`iXo&e842Aw244o2w^|c zp5<8(p?L1VYT1E}xBmOPeY8E#*9n2!VTULYKAy?`Bx!W~L_|d?qByfd*ocLd6$B|WIDGa6tQFf9RJ+YQ;g#z_&)bV zzRBy8@qFz0bRm8@Z4VyduY;t`NJ>KEF1pYYi-k~JR#Ni8Z=PYt58=Cw1&$2oNpy7G zccPIPObD8d&?=N^)xRNW)+0xy8Vn8I&qTa)Exyp0_`-8Q*`Pvk)lA=*`ltGAI>VXd z1yP|*CSnf}WKK)|BDiBotg6jed=OGy{Rp=KEzT-)~Nv49R6 zI$plhAfn+z<_TYqrGx#6Y}pzDMZ6QM`;{rDZ^_<1ZuZ_j1Dbq@31rcKjRXO23uKMO zdykgJMx+xDdb(zjVWSDcGEZ>#ZYX{7H+{r%#^(+f0V?3Yfp%6k2t|lDjNpMY$s8R? zuQd(>?xQ>C!^@ZFQHOxU6Z|dFw}Cw@e`QDk8;sn#ftk>;dj@mC zfL~$!2_YL24L95nP(+^h)qnR%V#3zFlOsr@*O{KLbKsfJmCDAty-|{TC3N{?GPmR@ zk9&2SHWdVKMjt(R|BBqkI`;Yek*D|X>q7ryClv{^O9(udriZ6oHGKd63`AQIkbnIp zF;(bwK$$?#cu-MsAsEjG7X%dq7vLc>#K>=*Wo2rR2DLej;#Ckl2>OhpqfdXQL$@$K ziYKwrP{63%l;nSxUd5#t;Dx}9>95RK_ONaU>YLGhP(DjQ!B&Dp}Q&~9# zK0gsShWIoG0LpymQ~LbnSal&=p^UBj=YGJ}G3e zFm@J}YhYkdB7l4e3P=oQ2m1!i9-0Qx0bNpFJ^*_aWJuN$5qMd+G^{zSc_fukwcadh z=QTuu6lM>IsBJ-D)2ywm(8Fj_ynpv@YXH6(Gg~QBkR#CB!~O|fvkW{S5rmCWZJW?! zOni9P;c&OakcpnXV?`4_z3QE&?|g47$KUb<-~9GsYdUkCC*dHAiuYDk9Hu51F^O#r z^&-v=Fm`x1a4&G^DtKDfJ0URjcZQgp*V5LuHkwh~nr^|)!QllFGeYSsGDWx34;w~1 zaz^u*kyJ|Cq7)&*JUS|k-Jwh0D+=|VU5nqpt0KKXy@6~g#THyWAX8vl*CI!&MLQ)r zxHetKT6*toyS4KB>(v(3MY*y*ljQe2pQ}DAzgd8^474|LWHmK41|BTr_fP^MiDV#3 z&QQdn4!o(fCjLwUCfcSMJssz`grreLUX$R?~y4E1bY?Q!jtAH~nH z8!)_z7oDfr*|qJk4M@S=0Rl)sa(G1=x>HCP;dPkf1Jf>iY}-1l4XG6~RXT_FjBv7C z^BdWIN%N7wb%&w-$hb;AmE?H0>2oG@G1Ak6UJl2MB0MQPz7K^yXU@dIGAfVI0RWj} zvu4|?|949#b{}%XuXeq%XECDJMl8W{b*eVTz{W1mRtlP-06fXm7cag(pDDaDjKSX@ zq+MIFg3;#=3~VON_wRT3C8}-_A-##^Nnn!UbvXQqo|7huiIy+%ev{G{xN2O#F71kb zxTl~|YGag%t|~latj}e+OwU&u&}x^J3xWqzx&JPz;8SI z31^U^POO*#b{kG12++}&Yjxqmukmpw2ZtK7E5ITU=&-Z0N()&rse&=UhnfqZ6d#pO zR+~jgenvz;Bnn(;E=T5y{x!^T1MUJae!wPOg@LXJHHfuKah&k-1(bak{PllWfO#4~ z-!=)#6(CsDJ$<1-05cMaR*x;{L&e_%Uj^}Y2WZF9G$>^NKM}U7FJyr$!Q<{pIw`nH zWHAW#>PL<+j9LG8Z}h_dK!&(@=ArsX(DwjIC!W%ojv+TjB!e=fC;`VN#DZvE2A;hG z*U!A%$bW=z9$~jCD(Vfz57b-uSJyl|823v5`@MdZ(5|R70IGp%yZ!+42=G6_&?N>_ zi+(yUf$}%v)Pg8MTQm*p7-T>I4?A!a0&(}p=po>PbdGQVL0BW~XW4=U?sWcl!MrFf zgZ)75P#J>=ZYCrM`j^IvZ^`Bes~&L42fMu-3Zi;*z{%oUKPEEzbsT)Smyzhi)}RCeq|UT$o0=QhmIh!2d)KbPq_`aIcdHa5 z)R6$8aRST?zGss-52MC=DJi1}1q(T%|6L#M+fM@8PQZH@huQ^2{i`}wcbu)CkjB2j zu6o^u6eDR3DlGTP5FSvB3TU}mSqJaaUqA#1E;wZu3wZwnm)z0BWzhzd$szn=J{w5D zG!-aty1Q33^5mU=lpx%qrUrHENZ#o1Fx<7!Pw{4k>VL~d25&c!FgN)pzdH^9Z;h>j zCC6q#wEM8L3;zIzNPJX}-5ep2&W_-e!)f-eo#VfMUE+>7ta1ZE1&t|nC_o}j25l(W z{iNtiT2)#PMhZ^m{uVVP7>N!=9CQ4;nfdP*%YUd&66>hQsj%dXF$vLhd$B7X^JZZ@ zCm$siUbg=x>rFW_a^3JdHFuW(^g7L${pyZjkJ+hb2t~Z#RYDG~Sn=qA&IhIT_d!c) za{)&mKQdP+^!R*@>zIbfz;>O=L`?}@puN8Gd#gr1}J9iAGV9J#l< zsVKR~=2rb@*5H1{m5GJ2$2SFEwY(}y;1C;(>GM6!{Qi8)o5Vnr7`PYV<9jDuuSRd( zmi1ik6vg#r`f{`-qhyZTSglR1Xt3XJeR)xzU9S??ZJkw}sJo6r{+ecX00cT#F$M`D z5~;VrNt5in7ndNwXU*qoIF%A%+*SB)o2uALOO{jx6CK@P!-_~|1<^E-T9x+L)Pmn* z^M&KpJ)WPg2~`VKYgI+2M2^4dQF9|e@k0v1`g}_@(NNUznYmk`^2O@i>cr@&wuDIC zS9@7Xwm<`jL95RnKW@S)0@JF*`|Bt6;YzUUmlhT#qq$_AxfK*V3Eb8Ogg5#3@1xMr zZuC7uV!LDiI?7Evrir=UA}S-mf#NYAN=VORADdQ*m}>_gKAN99m%FxpZSr%!v027z z2^?I0Lj(b%&6Cw&Qa(R=^%Bh=nw6a*+#9HO4V$s7KB+sH1F}iY6}8A22%lzgh$?#K zz7~+*a`U*etE*Yog-ykNZitVNrc0R&0wW`!SY)c)@#&#D{xK)(qSaX|h&ovdMP5l+ zXZPBwRz^K=?<{;bm14{xCMb5mv4XUm0pqC#eS(5&eA4E1V!Cg1miIzqTt&d^aBU{9 zm+B{!Otx&x3!+9j47E$mqrJxa>4QK{3<9wH{5do{j1Cr@=Ck0XP|`%jTKm{BPwan~ zP9ilD-MxDTwHd@#{ivOOTAah2OYXmSMKGPJ6yZ1{u6kN4nyhbl@|93prDcFcMfyPV z-YOv<&jWZ>4I=Zc)V!aQ9zTZu$9-VDAn{7?fe*sI?$T2u7rxhSr(HiUmw5Wd@wi4? zK>kA1fB^EL3m6(1(TZ=Rhj4)hSqv;lcqj+G7n|Yx24rCnKocA7X)~8tlZc!A+I{T0 z=%Uslp!M>OpD%yPHz>S(^72aaAI%duf&H#hx${sn#UE|!JfHPt@@;?MlWjCLH>oa^ zetGh^&iMI(?~b20j`iGP?OgYxkdUQ9X{B0;`aQ&;*MgCY4j5*TVlh7}tRjZX#^C(M z7WS%(p!pblws|f78PFg_<1Iy`m~+1tH{I3|0ZJQoIG@VPaSVeKo?t_@D@lij z`?()q(i;23^=MJxIzvJPz`p19r56GHtUfYv$|Hzr} z81Dc5MI0<0f?nK?HjLpkPSxF;8`zGoDSu?VT3+23X2h8~q<=+KQ~$EQT;X#vuP9HN zXhvGb%X&-66kg#Ji697Yq;|0GSigJyZr0ta`bM0iM@zSLpOZV9uRcB;VIC>6o2SL_ z)kW7wQgIZ+kGsv?sDv`8iU%K0n}LgTUAwiZaaGB1{-H5rzSm#Jt{k@0JIF*a9dbnotww!vCEHcIZ*qgK7KQ~ff=9P`IWCY@#e$1Id3qdNn7>OW zY%9f9c;DN)c?U3hgQcnl+r8zu12(3=vu`Ofi~W9+`S0Gb4pf@t_grOk-E21F+;Wdy z(!+lG;DKdxym#VuM;Fu0*3Q3gkrOW1?tS;m69Vb~zqji*d#-45o=@$*^SkG$I1F}0 z9a#B19k7k7N~>zCDt6%`LBVaR_OjAj{&Fo3Hu}<@W?>m*OGt_Rextj$ml7azM#kTb z&MBvBamKOj;OYL@eyfa2J%1@vB7-fy1!I#1NHX)jIVL41J$m|NQ|9K(VcVv^@e|UM zw~0k8b;)nmudshyKdNu=%h4~Fa@&jAFG#i=@`?Wcw-Ol;G8_7t&i9@$d-{q|x4^gs z1)Bnt)@4(ubw28Mxn$K|z*9P~+sVUy$ig=%n=*}BMVongyJhBF@%XOAW42A6!dA?O zFC30`IoMJYZ`@+Adxv1VZF}a332Hcrm5D5S*e5k;uIm3j%qP{||K#fvm#g`-7JN$k zJ_Kp)+{3WPOw{Zs!_n3Bk#}y0$mU{g+AZ2zeZH$@d(SgpFgVX5#A^Fhx|n@<^ZOD$E}^h?%m>2JuUo%T$fqxyI(q8lZ99KHiHi{#$4*b(mjC7ZW#5^nCW)uW zsvmMvT&`aCxL$BK_3p#BOl!N9YkX~!9QO$Bp3|FD#xM9~|EuT-i~(v)UkBa|eE!6| zY#Psxo1CU3&9CBWH5T^kU%3^YP^h&|!a)!4SIjK;cV3Ur1_nFXvm0Uuqz0rJc#fpL zP!HRyDLn5sx8WMg@tVEq%6u(t=@(8veH7yI`{%cs{@1>`yO{R(y=?k&>+%LD!tm}D zn>{HH=*LyYRp{G8-W}3X9eLUR<=mGFs$F1pt}6EI-p!NaT{3$^e!Ygq{reo8Uq(k} zQYRwXbTXb-aj4$;@M5*6c)1HLY~$n`fj5>;kM-{;NB;i3=7rwMf%9s8x4GC9?MLiq zKXeKoeXJc7nY=f}WA99}(-z+){i$1J1Gal?IoYn+CUzfRefGn>A|v_r-Le5$H!pPhV{+ zkgYu0GaNrxG1t_6vHD_$o_Wvm94oPjRlHEvQHcOYjs6v9)O`%-Zp_B}og&BV^c^UB z+Va3C!za5VqcA44s5Q^%ms`=^vohUBg2ufUmd15!S92B=f6aXzI>IM~0jfYG(A)Xg zPTje8NA*H4R{+uGqa~qraVg!~cvb8T_d~Laz#nb*nK1;IFPfFubwqUOZ}q;YtW(5e zC~bJi-`~L6aJStfO304`rHWD>A|r1!b+vSls@rA#xnRvY0NpzS4@T0Py%rn)1SM7S-g@6Q=1ZA zhng+Dn%z*`rQLFGEu5!psA{Mxh9`)pTF55Mcl`Z7l7*~66js11??zJ;B-toZKoUz# zV`#L!REX?lOAOWvsh^b6wSC;<-s{0X7)gc$?~H~sxRr-#lst*OoZ z5Vq^G(wEw!s>zvff7$)6tA0fiAEkL$XGP)gY00?=(?~7){W$YIq&J6^Wn@Yz2j0D> zC3#M2);!Rv!%*E!MX{@FRloGHcjV-7>L=e~qokKM~)FCK6zeD*axeR}NIuUVKl!9M6@ z_+9dg_*gaiFR7KOJrEqz?O{j~pk{ceBkZ=H&e!=m&(AfPHvNei$5S``2j^bIp1yc87q%oa z#1BvK-$NW8VvRp3CPszaJjVdo9cZ4q7hJ~KU60kLTcfQG7h!K&+uZl*VQlP5lR!nb z0Y7atN8+|O9T)8kJs(c{92g^1+}5k#9Y8Cs=3;OwK=G5uOh*;g8v^n+GXkdHC^H>p zNqv-BU>v1P*~O7KD=~yeI*WnwGqbDAnqrC$uAC-U<RkE$cP#CTyHkIGllMcfG0a4WGQZ($ETWE#9T)G01~tnDUu&~Sy~evGc*dJ5zPkLe zZ$^3vzt0)hlS^89I-bi()t*mF&|ZZ-Wl2j(b6Cxc?Y72Ec&q~e!&KjRv2el(h3_pE z21D=s^1q{JkEQCLRd}NpB^+GvYC-LOtn(M==n@S;+5Bn8eV=U2G|!ww1lhyS@Kjw& zYQ535t0glf{cCBlx9`SF!^>XpzWp5g86LwXQ{toBrI(~3HTi64pszN8$|B2Y`q_}+ zMx6&b8M|F$d&U@0{;hTfTn-YI_p3x$Z|b%#c-r$Z^dsrX@_$s2e=B7*JwQU7yS~4Q zSC^Cgb=me&3$*iiqBOgMdy~9nT{7%`D3c|C!iSBRp35VqMw@05oK|bsCy#w6?$1L! zS-YYZu2*PeDD|bF{{@WBPS_BHc1YJk)7;4C(rzMS2+Hw6RC|LJJ@+e+yLEbpyN5|d z`VXScmpCHvuEqIevke0F%29(iM)n`=giA8YqsmiCtgVz^lBg@3R<;iP!nluT-{!=H z+KyVO#OcxWuf-*qSGV47P@dIJrcloC&;G02LTP(#WSCp~fqr&d;aj<54-vP~G`_Fj zZ@+)tXhHSM%ZdEScB>8_O>1sz{BoJra5BGFLd$mG(Y^~)!+m-&I!WE02VE9F zIZp-_Y|WuUPfTqTe;xP;;oL&8qE+)b;wBBdEXxQn;)ZgiOhKH zv~eXq?Ty{Wlx3X9r)`Eim??p5AXN-swzi&}@iGIT0|A#5)2`=Xf;X8IuFy(~20OX; z*?9JMWY%Ra^kV(WkhBdz9xy;i8y&xxThr9^c5}DF-xmM-6%~PyiMhp;g%Ss#B2jU4 zcsjUh;Nhc!B%vN1%hb**_N^3hz(vh}Uj3wJWU}`8nW8QkH5KWtFURGM5%SsA+X>_u zhh^{YUa8l;98>PuQLt|B7^4@tIJdETK&AFtXmreD7cCS#MV?+dkG0EV{34=sGe%p* z0!=h3{B4$F^egN6R=h`C{0g0hqQk0>@6(CVSvoQILh|7O>Ho!t zJRtu+X^^L`yMRuvRFoI8W4&FA{n;*sc=gM-wh_qb(a8_qS59^-{;tfhA@p~j!WqJ@ z%MF`Mo1u>#`_9W+bxjzrtA_V{1REMESlB$mcmfRca+BvE=o80uaob3$ADW-_B;j+K zs1TAB*d(4+)#5Rmwh^zSw+AxhJ$X;@W?g95BGM*rChnUG`Wd+ORbNN-|9mF+m}xuo zTmG5RQS`ljnA}P9IpyM3!5oJXfr_4Z6;D_{NeuKZ|8n|qJ^zlioqIc2R@XZ+X6ZM zEFQAXBKhGa)wtPjvMY$n?({)vou*w*f(O5UBj=rzFmN(SPg^?&BNogENl1jh z8Xd!^_4x4?*kMg>C&;J{IJer}jI`#5Es>e}*g@Pde8Wgp=A`a?*{4$ry+XH5c z$C9sI^6Q+unDi})L(Ru5!%p2Zzw^ufjcj5Al$E7P4p}sio0c%T37Y7ysL0NKKy||W z1Ih82__(+?DJeuorKV>m?Mi8IBp&_@zUJmAG;3=I!mW!pZwEE)Lr)-Ot=G4%fA^qeb)0dc0oY z(~DDn5~b2<;vq{0CTC49XusnsvqZ^g^eA30*1GM>E0J5BbI8ft@~$s+2bsT6?Q%@s zF`Hw5G0i#+&Gf4`uRx#F|7NQYpm0ICtFZJaxbOsCOr7>R4WbM}s$cTwtXO&(=Ue#;oQ zqNf9#Rn7@N0-WV2pQ=hl>%`K^zWDjlkNDvTpIJdnIk2DPWNPUsf+EZlz~UpW%K^|% z3s;O4?;pJFHt(+hRC`Sr_pBut2Tu5HcEtYBe$`Mr<1k6dpG3MHb9^f+A@=PL-d79W=-xIgXZNLrIx@{fr05GTv3HywE| z_s6%dUZ}4xsf*?M4H6r(ZGr}7mIiqWwr-N-Vo{GCLBD6j<6hERyNrf64K%-L_4aGm zak6$kF?__=c$ANaH|9djQu0dho7Zo6vv}vU)!SbQJTk3WuF*ZMSL(}2DHL|p=E74G zNvFF%W_-Wc%5LZA)JSgo`sVAXM@h*ON$RbBO)BXRTtSU-jaTg5=}yxzz2hkS(rXg) zo?VswNUgx_f`=lHtaWV#TS@p`_*yeR>F?KmJQ#B}OM_vMnwd{L|BsLH`(JM!zZsYq zi2M~fTRW@7`bB=YA1=wfluR8=FZ^Hd9psyAjW$g({c7-nE3NH}lUmkUj$=ZSInvtq zOzpXSxfkEK|GDB|XpfJ4+UN9>=+D$L$&$&5=d-xexlcuz<=b}ITqw{D%G;-h*k}IUn71?oR}cqyty4JpLLX7-)}iceFAkA zGIBaP?t)uV=7Iw~V$8CIGL@eaNC}K*%m{m~pQ=&neA&aK|86YCu-DM3+R5_1h3|~? zL(xW`wAlz-**a34z1*x?)Osr>b210TZeHgZpx%5|Rn?KKZ%IaKOIBJ_BCN%XOImPG zWbSpFrV~r)q;_XA!-_!q!*nVI)!(X3rpEKRP2*F4Aec1wxl)mS$!6A$zGxKWYNtZK!O;PRDZ zGxj|WCZ#dipTR>ca>B>$_#0lg+-;7a`$@m@e)OcmsPbxEU5ZRlLiL*j{ z2YS2x7;YOIC+Jia6}Lh0pziC<`XT7rp!7xr5U1HSPnvlx`KM*?j!V6EgzMY(k-|pr z8OK2FTwFsu+et~$DCrX^2Wt;@4-UrM@2zvLE?m8~=>Fx(Y|?n^xq%JvHvIagan@8x6=%3a1%<#N_kRdFF znZt!PLQy=Gm#3Z~+{LlqjLYIs*dg3lyK`Tad{0jYl$OeRm4(0DYdP@hBu)W34ptHA zlJoA?*5`iTc|z%S+U-YZ*SB+kt-8vCXul5#`A+Ur*mo z%?$5~Z(%>8?^2Z{dKq6Z6mz$GMV>{zP35EOM?qh!6V{^-Z>^H$u-(~3DP`q)`PHBr zO=Lc&&8=PsF)0x#+3lu!=N?@PDk~2S`1SqF2?2>5ez){?gP_kP6u_ik*A#`uut%t`eSP#b<%`{PQ=cZgWO2O9w#yM}hczM6dus* zZ*}a$0+90I=r!4WJH)&VgR3els|#F&{T=ZP~mddvawj3i`UjY z@gUj}+O03^J2>g0XwUcQ23#GqbL@!;P7H3~iVn&pQDjmKqACcx`g!0$VNGK7nc&`j z=l&J1k<=Xq7tUwlZS%b54TC;YZF1TkPW(dNK5A3gVsd3oMj+LM{fOw5w=McX4-hTy zKfZ5!Gc_iM!OPTYM@p5;y(EJ6v%EcHs(xcsw0e6Q_r7t;SP-49 zGZFF1vM@33n_C~b@F~;6+rhc*+wfNH)~Vqg@7$cpId_`xq`C1>J9^s=g9=6PLg8K5 zc0^JX#%mfXql{wS%w42ACTjmb*X*e_lrkVbht*%uOf_t`Z74e%JF8mmN(oa)(P2po z3-zKDqIBdX|GgaIO%Yr{#=-?^dtI**2lRz z3UHbHI2z?BXqoE_%AXZv6vXyi(lWgsCNxI*<&VYuZiMdU^oDeojMlfUisT3`R0^g? zEBJOFJ+Zpj@366ao$3Xb*xFJ%Z0oS%tgM9dt0)?{0~qg5GVuzo|?jTkLWuG zCJMN#SgIx(Z$O;FO_FZF3r9{vAfdd&pKCB=yV8xr_HFa#ZA?ZN`R zk$32fGl{eaac@tH|0e0zFo}dj%zx9*6uW>OY-o|O1kqagYq_>4M$>;mZu6i-}Ku)$&lmTNCbByrgn*FsFnoV(yeUHli44)plKeVq*F5jw#=8*ZJpa-{a zp4M<`c{_L^VUpt^eUQv+yNr;J_XQ(GPLag@nezSl<~-_5pdm+P(T{+|jG9Z<^!OPH^}(+&$FYp8ezlW8JGX#ni_l zk4_J(oS1ewV0obN=vA%_-4^UF7f>A!LvUkTvxNlNKcTSOA_$Z_2wQ7F_$oB zwlLOH-PcS`H$t0bm*H!)D*8&$rtt3stujxxddb(4qaqhtBA!%SUOsrpJf-n*Bc^my z2H&fOX({PhuO66{xA1*ISJ57w&ZETY7QI;U?#s6~-%OVMpU3v_Hwdg8+}g?Zg(=3J z{kQ+vpF?v8=2qvkS0e z{V@5ZH_xlRhv%ZE8hb3imXZAMAqKJi3?g(tp7v!}EFR81989zCSYYubmGdL+wIlb2 zch?yQMgKbdNiXrw@`o?lKeVH`V+|jTzx-*%?=WFKSg<%YI(=8j?fnxaf5N8SBA+srT4nf@}P`4#*wHlv6eZX zz?jr+8okw+)w-oSo3^oX+V^yrb=cOC6|!JgP> zmOnjIM)ZMDk(1k+SKZ`=+N}BDQJ2qs*|<5OCC1xqwjp7be+-Pg7@c%2FHME(GUDMi+C`yvg7=EH z($;v~r34bi9Q7H8(hfungu6*GYI>%4j-+{LxvQU3xWDqch3HwJ;=A|U(52tS-8%#< zvlfGA27EiiO-hm9mG{iurn^nA$(&Tf-bP)PTTF8_v9?*SzC*A6QE|$j7`1~BzSkF@ zoR&WrWpKj7hn?bF0Y7Rk{8QJ4hKMm@m-x-(lH}wPt|q2B)i6s6L!pOakAg?;n4TzW z-@G?L&&GBQWPUh%Vm}(nhDrq*(5ajVp5ndd6UZ7xk`ik!r8}(P*s(WECzS+_H;r-y znb22AK5-Q+Ik39^aBjnz!U4}xo-O31m6}((rfFHtot*=~!UOpmTi1}CmxYHm{*Q{Q zQSoA1M&03R&fp1~In-@C^YB9Z>89IlM@Yl*v;r}ZE*}~sV8@62IZW&x!xWJp4M?31 zc-r9kW80~(iI~z|zZ*25FY zbE`&0aW@n#Vp2I^)G)IF77VZW1G_hASKk?Lh>zN>} zhu$s@o12ZB=BE0D5*T%1p@@+-tt1Od%SuW?#n88YS;BnhJ<3`ND~4AlKE{6yr|w;H z)SjqKV~}7Yqwt#9`AuDL$Da9PzRSH*Ih8(?rgv_9gK|Y4Ee>JkhCI-TCBR z?T5-rLa8kk$l&xU82&mkz6 z27X+Mn@0O!nNoK`Y`Fb*dqJn2>g61%fxvOYKUe--N%I)js(Ox;*c^{)n~41wIRx+C z`-u91xr886*G=x{oUf{AiV6$#jTBfob=wT1&quyE2qkXb`uDB%92^b)R*zd&mWPrV zlb+n15$LzC-+*N$V(M#MzR2Z0a^E}J+Y_aIKlq$|u7y~D4UemwW?4f$Ot1bs_mOtr zcj&*INqMJ8oCQ4@fr3$sc)yYlDOd0Xbd<|viaY1mjFz|VAnYlNzN^B>8RQcb+1FrF z@pPJ}f7cRE{+Hg8z`Omn6_jo)PmDgeSBJ4P7Hryy7b9A`@6J8mFC7&)!{dz9Pk$+HrQaUS+r%n9qr87I8)~P2YV)7T)w8 z6`OE7d%7|G^Tk5y!iS=}=VXmcoysBuZp}UnA4Msr9w03t$dw&qa>N!!Dab3(Dcgt% z$6Aa!FzKeI>O@!%=E(9uvuo~C36#V>CBNX$*q<5^+pjtfBke+t4)8C zVsH3anC8a3)i5m=Q?kCHgTloR5LxVwdoH#0%~xb$Tst{=(SC7VX%pa5naffOMZ$`I zi@Um;dYvjTsW3N|TQ;PgUi1eOabCwazWA+mPqIyYR&a0&aa$>!ad~{va0fP!e zDFSxw8CW+VAwl+n>I!_tdup|zvnF`rgdv(q&~M>s2&+AFc*F3Bnfd*v@}JlFcL?t* z^M9r5db;dtfkG%^m_sfuFz9y>lbmoTU02ZVDYIv*hARv1wYI~LzrOmqJm_Q3qW6GT zT=@#c+^e|GxL<#NrT3)obt$xt)J|{{oE<2z>pI-%sbv^``n3CLg^LRMPW#<0wH3AP z_4pKCzeyQ49xEN+-+AhMt9PPEhR7-XQ>eauSQC}F)gQ(eUAiW*SaLj|xJbpN^~%EU zb)|ry&w|g*W7GsF(RH6-b4(d-eDdLm5z{-#raH}Erot9q8h%9sM`fFGUF)5!$*s97 zL2co0A$KihBL)_@unmXG3s~ORBZf3zTy*qYTQZWu;iE?#TwE%kNe+d0s5C4Eoc~vl z5CSOC3~f;C{n?@^5hyU%my#9Jxml)?$2__D@maqCFA zg#S?0oY^szevUAKdzuChs2;L;99&WA{K_Aso$j_wH`m1$@r!-WB`g zcg82mgpKS(hbs3QHr<-urypVXqdb>hVN|=5i{{3!*Ha(ApQ)sNDw6Q7tVh2`S28G& zyi;7oPUDL2-zl-uRLc0e%T}H8cHLs;rug7>-C;l7KlBEQ8Ax6kb4>Y0!@Y|+p|ker z4x|ctjix zxZ+fJgN~w#C+0pxeh^U(1i`ltrW{bf2~o1IFv2P(zaJmoqq}c* z|Gw#QXO_~8Khfvr&TR=-rtM304lKRaHJF+9-p);Nw(<3&JxRwx^Fn~JkUz()Ap9^} zSV0KeamlAC%ohyx3;~7#46kkrSfABa*HwRQoUtYpWjT5`@lqlX_mBdu9$ubMO*LQX z+Q~<~1$Jx{1qg;Us)MC<(^t0YH@0 z6%?GoZguxFy=&KG*dw4kDUD@oP`cK#cgP3sd`E=}_?-^5Hq%iNQQo!w-C9}qO=H9! z^}gvT?00W_qK?+lhczJd7o#Fmb^aUSLXx8Sg{b6`A)r&}Bi=t)w~KB|(@V=aozvZk zQOJ;TeenIgD&#r3L(pARB+p5gfS%>0BS(3A%h`_V=zY7?aQXSyv>uwCqr&o1?O8f}ALhL(8ZP%<+daPL>R-u!xEX0M&@pUzVB;CDslKw_{{F4bj6eqwXlEE0 z8p3QEY!+;ALZK1Vv*k6^c@>GjxiQd%(`T{ww8`3BJ&I50&^~+!H)Lt}Sz&J=2Yb<^ z@xgkq*1?i1*4I>{592Ks`|j`j*QgWZ<;+s;8RBTqIwc(bH7%^YuD`DB(9+(8cxM40U;*yhJy z$@TeLj^fVXgFz^Iq`ph4UGDx9)iv3hv!YWSbSEc2dgUWvap!xz`6H8wE&FMOqeOCb z@=B9@w@ij*0Obd-QCzuX^mr#BvvxM_)J)D!!u%WDXS5IaNreQ5))@W?-gpJ;*>} zth$(MLMRf#W7!xWZ@*#YurV z3E}!?mBy#3i+y>i#hU6?>OBJEDk}5oar_SS4vy`wG7F9uOUEATsuT>y7 z)+`OL{@MKNQ;GXBra6cq{jKl&1ELFZ3!<{W;#3=6J{DSsdLp==!B1{pK$*1!=I%5Pg_>&z9g6BN>@~r7)zB&Zv0#d?riM*qn!0;B53GkokXZdQKA=Y ze=?cMhB3aJAD=f3Nc+zfs03LLk_vZ;e%`QdH_oxRjZIysHs(l?LAAb@1Lhn&2WDJ; z-o=VBA1^OV_3&yN^Eh>?3W)qARnsP?E7#ol_P2RO|!LdU; zc%BQNisBxVYIs+Yvg$O}yI1pcO-{hv1$wO52z;-xgr#dsNOf7n!A5 z>YQTLAuAt@nN6z_hm>Av{ly3Xl&N8ThXuIhRGn!G^^6qO65yyYCKlZkt;2f+;iFHq z!imqN(Vx`vqNPw2qx=2fL>0`S$p4a0r156G&Pf-V+kRKthh2a+i)%W9clXiUUranA znemD)&z4*#d&d8NdLGtO2O}MwoUrDJ4a-88ep$zE!62D}E1SX9S~7c_ZR!N@V*X9j^=t{^BTbT7Q9l;26bhRsO3@EukO zW5#cv#qVWdwXutREA5^6w_@nxf5Ct*li7FukT}+Mk2n=}_kY~VP z<0-FLPPIBJU6y!l|biv2_QBOq2YBFjTaOd|-TOM@yT29UB;rzEa>DA7%dk$|` zT%81KYQGhUGMWisOk6C=I5_BtFYo#oPJ5o7A_`|vXI;Fw0#xGu{tZo$4y*`5vIc`` zuAmRq)%d<}$Nl&#kW3M0CRIHi2~`*tNW;mX3w49T+~N}_RY%$XOPyFVOpmHdwu&A@J8-#E&Q5O`Yj z0KA7^-@SLwVnROo3q)MtTKLaK8MzzEtd^lBoI&t`gk1*Wbo~_@*1g`)mO+lkh4=Pa zfS%8t;Na<=0{GbF%<0{@L5{;*xeWmjY~PuM1t?na;0dl8#DqUAhXvG%&GwD9fFhaH zq5t#(;jkn--ke85kbMo_Rb~}ndY*#KYQ8^jR!7}JQ%E%BS z@8aT2?~!E*#>(y2ckJbmb+oolNlsQwZIejYNwJ^nBiGl*FWn@uwTIV$AY|;|c{5Qc z3u{QIze-3+9pzm&;--tJhl?x1I#CY`nSMJS;KD-ennyo;s6-B7mI8C^MA-V;wy;784sY`Lvz9cw03V+uc-4>#mtQ#gS^eL% z64ApL79F_MtD9dj)(0Zho6&noBg)f# ze*7dOlPx3=79|0GX)Zw}124ONXQ1Ks_C4js@G;|`=>MA>N*1af%53n@tIcOtfQOX8 zNen~tGEhA@qVozJ?|~rnyzsRG>ICJbt7|2A-*5p|McdnPAH8OhU$;^$-*(9kkp1m% zZ~49M$B?&xj%nSP5@9`pef`GSMV{)U0yDv(<Dfw^EYylynb{DD}wY30&r#5uH6e_;c;Qv;zq9RO_d9l9t-o=XHVm zbTJ~&K2Q09O0#}k*=gH7a*R+WP{_-h5|C69Wn-2Z)_i@`L( zOYb^wWmOQtbysG_aP_RDit%-gKk=nMAyoG9AC zG1|*LBH)S}8cI>PfT9>G?y#vbFZY0ZF`yG@^wm~ZTVB5Gvpi!Co)kOT@)2AR zKd)VxpF}@`YFnxKQvz!t8j^|r{vRIf3eZ`{d}N5{@1HZ{Pm}xuFg6=%sFz?1qwJPl zItyoSY{Z90L|nkeKE#%7OM$oZi;5yOzXR}w0GE6|&9PXrYt>GUcD5!jx+QMkNwIyR zt#3Y!4-v)h0_>p}LX-~!g&WZsGOeiF5d*Wo5Z&!S>;mz4Q3bk!_JH^y&Q#%U2h|rq z#qfiIn*rh$x*b_4a;vFPa004@coWFAV;+)ooFI$FOM1R}_z=#{&p`i12!X6PqI@7u z8McZyfSFR*N93`WhPzqYeV6rG!)TVZp<21@>d3R_&w*k)pF4LSMu!+{P%B_q0<}n~ zIa!kJ=Ft5Hye=sjH@U4yWohl(wfCie7`vD_Pl6;h9q)+0ykrQw`G~0a;NzINoZ+Uq zA^#anZ|^PdjW9GWC|@xN$Ynj9a=t75;?TrI^WUNA7)Y6eY1&_1J%o)8VEEABMZ>#m z&mI(TisVG;@xzCQLDS?{q2!R2K6vm0Y!I=81~HZL@^VO!d@;efH#CUM|dwSyZ+#L1+SGK+qeCiymrCj*$$154v#LlgqmpcJ|t!V__qPF z!29DqfDt*kv9<&m^KSvRY-|Z&ae4F}oWW0pjQ4jsm^v}+Vb0-$8 z6-n+qkrBG(yNv5A14J9O0cB_3(do>fAmqwN%d*sa_+rGC$p zFYCCb`g~yH>yeJ%lrm!TO@jgz?l$2Jd&pZU`&lb|->mD>Qx|TW{DtoWrTK=I7TDp= z0`8$!K$`%qU^GKYlDe)d=9wt{(A$G6*)(@g?lG={te*-PUD*XIzehT|ygo_GZW zH09-q`XmhvcF=neW}d`c1NsK&q0Vb*8Q^Y12rgR@!DcV3I2DQoh(x8Op$G2^q2*ar zE^N6+>8Y>%`puih`g$I5@giuCs;N1G0E0+nNylT6j0g`g^qRUlD4W4r3jheT&DC-I z?`v3Ic5r|yZYyT8O-+`5P$4eFSL!cv<2rdV`fLjHst}B!%L+UIrtwgqfHE4)9V{@M zK}M#gqpJxg%KDj`a}IF>NWf>Z_7n9|Ra5iu@|toy>Lq3x45_=oxvxl67$^Gp*S}N3 zTXF^AK`N1jl@E==86BOxdLjHCCTQg>y|IGy`egfZjc$uKTKxvTEdKlVN+~fuMlz0%8sx48S6|Al)M$8XNDqo$>T6 zfD<&1E)qOOJu%0O?x+`7W*wKD#G69!8b5=QF$AnaEneY1LQoXphx|F7Zvmsi^t>!p z!RsKDQmnBqFwT8oAk5P&_mPkm`0~w#A7Zn#laBPTKqC|W%RHIs-pTKECExD!ZeHH3 z%5=97$%a&Yd{oqjWokWWBDA)eLY6BaP%>-`M#NAGU$G91;fhH7IuNnw_7AZ9sS6PRT#Q zHb^U)>gv{hd_h!?&Kl!z06xYjG5}jCxSmEvMi=z;@lZiX8MhG67%3Tg$*!#SaHHF0(v(spFW8Q2^9xyz`3>X&6{z^P(4QLA^rxAQuy?^M3K?aCq+bR z>r}cS+iM0Taa=$;8k!SuVU0Y4F*wqt0y#2}Bg#+|+E{%g}*QfTk5@`q_$c@$vY2 z2#zOVD1j(|aqE1YSageIn8Ne!o*sz0I^jJqe}-yR5_HQff8W3*o9=z536w%naR`7T zE}5mDVCC=TPf+>_oSK|eKOCLoau%A7IJ(VikYip17r%Q5<8#D8V$FxSB>vKF3N7$4 z5H}&&ho}H2L41i5;VEA(V+jY`Sg1AKy>X)o>RzieXzO>{AUb|>dfNM|KKjDxj8(-y z5g=y+qGTw)v^+ngQ}dKuL&fseqqw7cn0N1&HDa`&|Db8ro8^o`w;XeRJa4%4e?gG~ z(haJfp^*{fmxQv;b$|VOWoFPyv0ER`JT{-0;U8aFDLWcd<@<*O|sl|)@jB~*7|i`cDGIQpV( z#^*g+v!o=B#kW0()`%EvjEu|m9Dzg+07RIdKYyYGA%6}v9hmaKnBt*zmAYUy&J>i6 zn$coG8?9UOMbf>{P=63F@Fzfq$;o<)j}5bf>FyjwOjdwT!bA|%NZcEF^5W7`)Mb8P z$sqdT5_)-hIypMl1d!~QIrpy~L&rbu*zX(o*DJ(LHRCMXDR%R>_J5?l#3)TX>aSZ( z3{I@?ykL~@;;FMng=(eepHyvcfZF~L&W9c-9z5jon3x!EPtPCucC?}bW;h<)G=K#g znwux^0WZn!Da$Llp!I6^b@q?V&HkI~E09c+dfNITJ-vAy7M{<6{&ZVTXj)K2o`Jsf z>g+A2JQX2h2A1*k7gUkUaur9=5YvPx)rDPgoCR_YIw20c_p+EGLjstSZDY8@m)`rh zxlqu58JowdTyJmhN#(33vvYHn$rl)5wFN>E7$Ts-IBFah9j)8IT?h?T!$!|h$PhcUx|rLGU2F4J;WPOHn84WJ|e zWr6wiH8ro_zO_8`t|U6FxD6@tFe4+rJ6UDwhLeH3A%z-ky4eE*i6kM*JK5PY znoBix%Xjv&-J^og34$OkJ^hbd>vNE)1ga1CqQpJQboXHafmTMn6+2PTV-_c2Z;qy- zLWeEA3=(+I09%JK=MRd*yu5cQhc)7aRSgV$aQILHygZ+VMLV2r974zD&J7K8Y0y;d zE>-2GA@)xC=#|jSijwZw5tW&Fyov3zk2HI{%k5bBn(G@J6B3G4P8N!gA{Lx}eyJ%b zVeB#`t=n(ixbfCj89g1xHWhL~%H`#uq4J<>Pg}MV7zdE*Np|kc(GJZdnl7QKVAF2_ z`8yxq6cPCwWBOX{ot_JHxNjfqZ;DGwW*X#J;OaV3+@az-a%60Hl>S^QJp%&@51asW zmbvR24Vh--&!;>L(Me!wO+U*dOs3Yk9xdNE3{^p8ftPGU3ZL+7a8VD;xwB!6lZG4EyHn)X$(^GH~o#d0IzV-B=1=K?o<#;9K z$rA(EP$B=p7+BhEum(2(Ky>cAQO_kQV&emkJao*8iAaXCzhP@;>At*12c1TQ1}3zlJhQ(ecUS*^fcta zrj8DJmc+WlpEHb0J9~RsBI$sO!YTWv}hzW%lnt24K5g6dZlN_JAg=Hsr$Pg+l_#>6iL7t`$ju1hW-0lois za3FmA7%WteLX_-bAXp+8K!esml&IqgV;`a?^hw*jez!dHy0wDoZ~OT8WXByq+DEB^ z7h(;nh>6C-$Bu2ZiIDVq_drb@6GIL*He(%~TU2mXg>hB3 zt@>_YR^Q!SR4w-o21)q2pT8aU^H9eEJtiR~wTRgqbBYIhH4|a;-^)UHe00=oX~v5q zL}_qjM1Y@v;_5qOcgwf!Ldxf$iyj`nSM=&_s;HP447cX-oCc1K8^dM}efsEC4y>6$ zH1z{5S)s(}XCNc5G$mYn;`>};y|(9T%w*JXOl z`&3|6Q`7xp755__KR$ls$a5`TgB$M=Pu4w5*b_7Y=Y}cuWx_O4RZgEC8y`Oy1lu5V z%1ED#w4P{T5Cj|hj4oFlz!njKVn5a=-@WRO+bsh1- z)m0!&7z!XK)t#T`5fke|)rrqBxio4XVCeW-ivBjb8FG>j)4D<R(pm1XT#6puDk@ zY+i=0uC90v&n-})odJ-}A?@?vSQQ+zu!)Yt3kJ7TZ+%kuD|DE>IQ;$^U)faz|HTit<(4d-Cu1S8AuFq^`|0VS_6|)?4|JVnTXB^H;(Ufsse!F8 zbnt~aIaP`JdV0{iysynndi@4vaCL%=pBG$);3?G$TR%_}m|0lRqQg`G$jCdV-bJ+4 z;EAC{9vrlopaMk!RCTke?b7TOXr)oN3ATtr0Az}vxm(?sj%EDCiwDWc$*^_XLIZF~tJoC@Csx@9Kg^HqwKxzCNr{q$DI%&z$k-wBu3^HIr4< z*WZ6b-YjvdYCr6%(0(8+e}C_rcjLyk1dY~)hN_`iqWlv&KLircV_>qtlz`QbLtI?$ zz&a60!K}X@0#0U1g1DOkm~CYVq}@P5j|d97BK6=l<0|71LO~iAMpQ@$4QXCM0UKP+ z(PB37xBm)+zXD!9LI5>8I~pyGuk-#Q+re=){3IX5>-?JyFpEV`mr zxh8GedGA{+ zBgI(^4+(?`+y@MiYnGXyO~t^$v2TZg*$g9+6;5W^`}a7ey64Yh@_f>whTL&gSzex? za2aOe&1 zC)$YV!NHq5VY-RPg;(fC4htht5jWf!!~{_h5uAY@9PpBoTsMB2Z0ddcG|!xYT6#Ph zlQ8A#djp}&B7k--;Gn~45}Nks_4KSKvNAH*n3>OV(*SP4Ob5ajvp(-p@gx40OA_b{~N`DS-&ExL2fRtla|UZdh58P;dk$L zL+d#7T$y}F7l4nB&JQ9RxpK@@bK z%09;gPeb4$K+G_mX%h5?@$mKQl|U;%#^lA_lavFf&6Jydz+Y;I$xs?%X+)-_^oBey>XN1=G@{Up8OxrKsjo=<_V#{%%|MLs=OxLtH)|VNb=xHPwxbCd zbwGeYrG=sa&P>SRKVW-`rb>cscXn`T=^7#+xFy+4y9tCs;+Phf8rxRY@6YVNt$_J_ z5_Io-N0c{c$jHc0gCG+P*FpALE3LgeRg5s3>9Rk$h1^Y_0JMUZi_ENVsQ}>E=Y;|VcjQe6PN(ei0M4agApr03Sv2jpn_?y zM(}n=7`e{?ID=8tCSn}M>g#&LG4Autee$6U))JV<9;`@?5T)Q|ghUM*(TppcX~TZg9@hk_*_C zE%6imPce_mXQcZH*I*MQdFYTeJS32gFe0cKn&sa~Ctm^F?d;(#v8zuK5{{uQtdb^B z=%O4%&~m+Ug&E)X#fw37=a}C#jcJh+d12dk?7)@bQF|f?1P9L;O$c#EUt>h!?tLkB zZEYc8VGmq!I2temgS>RT*IWJ%3CquI-CE)LaaSi%@=mdmWp#=G)wMK)G}wW- z^yH@r2pDQ>|D2vCq9>?e%HKQpk50UuTB=|s`}Laqy8=0Z498>8RUG;J-=Jlbet@4Q zeLzTP7Irk(pp4m8=*%F0(H|6|w# zSqm59GKt)_v~4PV9N(}FT#+WHz$-20|1prTrEi56)I--^Oejg9X${M7#PYn7rpK09C5k+LSta z^xVIe^r=w7I0gt9Bp#$9M@9l|w)#!I{)G#$*h4bK-V8#(y#2`a0EiFW2zZsB=CKt2 zBhvjKLxcgpYScq+)#Gf%!i|#lU2>%m2@+2T@2&cOsQM0YF5B>JZL*VukO~!1W_A>j zPbR6$dFTdw`?&rR*ah~UO zU1}dBj-EcPjpzod1N5yzjPmW7=$XV26Y#L**Q7DebEPU6}Ax8v9+aTb8AyHXAFylrN^eXLvl=@ zy-z}3i~I(%3`B_t-AXYZzR%&{Zw~}{YoQ}9^@%@}RS#V^u~9pyk#+6kvzo_@*+e6d zXy}3jLRQsYjT~1Vhi|~)B+>noE-Wc>(naUDd`<-6Ozk+3bNq@pI?Ih;FLR>UJxT^a zPt}o+zCefzFdf$e#*cbI;HridchI2?2Nyr%?@uXhcJ{-CoByK) zfF9z~v01z)Bzkx;D+^<)(T;S#?e37Wj+&y(SN)QDXYSAa)#+^prOav5>vEB-wj-ks zi8K*KD@UENUhq@sgy_|PLD+zBDxqatxTe_Y=}$^S9opUcZAbd)&E;spE8_chIy^;t zfvGyd!(RyUwt_F&1o7u#B7!Oqpd%c_&W8^O0FlARn>%hPy-rFRMKp^L`NTi8k&~PI zCDnckimLuQfMKha?m9Uw&CX(qdnV+I+FL7sjaOI*#bJx2|!rrMI{)Hp{fR# zWehEjQ9asy$U$WM*LeN@Xm>4rE!Di~#*#7j#9U7~zXR*sMfY^Bz3|w^QhIJ-#_|xz zY0y63>*@$Y-|`;sTsgA8Dt>fq{Z<-l{DO?DGUl8wd1&lp^*W_+MM1Q>W|o5S@L2mN zG({ZyqtiT4DEoH@e_VN0tKqJ7PrZ$<9Lu=5OE{pk!J}iFqKv5hq+G17zJBD+d0?D=d&zoqFR%9#&rsiTsOole<;&($&pMmUwP-Qia!%w{ z1ugA^1_Big1<+76?Ray0`{6<=>5^(7QLRW>o6h{tIQBeV-LNNU6*Y*z|AMRbs zu}#~xYS&Z?h@j<_N{r)vU(#|vb>Q|lKMh7b*Zc$0WxVBr;=KoN(!_AT=bjoB5t&um zKf(SvGZVsu+s4L8s@x$8oArz_e1R=&WYwl{?S(a~zvT7TPle8(skj!vOwtVg}aV z4%MSnP_SUS&h?H|s31^ND@1$Nw-P$4W(c}Kb`Y}y(t-1^i8S32$wGK#{FmJ20_+3w z;zs$;&ZdaN@B@q^%*Fw(qYJ;}?_ZCbt7Q5YRybTH+j|@V9aa}B4|5E>5KL1E-2=L_tw;5-=%n zeSHWaTDo2xzl?^K{7@{wJ-|z&^gcq&1#P0@8X@w*zb(zo+(A#v@NiMXGOxY1)IQ*f z?>IU#@fv@BuwxepQbbB0kL|k_fKe}Ix3N%g$uv>8T_0}8e`U6R9JhNm)t5Ed-mr(B z47bYduxV>j>ZZWk}v6}#@;+d1|(7qdY ziouR}E5PBPrcvqO1hfsK2yf)|^eM7|`yknX-jvaP*h_YpFsu<>{a_L>VEH8m5MR0C zlhXO=mN(|zxw#b~u|g*Zu(}6m`fNK3j4Jo{Pxu|&wd*lnmVUk+N;r*SGT~|P5+s;98g#Dn^^%xi8!73j-yQo;NzLk2l;$Qn zv=&rczAQ2!(pOy|fWM##BhwA0yWd)#BC5eBX#h+Dv8FMiyD)HGaUmeT5UM6h^@F8M z+J%iNn}N}>^Ru(7A0uSr`~cR}yj>2rId$^n!gOD>i2f&|O7F=x(6t*Ftqh0TG8F5z zHH^~5=RF>e`G~~g!bDP98W2Z}dA{>Jq}L+SqiHR+ z@PuUmZ-jKn{ydh~TfDd34yLa}pCgEF{{2u3&XV+MU7#O4vYwUZ! z2RAqnGkFyE*nl04P^S&?3Akax^e;jt4!(b|LoUJ{Y#5N-G}4GaVX_HRU59Jv_dX^BVHV9N8%bfutP!)Orgn|9 zI;!+c{a z$hWhb`|@xXV-N%fXE->%wX_I;lK44P;xZ2rVLbxS?rvy)-@(WsX#G)N@9g9xfzB)yX~rkG^+PN?hpnU7$svxP59pN}`~Co&Du z*KgjSxh*bDSQVn^-^lbJKto*ZY;WJx(lRuA563*N(F`EADAYhOCx8^u;_RQz!+`;D zkGhotw^d%&ijI!ZapUTsQxG!2a;AUmA{<&_VQgjezcVN3yLt2@z@*^az?_|zCDGe) zK#OP+H8gTcN>extM)`#ojy`+&5^F^}74=`8K~F0(PvBH%xVSXZv}vJB!o&fR-H)Ix zg0>YCCh_`loKeAGxUQL@k8F)vnpwi_ZE&z4GIZ%@7+wz66Tk_h1K?iJ4k3||)`o^s z#Pkww_uxlFDJTjKa{Zxb=*62qNK1 zt#&YTgx2N>LjT;|gE|Pgo)RqhKlkHB1%WAypkQa7L8%8ayklNu@HsfiWpk_-pOOKm z!f@*Y)-@yZKn*dHqS5K=#pQ>Z#5+25AO}IBBh3^I)kJDWiAAA#7NRuJ#DwPK7>SO< z&^5~46YX<6TmvmxCkewe=7pq?mtKjB99Ksp)Ri8A@} z$5eBOrom$oss;exLl*{833HU$+1cNPY|Q=Sfvy%5BUTvp9~S~b=|yF4KM%E)IlzVo5wYQ^Ti*~!Ve?zFgncP;30Q&$1_#nrs1_3Dk>InTR^t)0Wk`8^CgrU z5E@_%E2f14To3&EC0CNLeJ(h2bjt@^x!GvO4`je_682NF$V(}a(68xU3I^(SYq~@2 z>_r8+vZtqKqXL|>64SL+t_SrGJiqSD%EjRt8X19BF(Dg3O&&M@&ISGgWJ3*n) zRdnpcloAkV1WxkRD?FchQ#hfq6FymoPJE0h{FzeINn6M%!XuK;pC4@`so<#KN$Poq zJ}sv(?$xX7z&3$}!!9FNL}b_Ew0xR}CsD)jAPQ^nc^wjBTNu9c0^NflS0agvs(t5I z(qY9`?Bs4rdts`PyJvw^e#jr*qr z$BQ1qd=Tam*P38(6V??ghj+Vw_an50B}bc4cO#+)b;R4fdsoO-s&EN2QCwoVvfsXB zZ6vktujhR8eEgLcZ(ihf+2oEJF1AP-$hcn49F6oSwnvQu0FyJ?S?IGrGBT2(_2~~z zkd>fL_uYRk8`DA_<>DLP!KQafWhq`GL)Y3Qs3wCvdYu{4P z(<_D^5<%NR=WGA1B2n~S60Xsb0}2Pc7mu`>wKOnaq)|A~B^;I00DTI97C@%~IaJxe z2;N_wIx`hR6w`D~?8C{m=)CeBqeo`+Fr=d4(9C|;tkhkz`zn~qO3nDgE*v$>8jqQf zlK#FtxL!Z)&T(Ds;6z56C<$vtUteE+eFmcLf7I@6m|`dc{=C>vBtpwIx@(4h#_!)3 z27Gzs)S^?8Yptwv_wua1WTgk43J<^b?fW$g9I4SqvX~?a?JLWD-oO8|fl-I48AU}K z2wr#ZltM2A-nHO_0Du~S;D%BvJvnGGqrPaB1T$oYKT0KWUvW{m(j)k#L!5@?H%UmbKUDF zrRC5Xd)*srN6@uxh{?iphFo*BJ2r- zL&!9IL{I+r-4B!>?>>~3JIz(Xna-)tP!d!=@=WxQQL>Fo{k*Z_Yyqm9NqgE)% zUsl|cSl0EWOa9yQ+MB+d%+@z15#{+zOj%olQUr*KT90fr`T)y;(n1gdNSGhAe(S%p zwKkCf8S%!38<lwe}sh|*6Bz}dm zOhgtrIZkJ=9X&&JPj>OQ65etoS1vGdZQN!4WV9v zj*f%tLq^8(+#DJRsl#gm4+HUSVr$FOtrJIBn7R3RR4`|o)-%I3@7w2X68M0ySsJ3u z{`8zo^CO^B0B`=h+^Ky!gMC`1^Ln!Tf}}16-;e(*I@yA^|Bbr zV-gYw`n-a}%>IZ>wQk&?XJAN4PgkM^7Ms~&B~m;qsfwHg)X!f~99{uXiy{F+^N%#$ z{6MPDh%;eWFyvMNV#0+3+#y}1p4)(jGHzr(r3!re*6h|TdobRBvq6GEp9kI|We8Ph zSgmy+6aGr!7R?~xlu+Om5O5(9P1y*OCxABf_V)Va)K^#AIXkyO9mLO%(XpiDbkmOH@`e!@mMhgSW)}p2^BzORUIAIscvCG9V=CYvoVwW^Ew6Xo)5ik zl9DqDc(yJ62Hv1XtD)Hm)|P>Z9R_`2cP7?WCQ?*VJeD{1Mlxot&JI@uUb^euN{g~L zRFg>Z5i6-6RYM`zJLY(i$tPzn)w3EQU)y7`1t(M{UWcexwh}@Rrgjvjd`X zVhV}`B}7`l`%3qAa7up%F^D7{8q2GZ4DgN^`K_4@RavH{R{)@cnN>H6L`Mzbtk0i8 zQomoiZXJZf22K(bj6{u4ZKSB?N?pw7&vwX5aYJD&3LuaXfC*W5di^EzUb}GlvB1Ze zU1P`lOtV+VTZU5yeEx99>(A_;SGjrW-k7Tk{k^g8is414bc&ZUL8)D8rOMD#YUh}0G-F%;1#2LsIS0b9^a z8GukhFdXW7+kSNj`rx0e8eAYg!U>Luj6^U~>TuJGO8TCdKEyx~5xT16AlL=1J1-Ga z6Nhzm2mc(xyl_i%^H(O{?52Cgv9tH=c>>dde+B!_ZBSAaS_rQ~bfHjcC#lFWRa#Y5 z+9rTcEW_etS4bIL%;RGp#fCg=yHxx<#j3^MfO2~p_+h@=>gShr>kEC9k{iGO{uM(f zfmzu-L}@4a_*D5B7q2(}+JU26b^wLrpl4CI1h7wypJ7gXgLU@Rc6X-<7v`{F%h5fJ5_KaUQd5)dnEfvk-zac6 zrCxXQEDW$c_KY-|cfJ^9YgR9Fo&YWjIQzfCARLM^UyhY`Jz%SDC&Dk>M%~vG?a0y+Hcf)-CILH!GD@?9K+ox1phclYx_D zeJqA#-A|UL*5x*~x|tcKy}?Ws{kl4oHCEz zJKwhx%i%pn{{G!~(vb=i3=$90NQ9;&n%TA{T=16I5bwl^qyOFNGr9v>4W~}YpRPR@ zM)T*;fie0H(#?BfQFqoQ z&;6Ob2R{i~ybzOe5P^Iw3jL&|qk}$xB0@qT1mYAsuKB+d-{74g$Nt*cmC5YhE}ir>ty%B43zefOzXqj!RxG21v;I@%nqlh=RzCHW^6VoPO@{b)>z^oeQDk?6a zoFSpA?B-cu!hE2K-QC?qBDpy@oT0JUyUIg&NGj5>Q58D9sxSddbTMO{I(Z>tW#`tW z^YSj$T^IQ-Dh6FGA}eBF2#q?i43Sw~JoCr>PnwI-8*OEu` z)YIl~85>->63%7~4dP3#Pmzqt<|0ibq3}l6x5k)j^73PVK@Td38H@rmQbdLIHE8*y zfarayfNzUz4jI`))CmmAuZ+{Hp;G>eT)~o^9$Gizs*e&9rXb1 z1ZMw$^TD*LrY6;HR(S5*%$cb&>agRFzU`Uz=^1kUw!Bo)_2=bi)1|>ne_cvOUbP*U z{yw8nex~Kjq`+h)Q*+|j|GkT^++GcnNuSl}-f|H$vN*L3r02X?N?A{>sSCBfm&cl( z^r}TgoBPv=#*u>hDZ|1=+65g>h~o%bGQ{*ry#|H$smg%0){U;jJ<64MI$utoaI3R7 zG?g?pmD-AP*XPSda38N7m;7Tgzx6c&YVQeo`JoPLF{NC^BV8QDnV!2N#kXD}btf{4H_r0-zGf;>zjbRnx-6{hlV+8OzLOZ0 z=TQXkac!7x&6St=JKVJ|;;sl^$4xuYOaEb!DDp~rOlikr#@zPe`}6bs;{kc)tH$N` zDRgd?REd1=WdCjwSy@n*cg@yxn^?qkgNfXUb+_3wj^91CC5%Cb4hGW;UUQ7eedw%x zBkXBb6@UXrW5F@6Q7pf4|65hzEn{;Ke zhSbgvo}Mr}5SM+~zm-|Qq_}YQmeh9iKj=@ekFgX{_v|nMMl0d>X-PwWb&{M z+hLYlTLC5xt$M}(7Oj90Aiy7r9YhlQfW9gk@wE@EzhLPzEy~-qgJ>lWJ{>)mQNO=; z2o4Tg8zvBh6nP5ZAJ8ZeS-`hy-wQ!AZVa zcA(wz#{Xym+S}jOn&ieuBXiBm+wO>a{PiY$RIbSfco~06augzNciH4VXDxh9Mt-+ zvFWzWpb$b^Rolu31i&bU=_a)^kor1nq{oOPr{Lfo&!JZ}y0jR0tYS1U57y}PX$w@6 zl_?;7JOp_ks!xHj!u83@$Yjqrp(N+t@pq1ynuv9Qt)j;Ubn8~vvZ0=kmV=K_QmTVW z96*X5lG8F9V8C8Gj=K_o-UfPBkWoYp&)GOQY|(Nbj2CKC$WsU;GcrSPA~e!?ZQv+g zGK-(4A|_^qggOFBG0+GktPpv_q+fn{BsSgW_#0c!=1 zLEdYDa`a*Zp>Tfaoc#9cF#M_+zc!>~tgzXqd3iq<6lk}fNAQW_Qt@&ErSu@@>AyF} z(F*VjUBN&`GW)m1jN`6=Fq9!X>;k2PSRN5CK>Ehh&?iIGr1}j~9ttwDtWTc+#OI+) zSZL@CXud_sym%4Lz`rmaKFohu$;#@(g`-qeHO9Q?`5_H0QV#4> zplYZaF)tt84uLsGM>y{xB-rX`2pAZ6AQ;88zU*oEUZNPw@?%r@ub!&9`kT?M2hDeJ zI&R-)W4(k6X~{4lBD$`#4saO-JXF#^XHag0wkbx;{-}PD5>S$tr=F7eZuAMUb*CxU zyB(_Ma^1*3;60&v=e2J*W2hFf974MkT*~ji*DU}T{Z77a|0zc<$W(5g^-4TA?oJ?* z#}SsRX}w3G@{k>x|DlCrQXs^p0Pq7vTCu01>Bx|3n0@i0;tt^?TZz+1*FDw!qyc^* z@9n=?$qt8rUBmAx;=0)NWvb&^XnFy8nF!h-&}o2F>32ATqhV6e14RP>j?UAg>`BSV zZ-Rq;f}tD|(i+uE!XB2AM;r90D1Dth|8#BEl$QT}EdX}hW?2(xjg)Ihm87I%rO<#!u6nixkKAOc5^a_)Sy8ia<;Qs6|8 zBUVryBYbrhTM_hx_-Zt*VmW{33m~JWCO$-J;Fiyyf19EWp%IXfM5RbX_q3S7Ix=6n zHqJRK+a(5J6b=T!$U|7}l$0p&8_05y;+5@%RRM}fws!yp#jQkrBVW&D*5cpdOx|Vs7cm)8h=zlql3f>UjnfxY6}r0!8}03#^Hs-f{AYi_u>FehEaXC z?h-^m54`u;(jAyn^!_(ARNaLQCM^eHZE^7?3^qDJR5B5K@&)e(w#;Mqo=}N+;|Gyf zL(~D^1yhJ96AFKTj3HELRPhyzF~8i+J$v_}Dz!!csvD*2Kop^N3bNQFM}b^1K*kLtr_RVWOqISQ-)Ecg%Tl1 zyI-U30{&X}naY;#9s;YdbDh5`CJs$HUmr&R5+=mg;!-7T?&(K^6dR9Uq4S21xDo_dN zxs2m)C0N*kaHBzyc=t|1j*5>pF^G;Mu!PuaTyE3KXkC(7sDeRPf>v6{iQ=;1wn{gb zbRf9^B6IKFdDcN_1R)+rTbmPJC;-`W*s)d*pT)>$kN94*d zuINY?W^qkZ6Kzx2fldN-^mse6R)&4?@8hroY}d$HygFzSp`BP;Uxzi=25adiQ92Z2 zpWjWl%_Ay`&IO-w+(MU{IbGq8yaEI)ThY+h8tuR!xPj^_!Ras#nDwyTX#?3}tMl-! z86|7gmnrFm>4Y?C%9HUeuue0$~7( ztHTQv2tD88J-4@-$Dseh>u`eL1(oao*gkhy!O5FEil4iU9J~uveSG#Am(Cr20n!;N z1Kj^7tq+upZs+g(x9SgUc4Es1!AnC&oqP*r$qj)<_rR9?)mP*GJZ_Wd?w zhoBJ^jycGdOa&Z#OnCTVK} zN00tSpiGdCKVcOxf#pDK{Z6$!jQ;$87rY<@eKir$8D2CmKs+QaE-o0(L`RqS;e#6% zHl@0w!v%mM5Qy$u*+epGpWld}Y({5GT%EeY}QHPMm=P@F*+4Xp-vF)9uBKxFxS9_!GsjKJ(6-i<~HhPO53 z$LPv*@l57o7I#Ssw^UUY)D;jUq_ zSc2{Ib@x6-^k^h4r>DoHJ~}-OhsV)rg`&G76qi?)jOGarhwvGtFawc zddUvA=L9Lj;2{4=X{wE;zlyJpA=bj+Xb$;iZj_ohgTV zLN(QNDrjb|1}WD0i)XOSdz3cc_t+f%7VcjpqVhBKw*1GEsqIDCR6n(r*br|)vF@Ws zABpHkqCpTKm$wckXEK~zYnF~@yi{w^JZDCh{y;Rducq(mrfg#Nw_l;PVxLr>CwjOo z+>&vBa^dJT!_*Du3eQM~2nmsmLq4aT-JmPx77@}`k^cNr^IJS$Na&fav&QA+Mc$H^ zwr9?7pVN7y_cL{pt!)C(K&yB!&*k>fT^pmt>9_U6JxxpU!(5Vdl0Kdl;koZpF*o?j zIAxzF>Gqq)8Y=280xlA5?oqU2w;Jf@xK;<^{3+Xxa5Jn5Etj}lUwBk|)BavWM82?} zNgiPziU>d`BmrI5=7}jP=;mq)1SWb5T}7>&?v1*h9jl2CjOWbAxJHtI7d3r$dM}?% zXTkhv_h|NYOXtqXh+F)LN$F-^BlpZt*HALkb=T-w3J z7`SyT@~RhZ^v>;@X5KhA><{?pu!Ahq^rlV?Ak?kvTdv;Ik-g6MjpYASq|!J`_7!)! z2}H^&pHl3wEN#oq<$PU7=D{SkyrfGi;Cn+hQ(|2>OIKBy>pj=)iKetJt6Z0H7rWJN z+E<*1x^K)_RrB4>v70ZqeLh+=`dpLaW%H3$<2jmLdmaZC1cuw%s>qlBP5HZ3z3G4c z$QWB&>c^ZrTal~tHubIoleFe*I|My5HfPt-r7AA=&$iVYo%##|hLUF0KKtim2ZR&4 zpI6Xu9@nJMU=&laJi%)0Qh`K!?u9Y15k-HY+7f~FC-tNjJ{l_Kzw!d^LSnpIWS@nc zW%KO#2{vud=zogFPvzWR*zIY0a>aK9=Et8mawIH8RtMiyXgGoWxN&A9xs#kyXd!6K zrE2V|s}u8E2D4b3PhX68JgyrB-}(FdU!ie;i%&ZLIOk(#@M8TdH7Nb4jEQAxwtVAI8B z?-#AiJ!X?ig^?o>b?!@~H=^5IY#h_mKcvs7smf-C=w|H8rwq$)YhQ)T;I4{ClpU+p|AmOiDF}B(oboQb%lxt$t#NbD)^e^G?qZa@gIUx%U zjE>$;b`AyXgH%T6*BrusgqtkZRU`A>Wb~g=13gX{vHSIFZSn5iM3d9HOUJ{QdK?rihdXXZ7i@dPQS(6Z0Qig@ZJH4OzxnyqvrwtUSI3ORuK+ zX2&me9qlrt^A3&Va}8P^-Bee<@s3o+{HFztbW$oY>#5tP2voyWu`!0f7ER?QQL{zC zWUHiD$4dmkNDLpqTKP;I{KQq|G5&(cr+TX7aG|fJk7bzXFZ$0(hTU=4{=TV}lDfLD zJ;lT7bx|;j~mO>f|5`P zhKB5UY-dVWhr?0m;E_cise~zU^AL?l2pk|XW6AFBtX{h!kfZHA?j~DGFV7~gP!{4< zOd=ZY=JYFDKJY-`frVlAed;Zm@_g|!3i0&6-b7rHmXlKa3Juk9{>y_kwJzclix=KJ zB;C4k;ml)obpy8YAZq<%zez5x6 z{WFyRT!GKperY*FYgWI8mqj9WkW2M$6p_}^)g?wqzPUI4^I!TgYDVCXf3&x+ARr_3 zQUrdm_(&i9lb<}PMC5&#OcqKRgoO8ihpwzVRj2}t1^EV*G(@z_kc<3Qzr=)ILV9|Q zfk=-5a{;oVk_K?0cH@RTu{;t+AD{ae$zp7LqJ@!7NC-XX5&`$T69;_@1oi;YXn@uM zE)hTd>Qj@~BEys4>fI>`&^$GORNy{xszBm722E$b!v40)1m*HVO=6ljQwCX;dx*ol(_0=h5 zrtgUs{WJq}`Sv#TuWnaw883S9`I$WJJD_qvMSW5Io&UQXjsrW@?Kly2o{9RE(Nm-cPA$Yo0#(s638h;>ScIvGt3( zx3lh51}^SHr2j4P1HuwpK`ekx2|?^JFHBwb8IIx?5PF#2`{}T3oe_#o3d4c&zyuCG z`_k6SCCb8yx(l@Vl*ymfeJy=u6nrLp-kf+t%nD(j#GJd=ko(|zgZTpD4(VrML1Cln zm5!BOR5J21jUL8tdHL3A--3de^%{si7ohyBj3eimT_xs0OVvr0btn_IZJ zTo&?rtsg6JnJz6ZZM+$;g2lfmJA#BuZ`b3HjXrx_F!oAweDjrwEskVO-Sug21>&(Y zeL7n2c`}sU|HVjpWXQ0dV?rxvP2^eB(#T|JXk>z4{P+QFot~7`afK?d`;bm?!q0GU zn1b!aA2b`=_}BsA3>*%6L!p5)IySE%)Vi)(j9HUOA^R}tbrHY?Fjg9AAlVSv2BJY2 z>@AiRKp?M(NP(X$IZ>KrP-{}EZF;bMwW!qy_+~B<1&2>Fl#7~E(OPrU^Z9+b()qPF8FPnoU%W)zCtyq>UE zvu77|zVIP4lt+&6ruW^_)vKozsWoWZXj2tD-TVmM_#Y_kL%v%9{V9Y_XmH1B3~>jr zTZLdQv>PWhBZT4wY6-Rz3^#ZaN=iJ?=LCom*P)+~1)v@6NS(l(e=ra^)a|;WWeh(9 zT0S~p|JGhQ#=)@+{WYLT^k{~fDx}irxk(dI%yAuyoUErh^8;}#t2?(i^zI3*r{Bq+ zLckdxRIGgL(ufS{>r>G^`PZD(m!d{o6PCl%zo;Db8f+W9T;ls-SVPEc_}9-Ny~V<$ z?vvvS(w%!y$Wojj&RPLtG4g|G*}}KV1>etCJGM@5lCato_oSERbJrZ&ldv1U{f+4l z%{!+r32_e22*=XL23rJ23wbI3+Mp4g8~@&$SBx5veMw|gXKYPY_6Y1Tv@J{Oy)u3U zv3#8VH_m||z1pJcekdG7K8rBlXWsXR@|nq3FNT`Q{dL5{q$|yTW);ORNXuQhamArG zag*(M!cmjfv>S|1t={%J7ntQI`y{7F*xamMFU>v?d_sc9ZR*{GH1RnNUcqZ;&##T2 zR9F9*N?uExJ!QBlzf9nLMh{AOnzB838G}05S`!*+Y(}(f_y`RO3IcccRA%5^>b-5-Z@>!u-8{4x#1}O=xEBi4jP>4lbh66^N&o z+oxxJXIvw;+p|Mb`7es(iYzNuhVvX)p)afu{yB2L%jo=9sv`A+}P^+_YqwS_f*$v7WPiAe_sx@ z6muS~4V_mU)@;^1;_6t_S7s1=N`W{O+8&2F^N^b%9h)X2ZG+KQM6!GB#NSZN3(iPT zd43V7Xi=@_D>*4~{`mQOx@TDjJ*M1Ci6uGo5@CE!pQqL2%NW)eVZM8QF28<-hJU`o zrldH3_-h!B00QG%q_>inEL1G?*Ys=2B!8QKfgv)SGHhjNb&ZWEi5FiKTR*jwI;_DFeBwU+z5HdT<^A)4hShIV!#L$m zpLla(^UYRUR!P&|RC1f)9S5XK{MSl8=FHSph@LsJQkdfWx}4qehnai>+tRmbx?rBO zH=rUA(ze!JsV{pJwp0C7%j@SHOpZsMxC%^t?h+8TvOAU7jKhDWiZ<#&ZnKp+r~AJd ztW3lN%Le!nFbAOuF%g|~@oBz`G6ffx{9p}OwzHvE8&%PB2SEH@Yn)LSXx{CqGcxag zgdITDOpkLPh+F7O4*AOHQ4mE|E|fHRFCAXH{EOwT%-xo53xxhqRW$CsD$#KcF)VV}B@9EA&(YZ1YN)Qq!C`8rttCY%Z7Js)i<~P0)ex*WoN?E)fDJB1He#!Y& zk9P@CT2hJ+{hlh`cE2rGRqE+@R_!bV5*8*aQ^h@iTGmf39``ywAySIsJUK@y){5)j z&b{ZVl%CvVIUUqd-Bx9=&N-P;*x|hWW6N8{l>Rh>3JOF=jX=d9Q3o?m0czIO7|Kl;BXV^?IOHW)Dfar73ph@cOY=I zxPtu@@hZ`d0iXTOd#@@hgIKg~kOepQ_2%H#0uQnS!Q4yV31LS!tTZ2 zUQIwT2SxP(7irRf!+q#-_>XdJ*n8)QfZV}^)*X@^Fsj(np`vR z!$luP`4cFym5pWJkI$w~$ko=oYwbPe1+^lYEu;2Yr6U!j+1#Aq4RQvef_$JxIUjPo zqrCHWJ@o&cQWIt=rs*($nQ#j$(r+K`iTnYXJ+N)4*->J4n3)-A1jOg1nar&j1{ohd zAg*FMcn}SX^PonM6@}UjY|XRh&&Nn< zkJ8X=DaQWVwQCwgP^2w+rvU;+ zHm(to&)>;OG_-HZG*wQiuBfPhU_&G)H@6hSHNmK>sRg0!AUbN0u=01V3tWb9zW>jk zIn?sc&Dnv=fXpAA*TDroyg+sEAfc;?V(qeTCDxYzJ{e*8@Humd^UN7qXRj$Uco<&=_H zj$%X&L$kY!yz?p7Qx`OEo_ZEc`s`>LSK1?0!w*(9!8d(1T4u*puBe_EJs^8UmS5WP zhhDE*k&Ei8Y}TbGX+|H6xx^H?6}gi+={pBJc~|O5qZO{mrN}3<1)XqfPgJMmJQT_H zH&kg9M-Wc-sz@dqtK(Hg_aoM`HBSN+UZ>`_tj(?2aS0n5THLSz<}su8h}|&GQ1ynv z>W7)oP@hmS1^p~?MNJ7DL zr6K36D;8fK?h0qMVTGiLCU~S}a8-BNMPufLlWja79=kXX)3zL% z-7SWwb^ca8T%7xYtZ87qm463!7z=%>=+aD5d0A8Uc=v4V0DvWi_X0kr<+CqR?R+8iX~Py%&5_0BW@$} zbmr9kZrWhCrG4WpL)#~(Umd)d@={atTWZtmHc{xe-WLpEj5wCzf!2Sb3wFB{yQ1e)xl6Ua8%7u*9>Mv3UB)C>QZk5AzijW%qiv1ckx3b{q$k zKfKTthNKYA#VY_%DgIrMtmEkY=lmBtuXoK>PjJ2?`M_XPJNco@vZn1>&PE_*^TqlB z6jyl#G=FZc?Drk%jat7qH?X&fh#+qgVfcVPq(nWP5auP{PA+Q_(bpR+lpAN_yrQqz z`+9=|;ELD|b>#W3~n=dQ|_b5q7WtIdVE4VNWf zLg^PhDET9~+WbzxsppYe$$6m3d;8zNd7piU>#E3n)JU=8p^1Z9`yCkEqh`hQgnMQp z?xf_zr^kP_d=d2gJ`HLb4!Rf4VCw@1C%I4F=ea#c*?i&aZ`UJ#@Ls_q5e?1`qu?q8H$?;j7Pa^bw_NuX*l#L{mN`M^43|iv7EHGD5!`^#5?dxvbw~L_<5u za(`V_zdEF42hAasGqIMr_ zJ>s?n*SzBQ{Nry= zUhoOu`r}af++zL-%jNlcH-JdwWujD`F+=4D{GLbgj$NhjzsMBQ{N|*bVBi$C= z0J1vbL&3XEcZa9EMLAG*^}dwT@2?P>7g7=`$z!trlknsPya;HhX)v1}?RLpe=2Jya zh^F8ccCU@)O3!V%wc`!KXFc_|5Q9^cin&P)ZFq-p%AXck+xiVS;EEMnWAoFT4^AdB z?5rnJc@-3v`dUKFyb{>rWYnppqYjDrxzW)}3P^Z*Y+d(`dzk#tFw`)b|J`kqp9fFS zMsSP52A41`OnQ^=zI11>Fj<{F=7*ndtM*`gGsI{lOz_S2O|=RQ8ZlX`_Ic{L~57_(0jUpgxv1(}+l~!{+(F zM>gmDUF*e{Yx0+epZ;jGuNPB5R*PG6>Im?iBI*qDKbwF6u zAxCX%t7DnP_nuXeO%aumQS|fIJ2|Y2@@8L^_%D3yNO;M<@6F@e&mULEeu}%^Ie2^e zcJ|o)bw~3Xw#^y$Za&F)oIz!z)E?2MToR@CI`Ux93AAC%Vkx-)z35h+LY`VvVA`*x z(5?E7shR05{uO17$B$3!yF#g(Qfj;y5!w9tt65(6J(tO`>|Mos6TA`^W^UTXO)#}7 zmc?H;KPXK-e#C;=+F>FjF5JGiI4Z(EGo;DjrJaA+0e%^6fwyF(q8p-qehDoN<1uzC zJzx4lN1UVSMdm{v*EeUi-ZK-U&=+oR?`>aQmHJVu*H9f?eNmG#dt67kEkgfwvB~vq z87U>;|)X7aRdV|3&4#Vv7Tsli94Ym&z|UwNi2YX4X~V5(zkZ`U7V z_dTg*)Fl&}*|u3HcvSKJn6<;{_th2&XNs@eTHfM3llo?yIG1>y-PzAoPbbo4QF}t* z=SYtRg+YgK#ksd+jCIyCjx(FTyZ6;EdFIR~MJ(5q2>r4(mTdC~eli@)*u^;FRqJB9 zAewWfD~e@$a<2Qqh>54TsG(}vyDi_S7j7!|N2haiU)t2UEZ?`QWBbV$;;FMV**jSL z%WFdV8I8Sidq;bIN4`LgQ2I~3v_jJ#bG1* zxWkL{N$;RV#;*SVzrMy3t7yV6g>W(aOHEpab zjoi{HOYkzdv}sg1Lwn}wA=Zk*{OJTklQmSyz*M_*Vfi4689(1 zW}V+4eMp zms9mFLYvg$qUgI=KPRE%Xwj1RTEfrCf6K6Mn=y6Bcp~eB;g7m^k%hj_3Oj;dr!}=d z_$2D%MELEtkkT#nnhcxfxmvwzV`sefzBa5FrXCv_+pUGd->5G~w1^%=3%vOwS#?p* zddoj|{S20?R8(17(7TkXRv(+Rc zJ8aCnJfEDI!GG*)lWlX^=Zf3e*4dVy+q#3d9Fo_6#;RLJ`?(9+>kq%at}GF~+LT4`bZAh2jROkC=|^!}uQ_j(PO2}( zZCvi@-gm=gXoV9$?0;E|+e_(a*;~~9$#2FPvwvGpZ@P8Q zTPkIo%GbBkDQLc-%;KEpGIhm}Tmo!8agjTCEIH$#}s&F#e(CmCY-mFvHDOp3!)T*RuOw z=-U}TZ@Cx*=fqoa+zanIJHOw4WI9yRvwlOW_wnb{Oj5@Ewc&yhJs-1gPEbX&+Bn(t zy>T}^OV2*aPRy#$vULB~%lO%@DrJg@4+pCsJ$-a@OJoj6-;=^@DFjPozHyd)hzJlzyx5HgD+XY}|-jU7P*z)B568Cu_^E z8mT|x3!JmZ#*6gkcV_Jnyb|u1KT$KJEF<{_yb70l$N8S~2K)Maf_<75lCgNWYxDF0 zqX}M-n+v^x#ls=SO8Cb=`qc8Fjp?^@41MgZqd6& z&btyfo`q9j=KUIVJha!pxm@>j?~)^l2W;)2WuJ3MA|Oi=G_< z9qxK-?DskLv-)Jv<&Nu^KB+5cG%Rr)?s*us>&)>$s*!;4*714Ak;L6f)Y5KY%VQVn zx%GL>T0UP%{$=jyox$w!W%(ha;z38wg8U;pUjCo<&ODsTweA1fJ=u0`LuDrb8l6MJHguQv!jWmL-hN~QxZVr9^GIQmdc&B4w?&v`8 zCkN~L^!L%bk9Enu^sJu>Mp$=;>^fKmbx0^I3T4%@&zO-@p2I zPXv1Y``0hA9Y$2hFjVV@;^cZa8LK7Qq#qoab>YJQx91-l2z5p{!i9p@tvMG$ezxZy zjsg&GeQo^n9yg3iX8!fVeOOV5YY&wOti*Ni_)qw3;(EtJJ&*lHujF!nkQf-Z`~A>h zuanlKlBmscABs({WtaGd6KL!bI6b@>ZHfdFIatvgAn>9TC>}^Fee68Jij-?tt{4JJ z(?vp0_uoqxlT#Fm3TWgvBnQHf3axm4{{CkMVF!aEc;hqCL!Ivk0}qrqoH92sUH6<~ zA$m%2Sp+j-z=-R46`}&ZY>8Blrw#>08~26209t`KzV5`n3e+I3cOLy2gFvFn5-sG! zWoS+)ADF&WT1%*G+3X+ZO2e;N-2Cy0t_u44%_x|_^=p2-Lka~1UOgEU9bnRuFo-G= zx=xkP)!rEF?|+V}L&--YjM$+cBUY$m>M^pPaTTZjxTJpb<3M+8l%##6-ec&qyJIJC z1GG&)1`>b#R5P)J6W5;0|E~cjo*QxfUpJ~qJX_*2)R}c5_BBqK6bLCDUGZpE4s+lM z?YWGJ9W^Z}_Z#D3Qq?D8x47vy_tTVOLTIKeS`FG$FWcC?xmQ)iXkuwz;Z}#kci7q6 z`9|LqoQwEsH|E*m(cOmM_TzZHdaK7n2a6-0zf6XN$!+JL=+9PvX;1O{zE3ksn-BeV z=(2E*K^uvWk?Vfhow}IOZxTEnyl+*JZHC7>!>mKUB-6rdWLDcXc-g7E53g>w2fL5p zkI8JpA?@x_ha+Z9a~4+w_{Po`?HV{!M$22d2U#E%&`gk56@Vy1H^r#uR$> z_h_t}2(KfqH}J-r$xV&+O}`$y+QPa#pT#;X+39fr!|cR+l&HEa9*g`liXruuR^?cn zYlC!Es^L{;oKN1Kt2a2}VoUpCAG3?d=ekY)Sz1sMC70*&neyOBmxoN_yXSwpb5ru> zt_}=tjZ#W5Rq?`_Ne=9)ELnH^7Q(N-;AHzzH?7n=YOW*Y51k&~J~D-D@S%Noq`n$D=tpMB{_^gx@Q|_>doJEkscu1bz*N*51y#-TEK&$$Z@g9Z zkBX_IiA$<|qJ2_b4|C{@l`_V<=Ssatd>K_jr&-qp8Rqk6#~#N|#P$YANb;n3UTYp* zTpj8-XqV4vmz|Ssw6jQ)MGH?f$J)x?XnarRA5tE>vr-dn4W=?8n|Vm|9wZy`bMi=V zLk~RMY{~qvrNqdotgQx1tu%4<_{j}!I z0ym>?Uh=DLeOPd2b5?h)8zbdwl5~;*f^&3{%MgG3x&U1;;Pl9v)>z?-SJ0t|p*J9>v&Dfd}u5G67xu{Rc z(Q0?zDKjHjI!Y>Mve36w@02|HPAEA<=gEW61M88qExtKy?ZWo{9BDZQw02rq#MGrg zs`4Y%)>rTRlTy_`ta;==pg*Y7ns2||5)-T}i`2DCq1wk`tXz`awQ?lB!J<>|#pNq27lkS)&Q1+sD}Ge+!uG7SV~ryR~URM=NT2(Wx1~vdenPt!BM3=V%v#-wiioyjSTC^`&7(tKo``b z9el=|licMt?*)w#$7BAIW4L^X+AeAJX!1x6GwHm+(fjcFAi|gJn%3O=OlD?lG@j zo;>ZmkCjqE`!46F)g&;5-m>~PtP44>!rm{3^onZ-x+6LT~Ha}3qsnB zSQ;|TzuzxQuU&rY;%W5fD$slfML#TE67YK*{J7{%bCo_zgROPwrRQRfqNLgHDRiBJ z-BGmk=S5fT=O{K}DedeuA$ucMdgIlA>;dNwBb}FvLPbJZ$62*G2p!+zd15g;78)5o zYCE>nUfq(QN2f%22we-TzxU+xyU=HcRQ#XE746Lw6|?fL3x1yP>3C9z!LD-b0j-Zk zo)z@1KHtqbw)T2OGkjF+7Xg>wCZ%;2ItF4p(yEKKX}K-(umg z(n9dpX@y|H0cwxDR9XGP$qUqkzgCt!>6Aks8btjL+8)LvGlV4?)kD8vYf+HD_1(NXhL zh1z|GgYW`(bezOt&E;jUKrmR_o9A9QU0$ZRE48k+!q7@lSl8aKxo1rark$ zN=b+-dR5(gCcaTwyv&HLZu+xZb6(Rg0xP-RE$tbG>gUZGjQhsV%Qb|mq)>L1FN~)b zu$!J#zJ4tT+8W^FR-w#lLS6*C2pWNoA9CM&A!4WywalgY; z9e6Wec6lcpr)6iuCCB!MNU7X%lfY>ln!^eTR$4(pst{FaYJLQEF_A|2WkXm-_}uhN z16TrvO_q96$+8u5h1?w?sXN&oUEZcOUMS;UFq0L-(U0Y~u)cpTd_t;Ty@^W6b203H zzV7;EUF1(=>*EKODvN_q401!MCuEMM%W^@2d!ziXg<3M$5|RTAZk288Ujk`CVmv~z6pmTJVx&z?Dx zJ!%0^jH+r-P*BZdIWDFNuUhCrukT76N~~jvxS*ct$AR*mg6FM-p~P-u-z|H&{7U@9 z)XZ%4yh{g)Iri3`JWE-XnEbTEt0tJ|%y*Tq!|juK+cP7qLK=Bz8+~bEbxkqiB)_k* zQykSlrZEP=eO3p3Rsq3v1|xeI&?QuHDO9ef5^Xn`Fm$Tg$Vb8504mj}s9F2p$pM zUvD8=K$b&kIvN4(`x%OUT9a+w?73dB*1kGR3zcpoC+ns{FKJxp6#ML%qHqKlo>0ud zEXg8o09tg2(_C|un0u}Kwi2-gL-vQFUX|IcmC964hlNhk?&WySldHO@J{a73G5via zz?F0S(Qer;}BnqO)W27v*vqwkH>M`nH^}Z?>a6ukyD6r9Y(mQ zow_bQ>hqVvn)$ohu>)o#ZSUXTi>Rb%?#?{1cKXY9eX64u)=FOkHa5XckK~z{wl5I9 z0JGdnX0$a`VeV1!87vAque9%m@jos$A3arnBf}-bQq6L+fB(DaefnK)N7pJ%DoeKM zY&Y*TSJ#cf;_4~ef5qk#Y6nT<(P3Fa0=4@O#|!UkkkR5X6!cpd3oKXfI5~c!p8tF9 z{8=##AECbeBLZ)v)XT2q&)NB1_6wq`ntGY)sWx@&>z){B9TrqSmM$SFxr57Roy-LG zX6WeKa(BuEJSUU%)1cXX{qfh{A!R9DL@}%aIQ#w(G6{Ls8L3F^l+Pp1gn%0XOGKn; z#2KI}wC6m2@{JdSa4a#v89;zPGS*S)dSZN&82)V!UYe9 zcK2IZ+PuAAUSk z?zh#?Un;7HP8QvKd^4n8uB_CFW~kGKa`&@;s2_E_GaD!;Ke=%C6`%dBd=mQ_W6$It z+KY1m`PifR6ir=4dCPR+MRsv^*9*z5BmjS=&}*15i1v-S-vgd^T0%kx?89TFn@nE? zMsB4hCxc4`s6l>_EaZ_qzd(4q{xv=XE=(IXGFw<#jX4)X-nX!@P^Y%(=by{JzuMB{ zH4odqF|vZf@P{a?lQ$l7#KC8e5nqO4gGaX}A~z4e=l7TBH$mSC{N2@JHI)bP4E3wI zn4E7DD?=Oi*W*r44Y+)AOD=bY3yS_m_LB~X)DhsP@uy_v)C~qLiH#bo#W$Xle;>~I z(8AOk<*B+^K3%q>Tc}! z+X?73(8cJ#_Cz1%a11S@rWq(d2o_I5{|etP+)>M@J_;%T>_u84l}V-3!KXMLelYYs z5);>M_XG0s-Mh|jIK}>>`oZ+2##&;|h3h)a2$mo4j>CdblCqtX6LMcwRR)Nc)6=5} zLh-ln-gU6E%M}g*QlYv!JNnWXX!qdvZ}Ptckt3Ai3-jgc_U4S&CC7ecR$vd=R8i0U zqgFA&{Gi(6$j%v$(xL=#&Op|HHstBkQ^Ej|2rrYsDI*6$%CkSvB`)*n5#g+3)N&yYl4~4&hx(R(aaF75$Knw}ta4H$y>#!eN zn+oy4#DHNS-bO&0fWa(bd~qc}*^Z7x2TX1;@K^Ab?p~zgsNn67LQ&x=Jf&(U4?pk( zk5BM{&<|2~9@r7Fv9V~dY!n3SfQM(auTP6YDMn!{#R)JFh!4P2j)^fjJH`Bz7B>G> zJqg~Yt!NM8ck8_YFGvWz!O&7{mjKY)#=97eIIxDKUWd#u8#H%}goga01@QNv0f1)+ zyam!!&@Wlp*$Yzl__;wViEbZoE;)&xX9E38RE|`e zoOH)y5kPptIB(XYG%f8iSd4iT`pfeKM8EbLUh3U=w@X}DNE(XqQ?LBDK!s$RCoLfX zaJ_+WW@;)(1;-3vE;@!*C9&D9au>^f#`>F-WCivGg`VGTf!)FIFjW7SisA?PC^|Y+ zbmalqs1gOkc2yM>Xx#tJa0A+Tc)HxdRgWG$lA-D|b-vz7pfRp@Ou{P!;$@y-q9^-rz{CCbtjw>` z?hkj%3x-9{p20HbIGE$$Er0v^6?QK2?$Zgn?f`iUhpI4qJo=Qq)uE0DiPEdL;s*W{ zShxrXc3s7K?YfYKe``I;@IUgF^_~bruC==xW{_nUEAL=7rm5i_1W@9Pn%eP6%WDB} z$QbV|%1KQ8Cq)hgPJ9CZBomq-Gl1oWz#9NWBpo`>85-I+48Oa-4+(bI>d|!;AGAoTtVIsQIXVG~Tbda` znux3&&5&q&2Ezp5n9LI2u+X5y|IgE>35&E?O=kxy2!64-a4nf9sp2ccZ`9|@eWipg zN5K_Fxfq{D=&=QIDRk#Qu4EqR@g)bM$=_$DK}oE1<}XfpN_UK7=`701ISEsS`mV`X z7Q({~Fu~5A{j=Jl7y@Et<#$kFL!RN!f#(6K%)NGYHnz1DM*S1_p$O5*i?;_uJ_77U zXs#hi2ci4Ld^Zh$#MQ}ZVXngw;RoJw$PcJjuM$KL-D6*Vs+eE6Moes(w0IclR4Fdy z%mEh&@&wXlG!EX&9~vH(l9U9&wJ55bc7;nqO6m#82VO^0LtA2-Yyr}Yynnx;gzvTe zQ6TVz{>T@0baX8E^|o|REPNOtHz5b&Ibw{FRbnYc-2f)Orlz}jc!c$M;a`Wa0w4+d zvbh9L;?YnziW5=*AT*&UgXmorKC8qY>LnBrV8A(yJlfD{_OIs@2jVbdDz;YW;{)JF zKSdW09P)t>(wZAcK&g6Z@VIEQodx;Dk-6%g%fTmgWo2x-ay2*cP}~ed&csH zP>@tWM;Ma$(9$9WF{PB0Yh%Khq0R8!Dj0vap_A)h-;bR1iSS~0{sng={a8J6w(ad( zC69B}D1+c!0$Yn%%@Z;*Ksridp~=en_@V_bY{bSfQ7r4|E(a_JERUgAz=JU!9j5D} zhqKjml+Piw!8$!Td8ee^qukU_BUNCgfDw!lg%vEIK5Cu4Y@yw{ZU~Bi5s%z>2{Ho0 zHF)oszip#Bm+GR6U@ZhqeOqg*^MvnUh$c~Ep&PA(SZqYWR04N0ym$kX$;BV1Efcrm z;`R!>!SmFCCyloDZrZnOxM+fTLF}W*fzaoePW05rz);4*;tME)AAGYA+CavVw*L6E zdwi!u5U4X-1orORC$dFORu*0!3vkK`;_Zng2jWH{SIf#eA`}LJ+IvvfVHGB;{2rtq zY)=8D!Zle&(l=jCSF{_M^|0v|VLI~nDbNJ7jYNRE9$g={59=6UWDgX$&;{^&A1v)X zo1(jei_2)j4MYbUw!>ifz>uMH+aWjF1Saj-8DTd;#HQxACW+61aFM+!EHB zmo5zfEF$fQ2}f9*Mx4bw0U?E8(2g!5aFM_e!!I0T-N7Uth5wjy;ddwpKLriG*#$J> zq=K~E;Ajk{E*5~HCJZE)P9vq}Lz{87CjGb$^&6;ukd5GAYO&N&P420Pa3P7c=C?L@iL#=+6>!;_v<4xR8}V9nTJUgswat0!Uh-V z8b8)y_)xU*hpHsDjIlENA{SC%m*d>F?P5_A3LYyPhagoP8R6csqpIf2jVP+wv%Png zr<)R>crwJ8I)aP|Q{E~m(WkCg*ncX#zdSv^@qcmH_6&wFW8?Cj-uV2HaYFixYvwLa z@{mP4A8$0e9scu@ h{hv;Qf4>#0K2`aB4nSZLE&LE$^`Ckwm+S334 From 867b7055617bfc8585c88243946328477359d059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 21 Dec 2025 21:12:06 +0100 Subject: [PATCH 06/33] turbo_dose refdes placement --- gerber/turbo-bot.png | Bin 25708 -> 25793 bytes gerber/turbo.png | Bin 58640 -> 58923 bytes turbo.pcb | 48 +++++++++++++++++++++---------------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/gerber/turbo-bot.png b/gerber/turbo-bot.png index 819ed1c220a1119a5c372b31f20e471ab2fce085..d63435101f36a8bddd25ec40787d7c6292cb79fb 100644 GIT binary patch delta 22553 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%0A{^31C4tV8 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 diff --git a/turbo.pcb b/turbo.pcb index d1d844c..1db9471 100644 --- a/turbo.pcb +++ b/turbo.pcb @@ -9,7 +9,7 @@ Grid[0.1000mm 0.0000 0.0000 1] PolyArea[200000000.000000] Thermal[0.500000] DRC[0.2000mm 0.1000mm 0.2500mm 0.0800mm 0.4000mm 0.2000mm] -Flags("nameonpcb,alldirection,clearnew,newfullpoly") +Flags("nameonpcb,alldirection,clearnew,newfullpoly,onlynames") Groups("1,c:4,s:5:2,3,6,7") Styles["Signal,10.00mil,0.9000mm,0.4000mm,0.2000mm,0.6000mm:Power,0.5000mm,1.1000mm,0.6000mm,0.2500mm,0.8000mm:Fat,27.56mil,2.5000mm,2.2000mm,0.2500mm:Skinny,0.1000mm,31.50mil,0.3000mm,10.00mil"] Symbol[' ' 18.00mil] @@ -886,7 +886,7 @@ Element["" "SIL_100_4" "U3" "SIL4" 7.7500mm 16.0000mm -0.3500mm 5.3000mm 0 50 "" ) -Element["" "C0603" "D1" "SMD-LED" 6.0000mm 49.4000mm -0.4500mm -0.3000mm 3 50 ""] +Element["" "C0603" "D1" "SMD-LED" 6.0000mm 49.4000mm -0.3000mm -1.6000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "CATHODE" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "ANODE" "2" "square"] @@ -909,7 +909,7 @@ Element["onsolder" "P1206" "C29" "10µF" 19.6000mm 32.3000mm 0.5000mm -0.3500mm ) -Element["" "C0603.fp" "R12" "∞Ω" 19.1000mm 38.5000mm -0.4000mm 0.6500mm 0 50 ""] +Element["" "C0603.fp" "R12" "∞Ω" 19.1000mm 38.5000mm -0.6000mm -1.3000mm 0 50 ""] ( Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -986,7 +986,7 @@ Element["onsolder" "C0603" "C12" "100nF" 24.9000mm 45.0000mm 0.6000mm -1.3000mm ) -Element["" "C0603.fp" "R11" "10kΩ" 7.4000mm 49.4000mm 0.7000mm 0.5000mm 1 50 ""] +Element["" "C0603.fp" "R11" "10kΩ" 7.4000mm 49.4000mm -0.4000mm -1.6000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1036,7 +1036,7 @@ Element["" "SOT23_5" "U5" "LT1761-SD_/_-BYP" 19.4000mm 32.5000mm -0.4000mm -0.30 ) -Element["" "C0603.fp" "R4" "2.2MΩ" 17.4000mm 34.1000mm -0.4000mm 2.3000mm 1 50 ""] +Element["" "C0603.fp" "R4" "2.2MΩ" 17.4000mm 34.1000mm -1.3000mm 0.4000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1047,7 +1047,7 @@ Element["" "C0603.fp" "R4" "2.2MΩ" 17.4000mm 34.1000mm -0.4000mm 2.3000mm 1 50 ) -Element["" "C0603.fp" "R3" "3.3MΩ" 19.4000mm 34.9000mm 1.3000mm -0.4000mm 0 50 ""] +Element["" "C0603.fp" "R3" "3.3MΩ" 19.4000mm 34.9000mm -0.2000mm 0.6000mm 0 50 ""] ( Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1081,7 +1081,7 @@ Element["onsolder" "P1206" "C20" "10µF" 19.6000mm 30.1000mm 0.6500mm -0.4000mm ) -Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm 0 50 ""] +Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -1.0000mm 4.1000mm 0 50 ""] ( Pin[0.0000 -100.00mil 70.00mil 20.00mil 76.00mil 30.00mil "1" "1" ""] Pin[0.0000 0.0000 70.00mil 20.00mil 76.00mil 30.00mil "2" "2" "thermal(3X)"] @@ -1094,7 +1094,7 @@ Element["" "SIL_100_3" "J1" "HE_100_1×3" 15.4000mm 27.7000mm -0.2000mm 4.1000mm ) -Element["" "SOT23_3" "Q1" "2N7002" 19.8000mm 14.6000mm 0.0000 0.0000 2 50 ""] +Element["" "SOT23_3" "Q1" "2N7002" 19.8000mm 14.6000mm -0.3000mm -0.3000mm 0 50 ""] ( Pad[1.0000mm 0.9500mm 1.4000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square,edge2"] Pad[1.0000mm -0.9500mm 1.4000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square,edge2"] @@ -1106,7 +1106,7 @@ Element["" "SOT23_3" "Q1" "2N7002" 19.8000mm 14.6000mm 0.0000 0.0000 2 50 ""] ) -Element["" "SOT23_3" "Q2" "2N7002" 12.3000mm 14.6000mm 0.0000 0.0000 2 50 ""] +Element["" "SOT23_3" "Q2" "2N7002" 12.3000mm 14.6000mm -0.4000mm -0.3000mm 0 50 ""] ( Pad[1.0000mm 0.9500mm 1.4000mm 0.9500mm 0.6000mm 20.00mil 0.7524mm "G" "1" "square,edge2"] Pad[1.0000mm -0.9500mm 1.4000mm -0.9500mm 0.6000mm 20.00mil 0.7524mm "S" "2" "square,edge2"] @@ -1118,7 +1118,7 @@ Element["" "SOT23_3" "Q2" "2N7002" 12.3000mm 14.6000mm 0.0000 0.0000 2 50 ""] ) -Element["onsolder" "P1206" "C31" "10µF" 25.0000mm 41.4000mm 0.0000 0.0000 1 50 "onsolder"] +Element["onsolder" "P1206" "C31" "10µF" 25.0000mm 41.4000mm 0.4000mm 0.6000mm 3 50 "onsolder"] ( Pad[-10.00mil -55.00mil 10.00mil -55.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] Pad[-10.00mil 55.00mil 10.00mil 55.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] @@ -1130,7 +1130,7 @@ Element["onsolder" "P1206" "C31" "10µF" 25.0000mm 41.4000mm 0.0000 0.0000 1 50 ) -Element["onsolder" "P1206" "C26" "10µF" 17.0000mm 41.7000mm 0.6500mm -0.4500mm 2 50 "onsolder"] +Element["onsolder" "P1206" "C26" "10µF" 17.0000mm 41.7000mm 0.7000mm -0.4000mm 2 50 "onsolder"] ( Pad[-55.00mil -10.00mil -55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "+" "1" "onsolder,square"] Pad[55.00mil -10.00mil 55.00mil 10.00mil 50.00mil 20.00mil 56.00mil "-" "2" "onsolder,square"] @@ -1142,7 +1142,7 @@ Element["onsolder" "P1206" "C26" "10µF" 17.0000mm 41.7000mm 0.6500mm -0.4500mm ) -Element["onsolder" "C0603" "C11" "100nF" 17.0000mm 43.3000mm 0.5500mm -1.3500mm 2 50 "onsolder"] +Element["onsolder" "C0603" "C11" "100nF" 17.0000mm 43.3000mm 0.5000mm 0.5000mm 2 50 "onsolder"] ( Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] @@ -1153,7 +1153,7 @@ Element["onsolder" "C0603" "C11" "100nF" 17.0000mm 43.3000mm 0.5500mm -1.3500mm ) -Element["" "SOIC_150_8" "U2" "AT45DB161E" 17.0000mm 43.2000mm 0.0000 0.0000 3 50 ""] +Element["" "SOIC_150_8" "U2" "AT45DB161E" 17.0000mm 43.2000mm -0.4000mm -0.4000mm 0 50 ""] ( Pad[75.00mil -122.50mil 75.00mil -87.50mil 25.00mil 20.00mil 31.00mil "SI" "1" "square"] Pad[25.00mil -122.50mil 25.00mil -87.50mil 25.00mil 20.00mil 31.00mil "SCK" "2" "square"] @@ -1171,7 +1171,7 @@ Element["" "SOIC_150_8" "U2" "AT45DB161E" 17.0000mm 43.2000mm 0.0000 0.0000 3 50 ) -Element["onsolder" "C0603.fp" "R30" "100kΩ" 23.7000mm 38.7000mm 0.0000 0.0000 0 50 "onsolder"] +Element["onsolder" "C0603.fp" "R30" "100kΩ" 23.7000mm 38.7000mm 0.4000mm -1.3000mm 2 50 "onsolder"] ( Pad[-32.00mil -2.00mil -32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "1" "1" "onsolder,square"] Pad[32.00mil -2.00mil 32.00mil 2.00mil 35.00mil 20.00mil 41.00mil "2" "2" "onsolder,square"] @@ -1182,7 +1182,7 @@ Element["onsolder" "C0603.fp" "R30" "100kΩ" 23.7000mm 38.7000mm 0.0000 0.0000 0 ) -Element["" "C0603" "C33" "100nF" 13.3000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603" "C33" "100nF" 13.3000mm 20.8000mm -0.3000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1193,7 +1193,7 @@ Element["" "C0603" "C33" "100nF" 13.3000mm 20.8000mm 0.0000 0.0000 3 50 ""] ) -Element["" "C0603.fp" "R35" "100kΩ" 12.0000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603.fp" "R35" "100kΩ" 12.0000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1204,7 +1204,7 @@ Element["" "C0603.fp" "R35" "100kΩ" 12.0000mm 20.8000mm 0.0000 0.0000 3 50 ""] ) -Element["" "C0603.fp" "R31" "100kΩ" 15.9000mm 20.8000mm 0.0000 0.0000 1 50 ""] +Element["" "C0603.fp" "R31" "100kΩ" 15.9000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1215,7 +1215,7 @@ Element["" "C0603.fp" "R31" "100kΩ" 15.9000mm 20.8000mm 0.0000 0.0000 1 50 ""] ) -Element["" "C0603.fp" "R33" "100kΩ" 10.7000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603.fp" "R33" "100kΩ" 10.7000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1226,7 +1226,7 @@ Element["" "C0603.fp" "R33" "100kΩ" 10.7000mm 20.8000mm 0.0000 0.0000 3 50 ""] ) -Element["" "C0603" "C30" "100nF" 14.6000mm 20.8000mm 0.0000 0.0000 1 50 ""] +Element["" "C0603" "C30" "100nF" 14.6000mm 20.8000mm -0.3000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1237,7 +1237,7 @@ Element["" "C0603" "C30" "100nF" 14.6000mm 20.8000mm 0.0000 0.0000 1 50 ""] ) -Element["" "C0603.fp" "R34" "100kΩ" 17.2000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603.fp" "R34" "100kΩ" 17.2000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1248,7 +1248,7 @@ Element["" "C0603.fp" "R34" "100kΩ" 17.2000mm 20.8000mm 0.0000 0.0000 3 50 ""] ) -Element["" "C0603" "C32" "100nF" 21.1000mm 20.8000mm 0.0000 0.0000 1 50 ""] +Element["" "C0603" "C32" "100nF" 21.1000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1259,7 +1259,7 @@ Element["" "C0603" "C32" "100nF" 21.1000mm 20.8000mm 0.0000 0.0000 1 50 ""] ) -Element["" "C0603.fp" "R32" "100kΩ" 22.4000mm 20.8000mm 0.0000 0.0000 1 50 ""] +Element["" "C0603.fp" "R32" "100kΩ" 22.4000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1270,7 +1270,7 @@ Element["" "C0603.fp" "R32" "100kΩ" 22.4000mm 20.8000mm 0.0000 0.0000 1 50 ""] ) -Element["" "C0603" "C34" "100nF" 19.8000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603" "C34" "100nF" 19.8000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] @@ -1281,7 +1281,7 @@ Element["" "C0603" "C34" "100nF" 19.8000mm 20.8000mm 0.0000 0.0000 3 50 ""] ) -Element["" "C0603.fp" "R36" "100kΩ" 18.5000mm 20.8000mm 0.0000 0.0000 3 50 ""] +Element["" "C0603.fp" "R36" "100kΩ" 18.5000mm 20.8000mm -0.4000mm 2.3000mm 1 50 ""] ( Pad[-2.00mil -32.00mil 2.00mil -32.00mil 35.00mil 20.00mil 41.00mil "1" "1" "square"] Pad[-2.00mil 32.00mil 2.00mil 32.00mil 35.00mil 20.00mil 41.00mil "2" "2" "square"] From 429a0bf5306f4228ee9989ab197ab4f3a02d5bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sat, 27 Dec 2025 20:57:44 +0100 Subject: [PATCH 07/33] gvp: add bottom mask --- gerber/turbo-bot.gvp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/gerber/turbo-bot.gvp b/gerber/turbo-bot.gvp index 3f3d157..0377bfd 100644 --- a/gerber/turbo-bot.gvp +++ b/gerber/turbo-bot.gvp @@ -1,36 +1,36 @@ (gerbv-file-version! "2.0A") -(define-layer! 9 (cons 'filename "turbo.bottommask.gbr") +(define-layer! 10 (cons 'filename "turbo.bottompaste.gbr") + (cons 'visible #t) + (cons 'color #(17973 10705 61411)) +) +(define-layer! 9 (cons 'filename "turbo.bottom.gbr") + (cons 'visible #t) + (cons 'color #(45177 46748 64893)) +) +(define-layer! 8 (cons 'filename "turbo.bottommask.gbr") (cons 'inverted #t) (cons 'visible #f) (cons 'color #(0 57568 6070)) (cons 'alpha #(21588)) ) -(define-layer! 8 (cons 'filename "turbo.bottom.gbr") - (cons 'visible #t) - (cons 'color #(45177 46748 64893)) -) -(define-layer! 7 (cons 'filename "turbo.bottomsilk.gbr") - (cons 'visible #t) - (cons 'color #(0 0 0)) -) -(define-layer! 6 (cons 'filename "turbo.top.gbr") +(define-layer! 7 (cons 'filename "turbo.top.gbr") (cons 'visible #f) (cons 'color #(65535 29244 28836)) (cons 'alpha #(42662)) ) -(define-layer! 5 (cons 'filename "turbo.toppaste.gbr") +(define-layer! 6 (cons 'filename "turbo.toppaste.gbr") (cons 'visible #f) (cons 'color #(65535 0 6760)) ) -(define-layer! 4 (cons 'filename "turbo.topmask.gbr") +(define-layer! 5 (cons 'filename "turbo.topmask.gbr") (cons 'inverted #t) (cons 'visible #f) (cons 'color #(0 64984 7760)) (cons 'alpha #(13364)) ) -(define-layer! 3 (cons 'filename "turbo.plated-drill.cnc") +(define-layer! 4 (cons 'filename "turbo.plated-drill.cnc") (cons 'visible #t) - (cons 'color #(61307 61307 61307)) + (cons 'color #(65535 65535 65535)) (cons 'alpha #(65535)) (cons 'attribs (list (list 'autodetect 'Boolean 1) @@ -39,6 +39,10 @@ (list 'digits 'Integer 4) )) ) +(define-layer! 3 (cons 'filename "turbo.bottomsilk.gbr") + (cons 'visible #t) + (cons 'color #(0 0 0)) +) (define-layer! 2 (cons 'filename "turbo.topsilk.gbr") (cons 'visible #f) (cons 'color #(0 0 0)) @@ -54,7 +58,7 @@ (cons 'color #(0 0 0)) (cons 'alpha #(65535)) ) -(define-layer! -1 (cons 'filename "/home/falbala/stephan/eda/turbo_weather/gerber") - (cons 'color #(65535 65535 65535)) +(define-layer! -1 (cons 'filename "/home/blaulicht/stephan/eda/turbo_weather/gerber") + (cons 'color #(51265 51265 51265)) ) (set-render-type! 3) From bf73d2b58635a4cf28befe1066ca45a21707ef67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Fri, 2 Jan 2026 07:04:46 +0100 Subject: [PATCH 08/33] src: dose.c --- .gitignore | 3 + src/Makefile | 95 ++++---------- src/base85.c | 43 +++++++ src/base85.h | 4 + src/base85a.S | 148 ++++++++++++++++++++++ src/bch4369.c | 93 ++++++++++++++ src/bch4369.h | 6 + src/calib.c | 98 --------------- src/calib.h | 29 ----- src/cmd.c | 264 ++++++++++----------------------------- src/cmd.h | 7 ++ src/dose.c | 73 +++++++++++ src/dose.h | 36 ++++++ src/eeprom.h | 3 - src/eeprom.ld | 6 + src/flash.c | 129 +++++++++++++++++++ src/flash.h | 24 ++++ src/mul.c | 284 ------------------------------------------ src/mul.h | 15 --- src/rtc.c | 30 ++--- src/spi.c | 143 +++++++++++++++------- src/spi.h | 63 +++++++++- src/uart.c | 333 +++++++++----------------------------------------- src/uart.h | 19 +-- src/uart_tx.S | 83 +++++++------ 25 files changed, 931 insertions(+), 1100 deletions(-) create mode 100644 src/base85.c create mode 100644 src/base85.h create mode 100644 src/base85a.S create mode 100644 src/bch4369.c create mode 100644 src/bch4369.h delete mode 100644 src/calib.c delete mode 100644 src/calib.h create mode 100644 src/cmd.h create mode 100644 src/dose.c create mode 100644 src/dose.h delete mode 100644 src/eeprom.h create mode 100644 src/flash.c create mode 100644 src/flash.h delete mode 100644 src/mul.c delete mode 100644 src/mul.h diff --git a/.gitignore b/.gitignore index 7f5bcb6..abf7b0f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ src/mul *.eeprom *.elf src/data +BCH-Codes/ +*.odt +*.userrow diff --git a/src/Makefile b/src/Makefile index c9d49c1..ee2dc91 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,19 +1,18 @@ -PROJ=bate +PROJ=dose PATH:=/usr/local/bin:$(PATH) default: all all: $(PROJ).hex -SN_bate = 1 -MCU_bate = attiny424 -C_FILES_bate = uart.c rtc.c spi.c adc.c calib.c mul.c cmd.c -S_FILES_bate = uart_tx.S +SN_dose = 1 +MCU_dose = attiny424 +C_FILES_dose = cmd.c uart.c base85.c bch4369.c rtc.c spi.c flash.c +S_FILES_dose = uart_tx.S base85a.S MCU = $(MCU_$(PROJ)) -# When flash gets tight, use `OPT=-Os`, or use more assembler :-) -OPT = -O2 +OPT = -Os CC=avr-gcc -Wall -Wno-parentheses -MMD -std=c99 $(OPT) \ -mmcu=$(MCU) \ @@ -22,8 +21,7 @@ CC=avr-gcc -Wall -Wno-parentheses -MMD -std=c99 $(OPT) \ -fpack-struct \ -fshort-enums \ -mtiny-stack \ - -mint8 \ - -fverbose-asm + -mint8 SN = $(SN_$(PROJ)) CFLAGS = $($*_CFLAGS) $(DEBUG) -I. -DSN="$(SN)" @@ -51,41 +49,35 @@ LDFLAGS = -Teeprom.ld OBJCOPY = avr-objcopy %.hex: %.elf - $(OBJCOPY) -O ihex -R .eeprom -R .eemap $< $@ + $(OBJCOPY) -O ihex -R .eeprom -R .eemap -R .userrow -R .uumap $< $@ %.eeprom: %.elf $(OBJCOPY) -O ihex -j .eemap --change-section-lma .eemap=0 $< $@ +%.userrow: %.elf + $(OBJCOPY) -O ihex -j .uumap --change-section-lma .uumap=0 $< $@ + pMCU-attiny424 = t424 - -# -#avrdude> dump fuses -#>>> dump fuses 0x0 0x9 -# -#Reading | ################################################## | 100% 0.13 s -# -#0000 00 00 7e ff ff f6 ff 00 00 |..~...... | -# -#avrdude> +pMCU-attiny824 = t824 # WDT -fuse0_bate= 0x00 +fuse0_dose= 0x00 # BOD -fuse1_bate= 0x00 +fuse1_dose= 0x00 # OSC, 20 MHz -fuse2_bate= 0x7e +fuse2_dose= 0x7e # ??? -fuse4_bate= 0xff +fuse4_dose= 0xff # SYS0 (default 0xf6) RESET, EEPROM erase -fuse5_bate= 0xf7 +fuse5_dose= 0xf7 # SYS1 startup time (64ms) -fuse6_bate= 0xff +fuse6_dose= 0xff # APPEND -fuse7_bate= 0x00 +fuse7_dose= 0x00 # BOOTEND -fuse8_bate= 0x00 -fuses_bate =$(patsubst %, 0x%, 00 00 7e ff ff f7 ff 00 00) +fuse8_dose= 0x00 +fuses_dose =$(patsubst %, 0x%, 00 00 7e ff ff f7 ff 00 00) AVRDUDEPROG = avrdude AVRDUDE = $(AVRDUDEPROG) @@ -94,7 +86,7 @@ AVRDUDE_PORT = /dev/ttyUSB1 AD = $(AVRDUDE) -p $(pMCU-$(MCU)) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -sig_bate = 0x1e 0x92 0x2c +sig_dose = 0x1e 0x92 0x2c id: $(PROJ).id %.id: @@ -104,12 +96,12 @@ ad: $(PROJ).ad %.ad: $(AD) -v -t -%.burn: %.hex +%.burn: %.hex %.id $(AD) -U flash:v:$< || $(AD) -U flash:w:$< -%.verify: %.hex %.eeprom +%.verify: %.hex %.eeprom %.userrow -$(AD) -qq -U fuses:v:"$(fuses_$*)":m - -$(AD) -qq -U userrow:v:"$(BATE_CONFIG)":m + -$(AD) -qq -U userrow:v:$(word 3, $^) -$(AD) -qq -U eeprom:v:$(word 2, $^) -$(AD) -qq -U flash:v:$< @@ -119,41 +111,10 @@ fuse: $(PROJ).fuse$F echo "$*: fuse$F = $(fuse$F_$*)" [ -n "$(fuse$F_$*)" ] && $(AD) -B 5 -U fuse$F:w:$(fuse$F_$*):m -# see bate.c: Configuration in USERROW -BC_MAGIC = 0xba -BC_VERS = 9 -BC_TRIG = 0x29 -BC_SEND = 0x59 -BC_PWR = 0xfc -BC_TEST = 0 -BC_SPI = 4 -BC_MDEL = 2 -BC_PER = 9 -BC_CPER = 30 - -BC_CLK = 1 -BC_MCLK = 0 -BC_BAUD = 0 0 -BC_UART = 0xd0 -BC_PIT = 0xff -BC_IMM = 5 -BC_PAD = 0 0 0 0 0 0 0 -BC_PRE = 0xff 0xff 0xff 0xff 0xff 0x55 0x0a 0 - -BATE_CONFIG = $(BC_MAGIC) $(BC_VERS) \ - $(BC_TRIG) $(BC_SEND) $(BC_PWR) $(BC_TEST) \ - $(BC_SPI) $(BC_MDEL) $(BC_PER) $(BC_CPER) \ - $(BC_CLK) $(BC_MCLK) $(BC_BAUD) $(BC_UART) \ - $(BC_PIT) $(BC_IMM) $(BC_PAD) $(BC_PRE) - -bate.config: - $(AD) -U userrow:v:"$(BATE_CONFIG)":m \ - || $(AD) -U userrow:w:"$(BATE_CONFIG)":m - clean: rm -f *.hex *.o *.s *.map *.elf *.d -bate.hex: bate.eeprom +# $(PROJ).hex: $(PROJ).eeprom $(PROJ).userrow .PHONY: eeprom.eeprom eeprom.eeprom: @@ -161,7 +122,3 @@ eeprom.eeprom: %.eeprom.burn: %.eeprom $(AD) -U eeprom:v:$< || $(AD) -U eeprom:w:$< -calib: calib.c mul.c - gcc -DCALIB_DEBUG -o $@ $< -mul: mul.c - gcc -DMUL_TEST -o $@ $< diff --git a/src/base85.c b/src/base85.c new file mode 100644 index 0000000..d33b2b0 --- /dev/null +++ b/src/base85.c @@ -0,0 +1,43 @@ + +#include +#include + +uint32_t divmod85(uint32_t u, uint8_t *m); +uint32_t mul85(uint32_t u, uint8_t m); +uint8_t base85_error; + +#ifdef BASE85C + +int base85_encode(uint32_t u, uint8_t *s) +{ + s += 5; + *s = 0; + u = divmod85(u, s); + u = divmod85(u, s); + u = divmod85(u, s); + u = divmod85(u, s); + *--s = (u>>24) + 33; + return 5; +} + +const uint8_t *base85_decode(const uint8_t *s, uint32_t *u) +{ + uint32_t uu = 0; + uint8_t c; + for (int i=0; i<5; i++) { + while (1) { + c = *s++ - 33; + if (c >= 85) + goto error; + uu = mul85(uu, c); + break; + } + } + c = 0; +error: + base85_error = c; + *u = uu; + return s; +} + +#endif diff --git a/src/base85.h b/src/base85.h new file mode 100644 index 0000000..09245f5 --- /dev/null +++ b/src/base85.h @@ -0,0 +1,4 @@ + +extern uint8_t base85_error; +int base85_encode(uint32_t u, uint8_t *s); +const uint8_t *base85_decode(const uint8_t *s, uint32_t *u); diff --git a/src/base85a.S b/src/base85a.S new file mode 100644 index 0000000..00cc53c --- /dev/null +++ b/src/base85a.S @@ -0,0 +1,148 @@ +; uint32_t divmod85(uint32_t u, uint8_t *m) + + ; r26/r27 = m + ; r25 = A LSB, big endian + ; r24 = B + ; r23 = C + ; r22 = D MSB + ; r1 = undef + + #ifdef BASE85C + .global divmod85 +divmod85: + movw r26, r20 + # endif + + ;; ! C-ABI: gobbles r1, m=X +_divmod85: ; r25,r24,r23,r22 = A,B,C,D + mov r18, r25 + add r18, r24 + clr r21 + rol r21 ; r18,r21 = A+B + add r23, r18 + clr r31 + adc r31, r21 ; r23,r31 = A+B+C + add r21, r23 + clr r18 + adc r18, r31 ; r21,r18 = A+B>>8 + A+B+C + add r23, r22 + clr r20 + adc r31, r20 ; r23,r31 = A+B+C+D + add r18, r23 + adc r21, r31 ; r18,r21 = A+B>>16 + A+B+C>>8 + A+B+C+D + sub r23, r25 + sbc r31, r20 ; r23,r31 = B+C+D + add r21, r23 + adc r20, r31 ; r18,r21,r20 = … + B+C+D<<8 + sub r23, r24 + clr r30 + sbc r31, r30 ; r23,r31 = C+D + add r20, r23 + adc r31, r22 + rol r30 ; r18,r21,r20,r31,r30 = … + C+D<<16 + D<<24 + mov r19, r18 + movw r22, r20 + movw r24, r30 + lsl r19 + rol r21 + rol r20 + rol r31 + rol r30 + add r18, r19 + adc r25, r21 + adc r24, r20 + adc r23, r31 + adc r22, r30 + ldi r19, 85 + mul r18, r19 + lsl r0 + ldi r18, 33 + adc r1, r18 + # ifdef BASE85C + st X, r1 + clr r1 + # else + st -X, r1 + # endif + ret + + #ifndef BASE85C + .global base85_encode +base85_encode: + movw r26, r20 + adiw r26, 5 + st X, r1 + rcall _divmod85 + rcall _divmod85 + rcall _divmod85 + rcall _divmod85 + subi r25, -33 + st -X, r25 + ldi r24, 5 + clr r1 + ret + # endif + +; uint32_t mul85(uint32_t u, uint8_t m); + + #ifdef BASE85C + .global mul85 +mul85: + # endif + +_mul85: + ldi r21, 85 + mul r25, r21 + movw r18, r0 + mul r24, r21 + movw r24, r0 + mul r23, r21 + movw r30, r0 + mul r22, r21 + add r18, r20 + adc r24, r19 + adc r30, r25 + adc r31, r0 + mov r25, r18 + mov r23, r30 + mov r22, r31 + # ifdef BASE85C + clr r1 + # endif + ret + + #ifndef BASE85C + + .global base85_decode +base85_decode: + push r17 + push r22 + push r23 + movw r26, r24 + clr r25 + clr r24 + clr r23 + clr r22 + ldi r17, 5 +1: + ld r20, Y+ + cpi r20, 85 + brcc 2f + rcall _mul85 + subi r17, 1 + brne 1b + clr r20 +2: + sts base85_error, r20 + pop r31 + pop r30 + st Z, r22 + std Z+1, r23 + std Z+2, r24 + std Z+3, r25 + movw r24, r26 + pop r17 + clr r1 + ret + + # endif diff --git a/src/bch4369.c b/src/bch4369.c new file mode 100644 index 0000000..512c249 --- /dev/null +++ b/src/bch4369.c @@ -0,0 +1,93 @@ +/********************************************************************* + +galois.BCH(4369, 4369-128, extension_field=galois.GF(2**16)) +→ + +hex(bch.generator_poly) +→ '0x124a5eda5ec0cbce2104522c1782ed521' + +A flash page is 512 + 16 bytes. Use the extended page size for parity +bits. A code size of n=4369 is achievable with m=16. There are n-k = +128 parity bits. The code has a Hamming distance of d=17. That allows +correction of up to 8 error bits. The message is padded with 145 bits +of zeros. + +*********************************************************************/ + + +#include "bch4369.h" + +uint8_t bch_parity[16]; +const +uint8_t bch_genpoly[16] = { + 0x24, 0xa5, 0xed, 0xa5, + 0xec, 0x0c, 0xbc, 0xe2, + 0x10, 0x45, 0x22, 0xc1, + 0x78, 0x2e, 0xd5, 0x21 +}; + +#ifdef BCH_C + +void bch4369(uint8_t d) +{ + uint8_t *p = bch_parity; + uint8_t m = *p; + for (int i=0; i<8; i++) { + p += 16; + const uint8_t *pp = bch_genpoly + 16; + uint8_t b = d; + d <<= 1; + uint8_t mm = m; + for (int j=0; j<16; j++) { + uint8_t bb = *--p; + m = bb << 1 | b >> 7; + if (mm & 0x80) + m ^= *--pp; + *p = m; + b = bb; + } + } +} + +#else + +__attribute__ ((noinline, noclone)) +void bch4369(uint8_t d) +{ + __asm__ __volatile__( + "" + "ldi r30, lo8(bch_parity)" "\n\t" + "ldi r31, hi8(bch_parity)" "\n\t" + "ld r25, Z" "\n\t" + "bst r25, 7" "\n\t" // copy MSB of parity → T-bit + "ldi r20, 8" "\n\t" // loop r20 = 8 → 1 + "1:" "\n\t" + "adiw r30, 16" "\n\t" + "ldi r26, lo8(bch_genpoly+16)" "\n\t" + "ldi r27, hi8(bch_genpoly+16)" "\n\t" + "rol %[D]" "\n\t" // move next input bit → r25.7 + "ror r25" "\n\t" + "2:" "\n\t" + "rol r25" "\n\t" // Move r25.7 → C-bit + "ld r25, -Z" "\n\t" // Rotage input bit into parity byte + "rol r25" "\n\t" + "brtc 3f" "\n\t" // if T-bit: + "ld r0, -X" "\n\t" // xor with gen_poly + "eor r25, r0" "\n\t" + "3:" "\n\t" + "st Z, r25" "\n\t" + "ror r25" "\n\t" // save C-bit → r25.7 and MSB → r25.6 + "cpi r30, lo8(bch_parity)" "\n\t" + "brne 2b" "\n\t" + "bst r25, 6" "\n\t" // copy MSB r25.6 → T-bit + "subi r20, 1" "\n\t" + "brne 1b" "\n" + : [D] "+w" (d) + : + : "memory", "cc", + "r0", "r20", "r21", "r25", + "r26", "r27", "r30", "r31" + ); +} + +#endif diff --git a/src/bch4369.h b/src/bch4369.h new file mode 100644 index 0000000..41b9bc7 --- /dev/null +++ b/src/bch4369.h @@ -0,0 +1,6 @@ + +#include +#include +extern uint8_t bch_parity[16]; +void bch4369(uint8_t d); +static inline void bch4369_init() { memset(bch_parity, 0 , 16); } diff --git a/src/calib.c b/src/calib.c deleted file mode 100644 index 468c1a9..0000000 --- a/src/calib.c +++ /dev/null @@ -1,98 +0,0 @@ -// -// calib.c -// - -// MS5534-CM.pdf -// https://media.digikey.com/pdf/Data%20Sheets/Measurement%20Specialties%20PDFs/MS5534-CM.pdf - -#ifdef CALIB_DEBUG -# include -# define TESTDATA_ADDR -#else -# include "eeprom.h" -#endif - -#include "calib.h" -#include "mul.h" - -void bate_calib(const union bate *bate, struct pressure *pt) -{ - uint16_t C1 = bate->W1 >> 1; - uint16_t C5 = (bate->W1 & 1) << 13 | (bate->W2 & 0xffc0) >> 3; - uint8_t C6 = bate->W2 & 0x3f; - uint16_t C4 = bate->W3 >> 6; - uint16_t C3 = bate->W4 & 0xffc0; - uint16_t C2 = (bate->W3 & 0x3f) << 6 | bate->W4 & 0x3f; - - uint16_t D1 = bate->D1; - uint16_t D2 = bate->D2; - - uint16_t UT1 = C5 + 20224; - uint16_t dT = D2 - UT1; - - uint16_t TEMPSENS = C6 + 50; - int16_t TEMP = mul16sun(dT, TEMPSENS, 6) + 200; - - int16_t TCO = C4 - 512; - uint16_t OFFT1 = C2 << 2; - // fails when TCO < 0 - uint16_t OFF = OFFT1 + mul16sun(dT, TCO, 4); - - uint16_t SENST1 = C1 + 24576; - uint16_t TCS = C3; - uint16_t SENS = SENST1 + mul16sun(dT, TCS, 0); - - int16_t X = mul16sun(D1 - 7168, SENS, 2) - OFF; - int16_t P = mul16sun(X, 80, 8) + 2500; - - pt->T = TEMP + 2732; - pt->p = P; - -#ifdef CALIB_DEBUG - - printf("W1 0x%04x\n", bate->W1); - printf("W2 0x%04x\n", bate->W2); - printf("W3 0x%04x\n", bate->W3); - printf("W4 0x%04x\n", bate->W4); - printf("D1 0x%04x %6d\n", D1, D1 - 7168); - printf("D2 0x%04x\n", D2); - printf("C1 %5u\n", C1); - printf("C2 %5u\n", C2); - printf("C3 %5d %5d\n", C3>>6, C3); - printf("C4 %5d\n", C4); - printf("C5 %5u %5u\n", C5>>3, C5); - printf("C6 %5u\n", C6); - printf("UT1 %5u\n", UT1); - printf("dT %5d\n", dT); - printf("TEMPSENS %5u\n", TEMPSENS); - printf("TEMP %5d\n", TEMP); - printf("TCO %5d\n", TCO); - printf("OFFT1 %5u\n", OFFT1); - printf("OFF %5u\n", OFF); - printf("SENST1 %5u\n", SENST1); - printf("TCS %5u %5u\n", TCS>>6, TCS); - printf("SENS %5u\n", SENS); - printf("X %5d\n", X); - printf("P %5d\n", P); - printf(" %.1f °C %.1f mbar\n\n", TEMP/10., P/10.); -} - -#define MUL_DEBUG -#include "mul.c" - -int main() -{ - struct pressure pt; - for (int i=0; i<5; i++) - bate_calib(testdata+i, &pt); - return 0; -#endif -} - -const union bate testdata[] TESTDATA_ADDR = { - { .w = { 0xA691, 0x0A97, 0x989F, 0xAF28, 0x4896, 0x71F4 }, }, - { .W = { 0xabaf, 0x3c99, 0xa31a, 0xb589}, .D = { 0x470c, 0x773f }, }, // 21.2 °C, 1021.7 mbar - { .W = { 0xabaf, 0x3c99, 0xa31a, 0xb589}, .D = { 0x1a51, 0x6fed }, }, // 7.5 °C, 5.4 mbar - { .W = { 0xaa3d, 0x35d9, 0xcbe5, 0xb736}, .D = { 0x4bb7, 0x7487 }, }, // 17.7 °C, 1023.0 mbar - { .W = { 0xaa3d, 0x35d9, 0xcbe5, 0xb736}, .D = { 0x1e25, 0x650a }, }, // -11.3 °C, 2.4 mbar -}; diff --git a/src/calib.h b/src/calib.h deleted file mode 100644 index 7f77f97..0000000 --- a/src/calib.h +++ /dev/null @@ -1,29 +0,0 @@ - -#include -// !!! int = int8_t - -union bate { - uint8_t b[12]; - uint16_t w[6]; - struct { - uint16_t W[4]; - uint16_t D[2]; - }; - struct { - uint16_t W1; - uint16_t W2; - uint16_t W3; - uint16_t W4; - uint16_t D1; - uint16_t D2; - }; -}; - -struct pressure { - uint16_t T; - uint16_t p; -}; - -#define N_TESTDATA (64/sizeof(union bate)) -void bate_calib(const union bate *bate, struct pressure *pt); -extern const union bate testdata[N_TESTDATA]; diff --git a/src/cmd.c b/src/cmd.c index 71e8aa1..cc31f20 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -2,215 +2,75 @@ // cmd.c // -#include "bate.h" -#include "rtc.h" -#include +#include "cmd.h" +#include "flash.h" +#include "bch4369.h" +#include "base85.h" +#include "uart.h" -#ifdef NOCMD -// no space for this -void parse_command(uint8_t *s, uint8_t n) {} -#else +void base85_send_buffer(const uint8_t *buf); +const uint8_t *base85_fill_buffer(const uint8_t *s); -uint8_t rx_params[8]; - -#if 0 - -__attribute__ ((noinline, noclone)) -uint8_t parse_hex_nibble(uint8_t c) +void parse_command(const uint8_t *s, uint8_t n) { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'a' && c <= 'f') - return c - 'a' + 0x0a; - return 0xf0; -} - -static inline -uint8_t parse_rx_params(uint8_t *s, uint8_t n) -{ - uint8_t p; - p = 0; - while (n) { - while (n) { - if (*s != ' ') - break; - n--; - s++; - } - if (!n || p >= sizeof(rx_params)) - break; - uint8_t d = parse_hex_nibble(*s); - if (d==0xf0) - break; - n--; - s++; - if (n) { - uint8_t h = 0; - h = parse_hex_nibble(*s); - if (h != 0xf0) { - n--; - s++; - d <<= 4; - d |= h; - } - } - rx_params[p++] = d; - DEBUG_POKE(rxhex, d); - } - if (!n || *s != '\n') - p = 0; - DEBUG_POKE(rxpar, p); - return p; -} - -#else - -static inline -uint8_t parse_rx_params(uint8_t *s, uint8_t n) -{ - uint8_t p; - __asm__("\n" - "1: \n" - " clr %[p] \n" - " tst %[n] \n" - " breq 8f \n" - " ldi r26, lo8(rx_params) \n" - " ldi r27, hi8(rx_params) \n" - "2: \n" - " ld r21, Z+ \n" - " cpi r21, ' ' \n" - " breq 6f \n" - " cpi r21, '\\n' \n" - " breq 8f \n" - " rcall nibble \n" - " brcc 7f \n" - " mov r25, r21 \n" - " subi %[n], 1 \n" - " breq 7f \n" - " ld r21, Z \n" - " rcall nibble \n" - " brcc 5f \n" - " subi %[n], 1 \n" - " breq 7f \n" - " adiw r30, 1 \n" - " swap r25 \n" - " or r25, r21 \n" - "5: \n" - " cpi %[p], 8 ; sz rx_params \n" - " brcc 7f \n" - " subi %[p], -1 \n" - " st X+, r25 \n" -#ifdef DEBUG - " sts debug_data + 6, r25 \n" - " sts debug_data + 9, %[p] \n" -#endif - " rjmp 2b \n" - " \n" - "nibble: \n" - " subi r21, '0' \n" - " cpi r21, 10 \n" - " brcs 9f \n" - " subi r21, 'a'-'0' \n" - " cpi r21, 6 \n" - " brcc 9f \n" - " subi r21, -10 \n" - " sec \n" - "9: ret \n" - " \n" - "6: \n" - " subi %[n], 1 \n" - " brne 2b \n" - "7: \n" - " clr %[p] \n" - "8: \n" - : [p] "=a" (p), // r24 (r16…) - [s] "+z" (s), // r30,r31 - [n] "+a" (n) // r22 (r16…) - : : "r21", "r25", "r26", "r27" - ); - DEBUG_POKE(rxpar, p); - return p; -} -#endif - -void parse_command(uint8_t *s, uint8_t n) -{ - if (!n || n >= 15) - goto fail; - uint8_t cmd = *s++; - uint8_t p = parse_rx_params(s, n-1); - uint8_t *pp = rx_params; - - uint8_t *a = (uint8_t *)(((uint16_t)pp[0] << 8) | pp[1]); - - if (cmd == 'R' && p==1) - __asm__("\n" - " ldi r18, 1 \n" - " out %[ccp], %[p] \n" - " sts %[swrr], r18 \n" - : - : [p] "r" (pp[0]), - [ccp] "n" (_SFR_IO_ADDR(CCP)), - [swrr] "n" (&RSTCTRL.SWRR) - : "r18" - ); - - if (p >= 3 && p < 8 && ( - cmd == 'C' && pp[0]==0xba - || cmd == 'E' - || cmd == 'U')) { - uint8_t *e = (uint8_t*) &config; - if (cmd=='E') - e = (uint8_t*) EEPROM_START; - if (cmd=='U') - e = (uint8_t*) &USERROW; - e += pp[1]; - pp[p] = *e; - memcpy(e, pp+2, p-2); - if (cmd != 'C') - __asm__("\n" - " ldi r24, %[erwp] \n" - " out %[ccp], %[p] \n" - " sts %[ctrl], r24 \n" - : - : [p] "r" (pp[0]), - [ccp] "n" (_SFR_IO_ADDR(CCP)), - [ctrl] "n" (&NVMCTRL.CTRLA), - [erwp] "n" (NVMCTRL_CMD_PAGEERASEWRITE_gc) - : "r24" - ); + uint8_t r = 0; + send_char(cmd); + if (cmd == 'W') { + s = base85_fill_buffer(s); + r = base85_error; } - else if (cmd == 'T' && p==1) { - immediate += pp[0]; - pp[1] = immediate; + else if (cmd == 'R') + base85_send_buffer(flash_buffer); + else if (cmd == 'F') { + bch4369_feed_buffer(); + r = bch4369_feed_n; } - else if (cmd == 'M' && p==2) { - pp[2] = *a; - } - else if (cmd == 'W' && p==3) { - pp[3] = *a; - *a = pp[2]; - } - else if (cmd == 'K' && p==4) { - cli(); - pp[4] = clock_tick; - clock = *(uint32_t*)pp; - sei(); - } - else if (cmd == 'D' && p==1) { - pp[1] = test_calib; - test_calib = pp[0]; + else if (cmd == 'P') { + base85_send_buffer(bch_parity); + r = bch4369_feed_n; + } else - goto fail; - - send_char('R'); - send_char('!'); - send_hex(cmd, pp, p+1, 1); - return; -fail: - send_str("R?\n"); + send_char('?'); + send_char(' '); + send_char(r); + send_eol(); } -#endif +const uint8_t *skip_space(const uint8_t *s) { + while (*s == ' ') + s++; + return s; +} + +const uint8_t *base85_fill_buffer(const uint8_t *s) { + base85_error = 0; + s = skip_space(s); + for (int i=0; !base85_error && i + +extern uint8_t base85_error; +extern uint8_t bch4369_feed_n; +void parse_command(const uint8_t *s, uint8_t n); +void bch4369_feed_buffer(); diff --git a/src/dose.c b/src/dose.c new file mode 100644 index 0000000..20be446 --- /dev/null +++ b/src/dose.c @@ -0,0 +1,73 @@ +// +// dose.c +// + +// !!! int = int8_t + +#include +#include + +#include +#include +#include +#include + +#include "dose.h" +#include "uart.h" +#include "rtc.h" +#include "spi.h" +#include "cmd.h" + +#define Bit(x) (1<<(x)) + + +//////////////////////////////////////////////////////////////////////////////// +// +// Configuration in USERROW + +struct config config; + +__attribute__((section(".userrow"))) +const struct config userrow = { + .magic = USE_USERROW, + .version = USE_VERSION, + .cpu_clk = CLKCTRL_PDIV_2X_gc | 1, // 10MHz (max @ 3V) + .pit_period = RTC_PERIOD_CYC1024_gc, + .spi_div = SPI_SPEED, + .baud_div = UART_BAUD, + .uart_mode = UART_MODE, +}; + +//////////////////////////////////////////////////////////////////////////////// +// +// main() + +int main() +{ + memcpy(&config, &userrow, sizeof(struct config)); + + while (CLKCTRL.MCLKCTRLB != config.cpu_clk) { + CCP = CCP_IOREG_gc; + CLKCTRL.MCLKCTRLB = config.cpu_clk; + } + + set_sleep_mode(SLEEP_MODE_IDLE); + sleep_enable(); + while (userrow.magic != USE_USERROW) + sleep_cpu(); + + init_uart(config.uart_mode, config.baud_div); + init_rtc(config.pit_period); + init_spi(config.spi_div); + + uint8_t reset_source = RSTCTRL.RSTFR; + RSTCTRL.RSTFR = reset_source; + send_str("\nM Turbo Dose V0.9 "); + send_hex_byte(reset_source); + send_eol(); + + while (1) { + sleep_cpu(); + command(); + } +} diff --git a/src/dose.h b/src/dose.h new file mode 100644 index 0000000..8fe9c03 --- /dev/null +++ b/src/dose.h @@ -0,0 +1,36 @@ +// +// dose.h +// + +//////////////////////////////////////////////////////////////////////////////// +// +// Configuration + +#include +#include + +struct config { + uint8_t magic; + uint8_t version; + uint8_t cpu_clk; + uint8_t pit_period; + uint8_t spi_div; + uint16_t baud_div; + uint16_t uart_mode; +}; + +enum magic_flags { + USE_USERROW = 0xD0, + USE_VERSION = 0x01, +}; +enum UART_flags { // USART0.CTRLB + UART_Tx = /* 0x40, */ USART_TXEN_bm, + UART_Rx = /* 0x80, */ USART_RXEN_bm, + UART_SFD = /* 0x10, */ USART_SFDEN_bm, + UART_ODME = /* 0x08, */ USART_ODME_bm, + UART_CLKx2 = /* 0x02, */ 1 << USART_RXMODE_0_bp, + UART_GAUTO = /* 0x04, */ 2 << USART_RXMODE_0_bp, + UART_LAUTO = /* 0x06, */ 3 << USART_RXMODE_0_bp, +}; + +extern struct config config; diff --git a/src/eeprom.h b/src/eeprom.h deleted file mode 100644 index cf7ee7d..0000000 --- a/src/eeprom.h +++ /dev/null @@ -1,3 +0,0 @@ - -#define ADC_CONF_ADDR __attribute__((__section__(".eeprom"))) -#define TESTDATA_ADDR __attribute__((__section__(".eeprom"))) diff --git a/src/eeprom.ld b/src/eeprom.ld index f9a5f58..331dcd7 100644 --- a/src/eeprom.ld +++ b/src/eeprom.ld @@ -6,6 +6,8 @@ MEMORY { eemap : ORIGIN = 0x1400, LENGTH = 0x80 eedef : ORIGIN = 0x810000, LENGTH = 0x80 + uumap : ORIGIN = 0x1300, LENGTH = 0x20 + uudef : ORIGIN = 0x850000, LENGTH = 0x20 } SECTIONS { @@ -13,5 +15,9 @@ SECTIONS { *(.eeprom) } >eemap AT >eedef + .uumap 0x1300: + { + *(.userrow) + } >uumap AT >uudef } INSERT BEFORE .eeprom diff --git a/src/flash.c b/src/flash.c new file mode 100644 index 0000000..8f553bb --- /dev/null +++ b/src/flash.c @@ -0,0 +1,129 @@ +/****************************************************** + +- opcode (hex) +- address + - pb page and byte address + - xb byte address + - px page address + - kx block address + - sx sector address + - xxx don't care +- padding + - 0 1 byte + - 00 2 bytes + - 0000 4 bytes +- data + - … data bytes + - | no data bytes + + +read commands + +- Main Memory Page Read D2 pb 0000 … +- Continuous Array Read (Low-Power Mode) 01 pb … +- Continuous Array Read (Low-Frequency) 03 pb … +- Continuous Array Read (High-Frequency) 0B pb 0 … +- Continuous Array Read (High-Frequency) 1B pb 00 … +- Continuous Array Read (Legacy Command) E8 pb 0000 … +- Buffer 1 Read (Low-Frequency) D1 xb … +- Buffer 2 Read (Low-Frequency) D3 xb … +- Buffer 1 Read (High-Frequency) D4 xb 0 … +- Buffer 2 Read (High-Frequency) D6 xb 0 … + +write commands + +- Buffer 1 Write 84 xb … +- Buffer 2 Write 87 xb … +- Buffer 1 Page Program with Erase 83 px | +- Buffer 2 Page Program with Erase 86 px | +- Buffer 1 Page Program w/o Erase 88 px | +- Buffer 2 Page Program w/o Erase 89 px | +- Page through Buffer 1 with Erase 82 pb … +- Page through Buffer 2 with Erase 85 pb … +- Byte/Page through Buffer 1 w/o Erase 02 pb … +- Page Erase 81 px | +- Block Erase 50 kx | +- Sector Erase 7C sx | +- Chip Erase C7_94_80_9A | +- Program/Erase Suspend B0 | +- Program/Erase Resume D0 | +- Read-Modify-Write through Buffer 1 58 pbx … +- Read-Modify-Write through Buffer 2 59 pbx … + +security commands + +- Enable Sector Protection 3D_2A_7F_A9 | +- Disable Sector Protection 3D_2A_7F_9A | +- Erase Sector Protection Register 3D_2A_7F_CF | +- Program Sector Protection Register 3D_2A_7F_FC … +- Read Sector Protection Register 32 xxx … +- Sector Lockdown 3D_2A_7F_30 … +- Read Sector Lockdown Register 35 xxx … +- Freeze Sector Lockdown 34_55_AA_40 | +- Program Security Register 9B_00_00_00 … +- Read Security Register 77 xxx … + +miscellanious + +- Main Memory Page to Buffer 1 Transfer 53 px | +- Main Memory Page to Buffer 2 Transfer 55 px | +- Main Memory Page to Buffer 1 Compare 60 px | +- Main Memory Page to Buffer 2 Compare 61 px | +- Auto Page Rewrite through Buffer 1 58 px | +- Auto Page Rewrite through Buffer 2 59 px | +- Deep Power-Down B9 | +- Resume from Deep Power-Down AB | +- Ultra-Deep Power-Down 79 | +- Status Register Read D7 … +- Manufacturer and Device ID Read 9F … +- “Power of 2” (Binary) Page Size 3D_2A_80_A6 | +- Standard DataFlash Page Size 3D_2A_80_A7 | +- Software Reset F0_00_00_00 | + +*/ + +#include "flash.h" +uint8_t flash_cmd_buffer[4]; +uint8_t flash_buffer[FB_SIZE]; + +uint8_t flash_cmd(uint8_t op, uint8_t mode, uint8_t size, uint16_t page, uint16_t byte) +{ + uint8_t spi_mode = SPI_FLASH | mode & FM_SPI; + uint8_t s = spi_select(spi_mode); + if (s) + return s; + uint8_t *b = flash_cmd_buffer; + *b++ = op ; + switch (mode & FM_ADDR) { + case FM_528: + page <<= 1; + case FM_512: + byte |= page << 9; + page >>= 7; + case FM_SEC: + *b++ = page; + *b++ = byte>>8; + *b++ = byte; + } + uint8_t csize = b - flash_cmd_buffer; + uint8_t pads = 0; + switch (mode & FM_PAD) { + case FM_PAD4: pads = 2; + case FM_PAD2: pads += 1; + case FM_PAD1: pads += 1; + } + spi.zsize = pads; + switch (mode & FM_START) { + case FM_WRITE: + spi_start_write(csize, flash_cmd_buffer, size, flash_buffer); + break; + case FM_READ: + spi_start_read(csize, flash_cmd_buffer, size, flash_buffer); + break; + case FM_WAIT: + spi.mask = 0x80; + spi_start_read(csize, flash_cmd_buffer, 2, flash_cmd_buffer); + break; + } + return 0; +} diff --git a/src/flash.h b/src/flash.h new file mode 100644 index 0000000..092a68c --- /dev/null +++ b/src/flash.h @@ -0,0 +1,24 @@ + +#include "spi.h" + +enum flash_mode_bits { + FM_PAD1 = 0x01, + FM_PAD2 = 0x02, + FM_PAD4 = 0x03, + FM_PAD = 0x03, + FM_512 = 0x04, + FM_528 = 0x08, + FM_SEC = 0x0c, + FM_ADDR = 0x0c, + FM_WRITE = 0x10, + FM_READ = 0x20, + FM_WAIT = 0x30, + FM_START = 0x30, + FM_CONT = SPI_CONT, + FM_SPI = FM_CONT, +}; + +uint8_t flash_cmd(uint8_t op, uint8_t mode, uint8_t size, uint16_t page, uint16_t byte); +uint8_t flash_read_status(uint8_t wait); +#define FB_SIZE 64 +extern uint8_t flash_buffer[FB_SIZE]; diff --git a/src/mul.c b/src/mul.c deleted file mode 100644 index b7a389a..0000000 --- a/src/mul.c +++ /dev/null @@ -1,284 +0,0 @@ -// -// mul.c -// -// To save space in ATtinys. -// 16bit × 16bit → 16bit multiplication for AVR w/ `mul`, `muls`, `mulsu`, -// returning the high bits, not the low bits. -// -// Also provides a variant for printing decimal numbers. - -#include "mul.h" - -// To save space, omit what is not needed. Use -D when needed. - -#ifndef MUL_NONE -# define MUL16SUN -# define MUL_DECIMAL_STR -# ifdef MUL_ALL -# define MUL16SU -# define MUL16SS -# define MUL16UU -# endif -#endif - -#ifdef MUL_TEST -#define MUL_DEBUG -#include -int main() -{ - int16_t tests[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 89, 99, 100, 101, 102, 0xff, 0x100, 0x101, - 999, 1000, 1001, 9999, 10000, 10001, - 0x7ffe, 0x7fff - }; - - for (uint8_t dec = 0; dec < 5; dec++) - for (int i=0; i < sizeof(tests)/sizeof(*tests); i++) - for (int s=0; s<2; s++) { - int16_t n = tests[i]; - if (s) - n = -n; - printf("%u 0x%04x %+d %s\n", - dec, n & 0xffff, n, - decimal_str(n, dec)); - } - return 0; -} -#endif - -#ifndef MUL_DEBUG - -#ifdef MUL16SU -int16_t mul16su(int16_t s, uint16_t u) -{ - __asm__( - "movw r18, %[s]" "\n\t" - "mul r18, %A[u]" "\n\t" - "mov r20, r1" "\n\t" - "mulsu r19, %B[u]" "\n\t" - "movw %[s], r0" "\n\t" - "mul r18, %B[u]" "\n\t" - "clr r18" "\n\t" - "add r20, r0" "\n\t" - "adc %A[s], r1" "\n\t" - "adc %B[s], r18" "\n\t" - "mulsu r19, %A[u]" "\n\t" - "sbc %B[s], r18" "\n\t" - "add r20, r0" "\n\t" - "adc %A[s], r1" "\n\t" - "adc %B[s], r18" "\n\t" - "clr r1" "\n\t" - : [s] "+r" (s) - : [u] "a" (u) - : "r0", "r1", "r18", "r19", "r20" - ); - return s; -} -#endif - -#ifdef MUL16SUN -int16_t mul16sun(int16_t s, uint16_t u, uint8_t n) -{ - // n = 0 … 8 - __asm__( - "movw r18, %[s]" "\n\t" - "mul r18, %A[u]" "\n\t" - "mov r21, r1" "\n\t" - "mulsu r19, %B[u]" "\n\t" - "movw %[s], r0" "\n\t" - "mul r18, %B[u]" "\n\t" - "clr r18" "\n\t" - "add r21, r0" "\n\t" - "adc %A[s], r1" "\n\t" - "adc %B[s], r18" "\n\t" - "mulsu r19, %A[u]" "\n\t" - "sbc %B[s], r18" "\n\t" - "add r21, r0" "\n\t" - "adc %A[s], r1" "\n\t" - "adc %B[s], r18" "\n\t" - "cpi %[n], 0" "\n\t" - "breq 3f" "\n\t" - "sbrs %[n], 3" "\n\t" - "rjmp 2f" "\n\t" - "mov %B[s], %A[s]" "\n\t" - "mov %A[s], r21" "\n\t" - "rjmp 3f" "\n" - "1:" "\t" - "lsl r21" "\n\t" - "rol %A[s]" "\n\t" - "rol %B[s]" "\n\t" - "2:" "\t" - "dec %[n]" "\n\t" - "brpl 1b" "\n" - "3:" "\t" - "clr r1" "\n\t" - : [s] "+r" (s) - : [u] "a" (u), - [n] "r" (n) - : "r0", "r1", "r18", "r19", "r21" - ); - return s; -} -#endif - -#ifdef MUL16SS -int16_t mul16ss(int16_t a, int16_t b) -{ - // ((int32_t)a*b) >> 16 - __asm__( - "movw r18, %[a]" "\n\t" - "mul r18, %A[b]" "\n\t" - "mov r20, r1" "\n\t" - "muls r19, %B[b]" "\n\t" - "movw %[a], r0" "\n\t" - "mulsu %B[b], r18" "\n\t" - "clr r18" "\n\t" - "sbc %B[a], r18" "\n\t" - "add r20, r0" "\n\t" - "adc %A[a], r1" "\n\t" - "adc %B[a], r18" "\n\t" - "mulsu r19, %A[b]" "\n\t" - "sbc %B[a], r18" "\n\t" - "add r20, r0" "\n\t" - "adc %A[a], r1" "\n\t" - "adc %B[a], r18" "\n\t" - "clr r1" "\n\t" - : [a] "+r" (a) - : [b] "a" (b) - : "r0", "r1", "r18", "r19", "r20" - ); - return a; -} -#endif - -#ifdef MUL16UU -int16_t mul16uu(uint16_t a, uint16_t b) -{ - // ((uint32_t)a*(uint32_t)b) >> 16 - __asm__( - "movw r18, %[a]" "\n\t" - "mul r18, %A[b]" "\n\t" - "mov r20, r1" "\n\t" - "mul r19, %B[b]" "\n\t" - "movw %[a], r0" "\n\t" - "mul %B[b], r18" "\n\t" - "clr r18" "\n\t" - "add r20, r0" "\n\t" - "adc %A[a], r1" "\n\t" - "adc %B[a], r18" "\n\t" - "mul r19, %A[b]" "\n\t" - "add r20, r0" "\n\t" - "adc %A[a], r1" "\n\t" - "adc %B[a], r18" "\n\t" - "clr r1" "\n\t" - : [a] "+r" (a) - : [b] "a" (b) - : "r0", "r1", "r18", "r19", "r20" - ); - return a; -} -#endif - -#if defined(MUL_DIVMOD10) || defined(MUL_DECIMAL_STR) -#ifndef MUL_DIVMOD10 -static inline -#endif -uint16_t divmod10(uint16_t u, uint8_t *mod) -{ - uint16_t r; - uint8_t d; - __asm__( - "ldi r18, lo8(6554)" "\n\t" - "ldi r19, hi8(6554)" "\n\t" - "mul r18, %A[u]" "\n\t" - "mov r20, r1" "\n\t" - "mul r19, %B[u]" "\n\t" - "movw %[r], r0" "\n\t" - "mul r19, %A[u]" "\n\t" - "clr r19" "\n\t" - "add r20, r0" "\n\t" - "adc %A[r], r1" "\n\t" - "adc %B[r], r19" "\n\t" - "mul r18, %B[u]" "\n\t" - "add r20, r0" "\n\t" - "adc %A[r], r1" "\n\t" - "adc %B[r], r19" "\n\t" - "ldi r19, 10" "\n\t" - "inc r20" "\n\t" - "mul r19, r20" "\n\t" - "mov %[d], r1" "\n\t" - "clr r1" "\n\t" - : [r] "=&r" (r), - [d] "=r" (d) - : [u] "d" (u) - : "r0", "r1", "r18", "r19", "r20" - ); - *mod = d; - return r; -} -#endif - -#else // MUL_DEBUG - -// Models for what the assembly is supposed to do. -// Also usefull for testing in non-AVR hosts. - -int16_t mul16su(int16_t s, uint16_t u) -{ - uint32_t r = (int32_t)s * (int32_t)u; - return r >> 16; -} -int16_t mul16sun(int16_t s, uint16_t u, uint8_t n) -{ - // n = 0 … 8 - uint32_t r = (int32_t)s * (int32_t)u; - return r >> (16-n); -} -int16_t mul16ss(int16_t a, int16_t b) -{ - uint32_t r = (int32_t)a * (int32_t)b; - return r >> 16; -} -int16_t mul16uu(uint16_t a, uint16_t b) -{ - uint32_t r = (int32_t)a * (int32_t)b; - return r >> 16; -} -uint16_t divmod10(uint16_t u, uint8_t *mod) -{ - uint32_t r = (uint32_t)u * (uint32_t)6554; - *mod = (((r & 0xff00)+0x100)*10) >> 16; - return r >> 16; -} - -#endif // MUL_DEBUG - -#ifdef MUL_DECIMAL_STR -static uint8_t decimals[8]; -char *decimal_str(int16_t b, uint8_t dec) -{ - uint8_t s = 0; - if (b<0) { - s = 1; - b = -b; - } - uint8_t *c = decimals+6; - uint8_t n = 0; - while ((b || n < dec) && n<7) { - b = divmod10(b, c); - *c-- += '0'; - if (++n==dec) { - *c-- = '.'; - n++; - } - } - if (!n) - *c = '0'; - else if (s) - *c = '-'; - else - *c = '+'; - return (char *)c; -} -#endif diff --git a/src/mul.h b/src/mul.h deleted file mode 100644 index ff602d6..0000000 --- a/src/mul.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// mul.h -// - -#include - -int16_t mul16su(int16_t s, uint16_t u); -int16_t mul16ss(int16_t a, int16_t b); -int16_t mul16uu(uint16_t a, uint16_t b); -int16_t mul16sun(int16_t s, uint16_t u, uint8_t n); -char *decimal_str(int16_t b, uint8_t dec); - -#if defined(MUL_DIVMOD10) || defined(MUL_ALL) -uint16_t divmod10(uint16_t u, uint8_t *mod); -#endif diff --git a/src/rtc.c b/src/rtc.c index 691437e..6aca7bc 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -4,7 +4,6 @@ // !!! int = int8_t -#include "bate.h" #include "rtc.h" #include @@ -18,8 +17,6 @@ volatile uint8_t clock_tick; void init_rtc(uint8_t p) { - if (p>=16) - p = RTC_PERIOD_CYC1024_gc; RTC.CLKSEL = RTC_CLKSEL_INT1K_gc; RTC.PITINTCTRL = 1; RTC.PITCTRLA = p; @@ -33,33 +30,26 @@ ISR(RTC_PIT_vect, ISR_NAKED) __asm__ ("push r24" "\n\t" "in r24, __SREG__" "\n\t" "push r24" "\n\t" -#ifdef DEBUG - "lds r24, debug_data+9" "\n\t" - "subi r24, -1" "\n\t" - "sts debug_data+9, r24" "\n\t" -#endif "ldi r24,1" "\n\t" "sts %[flag], r24" "\n\t" - "sts %[tick], r24" "\n\t" - "lds r24, %[clock]" "\n\t" + "sts clock_tick, r24" "\n\t" + "lds r24, clock" "\n\t" "subi r24, -1" "\n\t" - "sts %[clock], r24" "\n\t" - "lds r24, %[clock]+1" "\n\t" + "sts clock, r24" "\n\t" + "lds r24, clock+1" "\n\t" "sbci r24, -1" "\n\t" - "sts %[clock]+1, r24" "\n\t" - "lds r24, %[clock]+2" "\n\t" + "sts clock+1, r24" "\n\t" + "lds r24, clock+2" "\n\t" "sbci r24, -1" "\n\t" - "sts %[clock]+2, r24" "\n\t" - "lds r24, %[clock]+3" "\n\t" + "sts clock+2, r24" "\n\t" + "lds r24, clock+3" "\n\t" "sbci r24, -1" "\n\t" - "sts %[clock]+3, r24" "\n\t" + "sts clock+3, r24" "\n\t" "pop r24" "\n\t" "out __SREG__, r24" "\n\t" "pop r24" "\n\t" "reti" "\n" - :[tick] "+m" (clock_tick), - [clock] "+m" (clock) - :[flag] "n" (&RTC.PITINTFLAGS) + ::[flag] "n" (&RTC.PITINTFLAGS) ); } #else diff --git a/src/spi.c b/src/spi.c index 3de72f6..9dbbca7 100644 --- a/src/spi.c +++ b/src/spi.c @@ -5,64 +5,121 @@ // !!! int = int8_t #include "spi.h" -#include "bate.h" #include -#include +#include -volatile uint8_t spi_tick; +struct spi_job spi; -// The Pressure sensor samples on the rising edge, MODE = 0 -static const uint8_t SPI_Mode_Write = SPI_SSD_bm | SPI_BUFEN_bm; - -// The Pressure sensor delivers on the rising edge, MODE = 1 -static const uint8_t SPI_Mode_Read = SPI_SSD_bm | SPI_BUFEN_bm | SPI_MODE_0_bm; - -void init_spi(uint8_t div) +void init_spi(uint8_t spi_div) { - if (div & ~SPI_PRESC_gm) - div = SPI_PRESC_DIV64_gc; - SPI.CTRLB = SPI_Mode_Write; - SPI.CTRLA = SPI_MASTER_bm | SPI_ENABLE_bm | div; + SSEL_PORT.OUT |= 1 << SSEL_PIN; + SSEL_PORT.DIR |= 1 << SSEL_PIN; + SPI.CTRLB = SPI_SSD_bm | SPI_BUFEN_bm; // Mode 0 + SPI.CTRLA = SPI_MASTER_bm | SPI_ENABLE_bm | spi_div; SPI.DATA; SPI.DATA; SPI.INTFLAGS = 0xff; - SPI.INTCTRL = SPI_TXCIE_bm; + SPI.INTCTRL = 0; } -uint16_t spi_frame(uint16_t d) +ISR(SPI0_INT_vect) { - if (d) - SPI.CTRLB = SPI_Mode_Write; - else - SPI.CTRLB = SPI_Mode_Read; - SPI.DATA; - SPI.DATA; - SPI.INTFLAGS = 0xff; - spi_tick = 0; - SPI.DATA = d >> 8; - SPI.DATA = d; - uint8_t timeout = 20; // 20×15µs = 300µs - sei(); - while (!spi_tick) { - sleep_cpu(); - if (!--timeout) { - DEBUG_COUNTER(spi_timeout); + uint8_t ifg = SPI.INTFLAGS; + while (ifg & SPI_DREIF_bm) { + if (spi.csize) { + SPI.DATA = *spi.cmd++; + spi.csize--; + } + else if (spi.zsize) { + SPI.DATA = spi.zero; + spi.zsize--; + } + else if (spi.wsize) { + if (spi.wdata) + SPI.DATA = *spi.wdata++; + else + SPI.DATA = spi.zero; + } + else { + if (ifg & SPI_TXCIF_bm) { + if (!(spi.mode & SPI_CONT)) + SSEL_PORT.OUT |= 1 << SSEL_PIN; + spi.status |= SPI_IDLE; + SPI.INTCTRL = SPI_RXCIF_bm; + } + else { + SPI.INTCTRL = SPI_TXCIF_bm | SPI_RXCIF_bm; + } break; } + ifg = SPI.INTFLAGS; + } + while (ifg & SPI_RXCIF_bm) { + uint8_t d = SPI.DATA; // clears the IF flag + if (spi.isize) + spi.isize --; + else { + if (spi.mask) { + if ((d & spi.mask) == spi.wait) { + spi.zsize++; + SPI.INTCTRL = SPI_DREIF_bm | SPI_RXCIF_bm; + continue; + } + spi.mask = 0; + } + if (spi.rsize) { + *spi.rdata++ = d; + spi.rsize--; + } + else if (!spi.mask) { + SPI.INTCTRL = SPI_DREIF_bm; + } + } + ifg = SPI.INTFLAGS; } - uint16_t b = SPI.DATA; - return (b<<8) | SPI.DATA; } -ISR(SPI0_INT_vect, ISR_NAKED) +uint8_t spi_select(uint8_t mode) { - __asm__ ("push r24" "\n\t" - "lds r24, %[flag]" "\n\t" - "sts %[flag], r24" "\n\t" - "sts spi_tick, r24" "\n\t" - "pop r24" "\n\t" - "reti" "\n" - : : [flag] "n" (&SPI.INTFLAGS) - ); + uint8_t s = spi_busy_p(); + if (s) + return s; + memset(&spi, 0, sizeof(spi)); + spi.mode = mode; + if (mode & SPI_FLASH) + SSEL_PORT.OUT &=~ (1 << SSEL_PIN); + else + SSEL_PORT.OUT |= 1 << SSEL_PIN; + if (mode & SPI_CONFIG) + SPI.CTRLA |= SPI_DORD_bm; + else + SPI.CTRLA &=~ SPI_DORD_bm; + return 0; } + +void spi_start_cmd(uint8_t csize, uint8_t *cmd) +{ + spi.cmd = cmd; + barrier(); + spi.csize = csize; + spi_start(); +} + +void spi_start_write(uint8_t csize, uint8_t *cmd, uint8_t wsize, uint8_t *wdata) +{ + spi.wdata = wdata; + barrier(); + spi.wsize = wsize; + spi_start_cmd(csize, cmd); +} + +void spi_start_read(uint8_t csize, uint8_t *cmd, uint8_t rsize, uint8_t *rdata) +{ + spi.rdata = rdata; + spi.isize = csize + spi.zsize; + barrier(); + spi.wsize = rsize; // more zeros + spi.rsize = rsize; + spi_start_cmd(csize, cmd); +} diff --git a/src/spi.h b/src/spi.h index 97aa5e9..b1c7bf5 100644 --- a/src/spi.h +++ b/src/spi.h @@ -4,10 +4,65 @@ #include #include +#include #define SPI SPI0 +#define SSEL_PORT VPORTB +#define SSEL_PIN 0 +#define SPI_SPEED (SPI_CLK2X_bm | SPI_PRESC_DIV4_gc) -extern volatile uint8_t spi_tick; -uint16_t spi_frame(uint16_t d); -void init_spi(uint8_t div); -static inline void spi_off() { SPI.INTCTRL = SPI.CTRLA = 0; } +extern +struct spi_job { + uint8_t mode; + uint8_t status; + uint8_t csize; + uint8_t zsize; + uint8_t isize; + uint8_t rsize; + uint8_t wsize; + uint8_t zero; + uint8_t wait; + uint8_t mask; + const uint8_t *cmd; + const uint8_t *wdata; + uint8_t *rdata; +} spi; + +enum spi_mode_bits { + SPI_FLASH = 0x01, + SPI_CONFIG = 0x02, + SPI_CONT = 0x80, +}; + +enum spi_status_bits { + SPI_IDLE = 0x01, +}; + +static inline +uint8_t spi_abort() +{ + cli(); + uint8_t f = SPI.INTFLAGS; + SPI.INTFLAGS = 0; + sei(); + return f; +} + +static inline +uint8_t spi_busy_p() +{ + return SPI.INTFLAGS; +} + +static inline +void spi_start() +{ + SPI.INTCTRL = SPI_DREIF_bm | SPI_RXCIF_bm; +} + +static inline void barrier() { __asm__("":::"memory"); } +void init_spi(uint8_t spi_div); +uint8_t spi_select(uint8_t mode); +void spi_start_cmd(uint8_t csize, uint8_t *cmd); +void spi_start_write(uint8_t csize, uint8_t *cmd, uint8_t wsize, uint8_t *wdata); +void spi_start_read(uint8_t csize, uint8_t *cmd, uint8_t rsize, uint8_t *rdata); diff --git a/src/uart.c b/src/uart.c index 52a36d3..71b45d9 100644 --- a/src/uart.c +++ b/src/uart.c @@ -4,99 +4,44 @@ // !!! int = int8_t -#include "bate.h" -#include "mul.h" - #include -#include #include #define Bit(x) (1<<(x)) -// 10 MHz / 2400 / 16 * 64 -#define UART_DIV 16667 - __attribute__ ((noinline, noclone)) -void init_uart(uint16_t div, uint8_t mode) +void init_uart(uint16_t mode, uint16_t div) { - if (mode==0xff) - mode = USART_TXEN_bm; - mode |= USART_TXEN_bm; - if (div<64) - div = UART_DIV; USART0.BAUD = div; - PORTB.DIRSET = Bit(2); + VPORTB.DIR |= Bit(2); USART0.CTRLB = mode; - if (mode & USART_RXEN_bm) - USART0.CTRLA = USART_RXCIE_bm; - // `BOTHEDGES` should wake from power down sleep() - PORTB.PIN3CTRL = PORT_PULLUPEN_bm | PORT_ISC_BOTHEDGES_gc; -} - -volatile uint8_t rx_tick; - -ISR(PORTB_PORT_vect, ISR_NAKED) -{ - __asm__ ("push r24" "\n\t" - "lds r24, %[stat]" "\n\t" - "sts %[stat], r24" "\n\t" - "sts rx_tick, r24" "\n\t" - "pop r24" "\n\t" - "reti" "\n" - : : [stat] "n" (&VPORTB.INTFLAGS) - ); -} - -__attribute__ ((noinline, noclone)) -uint8_t uart_tick() -{ - cli(); - uint8_t r = rx_tick; - rx_tick = 0; - sei(); - return r; + USART0.CTRLC = mode >> 8; + USART0.CTRLA = USART_RXCIE_bm; } // `uart_tx` buffer size must be a power of 2, max 256. -// Fix `tx()` and `put_char()` / `put_char:` -// when the size changes. -// For now, we can afford half of the available RAM, -// and still have 128 bytes for the stack -#ifdef UART_TX_SMALL -uint8_t uart_tx[128]; -#else -uint8_t uart_tx[256]; -#endif +uint8_t uart_tx[32]; #define uart_tx_m (sizeof(uart_tx) - 1) volatile uint8_t uart_tx_w; volatile uint8_t uart_tx_r; -volatile uint8_t uart_tx_busy; -uint8_t uart_cks; #if 0 __attribute__ ((noinline, noclone)) void tx() { - // interrupts must be disabled - if (USART0.STATUS & USART_TXCIF_bm) { - USART0.STATUS = USART_TXCIF_bm; - uart_tx_busy = 0; - } // read volatile memory once, for speed uint8_t r = uart_tx_r; uint8_t w = uart_tx_w; while (w - r) { - uart_tx_busy = w - r; if (!(USART0.STATUS & USART_DREIF_bm)) { - USART0.CTRLA |= USART_DREIE_bm | USART_TXCIE_bm; + USART0.CTRLA |= USART_DREIE_bm; uart_tx_r = r; return; } USART0.TXDATAL = uart_tx[r++ & uart_tx_m]; - // race? TXC while we were looping? Drop it. - USART0.STATUS = USART_TXCIF_bm; + USART0.STATUS |= USART_TXCIF_bm } uart_tx_r = r; USART0.CTRLA &=~ USART_DREIE_bm; @@ -104,7 +49,6 @@ void tx() ISR(USART0_DRE_vect) { - DEBUG_COUNTER(tx_irqs); tx(); } @@ -113,57 +57,43 @@ ISR(USART0_DRE_vect) __attribute__ ((noinline, noclone)) void tx() { - // This uses only six registers, to save stack in the ISR. - // r0 and r1 need not be saved - // Avoids unlikely branches. - // [STATUS] is prepared in advance, to avoid two branches and one memory load, - // at the cost of one register on the ISR stack (r25) + // This uses only three registers, to save stack in the ISR. __asm__("\n" - " lds r21, uart_tx_r \n" - " lds r19, uart_tx_w \n" " lds r25, %[CTRLA] \n" - " andi r25, ~0x20 ; clr DREIE \n" - " lds r30, %[STATUS] \n" - " ldi r24, 0x40 \n" - " and r30, r24 ; TXCIF \n" - " breq 2f \n" - " sts %[STATUS], r24 ; clr TXCIF \n" - " ldi r31, 0 \n" - " sts uart_tx_busy, r31 \n" + " andi r25, ~(1<<%[DRE]) \n" " rjmp 2f \n" - " \n" "1: \n" - " mov r30, r21 ; \n" - " subi r21, 0xff ; r++ & uart_tx_m \n" -#ifdef UART_TX_SMALL - " andi r30, 0x7f ; \n" -#endif - " ldi r31, 0 \n" + " mov r31, r30 ; \n" + " subi r31, 0xff ; r++ & uart_tx_m \n" + " sts uart_tx_r, r31 \n" + " andi r30, 0x1f ; \n" + " clr r31 \n" " subi r30, lo8(-(uart_tx)) \n" " sbci r31, hi8(-(uart_tx)) \n" - " ld r24, Z \n" - " sts %[TXDATA], r24 \n" - " ldi r24, 0x40 \n" - " sts %[STATUS], r24 ; clr TXCIF \n" + " ld r30, Z \n" + " sts %[TXDATA], r30 \n" + " ldi r30, 1<<%[TXC] \n" + " sts %[STATUS], r30 \n" "2: \n" - " cp r21, r19 \n" + " lds r30, uart_tx_r \n" + " lds r31, uart_tx_w \n" + " cp r30, r31 \n" " breq 3f \n" - " sts uart_tx_busy, r24 ; =0x40 \n" - " lds r24, %[STATUS] \n" - " sbrc r24, 5 ; DREIF \n" + " lds r30, %[STATUS] \n" + " sbrc r30, %[DRE] \n" " rjmp 1b \n" - " ori r25, 0x60 ; set DREIE TXCIE \n" + " ori r25, 1<<%[DRE] \n" "3: \n" " sts %[CTRLA], r25 \n" " sts uart_tx_r, r21 \n" : - : [STATUS] "n" (&USART0.STATUS), - [CTRLA] "n" (&USART0.CTRLA), - [TXDATA] "n" (&USART0.TXDATAL) - : "r19", "r21", - "r24", "r25", - "r30", "r31", - "memory" + : + [TXC] "n" (USART_TXCIF_bp), + [DRE] "n" (USART_DREIF_bp), + [CTRLA] "n" (&USART0.CTRLA), + [STATUS] "n" (&USART0.STATUS), + [TXDATA] "n" (&USART0.TXDATAL) + : "r25", "r30", "r31", "memory" ); } @@ -174,30 +104,17 @@ ISR(USART0_DRE_vect, ISR_NAKED) // OTOH, the C implementation of tx() is not bad either, // if we are doing this asm, then we do it agressively. __asm__("\n" - " push r24 \n" - " in r24, __SREG__ \n" - " push r24 \n" " push r25 \n" - " push r19 \n" - " push r21 \n" + " in r25, __SREG__ \n" + " push r25 \n" " push r30 \n" " push r31 \n" - " \n" -#ifdef DEBUG - " lds r24, debug_data + 3 \n" - " subi r24, 0xff \n" - " sts debug_data + 3, r24 \n" -#endif " rcall tx \n" - " \n" " pop r31 \n" " pop r30 \n" - " pop r21 \n" - " pop r19 \n" " pop r25 \n" - " pop r24 \n" - " out __SREG__, r24 \n" - " pop r24 \n" + " out __SREG__, r25 \n" + " pop r25 \n" " reti \n" ); } @@ -206,26 +123,28 @@ ISR(USART0_DRE_vect, ISR_NAKED) ISR(USART0_TXC_vect, ISR_ALIASOF(USART0_DRE_vect)); -uint8_t uart_rx[16]; +uint8_t uart_rx[32]; #define uart_rx_m (sizeof(uart_rx) - 1) volatile uint8_t uart_rx_w; +volatile uint8_t uart_rx_s; volatile uint8_t uart_rx_mes; +uint8_t uart_rx_err; +uint8_t uart_rx_errors; #if 0 ISR(USART0_RXC_vect) { - DEBUG_COUNTER(rx_irqs); - // s/while/if/ ! if (USART0.STATUS & USART_RXCIF_bm) { - uint8_t c = USART0.RXDATAL; - DEBUG_POKE(rx_char, c); + uart_rx_s |= USART0.RXDATAH; uint8_t w = uart_rx_w; - uart_rx[w] = c; - if (w < uart_rx_m) - uart_rx_w = ++w; - if (!uart_rx_mes && c=='\n') - uart_rx_mes = w; + if (w<=uart_rx_m) { + uint8_t c = USART0.RXDATAL; + uart_rx[w++] = c; + if (!uart_rx_mes && c=='\n') + uart_rx_mes = w; + uart_rx_w = w; + } } } #else @@ -246,23 +165,19 @@ ISR(USART0_RXC_vect, ISR_NAKED) " push r24 \n" " push r30 \n" " push r31 \n" -#ifdef DEBUG - " lds r24, debug_data + 4 \n" - " subi r24, -1 \n" - " sts debug_data + 4, r24 \n" -#endif - " lds r24, %[RXDATA] \n" + " lds r24, %[DH] \n" + " lds r30, uart_rx_s \n" + " and r24, r30 \n" + " sts uart_rx_s, r24 \n" + " lds r24, %[DL] \n" " lds r30, uart_rx_w \n" + " cpi r30, 0x20 \n" + " brcc 1f \n" " ldi r31, 0 \n" " subi r30, lo8(-(uart_rx)) \n" " sbci r31, hi8(-(uart_rx)) \n" " st Z+, r24 \n" -#ifdef DEBUG - " sts debug_data + 5, r24 \n" -#endif " subi r30, lo8(uart_rx) \n" - " sbrc r30, 4 ; log2(sizeof(uart_rx)) \n" - " subi r30, 1 \n" " sts uart_rx_w, r30 \n" " cpi r24, '\n' \n" " brne 1f \n" @@ -277,145 +192,7 @@ ISR(USART0_RXC_vect, ISR_NAKED) " out __SREG__, r24 \n" " pop r24 \n" " reti \n" - : : [RXDATA] "n" (&USART0.RXDATAL) + :: [DL] "n" (&USART0.RXDATAL), [DH] "n" (&USART0.RXDATAH) ); } #endif - -#if 0 -// These are implemented in `uart_tx.S` - -__attribute__ ((noinline, noclone)) -uint8_t uart_put_char(uint8_t c) -{ - uint8_t r = uart_tx_r; - uint8_t w = uart_tx_w; - uint8_t ww = w + 1; - if ((ww & uart_tx_m) == (r & uart_tx_m)) - return 1; - uart_tx[w & uart_tx_m] = c; - __asm__("" ::: "memory"); - uart_tx_w = ww; - __asm__("" ::: "memory"); - return 0; -} - -__attribute__ ((noinline, noclone)) -void send_char(uint8_t c) -{ - uint8_t s = 0; - uint8_t b; - while (1) { - b = uart_put_char(c); - uart_busy(); - if (!b) - break; - sleep_cpu(); - s = 1; - } - if (s) - DEBUG_COUNTER(tx_sleep); -} - -__attribute__ ((noinline, noclone)) -void send_str(const char *s) -{ - while (*s) { - uint8_t c = *s++; - if (!uart_put_char(c)) - continue; - send_char(c); - } - uart_busy(); -} - -static inline -void rx_dismiss(uint8_t n) -{ - cli(); - uint8_t i = 0; - uint8_t m = 0; - uint8_t w = uart_rx_w; - if (w != uart_rx_m) - while (n < w) { - uint8_t c = uart_rx[n++]; - uart_rx[i++] = c; - if (!m && c=='\n') - m = i; - } - uart_rx_mes = m; - uart_rx_w = i; - sei(); -} - -__attribute__ ((noinline, noclone)) -uint8_t uart_busy() -{ - cli(); - tx(); - sei(); - return uart_tx_busy; -} - -static __attribute__ ((noinline, noclone)) -void send_hex_nibble(uint8_t b) -{ - b += '0'; - if (b>'9') - b += '@' - '9'; - send_char(b); -} - -__attribute__ ((noinline, noclone)) -void send_hex_byte(uint8_t b) -{ - send_hex_nibble(b >> 4); - send_hex_nibble(b & 0xf); -} - -__attribute__ ((noinline, noclone)) -void send_hex_word(uint16_t b) -{ - send_hex_byte(b >> 8); - send_hex_byte(b); -} - -__attribute__ ((noinline, noclone)) -void send_hex(uint8_t header, const uint8_t *s, uint8_t n, uint8_t words) -{ - // dump little endian words. - send_char(header); - while (n--) { - if (words & 1) - send_char(' '); - uint8_t l = *(s++); - if (words & 2 && n & 1) { - send_hex_byte(*(s++)); - n--; - } - send_hex_byte(l); - } - send_char('\n'); -} - -void command(void) -{ - uint8_t m = uart_rx_mes; - if (!m) - return; - uint8_t *s = uart_rx; - uint8_t i = 0; - uint8_t c; - send_str("R "); - while (i++ < m) { - c = *s++; - send_char(c); - } - if (c != '\n') - send_char('\n'); - else - parse_command(uart_rx, m); - rx_dismiss(m); -} - -#endif diff --git a/src/uart.h b/src/uart.h index 50bce62..a84b70f 100644 --- a/src/uart.h +++ b/src/uart.h @@ -7,14 +7,10 @@ #include #include -void init_uart(uint16_t div, uint8_t mode); -uint8_t uart_tick(); +#define UART_MODE 0x03c0 +#define UART_BAUD 5555 // 115200 baud -static inline -uint8_t uart_break_p() -{ - return !(VPORTB.IN & 0x08); -} +void init_uart(uint16_t mode, uint16_t div); void send_char(uint8_t c); void send_eol(); @@ -24,10 +20,7 @@ void send_hex_word(uint16_t b); void send_hex(uint8_t header, const uint8_t *s, uint8_t n, uint8_t words); uint8_t uart_busy(); void command(void); - -void send_decimal(uint16_t b, uint8_t dec); - -void parse_command(uint8_t *s, uint8_t n); +void parse_command(const uint8_t *s, uint8_t n); static inline void send_hex_long(uint32_t b) @@ -36,5 +29,5 @@ void send_hex_long(uint32_t b) send_hex_word(b); } -extern uint8_t uart_cks; -void send_cks(); +extern uint8_t uart_rx_err; +extern uint8_t uart_rx_errors; diff --git a/src/uart_tx.S b/src/uart_tx.S index 40d31d5..08c24b2 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -3,17 +3,18 @@ // // avoid quite a few push and pops and jumps +#include + .global send_hex_word .global send_hex_byte .global send_char .global send_str .global uart_busy .global send_hex - .global send_cks .global send_eol .global command -// `tx()` and `put_char()` do not gobble r18, r20, r22, r23, r26, and r27. +// `tx()` and `put_char()` do not gobble r18-r24, r26, and r27. put_char: // non-global, non-C @@ -23,21 +24,14 @@ put_char: ldi r19, 1 add r19, r30 eor r23, r19 -#ifdef UART_TX_SMALL - andi r23, 0x7f // uart_tx_m + andi r23, 0x1f // uart_tx_m breq 1f - andi r30, 0x7f // uart_tx_m -#else - breq 1f -#endif + andi r30, 0x1f // uart_tx_m ldi r31, 0 subi r30, lo8(-(uart_tx)) sbci r31, hi8(-(uart_tx)) st Z, r22 sts uart_tx_w, r19 - lds r19, uart_cks - add r19, r22 - sts uart_cks, r19 1: // r22 preserved // r23 full when zero @@ -87,19 +81,13 @@ send_str: brne 2b uart_busy: cli - rcall tx ; gobbles only r19, r21, r24, r25, r30, and r31 + rcall tx ; gobbles r25, r30, and r31 sei - lds r24, uart_tx_busy + lds r24, USART0_STATUS + andi r24, SPI_TXCIF_bm 9: ret - ; send_hex('Q', &uart_cks, 1, 0); -send_cks: - ldi r24, 'Q' - ldi r18, 0 - ldi r20, 1 - ldi r22, lo8(uart_cks) - ldi r23, hi8(uart_cks) send_hex: movw r26, r22 rcall send_char @@ -129,42 +117,41 @@ send_eol: rjmp send_char22 command: - lds r20, uart_rx_mes - tst r20 - breq 9b - ldi r22, 'R' - rcall send_char22 - ldi r22, '>' - rcall send_char22 - ldi r26, lo8(uart_rx) - ldi r27, hi8(uart_rx) - mov r18, r20 -1: - ld r22, X+ - rcall send_char22 - subi r18, 1 - brne 1b + ;; when any frame errors occured, dismiss the buffer + lds r22, uart_rx_s + andi r22, 0x46 + brne uart_errs_p + ;; when there is no message, check for overflow + lds r22, uart_rx_mes + tst r22 + breq uart_full_p + ;; when the buffer was dismissed for errors, skip this command + push r22 + lds r24, uart_rx_err + sts uart_rx_err, r1 + lds r25, uart_rx_errors + or r25, r24 + sts uart_rx_errors, r25 + tst r24 + brne 2f ldi r24, lo8(uart_rx) ldi r25, hi8(uart_rx) - mov r22, r20 - push r20 rcall parse_command +2: pop r24 rx_dismiss: cli lds r18, uart_rx_w clr r19 clr r20 - cpi r18, 15 - brcc 3f sub r18, r24 breq 3f - brcs 3f // TCNH, n > w + brcs 3f ldi r26, lo8(uart_rx) ldi r27, hi8(uart_rx) movw r30, r26 add r30, r24 - adc r31, r1 + adc r31, r20 1: ld r25, Z+ st X+, r25 @@ -175,7 +162,7 @@ rx_dismiss: brne 2f mov r20, r19 2: - cp r19, r18 + subi r18, 1 brne 1b 3: sts uart_rx_mes, r20 @@ -183,3 +170,15 @@ rx_dismiss: sei 9: ret + +uart_full_p: + lds r22, uart_rx_w + andi r22, 0x20 + breq 9b +uart_errs_p: + lds r24, uart_rx_err + or r24, r22 +rx_dismiss_buffer: + sts uart_rx_err, r24 + lds r24, uart_rx_w + rjmp rx_dismiss From 46809f6fac56dc4b57d8b89f57fe6fec23058522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sat, 3 Jan 2026 00:30:48 +0100 Subject: [PATCH 09/33] coding for 36h straight --- src/Makefile | 2 +- src/adc.c | 204 ++++++++++++-------------------------------------- src/adc.h | 6 +- src/cmd.c | 81 +++++++++++++++----- src/cmd.h | 3 +- src/config.c | 57 ++++++++++++++ src/config.h | 43 +++++++++++ src/dose.c | 31 +++----- src/dose.h | 17 +---- src/eeprom.ld | 6 ++ src/flash.c | 91 +++++++++++++++++++++- src/flash.h | 4 +- src/pwm.c | 30 ++++++++ src/pwm.h | 32 ++++++++ src/rtc.c | 134 +++++++++++++++++++++++---------- src/rtc.h | 50 ++++++++++++- src/spi.c | 15 +++- src/spi.h | 10 ++- src/uart.c | 21 +++--- src/uart.h | 8 +- src/uart_tx.S | 85 +++++++++------------ 21 files changed, 593 insertions(+), 337 deletions(-) create mode 100644 src/config.c create mode 100644 src/config.h create mode 100644 src/pwm.c create mode 100644 src/pwm.h diff --git a/src/Makefile b/src/Makefile index ee2dc91..b7c30e1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,7 +8,7 @@ all: $(PROJ).hex SN_dose = 1 MCU_dose = attiny424 -C_FILES_dose = cmd.c uart.c base85.c bch4369.c rtc.c spi.c flash.c +C_FILES_dose = config.c cmd.c pwm.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c S_FILES_dose = uart_tx.S base85a.S MCU = $(MCU_$(PROJ)) diff --git a/src/adc.c b/src/adc.c index 905fbee..829f1b6 100644 --- a/src/adc.c +++ b/src/adc.c @@ -3,9 +3,6 @@ // #include "adc.h" -#include "bate.h" -#include "mul.h" -#include "eeprom.h" #include enum adc_conf_parameter { @@ -14,64 +11,52 @@ enum adc_conf_parameter { REF = 10 << ADC_TIMEBASE_gp, MODE = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc, MODE_DIFF = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc | ADC_DIFF_bm, - V_RFP = ADC_MUXPOS_AIN4_gc, - V_NTC = ADC_MUXPOS_AIN6_gc, - V_BAT = ADC_MUXPOS_AIN7_gc, + VD1 = ADC_MUXPOS_AIN7_gc, + VD2 = ADC_MUXPOS_AIN10_gc, + VDG = ADC_MUXPOS_AIN6_gc, }; -struct adc_conf adc_conf[N_ADC] ADC_CONF_ADDR = { - { // Internal Temperature - .mode = MODE, - .ref = REF | ADC_REFSEL_1024MV_gc, - .inp = INP | ADC_MUXPOS_TEMPSENSE_gc, - .calib = 80 * 256, - .shifts = 1, - }, +__attribute__((section(".eeprom1"))) +struct adc_conf adc_conf[N_ADC] = { { // V_CC / 10 .mode = MODE, .ref = REF | ADC_REFSEL_1024MV_gc, .inp = INP | ADC_MUXPOS_VDDDIV10_gc, - .calib = 1024 * 10, - .shifts = 3, // V [×10] }, - { // Batterie Voltage / 11 + { // Internal Temperature .mode = MODE, .ref = REF | ADC_REFSEL_1024MV_gc, - .inp = INP | V_BAT, - .calib = 1024 * 11, - .shifts = 3, // V [×11] + .inp = INP | ADC_MUXPOS_TEMPSENSE_gc, }, - { // NTC biased by V_RF - .mode = MODE_DIFF, + { // VD1 + .mode = MODE, .ref = REF | ADC_REFSEL_1024MV_gc, - .inp = INP | V_NTC, - .inn = INP | V_RFP, - .calib = 2048 * 10, - .shifts = 1, // mV + .inp = INP | VD1, }, - { // NTC biased by V_RF + { // VD2 + .mode = MODE, + .ref = REF | ADC_REFSEL_1024MV_gc, + .inp = INP | VD2, + }, + { // VD1 .mode = MODE, .ref = REF | ADC_REFSEL_2500MV_gc, - .inp = INP | V_NTC, - .calib = 2500 * 10, - .shifts = 1, + .inp = INP | VD1, }, - { // NTC biased by V_RF - .mode = MODE, - .ref = REF | ADC_REFSEL_VDD_gc, - .inp = INP | V_NTC, - }, - { // Transmitter power + { // VD2 .mode = MODE, .ref = REF | ADC_REFSEL_2500MV_gc, - .inp = INP | V_RFP, - .calib = 2500 * 10, - .shifts = 1, + .inp = INP | VD2, }, - { // Transmitter power + { // VDG + .mode = MODE, + .ref = REF | ADC_REFSEL_2500MV_gc, + .inp = INP | VDG, + }, + { // VDG .mode = MODE, .ref = REF | ADC_REFSEL_VDD_gc, - .inp = INP | V_RFP, + .inp = INP | VDG, }, }; @@ -87,13 +72,17 @@ void start_conversion(const struct adc_conf *c) ADC.COMMAND = c->mode; } +#ifdef NO_EE_CONFIG + void init_adc() { - PORTA.PIN4CTRL |= PORT_ISC_INPUT_DISABLE_gc; + PORTB.PIN1CTRL |= PORT_ISC_INPUT_DISABLE_gc; PORTA.PIN6CTRL |= PORT_ISC_INPUT_DISABLE_gc; PORTA.PIN7CTRL |= PORT_ISC_INPUT_DISABLE_gc; } +#endif + void start_adc() { if (!adc_conf->mode) @@ -112,19 +101,17 @@ void start_adc() #if 0 ISR(ADC0_RESRDY_vect) { - DEBUG_COUNTER(adc_irqs); - uint8_t i = adc_current; if (i >= N_ADC) goto stop; adc_readings[i] = *(volatile uint16_t *) &ADC.RESULT; - if (++i < N_ADC) { + while (++i < N_ADC) { const struct adc_conf *c = adc_conf + i; - if (c->mode || c->mode == 0xff) - goto stop; - adc_current = i; - start_conversion(c); - return; + if (c->mode) { + start_conversion(c); + adc_current = i; + return; + } } stop: ADC.CTRLA = 0; @@ -149,7 +136,7 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "push r31" "\n\t" "lds r24, adc_current" "\n\t" "cpi r24, %[NADC]" "\n\t" - "brsh 3f" "\n\t" + "brcc 3f" "\n\t" "mov r30, r24" "\n\t" "ldi r31, 0" "\n\t" "lsl r30" "\n\t" @@ -158,22 +145,18 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "lds r25, %[RESULT]" "\n\t" "st Z, r25" "\n\t" "lds r25, %[RESULT]+1" "\n\t" - "std Z+1, r25" "\n\t" - "cpi r24, %[NADC]-1" "\n\t" - "brsh 3f" "\n\t" - "subi r24, 0xff" "\n\t" + "std Z+1, r25" "\n" + "1:" "\n\t" + "subi r24, -1" "\n\t" + "cpi r24, %[NADC]" "\n\t" + "brcc 3f" "\n\t" "mov r30, r24" "\n\t" "ldi r31, 0" "\n\t" "lsl r30" "\n\t" "lsl r30" "\n\t" - "lsl r30" "\n\t" + "lsl r30 ; NADC==8!" "\n\t" "subi r30, lo8(-(adc_conf))" "\n\t" - "sbci r31, hi8(-(adc_conf))" "\n" - "1:" "\n\t" - "ld r25, Z" "\n\t" - "subi r25, 1" "\n\t" - "cpi r25, 0xfe" "\n\t" - "brsh 3f" "\n\t" + "sbci r31, hi8(-(adc_conf))" "\n\t" "ldd r25, Z+1" "\n\t" "sts %[CTRLC], r25" "\n\t" "ldd r25, Z+3" "\n\t" @@ -181,6 +164,8 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "ldd r25, Z+2" "\n\t" "sts %[MUXPOS], r25" "\n\t" "ld r25, Z" "\n\t" + "tst r25" "\n\t" + "breq 1b" "\n\t" "sts %[COMMAND], r25" "\n" "2:" "\n\t" "sts adc_current, r24" "\n\t" @@ -207,98 +192,3 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) ); } #endif - -static inline -int16_t calib_temp(uint16_t a) -{ - uint16_t calib = SIGROW.TEMPSENSE0; - int16_t offset = (int8_t) SIGROW.TEMPSENSE1; - a >>= 1; - a -= offset << 5; - a = mul16sun(calib, a, 8); - a -= 8741; - // [K × 32] - return a; -} - -// saturating addition, signed + signed - -static inline -int16_t saddss(int16_t a, int16_t o) -{ - __asm__( - " add %A[a], %A[o] \n" - " adc %B[a], %B[o] \n" - " brvc 1f \n" - " ldi %A[a], 0xff \n" - " ldi %B[a], 0x7f \n" - " brmi 1f \n" - " adiw %[a], 1 \n" - "1: \n" - : [a] "+w" (a) - : [o] "r" (o) - ); - return a; -} - -// saturating addition, unsigned + signed - -static inline -uint16_t saddus(uint16_t a, int16_t o) -{ - __asm__( - " add %A[a], %A[o] \n" - " adc %B[a], %B[o] \n" - " tst %B[o] \n" - " brmi 1f \n" - " brcc 3f \n" - " rjmp 2f \n" - "1: \n" - " brcs 3f \n" - "2: \n" - " ldi %A[a], 0xff \n" - " ldi %B[a], 0xff \n" - " brcs 3f \n" - " adiw %[a], 1 \n" - "3: \n" - : [a] "+w" (a) - : [o] "r" (o) - ); - return a; -} - -void send_calib_adc(uint8_t i) -{ - struct adc_conf *conf = adc_conf + i; - uint8_t sgnd = conf->mode & ADC_DIFF_bm; - int16_t offset = (int16_t)conf->offset; - uint16_t calib = conf->calib; - uint16_t a = adc_readings[i]; - - if (conf->inp == ADC_MUXPOS_TEMPSENSE_gc) { - a = calib_temp(a); - sgnd = 1; - } - - if (sgnd) - a = saddss(a, offset); - else - a = saddus(a, offset); - - if (!calib) { - send_str(" 0x"); - send_hex_word(a); - return; - } - uint16_t c; - if (sgnd) - c = calib; - else { - c = a; - a = calib; - } - a = mul16sun(a, c, conf->shifts >> 4); - - send_char(' '); - send_str(decimal_str(a, conf->shifts & 3)); -} diff --git a/src/adc.h b/src/adc.h index 946ac8a..9d24914 100644 --- a/src/adc.h +++ b/src/adc.h @@ -10,12 +10,9 @@ struct adc_conf { uint8_t ref; uint8_t inp; uint8_t inn; - int8_t offset; - uint8_t shifts; - uint16_t calib; }; -#define N_ADC (64/sizeof(struct adc_conf)) +#define N_ADC 8 extern uint16_t adc_readings[N_ADC]; extern uint8_t adc_current; @@ -24,4 +21,3 @@ void start_adc(); void init_adc(); static inline uint8_t adc_busy() { return ADC.STATUS & 1; } extern struct adc_conf adc_conf[N_ADC]; -void send_calib_adc(uint8_t i); diff --git a/src/cmd.c b/src/cmd.c index cc31f20..355d3b0 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -3,6 +3,7 @@ // #include "cmd.h" +#include "adc.h" #include "flash.h" #include "bch4369.h" #include "base85.h" @@ -10,32 +11,74 @@ void base85_send_buffer(const uint8_t *buf); const uint8_t *base85_fill_buffer(const uint8_t *s); +const uint8_t *skip_space(const uint8_t *s); +uint8_t cmd_buffer[16]; +uint8_t uart_stream_source; void parse_command(const uint8_t *s, uint8_t n) { uint8_t cmd = *s++; + if (*s =='|') + return; + s = skip_space(s); + uint8_t flag = *s++; uint8_t r = 0; send_char(cmd); + send_char('|'); + if (cmd == 'A') { + r = adc_current; + if (r >= N_ADC) { + if (flag == '>') { + base85_send_buffer((void*)adc_readings); + flag = *s++; + } + if (flag == '+') + start_adc(); + } + } if (cmd == 'W') { s = base85_fill_buffer(s); r = base85_error; } - else if (cmd == 'R') - base85_send_buffer(flash_buffer); - else if (cmd == 'F') { - bch4369_feed_buffer(); - r = bch4369_feed_n; + else if (cmd == 'B') { + if (flag == '<') { + s = base85_fill_buffer(s); + flag = *s - '0'; + if (flag < 4) { + s++; + if (!(uart_stream_source & 0xe0)) { + memcpy(flash_buffer+16*flag, cmd_buffer, 16); + uart_stream_source = flag; + } + r = uart_stream_source; + } + flag = *s++; + } + r = base85_error; + if (!r && flag == '%') { + if (*s=='>') + base85_send_buffer(bch_parity); + else if (*s=='<') + bch4369_feed_buffer(*++s); + r = bch4369_feed_n; + } + else if (flag == '>') { + uint8_t *b = cmd_buffer; + flag = *s - '0'; + if (flag < 4) + b = flash_buffer + 16*flag; + base85_send_buffer(b); + } } - else if (cmd == 'P') { - base85_send_buffer(bch_parity); - r = bch4369_feed_n; - + else if (cmd=='F') { + base85_fill_buffer(s); + r = base85_error; + if (!r) + r = flash_submit_command(cmd_buffer); } else send_char('?'); - send_char(' '); - send_char(r); - send_eol(); + send_hex_byte_eol(r); } const uint8_t *skip_space(const uint8_t *s) { @@ -48,12 +91,8 @@ const uint8_t *base85_fill_buffer(const uint8_t *s) { base85_error = 0; s = skip_space(s); for (int i=0; !base85_error && iaddr == 0xff) + prefix = io->val; + else { + uint8_t *p = (uint8_t*)((uint16_t)prefix << 8 | io->addr); + *p = io->val; + } + } +} + +#else + +__attribute__((naked)) +void apply_config(const struct io_config *c, uint8_t n) +{ + __asm__( + "movw r30,r24" "\n\t" + "clr r24" "\n" + "1:" "\n\t" + "mov r24, r27" "\n\t" + "subi r22,-1" "\n\t" + "brcs 9f" "\n" + "2:" "\n\t" + "ld r25, Z+" "\n\t" + "ld r24, Z+" "\n\t" + "cpi r25, 0xff" "\n\t" + "breq 1b" "\n\t" + "st X, r25" "\n\t" + "subi r22,1" "\n\t" + "brcc 2b" "\n\t" + "9:" "\n\t" + "ret" "\n\t" + ); +} + +#endif diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..dfc0168 --- /dev/null +++ b/src/config.h @@ -0,0 +1,43 @@ + +#ifndef _CONFIG_H +#define _CONFIG_H +#include +#include + +struct io_config { + uint8_t addr; + uint8_t val; +}; + +#define struct_ioconf(_n) struct io_config _n[] \ + __attribute__((section(".eeprom9"), aligned(2))) + +#define conf_prefix(_io) { 0xff, (uint16_t)&(_io) >> 8 } +#define conf_io(_io, _v) { (uint16_t)&(_io) & 0xff, (_v) } +#define conf_ioo(_io, _o, _v) { (uint16_t)&(_io) + _o & 0xff, (_v) } +#define conf_iow(_io, _v) conf_io(_io, (_v) & 0xff), conf_ioo(_io, 1, (_v) >> 8) + +void apply_config(const struct io_config *c, uint8_t n); + +extern struct io_config *ee9_start, *ee9_end; +#define IO_CONFIG ee9_start +#define IO_CONFIG_SIZE (ee9_end - ee9_start) + +#define Bit(x) (1<<(x)) + +#define DRAIN_VPORT VPORTA +#define DRAIN_PORT PORTA +#define DRAIN_PIN 5 +#define SSEL_VPORT VPORTA +#define SSEL_PORT PORTA +#define SSEL_PIN 4 +#define PWM_VPORT VPORTB +#define PWM_PORT PORTB +#define PWM_PIN 0 +#define SPI_VPORT VPORTA +#define SPI_PORT PORTA +#define MOSI_PIN 1 +#define MISO_PIN 2 +#define SCK_PIN 3 + +#endif // _CONFIG_H diff --git a/src/dose.c b/src/dose.c index 20be446..479b2b0 100644 --- a/src/dose.c +++ b/src/dose.c @@ -7,35 +7,30 @@ #include #include -#include #include #include #include +#include "config.h" #include "dose.h" #include "uart.h" #include "rtc.h" #include "spi.h" #include "cmd.h" - -#define Bit(x) (1<<(x)) - +#include "adc.h" +#include "pwm.h" +#include "flash.h" //////////////////////////////////////////////////////////////////////////////// // // Configuration in USERROW -struct config config; - __attribute__((section(".userrow"))) -const struct config userrow = { +const struct config config = { .magic = USE_USERROW, .version = USE_VERSION, .cpu_clk = CLKCTRL_PDIV_2X_gc | 1, // 10MHz (max @ 3V) - .pit_period = RTC_PERIOD_CYC1024_gc, - .spi_div = SPI_SPEED, - .baud_div = UART_BAUD, - .uart_mode = UART_MODE, + .flash_page_size = FM_528, }; //////////////////////////////////////////////////////////////////////////////// @@ -44,8 +39,6 @@ const struct config userrow = { int main() { - memcpy(&config, &userrow, sizeof(struct config)); - while (CLKCTRL.MCLKCTRLB != config.cpu_clk) { CCP = CCP_IOREG_gc; CLKCTRL.MCLKCTRLB = config.cpu_clk; @@ -53,18 +46,14 @@ int main() set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); - while (userrow.magic != USE_USERROW) + while (config.magic != USE_USERROW) sleep_cpu(); - - init_uart(config.uart_mode, config.baud_div); - init_rtc(config.pit_period); - init_spi(config.spi_div); + apply_config(IO_CONFIG, IO_CONFIG_SIZE); uint8_t reset_source = RSTCTRL.RSTFR; RSTCTRL.RSTFR = reset_source; - send_str("\nM Turbo Dose V0.9 "); - send_hex_byte(reset_source); - send_eol(); + send_str("\nV Turbo Dose V0.9"); + send_hex_byte_eol(reset_source); while (1) { sleep_cpu(); diff --git a/src/dose.h b/src/dose.h index 8fe9c03..7c1089b 100644 --- a/src/dose.h +++ b/src/dose.h @@ -13,24 +13,13 @@ struct config { uint8_t magic; uint8_t version; uint8_t cpu_clk; - uint8_t pit_period; - uint8_t spi_div; - uint16_t baud_div; - uint16_t uart_mode; + uint8_t flash_page_size; }; enum magic_flags { USE_USERROW = 0xD0, USE_VERSION = 0x01, -}; -enum UART_flags { // USART0.CTRLB - UART_Tx = /* 0x40, */ USART_TXEN_bm, - UART_Rx = /* 0x80, */ USART_RXEN_bm, - UART_SFD = /* 0x10, */ USART_SFDEN_bm, - UART_ODME = /* 0x08, */ USART_ODME_bm, - UART_CLKx2 = /* 0x02, */ 1 << USART_RXMODE_0_bp, - UART_GAUTO = /* 0x04, */ 2 << USART_RXMODE_0_bp, - UART_LAUTO = /* 0x06, */ 3 << USART_RXMODE_0_bp, + }; -extern struct config config; +extern const struct config config; diff --git a/src/eeprom.ld b/src/eeprom.ld index 331dcd7..28c4628 100644 --- a/src/eeprom.ld +++ b/src/eeprom.ld @@ -13,7 +13,13 @@ SECTIONS { .eemap 0x1400: { + ee1_start = .; + *(.eeprom1) + ee1_end = .; *(.eeprom) + ee9_start = .; + *(.eeprom9) + ee9_end = .; } >eemap AT >eedef .uumap 0x1300: { diff --git a/src/flash.c b/src/flash.c index 8f553bb..8924b5b 100644 --- a/src/flash.c +++ b/src/flash.c @@ -83,12 +83,24 @@ miscellanious */ #include "flash.h" +#include "cmd.h" + uint8_t flash_cmd_buffer[4]; +uint8_t flash_status_bytes[2]; uint8_t flash_buffer[FB_SIZE]; -uint8_t flash_cmd(uint8_t op, uint8_t mode, uint8_t size, uint16_t page, uint16_t byte) +uint8_t flash_cmd_na(uint16_t mode, uint16_t what) +{ + return flash_cmd(mode, what, 0, 0); +} + +uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) { uint8_t spi_mode = SPI_FLASH | mode & FM_SPI; + uint8_t op = mode; + mode >>= 8; + uint8_t size = what; + what >>= 8; uint8_t s = spi_select(spi_mode); if (s) return s; @@ -113,17 +125,88 @@ uint8_t flash_cmd(uint8_t op, uint8_t mode, uint8_t size, uint16_t page, uint16_ case FM_PAD1: pads += 1; } spi.zsize = pads; + if (what + size <= 64) + b = flash_buffer + what; + else if (what+size <= 80) + b = cmd_buffer + (what-64); + else if (size <= 2) + b = flash_status_bytes; + else + return what; switch (mode & FM_START) { case FM_WRITE: - spi_start_write(csize, flash_cmd_buffer, size, flash_buffer); + spi_start_write(csize, flash_cmd_buffer, size, b); break; case FM_READ: - spi_start_read(csize, flash_cmd_buffer, size, flash_buffer); + spi_start_read(csize, flash_cmd_buffer, size, b); break; case FM_WAIT: spi.mask = 0x80; - spi_start_read(csize, flash_cmd_buffer, 2, flash_cmd_buffer); + spi_start_read(csize, flash_cmd_buffer, 2, b); break; } return 0; } + + +uint16_t flash_page, flash_block, n_blocks; +uint8_t flash_stream_status; + +enum { + FS_IDLE = 0, + FS_Rdy = 1, + FS_Bsy = 2, + FS_Read = 4, + FS_Write = 8, + FS_Erase = 12, + FS_Buff = 32, + FS_StBsy = 64, + FS_TxBCH = 128, +}; + +uint8_t flash_poll() +{ + uint8_t r = spi_busy_p(); + if (r) + // SPI is shifting something + return 0x80 | r; + r = flash_stream_status; + if (r & FS_StBsy) { + // status bytes arrived + if (flash_status_bytes[0] & 0x80) + // flash is still busy burning + goto rd_status; + // not busy any more, move Bsy → Rdy + if (r & FS_Bsy) + r |= FS_Rdy; + goto rdy; + } + if (!(r & FS_Bsy)) + goto rdy; + if (r & FS_Write) { + rd_status: + // request status bytes for pending Tx od Er + r |= FS_StBsy; + flash_stream_status = r; + flash_cmd_na(0xd7, 0xff02); + return r & FS_Bsy; + } + // Rx is Rdy when SPI is idle +rdy: + // clear the Bsy bits + r &= ~(FS_Bsy | FS_StBsy); + // return the ready bits + flash_stream_status = r; + return r; +} + +struct flash_cmd { + uint16_t mode, what, page, byte; + uint8_t buffer[8]; +}; + +uint8_t flash_submit_command(uint8_t *cmd) +{ + struct flash_cmd *c = (void*)cmd; + return flash_cmd(c->mode, c->what, c->page, c->byte); +} diff --git a/src/flash.h b/src/flash.h index 092a68c..20e5527 100644 --- a/src/flash.h +++ b/src/flash.h @@ -18,7 +18,7 @@ enum flash_mode_bits { FM_SPI = FM_CONT, }; -uint8_t flash_cmd(uint8_t op, uint8_t mode, uint8_t size, uint16_t page, uint16_t byte); -uint8_t flash_read_status(uint8_t wait); +uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte); #define FB_SIZE 64 extern uint8_t flash_buffer[FB_SIZE]; +uint8_t flash_submit_command(uint8_t *cmd); diff --git a/src/pwm.c b/src/pwm.c new file mode 100644 index 0000000..3e6d795 --- /dev/null +++ b/src/pwm.c @@ -0,0 +1,30 @@ + +// pwm.c + +#include "pwm.h" + +#ifdef NO_EE_CONFIG + +void init_pwm(uint16_t period) +{ + PWM.CTRLA = 0; + PWM.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc; + PWM.PER = period; + PWM.CMP0 = 0xffff; + PWM.CTRLA = 0x81; + D_PORT.OUT |= 1< PWM.PER+1) + pwm_bias(); + else + pwm_set(c, 1); +} diff --git a/src/rtc.c b/src/rtc.c index 6aca7bc..43c5e22 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -4,59 +4,117 @@ // !!! int = int8_t +#include "config.h" #include "rtc.h" -#include -#include -#include - #define Bit(x) (1<<(x)) -volatile uint32_t clock; -volatile uint8_t clock_tick; +volatile uint16_t clock; +volatile uint8_t pit_tick; +volatile uint8_t rtc_tick; -void init_rtc(uint8_t p) -{ - RTC.CLKSEL = RTC_CLKSEL_INT1K_gc; - RTC.PITINTCTRL = 1; - RTC.PITCTRLA = p; - while (RTC.PITSTATUS & 1) ; - RTC.PITCTRLA = p | 1; -} +struct_ioconf(rtc_config) = { + conf_prefix(RTC), + conf_iow(RTC.CMP, 3600), + conf_io(RTC.CLKSEL, RTC_CLKSEL_INT1K_gc), + conf_io(RTC.PITINTCTRL, 1), + conf_io(RTC.PITCTRLA, RTC_PERIOD_CYC1024_gc | RTC_PITEN_bm), + conf_iow(RTC.PER, 0xffff), + conf_io(RTC.CTRLA, RTC_PRESCALER_DIV1024_gc | RTC_RUNSTDBY_bm | RTC_RTCEN_bm), + conf_io(RTC.INTCTRL, RTC_CMP_bm | RTC_OVF_bm), +}; #if 1 + ISR(RTC_PIT_vect, ISR_NAKED) { - __asm__ ("push r24" "\n\t" - "in r24, __SREG__" "\n\t" - "push r24" "\n\t" - "ldi r24,1" "\n\t" - "sts %[flag], r24" "\n\t" - "sts clock_tick, r24" "\n\t" - "lds r24, clock" "\n\t" - "subi r24, -1" "\n\t" - "sts clock, r24" "\n\t" - "lds r24, clock+1" "\n\t" - "sbci r24, -1" "\n\t" - "sts clock+1, r24" "\n\t" - "lds r24, clock+2" "\n\t" - "sbci r24, -1" "\n\t" - "sts clock+2, r24" "\n\t" - "lds r24, clock+3" "\n\t" - "sbci r24, -1" "\n\t" - "sts clock+3, r24" "\n\t" - "pop r24" "\n\t" - "out __SREG__, r24" "\n\t" - "pop r24" "\n\t" - "reti" "\n" - ::[flag] "n" (&RTC.PITINTFLAGS) + __asm__ ( + "push r24" "\n\t" + "ldi r24, 1" "\n\t" + "sts %[flag], r24" "\n\t" + "sts pit_tick, r24" "\n\t" + "ldi r24, " "\n\t" + "sts %[flag], r24" "\n\t" + "reti" "\n" + ::[flag] "n" (&RTC.PITINTFLAGS) ); } + +ISR(RTC_CNT_vect, ISR_NAKED) +{ + __asm__ ( + "push r24" "\n\t" + "in r24, __SREG__" "\n\t" + "push r24" "\n\t" + "lds r24, %[flag]" "\n\t" + "sts %[flag], r24" "\n\t" + "sts rtc_tick, r24" "\n\t" + "sbrs r24, 1" "\n\t" + "rjmp 1f" "\n\t" + "push r24" "\n\t" + "push r25" "\n\t" + "push r26" "\n\t" + "lds r24, %[CMPL]" "\n\t" + "lds r25, %[CMPH]" "\n\t" + "lds r26, config+3" "\n\t" + "add r24, r26" "\n\t" + "sts %[CMPL], r24" "\n\t" + "lds r26, config+5" "\n\t" + "add r25, r26" "\n\t" + "sts %[CMPH], r25" "\n\t" + "pop r26" "\n\t" + "pop r25" "\n\t" + "pop r24" "\n" + "1:" "\n\t" + "sbrs r24, 0" "\n\t" + "rjmp 2f" "\n\t" + "lds r24, clock" "\n\t" + "subi r24, -1" "\n\t" + "sts clock, r24" "\n\t" + "lds r24, clock+1" "\n\t" + "sbci r24, -1" "\n\t" + "sts clock+1, r24" "\n\t" + "2:" "\n\t" + "pop r24" "\n\t" + "out __SREG__, r24" "\n" + "pop r24" "\n\t" + "reti" "\n" + :: + [flag] "n" (&RTC.INTFLAGS), + [CMPL] "n" (&RTC.CMP), + [CMPH] "n" (&RTC.CMP+1) + ); +} + #else ISR(RTC_PIT_vect) { clock_tick = 1; RTC.PITINTFLAGS = 1; - clock++; +} +ISR(RTC_CNT_vect) +{ + uint8_t flag = RTC.INTFLAGS; + RTC.INTFLAGS = flag; + rtc_tick = flag; + if (flag & RTC_CNT_bm) + RTC.CMP += rtc_config[1].val | rtc_config[2].val << 8; + if (flag & RTC_OVF_bm) + clock += 1; + return; } #endif + +#define NOINLINE_TICKS +#ifdef NOINLINE_TICKS + +#undef time +#undef second_tick +#undef hour_tick +#undef day_tick +uint8_t time() { return timei(); } +uint8_t second_tick() { return second_ticki(); } +uint8_t hour_tick() { return hour_ticki(); } +uint8_t day_tick() { return day_ticki(); } + +#endif diff --git a/src/rtc.h b/src/rtc.h index 3fdcdcc..b4690e0 100644 --- a/src/rtc.h +++ b/src/rtc.h @@ -3,7 +3,53 @@ // #include +#include -volatile extern uint32_t clock; -volatile extern uint8_t clock_tick; +volatile extern uint16_t clock; +volatile extern uint8_t pit_tick; +volatile extern uint8_t rtc_tick; void init_rtc(uint8_t p); + +static inline +uint32_t timei() +{ + cli(); + uint16_t c = RTC.CNT; + sei(); + return c | (uint32_t)clock << 16; +} + +static inline +uint8_t second_ticki() +{ + cli(); + uint8_t c = pit_tick; + pit_tick = 0; + sei(); + return c; +} + +static inline +uint8_t hour_ticki() +{ + cli(); + uint8_t c = rtc_tick; + rtc_tick = c & ~2; + sei(); + return c & 2; +} + +static inline +uint8_t day_ticki() +{ + cli(); + uint8_t c = rtc_tick; + rtc_tick = c & ~1; + sei(); + return c & 1; +} + +#define time timei +#define second_tick second_ticki +#define hour_tick hour_ticki +#define day_tick day_ticki diff --git a/src/spi.c b/src/spi.c index 9dbbca7..72bf2b0 100644 --- a/src/spi.c +++ b/src/spi.c @@ -2,14 +2,15 @@ // spi.c // -// !!! int = int8_t +// ! int = int8_t #include "spi.h" -#include #include struct spi_job spi; +#ifdef NO_EE_CONFIG + void init_spi(uint8_t spi_div) { SSEL_PORT.OUT |= 1 << SSEL_PIN; @@ -22,6 +23,16 @@ void init_spi(uint8_t spi_div) SPI.INTCTRL = 0; } +#else + +struct_ioconf(spi_config) = { + conf_prefix(SPI), + conf_io(SPI.CTRLB, SPI_SSD_bm | SPI_BUFEN_bm), + conf_io(SPI.CTRLA, SPI_MASTER_bm | SPI_ENABLE_bm | SPI_SPEED), +}; + +#endif + ISR(SPI0_INT_vect) { uint8_t ifg = SPI.INTFLAGS; diff --git a/src/spi.h b/src/spi.h index b1c7bf5..5434e82 100644 --- a/src/spi.h +++ b/src/spi.h @@ -2,13 +2,13 @@ // spi.h // -#include -#include +#ifndef _SPI_H +#define _SPI_H + +#include "config.h" #include #define SPI SPI0 -#define SSEL_PORT VPORTB -#define SSEL_PIN 0 #define SPI_SPEED (SPI_CLK2X_bm | SPI_PRESC_DIV4_gc) extern @@ -66,3 +66,5 @@ uint8_t spi_select(uint8_t mode); void spi_start_cmd(uint8_t csize, uint8_t *cmd); void spi_start_write(uint8_t csize, uint8_t *cmd, uint8_t wsize, uint8_t *wdata); void spi_start_read(uint8_t csize, uint8_t *cmd, uint8_t rsize, uint8_t *rdata); + +#endif diff --git a/src/uart.c b/src/uart.c index 71b45d9..33c8620 100644 --- a/src/uart.c +++ b/src/uart.c @@ -4,20 +4,17 @@ // !!! int = int8_t -#include +#include "uart.h" +#include #include -#define Bit(x) (1<<(x)) - -__attribute__ ((noinline, noclone)) -void init_uart(uint16_t mode, uint16_t div) -{ - USART0.BAUD = div; - VPORTB.DIR |= Bit(2); - USART0.CTRLB = mode; - USART0.CTRLC = mode >> 8; - USART0.CTRLA = USART_RXCIE_bm; -} +struct_ioconf(uart_config) = { + conf_prefix(USART0), + conf_iow(USART0.BAUD, UART_BAUD), + conf_io(USART0.CTRLB, UART_MODE & 0xff), + conf_io(USART0.CTRLC, UART_MODE >> 8), + conf_io(USART0.CTRLA,USART_RXCIE_bm), +}; // `uart_tx` buffer size must be a power of 2, max 256. uint8_t uart_tx[32]; diff --git a/src/uart.h b/src/uart.h index a84b70f..cf1b6aa 100644 --- a/src/uart.h +++ b/src/uart.h @@ -2,10 +2,7 @@ // uart.h // -#include -#include -#include -#include +#include "config.h" #define UART_MODE 0x03c0 #define UART_BAUD 5555 // 115200 baud @@ -16,8 +13,9 @@ void send_char(uint8_t c); void send_eol(); void send_str(const char *s); void send_hex_byte(uint8_t b); +void send_hex_byte_eol(uint8_t b); void send_hex_word(uint16_t b); -void send_hex(uint8_t header, const uint8_t *s, uint8_t n, uint8_t words); +void send_hex(const void *s, uint8_t n); uint8_t uart_busy(); void command(void); void parse_command(const uint8_t *s, uint8_t n); diff --git a/src/uart_tx.S b/src/uart_tx.S index 08c24b2..f8db96a 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -7,14 +7,14 @@ .global send_hex_word .global send_hex_byte + .global send_hex_byte_eol .global send_char .global send_str .global uart_busy .global send_hex - .global send_eol .global command -// `tx()` and `put_char()` do not gobble r18-r24, r26, and r27. +// `tx()` and `put_char()` do not gobble r18, r20, r21, r22, r24, r26, and r27. put_char: // non-global, non-C @@ -24,12 +24,12 @@ put_char: ldi r19, 1 add r19, r30 eor r23, r19 - andi r23, 0x1f // uart_tx_m - breq 1f andi r30, 0x1f // uart_tx_m ldi r31, 0 subi r30, lo8(-(uart_tx)) sbci r31, hi8(-(uart_tx)) + andi r23, 0x1f // uart_tx_m + breq 1f st Z, r22 sts uart_tx_w, r19 1: @@ -37,40 +37,51 @@ put_char: // r23 full when zero ret - // r18, r20, r26, and 27 must be preseved in the hex functions - // r22 and r23 must be preserved in `uart_busy()` and `put_char()' + // r18, r26, and 27 must be preseved in the hex functions + // …, r20, r21, r24, must be preserved in `uart_busy()` and `put_char()' + +send_hex_byte_eol: + ldi r22, ' ' + rcall send_char22 + rcall send_hex_byte +send_eol: + ldi r22, '\n' + rcall send_char22 +uart_busy: + cli + rcall tx ; gobbles r25, r30, and r31 + sei + lds r25, USART0_STATUS + andi r25, SPI_TXCIF_bm +9: + ret send_hex_word: - push r24 + mov r20, r24 mov r24, r25 rcall send_hex_byte - pop r24 + mov r24, r20 send_hex_byte: - push r24 + mov r21, r24 swap r24 rcall send_hex_nibble - pop r24 + mov r24, r21 send_hex_nibble: andi r24, 0x0f subi r24, -'0' cpi r24, '9'+1 brlo send_char subi r24, '9'+1-'A' - send_char: mov r22, r24 send_char22: rcall put_char + brne 9f rcall uart_busy - tst r23 - brne 9f sleep rjmp send_char22 2: - rcall put_char - tst r23 - brne 1f rcall send_char22 1: movw r24, r26 @@ -79,43 +90,17 @@ send_str: ld r22, X+ tst r22 brne 2b -uart_busy: - cli - rcall tx ; gobbles r25, r30, and r31 - sei - lds r24, USART0_STATUS - andi r24, SPI_TXCIF_bm +send_hex: + movw r26, r24 + mov r18, r22 +1: + ld r24, X+ + rcall send_hex_byte + subi r18, 1 + brcc 1b 9: ret -send_hex: - movw r26, r22 - rcall send_char - rjmp 3f - -1: - ldi r22, ' ' - sbrc r18, 0 - rcall send_char22 - ld r24, X+ - sbrs r18, 1 - rjmp 2f - sbrs r20, 0 - rjmp 2f - push r24 - subi r20, 1 - ld r24, X+ - rcall send_hex_byte - pop r24 -2: - rcall send_hex_byte -3: - subi r20, 1 - brcc 1b -send_eol: - ldi r22, 10 - rjmp send_char22 - command: ;; when any frame errors occured, dismiss the buffer lds r22, uart_rx_s From 90aaf8d48ec6c5597eca594e6b8814fbffd55fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 4 Jan 2026 12:04:00 +0100 Subject: [PATCH 10/33] flash_stream complete --- src/config.h | 23 +++++++ src/dose.h | 14 ----- src/flash.c | 168 +++++++++++++++++++++++++++++++++++++++++++-------- src/flash.h | 2 +- 4 files changed, 166 insertions(+), 41 deletions(-) diff --git a/src/config.h b/src/config.h index dfc0168..d480583 100644 --- a/src/config.h +++ b/src/config.h @@ -4,6 +4,29 @@ #include #include +// USERROW + +struct config { + uint8_t magic; + uint8_t version; + uint8_t cpu_clk; + uint8_t flash_page_size; + uint16_t burn_page; + uint16_t erase_page; + uint16_t write_buffer; + uint16_t read_array; + uint16_t read_buffer[4]; +}; + +enum magic_flags { + USE_USERROW = 0xD0, + USE_VERSION = 0x01, +}; + +extern const struct config config; + +// EEPROM + struct io_config { uint8_t addr; uint8_t val; diff --git a/src/dose.h b/src/dose.h index 7c1089b..63210b7 100644 --- a/src/dose.h +++ b/src/dose.h @@ -9,17 +9,3 @@ #include #include -struct config { - uint8_t magic; - uint8_t version; - uint8_t cpu_clk; - uint8_t flash_page_size; -}; - -enum magic_flags { - USE_USERROW = 0xD0, - USE_VERSION = 0x01, - -}; - -extern const struct config config; diff --git a/src/flash.c b/src/flash.c index 8924b5b..f38c0c6 100644 --- a/src/flash.c +++ b/src/flash.c @@ -82,8 +82,10 @@ miscellanious */ +#include "config.h" #include "flash.h" #include "cmd.h" +#include "bch4369.h" uint8_t flash_cmd_buffer[4]; uint8_t flash_status_bytes[2]; @@ -125,10 +127,10 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) case FM_PAD1: pads += 1; } spi.zsize = pads; - if (what + size <= 64) + if (what + size <= 80) b = flash_buffer + what; - else if (what+size <= 80) - b = cmd_buffer + (what-64); + else if (what>=96 && what+size <= 112) + b = cmd_buffer + (what-96); else if (size <= 2) b = flash_status_bytes; else @@ -148,29 +150,124 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) return 0; } +struct flash_cmd { + uint16_t mode, what, page, byte; + uint8_t buffer[8]; +}; -uint16_t flash_page, flash_block, n_blocks; -uint8_t flash_stream_status; +uint8_t flash_submit_command(uint8_t *cmd) +{ + struct flash_cmd *c = (void*)cmd; + return flash_cmd(c->mode, c->what, c->page, c->byte); +} + +struct flash_stream { + uint16_t page; + uint8_t block; + uint8_t npages; + uint8_t status; +} fs; enum { - FS_IDLE = 0, FS_Rdy = 1, FS_Bsy = 2, + FS_Error = 3, FS_Read = 4, FS_Write = 8, FS_Erase = 12, - FS_Buff = 32, + FS_Dir = 12, + FS_Flash = 16, + FS_Ack = 32, FS_StBsy = 64, - FS_TxBCH = 128, + FS_BCH = 128, }; -uint8_t flash_poll() +uint8_t flash_stream_submit(uint16_t mode, uint8_t size) { - uint8_t r = spi_busy_p(); - if (r) - // SPI is shifting something - return 0x80 | r; - r = flash_stream_status; + mode |= (uint16_t)config.flash_page_size << 8; + uint16_t p = fs.page; + uint8_t b = fs.block; + uint16_t what; + if (b & 4) + what = 0x4010; // bch_parity + else + what = size; + fs.block = b+1; + fs.status &=~ FS_Rdy; + uint8_t e = 0xff; + if (p & 0x8000) + e = flash_cmd_na(mode & 0x7fff, fs.npages); + else + e = flash_cmd(mode, what, p, (b&3)<<2); + if (!e) + fs.status |= FS_Bsy; + return e; +} + +uint8_t flash_stream_done() +{ + if ((fs.status & FS_Error) == FS_Error) + return 1; + if (fs.page & 0x8000 && ~fs.block) + return 0; + uint8_t nb = 4; + if (fs.status & FS_BCH) + nb = 5; + if ((fs.status & FS_Dir) == FS_Erase) + nb = 1; + if (fs.npages || fs.block < nb) { + if (fs.block+1 == nb) + fs.npages--; + return 0; + } + fs.status &=~ FS_Error; + return 1; +} + +static inline +uint8_t flash_write_next_block() +{ + if (flash_stream_done()) + return 1; + return flash_stream_submit(config.write_buffer, 64); +} + +static inline +uint8_t flash_read_next_block() +{ + if (flash_stream_done()) + return 1; + uint8_t mode; + if (fs.page & 0x1000) + mode = config.read_buffer[fs.page&3]; + else + mode = config.read_array; + return flash_stream_submit(mode, 64); +} + +static inline +uint8_t flash_erase_next_page() +{ + if (flash_stream_done()) + return 1; + return flash_stream_submit(config.erase_page, 0); +} + +static inline +uint8_t flash_burn_page() +{ + return flash_stream_submit(config.burn_page, 0); +} + +uint8_t flash_poll(uint8_t rr) +{ + uint8_t r = fs.status; + if (spi_busy_p()) { + fs.status = r | FS_Bsy; + return r; + } + if ((r & FS_Error) == FS_Error) + return r; if (r & FS_StBsy) { // status bytes arrived if (flash_status_bytes[0] & 0x80) @@ -183,30 +280,49 @@ uint8_t flash_poll() } if (!(r & FS_Bsy)) goto rdy; + if (rr) { + r |= FS_Error; + fs.status = r; + return r; + } if (r & FS_Write) { rd_status: // request status bytes for pending Tx od Er r |= FS_StBsy; - flash_stream_status = r; + fs.status = r; flash_cmd_na(0xd7, 0xff02); - return r & FS_Bsy; + return r; } // Rx is Rdy when SPI is idle rdy: + r |= rr & FS_Ack; // clear the Bsy bits r &= ~(FS_Bsy | FS_StBsy); - // return the ready bits - flash_stream_status = r; + fs.status = r; + if (r & (FS_Dir|FS_Ack) == (FS_Read|FS_Ack)) + flash_read_next_block(); + if (r & FS_Dir == FS_Write) { + if (fs.block & 4 && (!(r & FS_BCH) || fs.block&1)) + flash_burn_page(); + else if (r & FS_Ack) + flash_write_next_block(); + } + if (r & FS_Dir == FS_Erase) + flash_erase_next_page(); return r; } -struct flash_cmd { - uint16_t mode, what, page, byte; - uint8_t buffer[8]; -}; - -uint8_t flash_submit_command(uint8_t *cmd) +uint8_t flash_start_stream(uint16_t page, uint8_t npages, uint8_t flags) { - struct flash_cmd *c = (void*)cmd; - return flash_cmd(c->mode, c->what, c->page, c->byte); + uint8_t r = flash_poll(0); + if ((r & FS_Error) == FS_Bsy) + return FS_Error; + r = flags | FS_Rdy; + if (config.flash_page_size != FM_528) + r &=~ FS_BCH; + fs.page = page; + fs.block = 0; + fs.npages = npages; + fs.status = r; + return flash_poll(0); } diff --git a/src/flash.h b/src/flash.h index 20e5527..af895b0 100644 --- a/src/flash.h +++ b/src/flash.h @@ -19,6 +19,6 @@ enum flash_mode_bits { }; uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte); -#define FB_SIZE 64 +#define FB_SIZE 80 extern uint8_t flash_buffer[FB_SIZE]; uint8_t flash_submit_command(uint8_t *cmd); From 97d00bc908e1726970fe22994e81e6333d6b466d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Sun, 4 Jan 2026 22:40:35 +0100 Subject: [PATCH 11/33] =?UTF-8?q?one=20more=20day=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Makefile | 2 +- src/bch4369.c | 39 +++++++-- src/bch4369.h | 1 + src/cmd.c | 226 +++++++++++++++++++++++++++++++++----------------- src/config.c | 25 ++++++ src/config.h | 2 +- src/dose.c | 12 --- src/flash.c | 198 ++++++++++++++++++++++++------------------- src/flash.h | 52 +++++++++--- src/pipe.c | 22 +++++ src/pipe.h | 20 +++++ 11 files changed, 400 insertions(+), 199 deletions(-) create mode 100644 src/pipe.c create mode 100644 src/pipe.h diff --git a/src/Makefile b/src/Makefile index b7c30e1..7b32d8c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,7 +8,7 @@ all: $(PROJ).hex SN_dose = 1 MCU_dose = attiny424 -C_FILES_dose = config.c cmd.c pwm.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c +C_FILES_dose = config.c cmd.c pipe.c pwm.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c S_FILES_dose = uart_tx.S base85a.S MCU = $(MCU_$(PROJ)) diff --git a/src/bch4369.c b/src/bch4369.c index 512c249..dc3f4c2 100644 --- a/src/bch4369.c +++ b/src/bch4369.c @@ -49,9 +49,16 @@ void bch4369(uint8_t d) } } +void bch4369_str(uint8_t *b, uint8_t n) +{ + do + bch4369(*b++); + while (--n); +} + #else -__attribute__ ((noinline, noclone)) +__attribute__ ((noinline, naked)) void bch4369(uint8_t d) { __asm__ __volatile__( @@ -65,7 +72,7 @@ void bch4369(uint8_t d) "adiw r30, 16" "\n\t" "ldi r26, lo8(bch_genpoly+16)" "\n\t" "ldi r27, hi8(bch_genpoly+16)" "\n\t" - "rol %[D]" "\n\t" // move next input bit → r25.7 + "rol r24" "\n\t" // move next input bit → r25.7 "ror r25" "\n\t" "2:" "\n\t" "rol r25" "\n\t" // Move r25.7 → C-bit @@ -81,13 +88,27 @@ void bch4369(uint8_t d) "brne 2b" "\n\t" "bst r25, 6" "\n\t" // copy MSB r25.6 → T-bit "subi r20, 1" "\n\t" - "brne 1b" "\n" - : [D] "+w" (d) - : - : "memory", "cc", - "r0", "r20", "r21", "r25", - "r26", "r27", "r30", "r31" - ); + "brne 1b" "\n\t" + "ret" "\n" + ); +} + +__attribute__ ((noinline, naked)) +void bch4369_str(const uint8_t *b, uint8_t n) +{ + // _bch4369 preserves r22, r23, r18, r19 + __asm__ __volatile__ ( + "" + "movw r18, r28" "\n\t" + "movw r28, r24" "\n" + "1:" "\n\t" + "ld r24, Y+" "\n\t" + "rcall bch4369" "\n\t" + "subi r22, 1" "\n\t" + "brne 1b" "\n\t" + "mov r28, r18" "\n\t" + "ret" "\n" + ); } #endif diff --git a/src/bch4369.h b/src/bch4369.h index 41b9bc7..862ea36 100644 --- a/src/bch4369.h +++ b/src/bch4369.h @@ -4,3 +4,4 @@ extern uint8_t bch_parity[16]; void bch4369(uint8_t d); static inline void bch4369_init() { memset(bch_parity, 0 , 16); } +void bch4369_str(const uint8_t *b, uint8_t n); diff --git a/src/cmd.c b/src/cmd.c index 355d3b0..5735f80 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -8,85 +8,14 @@ #include "bch4369.h" #include "base85.h" #include "uart.h" +#include "pipe.h" void base85_send_buffer(const uint8_t *buf); -const uint8_t *base85_fill_buffer(const uint8_t *s); const uint8_t *skip_space(const uint8_t *s); uint8_t cmd_buffer[16]; -uint8_t uart_stream_source; - -void parse_command(const uint8_t *s, uint8_t n) -{ - uint8_t cmd = *s++; - if (*s =='|') - return; - s = skip_space(s); - uint8_t flag = *s++; - uint8_t r = 0; - send_char(cmd); - send_char('|'); - if (cmd == 'A') { - r = adc_current; - if (r >= N_ADC) { - if (flag == '>') { - base85_send_buffer((void*)adc_readings); - flag = *s++; - } - if (flag == '+') - start_adc(); - } - } - if (cmd == 'W') { - s = base85_fill_buffer(s); - r = base85_error; - } - else if (cmd == 'B') { - if (flag == '<') { - s = base85_fill_buffer(s); - flag = *s - '0'; - if (flag < 4) { - s++; - if (!(uart_stream_source & 0xe0)) { - memcpy(flash_buffer+16*flag, cmd_buffer, 16); - uart_stream_source = flag; - } - r = uart_stream_source; - } - flag = *s++; - } - r = base85_error; - if (!r && flag == '%') { - if (*s=='>') - base85_send_buffer(bch_parity); - else if (*s=='<') - bch4369_feed_buffer(*++s); - r = bch4369_feed_n; - } - else if (flag == '>') { - uint8_t *b = cmd_buffer; - flag = *s - '0'; - if (flag < 4) - b = flash_buffer + 16*flag; - base85_send_buffer(b); - } - } - else if (cmd=='F') { - base85_fill_buffer(s); - r = base85_error; - if (!r) - r = flash_submit_command(cmd_buffer); - } - else - send_char('?'); - send_hex_byte_eol(r); -} - -const uint8_t *skip_space(const uint8_t *s) { - while (*s == ' ') - s++; - return s; -} +uint8_t cmd_buffer_valid; +static inline const uint8_t *base85_fill_buffer(const uint8_t *s) { base85_error = 0; s = skip_space(s); @@ -96,6 +25,151 @@ const uint8_t *base85_fill_buffer(const uint8_t *s) { return s; } +uint8_t * poke_addr; +uint8_t peek_size; +struct peak_poke { + uint8_t *addr; + uint8_t size; + uint8_t ccp; + uint8_t data[12]; +}; + +static inline +uint8_t poke(struct peak_poke *p, uint8_t hp, uint8_t poke) +{ + if (hp) { + poke_addr = p->addr; + peek_size = p->size; + } + else { + p->addr = poke_addr; + p->size = peek_size; + } + uint8_t s = peek_size; + uint8_t *a = poke_addr; + if (s > 12) + s = 12; + peek_size -= s; + poke_addr += s; + if (poke) { + if (p->ccp) + NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEBUFCLR_gc; + memcpy(a, p->data, s); + if (p->ccp && !(0x8000 & (uint16_t)a)) + __asm__( + "out %[ccp], %[key] \n\t" + "sts %[ctrla], %[cmd] \n" + :: [ccp] "n" (&CCP), + [ctrla] "n" (&NVMCTRL.CTRLA), + [key] "r" (p->ccp), + [cmd] "r" (NVMCTRL_CMD_PAGEERASEWRITE_gc) + : "memory", "r0" + ); + } + else + memcpy(p->data, a, s); + return s && !poke; +} + +void parse_command(const uint8_t *s, uint8_t n) +{ + uint8_t cmd = *s++; + if (*s =='`') + return; + uint8_t r = 0x08|cmd; + send_char('`'); + send_char(cmd); + uint8_t have_b = !(cmd & 0x20); + cmd |= 0x20; + if (cmd > 'z') + goto error; + if (have_b) { + s = base85_fill_buffer(s); + if (base85_error) { + r = base85_error; + goto error; + } + cmd_buffer_valid |= 0x80; + } + s = skip_space(s); + uint8_t flag = *s++; + switch(cmd) { + case 'a': + r = adc_current; + if (r >= N_ADC) { + if (flag=='=') { + memcpy(cmd_buffer, adc_readings, 16); + cmd_buffer_valid |= 0x40; + flag = *s++; + } + if (flag == '<') { + base85_send_buffer((void*)adc_readings); + flag = *s++; + } + if (flag == '+') + start_adc(); + } + break; + case 'b': + r = cmd_buffer_valid; + if (have_b) { + flag -= '0'; + if (flag < 5 && flag==cmd_buffer_valid) { + memcpy(flash_buffer+16*flag, cmd_buffer, 16); + r = cmd_buffer_valid |= 1<> 8, + .burn_page = 0x88, // Buffer 1 Page Program w/o Erase + .write_buffer = 0x84 | FM_WRITE>>8, // Buffer 1 Write + .read_array = 0x03 | FM_READ>>8, // Continuous Array Read (Low-Frequency) + .read_buffer = { + [0] = 0xd1 | FM_READ>>8, // Buffer 1 Read (Low-Frequency) + [1] = 0xd3 | FM_READ>>8, // Buffer 2 Read (Low-Frequency) + }, +}; + +//////////////////////////////////////////////////////////////////////////////// +// +// Configuration in EEPROM + struct_ioconf(port_config) = { conf_prefix(PORTA), diff --git a/src/config.h b/src/config.h index d480583..2d03c27 100644 --- a/src/config.h +++ b/src/config.h @@ -15,7 +15,7 @@ struct config { uint16_t erase_page; uint16_t write_buffer; uint16_t read_array; - uint16_t read_buffer[4]; + uint16_t read_buffer[2]; }; enum magic_flags { diff --git a/src/dose.c b/src/dose.c index 479b2b0..86ac7dd 100644 --- a/src/dose.c +++ b/src/dose.c @@ -21,18 +21,6 @@ #include "pwm.h" #include "flash.h" -//////////////////////////////////////////////////////////////////////////////// -// -// Configuration in USERROW - -__attribute__((section(".userrow"))) -const struct config config = { - .magic = USE_USERROW, - .version = USE_VERSION, - .cpu_clk = CLKCTRL_PDIV_2X_gc | 1, // 10MHz (max @ 3V) - .flash_page_size = FM_528, -}; - //////////////////////////////////////////////////////////////////////////////// // // main() diff --git a/src/flash.c b/src/flash.c index f38c0c6..989f69d 100644 --- a/src/flash.c +++ b/src/flash.c @@ -100,7 +100,6 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) { uint8_t spi_mode = SPI_FLASH | mode & FM_SPI; uint8_t op = mode; - mode >>= 8; uint8_t size = what; what >>= 8; uint8_t s = spi_select(spi_mode); @@ -126,6 +125,11 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) case FM_PAD2: pads += 1; case FM_PAD1: pads += 1; } + if (size >= 128) { + // for read of the security register + pads += size-64; + size = 64; + } spi.zsize = pads; if (what + size <= 80) b = flash_buffer + what; @@ -160,86 +164,64 @@ uint8_t flash_submit_command(uint8_t *cmd) struct flash_cmd *c = (void*)cmd; return flash_cmd(c->mode, c->what, c->page, c->byte); } +struct flash_stream fs; -struct flash_stream { - uint16_t page; - uint8_t block; - uint8_t npages; - uint8_t status; -} fs; - -enum { - FS_Rdy = 1, - FS_Bsy = 2, - FS_Error = 3, - FS_Read = 4, - FS_Write = 8, - FS_Erase = 12, - FS_Dir = 12, - FS_Flash = 16, - FS_Ack = 32, - FS_StBsy = 64, - FS_BCH = 128, -}; - +__attribute__ ((noinline, noclone)) uint8_t flash_stream_submit(uint16_t mode, uint8_t size) { - mode |= (uint16_t)config.flash_page_size << 8; - uint16_t p = fs.page; uint8_t b = fs.block; - uint16_t what; - if (b & 4) - what = 0x4010; // bch_parity - else - what = size; + uint16_t p = fs.page; + uint8_t r = fs.status & ~FS_Ready; + mode |= (uint16_t)config.flash_page_size << 8; + if (size) { + if (b & 8) { + b = 0; + fs.page = ++p; + fs.npages--; + } + if (b==7 && r & FS_BCH) { + size |= 16; + memcpy(flash_buffer+64, bch_parity, 16); + } + } + else if ((r & FS_Dir) == FS_Erase) { + fs.page += (uint16_t) b + 1; + fs.npages -= (uint16_t) b + 1; + b = 8; + } fs.block = b+1; - fs.status &=~ FS_Rdy; - uint8_t e = 0xff; - if (p & 0x8000) - e = flash_cmd_na(mode & 0x7fff, fs.npages); - else - e = flash_cmd(mode, what, p, (b&3)<<2); - if (!e) - fs.status |= FS_Bsy; + + uint8_t e = flash_cmd(mode, size, p, (uint16_t)(b&7) << 6); + if (e) + r |= FS_Ready; // FS_Error + r |= FS_Busy; + fs.status = r; return e; } +__attribute__ ((noinline, noclone)) uint8_t flash_stream_done() { - if ((fs.status & FS_Error) == FS_Error) + uint8_t r = fs.status & FS_Error; + if (!r || r == FS_Error) return 1; - if (fs.page & 0x8000 && ~fs.block) + if (fs.npages || !(fs.block & 8)) return 0; - uint8_t nb = 4; - if (fs.status & FS_BCH) - nb = 5; - if ((fs.status & FS_Dir) == FS_Erase) - nb = 1; - if (fs.npages || fs.block < nb) { - if (fs.block+1 == nb) - fs.npages--; - return 0; - } - fs.status &=~ FS_Error; return 1; } static inline uint8_t flash_write_next_block() { - if (flash_stream_done()) - return 1; return flash_stream_submit(config.write_buffer, 64); } static inline uint8_t flash_read_next_block() { - if (flash_stream_done()) - return 1; - uint8_t mode; + uint16_t mode; if (fs.page & 0x1000) - mode = config.read_buffer[fs.page&3]; + mode = config.read_buffer[fs.page&1]; else mode = config.read_array; return flash_stream_submit(mode, 64); @@ -248,9 +230,18 @@ uint8_t flash_read_next_block() static inline uint8_t flash_erase_next_page() { - if (flash_stream_done()) - return 1; - return flash_stream_submit(config.erase_page, 0); + uint16_t mode = 0x81; // Page Erase + uint8_t n = 0; + if (fs.page && !(fs.page & 0xff) && fs.npages & 0xff00) { + mode = 0x7c; // Sector 1…15 Erase + n = 0xff; + } + else if (!(fs.page & 7) && fs.npages >= 8) { + mode = 0x50; // Block Erase + n = 7; + } + fs.block = n; + return flash_stream_submit(mode, 0); } static inline @@ -259,11 +250,24 @@ uint8_t flash_burn_page() return flash_stream_submit(config.burn_page, 0); } +static inline +void bch_flash_buffer(uint8_t n) +{ + bch4369_str(flash_buffer, n); +} + +void bch_flash_init() +{ + bch4369_init(); +} + uint8_t flash_poll(uint8_t rr) { uint8_t r = fs.status; if (spi_busy_p()) { - fs.status = r | FS_Bsy; + if (rr) + goto collision; + fs.status = r | FS_Busy; return r; } if ((r & FS_Error) == FS_Error) @@ -274,55 +278,75 @@ uint8_t flash_poll(uint8_t rr) // flash is still busy burning goto rd_status; // not busy any more, move Bsy → Rdy - if (r & FS_Bsy) - r |= FS_Rdy; - goto rdy; + if (r & FS_Busy) + r |= FS_Ready; + goto ready; } - if (!(r & FS_Bsy)) - goto rdy; + if (!(r & FS_Busy)) + goto ready; if (rr) { + collision: r |= FS_Error; fs.status = r; return r; } if (r & FS_Write) { - rd_status: - // request status bytes for pending Tx od Er - r |= FS_StBsy; - fs.status = r; - flash_cmd_na(0xd7, 0xff02); - return r; + if (fs.block == 9) { + rd_status: + // request status bytes for pending Write or Error + r |= FS_StBsy; + fs.status = r; + flash_cmd_na(0xd7, 0xff02); + return r; + } } - // Rx is Rdy when SPI is idle -rdy: - r |= rr & FS_Ack; + else if (r & FS_BCH) { + // checksum the received buffer + if (fs.block == 1) + bch_flash_init(); + if (fs.block & 8) + bch_flash_buffer(80); + else + bch_flash_buffer(64); + } + +ready: + if (rr) + r |= FS_Ack; // clear the Bsy bits - r &= ~(FS_Bsy | FS_StBsy); + r &= ~(FS_Busy | FS_StBsy); fs.status = r; - if (r & (FS_Dir|FS_Ack) == (FS_Read|FS_Ack)) - flash_read_next_block(); - if (r & FS_Dir == FS_Write) { - if (fs.block & 4 && (!(r & FS_BCH) || fs.block&1)) - flash_burn_page(); - else if (r & FS_Ack) + if (r & FS_Dir == FS_Write && fs.block == 8) + flash_burn_page(); + else if (!flash_stream_done()) { + if (r & (FS_Dir|FS_Ack) == (FS_Read|FS_Ack)) + flash_read_next_block(); + else if (r & (FS_Dir|FS_Ack) == (FS_Write|FS_Ack)) { + if (r & FS_BCH) { + if (!(fs.block & 7)) + bch_flash_init(); + bch_flash_buffer(64); + } flash_write_next_block(); + } + else if (r & FS_Dir == FS_Erase) + flash_erase_next_page(); } - if (r & FS_Dir == FS_Erase) - flash_erase_next_page(); - return r; + return fs.status; } -uint8_t flash_start_stream(uint16_t page, uint8_t npages, uint8_t flags) +uint8_t flash_start_stream(uint16_t page, uint16_t npages, uint8_t flags) { uint8_t r = flash_poll(0); - if ((r & FS_Error) == FS_Bsy) + if ((r & FS_Error) == FS_Busy) return FS_Error; - r = flags | FS_Rdy; + r = flags | FS_Ready; if (config.flash_page_size != FM_528) r &=~ FS_BCH; fs.page = page; fs.block = 0; fs.npages = npages; fs.status = r; + flash_status_bytes[0] = 0xff; return flash_poll(0); } diff --git a/src/flash.h b/src/flash.h index af895b0..a58d45c 100644 --- a/src/flash.h +++ b/src/flash.h @@ -2,23 +2,49 @@ #include "spi.h" enum flash_mode_bits { - FM_PAD1 = 0x01, - FM_PAD2 = 0x02, - FM_PAD4 = 0x03, - FM_PAD = 0x03, - FM_512 = 0x04, - FM_528 = 0x08, - FM_SEC = 0x0c, - FM_ADDR = 0x0c, - FM_WRITE = 0x10, - FM_READ = 0x20, - FM_WAIT = 0x30, - FM_START = 0x30, - FM_CONT = SPI_CONT, + FM_PAD1 = 0x0100, + FM_PAD2 = 0x0200, + FM_PAD4 = 0x0300, + FM_PAD = 0x0300, + FM_512 = 0x0400, + FM_528 = 0x0800, + FM_SEC = 0x0c00, + FM_ADDR = 0x0c00, + FM_WRITE = 0x1000, + FM_READ = 0x2000, + FM_WAIT = 0x3000, + FM_START = 0x3000, + FM_CONT = (uint16_t)SPI_CONT << 8, FM_SPI = FM_CONT, + FM_NSTR = 0x8000, }; +uint8_t flash_cmd_na(uint16_t mode, uint16_t what); uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte); #define FB_SIZE 80 extern uint8_t flash_buffer[FB_SIZE]; uint8_t flash_submit_command(uint8_t *cmd); +uint8_t flash_start_stream(uint16_t page, uint16_t npages, uint8_t flags); +uint8_t flash_poll(uint8_t rr); + +extern +struct flash_stream { + uint16_t page; // page address of buffer number + uint16_t npages; // more pages to read + uint8_t block; // next block to read 0…9 + uint8_t status; // FS_… flags +} fs; + +enum { + FS_Ready = 1, // ready for the next buffer + FS_Busy = 2, // processing … + FS_Error = 3, // Aborted + FS_Read = 4, // array read + FS_Write = 8, // buffer write and burn + FS_Erase = 12, // Erase + FS_Dir = 12, // Mask for the last three + FS_Ack = 32, // Next buffer is provided, continue … + FS_StBsy = 64, // Waiting to Flash status register + FS_BCH = 128, // do 528 byte pages. +}; + diff --git a/src/pipe.c b/src/pipe.c new file mode 100644 index 0000000..e8995a5 --- /dev/null +++ b/src/pipe.c @@ -0,0 +1,22 @@ + +#include + +struct pipe pipe; + +struct pipe_config { + uint8_t source; + uint8_t dest; + uint16_t npages; + uint8_t flash_flags; + uint8_t flash_page; +}; + +uint8_t pipe_config(const uint8_t *, uint8_t flag) +{ + return 0; +} +uint8_t pipe_poll(uint8_t flag) +{ + return 0; +} + diff --git a/src/pipe.h b/src/pipe.h new file mode 100644 index 0000000..7265c94 --- /dev/null +++ b/src/pipe.h @@ -0,0 +1,20 @@ + +#include + +uint8_t pipe_config(const uint8_t *, uint8_t flag); +uint8_t pipe_poll(uint8_t flag); + +enum pipe_ports { + pipe_cmd = 1, + pipe_hk = 2, + pipe_flash = 4, + pipe_fpgs = 8, +}; + +extern +struct pipe { + uint8_t source; + uint8_t dest; + uint8_t status; + uint16_t size; +} pipe; From f0945b922730615f97be1784e60ffb3f0a9d0709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 5 Jan 2026 14:41:39 +0100 Subject: [PATCH 12/33] _send_sstr26, save flash in cmd --- src/base85a.S | 2 +- src/cmd.c | 93 ++++++++++++++++++++++++++++++++++----------------- src/cmd.h | 2 -- src/uart_tx.S | 13 ++++--- 4 files changed, 72 insertions(+), 38 deletions(-) diff --git a/src/base85a.S b/src/base85a.S index 00cc53c..4e55918 100644 --- a/src/base85a.S +++ b/src/base85a.S @@ -77,7 +77,7 @@ base85_encode: rcall _divmod85 rcall _divmod85 subi r25, -33 - st -X, r25 + st X, r25 ldi r24, 5 clr r1 ret diff --git a/src/cmd.c b/src/cmd.c index 5735f80..71bb7d4 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -10,11 +10,62 @@ #include "uart.h" #include "pipe.h" -void base85_send_buffer(const uint8_t *buf); -const uint8_t *skip_space(const uint8_t *s); uint8_t cmd_buffer[16]; uint8_t cmd_buffer_valid; +static __attribute__((noinline)) +const uint8_t *skip_space(const uint8_t *s) { + if (*s == ' ') + s++; + return s; +} + +uint8_t base85_str[6]; +#if 0 +void base85_send(const uint32_t *v) +{ + base85_encode(*v, base85_str); + send_str((const char *)base85_str); +} +void base85_send_buffer(const uint8_t *buf) +{ + base85_send((void*)(buf+0)); + base85_send((void*)(buf+4)); + base85_send((void*)(buf+8)); + base85_send((void*)(buf+12)); +} +#else +__attribute__((naked)) +void base85_send_buffer(const uint8_t *buf) +{ + // send_str26 does not gobble r18, r20, r21, r24. + __asm__( + "" + "push r28" "\n\t" + "push r29" "\n\t" + "movw r28, r24" "\n\t" + "rcall _base85_send28" "\n\t" + "rcall _base85_send28" "\n\t" + "rcall _base85_send28" "\n\t" + "rcall _base85_send28" "\n\t" + "pop r29" "\n\t" + "pop r28" "\n\t" + "ret" "\n" + "_base85_send28:" "\n\t" + "ld r22, Y+" "\n\t" + "ld r23, Y+" "\n\t" + "ld r24, Y+" "\n\t" + "ld r25, Y+" "\n\t" + "ldi r20, lo8(base85_str)" "\n\t" + "ldi r21, hi8(base85_str)" "\n\t" + "rcall base85_encode" "\n\t" + "rjmp _send_str26" "\n" + ); +} + +#endif + + static inline const uint8_t *base85_fill_buffer(const uint8_t *s) { base85_error = 0; @@ -25,6 +76,16 @@ const uint8_t *base85_fill_buffer(const uint8_t *s) { return s; } +static inline +void bch4369_feed_buffer(uint8_t flag) +{ + if (flag=='0') { + memset(bch_parity, 0, 16); + } + bch4369_str(cmd_buffer,16); +} + + uint8_t * poke_addr; uint8_t peek_size; struct peak_poke { @@ -125,7 +186,6 @@ void parse_command(const uint8_t *s, uint8_t n) base85_send_buffer(bch_parity); if (have_b) bch4369_feed_buffer(*++s); - r = bch4369_feed_n; } else if (flag == '<') { flag = *s - '0'; @@ -164,30 +224,3 @@ void parse_command(const uint8_t *s, uint8_t n) send_hex_byte_eol(r); } -const uint8_t *skip_space(const uint8_t *s) { - while (*s == ' ') - s++; - return s; -} - -void base85_send_buffer(const uint8_t *buf) -{ - uint8_t s[6]; - for(int i=0; i<16; i++) { - base85_encode(buf[i], s); - send_str((const char *)s); - } -} - -uint8_t bch4369_feed_n; - -void bch4369_feed_buffer(uint8_t flag) -{ - if (flag=='0') { - bch4369_feed_n = 0; - memset(bch_parity, 0, 16); - } - bch4369_str(cmd_buffer,16); - bch4369_feed_n++; -} - diff --git a/src/cmd.h b/src/cmd.h index 406ae19..bcd9895 100644 --- a/src/cmd.h +++ b/src/cmd.h @@ -2,7 +2,5 @@ #include extern uint8_t base85_error; -extern uint8_t bch4369_feed_n; void parse_command(const uint8_t *s, uint8_t n); -void bch4369_feed_buffer(uint8_t flag); extern uint8_t cmd_buffer[16]; diff --git a/src/uart_tx.S b/src/uart_tx.S index f8db96a..d9eee5a 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -10,6 +10,7 @@ .global send_hex_byte_eol .global send_char .global send_str + .global _send_str26 .global uart_busy .global send_hex .global command @@ -81,15 +82,17 @@ send_char22: sleep rjmp send_char22 -2: - rcall send_char22 -1: - movw r24, r26 send_str: movw r26, r24 + rjmp _send_str26 +1: + rcall send_char22 +_send_str26: ld r22, X+ tst r22 - brne 2b + brne 1b + ret + send_hex: movw r26, r24 mov r18, r22 From bd0238bb2db49e545ebadd70005eb3f92a3dfd7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Tue, 6 Jan 2026 00:11:01 +0100 Subject: [PATCH 13/33] fixes and cleanups --- src/base85a.S | 2 +- src/cmd.c | 46 +++++++++++++++++++++++------------------- src/pipe.c | 2 +- src/pipe.h | 2 +- src/uart.c | 11 +++++------ src/uart_tx.S | 55 ++++++++++++++++++++++++++------------------------- 6 files changed, 62 insertions(+), 56 deletions(-) diff --git a/src/base85a.S b/src/base85a.S index 4e55918..e6ef42f 100644 --- a/src/base85a.S +++ b/src/base85a.S @@ -89,7 +89,7 @@ base85_encode: .global mul85 mul85: # endif - + ;; TODO for SPACE: inline this _mul85: ldi r21, 85 mul r25, r21 diff --git a/src/cmd.c b/src/cmd.c index 71bb7d4..3fd4e3c 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -11,14 +11,30 @@ #include "pipe.h" uint8_t cmd_buffer[16]; -uint8_t cmd_buffer_valid; +uint8_t flash_buffer_valid; +#if 0 static __attribute__((noinline)) const uint8_t *skip_space(const uint8_t *s) { - if (*s == ' ') + while (*s == ' ') s++; return s; } +#else +static __attribute__((noinline,naked)) +const uint8_t *skip_space(const uint8_t *s) { + __asm__ volatile( + "movw r30, r24" "\n\t" + "1: " "\n\t" + "ld r23, Z+" "\n\t" + "cpi r23, ' '" "\n\t" + "breq 1b" "\n\t" + "movw r24, r30" "\n\t" + "9:" "\n\t" + "ret" "\n" + ); +} +#endif uint8_t base85_str[6]; #if 0 @@ -150,7 +166,6 @@ void parse_command(const uint8_t *s, uint8_t n) r = base85_error; goto error; } - cmd_buffer_valid |= 0x80; } s = skip_space(s); uint8_t flag = *s++; @@ -158,11 +173,6 @@ void parse_command(const uint8_t *s, uint8_t n) case 'a': r = adc_current; if (r >= N_ADC) { - if (flag=='=') { - memcpy(cmd_buffer, adc_readings, 16); - cmd_buffer_valid |= 0x40; - flag = *s++; - } if (flag == '<') { base85_send_buffer((void*)adc_readings); flag = *s++; @@ -172,12 +182,12 @@ void parse_command(const uint8_t *s, uint8_t n) } break; case 'b': - r = cmd_buffer_valid; + r = flash_buffer_valid; if (have_b) { flag -= '0'; - if (flag < 5 && flag==cmd_buffer_valid) { - memcpy(flash_buffer+16*flag, cmd_buffer, 16); - r = cmd_buffer_valid |= 1< -uint8_t pipe_config(const uint8_t *, uint8_t flag); +uint8_t pipe_config(const uint8_t *); uint8_t pipe_poll(uint8_t flag); enum pipe_ports { diff --git a/src/uart.c b/src/uart.c index 33c8620..c8bf268 100644 --- a/src/uart.c +++ b/src/uart.c @@ -51,7 +51,7 @@ ISR(USART0_DRE_vect) #else -__attribute__ ((noinline, noclone)) +__attribute__ ((noinline, naked)) void tx() { // This uses only three registers, to save stack in the ISR. @@ -76,13 +76,13 @@ void tx() " lds r31, uart_tx_w \n" " cp r30, r31 \n" " breq 3f \n" - " lds r30, %[STATUS] \n" - " sbrc r30, %[DRE] \n" + " lds r31, %[STATUS] \n" + " sbrc r31, %[DRE] \n" " rjmp 1b \n" " ori r25, 1<<%[DRE] \n" "3: \n" " sts %[CTRLA], r25 \n" - " sts uart_tx_r, r21 \n" + " ret \n" : : [TXC] "n" (USART_TXCIF_bp), @@ -96,8 +96,7 @@ void tx() ISR(USART0_DRE_vect, ISR_NAKED) { - // Doing this naked is a bit dangerous, - // but saves five instructions and two bytes stack (r0, r1). + // This saves five instructions and two bytes stack (r0, r1). // OTOH, the C implementation of tx() is not bad either, // if we are doing this asm, then we do it agressively. __asm__("\n" diff --git a/src/uart_tx.S b/src/uart_tx.S index d9eee5a..b30a621 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -17,29 +17,8 @@ // `tx()` and `put_char()` do not gobble r18, r20, r21, r22, r24, r26, and r27. -put_char: - // non-global, non-C - // arg: char r22 - lds r23, uart_tx_r - lds r30, uart_tx_w - ldi r19, 1 - add r19, r30 - eor r23, r19 - andi r30, 0x1f // uart_tx_m - ldi r31, 0 - subi r30, lo8(-(uart_tx)) - sbci r31, hi8(-(uart_tx)) - andi r23, 0x1f // uart_tx_m - breq 1f - st Z, r22 - sts uart_tx_w, r19 -1: - // r22 preserved - // r23 full when zero - ret - - // r18, r26, and 27 must be preseved in the hex functions - // …, r20, r21, r24, must be preserved in `uart_busy()` and `put_char()' +// r18, r26, and 27 must be preseved in the hex functions +// …, r20, r21, r24, must be preserved in `uart_busy()` and `put_char()' send_hex_byte_eol: ldi r22, ' ' @@ -57,11 +36,13 @@ uart_busy: 9: ret +#ifdef HEX_WORD send_hex_word: mov r20, r24 mov r24, r25 rcall send_hex_byte mov r24, r20 +#endif send_hex_byte: mov r21, r24 swap r24 @@ -75,24 +56,43 @@ send_hex_nibble: subi r24, '9'+1-'A' send_char: mov r22, r24 -send_char22: - rcall put_char - brne 9f + rjmp send_char22 +1: rcall uart_busy sleep - rjmp send_char22 +send_char22: + // non-global, non-C + // arg: char r22 + lds r23, uart_tx_r + lds r30, uart_tx_w + ldi r19, 1 + add r19, r30 + sub r23, r19 + andi r30, 0x1f // uart_tx_m + ldi r31, 0 + subi r30, lo8(-(uart_tx)) + sbci r31, hi8(-(uart_tx)) + subi r23, 0xe0 + brcs 1b + st Z, r22 + sts uart_tx_w, r19 +9: + ret send_str: movw r26, r24 rjmp _send_str26 1: +_send_char22_str26: rcall send_char22 _send_str26: ld r22, X+ tst r22 brne 1b +9: ret +#ifdef SEND_HEX send_hex: movw r26, r24 mov r18, r22 @@ -103,6 +103,7 @@ send_hex: brcc 1b 9: ret +#endif command: ;; when any frame errors occured, dismiss the buffer From 65d615407c670a32ace121e63542ad878eff8b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Tue, 6 Jan 2026 13:58:50 +0100 Subject: [PATCH 14/33] parse_command refactor --- src/cmd.c | 166 +++++++++++++++++++++++++------------------------- src/flash.c | 13 ++-- src/pipe.c | 6 +- src/uart_tx.S | 13 ++-- 4 files changed, 100 insertions(+), 98 deletions(-) diff --git a/src/cmd.c b/src/cmd.c index 3fd4e3c..9729cb7 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -13,29 +13,6 @@ uint8_t cmd_buffer[16]; uint8_t flash_buffer_valid; -#if 0 -static __attribute__((noinline)) -const uint8_t *skip_space(const uint8_t *s) { - while (*s == ' ') - s++; - return s; -} -#else -static __attribute__((noinline,naked)) -const uint8_t *skip_space(const uint8_t *s) { - __asm__ volatile( - "movw r30, r24" "\n\t" - "1: " "\n\t" - "ld r23, Z+" "\n\t" - "cpi r23, ' '" "\n\t" - "breq 1b" "\n\t" - "movw r24, r30" "\n\t" - "9:" "\n\t" - "ret" "\n" - ); -} -#endif - uint8_t base85_str[6]; #if 0 void base85_send(const uint32_t *v) @@ -85,23 +62,11 @@ void base85_send_buffer(const uint8_t *buf) static inline const uint8_t *base85_fill_buffer(const uint8_t *s) { base85_error = 0; - s = skip_space(s); for (int i=0; !base85_error && i 'Z') return; - uint8_t r = 0x08|cmd; - send_char('`'); + send_char('#'); send_char(cmd); - uint8_t have_b = !(cmd & 0x20); - cmd |= 0x20; - if (cmd > 'z') - goto error; - if (have_b) { - s = base85_fill_buffer(s); + uint8_t bflg = *s - '0'; + uint8_t *bptr = cmd_buffer; + if (bflg <= 5) { + bptr = flash_buffer + 16*bflg; + bflg = 1< ' ' && *s < 'A') + s++; + uint8_t have_b = 0; + if (*s==' ') { + s = base85_fill_buffer(s+1); if (base85_error) { r = base85_error; goto error; } + have_b = 1; } - s = skip_space(s); - uint8_t flag = *s++; + if (*s != '\n') + goto error; switch(cmd) { - case 'a': + case 'A': r = adc_current; if (r >= N_ADC) { - if (flag == '<') { + if (cmd_flag('<')) base85_send_buffer((void*)adc_readings); - flag = *s++; - } - if (flag == '+') + if (cmd_flag('!')) start_adc(); } break; - case 'b': + case 'B': + if (have_b && bflg) { + if (cmd_flag('|')) + flash_buffer_valid |= bflg; + memcpy(bptr, cmd_buffer, 16); + } + if (cmd_flag('%')) { + if (cmd_flag('!')) + memset(bch_parity, 0, 16); + bch4369_str(bptr, 16); + } + if (cmd_flag('<')) { + if (cmd_flag('|')) + flash_buffer_valid &=~ bflg; + base85_send_buffer(bptr); + } r = flash_buffer_valid; - if (have_b) { - flag -= '0'; - if (flag < 5) { - memcpy(flash_buffer + 16*flag, cmd_buffer, 16); - r = flash_buffer_valid |= 1< +#include "pipe.h" +#include "flash.h" struct pipe pipe; @@ -17,6 +18,9 @@ uint8_t pipe_config(const uint8_t *) } uint8_t pipe_poll(uint8_t flag) { + uint8_t r = pipe.status; + if (spi_busy_p() || flash_poll(0) & FS_Busy) + return r; return 0; } diff --git a/src/uart_tx.S b/src/uart_tx.S index b30a621..8ae5c60 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -9,6 +9,7 @@ .global send_hex_byte .global send_hex_byte_eol .global send_char + .global _send_char22 .global send_str .global _send_str26 .global uart_busy @@ -22,11 +23,11 @@ send_hex_byte_eol: ldi r22, ' ' - rcall send_char22 + rcall _send_char22 rcall send_hex_byte send_eol: ldi r22, '\n' - rcall send_char22 + rcall _send_char22 uart_busy: cli rcall tx ; gobbles r25, r30, and r31 @@ -56,11 +57,11 @@ send_hex_nibble: subi r24, '9'+1-'A' send_char: mov r22, r24 - rjmp send_char22 + rjmp _send_char22 1: rcall uart_busy sleep -send_char22: +_send_char22: // non-global, non-C // arg: char r22 lds r23, uart_tx_r @@ -83,8 +84,8 @@ send_str: movw r26, r24 rjmp _send_str26 1: -_send_char22_str26: - rcall send_char22 +__send_char22_str26: + rcall _send_char22 _send_str26: ld r22, X+ tst r22 From 133f55edf629d00c4950e0bcf64096fb8b751fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Thu, 8 Jan 2026 00:36:23 +0100 Subject: [PATCH 15/33] section_status, pipe, fpga, HAVE_ --- src/Makefile | 15 ++++-- src/adc.c | 23 +++++----- src/adc.h | 10 ++++ src/cmd.c | 123 +++++++++++++++++++++++++++++++++++--------------- src/config.c | 80 ++++++++++++-------------------- src/config.h | 104 ++++++++++++++++++++++++++++++++++++------ src/dose.c | 13 ++++-- src/eeprom.ld | 1 + src/flash.c | 4 +- src/flash.h | 4 ++ src/fpga.c | 54 ++++++++++++++++++++++ src/fpga.h | 28 ++++++++++++ src/pipe.c | 67 +++++++++++++++++++-------- src/pipe.h | 25 +++++++--- src/pwm.c | 20 ++------ src/spi.c | 20 +------- 16 files changed, 406 insertions(+), 185 deletions(-) create mode 100644 src/fpga.c create mode 100644 src/fpga.h diff --git a/src/Makefile b/src/Makefile index 7b32d8c..42ff521 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,7 +8,12 @@ all: $(PROJ).hex SN_dose = 1 MCU_dose = attiny424 -C_FILES_dose = config.c cmd.c pipe.c pwm.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c + +VAR=nFETs +C_FILES_nFETs = pwm.c +C_FILES_FPGA = fpga.c +CFLAGS_dose = -DHAVE_$(VAR) +C_FILES_dose = config.c $(C_FILES_$(VAR)) cmd.c pipe.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c S_FILES_dose = uart_tx.S base85a.S MCU = $(MCU_$(PROJ)) @@ -24,20 +29,20 @@ CC=avr-gcc -Wall -Wno-parentheses -MMD -std=c99 $(OPT) \ -mint8 SN = $(SN_$(PROJ)) -CFLAGS = $($*_CFLAGS) $(DEBUG) -I. -DSN="$(SN)" +CFLAGS = $(CFLAGS_$(PROJ)) $(DEBUG) -I. -DSN="$(SN)" C_FILES = $(C_FILES_$(PROJ)) S_FILES = $(S_FILES_$(PROJ)) OBJS = $(patsubst %.c, %.o, $(C_FILES)) $(patsubst %.S, %.o, $(S_FILES)) -%.s: %.c %.o +%.s: %.c $(CC) $(CFLAGS) -S $< %.o: %.c - $(CC) -g $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c $< %.o: %.S - $(CC) -g $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c $< -include *.d diff --git a/src/adc.c b/src/adc.c index 829f1b6..bb8cae1 100644 --- a/src/adc.c +++ b/src/adc.c @@ -2,6 +2,7 @@ // adc.c // +#include "config.h" #include "adc.h" #include @@ -11,9 +12,6 @@ enum adc_conf_parameter { REF = 10 << ADC_TIMEBASE_gp, MODE = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc, MODE_DIFF = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc | ADC_DIFF_bm, - VD1 = ADC_MUXPOS_AIN7_gc, - VD2 = ADC_MUXPOS_AIN10_gc, - VDG = ADC_MUXPOS_AIN6_gc, }; __attribute__((section(".eeprom1"))) @@ -28,40 +26,42 @@ struct adc_conf adc_conf[N_ADC] = { .ref = REF | ADC_REFSEL_1024MV_gc, .inp = INP | ADC_MUXPOS_TEMPSENSE_gc, }, +#ifdef HAVE_nFETs { // VD1 .mode = MODE, .ref = REF | ADC_REFSEL_1024MV_gc, - .inp = INP | VD1, + .inp = INP | ADC_D1, }, { // VD2 .mode = MODE, .ref = REF | ADC_REFSEL_1024MV_gc, - .inp = INP | VD2, + .inp = INP | ADC_D2, }, { // VD1 .mode = MODE, .ref = REF | ADC_REFSEL_2500MV_gc, - .inp = INP | VD1, + .inp = INP | ADC_D1, }, { // VD2 .mode = MODE, .ref = REF | ADC_REFSEL_2500MV_gc, - .inp = INP | VD2, + .inp = INP | ADC_D2, }, { // VDG .mode = MODE, .ref = REF | ADC_REFSEL_2500MV_gc, - .inp = INP | VDG, + .inp = INP | ADC_G, }, { // VDG .mode = MODE, .ref = REF | ADC_REFSEL_VDD_gc, - .inp = INP | VDG, + .inp = INP | ADC_G, }, +#endif }; -uint16_t adc_readings[N_ADC]; -uint8_t adc_current = 0xff; +section_status(adc.n) uint8_t adc_current; +section_status(adc.r) uint16_t adc_readings[N_ADC]; static inline void start_conversion(const struct adc_conf *c) @@ -154,7 +154,6 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "ldi r31, 0" "\n\t" "lsl r30" "\n\t" "lsl r30" "\n\t" - "lsl r30 ; NADC==8!" "\n\t" "subi r30, lo8(-(adc_conf))" "\n\t" "sbci r31, hi8(-(adc_conf))" "\n\t" "ldd r25, Z+1" "\n\t" diff --git a/src/adc.h b/src/adc.h index 9d24914..bc60c42 100644 --- a/src/adc.h +++ b/src/adc.h @@ -12,7 +12,17 @@ struct adc_conf { uint8_t inn; }; +#ifdef HAVE_nFETs #define N_ADC 8 +#define ADC_D1 7 +#define ADC_D1_PINCTRL PORTA.PIN7CTRL +#define ADC_D2 10 +#define ADC_D2_PINCTRL PORTB.PIN1CTRL +#define ADC_G 6 +#define ADC_G_PINCTRL PORTA.PIN6CTRL +#else +#define N_ADC 2 +#endif extern uint16_t adc_readings[N_ADC]; extern uint8_t adc_current; diff --git a/src/cmd.c b/src/cmd.c index 9729cb7..410555d 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -10,10 +10,14 @@ #include "uart.h" #include "pipe.h" -uint8_t cmd_buffer[16]; -uint8_t flash_buffer_valid; +#ifdef HAVE_FPGA +#define FPGA_CMD_INLINE +#include "fpga.c" +#endif +uint8_t cmd_buffer[16]; uint8_t base85_str[6]; + #if 0 void base85_send(const uint32_t *v) { @@ -67,8 +71,6 @@ const uint8_t *base85_fill_buffer(const uint8_t *s) { return s; } -uint8_t * poke_addr; -uint8_t peek_size; struct peak_poke { uint8_t *addr; uint8_t size; @@ -76,27 +78,43 @@ struct peak_poke { uint8_t data[12]; }; +#if 0 +#define _memcopy memcpy +#else +// avoid the avr-libc memcpy. +// ¡ n must not be zero ! static inline -uint8_t poke(struct peak_poke *p, uint8_t hp, uint8_t poke) +void _memcopy(uint8_t *d, uint8_t *s, uint8_t n) { - if (hp) { - poke_addr = p->addr; - peek_size = p->size; - } - else { - p->addr = poke_addr; - p->size = peek_size; - } - uint8_t s = peek_size; - uint8_t *a = poke_addr; - if (s > 12) - s = 12; - peek_size -= s; - poke_addr += s; + __asm__ volatile ("\n" + "1:" "\n\t" + "ld r0, Z+" "\n\t" + "st X+, r0" "\n\t" + "dec %[N]" "\n\t" + "brne 1b" "\n" + : [D] "+x" (d), + [S] "+z" (s), + [N] "+r" (n) + :: "r0", "memory"); +} +#endif + +static inline +uint8_t poke(struct peak_poke *p, uint8_t poke) +{ + uint8_t s = p->size; + uint8_t *a = p->addr; + uint8_t n = s; + if (n > 12) + n = 12; + p->size = s - n; + p->addr = a + n; + if (!n) + return 0; if (poke) { if (p->ccp) NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEBUFCLR_gc; - memcpy(a, p->data, s); + _memcopy(a, p->data, n); if (p->ccp && !(0x8000 & (uint16_t)a)) __asm__( "out %[ccp], %[key] \n\t" @@ -109,8 +127,8 @@ uint8_t poke(struct peak_poke *p, uint8_t hp, uint8_t poke) ); } else - memcpy(p->data, a, s); - return s && !poke; + _memcopy(p->data, a, n); + return n; } const uint8_t *cmd_flags; @@ -148,10 +166,12 @@ uint8_t cmd_flag(uint8_t f) } #endif +uint8_t cmd_pending; + void parse_command(const uint8_t *s, uint8_t n) { // ^[A-Z][!-@]+( [!-u]{20}])?$ - // cmd flags base85 + // cmd flags ␣base85 uint8_t r = 0; uint8_t cmd = *s++; @@ -173,13 +193,16 @@ void parse_command(const uint8_t *s, uint8_t n) s++; uint8_t have_b = 0; if (*s==' ') { + cmd_pending = 0; s = base85_fill_buffer(s+1); if (base85_error) { r = base85_error; goto error; } have_b = 1; - } + cmd_pending = cmd; + } else if (cmd_flag('~')) + have_b = cmd_pending == cmd; if (*s != '\n') goto error; switch(cmd) { @@ -193,22 +216,32 @@ void parse_command(const uint8_t *s, uint8_t n) } break; case 'B': - if (have_b && bflg) { - if (cmd_flag('|')) - flash_buffer_valid |= bflg; - memcpy(bptr, cmd_buffer, 16); + if (cmd_flag('@')) + pipe.valid = 0; + r = pipe.valid; + if (have_b) { + if (cmd_flag('!') || ~r & bflg) { + pipe.valid |= bflg; + memcpy(bptr, cmd_buffer, 16); + } + else + goto error; } if (cmd_flag('%')) { - if (cmd_flag('!')) + if (cmd_flag('@')) memset(bch_parity, 0, 16); bch4369_str(bptr, 16); + if (cmd_flag('!')) { + memcpy(flash_buffer+64, cmd_buffer, 16); + pipe.valid |= 0x10; + } } if (cmd_flag('<')) { - if (cmd_flag('|')) - flash_buffer_valid &=~ bflg; - base85_send_buffer(bptr); + if (!cmd_flag('!') && ~r & bflg) + goto error; + pipe.valid &=~ bflg; + goto send_buffer; } - r = flash_buffer_valid; break; case 'F': if (have_b) @@ -218,13 +251,29 @@ void parse_command(const uint8_t *s, uint8_t n) break; case 'P': if (have_b) - r = pipe_config(cmd_buffer); + r = pipe_config((void*)cmd_buffer); else - r = pipe_poll(cmd_flag('!')); + r = pipe_poll(); break; + goto send_buffer; + break; +#ifdef HAVE_FPGA + case 'C': + if (cmd_flag('@')) { + fpga_reset(); + break; + } + if (!have_b) + goto error; + fpga_cmd((void*)cmd_buffer); + goto send_buffer; +#endif case 'M': - if (poke((void*)cmd_buffer, have_b, have_b && cmd_flag('!'))) - base85_send_buffer(cmd_buffer); + if (!have_b) + goto error; + r = poke((void*)cmd_buffer, cmd_flag('!')); + send_buffer: + base85_send_buffer(bptr); break; default: error: diff --git a/src/config.c b/src/config.c index 0b58e4d..756843a 100644 --- a/src/config.c +++ b/src/config.c @@ -1,6 +1,7 @@ #include "config.h" #include "flash.h" +#include "adc.h" //////////////////////////////////////////////////////////////////////////////// // @@ -28,55 +29,32 @@ const struct config config = { struct_ioconf(port_config) = { conf_prefix(PORTA), - conf_io(PORTA.PIN6CTRL, PORT_ISC_INPUT_DISABLE_gc), // AIN - conf_io(PORTA.PIN7CTRL, PORT_ISC_INPUT_DISABLE_gc), // AIN - conf_io(PORTB.PIN1CTRL, PORT_ISC_INPUT_DISABLE_gc), // AIN - conf_io(PORTA.OUT, Bit(SSEL_PIN)), - conf_io(PORTA.DIR, Bit(SSEL_PIN) | Bit(DRAIN_PIN) - | Bit(MOSI_PIN) | Bit(SCK_PIN)), - conf_io(PORTB.OUT, 0), - conf_io(PORTB.DIR, Bit(PWM_PIN)), -}; - -#if 0 - -void apply_config(const struct io_config *c, uint8_t n) -{ - uint8_t prefix = 0; - while (n--) { - const struct io_config *io = c++; - if (io->addr == 0xff) - prefix = io->val; - else { - uint8_t *p = (uint8_t*)((uint16_t)prefix << 8 | io->addr); - *p = io->val; - } - } -} - -#else - -__attribute__((naked)) -void apply_config(const struct io_config *c, uint8_t n) -{ - __asm__( - "movw r30,r24" "\n\t" - "clr r24" "\n" - "1:" "\n\t" - "mov r24, r27" "\n\t" - "subi r22,-1" "\n\t" - "brcs 9f" "\n" - "2:" "\n\t" - "ld r25, Z+" "\n\t" - "ld r24, Z+" "\n\t" - "cpi r25, 0xff" "\n\t" - "breq 1b" "\n\t" - "st X, r25" "\n\t" - "subi r22,1" "\n\t" - "brcc 2b" "\n\t" - "9:" "\n\t" - "ret" "\n\t" - ); -} - +#ifdef HAVE_nFETs + conf_io(ADC_D1_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), + conf_io(ADC_D2_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), + conf_io(ADC_G_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), #endif +#ifdef HAVE_FPGA + conf_io(RxD_PINCTRL, PORT_PULLUPEN_bm), + conf_io(nSTATUS_PINCTRL, PORT_PULLUPEN_bm), + conf_io(CRCERR_PINCTRL, PORT_PULLUPEN_bm), +#endif + conf_io(PORTA.OUT, Bit(SSEL_PIN)), + conf_io(PORTA.DIR, Bit(SSEL_PIN) | Bit(MOSI_PIN) | Bit(SCK_PIN) +#ifdef HAVE_nFETs + | Bit(DRAIN_PIN) +#endif +#ifdef HAVE_FPGA + | Bit(n_CONFIG_PIN) | Bit(TxE_PIN) +#endif + ), + conf_io(PORTB.OUT, Bit(TxD_PIN)), + conf_io(PORTB.DIR, Bit(TxD_PIN) +#ifdef HAVE_nFETs + | Bit(PWM_PIN) +#endif +#ifdef HAVE_FPGA + | Bit(TxE_PIN) | Bit(PEN_PIN) +#endif + ), +}; diff --git a/src/config.h b/src/config.h index 2d03c27..0228414 100644 --- a/src/config.h +++ b/src/config.h @@ -40,27 +40,103 @@ struct io_config { #define conf_ioo(_io, _o, _v) { (uint16_t)&(_io) + _o & 0xff, (_v) } #define conf_iow(_io, _v) conf_io(_io, (_v) & 0xff), conf_ioo(_io, 1, (_v) >> 8) -void apply_config(const struct io_config *c, uint8_t n); - -extern struct io_config *ee9_start, *ee9_end; -#define IO_CONFIG ee9_start -#define IO_CONFIG_SIZE (ee9_end - ee9_start) +extern struct io_config ee9_start[], ee9_end[]; #define Bit(x) (1<<(x)) -#define DRAIN_VPORT VPORTA -#define DRAIN_PORT PORTA -#define DRAIN_PIN 5 -#define SSEL_VPORT VPORTA -#define SSEL_PORT PORTA -#define SSEL_PIN 4 -#define PWM_VPORT VPORTB -#define PWM_PORT PORTB -#define PWM_PIN 0 #define SPI_VPORT VPORTA #define SPI_PORT PORTA #define MOSI_PIN 1 #define MISO_PIN 2 #define SCK_PIN 3 +#define UART_VPORT VPORTB +#define UART_PORT PORTB +#define TxE_PIN 1 +#define TxD_PIN 2 +#define RxD_PIN 3 +#define RxD_PINCTRL UART_PORT.PIN3CTRL + +#ifdef HAVE_FPGA +#define SSEL_VPORT VPORTA +#define SSEL_PORT PORTA +#define SSEL_PIN 7 +#define nCONFIG_VPORT VPORTA +#define nCONFIG_PORT PORTA +#define nCONFIG_PIN 6 +#define nSTATUS_VPORT VPORTA +#define nSTATUS_PORT PORTA +#define nSTATUS_PIN 4 +#define nSTATUS_PINCTRL nSTATUS_PORT.PIN4CTRL +#define CRCERR_VPORT VPORTA +#define CRCERR_PORT PORTA +#define CRCERR_PIN 5 +#define CRCERR_PINCTRL CRCERR_PORT.PIN5CTRL +#define PEN_VPORT VPORTB +#define PEN_PORT PORTB +#define PEN_PIN 1 +#else +#define SSEL_VPORT VPORTA +#define SSEL_PORT PORTA +#define SSEL_PIN 4 +#endif + +#ifdef HAVE_nFETs +#define DRAIN_VPORT VPORTA +#define DRAIN_PORT PORTA +#define DRAIN_PIN 5 +#define PWM_VPORT VPORTB +#define PWM_PORT PORTB +#define PWM_PIN 0 +#endif + +#if 0 + +static inline +void apply_config() +{ + uint8_t n = ee_end - ee_start; + struct io_config = ee_start; + uint8_t prefix = 0; + while (n--) { + const struct io_config *io = c++; + if (io->addr == 0xff) + prefix = io->val; + else { + uint8_t *p = (uint8_t*)((uint16_t)prefix << 8 | io->addr); + *p = io->val; + } + } +} + +#else + +static inline +void apply_config() +{ + __asm__ volatile( + "ldi r30, lo8(ee9_start)" "\n\t" + "ldi r31, hi8(ee9_start)" "\n\t" + "ldi r24, lo8(ee9_size)" "\n\t" + "clr r26" "\n" + "1:" "\n\t" + "mov r27, r26" "\n\t" + "subi r24, 2" "\n\t" + "brcs 3f" "\n" + "2:" "\n\t" + "ld r26, Z+" "\n\t" + "ld r25, Z+" "\n\t" + "cpi r26, 0xff" "\n\t" + "breq 1b" "\n\t" + "st X, r25" "\n\t" + "subi r24, 2" "\n\t" + "brcc 2b" "\n" + "3:" "\n\t" + ::: "r24", "r25", "r26", "r27", "r30", "r31"); +} + +#endif + +#define section_status(_n) __attribute__((section(".bss."#_n))) + #endif // _CONFIG_H diff --git a/src/dose.c b/src/dose.c index 86ac7dd..eb640fb 100644 --- a/src/dose.c +++ b/src/dose.c @@ -13,18 +13,19 @@ #include "config.h" #include "dose.h" +#include "pipe.h" #include "uart.h" #include "rtc.h" -#include "spi.h" #include "cmd.h" #include "adc.h" #include "pwm.h" -#include "flash.h" //////////////////////////////////////////////////////////////////////////////// // // main() +section_status(main) uint8_t reset_source; + int main() { while (CLKCTRL.MCLKCTRLB != config.cpu_clk) { @@ -32,19 +33,21 @@ int main() CLKCTRL.MCLKCTRLB = config.cpu_clk; } - set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); while (config.magic != USE_USERROW) sleep_cpu(); - apply_config(IO_CONFIG, IO_CONFIG_SIZE); - uint8_t reset_source = RSTCTRL.RSTFR; + apply_config(); + + reset_source = RSTCTRL.RSTFR; RSTCTRL.RSTFR = reset_source; send_str("\nV Turbo Dose V0.9"); send_hex_byte_eol(reset_source); while (1) { + sei(); sleep_cpu(); command(); + pipe_poll(); } } diff --git a/src/eeprom.ld b/src/eeprom.ld index 28c4628..c21a59d 100644 --- a/src/eeprom.ld +++ b/src/eeprom.ld @@ -20,6 +20,7 @@ SECTIONS ee9_start = .; *(.eeprom9) ee9_end = .; + ee9_size = ee9_end - ee9_start; } >eemap AT >eedef .uumap 0x1300: { diff --git a/src/flash.c b/src/flash.c index f918cdd..a7e468a 100644 --- a/src/flash.c +++ b/src/flash.c @@ -87,8 +87,8 @@ miscellanious #include "cmd.h" #include "bch4369.h" -uint8_t flash_cmd_buffer[4]; -uint8_t flash_status_bytes[2]; +section_status(flash) uint8_t flash_cmd_buffer[4]; +section_status(flash) uint8_t flash_status_bytes[2]; uint8_t flash_buffer[FB_SIZE]; uint8_t flash_cmd_na(uint16_t mode, uint16_t what) diff --git a/src/flash.h b/src/flash.h index a58d45c..0a52b6a 100644 --- a/src/flash.h +++ b/src/flash.h @@ -1,4 +1,7 @@ +#ifndef _FLASH_H +#define _FLASH_H + #include "spi.h" enum flash_mode_bits { @@ -48,3 +51,4 @@ enum { FS_BCH = 128, // do 528 byte pages. }; +#endif diff --git a/src/fpga.c b/src/fpga.c new file mode 100644 index 0000000..115c19c --- /dev/null +++ b/src/fpga.c @@ -0,0 +1,54 @@ + +#include "fpga.h" +#include "spi.h" + +#ifdef FPGA_CMD_INLINE +static inline +#endif +void fpga_cmd(struct fpga_cmd *c) +{ + if (fpga_reset_poll()) { + c->n |= 0x20; // busy flag + return; + } + if (c->n & 1 && spi_abort()) { + c->n |= 0x10; // aborted flag + return; + } + else if (spi_busy_p()) { + c->n |= 0x20; // busy flag + return; + } + c->n &=~ 0x10; // not busy + if (c->n & 0x40) + return; + c->n |= 0x40; // submitted flag + uint8_t n = c->n & 0x0e; // send up to seven cmd words + uint8_t z = c->z & 0x7e; // and up to 63 zeros + spi_select(0); + spi.zero = c->n & 0x80; // send nop: 0x8080 (please), or zeros + spi.csize = n; + spi.wdata = c->d; + spi.rdata = c->d; + if (c->z & 0x80) { + spi.isize = n + z>>3 & 0x0e; // ignore cmd ± (z[6:4]) + spi.zsize = spi.rsize = z & 0x0e; // read x[3:1] words + spi.mask = 0xff; // start reading at the first nonzero byte after cmd + } + else { + spi.zsize = z; // send z zeros/nop after cmd + spi.rsize = 14; // save the last 7 words returned + if (n + z > 14) + spi.isize = n + z - 14; + else + spi.isize = 0; + } + spi_start(); +} + +uint8_t fpga_poll(uint8_t flag) +{ + uint8_t r = fpga_reset_poll(); + if (r) + return r; +} diff --git a/src/fpga.h b/src/fpga.h new file mode 100644 index 0000000..dd09220 --- /dev/null +++ b/src/fpga.h @@ -0,0 +1,28 @@ + +#include + +struct fpga_cmd { + uint8_t n; + uint8_t z; + uint8_t d[14]; +}; + +void fpga_cmd(struct fpga_cmd *c); + +static inline +uint8_t fpga_reset() +{ + nCONFIG_VPORT |= (1< - -uint8_t pipe_config(const uint8_t *); -uint8_t pipe_poll(uint8_t flag); +#include "flash.h" enum pipe_ports { pipe_cmd = 1, pipe_hk = 2, pipe_flash = 4, - pipe_fpgs = 8, + pipe_fpga = 8, + + PS_OUT = 0x80, + PS_528 = 0x08, + PS_5 = 0x04 | PS_528, // need 16 bytes more }; extern @@ -16,5 +17,17 @@ struct pipe { uint8_t source; uint8_t dest; uint8_t status; - uint16_t size; + uint8_t valid; } pipe; + +struct pipe_config { + uint8_t source; + uint8_t dest; + uint8_t flags; + uint16_t nbuffers; + uint8_t flash_flags; + uint8_t flash_page; +}; + +uint8_t pipe_poll(); +uint8_t pipe_config(struct pipe_config *c); diff --git a/src/pwm.c b/src/pwm.c index 3e6d795..b37e2dc 100644 --- a/src/pwm.c +++ b/src/pwm.c @@ -3,21 +3,6 @@ #include "pwm.h" -#ifdef NO_EE_CONFIG - -void init_pwm(uint16_t period) -{ - PWM.CTRLA = 0; - PWM.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc; - PWM.PER = period; - PWM.CMP0 = 0xffff; - PWM.CTRLA = 0x81; - D_PORT.OUT |= 1< -struct spi_job spi; - -#ifdef NO_EE_CONFIG - -void init_spi(uint8_t spi_div) -{ - SSEL_PORT.OUT |= 1 << SSEL_PIN; - SSEL_PORT.DIR |= 1 << SSEL_PIN; - SPI.CTRLB = SPI_SSD_bm | SPI_BUFEN_bm; // Mode 0 - SPI.CTRLA = SPI_MASTER_bm | SPI_ENABLE_bm | spi_div; - SPI.DATA; - SPI.DATA; - SPI.INTFLAGS = 0xff; - SPI.INTCTRL = 0; -} - -#else +section_status(spi) struct spi_job spi; struct_ioconf(spi_config) = { conf_prefix(SPI), @@ -31,8 +15,6 @@ struct_ioconf(spi_config) = { conf_io(SPI.CTRLA, SPI_MASTER_bm | SPI_ENABLE_bm | SPI_SPEED), }; -#endif - ISR(SPI0_INT_vect) { uint8_t ifg = SPI.INTFLAGS; From 977af7648b6336345eb8749150b67a2d1ffb81b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Fri, 9 Jan 2026 21:00:02 +0100 Subject: [PATCH 16/33] The machine is complete, no space left for the main program --- src/Makefile | 9 +++-- src/adc.c | 62 +++++++++++++++++++++++++---------- src/adc.h | 13 +++++++- src/bch4369.h | 17 ++++++++++ src/cmd.c | 26 ++------------- src/config.c | 12 ++++--- src/config.h | 60 +++++++++++++++++++++++++++++++-- src/dose.c | 25 +++++++++++--- src/flash.c | 35 ++------------------ src/flash.h | 2 +- src/fpga.c | 28 ++++++++++++---- src/fpga.h | 17 +++++----- src/pipe.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++----- src/pipe.h | 32 +++++++++++++----- src/pwm.c | 17 +++++----- src/pwm.h | 14 ++++++-- src/rtc.c | 63 +++++++++++++++++++++++++---------- src/rtc.h | 49 ++------------------------- src/spi.h | 12 +++---- src/uart.c | 10 +++--- 20 files changed, 385 insertions(+), 209 deletions(-) diff --git a/src/Makefile b/src/Makefile index 42ff521..70a1a9b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,13 +7,15 @@ default: all all: $(PROJ).hex SN_dose = 1 -MCU_dose = attiny424 +MCU_dose = $(MCU_$(VAR)) +MCU_nFETs = attiny424 +MCU_FPGA = attiny3224 VAR=nFETs -C_FILES_nFETs = pwm.c +C_FILES_nFETs = C_FILES_FPGA = fpga.c CFLAGS_dose = -DHAVE_$(VAR) -C_FILES_dose = config.c $(C_FILES_$(VAR)) cmd.c pipe.c uart.c base85.c bch4369.c rtc.c spi.c flash.c adc.c +C_FILES_dose = config.c rtc.c adc.c pwm.c $(C_FILES_$(VAR)) uart.c cmd.c pipe.c base85.c bch4369.c spi.c flash.c S_FILES_dose = uart_tx.S base85a.S MCU = $(MCU_$(PROJ)) @@ -65,6 +67,7 @@ OBJCOPY = avr-objcopy pMCU-attiny424 = t424 pMCU-attiny824 = t824 +pMCU-attiny824 = t3224 # WDT fuse0_dose= 0x00 diff --git a/src/adc.c b/src/adc.c index bb8cae1..cbc1351 100644 --- a/src/adc.c +++ b/src/adc.c @@ -5,12 +5,14 @@ #include "config.h" #include "adc.h" #include +#include "pwm.h" +#include "rtc.h" enum adc_conf_parameter { INP = ADC_VIA_ADC_gc, INN = ADC_VIA_ADC_gc, REF = 10 << ADC_TIMEBASE_gp, - MODE = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc, + MODE = ADC_MODE_SERIES_SCALING_gc | ADC_START_EVENT_TRIGGER_gc, MODE_DIFF = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc | ADC_DIFF_bm, }; @@ -62,6 +64,9 @@ struct adc_conf adc_conf[N_ADC] = { section_status(adc.n) uint8_t adc_current; section_status(adc.r) uint16_t adc_readings[N_ADC]; +#ifdef HAVE_nFETs +section_status(pwm) uint16_t pwm_dutycycle; +#endif static inline void start_conversion(const struct adc_conf *c) @@ -72,29 +77,24 @@ void start_conversion(const struct adc_conf *c) ADC.COMMAND = c->mode; } -#ifdef NO_EE_CONFIG - -void init_adc() -{ - PORTB.PIN1CTRL |= PORT_ISC_INPUT_DISABLE_gc; - PORTA.PIN6CTRL |= PORT_ISC_INPUT_DISABLE_gc; - PORTA.PIN7CTRL |= PORT_ISC_INPUT_DISABLE_gc; -} - -#endif +struct_ioconf(adc_config) = { + conf_prefix(ADC), + conf_io(ADC.CTRLA, ADC_ENABLE_bm), + conf_io(ADC.CTRLB, ADC_PRESC_DIV10_gc), + conf_io(ADC.CTRLE, 250 << ADC_SAMPDUR_gp), + conf_io(ADC.CTRLF, ADC_SAMPNUM_ACC256_gc | ADC_LEFTADJ_bm), + conf_io(ADC.INTCTRL, ADC_RESRDY_bm), + conf_prefix(EVSYS), + conf_io(EVSYS.CHANNEL0, EVSYS_CHANNEL0_TCA0_CMP1_LCMP1_gc), + conf_io(EVSYS.USERADC0START, 1), +}; void start_adc() { if (!adc_conf->mode) return; - ADC.CTRLA = ADC_ENABLE_bm | ADC_RUNSTDBY_bm; ADC.COMMAND = 0; - ADC.CTRLB = ADC_PRESC_DIV10_gc; - ADC.CTRLE = 32 << ADC_SAMPDUR_gp; - ADC.CTRLF = ADC_SAMPNUM_ACC64_gc | ADC_LEFTADJ_bm; adc_current = 0; - ADC.INTFLAGS = 0xff; - ADC.INTCTRL = ADC_RESRDY_bm; start_conversion(adc_conf); } @@ -177,6 +177,7 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "reti" "\n" "3:" "\n\t" "clr r24" "\n\t" + "sts %[COMMAND], r24" "\n\t" "sts %[CTRLA], r24" "\n\t" "ldi r24, %[NADC]" "\n\t" "rjmp 2b" "\n" @@ -191,3 +192,30 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) ); } #endif + +void adc_start_stream(uint8_t flag) +{ +#ifdef HAVE_nFETs + if (flag & ADC_PWM) + pwm_set(config.pwm_min, 1); +#endif + start_adc(); +} + +uint8_t adc_poll(uint8_t flags) +{ + time(); // fill `clock` + uint8_t r = adc_busy(); + if (r) + return r; + if (flags) { +#ifdef HAVE_nFETs + if (flags & ADC_PWM) + pwm_step(config.pwm_max); + pwm_dutycycle = PWM.CMP0; + if (pwm_busy() || flags & ADC_CONV) +#endif + start_adc(); + } + return 0; +} diff --git a/src/adc.h b/src/adc.h index bc60c42..3bd5980 100644 --- a/src/adc.h +++ b/src/adc.h @@ -29,5 +29,16 @@ extern uint8_t adc_current; void start_adc(); void init_adc(); -static inline uint8_t adc_busy() { return ADC.STATUS & 1; } +static inline uint8_t adc_busy() { return ADC.COMMAND; } extern struct adc_conf adc_conf[N_ADC]; +uint8_t adc_poll(uint8_t flag); +void adc_start_stream(uint8_t flag); + +enum adc_flags { + ADC_CONV = 1, + ADC_PWM = 2, + ADC_SIZE = 0x70, // opencoded in pipe.c + ADC_16 = 0x10, + ADC_32 = 0x20, + ADC_64 = 0x40, +}; diff --git a/src/bch4369.h b/src/bch4369.h index 862ea36..e213d75 100644 --- a/src/bch4369.h +++ b/src/bch4369.h @@ -5,3 +5,20 @@ extern uint8_t bch_parity[16]; void bch4369(uint8_t d); static inline void bch4369_init() { memset(bch_parity, 0 , 16); } void bch4369_str(const uint8_t *b, uint8_t n); + +static inline +uint8_t *bch4369_stri(uint8_t *b, uint8_t n) +{ + __asm__ volatile( + "1:" "\n\t" + "ld r24, Y+" "\n\t" + "rcall bch4369" "\n\t" + "subi %[N], 1" "\n\t" + "brne 1b" "\n" + : [N] "+r" (n), [B] "+y" (b) + :: "r0", + "r20", "r21", "r24", "r25", + "r26", "r27", "r30", "r31" + ); + return b; +} diff --git a/src/cmd.c b/src/cmd.c index 410555d..e3be56e 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -11,8 +11,7 @@ #include "pipe.h" #ifdef HAVE_FPGA -#define FPGA_CMD_INLINE -#include "fpga.c" +#include "fpga.h" #endif uint8_t cmd_buffer[16]; @@ -78,27 +77,6 @@ struct peak_poke { uint8_t data[12]; }; -#if 0 -#define _memcopy memcpy -#else -// avoid the avr-libc memcpy. -// ¡ n must not be zero ! -static inline -void _memcopy(uint8_t *d, uint8_t *s, uint8_t n) -{ - __asm__ volatile ("\n" - "1:" "\n\t" - "ld r0, Z+" "\n\t" - "st X+, r0" "\n\t" - "dec %[N]" "\n\t" - "brne 1b" "\n" - : [D] "+x" (d), - [S] "+z" (s), - [N] "+r" (n) - :: "r0", "memory"); -} -#endif - static inline uint8_t poke(struct peak_poke *p, uint8_t poke) { @@ -251,7 +229,7 @@ void parse_command(const uint8_t *s, uint8_t n) break; case 'P': if (have_b) - r = pipe_config((void*)cmd_buffer); + pipe_config((void*)cmd_buffer); else r = pipe_poll(); break; diff --git a/src/config.c b/src/config.c index 756843a..b04e0f5 100644 --- a/src/config.c +++ b/src/config.c @@ -9,8 +9,8 @@ __attribute__((section(".userrow"))) const struct config config = { - .magic = USE_USERROW, - .version = USE_VERSION, + .magic = MAGIC, + .version = VERSION, .cpu_clk = CLKCTRL_PDIV_2X_gc | 1, // 10MHz (max @ 3V) .flash_page_size = FM_528 >> 8, .burn_page = 0x88, // Buffer 1 Page Program w/o Erase @@ -20,6 +20,10 @@ const struct config config = { [0] = 0xd1 | FM_READ>>8, // Buffer 1 Read (Low-Frequency) [1] = 0xd3 | FM_READ>>8, // Buffer 2 Read (Low-Frequency) }, +#ifdef HAVE_nFETs + .pwm_min = 0x0000, + .pwm_max = 0xffff, +#endif }; //////////////////////////////////////////////////////////////////////////////// @@ -29,13 +33,13 @@ const struct config config = { struct_ioconf(port_config) = { conf_prefix(PORTA), + conf_io(RxD_PINCTRL, PORT_PULLUPEN_bm), #ifdef HAVE_nFETs conf_io(ADC_D1_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), conf_io(ADC_D2_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), conf_io(ADC_G_PINCTRL, PORT_ISC_INPUT_DISABLE_gc), #endif #ifdef HAVE_FPGA - conf_io(RxD_PINCTRL, PORT_PULLUPEN_bm), conf_io(nSTATUS_PINCTRL, PORT_PULLUPEN_bm), conf_io(CRCERR_PINCTRL, PORT_PULLUPEN_bm), #endif @@ -45,7 +49,7 @@ struct_ioconf(port_config) = { | Bit(DRAIN_PIN) #endif #ifdef HAVE_FPGA - | Bit(n_CONFIG_PIN) | Bit(TxE_PIN) + | Bit(nCONFIG_PIN) | Bit(TxE_PIN) #endif ), conf_io(PORTB.OUT, Bit(TxD_PIN)), diff --git a/src/config.h b/src/config.h index 0228414..3aa5146 100644 --- a/src/config.h +++ b/src/config.h @@ -10,17 +10,28 @@ struct config { uint8_t magic; uint8_t version; uint8_t cpu_clk; + uint8_t cron; uint8_t flash_page_size; uint16_t burn_page; uint16_t erase_page; uint16_t write_buffer; uint16_t read_array; uint16_t read_buffer[2]; +#ifdef HAVE_nFETs + uint16_t pwm_min; + uint16_t pwm_max; +#endif }; enum magic_flags { - USE_USERROW = 0xD0, - USE_VERSION = 0x01, +#ifdef HAVE_nFETs + MAGIC = 0xD0, + VERSION = 0x01, +#endif +#ifdef HAVE_FPGA + MAGIC = 0xC5, + VERSION = 0x01, +#endif }; extern const struct config config; @@ -38,7 +49,7 @@ struct io_config { #define conf_prefix(_io) { 0xff, (uint16_t)&(_io) >> 8 } #define conf_io(_io, _v) { (uint16_t)&(_io) & 0xff, (_v) } #define conf_ioo(_io, _o, _v) { (uint16_t)&(_io) + _o & 0xff, (_v) } -#define conf_iow(_io, _v) conf_io(_io, (_v) & 0xff), conf_ioo(_io, 1, (_v) >> 8) +#define conf_iow(_io, _v) conf_io(_io, (_v) & 0xff), conf_ioo(_io, 1, (uint16_t)(_v) >> 8) extern struct io_config ee9_start[], ee9_end[]; @@ -138,5 +149,48 @@ void apply_config() #endif #define section_status(_n) __attribute__((section(".bss."#_n))) +extern struct magic { + uint8_t magic; + uint8_t reset_source; +} magic; + +#if 0 +#define _memcopy memcpy +#define _memcopyyz memcpy +#else +// avoid the avr-libc memcpy. +// ¡ n must not be zero ! +static inline +void _memcopy(uint8_t *d, uint8_t *s, uint8_t n) +{ + __asm__ volatile ("\n" + "1:" "\n\t" + "ld r0, Z+" "\n\t" + "st X+, r0" "\n\t" + "dec %[N]" "\n\t" + "brne 1b" "\n" + : [D] "+x" (d), + [S] "+z" (s), + [N] "+r" (n) + :: "r0", "memory"); +} + +static inline +void _memcopyyz(uint8_t *d, uint8_t *s, uint8_t n) +{ + __asm__ volatile ("\n" + "1:" "\n\t" + "ld r0, Z+" "\n\t" + "st Y+, r0" "\n\t" + "dec %[N]" "\n\t" + "brne 1b" "\n" + : [D] "+y" (d), + [S] "+z" (s), + [N] "+r" (n) + :: "r0", "memory"); +} + + +#endif #endif // _CONFIG_H diff --git a/src/dose.c b/src/dose.c index eb640fb..0a87d5b 100644 --- a/src/dose.c +++ b/src/dose.c @@ -24,7 +24,16 @@ // // main() -section_status(main) uint8_t reset_source; +section_status(main) struct magic magic; + +const struct pipe_config cron_job[1] = +{ + [0] = { + .pipe = { + }, + + }, +}; int main() { @@ -34,20 +43,26 @@ int main() } sleep_enable(); - while (config.magic != USE_USERROW) + magic.magic = config.magic; + while (magic.magic != MAGIC) sleep_cpu(); apply_config(); - reset_source = RSTCTRL.RSTFR; - RSTCTRL.RSTFR = reset_source; + magic.reset_source = RSTCTRL.RSTFR; + RSTCTRL.RSTFR = magic.reset_source; send_str("\nV Turbo Dose V0.9"); - send_hex_byte_eol(reset_source); + send_hex_byte_eol(magic.reset_source); while (1) { sei(); sleep_cpu(); command(); pipe_poll(); + if (rtc_tick) { + rtc_tick = 0; + if (config.cron) + pipe_config(cron_job); + } } } diff --git a/src/flash.c b/src/flash.c index a7e468a..1bfb58f 100644 --- a/src/flash.c +++ b/src/flash.c @@ -85,7 +85,6 @@ miscellanious #include "config.h" #include "flash.h" #include "cmd.h" -#include "bch4369.h" section_status(flash) uint8_t flash_cmd_buffer[4]; section_status(flash) uint8_t flash_status_bytes[2]; @@ -179,10 +178,8 @@ uint8_t flash_stream_submit(uint16_t mode, uint8_t size) fs.page = ++p; fs.npages--; } - if (b==7 && r & FS_BCH) { + else if (b==7 && r & FS_528) size |= 16; - memcpy(flash_buffer+64, bch_parity, 16); - } } else if ((r & FS_Dir) == FS_Erase) { fs.page += (uint16_t) b + 1; @@ -250,17 +247,6 @@ uint8_t flash_burn_page() return flash_stream_submit(config.burn_page, 0); } -static inline -void bch_flash_buffer(uint8_t n) -{ - bch4369_str(flash_buffer, n); -} - -void bch_flash_init() -{ - bch4369_init(); -} - uint8_t flash_poll(uint8_t rr) { uint8_t r = fs.status; @@ -293,15 +279,6 @@ uint8_t flash_poll(uint8_t rr) return r; } } - else if (r & FS_BCH) { - // checksum the received buffer - if (fs.block == 1) - bch_flash_init(); - if (fs.block & 8) - bch_flash_buffer(80); - else - bch_flash_buffer(64); - } ready: r &= ~(FS_Busy | FS_StBsy); @@ -315,14 +292,8 @@ ready: else if (!flash_stream_done()) { if (r & (FS_Dir|FS_Ack) == (FS_Read|FS_Ack)) flash_read_next_block(); - else if (r & (FS_Dir|FS_Ack) == (FS_Write|FS_Ack)) { - if (r & FS_BCH) { - if (!(fs.block & 7)) - bch_flash_init(); - bch_flash_buffer(64); - } + else if (r & (FS_Dir|FS_Ack) == (FS_Write|FS_Ack)) flash_write_next_block(); - } else if (r & FS_Dir == FS_Erase) flash_erase_next_page(); fs.status &=~ FS_Ack; @@ -337,7 +308,7 @@ uint8_t flash_start_stream(uint16_t page, uint16_t npages, uint8_t flags) return FS_Error; r = flags | FS_Ready; if (config.flash_page_size != FM_528) - r &=~ FS_BCH; + r &=~ FS_528; fs.page = page; fs.block = 0; fs.npages = npages; diff --git a/src/flash.h b/src/flash.h index 0a52b6a..79912cf 100644 --- a/src/flash.h +++ b/src/flash.h @@ -48,7 +48,7 @@ enum { FS_Dir = 12, // Mask for the last three FS_Ack = 32, // Next buffer is provided, continue … FS_StBsy = 64, // Waiting to Flash status register - FS_BCH = 128, // do 528 byte pages. + FS_528 = 128, // do 528 byte pages. }; #endif diff --git a/src/fpga.c b/src/fpga.c index 115c19c..2098dba 100644 --- a/src/fpga.c +++ b/src/fpga.c @@ -1,10 +1,8 @@ +#include "pipe.h" #include "fpga.h" #include "spi.h" -#ifdef FPGA_CMD_INLINE -static inline -#endif void fpga_cmd(struct fpga_cmd *c) { if (fpga_reset_poll()) { @@ -46,9 +44,25 @@ void fpga_cmd(struct fpga_cmd *c) spi_start(); } -uint8_t fpga_poll(uint8_t flag) +void fpga_start(uint8_t write) { - uint8_t r = fpga_reset_poll(); - if (r) - return r; + uint8_t mode = 0; + if (pipe.fpga.zero == SPI_CONFIG) + mode = SPI_CONFIG; + spi_select(mode); + _memcopy(&spi.csize, &pipe.fpga.csize, 6); + spi.cmd = pipe.fpga.cmd; + spi.wdata = flash_buffer; + spi.rdata = flash_buffer; + uint8_t n = 64; + if (n > pipe.fpga.size) + n = pipe.fpga.size; + pipe.fpga.size -= n; + if (!n) + return; + if (write) + spi.wsize = n; + else + spi.rsize = n; + spi_start(); } diff --git a/src/fpga.h b/src/fpga.h index dd09220..6174b6f 100644 --- a/src/fpga.h +++ b/src/fpga.h @@ -1,5 +1,5 @@ -#include +#include "config.h" struct fpga_cmd { uint8_t n; @@ -7,22 +7,21 @@ struct fpga_cmd { uint8_t d[14]; }; -void fpga_cmd(struct fpga_cmd *c); - static inline -uint8_t fpga_reset() +void fpga_reset() { - nCONFIG_VPORT |= (1< section_status(pipe) struct pipe pipe; @@ -7,10 +15,10 @@ uint8_t pipe_poll() { uint8_t r = pipe.status; uint8_t fl = flash_poll(0); - if (spi_busy_p() || fl & FS_Busy) + if (spi_busy_p() || fl & FS_Busy || adc_poll(0)) goto done; #ifdef HAVE_FPGA - if (fpga_poll(0)) + if (fpga_reset_poll()) goto done; #endif if (r & PS_OUT) { @@ -20,38 +28,105 @@ uint8_t pipe_poll() if (pipe.dest & pipe_flash && !(fl & FS_Ready)) // flash did not finish successfully goto done; + // fpga is OUT when the spi is ready. + // We are done with this buffer pipe.valid = 0; if (pipe.source & pipe_flash) flash_poll(1); + else if (pipe.source & pipe_adc) + adc_poll(pipe.adc); #ifdef HAVE_FPGA else if (pipe.source & pipe_fpga) - fpga_poll(r); + fpga_start(0); #endif r |=~ PS_OUT; + r &= ~4; + r++; goto done; } - r &= ~4; - r++; uint8_t bflgs = 0x0f; if ((r & PS_5) == PS_5) bflgs = 0x1f; + if (pipe.source & pipe_adc) { + uint8_t n = pipe.adc & 0x70; + if (!n) + goto adc_done; + uint8_t f = n-1; + uint8_t o = -16; + uint8_t v = pipe.valid; +#if 0 + uint8_t c; + do { + o += 16; + f <<= 1; + c = v & 1; + v >>= 1; + } while (c); // please use the carry bit! +#else + // saves one instruction + __asm__ volatile + ("\n" + "1: \n\t" + "subi %[O], -16 \n\t" + "lsl %[F] \n\t" + "lsr %[V] \n\t" + "brcs 1b \n" + : [O] "+r" (o), + [F] "+r" (f), + [V] "+r" (v) + ); +#endif + if (o > 48) + goto adc_done; + if (o + n >= 64) { + f = 0xff; + n = 64-o; + } + pipe.valid |= f>>4; + _memcopy(flash_buffer+o, (void*)&magic, n); + } +adc_done: + if (pipe.source & pipe_flash && fl & FS_Ready) pipe.valid = bflgs; #ifdef HAVE_FPGA else if (pipe.source & pipe_fpga) - pipe.valid = bflgs; + pipe.valid = 0x0f; #endif + if (~pipe.valid & 0x0f) + goto done; + if (r & PS_BCH) { + if (!(r&3)) + bch4369_init(); + uint8_t *bend = bch4369_stri(flash_buffer, 64); + if (!(~r & 3)) { + // reuse Y=bend + _memcopyyz(bend, bch_parity, 16); + pipe.valid = 0x01f; + } + } if (~pipe.valid & bflgs) goto done; + +#ifdef HAVE_FPGA + if (pipe.dest & pipe_fpga) + fpga_start(1); +#endif + r |= PS_OUT; done: pipe.status = r; return r; } -uint8_t pipe_config(struct pipe_config *c) +void pipe_config(const struct pipe_config *c) { - return 0; + pipe = c->pipe; + if ((pipe.source | pipe.dest) & pipe_flash) + flash_start_stream(c->page, c->npages, c->flash); + if (pipe.source & pipe_adc) + adc_start_stream(pipe.adc); } + diff --git a/src/pipe.h b/src/pipe.h index 4fff964..bb23d65 100644 --- a/src/pipe.h +++ b/src/pipe.h @@ -3,13 +3,15 @@ enum pipe_ports { pipe_cmd = 1, - pipe_hk = 2, + pipe_adc = 2, pipe_flash = 4, pipe_fpga = 8, PS_OUT = 0x80, + PS_BCH = 0x10, PS_528 = 0x08, - PS_5 = 0x04 | PS_528, // need 16 bytes more + PS_BLK = 0x03, + PS_5 = PS_BLK | PS_528, // need 16 bytes more }; extern @@ -18,16 +20,28 @@ struct pipe { uint8_t dest; uint8_t status; uint8_t valid; + uint8_t adc; +#ifdef HAVE_FPGA + struct { + uint16_t size; + uint8_t cmd[4]; + uint8_t csize; + uint8_t zsize; + uint8_t isize; + uint8_t zero; + uint8_t wait; + uint8_t mask; + } fpga; +#endif } pipe; struct pipe_config { - uint8_t source; - uint8_t dest; - uint8_t flags; - uint16_t nbuffers; - uint8_t flash_flags; - uint8_t flash_page; + struct pipe pipe; + uint16_t page; + uint16_t npages; + uint8_t flash; }; uint8_t pipe_poll(); -uint8_t pipe_config(struct pipe_config *c); +void pipe_cron(); +void pipe_config(const struct pipe_config *c); diff --git a/src/pwm.c b/src/pwm.c index b37e2dc..71c9b43 100644 --- a/src/pwm.c +++ b/src/pwm.c @@ -5,14 +5,13 @@ struct_ioconf(pwm_config) = { conf_prefix(PWM), - conf_io(PWM.CTRLA, 0), - conf_io(PWM.CTRLB, TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc), - conf_iow(PWM.PER, 0xfff), +#ifdef HAVE_nFETs + conf_io(PWM.CTRLB, TCA_SINGLE_WGMODE_SINGLESLOPE_gc | TCA_SINGLE_CMP0EN_bm), +#else + conf_io(PWM.CTRLB, TCA_SINGLE_WGMODE_SINGLESLOPE_gc), +#endif + conf_iow(PWM.PER, 0x0fff), conf_iow(PWM.CMP0, 0xffff), - conf_io(PWM.CTRLA, 0x81), + conf_iow(PWM.CMP1, 0x00ff), + conf_io(PWM.CTRLA, TCA_SINGLE_ENABLE_bm), }; - -uint8_t pwm_poll(uint8_t flag) -{ - return 1; -} diff --git a/src/pwm.h b/src/pwm.h index 8b06924..66fd1e2 100644 --- a/src/pwm.h +++ b/src/pwm.h @@ -3,7 +3,7 @@ #define PWM TCA0.SINGLE -void init_pwm(uint16_t period); +#ifdef HAVE_nFETs static inline void pwm_set(uint16_t dc, uint8_t d) @@ -22,11 +22,19 @@ void pwm_bias() } static inline -void pwm_step() +void pwm_step(uint16_t max) { uint16_t c = PWM.CMP0+1; - if (c > PWM.PER+1) + if (c > max) pwm_bias(); else pwm_set(c, 1); } + +static inline +uint8_t pwm_busy() +{ + return DRAIN_VPORT.OUT & (1 << DRAIN_PIN); +} + +#endif diff --git a/src/rtc.c b/src/rtc.c index 43c5e22..00cd9d1 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -9,7 +9,8 @@ #define Bit(x) (1<<(x)) -volatile uint16_t clock; +section_status(rtc) uint32_t clock; +volatile uint16_t clockh; volatile uint8_t pit_tick; volatile uint8_t rtc_tick; @@ -68,12 +69,12 @@ ISR(RTC_CNT_vect, ISR_NAKED) "1:" "\n\t" "sbrs r24, 0" "\n\t" "rjmp 2f" "\n\t" - "lds r24, clock" "\n\t" + "lds r24, clockh" "\n\t" "subi r24, -1" "\n\t" - "sts clock, r24" "\n\t" - "lds r24, clock+1" "\n\t" + "sts clockh, r24" "\n\t" + "lds r24, clockh+1" "\n\t" "sbci r24, -1" "\n\t" - "sts clock+1, r24" "\n\t" + "sts clockh+1, r24" "\n\t" "2:" "\n\t" "pop r24" "\n\t" "out __SREG__, r24" "\n" @@ -105,16 +106,44 @@ ISR(RTC_CNT_vect) } #endif -#define NOINLINE_TICKS -#ifdef NOINLINE_TICKS - -#undef time -#undef second_tick -#undef hour_tick -#undef day_tick -uint8_t time() { return timei(); } -uint8_t second_tick() { return second_ticki(); } -uint8_t hour_tick() { return hour_ticki(); } -uint8_t day_tick() { return day_ticki(); } - +#if 0 +uint32_t time() +{ + uint16_t cl, ch; + do { + cli(); + cl = RTC.CNT; + ch = clockh; + sei(); + } while (cl != RTC.CMP); + return clock = cl | (uint32_t)ch << 16; +} +#else +__attribute__((naked)) +uint32_t time() +{ + __asm__ volatile("\n" + "1:" "\n\t" + "cli" "\n\t" + "lds r22, %[CNT]" "\n\t" + "lds r23, %[CNT]+1" "\n\t" + "lds r24, clockh" "\n\t" + "lds r25, clockh+1" "\n\t" + "sei" "\n\t" + "lds r18, %[CNT]" "\n\t" + "lds r19, %[CNT]+1" "\n\t" + "cp r18, r22" "\n\t" + "cpc r19, r23" "\n\t" + "brne 1b" "\n\t" + "ldi r30, lo8(clock)" "\n\t" + "ldi r31, hi8(clock)" "\n\t" + "st Z+, r22" "\n\t" + "st Z+, r23" "\n\t" + "st Z+, r24" "\n\t" + "st Z+, r25" "\n\t" + "ret" "\n" + :: [CNT] "n" (&RTC.CNT) + : "r18", "r19", "r30", "r31", "memory" + ); +} #endif diff --git a/src/rtc.h b/src/rtc.h index b4690e0..28ef080 100644 --- a/src/rtc.h +++ b/src/rtc.h @@ -5,51 +5,8 @@ #include #include -volatile extern uint16_t clock; +extern uint32_t clock; +volatile extern uint16_t clockh; volatile extern uint8_t pit_tick; volatile extern uint8_t rtc_tick; -void init_rtc(uint8_t p); - -static inline -uint32_t timei() -{ - cli(); - uint16_t c = RTC.CNT; - sei(); - return c | (uint32_t)clock << 16; -} - -static inline -uint8_t second_ticki() -{ - cli(); - uint8_t c = pit_tick; - pit_tick = 0; - sei(); - return c; -} - -static inline -uint8_t hour_ticki() -{ - cli(); - uint8_t c = rtc_tick; - rtc_tick = c & ~2; - sei(); - return c & 2; -} - -static inline -uint8_t day_ticki() -{ - cli(); - uint8_t c = rtc_tick; - rtc_tick = c & ~1; - sei(); - return c & 1; -} - -#define time timei -#define second_tick second_ticki -#define hour_tick hour_ticki -#define day_tick day_ticki +uint32_t time(); diff --git a/src/spi.h b/src/spi.h index 5434e82..eff35d0 100644 --- a/src/spi.h +++ b/src/spi.h @@ -15,14 +15,14 @@ extern struct spi_job { uint8_t mode; uint8_t status; - uint8_t csize; - uint8_t zsize; - uint8_t isize; + uint8_t csize; // pipe.fpga.… + uint8_t zsize; // + uint8_t isize; // + uint8_t zero; // + uint8_t wait; // + uint8_t mask; // uint8_t rsize; uint8_t wsize; - uint8_t zero; - uint8_t wait; - uint8_t mask; const uint8_t *cmd; const uint8_t *wdata; uint8_t *rdata; diff --git a/src/uart.c b/src/uart.c index c8bf268..0772547 100644 --- a/src/uart.c +++ b/src/uart.c @@ -122,11 +122,11 @@ ISR(USART0_TXC_vect, ISR_ALIASOF(USART0_DRE_vect)); uint8_t uart_rx[32]; #define uart_rx_m (sizeof(uart_rx) - 1) -volatile uint8_t uart_rx_w; -volatile uint8_t uart_rx_s; -volatile uint8_t uart_rx_mes; -uint8_t uart_rx_err; -uint8_t uart_rx_errors; +section_status(uart.w) volatile uint8_t uart_rx_w; +section_status(uart.h) volatile uint8_t uart_rx_s; +section_status(uart.m) volatile uint8_t uart_rx_mes; +section_status(uart.e) uint8_t uart_rx_err; +section_status(uart.ee) uint8_t uart_rx_errors; #if 0 ISR(USART0_RXC_vect) From 0e878a6fa4e84863db0bf4e3c0671cbb14df0941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 12 Jan 2026 14:19:13 +0100 Subject: [PATCH 17/33] fpga_cmd: provide .cmd --- src/fpga.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fpga.c b/src/fpga.c index 2098dba..9cd18ec 100644 --- a/src/fpga.c +++ b/src/fpga.c @@ -26,7 +26,7 @@ void fpga_cmd(struct fpga_cmd *c) spi_select(0); spi.zero = c->n & 0x80; // send nop: 0x8080 (please), or zeros spi.csize = n; - spi.wdata = c->d; + spi.cmd = c->d; spi.rdata = c->d; if (c->z & 0x80) { spi.isize = n + z>>3 & 0x0e; // ignore cmd ± (z[6:4]) From 60abd1ab8992103c41210ff7683d8e8ff4e70ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 12 Jan 2026 15:31:56 +0100 Subject: [PATCH 18/33] Makefile: all: eeprom --- src/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 70a1a9b..a28ac24 100644 --- a/src/Makefile +++ b/src/Makefile @@ -4,7 +4,9 @@ PROJ=dose PATH:=/usr/local/bin:$(PATH) default: all -all: $(PROJ).hex +all: $(PROJ).hex $(PROJ)_all + +dose_all: dose.eeprom dose.userrow SN_dose = 1 MCU_dose = $(MCU_$(VAR)) From 0248c1dab296ec42e09ec6821e704d269073358c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 12 Jan 2026 15:32:21 +0100 Subject: [PATCH 19/33] spi: isr rework --- src/spi.c | 208 ++++++++++++++++++++++++++++++++++++++++++++++-------- src/spi.h | 10 +-- 2 files changed, 182 insertions(+), 36 deletions(-) diff --git a/src/spi.c b/src/spi.c index 37c2696..e7dc365 100644 --- a/src/spi.c +++ b/src/spi.c @@ -15,62 +15,213 @@ struct_ioconf(spi_config) = { conf_io(SPI.CTRLA, SPI_MASTER_bm | SPI_ENABLE_bm | SPI_SPEED), }; +#if 0 ISR(SPI0_INT_vect) { + uint8_t d; uint8_t ifg = SPI.INTFLAGS; - while (ifg & SPI_DREIF_bm) { + if (ifg & SPI_DREIF_bm) { + repeat: if (spi.csize) { - SPI.DATA = *spi.cmd++; spi.csize--; + d = *spi.cmd++; } else if (spi.zsize) { - SPI.DATA = spi.zero; spi.zsize--; + d = spi.zero; } else if (spi.wsize) { - if (spi.wdata) - SPI.DATA = *spi.wdata++; - else - SPI.DATA = spi.zero; + spi.wsize--; + d = *spi.wdata++; } else { - if (ifg & SPI_TXCIF_bm) { - if (!(spi.mode & SPI_CONT)) - SSEL_PORT.OUT |= 1 << SSEL_PIN; - spi.status |= SPI_IDLE; - SPI.INTCTRL = SPI_RXCIF_bm; - } - else { - SPI.INTCTRL = SPI_TXCIF_bm | SPI_RXCIF_bm; - } - break; + SPI.INTCTRL = SPI_TXCIF_bm | SPI_RXCIF_bm; + goto done_write; } + SPI.DATA = d; + // clear a stray TXCIF, at high SCK rate + SPI.INTFLAGS = SPI_TXCIF_bm; + SPI.INTCTRL = SPI_TXCIF_bm | SPI_DREIF_bm | SPI_RXCIF_bm; + done_write: ifg = SPI.INTFLAGS; } - while (ifg & SPI_RXCIF_bm) { - uint8_t d = SPI.DATA; // clears the IF flag + if (ifg & SPI_RXCIF_bm) { + d = SPI.DATA; // clears the IF flag if (spi.isize) spi.isize --; else { if (spi.mask) { if ((d & spi.mask) == spi.wait) { spi.zsize++; - SPI.INTCTRL = SPI_DREIF_bm | SPI_RXCIF_bm; - continue; + goto cont; } spi.mask = 0; } if (spi.rsize) { - *spi.rdata++ = d; spi.rsize--; - } - else if (!spi.mask) { - SPI.INTCTRL = SPI_DREIF_bm; + *spi.rdata++ = d; } } + cont: ifg = SPI.INTFLAGS; + if (ifg & SPI_DREIF_bm) + // This may prevent this ISR to terminate + // before the job is done at high clock rate. + // DRE is kept set when all bytes were sent. + // With just the right clock rate, we may send + // two bytes per interrupt. + goto repeat; + } + if (ifg & SPI_TXCIF_bm) { + if (!(spi.mode & SPI_CONT)) + SSEL_VPORT.OUT |= 1 << SSEL_PIN; + SPI.INTCTRL = SPI_RXCIF_bm; } } +#else +ISR(SPI0_INT_vect, ISR_NAKED) +{ + __asm__ volatile( + "push r24" "\n\t" + "in r24, __SREG__" "\n\t" + "push r24" "\n\t" + "push r25" "\n\t" + "push r26" "\n\t" + "push r30" "\n\t" + "push r31" "\n\t" + "lds r24, %[IFLGS]" "\n\t" + + "3:" "\n\t" + "sbrs r24, %[DRE]" "\n\t" + "rjmp 3f" "\n" + + "5:" "\n" + "lds r25, %[CSZ]" "\n\t" + "subi r25, 1" "\n\t" + "brcs 1f" "\n\t" + "sts %[CSZ], r25" "\n\t" + "lds r30, %[CMD]" "\n\t" + "lds r31, %[CMD]+1" "\n\t" + "ld r25, Z+" "\n\t" + "sts %[CMD], r30" "\n\t" + "sts %[CMD]+1, r31" "\n\t" + "rjmp 2f" "\n" + + "1:" "\n\t" + "lds r25, %[ZSZ]" "\n\t" + "subi r25, 1" "\n\t" + "brcs 1f" "\n\t" + "sts %[ZSZ], r25" "\n\t" + "lds r25, %[ZERO]" "\n\t" + "rjmp 2f" "\n" + + "1:" "\n\t" + "lds r25, %[WSZ]" "\n\t" + "subi r25, 1" "\n\t" + "ldi r26, %[RIFLGS]" "\n\t" + "brcs 1f" "\n\t" + "sts %[WSZ], r25" "\n\t" + "lds r30, %[WD]" "\n\t" + "lds r31, %[WD]+1" "\n\t" + "ld r25, Z+" "\n\t" + "sts %[WD], r30" "\n\t" + "sts %[WD]+1, r31" "\n" + + "2:" "\n\t" + "sts %[DATA], r25" "\n\t" + "ldi r25, 1<<%[TXC]" "\n\t" + "sts %[IFLGS], r25" "\n\t" + "ldi r26, %[AIFLGS]" "\n" + + "1:" "\n\t" + "sts %[ICTRL], r26" "\n\t" + "lds r24, %[IFLGS]" "\n" + "sbrs r24, %[RXC]" "\n\t" + "rjmp 3f" "\n\t" + "lds r25, %[DATA]" "\n\t" + "lds r26, %[ISZ]" "\n\t" + "subi r26, 1" "\n\t" + "brcs 1f " "\n\t" + "sts %[ISZ], r26" "\n\t" + "rjmp 4f" "\n" + + "1:" "\n\t" + "lds r26, %[MASK]" "\n\t" + "cpi r26, 0" "\n\t" + "breq 1f" "\n\t" + "and r26, r25" "\n\t" + "lds r24, %[WAIT]" "\n\t" + "cp r24, r26" "\n\t" + "brne 2f" "\n\t" + "lds r25, %[ZSZ]" "\n\t" + "subi r25, -1" "\n\t" + "sts %[ZSZ], r25" "\n\t" + "rjmp 4f" "\n" + + "2:" "\n\t" + "clr r26" "\n\t" + "sts %[MASK], r26" "\n" + + "1:" "\n\t" + "lds r26, %[RSZ]" "\n\t" + "subi r26, 1" "\n\t" + "brcs 4f" "\n\t" + "sts %[RSZ], r26" "\n\t" + "lds r30, %[RD]" "\n\t" + "lds r31, %[RD]+1" "\n\t" + "st Z+, r25" "\n\t" + "sts %[RD], r30" "\n\t" + "sts %[RD]+1, r31" "\n" + + "4:" "\n\t" + "lds r24, %[IFLGS]" "\n\t" + "sbrc r24, %[DRE]" "\n\t" + "rjmp 5b" "\n\t" + + "3:" "\n\t" + "sbrs r24, %[TXC]" "\n\t" + "rjmp 3f" "\n\t" + "lds r25, %[MODE]" "\n\t" + "sbrs r25, 7" "\n\t" + "sbi %[SPORT], %[SSEL]" "\n\t" + "ldi r25, 1<<%[RXC]" "\n\t" + "sts %[ICTRL], r25" "\n" + + "3:" "\n\t" + "pop r31" "\n\t" + "pop r30" "\n\t" + "pop r26" "\n\t" + "pop r25" "\n\t" + "pop r24" "\n\t" + "out __SREG__, r24" "\n\t" + "pop r24" "\n\t" + "reti" "\n" + :: + [CSZ] "m" (spi.csize), + [ZSZ] "m" (spi.zsize), + [WSZ] "m" (spi.wsize), + [ISZ] "m" (spi.isize), + [RSZ] "m" (spi.rsize), + [CMD] "m" (spi.cmd), + [ZERO] "m" (spi.zero), + [WD] "m" (spi.wdata), + [RD] "m" (spi.rdata), + [MODE] "m" (spi.mode), + [MASK] "m" (spi.mask), + [WAIT] "m" (spi.wait), + [IFLGS] "n" (&SPI.INTFLAGS), + [TXC] "n" (SPI_TXCIF_bp), + [DRE] "n" (SPI_DREIF_bp), + [RXC] "n" (SPI_RXCIF_bp), + [RIFLGS] "n" (SPI_TXCIF_bm | SPI_RXCIF_bm), + [AIFLGS] "n" (SPI_TXCIF_bm | SPI_RXCIF_bm | SPI_DREIF_bm), + [ICTRL] "n" (&SPI.INTCTRL), + [DATA] "n" (&SPI.DATA), + [SPORT] "n" (_SFR_IO_ADDR(SSEL_VPORT)), + [SSEL] "n" (SSEL_PIN) + ); +} +#endif uint8_t spi_select(uint8_t mode) { @@ -80,9 +231,9 @@ uint8_t spi_select(uint8_t mode) memset(&spi, 0, sizeof(spi)); spi.mode = mode; if (mode & SPI_FLASH) - SSEL_PORT.OUT &=~ (1 << SSEL_PIN); + SSEL_VPORT.OUT &=~ (1 << SSEL_PIN); else - SSEL_PORT.OUT |= 1 << SSEL_PIN; + SSEL_VPORT.OUT |= 1 << SSEL_PIN; if (mode & SPI_CONFIG) SPI.CTRLA |= SPI_DORD_bm; else @@ -90,7 +241,6 @@ uint8_t spi_select(uint8_t mode) return 0; } - void spi_start_cmd(uint8_t csize, uint8_t *cmd) { spi.cmd = cmd; @@ -112,7 +262,7 @@ void spi_start_read(uint8_t csize, uint8_t *cmd, uint8_t rsize, uint8_t *rdata) spi.rdata = rdata; spi.isize = csize + spi.zsize; barrier(); - spi.wsize = rsize; // more zeros + spi.zsize += rsize; spi.rsize = rsize; spi_start_cmd(csize, cmd); } diff --git a/src/spi.h b/src/spi.h index eff35d0..79d7478 100644 --- a/src/spi.h +++ b/src/spi.h @@ -14,7 +14,6 @@ extern struct spi_job { uint8_t mode; - uint8_t status; uint8_t csize; // pipe.fpga.… uint8_t zsize; // uint8_t isize; // @@ -34,10 +33,6 @@ enum spi_mode_bits { SPI_CONT = 0x80, }; -enum spi_status_bits { - SPI_IDLE = 0x01, -}; - static inline uint8_t spi_abort() { @@ -51,13 +46,14 @@ uint8_t spi_abort() static inline uint8_t spi_busy_p() { - return SPI.INTFLAGS; + return SPI.INTFLAGS & SPI_TXCIF_bm; } static inline void spi_start() { - SPI.INTCTRL = SPI_DREIF_bm | SPI_RXCIF_bm; + SPI.INTCTRL = SPI_DREIF_bm; + // the ISR will immediately set SPI_TXCIF_bm. } static inline void barrier() { __asm__("":::"memory"); } From 26e39e219e0c47b931786d781d5621ab95fd0559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 12 Jan 2026 20:14:31 +0100 Subject: [PATCH 20/33] ADC_RTC flag --- src/adc.c | 2 ++ src/adc.h | 1 + src/rtc.c | 9 +++++++++ src/rtc.h | 2 ++ 4 files changed, 14 insertions(+) diff --git a/src/adc.c b/src/adc.c index cbc1351..d9cf8a9 100644 --- a/src/adc.c +++ b/src/adc.c @@ -209,6 +209,8 @@ uint8_t adc_poll(uint8_t flags) if (r) return r; if (flags) { + if (flags & ADC_RTC && !rtc_cnt_tick()) + return 1; #ifdef HAVE_nFETs if (flags & ADC_PWM) pwm_step(config.pwm_max); diff --git a/src/adc.h b/src/adc.h index 3bd5980..7450821 100644 --- a/src/adc.h +++ b/src/adc.h @@ -41,4 +41,5 @@ enum adc_flags { ADC_16 = 0x10, ADC_32 = 0x20, ADC_64 = 0x40, + ADC_RTC = 0x80, }; diff --git a/src/rtc.c b/src/rtc.c index 00cd9d1..0d04c75 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -14,6 +14,15 @@ volatile uint16_t clockh; volatile uint8_t pit_tick; volatile uint8_t rtc_tick; +uint8_t rtc_cnt_tick() +{ + cli(); + uint8_t r = rtc_tick; + rtc_tick = 0; + sei(); + return r; +} + struct_ioconf(rtc_config) = { conf_prefix(RTC), conf_iow(RTC.CMP, 3600), diff --git a/src/rtc.h b/src/rtc.h index 28ef080..44dba48 100644 --- a/src/rtc.h +++ b/src/rtc.h @@ -10,3 +10,5 @@ volatile extern uint16_t clockh; volatile extern uint8_t pit_tick; volatile extern uint8_t rtc_tick; uint32_t time(); + +uint8_t rtc_cnt_tick(); From 899798defa43163e9ff9ada8d4aa45541bcb03df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Mon, 12 Jan 2026 20:16:48 +0100 Subject: [PATCH 21/33] flash_find_free() --- src/config.c | 2 ++ src/config.h | 2 ++ src/dose.c | 21 ++++++++++++++------- src/flash.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++---- src/flash.h | 1 + src/pipe.c | 8 ++++---- 6 files changed, 72 insertions(+), 15 deletions(-) diff --git a/src/config.c b/src/config.c index b04e0f5..740907d 100644 --- a/src/config.c +++ b/src/config.c @@ -20,6 +20,8 @@ const struct config config = { [0] = 0xd1 | FM_READ>>8, // Buffer 1 Read (Low-Frequency) [1] = 0xd3 | FM_READ>>8, // Buffer 2 Read (Low-Frequency) }, + .page_start = 0x0800, + .page_end = 0x1000, #ifdef HAVE_nFETs .pwm_min = 0x0000, .pwm_max = 0xffff, diff --git a/src/config.h b/src/config.h index 3aa5146..155a483 100644 --- a/src/config.h +++ b/src/config.h @@ -17,6 +17,8 @@ struct config { uint16_t write_buffer; uint16_t read_array; uint16_t read_buffer[2]; + uint16_t page_start; + uint16_t page_end; #ifdef HAVE_nFETs uint16_t pwm_min; uint16_t pwm_max; diff --git a/src/dose.c b/src/dose.c index 0a87d5b..5d579af 100644 --- a/src/dose.c +++ b/src/dose.c @@ -26,10 +26,15 @@ section_status(main) struct magic magic; -const struct pipe_config cron_job[1] = +struct pipe_config cron_job[1] = { [0] = { .pipe = { + .source = pipe_adc, + .dest = pipe_cmd, + .status = PS_OUT | PS_BCH, + .valid = 0, + .adc = ADC_64 | ADC_PWM | ADC_RTC, }, }, @@ -51,18 +56,20 @@ int main() magic.reset_source = RSTCTRL.RSTFR; RSTCTRL.RSTFR = magic.reset_source; - send_str("\nV Turbo Dose V0.9"); + send_str("\nV Turbo Dose V0.0"); send_hex_byte_eol(magic.reset_source); + cron_job[0].page = flash_find_free(); + cron_job[0].npages = config.page_end - cron_job[0].page; + if (config.cron & 1) + pipe_config(cron_job); + while (1) { sei(); sleep_cpu(); command(); pipe_poll(); - if (rtc_tick) { - rtc_tick = 0; - if (config.cron) - pipe_config(cron_job); - } + if (config.cron & 2 && rtc_cnt_tick()) + pipe_config(cron_job); } } diff --git a/src/flash.c b/src/flash.c index 1bfb58f..c2958e6 100644 --- a/src/flash.c +++ b/src/flash.c @@ -124,6 +124,12 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) case FM_PAD2: pads += 1; case FM_PAD1: pads += 1; } + if (!(mode & FM_START)) { + spi.zsize = pads + size; + spi.zero = what; + spi_start_cmd(csize, flash_cmd_buffer); + return 0; + } if (size >= 128) { // for read of the security register pads += size-64; @@ -136,8 +142,6 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) b = cmd_buffer + (what-96); else if (size <= 2) b = flash_status_bytes; - else - return what; switch (mode & FM_START) { case FM_WRITE: spi_start_write(csize, flash_cmd_buffer, size, b); @@ -155,7 +159,6 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) struct flash_cmd { uint16_t mode, what, page, byte; - uint8_t buffer[8]; }; uint8_t flash_submit_command(uint8_t *cmd) @@ -275,7 +278,7 @@ uint8_t flash_poll(uint8_t rr) // request status bytes for pending Write or Error r |= FS_StBsy; fs.status = r; - flash_cmd_na(0xd7, 0xff02); + flash_cmd_na(0xd7 | FM_READ, 0xf002); return r; } } @@ -316,3 +319,45 @@ uint8_t flash_start_stream(uint16_t page, uint16_t npages, uint8_t flags) flash_status_bytes[0] = 0xff; return flash_poll(0); } + +static inline +uint8_t flash_memset_buffer2() +{ + for (uint16_t i=0; i<528; i += 176) { + uint8_t r = flash_cmd((uint16_t)config.flash_page_size << 8 | 0xff87, 176, 0, i); + if (r) + return r; + while (spi_busy_p()) ; + } + return 0; +} + +static inline +uint8_t flash_compare_buffer2(uint16_t p) +{ + uint8_t r; + r = flash_cmd((uint16_t)config.flash_page_size << 8 | 0x61, 0, p, 0); + if (r) + return r; + while (spi_busy_p()) ; + r = flash_cmd_na(0xd7 | FM_WAIT, 0xf002); + if (r) + return r; + while (spi_busy_p()) ; + return (flash_status_bytes[0] | flash_status_bytes[1]) & 0x40; +} + +uint16_t flash_find_free() +{ + flash_memset_buffer2(); + uint16_t a = config.page_start; + uint16_t e = config.page_end; + while (e > a) { + uint16_t p = (a+e)>>1; + if (flash_compare_buffer2(p)) + a = p; + else + e = p; + } + return a; +} diff --git a/src/flash.h b/src/flash.h index 79912cf..8ce5e61 100644 --- a/src/flash.h +++ b/src/flash.h @@ -29,6 +29,7 @@ extern uint8_t flash_buffer[FB_SIZE]; uint8_t flash_submit_command(uint8_t *cmd); uint8_t flash_start_stream(uint16_t page, uint16_t npages, uint8_t flags); uint8_t flash_poll(uint8_t rr); +uint16_t flash_find_free(); extern struct flash_stream { diff --git a/src/pipe.c b/src/pipe.c index e5a43a2..7d1639e 100644 --- a/src/pipe.c +++ b/src/pipe.c @@ -28,19 +28,19 @@ uint8_t pipe_poll() if (pipe.dest & pipe_flash && !(fl & FS_Ready)) // flash did not finish successfully goto done; + if (pipe.source & pipe_adc && !adc_poll(pipe.adc)) + goto done; + // fpga is OUT when the spi is ready. // We are done with this buffer pipe.valid = 0; if (pipe.source & pipe_flash) flash_poll(1); - else if (pipe.source & pipe_adc) - adc_poll(pipe.adc); #ifdef HAVE_FPGA else if (pipe.source & pipe_fpga) fpga_start(0); #endif - r |=~ PS_OUT; - r &= ~4; + r &=~ (PS_OUT|4); r++; goto done; } From 0fa9cdbc143e9ecbe7c7d8704e8edbcee8660255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Fri, 16 Jan 2026 19:12:13 +0100 Subject: [PATCH 22/33] temporarily disable most of main() --- src/dose.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/dose.c b/src/dose.c index 5d579af..a49b1be 100644 --- a/src/dose.c +++ b/src/dose.c @@ -59,17 +59,17 @@ int main() send_str("\nV Turbo Dose V0.0"); send_hex_byte_eol(magic.reset_source); - cron_job[0].page = flash_find_free(); - cron_job[0].npages = config.page_end - cron_job[0].page; - if (config.cron & 1) - pipe_config(cron_job); +// cron_job[0].page = flash_find_free(); +// cron_job[0].npages = config.page_end - cron_job[0].page; +// if (config.cron & 1) +// pipe_config(cron_job); while (1) { sei(); sleep_cpu(); command(); - pipe_poll(); - if (config.cron & 2 && rtc_cnt_tick()) - pipe_config(cron_job); +// pipe_poll(); +// if (config.cron & 2 && rtc_cnt_tick()) +// pipe_config(cron_job); } } From d1e6a031abb5e3881923e125ef20bb8c8360149a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Thu, 29 Jan 2026 11:26:33 +0100 Subject: [PATCH 23/33] divmod85 implementation fixed and tested --- src/base85.c | 8 +-- src/base85_test.c | 132 +++++++++++++++++++++++++++++++++++++ src/base85a.S | 165 +++++++++++++++++++++++++++------------------- 3 files changed, 232 insertions(+), 73 deletions(-) create mode 100644 src/base85_test.c diff --git a/src/base85.c b/src/base85.c index d33b2b0..e92e478 100644 --- a/src/base85.c +++ b/src/base85.c @@ -12,10 +12,10 @@ int base85_encode(uint32_t u, uint8_t *s) { s += 5; *s = 0; - u = divmod85(u, s); - u = divmod85(u, s); - u = divmod85(u, s); - u = divmod85(u, s); + u = divmod85(u, --s); + u = divmod85(u, --s); + u = divmod85(u, --s); + u = divmod85(u, --s); *--s = (u>>24) + 33; return 5; } diff --git a/src/base85_test.c b/src/base85_test.c new file mode 100644 index 0000000..b534da2 --- /dev/null +++ b/src/base85_test.c @@ -0,0 +1,132 @@ + +#include +#include + +uint8_t m; +uint64_t f; + +static inline +uint32_t divmod85(uint32_t u) +{ + uint64_t uu = u; + uu += uu << 1; + uu += 1; + // f = (uu << 16) + (uu << 8) + uu + (uu >> 8) + (uu >> 16) + (uu >> 24); + f = (uu << 16) + (uu << 8) + uu + (uu >> 8) + (uu >> 16) + (uu >> 24) + (uu>>32); + f >>= 16; + m = ((f & 0xff) * 85 + 0x80) >> 8; + return f >> 8; +} + +int d = 0; + +typedef uint8_t r; +uint32_t divmod85avr(uint32_t u) +{ + +#define D(_m) if(d) printf("%-8s c=%x r0=%02x r1=%02x r18=%02x r19=%02x r20=%02x r21=%02x " \ + "r22=%02x r23=%02x r24=%02x r25=%02x r30=%02x r31=%02x\n", \ + _m, c, r0, r1, r18, r19, r20, r21, r23, r23, r24, r25, r30, r31) + +#define ADD(_x, _y) { _c = (_x + _y) >>8; _x += _y; c = _c & 1; D("ADD "#_x);} +#define ADC(_x, _y) { _c = (_x + _y + c) >>8; _x += _y + c; c = _c & 1; D("ADC "#_x);} +#define SUB(_x, _y) { _c = (_x - _y) >>8; _x -= _y; c = _c & 1; D("SUB "#_x);} +#define SBC(_x, _y) { _c = (_x - _y - c) >>8; _x -= _y + c; c = _c & 1; D("SBC "#_x);} +#define LSL(_x) { c = _x >> 7; _x <<= 1; D("LSL "#_x);} +#define ROL(_x) { _c = _x >> 7; _x <<= 1; _x |= c; c = _c; D("ROL "#_x);} +#define CLR(_x) { _x = 0; D("CLR "#_x);} +#define MOV(_x, _y) { _x = _y; D("MOV "#_x);} +#define MOVW(_x, _xh, _y, _yh) { _x = _y; _xh = _yh; D("MOVW "#_x);} +#define SEC {c=1; D("SEC");} +#define LDI(_x, _n) { _x = _n; D("LDI "#_x);} +#define MUL(_x, _y) { r0 = _x * _y; r1 = (_x * _y) >> 8; D("MUL "#_x);} + + r c, _c, r0, r18, r19, r20, r21, r30, r31; + r r1 = 0; + r r22 = u>>24; + r r23 = u>>16; + r r24 = u>>8; + r r25 = u; + + MOVW(r18,r19, r22,r23); + MOVW(r20,r21, r24,r25); + LSL(r21); + ROL(r20); + ROL(r19); + ROL(r18); + CLR(r0); + ROL(r0); + SEC; + ADC(r21, r25); + ADC(r20, r24); + ADC(r19, r23); + ADC(r18, r22); + ADC(r0, r1); + + MOV(r30, r21); + ADD(r30, r20); + CLR(r31); + ROL(r31); + ADD(r30, r19); + ADC(r31, r1); + ADD(r30, r18); + ADC(r31, r1); + ADD(r30, r0); + ADC(r31, r1); + + MOV(r22, r31); + ADD(r22, r30); + MOV(r18, r31); + ADC(r18, r30); + MOV(r25, r31); + ADC(r25, r1); + + SUB(r30, r21); + SBC(r31, r1); + ADD(r25, r30); + MOV(r24, r31); + ADC(r24, r1); + + SUB(r30, r20); + SBC(r31, r1); + ADD(r24, r30); + MOV(r23, r31); + ADC(r23, r1); + + SUB(r30, r19); + SBC(r31, r1); + ADD(r23, r30); + MOV(r22, r31); + ADC(r22, r0); + + LDI(r19, 85); + MUL(r18, r19); + LSL(r0); + LDI(r19, 0) + ADC(r1, r19); + m = r1; + CLR(r1); + return (r22<<24) | (r23<<16) | (r24<<8) | r25; +} + +int main() +{ + uint32_t u = 0; + int did_d = 0; + do { + if (!(u & 0xffff)) + fprintf(stderr, "%08x\r", u); + uint32_t nn = u / 85; + uint8_t mm = u % 85; + uint32_t n = divmod85avr(u); + if (nn != n || mm != m) { + printf("%08x = %08x × 85 + %02x : %08x %02x : %014lx\n", + u, nn, mm, n, m, f); + if (!did_d) { + did_d = d = 1; + divmod85avr(u); + d = 0; + } + } + } while (++u); +} diff --git a/src/base85a.S b/src/base85a.S index e6ef42f..b92119c 100644 --- a/src/base85a.S +++ b/src/base85a.S @@ -1,72 +1,97 @@ -; uint32_t divmod85(uint32_t u, uint8_t *m) - ; r26/r27 = m - ; r25 = A LSB, big endian - ; r24 = B - ; r23 = C - ; r22 = D MSB - ; r1 = undef - #ifdef BASE85C +;uint32_t divmod85(uint32_t u) +;{ +; uint64_t uu = u; +; f = (uu << 16) + (uu << 8) + uu + (uu >> 8) + (uu >> 16) + (uu >> 24); +; f += 0x0100; +; f &= 0xffffffffffff00LL; +; f += f << 1; +; m = (((f >> 16) & 0xff) * 85 + 0x80) >> 8; +; return f >> 24; +;} +; +; E,A,B,C,D = 3 × (r25,r24,r23,r22 big endian) +; 3*(A+B+C+D+E) = r30, r31 +; +; E D C B A +; E D C B A +; E D C B A +; E D C B +; E D C +; E D +; E +; ============= +; u u u u r - + +#ifdef BASE85C .global divmod85 divmod85: movw r26, r20 - # endif - - ;; ! C-ABI: gobbles r1, m=X -_divmod85: ; r25,r24,r23,r22 = A,B,C,D - mov r18, r25 - add r18, r24 - clr r21 - rol r21 ; r18,r21 = A+B - add r23, r18 - clr r31 - adc r31, r21 ; r23,r31 = A+B+C - add r21, r23 - clr r18 - adc r18, r31 ; r21,r18 = A+B>>8 + A+B+C - add r23, r22 - clr r20 - adc r31, r20 ; r23,r31 = A+B+C+D - add r18, r23 - adc r21, r31 ; r18,r21 = A+B>>16 + A+B+C>>8 + A+B+C+D - sub r23, r25 - sbc r31, r20 ; r23,r31 = B+C+D - add r21, r23 - adc r20, r31 ; r18,r21,r20 = … + B+C+D<<8 - sub r23, r24 - clr r30 - sbc r31, r30 ; r23,r31 = C+D - add r20, r23 - adc r31, r22 - rol r30 ; r18,r21,r20,r31,r30 = … + C+D<<16 + D<<24 - mov r19, r18 - movw r22, r20 - movw r24, r30 - lsl r19 - rol r21 +#endif + ;; ! C-ABI: m=X +_divmod85: ; r25,r24,r23,r22 = A,B,C,D + movw r18, r22 + movw r20, r24 + lsl r21 rol r20 + rol r19 + rol r18 + clr r0 + rol r0 + sec + adc r21, r25 + adc r20, r24 + adc r19, r23 + adc r18, r22 + adc r0, r1 ; r21,r20,r19,r18,r0 = 3u + 1 + + mov r30, r21 + add r30, r20 + clr r31 rol r31 - rol r30 - add r18, r19 - adc r25, r21 - adc r24, r20 - adc r23, r31 - adc r22, r30 + add r30, r19 + adc r31, r1 + add r30, r18 + adc r31, r1 + add r30, r0 + adc r31, r1 ; r30,r31 = A+B+C+D+E + + mov r22, r31 ; + add r22, r30 ; just for the carry bit + mov r18, r31 + adc r18, r30 ; r18 = r + mov r25, r31 + adc r25, r1 + + sub r30, r21 + sbc r31, r1 ; r30,r31 = B+C+D+E + add r25, r30 + mov r24, r31 + adc r24, r1 + + sub r30, r20 + sbc r31, r1 ; r30,r31 = C+D+E + add r24, r30 + mov r23, r31 + adc r23, r1 + + sub r30, r19 + sbc r31, r1 ; r30,r31 = D+E + add r23, r30 + mov r22, r31 + adc r22, r0 + ldi r19, 85 mul r18, r19 lsl r0 - ldi r18, 33 - adc r1, r18 - # ifdef BASE85C - st X, r1 - clr r1 - # else + ldi r19, '!' + adc r1, r19 st -X, r1 - # endif + clr r1 ret - - #ifndef BASE85C + +#ifndef BASE85C .global base85_encode base85_encode: movw r26, r20 @@ -76,20 +101,20 @@ base85_encode: rcall _divmod85 rcall _divmod85 rcall _divmod85 - subi r25, -33 - st X, r25 - ldi r24, 5 - clr r1 + subi r25, -'!' + st -X, r25 ret - # endif +#endif ; uint32_t mul85(uint32_t u, uint8_t m); - #ifdef BASE85C +#ifdef BASE85C .global mul85 mul85: - # endif +#endif ;; TODO for SPACE: inline this + + ;; big endian r22/r23/r24/r25 *= 85; … += r20 _mul85: ldi r21, 85 mul r25, r21 @@ -106,12 +131,12 @@ _mul85: mov r25, r18 mov r23, r30 mov r22, r31 - # ifdef BASE85C +#ifdef BASE85C clr r1 - # endif +#endif ret - #ifndef BASE85C +#ifndef BASE85C .global base85_decode base85_decode: @@ -125,7 +150,9 @@ base85_decode: clr r22 ldi r17, 5 1: - ld r20, Y+ + ld r20, X+ + subi r20, '!' + brcs 2f cpi r20, 85 brcc 2f rcall _mul85 @@ -145,4 +172,4 @@ base85_decode: clr r1 ret - # endif +#endif From 302b6bb8d7ac649186ee3631d57e777220905277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Tue, 3 Feb 2026 16:00:14 +0100 Subject: [PATCH 24/33] hallo: early debaug code, about to be removed --- src/hallo.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/hallo.c diff --git a/src/hallo.c b/src/hallo.c new file mode 100644 index 0000000..7e703fc --- /dev/null +++ b/src/hallo.c @@ -0,0 +1,150 @@ + // +// dose.c +// + +// !!! int = int8_t + +#include +#include + +#include +#include + +#include "config.h" +#include "uart.h" +#include "pwm.h" + +//////////////////////////////////////////////////////////////////////////////// +// +// main() + +section_status(main) struct magic magic; + +__attribute__((noinline)) +void clk10(void) +{ +#define NOP "\tnop\n" + VPORTB.OUT &= 0xfe; + __asm__ volatile(NOP NOP NOP NOP NOP NOP NOP NOP NOP); + VPORTB.OUT |= 1; +} + +__attribute__((section(".eeprom"))) const uint16_t eemagic = 0x7a10; + +void printc(uint8_t c) +{ + while (!(USART0.STATUS & USART_DREIF_bm)); + USART0.TXDATAL = c; +} +void print(char *s) +{ + while (*s) + printc(*s++); +} +void printx(uint8_t c) +{ + c &= 0xf; + c += '0'; + if (c > '9') + c += 'a' - '9' + 1; + printc(c); +} +void print_hex(uint8_t *s, uint8_t n) +{ + while (n--) { + printc(' '); + printx(*s>>4); + printx(*s++); + } +} + +void parse_commandx(const uint8_t *s, uint8_t n) { + send_char('%'); + send_hex(s, n); + send_eol(); +} + +extern volatile uint8_t uart_rx_mes; + +int main() +{ + VPORTB.OUT = 0b00000101; + VPORTB.DIR = 0b00000101; + PORTB.PIN3CTRL = PORT_PULLUPEN_bm; + USART0.CTRLA = 0; + USART0.CTRLB = 0; + USART0.BAUD = 40000000/115200; + USART0.CTRLC = USART_CHSIZE_8BIT_gc; + USART0.CTRLB = USART_TXEN_bm | USART_RXEN_bm; + clk10(); + + while (CLKCTRL.MCLKCTRLB != config.cpu_clk) { + CCP = CCP_IOREG_gc; + CLKCTRL.MCLKCTRLB = config.cpu_clk; + } + + clk10(); + + sleep_enable(); + magic.magic = config.magic; + while (magic.magic != MAGIC || config.version != VERSION) + sleep_cpu(); + + VPORTB.IN = 1; + + static struct USART_struct u; + + u = USART0; + + VPORTB.IN = 1; + + print("\nUSART0 mm "); + print_hex((void*)&u, sizeof(u)); + print("\nVPORTS mm "); + print_hex((void*)0, 12); + print("\n.....\n"); + + VPORTB.IN = 1; + + apply_config(); + + PWM.CTRLA = 0; + + u = USART0; + +// VPORTA.DIR = 0b00000000; +// VPORTB.DIR = 0b00000101; + + VPORTB.IN = 1; + + print("\nUSART0 ac "); + print_hex((void*)&u, sizeof(u)); + print("\nVPORTS ac "); + print_hex((void*)0, 12); + print("\n.....\n"); + + VPORTB.IN = 1; + + magic.reset_source = RSTCTRL.RSTFR; + RSTCTRL.RSTFR = magic.reset_source; + send_str("\nV Turbo Hallo V0.0"); + send_hex_byte_eol(magic.reset_source); + + VPORTB.IN = 1; + + sei(); + send_str("B.OUT "); send_hex_byte_eol(PORTB.OUT); + send_str("CTRLA "); send_hex_byte_eol(u.CTRLA); + send_str("CTRLB "); send_hex_byte_eol(u.CTRLB); + send_str("CTRLB "); send_hex_byte_eol(u.CTRLC); + send_str("BAUDL "); send_hex_byte_eol(u.BAUD); + send_str("BAUDH "); send_hex_byte_eol(u.BAUD>>8); + + VPORTB.IN = 1; + + while (1) { + sei(); + sleep_cpu(); + command(); + } +} From 6fcdb271d31845e280f25de3a08e9129ab701bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Wed, 4 Feb 2026 21:09:07 +0100 Subject: [PATCH 25/33] update assy drawing --- gerber/turbo-bot.png | Bin 25793 -> 31610 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/gerber/turbo-bot.png b/gerber/turbo-bot.png index d63435101f36a8bddd25ec40787d7c6292cb79fb..e1245b1b96ed4e0b5e5894d412f4e0a9119c045d 100644 GIT binary patch literal 31610 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 literal 25793 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

77{cZ6(p?i%@ya{0OPRlP2quwNXE(3q8ai1!^ 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 B Date: Wed, 4 Feb 2026 21:19:21 +0100 Subject: [PATCH 26/33] uart, adc, pwm debugged hallo.c is a temporary slim version of dose.c. With python support code. The First nFET characteristic is recorded. --- .gitignore | 2 + src/Makefile | 15 +- src/adc.c | 35 ++-- src/base85.py | 25 +++ src/cmd.c | 34 ++-- src/config.h | 7 +- src/dose.py | 208 +++++++++++++++++++++++ src/hallo.c | 111 +------------ src/io.S | 1 + src/iotn424.py | 443 +++++++++++++++++++++++++++++++++++++++++++++++++ src/map.py | 33 ++++ src/prompt.py | 20 +++ src/rtc.c | 11 +- src/uart.c | 10 +- src/uart.h | 3 - src/uart.py | 115 +++++++++++++ src/uart_tx.S | 3 +- 17 files changed, 916 insertions(+), 160 deletions(-) create mode 100644 src/base85.py create mode 100755 src/dose.py create mode 100644 src/io.S create mode 100644 src/iotn424.py create mode 100644 src/map.py create mode 100644 src/prompt.py create mode 100755 src/uart.py diff --git a/.gitignore b/.gitignore index abf7b0f..9ffcb3d 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ src/data BCH-Codes/ *.odt *.userrow +*.m +src/data diff --git a/src/Makefile b/src/Makefile index a28ac24..6c621b1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,8 +6,15 @@ PATH:=/usr/local/bin:$(PATH) default: all all: $(PROJ).hex $(PROJ)_all -dose_all: dose.eeprom dose.userrow +hallo_all: hallo.eeprom +CFLAGS_hallo = -DHAVE_nFETs -DSEND_HEX -DHALLO +MCU_hallo = attiny424 +SN_hallo = 1 +C_FILES_hallo = config.c uart.c cmd.c base85.c rtc.c adc.c pwm.c +S_FILES_hallo = uart_tx.S base85a.S + +dose_all: dose.eeprom dose.userrow SN_dose = 1 MCU_dose = $(MCU_$(VAR)) MCU_nFETs = attiny424 @@ -48,6 +55,9 @@ OBJS = $(patsubst %.c, %.o, $(C_FILES)) $(patsubst %.S, %.o, $(S_FILES)) %.o: %.S $(CC) $(CFLAGS) -c $< +%.m: %.S + $(CC) $(CFLAGS) -E -dM $< > $@ + -include *.d LDFLAGS = -Teeprom.ld @@ -97,6 +107,7 @@ AVRDUDE_PORT = /dev/ttyUSB1 AD = $(AVRDUDE) -p $(pMCU-$(MCU)) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) sig_dose = 0x1e 0x92 0x2c +sig_hallo = 0x1e 0x92 0x2c id: $(PROJ).id %.id: @@ -132,3 +143,5 @@ eeprom.eeprom: %.eeprom.burn: %.eeprom $(AD) -U eeprom:v:$< || $(AD) -U eeprom:w:$< +%.userrow.burn: %.userrow + $(AD) -U userrow:v:$< || $(AD) -U userrow:w:$< diff --git a/src/adc.c b/src/adc.c index d9cf8a9..03e45b6 100644 --- a/src/adc.c +++ b/src/adc.c @@ -8,12 +8,18 @@ #include "pwm.h" #include "rtc.h" +#ifdef ADC_IMMEDIATE +# define ADC_TRIGGER ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc +#else +# define ADC_TRIGGER ADC_MODE_SERIES_SCALING_gc | ADC_START_EVENT_TRIGGER_gc +#endif + enum adc_conf_parameter { INP = ADC_VIA_ADC_gc, INN = ADC_VIA_ADC_gc, REF = 10 << ADC_TIMEBASE_gp, - MODE = ADC_MODE_SERIES_SCALING_gc | ADC_START_EVENT_TRIGGER_gc, - MODE_DIFF = ADC_MODE_BURST_SCALING_gc | ADC_START_IMMEDIATE_gc | ADC_DIFF_bm, + MODE = ADC_TRIGGER, + MODE_DIFF = ADC_TRIGGER | ADC_DIFF_bm, }; __attribute__((section(".eeprom1"))) @@ -81,7 +87,7 @@ struct_ioconf(adc_config) = { conf_prefix(ADC), conf_io(ADC.CTRLA, ADC_ENABLE_bm), conf_io(ADC.CTRLB, ADC_PRESC_DIV10_gc), - conf_io(ADC.CTRLE, 250 << ADC_SAMPDUR_gp), + conf_io(ADC.CTRLE, 250), conf_io(ADC.CTRLF, ADC_SAMPNUM_ACC256_gc | ADC_LEFTADJ_bm), conf_io(ADC.INTCTRL, ADC_RESRDY_bm), conf_prefix(EVSYS), @@ -91,8 +97,6 @@ struct_ioconf(adc_config) = { void start_adc() { - if (!adc_conf->mode) - return; ADC.COMMAND = 0; adc_current = 0; start_conversion(adc_conf); @@ -114,7 +118,7 @@ ISR(ADC0_RESRDY_vect) } } stop: - ADC.CTRLA = 0; + ADC.COMMAND = 0; adc_current = N_ADC; } @@ -136,7 +140,7 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "push r31" "\n\t" "lds r24, adc_current" "\n\t" "cpi r24, %[NADC]" "\n\t" - "brcc 3f" "\n\t" + "brcc 2f" "\n\t" "mov r30, r24" "\n\t" "ldi r31, 0" "\n\t" "lsl r30" "\n\t" @@ -148,7 +152,9 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "std Z+1, r25" "\n" "1:" "\n\t" "subi r24, -1" "\n\t" - "cpi r24, %[NADC]" "\n\t" + "cpi r24, %[NADC]" "\n" + "2:" "\n\t" + "clr r25" "\n\t" "brcc 3f" "\n\t" "mov r30, r24" "\n\t" "ldi r31, 0" "\n\t" @@ -164,9 +170,9 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "sts %[MUXPOS], r25" "\n\t" "ld r25, Z" "\n\t" "tst r25" "\n\t" - "breq 1b" "\n\t" - "sts %[COMMAND], r25" "\n" - "2:" "\n\t" + "breq 1b" "\n" + "3:" "\n\t" + "sts %[COMMAND], r25" "\n\t" "sts adc_current, r24" "\n\t" "pop r31" "\n\t" "pop r30" "\n\t" @@ -175,16 +181,9 @@ ISR(ADC0_RESRDY_vect, ISR_NAKED) "out __SREG__, r24" "\n\t" "pop r24" "\n\t" "reti" "\n" - "3:" "\n\t" - "clr r24" "\n\t" - "sts %[COMMAND], r24" "\n\t" - "sts %[CTRLA], r24" "\n\t" - "ldi r24, %[NADC]" "\n\t" - "rjmp 2b" "\n" : : [NADC] "n" (N_ADC), [RESULT] "n" (&ADC.RESULT), - [CTRLA] "n" (&ADC.CTRLA), [CTRLC] "n" (&ADC.CTRLC), [MUXPOS] "n" (&ADC.MUXPOS), [MUXNEG] "n" (&ADC.MUXNEG), diff --git a/src/base85.py b/src/base85.py new file mode 100644 index 0000000..43b4339 --- /dev/null +++ b/src/base85.py @@ -0,0 +1,25 @@ + +import struct + +def base85_encode(b): + uu = list(struct.unpack(f">{len(b)//4}I", b)) + uu.reverse() + r = [] + for u in uu: + for i in range(5): + r[0:0] = [u % 85 + 33] + u //= 85 + return bytes(r) + +def base85_decode(s): + uu = []; + for j in range(0,len(s),5): + u = 0 + for i in range(5): + m = ord(s[j+i:j+i+1]) - 33; + if m < 0 or m >= 85: + raise ValueError(f"invalid base85 char {s}[{i}]") + u *= 85 + u += m + uu.append(u) + return struct.pack(f">{len(uu)}I", *uu) diff --git a/src/cmd.c b/src/cmd.c index e3be56e..4834b7c 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -58,14 +58,13 @@ void base85_send_buffer(const uint8_t *buf) "rjmp _send_str26" "\n" ); } - #endif static inline const uint8_t *base85_fill_buffer(const uint8_t *s) { base85_error = 0; - for (int i=0; !base85_error && i= N_ADC) { - if (cmd_flag('<')) - base85_send_buffer((void*)adc_readings); - if (cmd_flag('!')) - start_adc(); + if (cmd_flag('!')) + start_adc(); + if (cmd_flag('<')) { + bptr = (void*)adc_readings; + goto send_buffer; } break; +#ifndef HALLO case 'B': if (cmd_flag('@')) pipe.valid = 0; @@ -246,11 +248,13 @@ void parse_command(const uint8_t *s, uint8_t n) fpga_cmd((void*)cmd_buffer); goto send_buffer; #endif +#endif // HALLO case 'M': if (!have_b) goto error; r = poke((void*)cmd_buffer, cmd_flag('!')); send_buffer: + send_char(' '); base85_send_buffer(bptr); break; default: diff --git a/src/config.h b/src/config.h index 155a483..b4f3369 100644 --- a/src/config.h +++ b/src/config.h @@ -13,7 +13,6 @@ struct config { uint8_t cron; uint8_t flash_page_size; uint16_t burn_page; - uint16_t erase_page; uint16_t write_buffer; uint16_t read_array; uint16_t read_buffer[2]; @@ -28,7 +27,7 @@ struct config { enum magic_flags { #ifdef HAVE_nFETs MAGIC = 0xD0, - VERSION = 0x01, + VERSION = 0x00, #endif #ifdef HAVE_FPGA MAGIC = 0xC5, @@ -131,9 +130,9 @@ void apply_config() "ldi r30, lo8(ee9_start)" "\n\t" "ldi r31, hi8(ee9_start)" "\n\t" "ldi r24, lo8(ee9_size)" "\n\t" - "clr r26" "\n" + "clr r25" "\n" "1:" "\n\t" - "mov r27, r26" "\n\t" + "mov r27, r25" "\n\t" "subi r24, 2" "\n\t" "brcs 3f" "\n" "2:" "\n\t" diff --git a/src/dose.py b/src/dose.py new file mode 100755 index 0000000..b005b6b --- /dev/null +++ b/src/dose.py @@ -0,0 +1,208 @@ +#! /usr/bin/ipython3 --profile=turbo_dose + +import sys, time, getopt, fileinput, struct +import uart +from base85 import base85_encode, base85_decode +from map import memmap +from iotn424 import SFR + +options, files = getopt.gnu_getopt(sys.argv[1:], "F:o:M:", ["debug", "tty=", "output=", "map="]) + +tty = "/dev/ttyUSB1" +baud = 115200 +out = None +debug = None +map_fn = "hallo.map" + +def Debug(e, *a): + if debug: + import traceback + sys.stdout.flush() + print("xdebug", a, repr(e), file=sys.stderr) + traceback.print_exception(e, limit=-2, file=sys.stderr) + +for o,v in options: + + if o == "--debug": + debug = True + + if o in "-F --tty": + tty = v + v = v.split(",", 1) + if v[1:]: + tty = v[0] + baud = int(v[1]) + do_clock = True + + if o in "--output": + if out: + raise ValueError("cannot have multiple --outputs") + if v=="-": + out = sys.stdout + elif v=="--": + out = sys.stderr + else: + out = open(v, "a") + + if o in "-M --map": + map_fn = v + +if not out: + out = sys.stdout + +if len(files)==1: + if "/dev/tty" in files[0]: + tty = files[0] + files = [] + +mmap = memmap(map_fn) + +class dose_cmd(uart.uart): + + def cmd(self, c, d=None, timeout=0.2): + if not isinstance(c, bytes): + c = c.encode() + if d: + c += b" " + base85_encode(d) + self.flush() + self.ucmd(c) + r = self.resp(timeout) + while r and (r[0] != b'#'[0] or r[1] != c[0]): + r = self.resp(timeout) + d = None + if not r: + return r, d + r = r.split() + e = int(r[-1], 16) + if len(r)==3: + d = base85_decode(r[1]) + if self.verbose: + print(f"{r[0]}[{r[2]}] {"".join([f"{b:02x}" for b in d])}", file=sys.stderr) + self.last_cmd = c[0:1] + return r[0], e, d + + def poke(self, a, d, s=None, ccp=0): + return self.peek(a, d, s, ccp) + + def peek(self, a=None, d=None, s=None, ccp=0): + name = None + if a in SFR: + name = a + a, ss = SFR[a] + if s is None: + s = ss + if a in mmap: + a, ss = mmap[a] + if ss and s is None: + s = ss + if s is None and isinstance(d, int): + s = d + d = None + FF = {1: "B", 2: "H", 4:"I"} + if a is None: + cc, nn, dd = self.cmd(b"M=") + else: + if d is None: + c = b"M" + d = b'' + if s is None: + s = 12 + else: + c = b'M!' + if isinstance(d, int) and s in FF: + d = struct.pack(f"<{FF[s]}", d) + else: + d = bytes(d) + if s is None: + s = len(d) + d = struct.pack(" '9') - c += 'a' - '9' + 1; - printc(c); -} -void print_hex(uint8_t *s, uint8_t n) -{ - while (n--) { - printc(' '); - printx(*s>>4); - printx(*s++); - } -} - -void parse_commandx(const uint8_t *s, uint8_t n) { - send_char('%'); - send_hex(s, n); - send_eol(); -} - -extern volatile uint8_t uart_rx_mes; - int main() { - VPORTB.OUT = 0b00000101; - VPORTB.DIR = 0b00000101; - PORTB.PIN3CTRL = PORT_PULLUPEN_bm; - USART0.CTRLA = 0; - USART0.CTRLB = 0; - USART0.BAUD = 40000000/115200; - USART0.CTRLC = USART_CHSIZE_8BIT_gc; - USART0.CTRLB = USART_TXEN_bm | USART_RXEN_bm; - clk10(); - while (CLKCTRL.MCLKCTRLB != config.cpu_clk) { CCP = CCP_IOREG_gc; CLKCTRL.MCLKCTRLB = config.cpu_clk; } - - clk10(); sleep_enable(); magic.magic = config.magic; while (magic.magic != MAGIC || config.version != VERSION) sleep_cpu(); - VPORTB.IN = 1; - - static struct USART_struct u; - - u = USART0; - - VPORTB.IN = 1; - - print("\nUSART0 mm "); - print_hex((void*)&u, sizeof(u)); - print("\nVPORTS mm "); - print_hex((void*)0, 12); - print("\n.....\n"); - - VPORTB.IN = 1; - apply_config(); - - PWM.CTRLA = 0; - - u = USART0; - -// VPORTA.DIR = 0b00000000; -// VPORTB.DIR = 0b00000101; - - VPORTB.IN = 1; - - print("\nUSART0 ac "); - print_hex((void*)&u, sizeof(u)); - print("\nVPORTS ac "); - print_hex((void*)0, 12); - print("\n.....\n"); - - VPORTB.IN = 1; - magic.reset_source = RSTCTRL.RSTFR; + RSTCTRL.RSTFR = magic.reset_source; send_str("\nV Turbo Hallo V0.0"); send_hex_byte_eol(magic.reset_source); - VPORTB.IN = 1; - - sei(); - send_str("B.OUT "); send_hex_byte_eol(PORTB.OUT); - send_str("CTRLA "); send_hex_byte_eol(u.CTRLA); - send_str("CTRLB "); send_hex_byte_eol(u.CTRLB); - send_str("CTRLB "); send_hex_byte_eol(u.CTRLC); - send_str("BAUDL "); send_hex_byte_eol(u.BAUD); - send_str("BAUDH "); send_hex_byte_eol(u.BAUD>>8); - - VPORTB.IN = 1; - while (1) { sei(); sleep_cpu(); diff --git a/src/io.S b/src/io.S new file mode 100644 index 0000000..cf51b78 --- /dev/null +++ b/src/io.S @@ -0,0 +1 @@ +#include diff --git a/src/iotn424.py b/src/iotn424.py new file mode 100644 index 0000000..f62cb93 --- /dev/null +++ b/src/iotn424.py @@ -0,0 +1,443 @@ + +SFR = { + "USART0_TXDATAL": (0x0802, 1), + "PORTB_PIN0CTRL": (0x0430, 1), + "ADC0_WINHTH": (0x061F, 1), + "ADC0_WINHTL": (0x061E, 1), + "RTC_PITCTRLA": (0x0150, 1), + "USERROW_USERROW13": (0x130D, 1), + "USART0_RXDATAH": (0x0801, 1), + "USART0_RXDATAL": (0x0800, 1), + "USERROW_USERROW17": (0x1311, 1), + "TCA0_SPLIT_LCMP0": (0x0A28, 1), + "PORTB_DIRCLR": (0x0422, 1), + "TCA0_SINGLE_CMP1H": (0x0A2B, 1), + "USERROW_USERROW19": (0x1313, 1), + "PORTB_OUTSET": (0x0425, 1), + "USART0_BAUDH": (0x0809, 1), + "USART0_BAUDL": (0x0808, 1), + "TCA0_SPLIT_LCNT": (0x0A20, 1), + "TWI0_SCTRLB": (0x08AA, 1), + "PORTC_PORTCTRL": (0x044A, 1), + "PORTB_INTFLAGS": (0x0429, 1), + "CCL_LUT0CTRLA": (0x01C8, 1), + "CCL_LUT0CTRLB": (0x01C9, 1), + "CCL_LUT0CTRLC": (0x01CA, 1), + "TCA0_SPLIT_CTRLECLR": (0x0A04, 1), + "NVMCTRL_INTFLAGS": (0x1004, 1), + "CPUINT_CTRLA": (0x0110, 1), + "EVSYS_USERTCB1COUNT": (0x01B3, 1), + "VPORTA_OUT": (0x0001, 1), + "BOD_INTFLAGS": (0x008A, 1), + "ADC0_PGACTRL": (0x060B, 1), + "CLKCTRL_OSC20MCALIBA": (0x0071, 1), + "BOD_VLMCTRLA": (0x0088, 1), + "TCA0_SPLIT_LPER": (0x0A26, 1), + "USERROW_USERROW21": (0x1315, 1), + "USERROW_USERROW25": (0x1319, 1), + "PORTC_OUTSET": (0x0445, 1), + "USERROW_USERROW29": (0x131D, 1), + "EVSYS_USERTCB1CAPT": (0x01B2, 1), + "SLPCTRL_CTRLA": (0x0050, 1), + "ADC0_WINLTL": (0x061C, 1), + "TCA0_SPLIT_CTRLB": (0x0A01, 1), + "TCA0_SPLIT_CTRLD": (0x0A03, 1), + "TCA0_SINGLE_CMP0H": (0x0A29, 1), + "TCA0_SINGLE_CMP0L": (0x0A28, 1), + "PORTC_DIR": (0x0440, 1), + "TCA0_SINGLE_CMP1L": (0x0A2A, 1), + "ADC0_INTFLAGS": (0x0605, 1), + "USERROW_USERROW2": (0x1302, 1), + "USART1_DBGCTRL": (0x082B, 1), + "TWI0_MDATA": (0x08A8, 1), + "CCL_TRUTH0": (0x01CB, 1), + "PORTB_PIN3CTRL": (0x0433, 1), + "TCA0_SINGLE_CMP2H": (0x0A2D, 1), + "PORTA_PIN0CTRL": (0x0410, 1), + "TCA0_SINGLE_CMP2L": (0x0A2C, 1), + "CCL_LUT1CTRLA": (0x01CC, 1), + "CCL_LUT1CTRLC": (0x01CE, 1), + "SIGROW_SERNUM0": (0x1103, 1), + "SIGROW_SERNUM1": (0x1104, 1), + "SIGROW_SERNUM2": (0x1105, 1), + "SIGROW_SERNUM3": (0x1106, 1), + "SIGROW_SERNUM4": (0x1107, 1), + "SIGROW_SERNUM5": (0x1108, 1), + "SIGROW_SERNUM6": (0x1109, 1), + "SIGROW_SERNUM7": (0x110A, 1), + "SIGROW_SERNUM8": (0x110B, 1), + "SIGROW_SERNUM9": (0x110C, 1), + "TCA0_SINGLE_PERBUFH": (0x0A37, 1), + "TCA0_SINGLE_PERBUFL": (0x0A36, 1), + "USERROW_USERROW31": (0x131F, 1), + "TCB0_CTRLA": (0x0A80, 1), + "TCB0_CTRLB": (0x0A81, 1), + "CPUINT_LVL0PRI": (0x0112, 1), + "VPORTA_IN": (0x0002, 1), + "EVSYS_USERTCB0CAPT": (0x01B0, 1), + "PORTC_OUT": (0x0444, 1), + "RTC_PITINTCTRL": (0x0152, 1), + "PORTB_IN": (0x0428, 1), + "TCA0_SINGLE_CTRLB": (0x0A01, 1), + "ADC0_TEMP0": (0x0618, 1), + "PORTB_DIR": (0x0420, 1), + "ADC0_TEMP2": (0x061A, 1), + "GPIO0": (0x001C, 1), + "GPIO1": (0x001D, 1), + "GPIO3": (0x001F, 1), + "RTC_CNTH": (0x0149, 1), + "EVSYS_CHANNEL0": (0x0190, 1), + "EVSYS_CHANNEL1": (0x0191, 1), + "EVSYS_CHANNEL2": (0x0192, 1), + "EVSYS_CHANNEL3": (0x0193, 1), + "EVSYS_CHANNEL4": (0x0194, 1), + "EVSYS_CHANNEL5": (0x0195, 1), + "PORTC_DIRSET": (0x0441, 1), + "CCL_LUT3CTRLA": (0x01D4, 1), + "TWI0_SADDRMASK": (0x08AE, 1), + "TCA0_SINGLE_CTRLECLR": (0x0A04, 1), + "PORTA_DIRCLR": (0x0402, 1), + "PORTC_PIN2CTRL": (0x0452, 1), + "CCP": (0x0034, 1), + "CLKCTRL_OSC20MCALIBB": (0x0072, 1), + "USART0_CTRLA": (0x0805, 1), + "TWI0_SCTRLA": (0x08A9, 1), + "TCB1_CCMPL": (0x0A9C, 1), + "PORTC_IN": (0x0448, 1), + "SIGROW_DEVICEID2": (0x1102, 1), + "TCB1_INTCTRL": (0x0A95, 1), + "USART0_TXPLCTRL": (0x080D, 1), + "FUSE_WDTCFG": (0x1280, 1), + "CCL_LUT2CTRLB": (0x01D1, 1), + "CCL_LUT2CTRLC": (0x01D2, 1), + "PORTB_OUT": (0x0424, 1), + "PORTMUX_USARTROUTEA": (0x05E2, 1), + "CLKCTRL_OSC32KCTRLA": (0x0078, 1), + "TWI0_SDATA": (0x08AD, 1), + "PORTA_DIR": (0x0400, 1), + "PORTA_IN": (0x0408, 1), + "ADC0_DBGCTRL": (0x0607, 1), + "TCB1_CNTL": (0x0A9A, 1), + "PORTA_PIN1CTRL": (0x0411, 1), + "TCB0_TEMP": (0x0A89, 1), + "TCA0_SINGLE_CTRLA": (0x0A00, 1), + "TCA0_SINGLE_CTRLC": (0x0A02, 1), + "TCA0_SINGLE_CTRLD": (0x0A03, 1), + "ADC0_MUXPOS": (0x060C, 1), + "TCB1_INTFLAGS": (0x0A96, 1), + "EVSYS_USERADC0START": (0x01A8, 1), + "NVMCTRL_ADDRH": (0x1009, 1), + "NVMCTRL_ADDRL": (0x1008, 1), + "TWI0_DBGCTRL": (0x08A2, 1), + "RTC_PITDBGCTRL": (0x0155, 1), + "SIGROW_OSCCAL20M1": (0x111B, 1), + "VREF_CTRLA": (0x00A0, 1), + "TCA0_SPLIT_INTCTRL": (0x0A0A, 1), + "TCA0_SINGLE_CMP0BUFH": (0x0A39, 1), + "AC0_INTCTRL": (0x0686, 1), + "TCA0_SINGLE_CNTL": (0x0A20, 1), + "TCA0_SPLIT_HCMP0": (0x0A29, 1), + "TCA0_SPLIT_HCMP1": (0x0A2B, 1), + "TCA0_SPLIT_HCMP2": (0x0A2D, 1), + "TCA0_SINGLE_CMP2BUFH": (0x0A3D, 1), + "TCA0_SINGLE_CMP2BUFL": (0x0A3C, 1), + "USART1_TXPLCTRL": (0x082D, 1), + "PORTA_OUT": (0x0404, 1), + "CLKCTRL_MCLKSTATUS": (0x0063, 1), + "PORTC_PIN4CTRL": (0x0454, 1), + "PORTC_OUTCLR": (0x0446, 1), + "CCL_LUT3CTRLB": (0x01D5, 1), + "WDT_CTRLA": (0x0100, 1), + "SIGROW_DEVICEID0": (0x1100, 1), + "SIGROW_DEVICEID1": (0x1101, 1), + "TCB0_CNTL": (0x0A8A, 1), + "USERROW_USERROW1": (0x1301, 1), + "PORTMUX_CCLROUTEA": (0x05E1, 1), + "PORTC_PIN7CTRL": (0x0457, 1), + "ADC0_CTRLB": (0x0601, 1), + "ADC0_CTRLC": (0x0602, 1), + "ADC0_CTRLD": (0x0603, 1), + "ADC0_CTRLE": (0x0608, 1), + "ADC0_CTRLF": (0x0609, 1), + "RTC_INTCTRL": (0x0142, 1), + "RTC_PERL": (0x014A, 1), + "GPIO2": (0x001E, 1), + "PORTA_PIN7CTRL": (0x0417, 1), + "LOCKBIT_LOCKBIT": (0x128A, 1), + "SIGROW_OSCCAL20M0": (0x111A, 1), + "TCB1_TEMP": (0x0A99, 1), + "FUSE_SYSCFG1": (0x1286, 1), + "PORTB_DIRSET": (0x0421, 1), + "PORTC_OUTTGL": (0x0447, 1), + "ADC0_CTRLA": (0x0600, 1), + "TCA0_SPLIT_LCMP1": (0x0A2A, 1), + "TCA0_SPLIT_LCMP2": (0x0A2C, 1), + "TCA0_SINGLE_CMP1BUFH": (0x0A3B, 1), + "TCA0_SINGLE_CMP1BUFL": (0x0A3A, 1), + "USART1_TXDATAL": (0x0822, 1), + "ADC0_TEMP1": (0x0619, 1), + "TCA0_SPLIT_INTFLAGS": (0x0A0B, 1), + "PORTMUX_SPIROUTEA": (0x05E3, 1), + "TCA0_SPLIT_CTRLESET": (0x0A05, 1), + "TCA0_SINGLE_CTRLFSET": (0x0A07, 1), + "SPI0_INTCTRL": (0x08C2, 1), + "PORTC_PIN6CTRL": (0x0456, 1), + "NVMCTRL_STATUS": (0x1002, 1), + "CCL_TRUTH1": (0x01CF, 1), + "CCL_TRUTH2": (0x01D3, 1), + "CLKCTRL_MCLKLOCK": (0x0062, 1), + "SYSCFG_REVID": (0x0F01, 1), + "USERROW_USERROW10": (0x130A, 1), + "USERROW_USERROW11": (0x130B, 1), + "USERROW_USERROW12": (0x130C, 1), + "USERROW_USERROW14": (0x130E, 1), + "USERROW_USERROW15": (0x130F, 1), + "USERROW_USERROW16": (0x1310, 1), + "USERROW_USERROW18": (0x1312, 1), + "USART1_CTRLA": (0x0825, 1), + "USART1_CTRLB": (0x0826, 1), + "USART1_CTRLC": (0x0827, 1), + "USART1_CTRLD": (0x082A, 1), + "USERROW_USERROW20": (0x1314, 1), + "USERROW_USERROW22": (0x1316, 1), + "USERROW_USERROW23": (0x1317, 1), + "USERROW_USERROW24": (0x1318, 1), + "USERROW_USERROW26": (0x131A, 1), + "USERROW_USERROW27": (0x131B, 1), + "USERROW_USERROW28": (0x131C, 1), + "VPORTC_OUT": (0x0009, 1), + "CCL_LUT2CTRLA": (0x01D0, 1), + "USERROW_USERROW30": (0x131E, 1), + "TCA0_SINGLE_CMP0BUFL": (0x0A38, 1), + "PORTA_OUTSET": (0x0405, 1), + "FUSE_OSCCFG": (0x1282, 1), + "ADC0_STATUS": (0x0606, 1), + "CPU_SREG": (0x003F, 1), + "AC0_CTRLA": (0x0680, 1), + "TCA0_SINGLE_PERH": (0x0A27, 1), + "EVSYS_USEREVSYSEVOUTA": (0x01A9, 1), + "EVSYS_USEREVSYSEVOUTB": (0x01AA, 1), + "TCA0_SINGLE_PERL": (0x0A26, 1), + "TCA0_SPLIT_DBGCTRL": (0x0A0E, 1), + "PORTB_PIN7CTRL": (0x0437, 1), + "TCB0_INTCTRL": (0x0A85, 1), + "PORTC_PIN5CTRL": (0x0455, 1), + "AC0_STATUS": (0x0687, 1), + "CLKCTRL_OSC20MCTRLA": (0x0070, 1), + "TCB0_INTFLAGS": (0x0A86, 1), + "ADC0_SAMPLEL": (0x0614, 1), + "RTC_DBGCTRL": (0x0145, 1), + "CLKCTRL_MCLKCTRLA": (0x0060, 1), + "CLKCTRL_MCLKCTRLB": (0x0061, 1), + "USART1_BAUDH": (0x0829, 1), + "USART1_BAUDL": (0x0828, 1), + "VPORTB_IN": (0x0006, 1), + "GPIO_GPIOR0": (0x001C, 1), + "GPIO_GPIOR1": (0x001D, 1), + "GPIO_GPIOR2": (0x001E, 1), + "GPIO_GPIOR3": (0x001F, 1), + "BOD_INTCTRL": (0x0089, 1), + "CPU_SPH": (0x003E, 1), + "CPU_SPL": (0x003D, 1), + "SIGROW_TEMPSENSE0": (0x1120, 1), + "SIGROW_TEMPSENSE1": (0x1121, 1), + "CLKCTRL_XOSC32KCTRLA": (0x007C, 1), + "AC0_DACREF": (0x0684, 1), + "ADC0_SAMPLEH": (0x0615, 1), + "CRCSCAN_STATUS": (0x0122, 1), + "RTC_PERH": (0x014B, 1), + "TCA0_SINGLE_CTRLESET": (0x0A05, 1), + "TCA0_SINGLE_CTRLFCLR": (0x0A06, 1), + "PORTC_INTFLAGS": (0x0449, 1), + "PORTA_DIRSET": (0x0401, 1), + "PORTB_OUTTGL": (0x0427, 1), + "TCB0_STATUS": (0x0A87, 1), + "PORTB_PIN6CTRL": (0x0436, 1), + "TCA0_SINGLE_CNTH": (0x0A21, 1), + "USERROW_USERROW0": (0x1300, 1), + "USERROW_USERROW3": (0x1303, 1), + "USERROW_USERROW4": (0x1304, 1), + "USERROW_USERROW5": (0x1305, 1), + "USERROW_USERROW7": (0x1307, 1), + "USERROW_USERROW8": (0x1308, 1), + "USERROW_USERROW9": (0x1309, 1), + "TCB1_EVCTRL": (0x0A94, 1), + "TCB1_DBGCTRL": (0x0A98, 1), + "SIGROW_OSCCAL16M0": (0x1118, 1), + "SIGROW_OSCCAL16M1": (0x1119, 1), + "EVSYS_USERUSART1IRDA": (0x01AD, 1), + "RTC_CLKSEL": (0x0147, 1), + "TCA0_SINGLE_INTCTRL": (0x0A0A, 1), + "USART0_DBGCTRL": (0x080B, 1), + "TCA0_SPLIT_HCNT": (0x0A21, 1), + "WDT_STATUS": (0x0101, 1), + "PORTMUX_TCAROUTEA": (0x05E4, 1), + "USART1_STATUS": (0x0824, 1), + "GPIOR0": (0x001C, 1), + "GPIOR1": (0x001D, 1), + "GPIOR2": (0x001E, 1), + "GPIOR3": (0x001F, 1), + "TCA0_SPLIT_HPER": (0x0A27, 1), + "RSTCTRL_RSTFR": (0x0040, 1), + "CCL_INTFLAGS": (0x01C7, 1), + "PORTB_OUTCLR": (0x0426, 1), + "TWI0_SSTATUS": (0x08AB, 1), + "BOD_STATUS": (0x008B, 1), + "VPORTC_INTFLAGS": (0x000B, 1), + "PORTB_PIN5CTRL": (0x0435, 1), + "SPH": (0x003E, 1), + "SPL": (0x003D, 1), + "PORTC_PIN3CTRL": (0x0453, 1), + "TCB1_CTRLA": (0x0A90, 1), + "EVSYS_USERTCA0CNTA": (0x01AE, 1), + "EVSYS_USERTCA0CNTB": (0x01AF, 1), + "NVMCTRL_INTCTRL": (0x1003, 1), + "CRCSCAN_CTRLA": (0x0120, 1), + "PORTB_DIRTGL": (0x0423, 1), + "ADC0_MUXNEG": (0x060D, 1), + "NVMCTRL_CTRLA": (0x1000, 1), + "NVMCTRL_CTRLB": (0x1001, 1), + "USART1_EVCTRL": (0x082C, 1), + "PORTC_DIRTGL": (0x0443, 1), + "CCL_CTRLA": (0x01C0, 1), + "USART1_RXPLCTRL": (0x082E, 1), + "RTC_INTFLAGS": (0x0143, 1), + "FUSE_SYSCFG0": (0x1285, 1), + "AC0_MUXCTRLA": (0x0682, 1), + "TWI0_MSTATUS": (0x08A5, 1), + "SPI0_CTRLA": (0x08C0, 1), + "SPI0_CTRLB": (0x08C1, 1), + "TCB0_CNTH": (0x0A8B, 1), + "PORTB_PORTCTRL": (0x042A, 1), + "EVSYS_USERCCLLUT0A": (0x01A0, 1), + "EVSYS_SWEVENTA": (0x0180, 1), + "PORTA_PIN6CTRL": (0x0416, 1), + "EVSYS_USERCCLLUT0B": (0x01A1, 1), + "CCL_LUT1CTRLB": (0x01CD, 1), + "EVSYS_USERCCLLUT1A": (0x01A2, 1), + "EVSYS_USERCCLLUT1B": (0x01A3, 1), + "PORTB_PIN4CTRL": (0x0434, 1), + "EVSYS_USERCCLLUT2A": (0x01A4, 1), + "EVSYS_USERCCLLUT2B": (0x01A5, 1), + "EVSYS_USERCCLLUT3A": (0x01A6, 1), + "EVSYS_USERCCLLUT3B": (0x01A7, 1), + "RTC_PITSTATUS": (0x0151, 1), + "TCA0_SINGLE_INTFLAGS": (0x0A0B, 1), + "TWI0_MBAUD": (0x08A6, 1), + "TCB0_EVCTRL": (0x0A84, 1), + "TCB1_CTRLB": (0x0A91, 1), + "TCB0_CCMPH": (0x0A8D, 1), + "TCB0_CCMPL": (0x0A8C, 1), + "PORTA_OUTTGL": (0x0407, 1), + "USART1_TXDATAH": (0x0823, 1), + "TCA0_SINGLE_EVCTRL": (0x0A09, 1), + "TCA0_SINGLE_DBGCTRL": (0x0A0E, 1), + "BOD_CTRLA": (0x0080, 1), + "USART1_RXDATAH": (0x0821, 1), + "USART1_RXDATAL": (0x0820, 1), + "TWI0_CTRLA": (0x08A0, 1), + "VPORTB_OUT": (0x0005, 1), + "RTC_TEMP": (0x0144, 1), + "PORTB_PIN1CTRL": (0x0431, 1), + "VPORTB_INTFLAGS": (0x0007, 1), + "ADC0_RESULT0": (0x0610, 1), + "ADC0_RESULT1": (0x0611, 1), + "ADC0_RESULT2": (0x0612, 1), + "PORTA_PIN5CTRL": (0x0415, 1), + "CCL_TRUTH3": (0x01D7, 1), + "CPUINT_LVL1VEC": (0x0113, 1), + "CCL_INTCTRL0": (0x01C5, 1), + "TCB1_CNTH": (0x0A9B, 1), + "PORTC_PIN1CTRL": (0x0451, 1), + "SPI0_DATA": (0x08C4, 1), + "USART0_STATUS": (0x0804, 1), + "CPU_CCP": (0x0034, 1), + "RTC_CTRLA": (0x0140, 1), + "RTC_STATUS": (0x0141, 1), + "PORTA_INTFLAGS": (0x0409, 1), + "CPUINT_STATUS": (0x0111, 1), + "BOD_CTRLB": (0x0081, 1), + "USART0_RXPLCTRL": (0x080E, 1), + "CRCSCAN_CTRLB": (0x0121, 1), + "PORTA_PORTCTRL": (0x040A, 1), + "TCB0_DBGCTRL": (0x0A88, 1), + "RTC_PITINTFLAGS": (0x0153, 1), + "PORTC_DIRCLR": (0x0442, 1), + "PORTA_DIRTGL": (0x0403, 1), + "CCL_SEQCTRL0": (0x01C1, 1), + "CCL_SEQCTRL1": (0x01C2, 1), + "PORTA_PIN4CTRL": (0x0414, 1), + "VPORTC_DIR": (0x0008, 1), + "TCB1_STATUS": (0x0A97, 1), + "FUSE_BODCFG": (0x1281, 1), + "PORTB_PIN2CTRL": (0x0432, 1), + "TWI0_MADDR": (0x08A7, 1), + "FUSE_BOOTEND": (0x1288, 1), + "EVSYS_USERUSART0IRDA": (0x01AC, 1), + "RTC_CALIB": (0x0146, 1), + "TWI0_MCTRLA": (0x08A3, 1), + "TWI0_MCTRLB": (0x08A4, 1), + "PORTC_PIN0CTRL": (0x0450, 1), + "ADC0_WINLTH": (0x061D, 1), + "RSTCTRL_SWRR": (0x0041, 1), + "PORTMUX_TCBROUTEA": (0x05E5, 1), + "VPORTC_IN": (0x000A, 1), + "TCA0_SINGLE_TEMP": (0x0A0F, 1), + "TCA0_SPLIT_CTRLA": (0x0A00, 1), + "FUSE_APPEND": (0x1287, 1), + "RTC_CMPH": (0x014D, 1), + "RTC_CMPL": (0x014C, 1), + "TCA0_SPLIT_CTRLC": (0x0A02, 1), + "CCL_LUT3CTRLC": (0x01D6, 1), + "RTC_CNTL": (0x0148, 1), + "USERROW_USERROW6": (0x1306, 1), + "VPORTA_INTFLAGS": (0x0003, 1), + "PORTA_OUTCLR": (0x0406, 1), + "PORTMUX_EVSYSROUTEA": (0x05E0, 1), + "PORTA_PIN3CTRL": (0x0413, 1), + "VPORTB_DIR": (0x0004, 1), + "ADC0_INTCTRL": (0x0604, 1), + "NVMCTRL_DATAH": (0x1007, 1), + "VPORTA_DIR": (0x0000, 1), + "VREF_CTRLB": (0x00A1, 1), + "NVMCTRL_DATAL": (0x1006, 1), + "TWI0_SADDR": (0x08AC, 1), + "USART0_CTRLB": (0x0806, 1), + "USART0_CTRLC": (0x0807, 1), + "USART0_CTRLD": (0x080A, 1), + "EVSYS_USERTCB0COUNT": (0x01B1, 1), + "TCB1_CCMPH": (0x0A9D, 1), + "SPI0_INTFLAGS": (0x08C3, 1), + "ADC0_COMMAND": (0x060A, 1), + "ADC0_RESULT3": (0x0613, 1), + "SREG": (0x003F, 1), + "PORTA_PIN2CTRL": (0x0412, 1), + "USART0_EVCTRL": (0x080C, 1), + "USART0_TXDATAH": (0x0803, 1), + "ADC0_SAMPLE": (0x0614, 2), + "TCA0_SINGLE_CMP0": (0x0A28, 2), + "TCA0_SINGLE_CMP1": (0x0A2A, 2), + "TCA0_SINGLE_CNT": (0x0A20, 2), + "RTC_CMP": (0x014C, 2), + "RTC_CNT": (0x0148, 2), + "CPU_SP": (0x003D, 2), + "TCA0_SINGLE_CMP2": (0x0A2C, 2), + "TCA0_SINGLE_CMP2BUF": (0x0A3C, 2), + "NVMCTRL_DATA": (0x1006, 2), + "TCA0_SINGLE_CMP1BUF": (0x0A3A, 2), + "NVMCTRL_ADDR": (0x1008, 2), + "USART0_BAUD": (0x0808, 2), + "TCA0_SINGLE_CMP0BUF": (0x0A38, 2), + "TCB0_CCMP": (0x0A8C, 2), + "RTC_PER": (0x014A, 2), + "TCB1_CNT": (0x0A9A, 2), + "TCB1_CCMP": (0x0A9C, 2), + "USART1_BAUD": (0x0828, 2), + "TCB0_CNT": (0x0A8A, 2), + "ADC0_WINHT": (0x061E, 2), + "ADC0_WINLT": (0x061C, 2), + "SP": (0x003D, 2), + "TCA0_SINGLE_PERBUF": (0x0A36, 2), + "TCA0_SINGLE_PER": (0x0A26, 2), + "ADC0_RESULT": (0x0610, 4), +} diff --git a/src/map.py b/src/map.py new file mode 100644 index 0000000..d19a4c2 --- /dev/null +++ b/src/map.py @@ -0,0 +1,33 @@ + +class memmap(dict): + + def __init__(self, fn="hallo.map"): + self.parsemap(fn) + + def parsemap(self, fn): + with open(fn) as f: + laddr = None + for l in f: + try: + ll = l.split() + if l[:1] == "." and len(ll) >= 3: + section = ll[0] + saddr = int(ll[1], 0) & 0xffff + slen = int(ll[2], 0) + self[section] = (saddr, slen) + laddr = saddr + last = None + continue + if l[:1] != " ": + continue + if len(ll)==2 and ll[0][:2] == "0x" or len(ll)==4 and ll[2]=="=" and ll[3]==".": + cur = ll[1] + addr = int(ll[0],0) & 0xffff + self[cur] = (addr,0) + if last is not None: + self[last] = (self[last][0], addr-laddr) + last = cur + laddr = addr + except Exception as e: + from sys import stderr + print(f"{repr(e)}\n{l}", file=stderr) diff --git a/src/prompt.py b/src/prompt.py new file mode 100644 index 0000000..f6573c6 --- /dev/null +++ b/src/prompt.py @@ -0,0 +1,20 @@ +import sys + +def set_prompt(prompt): + sys.ps1 = prompt + "> " + sys.ps2 = prompt + ". " + try: + ip=get_ipython() + from IPython.terminal.prompts import Prompts, Token + class myprompts(Prompts): + def in_prompt_tokens(self, *wtf): + return [(Token, prompt+'> ')] + def continuation_prompt_tokens(self, *wtf): + return [(Token, prompt+'. ')] + def out_prompt_tokens(self, *wtf): + return [(Token, prompt+'= ')] + def rewrite_prompt_tokens(self, *wtf): + return [(Token, prompt+'- ')] + ip.prompts=myprompts(ip) + except: + pass diff --git a/src/rtc.c b/src/rtc.c index 0d04c75..ee3486a 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -25,7 +25,7 @@ uint8_t rtc_cnt_tick() struct_ioconf(rtc_config) = { conf_prefix(RTC), - conf_iow(RTC.CMP, 3600), + conf_iow(RTC.CMP, 10), // rtc_cnt_tick() period [s] conf_io(RTC.CLKSEL, RTC_CLKSEL_INT1K_gc), conf_io(RTC.PITINTCTRL, 1), conf_io(RTC.PITCTRLA, RTC_PERIOD_CYC1024_gc | RTC_PITEN_bm), @@ -43,8 +43,7 @@ ISR(RTC_PIT_vect, ISR_NAKED) "ldi r24, 1" "\n\t" "sts %[flag], r24" "\n\t" "sts pit_tick, r24" "\n\t" - "ldi r24, " "\n\t" - "sts %[flag], r24" "\n\t" + "pop r24" "\n\t" "reti" "\n" ::[flag] "n" (&RTC.PITINTFLAGS) ); @@ -66,11 +65,11 @@ ISR(RTC_CNT_vect, ISR_NAKED) "push r26" "\n\t" "lds r24, %[CMPL]" "\n\t" "lds r25, %[CMPH]" "\n\t" - "lds r26, config+3" "\n\t" + "lds r26, rtc_config+3" "\n\t" "add r24, r26" "\n\t" "sts %[CMPL], r24" "\n\t" - "lds r26, config+5" "\n\t" - "add r25, r26" "\n\t" + "lds r26, rtc_config+5" "\n\t" + "adc r25, r26" "\n\t" "sts %[CMPH], r25" "\n\t" "pop r26" "\n\t" "pop r25" "\n\t" diff --git a/src/uart.c b/src/uart.c index 0772547..0ac11c9 100644 --- a/src/uart.c +++ b/src/uart.c @@ -10,10 +10,10 @@ struct_ioconf(uart_config) = { conf_prefix(USART0), - conf_iow(USART0.BAUD, UART_BAUD), - conf_io(USART0.CTRLB, UART_MODE & 0xff), - conf_io(USART0.CTRLC, UART_MODE >> 8), - conf_io(USART0.CTRLA,USART_RXCIE_bm), + conf_iow(USART0.BAUD, 40000000/115200), // 115200 baud + conf_io(USART0.CTRLC, USART_CHSIZE_8BIT_gc), + conf_io(USART0.CTRLB, USART_TXEN_bm | USART_RXEN_bm), + conf_io(USART0.CTRLA, USART_RXCIE_bm), }; // `uart_tx` buffer size must be a power of 2, max 256. @@ -163,7 +163,7 @@ ISR(USART0_RXC_vect, ISR_NAKED) " push r31 \n" " lds r24, %[DH] \n" " lds r30, uart_rx_s \n" - " and r24, r30 \n" + " or r24, r30 \n" " sts uart_rx_s, r24 \n" " lds r24, %[DL] \n" " lds r30, uart_rx_w \n" diff --git a/src/uart.h b/src/uart.h index cf1b6aa..6438874 100644 --- a/src/uart.h +++ b/src/uart.h @@ -4,9 +4,6 @@ #include "config.h" -#define UART_MODE 0x03c0 -#define UART_BAUD 5555 // 115200 baud - void init_uart(uint16_t mode, uint16_t div); void send_char(uint8_t c); diff --git a/src/uart.py b/src/uart.py new file mode 100755 index 0000000..47e8b34 --- /dev/null +++ b/src/uart.py @@ -0,0 +1,115 @@ +#! /usr/bin/ipython3 --profile=uart + +import sys, serial, threading, struct +from prompt import set_prompt + +class uart(threading.Thread): + + def __init__(self, port, baudrate=115200, parity='N'): + self.baudrate=baudrate + self.serial = serial.Serial(baudrate=baudrate, parity=parity, timeout=10.0, + xonxoff=False, rtscts=False, dsrdtr=False) + self.serial.port = port + self.portname = port.split('/')[-1] + self.serial.open() + self.write = self.serial.write + self.responses = [] + self.readbuffer = b"" + self.reader_lock = threading.Lock() + self.resp_ready = threading.Condition() + self.alive = True + threading.Thread.__init__(self, target=self.reader) + self.daemon = True + self.start() + + def reader(self): + data = b"" + while self.alive: + data += self.serial.read_until(b'\n') + data += self.serial.read_all() + if data and self.reader_lock.acquire(False): + self.readbuffer += data + data = b"" + self.parser() + self.reader_lock.release() + + def parse(self): + if self.reader_lock.acquire(False): + self.parser() + self.reader_lock.release() + + def kill(self): + self.alive = False + self.join() + + def parser(self): + "do something with received chars in .readbuffer" + if not self.resp_ready.acquire(False): + return + lines = self.readbuffer.split(b'\n') + self.readbuffer = lines[-1] + lines[-1:] = [] + + for ll in lines: + if ll: + self.parse_line(ll) + if self.responses: + self.resp_ready.notify() + self.resp_ready.release() + + verbose = True + + def parse_line(self, l): + self.responses.append(l) + if self.verbose: + try: + s = l.decode() + print(f"{self.portname}<- {s}", file=sys.stderr) + except: + print(f"{self.portname}<- {repr(l)}", file=sys.stderr) + + def resp(self, timeout=10, blocking=True): + self.parse() + if not self.resp_ready.acquire(blocking): + return b"" + if blocking and not self.responses: + self.resp_ready.wait(timeout) + l = b"" + if self.responses: + l = self.responses[0] + self.responses[:1] = [] + self.resp_ready.release() + return l + + def flush(self): + r = [] + while self.responses: + r.append(self.resp()) + return r + + def ucmd(self, c): + if not isinstance(c, bytes): + c = c.encode() + if c[-1:] != b'\n': + c = c + b'\n' + if self.verbose: + print(f"{self.portname}-> {c.decode().rstrip()}", file=sys.stderr) + self.write(c) + + def cmd(self, c): + self.ucmd(c) + +if __name__=="__main__": + import getopt + oo,ff = getopt.getopt(sys.argv[1:], "F:", ["tty="]) + port = "/dev/ttyUSB1" + baud = 115200 + for o,v in oo: + if o=="-F" or v=="--tty": + v = v.split(",") + port = v[0] + if len(v)>1: + baud = int(v[1]) + u = uart(port, baud) + c = u.ucmd + set_prompt(u.portname) diff --git a/src/uart_tx.S b/src/uart_tx.S index 8ae5c60..45b3a8c 100644 --- a/src/uart_tx.S +++ b/src/uart_tx.S @@ -14,6 +14,7 @@ .global _send_str26 .global uart_busy .global send_hex + .global send_eol .global command // `tx()` and `put_char()` do not gobble r18, r20, r21, r22, r24, r26, and r27. @@ -101,7 +102,7 @@ send_hex: ld r24, X+ rcall send_hex_byte subi r18, 1 - brcc 1b + brne 1b 9: ret #endif From 13407292ddf09db7beeab4b1bbf1940de7e9c6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Wed, 4 Feb 2026 21:41:19 +0100 Subject: [PATCH 27/33] hallo: add flash --- src/Makefile | 2 +- src/cmd.c | 2 +- src/config.h | 2 +- src/hallo.c | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Makefile b/src/Makefile index 6c621b1..1eaa8ad 100644 --- a/src/Makefile +++ b/src/Makefile @@ -11,7 +11,7 @@ hallo_all: hallo.eeprom CFLAGS_hallo = -DHAVE_nFETs -DSEND_HEX -DHALLO MCU_hallo = attiny424 SN_hallo = 1 -C_FILES_hallo = config.c uart.c cmd.c base85.c rtc.c adc.c pwm.c +C_FILES_hallo = config.c uart.c cmd.c base85.c rtc.c adc.c pwm.c spi.c flash.c bch4369.c S_FILES_hallo = uart_tx.S base85a.S dose_all: dose.eeprom dose.userrow diff --git a/src/cmd.c b/src/cmd.c index 4834b7c..47dbc09 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -194,7 +194,6 @@ void parse_command(const uint8_t *s, uint8_t n) goto send_buffer; } break; -#ifndef HALLO case 'B': if (cmd_flag('@')) pipe.valid = 0; @@ -229,6 +228,7 @@ void parse_command(const uint8_t *s, uint8_t n) else r = flash_poll(cmd_flag('!')); break; +#ifndef HALLO case 'P': if (have_b) pipe_config((void*)cmd_buffer); diff --git a/src/config.h b/src/config.h index b4f3369..d877e4c 100644 --- a/src/config.h +++ b/src/config.h @@ -27,7 +27,7 @@ struct config { enum magic_flags { #ifdef HAVE_nFETs MAGIC = 0xD0, - VERSION = 0x00, + VERSION = 0x01, #endif #ifdef HAVE_FPGA MAGIC = 0xC5, diff --git a/src/hallo.c b/src/hallo.c index 4621243..c2baa0b 100644 --- a/src/hallo.c +++ b/src/hallo.c @@ -12,12 +12,13 @@ #include "config.h" #include "uart.h" -#include "pwm.h" +#include "pipe.h" //////////////////////////////////////////////////////////////////////////////// // // main() +section_status(pipe) struct pipe pipe; section_status(main) struct magic magic; int main() From 2aab85975a492b401465b3936dd11b5e3c7b27fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Fri, 6 Feb 2026 11:05:48 +0100 Subject: [PATCH 28/33] flash fixes --- src/cmd.c | 11 +++--- src/dose.py | 9 ++++- src/flash.py | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/spi.c | 3 +- 4 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 src/flash.py diff --git a/src/cmd.c b/src/cmd.c index 47dbc09..d1c5443 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -159,11 +159,9 @@ void parse_command(const uint8_t *s, uint8_t n) uint8_t bflg = *s - '0'; uint8_t *bptr = cmd_buffer; if (bflg <= 5) { -#ifndef HALLO bptr = flash_buffer + 16*bflg; -#endif bflg = 1<> 7; - if (mm & 0x80) - m ^= *--pp; - *p = m; - b = bb; - } - } -} - -void bch4369_str(uint8_t *b, uint8_t n) -{ - do - bch4369(*b++); - while (--n); -} - -#else - -__attribute__ ((noinline, naked)) -void bch4369(uint8_t d) -{ - __asm__ __volatile__( - "" - "ldi r30, lo8(bch_parity)" "\n\t" - "ldi r31, hi8(bch_parity)" "\n\t" - "ld r25, Z" "\n\t" - "bst r25, 7" "\n\t" // copy MSB of parity → T-bit - "ldi r20, 8" "\n\t" // loop r20 = 8 → 1 - "1:" "\n\t" - "adiw r30, 16" "\n\t" - "ldi r26, lo8(bch_genpoly+16)" "\n\t" - "ldi r27, hi8(bch_genpoly+16)" "\n\t" - "rol r24" "\n\t" // move next input bit → r25.7 - "ror r25" "\n\t" - "2:" "\n\t" - "rol r25" "\n\t" // Move r25.7 → C-bit - "ld r25, -Z" "\n\t" // Rotage input bit into parity byte - "rol r25" "\n\t" - "brtc 3f" "\n\t" // if T-bit: - "ld r0, -X" "\n\t" // xor with gen_poly - "eor r25, r0" "\n\t" - "3:" "\n\t" - "st Z, r25" "\n\t" - "ror r25" "\n\t" // save C-bit → r25.7 and MSB → r25.6 - "cpi r30, lo8(bch_parity)" "\n\t" - "brne 2b" "\n\t" - "bst r25, 6" "\n\t" // copy MSB r25.6 → T-bit - "subi r20, 1" "\n\t" - "brne 1b" "\n\t" - "ret" "\n" - ); -} - -__attribute__ ((noinline, naked)) -void bch4369_str(const uint8_t *b, uint8_t n) -{ - // _bch4369 preserves r22, r23, r18, r19 - __asm__ __volatile__ ( - "" - "movw r18, r28" "\n\t" - "movw r28, r24" "\n" - "1:" "\n\t" - "ld r24, Y+" "\n\t" - "rcall bch4369" "\n\t" - "subi r22, 1" "\n\t" - "brne 1b" "\n\t" - "mov r28, r18" "\n\t" - "ret" "\n" - ); -} - -#endif diff --git a/src/bch4369.h b/src/bch4369.h deleted file mode 100644 index e213d75..0000000 --- a/src/bch4369.h +++ /dev/null @@ -1,24 +0,0 @@ - -#include -#include -extern uint8_t bch_parity[16]; -void bch4369(uint8_t d); -static inline void bch4369_init() { memset(bch_parity, 0 , 16); } -void bch4369_str(const uint8_t *b, uint8_t n); - -static inline -uint8_t *bch4369_stri(uint8_t *b, uint8_t n) -{ - __asm__ volatile( - "1:" "\n\t" - "ld r24, Y+" "\n\t" - "rcall bch4369" "\n\t" - "subi %[N], 1" "\n\t" - "brne 1b" "\n" - : [N] "+r" (n), [B] "+y" (b) - :: "r0", - "r20", "r21", "r24", "r25", - "r26", "r27", "r30", "r31" - ); - return b; -} diff --git a/src/cmd.c b/src/cmd.c index d1c5443..64d2c3b 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -89,18 +89,27 @@ uint8_t poke(struct peak_poke *p, uint8_t poke) if (!n) return 0; if (poke) { - if (p->ccp) - NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEBUFCLR_gc; - _memcopy(a, p->data, n); - if (p->ccp && !(0x8000 & (uint16_t)a)) + uint8_t ccp = p->ccp; + if (ccp) __asm__( - "out %[ccp], %[key] \n\t" + "out __CCP__, %[key] \n\t" "sts %[ctrla], %[cmd] \n" - :: [ccp] "n" (&CCP), + :: [ctrla] "n" (&NVMCTRL.CTRLA), - [key] "r" (p->ccp), + [key] "r" (ccp), + [cmd] "r" (NVMCTRL_CMD_PAGEBUFCLR_gc) + : "memory" + ); + _memcopy(a, p->data, n); + if (ccp && !(0x8000 & (uint16_t)a)) + __asm__( + "out __CCP__, %[key] \n\t" + "sts %[ctrla], %[cmd] \n" + :: + [ctrla] "n" (&NVMCTRL.CTRLA), + [key] "r" (ccp), [cmd] "r" (NVMCTRL_CMD_PAGEERASEWRITE_gc) - : "memory", "r0" + : "memory" ); } else @@ -198,19 +207,20 @@ void parse_command(const uint8_t *s, uint8_t n) r = pipe.valid; if (have_b) { if (cmd_flag('!') || ~r & bflg) { - pipe.valid |= bflg; memcpy(bptr, cmd_buffer, 16); + r = pipe.valid |= bflg; } else goto error; } if (cmd_flag('%')) { if (cmd_flag('@')) - memset(bch_parity, 0, 16); + bch4369_init(config.bch_salt); bch4369_str(bptr, 16); if (cmd_flag('!')) { + bch4369_fini(); memcpy(flash_buffer+64, bch_parity, 16); - pipe.valid |= 0x10; + r = pipe.valid |= 0x10; } } if (cmd_flag('<')) { @@ -221,11 +231,15 @@ void parse_command(const uint8_t *s, uint8_t n) goto send_buffer; } break; + case 'D': + flash_find_free(); + bptr = (void*)&fs; + goto send_buffer; case 'F': if (have_b) r = flash_submit_command(cmd_buffer); else - r = flash_poll(cmd_flag('!')); + r = spi_busy_p(); if (cmd_flag('<')) goto send_buffer; break; diff --git a/src/config.c b/src/config.c index 740907d..25ee61e 100644 --- a/src/config.c +++ b/src/config.c @@ -13,12 +13,13 @@ const struct config config = { .version = VERSION, .cpu_clk = CLKCTRL_PDIV_2X_gc | 1, // 10MHz (max @ 3V) .flash_page_size = FM_528 >> 8, + .bch_salt = 1, .burn_page = 0x88, // Buffer 1 Page Program w/o Erase - .write_buffer = 0x84 | FM_WRITE>>8, // Buffer 1 Write - .read_array = 0x03 | FM_READ>>8, // Continuous Array Read (Low-Frequency) + .write_buffer = 0x84 | FM_WRITE, // Buffer 1 Write + .read_array = 0x03 | FM_READ, // Continuous Array Read (Low-Frequency) .read_buffer = { - [0] = 0xd1 | FM_READ>>8, // Buffer 1 Read (Low-Frequency) - [1] = 0xd3 | FM_READ>>8, // Buffer 2 Read (Low-Frequency) + [0] = 0xd1 | FM_READ, // Buffer 1 Read (Low-Frequency) + [1] = 0xd3 | FM_READ, // Buffer 2 Read (Low-Frequency) }, .page_start = 0x0800, .page_end = 0x1000, diff --git a/src/config.h b/src/config.h index d877e4c..39d346d 100644 --- a/src/config.h +++ b/src/config.h @@ -12,6 +12,7 @@ struct config { uint8_t cpu_clk; uint8_t cron; uint8_t flash_page_size; + uint8_t bch_salt; uint16_t burn_page; uint16_t write_buffer; uint16_t read_array; @@ -27,7 +28,7 @@ struct config { enum magic_flags { #ifdef HAVE_nFETs MAGIC = 0xD0, - VERSION = 0x01, + VERSION = 0x00, #endif #ifdef HAVE_FPGA MAGIC = 0xC5, diff --git a/src/dose.py b/src/dose.py index 13daf0d..f625a9c 100755 --- a/src/dose.py +++ b/src/dose.py @@ -5,12 +5,14 @@ import uart from base85 import base85_encode, base85_decode from map import memmap from iotn424 import SFR -import flash_cmd -flash = flash_cmd.flash() +import flash as flash_cmd +flash_cmd = flash_cmd.flash_cmd() +sys.path[1:1] = ["./bch4369"] +from bch4369 import bch -options, files = getopt.gnu_getopt(sys.argv[1:], "F:o:M:", ["debug", "tty=", "output=", "map="]) +options, files = getopt.gnu_getopt(sys.argv[1:], "F:o:M:", ["debug", "tty=", "output=", "map=", "galois"]) -tty = "/dev/ttyUSB1" +tty = None baud = 115200 out = None debug = None @@ -49,6 +51,9 @@ for o,v in options: if o in "-M --map": map_fn = v + if o == "--galois": + bch.load_galois() + if not out: out = sys.stdout @@ -78,15 +83,15 @@ class dose_cmd(uart.uart): e = int(r[-1], 16) if len(r)==3: d = base85_decode(r[1]) - if self.verbose: + if self._verbose: print(f"{r[0]}[{r[2]}] {"".join([f"{b:02x}" for b in d])}", file=sys.stderr) self.last_cmd = c[0:1] return r[0], e, d def poke(self, a, d, s=None, ccp=0): - return self.peek(a, d, s, ccp) + return self.peek(a, s=s, d=d, ccp=ccp) - def peek(self, a=None, d=None, s=None, ccp=0): + def peek(self, a=None, s=None, d=None, ccp=0): name = None if a in SFR: name = a @@ -97,9 +102,15 @@ class dose_cmd(uart.uart): a, ss = mmap[a] if ss and s is None: s = ss - if s is None and isinstance(d, int): - s = d - d = None + if isinstance(a, str): + print(f"PEEK: unknown addr {a}", file=sys.stderr) + for k in mmap.keys(): + if a in k: + print(f"PEEK: in RAM we have {k}", file=sys.stderr) + for k in SFR.keys(): + if a in k: + print(f"PEEK: IO SFR we have {k}", file=sys.stderr) + raise ValueError(a) FF = {1: "B", 2: "H", 4:"I"} if a is None: cc, nn, dd = self.cmd(b"M=") @@ -120,7 +131,8 @@ class dose_cmd(uart.uart): d = struct.pack(">4 + if not b: + c = "B0@%@" + elif not (b&3): + c = "B0@%" + elif b==31: + c = "B3%!" + else: + c = f"B{b&3}%" + self.cmd(c, d=d[i:i+16]) + if (b&3) == 3: + if b==31: + s = 80 + else: + s = 64 + self.flash(op, byte=i & 0x1c0, size=s)[1] + self.wait_for_spi() + + def wait_for_spi(self): + while True: + r = self.cmd("F")[1] + if not r: + break + print(f"SPI busy {r:02x}", file=sys.stderr) + + def readfbuffer(self, op="ReadBuffer2"): + d = b'' + for i in range(0, 512, 16): + b = i>>4 + if (b&3) == 0: + if b==28: + s = 80 + else: + s = 64 + self.flash(op, byte=i, size=s) + self.wait_for_spi() + d += self.cmd(f"B{b&3} 0: + f.write(self.read_flash(page)) + page += 1 + n -= 1 + + def flash_status(self, blocking=False): + r = (0,0,bytes(2)) + while not r[2][0] & 0x80: + self.flash("Status", what="cmdbuf") + r = self.cmd("F<") + while r[1]: + r = self.cmd("F<") + if not blocking: + break + return tuple(r[2][:2]) + + def write_flash(self, page, d): + print(f"FLASH: writing to {page=}") + self.write2fbuffer(d) + self.flash("Program2", page=page) + self.flash_status(True) + + def write_file2flash(self, page, fn): + n = 0 + with open(fn, "rb") as f: + while True: + b =f.read(512) + if not b: + break + if len(b)<512: + b += bytes(512-len(b)) + self.write_flash(page+n, b) + n += 1 + return n + + def erase_flash_sector(self, page, op="EraseSector"): + """ + op="EraseSector" (default) + page=0: pages 0 … 7 + page=8: pages 8 … 0xff + page=0x100: pages 0x100 … 0x1ff + … + op="ErasePage", page=n + op="EraseBlock", page=n [n&~7 … n|7] + op="EraseChip" + """ + self.flash(op, page=page) + self.flash_status(True) + + def flash_power(self, on=True): + op = "PowerUp" if on else "PowerDown" + self.flash(op) + + def flash_Id(self): + self.flash("Id", what="cmdbuf") + while True: + r = self.cmd("F<") + if not r[1]: + break + i = r[2][:5] + print(f"FLASH chip {b2hex(i)}", file=sys.stderr) + return i + + def memsetfbuffer(self, byte=0, what=0xff, size=528, op=0x0887): + for i in range(byte, byte+size, 255): + s = byte+size - i + if s > 255: + s = 255 + self.flash(op, size=s, what=what, byte=i) + self.wait_for_spi() if tty: tty = dose_cmd(tty, baud) - uart.set_prompt("TurboD") + tty._export(globals()) + tty._verbose = False + +uart.set_prompt("TurboD") + +def b2hex(b, sep=" "): + return sep.join([f"{x:02x}" for x in b]) + diff --git a/src/flash.c b/src/flash.c index c2958e6..2739ce0 100644 --- a/src/flash.c +++ b/src/flash.c @@ -130,7 +130,7 @@ uint8_t flash_cmd(uint16_t mode, uint16_t what, uint16_t page, uint16_t byte) spi_start_cmd(csize, flash_cmd_buffer); return 0; } - if (size >= 128) { + if (size > 80) { // for read of the security register pads += size-64; size = 64; @@ -253,11 +253,13 @@ uint8_t flash_burn_page() uint8_t flash_poll(uint8_t rr) { uint8_t r = fs.status; + if (spi_busy_p()) + return r; if ((r & FS_Error) == FS_Error) return r; if (r & FS_StBsy) { // status bytes arrived - if (flash_status_bytes[0] & 0x80) + if (~flash_status_bytes[0] & 0x80) // flash is still busy burning goto rd_status; // not busy any more, move Bsy → Rdy @@ -288,8 +290,6 @@ ready: if (rr) r |= FS_Ack; fs.status = r; - if (spi_busy_p()) - return r; if (r & FS_Dir == FS_Write && fs.block == 8) flash_burn_page(); else if (!flash_stream_done()) { @@ -324,7 +324,7 @@ static inline uint8_t flash_memset_buffer2() { for (uint16_t i=0; i<528; i += 176) { - uint8_t r = flash_cmd((uint16_t)config.flash_page_size << 8 | 0xff87, 176, 0, i); + uint8_t r = flash_cmd((uint16_t)config.flash_page_size << 8 | 0x87, 176|0xff00, 0, i); if (r) return r; while (spi_busy_p()) ; @@ -355,9 +355,10 @@ uint16_t flash_find_free() while (e > a) { uint16_t p = (a+e)>>1; if (flash_compare_buffer2(p)) - a = p; + a = p+1; else e = p; } + fs.free = a; return a; } diff --git a/src/flash.h b/src/flash.h index 8ce5e61..c509eee 100644 --- a/src/flash.h +++ b/src/flash.h @@ -33,6 +33,7 @@ uint16_t flash_find_free(); extern struct flash_stream { + uint16_t free; // first free page uint16_t page; // page address of buffer number uint16_t npages; // more pages to read uint8_t block; // next block to read 0…9 diff --git a/src/flash.py b/src/flash.py index b8f55bd..c5e5cf3 100644 --- a/src/flash.py +++ b/src/flash.py @@ -3,6 +3,9 @@ import struct class flash_cmd: + class Flash_Error(IOError): + pass + M = { 0: 0x0000, 1: 0x0100, @@ -35,8 +38,8 @@ class flash_cmd: "ReadLegacy": (0xe8 | A | M["read"] | M[4],), "ReadBuffer1": (0xd1 | A | M["read"] | M[0],), "ReadBuffer2": (0xd3 | A | M["read"] | M[0],), - "ReadBufHF1": (0xd1 | A | M["read"] | M[1],), - "ReadBufHF2": (0xd3 | A | M["read"] | M[1],), + "ReadBufHF1": (0xd4 | A | M["read"] | M[1],), + "ReadBufHF2": (0xd6 | A | M["read"] | M[1],), "WriteBuffer1": (0x84 | A | M["write"],), "WriteBuffer2": (0x87 | A | M["write"],), "ProgErase1": (0x83 | A,), @@ -63,10 +66,11 @@ class flash_cmd: WHAT = { "buffer": 0, "cmdbuf": 96, + "cmd": 96+8, "status": 128, } - def cmd_buffer(self, op, mode=0, size=None, page=0, byte=0, what="buffer"): + def cmd_buffer(self, op, mode=0, size=None, page=0, byte=0, what=0, data=None): if op in self.OP: opp = self.OP[op] op = opp[0] @@ -96,10 +100,14 @@ class flash_cmd: size = self.pagesize - byte if what+size > 80: size = 80 - what + elif data is not None and not what and size <= 8: + what = self.WHAT["cmd"] + if data is None: + data = 0 size |= what << 8; if self.verbose: from sys import stderr - print("Flash cmd", *map(hex,(op, size, page, byte)), file=stderr) - return struct.pack("<4H", op, size, page, byte) + print("Flash cmd", *map(hex,(op, size, page, byte, data)), file=stderr) + return struct.pack("<4HQ", op, size, page, byte, data) verbose = False diff --git a/src/spi.c b/src/spi.c index dd16632..b1425ac 100644 --- a/src/spi.c +++ b/src/spi.c @@ -216,7 +216,7 @@ ISR(SPI0_INT_vect, ISR_NAKED) [AIFLGS] "n" (SPI_TXCIF_bm | SPI_RXCIF_bm | SPI_DREIF_bm), [ICTRL] "n" (&SPI.INTCTRL), [DATA] "n" (&SPI.DATA), - [SPORT] "n" (_SFR_IO_ADDR(SSEL_VPORT)), + [SPORT] "n" (_SFR_IO_ADDR(SSEL_VPORT.OUT)), [SSEL] "n" (SSEL_PIN) ); } diff --git a/src/spi.h b/src/spi.h index 79d7478..e1e01cc 100644 --- a/src/spi.h +++ b/src/spi.h @@ -46,14 +46,13 @@ uint8_t spi_abort() static inline uint8_t spi_busy_p() { - return SPI.INTFLAGS & SPI_TXCIF_bm; + return SPI.INTCTRL & SPI_TXCIF_bm; } static inline void spi_start() { - SPI.INTCTRL = SPI_DREIF_bm; - // the ISR will immediately set SPI_TXCIF_bm. + SPI.INTCTRL = SPI_DREIF_bm | SPI_TXCIF_bm| SPI_RXCIF_bm; } static inline void barrier() { __asm__("":::"memory"); } diff --git a/src/uart.py b/src/uart.py index 47e8b34..e6fc13d 100755 --- a/src/uart.py +++ b/src/uart.py @@ -57,11 +57,11 @@ class uart(threading.Thread): self.resp_ready.notify() self.resp_ready.release() - verbose = True + _verbose = True def parse_line(self, l): self.responses.append(l) - if self.verbose: + if self._verbose: try: s = l.decode() print(f"{self.portname}<- {s}", file=sys.stderr) @@ -92,13 +92,30 @@ class uart(threading.Thread): c = c.encode() if c[-1:] != b'\n': c = c + b'\n' - if self.verbose: + if self._verbose: print(f"{self.portname}-> {c.decode().rstrip()}", file=sys.stderr) self.write(c) def cmd(self, c): self.ucmd(c) + def _export(self, scope=None, prefix=""): + """usage: ..._export(globals()) + return a dict with all names in self that + do not begin with an '_' + and are not all uppercase. + The scope is updated with the dict. + """ + r = { + prefix+k: getattr(self, k) + for k in dir(self) + if k.upper() != k + and k[0] != '_' + } + if scope: + scope.update(r) + return r + if __name__=="__main__": import getopt oo,ff = getopt.getopt(sys.argv[1:], "F:", ["tty="]) @@ -110,6 +127,6 @@ if __name__=="__main__": port = v[0] if len(v)>1: baud = int(v[1]) - u = uart(port, baud) - c = u.ucmd - set_prompt(u.portname) + tty = uart(port, baud) + tty._export(globals()) + set_prompt(tty.portname) From 8a56b61f799d5f4b503ffd19a7ba988531f0d350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Wed, 4 Mar 2026 15:31:41 +0100 Subject: [PATCH 30/33] uart: hide _reader() --- src/uart.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/uart.py b/src/uart.py index e6fc13d..e8bdba3 100755 --- a/src/uart.py +++ b/src/uart.py @@ -18,11 +18,11 @@ class uart(threading.Thread): self.reader_lock = threading.Lock() self.resp_ready = threading.Condition() self.alive = True - threading.Thread.__init__(self, target=self.reader) + threading.Thread.__init__(self, target=self._reader) self.daemon = True self.start() - def reader(self): + def _reader(self): data = b"" while self.alive: data += self.serial.read_until(b'\n') From cce9ded5a295ab1df2a66fd79989531d075aecc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Wed, 4 Mar 2026 15:39:22 +0100 Subject: [PATCH 31/33] bch commits --- src/bch4369 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bch4369 b/src/bch4369 index 7f5400f..eebd4bb 160000 --- a/src/bch4369 +++ b/src/bch4369 @@ -1 +1 @@ -Subproject commit 7f5400fa08129800f103be9a4f3caeeb677c5219 +Subproject commit eebd4bb43039a2ecf63aa7c2fdbe1c4edf469393 From 18f6ba9c2fc51e462d71bbb56b373c60a9dec688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20I=2E=20B=C3=B6ttcher?= Date: Tue, 9 Jun 2026 10:59:12 +0200 Subject: [PATCH 32/33] replace BOM with _dose version --- gerber/{turbo_bom.txt => turbo_dose_bom.txt} | 24 ++++++++------------ 1 file changed, 10 insertions(+), 14 deletions(-) rename gerber/{turbo_bom.txt => turbo_dose_bom.txt} (51%) diff --git a/gerber/turbo_bom.txt b/gerber/turbo_dose_bom.txt similarity index 51% rename from gerber/turbo_bom.txt rename to gerber/turbo_dose_bom.txt index 1ed7ed0..f938f31 100644 --- a/gerber/turbo_bom.txt +++ b/gerber/turbo_dose_bom.txt @@ -1,30 +1,26 @@ # PcbBOM Version 1.0 -# Date: So 21 Apr 2024 10:57:09 GMT UTC -# Author: +# Date: Di 09 Jun 2026 08:58:28 GMT UTC +# Author: Stephan Boettcher # Title: TURBO - PCB BOM # Quantity, Description, Value, RefDes # -------------------------------------------- C0603 -BYP_100nF 1/1 C4 -C0603 100nF 6/6 C1 C10 C11 C12 C2 C3 +C0603 100nF 6/6 C11 C12 C30 C32 C33 C34 C0603 SMD-LED 1/1 D1 C0603.fp -SD:_10kΩ 1/1 R13 -C0603.fp 10MΩ 1/1 R9 -C0603.fp 10kΩ 4/4 R11 R5 R7 R8 -C0603.fp 10kΩ_NTC 1/1 R6 -C0603.fp 1MΩ 1/1 R10 +C0603.fp 100kΩ 7/7 R30 R31 R32 R33 R34 R35 R36 +C0603.fp 10kΩ 1/1 R11 C0603.fp 2.2MΩ 1/1 R4 -C0603.fp 220kΩ 1/1 R2 C0603.fp 3.3MΩ 1/1 R3 -C0603.fp 330kΩ 1/1 R1 C0603.fp ∞Ω 1/1 R12 +C0603.fp ∞Ω/0Ω 1/1 R10 KEYSTONE-1025-7 6V 1/1 B1 -MS5534C MS5534C 1/1 U2 -P1206 10µF 11/11 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 - C30 +P1206 10µF 4/4 C20 C26 C29 C31 SIL_100_3 HE_100_1×3 1/1 J1 -SIL_100_4 WRL-10534 1/1 U3 +SIL_100_4 SIL4 1/1 U3 SOIC_150_14 ATtiny4x4SS 1/1 U1 -SOT23_5 LT1761-SD 1/1 U4 +SOIC_150_8 AT45DB161E 1/1 U2 +SOT23_3 2N7002 2/2 Q1 Q2 SOT23_5 LT1761-SD_/_-BYP 1/1 U5 SUBD9_PINS D9_pigtail 1/1 CONN1 gseboard turbo 1/1 BOARD From 33d120cf8005617695e5dffd699ce560734a4342 Mon Sep 17 00:00:00 2001 From: fschumann0 Date: Sun, 28 Jun 2026 18:27:04 +0200 Subject: [PATCH 33/33] dose.py aktualisiert --- dose.py | 510 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 510 insertions(+) create mode 100644 dose.py diff --git a/dose.py b/dose.py new file mode 100644 index 0000000..0d6584b --- /dev/null +++ b/dose.py @@ -0,0 +1,510 @@ +#! /usr/bin/ipython3 --profile=turbo_dose + +import sys, time, getopt, fileinput, struct, csv, os, contextlib +import uart +from base85 import base85_encode, base85_decode +from map import memmap +from iotn424 import SFR +import flash as flash_cmd +flash_cmd = flash_cmd.flash_cmd() +sys.path[1:1] = ["./bch4369"] +from bch4369 import bch + +options, files = getopt.gnu_getopt(sys.argv[1:], "F:o:M:", ["debug", "tty=", "output=", "map=", "galois"]) + +tty = None +baud = 115200 +out = None +debug = None +map_fn = "hallo.map" + +def Debug(e, *a): + if debug: + import traceback + sys.stdout.flush() + print("xdebug", a, repr(e), file=sys.stderr) + traceback.print_exception(e, limit=-2, file=sys.stderr) + +for o,v in options: + + if o == "--debug": + debug = True + + if o in "-F --tty": + tty = v + v = v.split(",", 1) + if v[1:]: + tty = v[0] + baud = int(v[1]) + do_clock = True + + if o in "--output": + if out: + raise ValueError("cannot have multiple --outputs") + if v=="-": + out = sys.stdout + elif v=="--": + out = sys.stderr + else: + out = open(v, "a") + + if o in "-M --map": + map_fn = v + + if o == "--galois": + bch.load_galois() + +if not out: + out = sys.stdout + +if len(files)==1: + if "/dev/tty" in files[0]: + tty = files[0] + files = [] + +mmap = memmap(map_fn) + +class dose_cmd(uart.uart): + + def cmd(self, c, d=None, timeout=0.2): + if not isinstance(c, bytes): + c = c.encode() + if d: + c += b" " + base85_encode(d) + self.flush() + self.ucmd(c) + r = self.resp(timeout) + while r and (r[0] != b'#'[0] or r[1] != c[0]): + r = self.resp(timeout) + d = None + if not r: + return r, d + r = r.split() + e = int(r[-1], 16) + if len(r)==3: + d = base85_decode(r[1]) + if self._verbose: + print(f"{r[0]}[{r[2]}] {"".join([f"{b:02x}" for b in d])}", file=sys.stderr) + self.last_cmd = c[0:1] + return r[0], e, d + + def poke(self, a, d, s=None, ccp=0): + return self.peek(a, s=s, d=d, ccp=ccp) + + def peek(self, a=None, s=None, d=None, ccp=0): + name = None + if a in SFR: + name = a + a, ss = SFR[a] + if s is None: + s = ss + if a in mmap: + a, ss = mmap[a] + if ss and s is None: + s = ss + if isinstance(a, str): + print(f"PEEK: unknown addr {a}", file=sys.stderr) + for k in mmap.keys(): + if a in k: + print(f"PEEK: in RAM we have {k}", file=sys.stderr) + for k in SFR.keys(): + if a in k: + print(f"PEEK: IO SFR we have {k}", file=sys.stderr) + raise ValueError(a) + FF = {1: "B", 2: "H", 4:"I"} + if a is None: + cc, nn, dd = self.cmd(b"M=") + else: + if d is None: + c = b"M" + d = b'' + if s is None: + s = 12 + else: + c = b'M!' + if isinstance(d, int) and s in FF: + d = struct.pack(f"<{FF[s]}", d) + else: + d = bytes(d) + if s is None: + s = len(d) + d = struct.pack(" {fn}", + file=sys.stderr) + if temp_chan is None: + print("fet_temp_log: No temperature channel in the ADC " + "Only the I-V curve will be logged.", + file=sys.stderr) + + all_sweeps = [] + t0 = time.time() + n = 0 + try: + while True: + if sweeps is not None and n >= sweeps: + break + if duration is not None and (time.time() - t0) >= duration: + break + + sweep_rows = [] + for point, dc in enumerate(dcs): + self.poke(gate, dc) + time.sleep(settle) + self.cmd("A!") + time.sleep(adc_settle) + with reader(): + adc_rows = self.adc(start=False) + now = time.time() + chans = row_channels(adc_rows) + w.writerow([ + time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(now)), + f"{now:.3f}", f"{now - t0:.3f}", n, point, dc, + ] + [chans.get(name, "") for name in chan_names]) + f.flush() + sweep_rows.append(dict(epoch=now, t_s=now - t0, sweep=n, + point=point, dc=dc, channels=chans)) + drain = chans.get("Drain1", chans.get("Drain2", "?")) + temp = chans.get(temp_chan, "?") if temp_chan else "n/a" + print(f" sweep {n} pt {point:3d} dc={dc:#06x} " + f"gate={chans.get('Gate', '?')} drain={drain} " + f"T={temp}", file=sys.stderr) + + all_sweeps.append(sweep_rows) + n += 1 + self.poke(gate, clamp_dc(idle_dc)) + + if sweeps is not None and n >= sweeps: + break + if duration is not None and (time.time() - t0) >= duration: + break + if interval > 0: + time.sleep(interval) + except KeyboardInterrupt: + print("\nfet_temp_log: Interrupted. Closing file.", file=sys.stderr) + finally: + self.poke(gate, clamp_dc(idle_dc)) + f.flush() + f.close() + if devnull is not None: + devnull.close() + + print(f"fet_temp_log: Wrote {sum(len(s) for s in all_sweeps)} rows in " + f"{len(all_sweeps)} sweep(s) to {fn}", file=sys.stderr) + return all_sweeps + + """ + + Usage example: fet_temp_log("data.csv", dc_step=0x40, duration=3600, interval=60) + + """ + + + def flash(self, op=None, abort=False, buf=False, **aa): + if op is None: + c = "F" + if abort: + c = "F!" + if buf: + c += "<" + return self.cmd(c) + r = self.cmd("F", flash_cmd.cmd_buffer(op, **aa)) + if r[1]: + raise flash_cmd.Flash_Error(op) + return r + + def write2fbuffer(self, d, op="WriteBuffer2"): + for i in range(0, 512, 16): + b = i>>4 + if not b: + c = "B0@%@" + elif not (b&3): + c = "B0@%" + elif b==31: + c = "B3%!" + else: + c = f"B{b&3}%" + self.cmd(c, d=d[i:i+16]) + if (b&3) == 3: + if b==31: + s = 80 + else: + s = 64 + self.flash(op, byte=i & 0x1c0, size=s)[1] + self.wait_for_spi() + + def wait_for_spi(self): + while True: + r = self.cmd("F")[1] + if not r: + break + print(f"SPI busy {r:02x}", file=sys.stderr) + + def readfbuffer(self, op="ReadBuffer2"): + d = b'' + for i in range(0, 512, 16): + b = i>>4 + if (b&3) == 0: + if b==28: + s = 80 + else: + s = 64 + self.flash(op, byte=i, size=s) + self.wait_for_spi() + d += self.cmd(f"B{b&3} 0: + f.write(self.read_flash(page)) + page += 1 + n -= 1 + + def flash_status(self, blocking=False): + r = (0,0,bytes(2)) + while not r[2][0] & 0x80: + self.flash("Status", what="cmdbuf") + r = self.cmd("F<") + while r[1]: + r = self.cmd("F<") + if not blocking: + break + return tuple(r[2][:2]) + + def write_flash(self, page, d): + print(f"FLASH: writing to {page=}") + self.write2fbuffer(d) + self.flash("Program2", page=page) + self.flash_status(True) + + def write_file2flash(self, page, fn): + n = 0 + with open(fn, "rb") as f: + while True: + b =f.read(512) + if not b: + break + if len(b)<512: + b += bytes(512-len(b)) + self.write_flash(page+n, b) + n += 1 + return n + + def erase_flash_sector(self, page, op="EraseSector"): + """ + op="EraseSector" (default) + page=0: pages 0 … 7 + page=8: pages 8 … 0xff + page=0x100: pages 0x100 … 0x1ff + … + op="ErasePage", page=n + op="EraseBlock", page=n [n&~7 … n|7] + op="EraseChip" + """ + self.flash(op, page=page) + self.flash_status(True) + + def flash_power(self, on=True): + op = "PowerUp" if on else "PowerDown" + self.flash(op) + + def flash_Id(self): + self.flash("Id", what="cmdbuf") + while True: + r = self.cmd("F<") + if not r[1]: + break + i = r[2][:5] + print(f"FLASH chip {b2hex(i)}", file=sys.stderr) + return i + + def memsetfbuffer(self, byte=0, what=0xff, size=528, op=0x0887): + for i in range(byte, byte+size, 255): + s = byte+size - i + if s > 255: + s = 255 + self.flash(op, size=s, what=what, byte=i) + self.wait_for_spi() + +if tty: + tty = dose_cmd(tty, baud) + tty._export(globals()) + tty._verbose = False + +uart.set_prompt("TurboD") + +def b2hex(b, sep=" "): + return sep.join([f"{x:02x}" for x in b]) +