Merge pull request #18 from noisymime/master

Early March Sync
This commit is contained in:
Vitor Moreno B. Sales 2018-03-16 22:17:54 -03:00 committed by GitHub
commit 17a551d89b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 19378 additions and 72543 deletions

View File

@ -4,7 +4,7 @@ fi
for i in speeduino/speeduino/*.ino; do
#cppcheck --xml --include=${i%.*}.h --include=speeduino/speeduino/globals.h $i > /dev/null
cppcheck --dump --suppress=syntaxError:speeduino/speeduino/src/PID_v1/PID_v1.h --include=${i%.*}.h --include=speeduino/speeduino/globals.h $i > /dev/null
cppcheck --force --dump --suppress=syntaxError:speeduino/speeduino/src/PID_v1/PID_v1.h --include=${i%.*}.h --include=speeduino/speeduino/globals.h $i > /dev/null
done
mv speeduino/speeduino/*.dump ./
rm ./utils.*.dump

View File

@ -546,7 +546,7 @@
<constant digits="0" name="vvtFreq" units="Hz">300.0</constant>
<constant digits="0" name="idleFreq" units="Hz">160.0</constant>
<constant name="launchPin">"Board Default"</constant>
<constant name="launchEnable">"Yes"</constant>
<constant name="launchEnable">"No"</constant>
<constant name="launchHiLo">"LOW"</constant>
<constant digits="0" name="lnchSoftLim" units="rpm">2500.0</constant>
<constant digits="0" name="lnchRetard" units="deg">-15.0</constant>
@ -628,9 +628,9 @@
</constant>
<constant cols="1" digits="0" name="iacCrankBins" rows="4" units="C">
-40.0
-40.0
-40.0
-40.0
0.0
40.0
80.0
</constant>
<constant name="iacAlgorithm">"None"</constant>
<constant name="iacStepTime">"1"</constant>
@ -647,9 +647,9 @@
<constant digits="0" name="fanFreq" units="Hz">0.0</constant>
<constant cols="1" digits="0" name="fanPWMBins" rows="4" units="C">
-40.0
-40.0
-40.0
-40.0
0.0
40.0
80.0
</constant>
</page>
<page number="6" size="240">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<msq xmlns="http://www.msefi.com/:msq">
<bibliography author="TunerStudio MS(Beta) 3.0.50.23 - EFI Analytics, Inc." tuneComment="" writeDate="Wed Jan 03 21:35:21 AEDT 2018"/>
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.12" nPages="10" signature="speeduino 201712"/>
<bibliography author="TunerStudio MS(Beta) 3.0.50.40 - EFI Analytics, Inc." tuneComment="" writeDate="Sat Mar 10 20:55:10 AEDT 2018"/>
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.12" nPages="10" signature="speeduino 201802"/>
<page>
<pcVariable name="tsCanId">"CAN ID 0"</pcVariable>
</page>
@ -58,12 +58,10 @@
86.0
90.0
96.0
500.0
100.0
</constant>
</page>
<page number="1" size="128">
<constant digits="0" name="flexBoostLow" units="kPa">0.0</constant>
<constant digits="0" name="flexBoostHigh" units="kPa">50.0</constant>
<constant digits="0" name="asePct" units="%">25.0</constant>
<constant digits="0" name="aseCount" units="s">8.0</constant>
<constant cols="1" digits="0" name="wueRates" rows="10" units="%">
@ -137,10 +135,6 @@
<constant digits="0" name="oddfire2" units="deg">0.0</constant>
<constant digits="0" name="oddfire3" units="deg">0.0</constant>
<constant digits="0" name="oddfire4" units="deg">0.0</constant>
<constant digits="0" name="flexFuelLow" units="%">100.0</constant>
<constant digits="0" name="flexFuelHigh" units="%">163.0</constant>
<constant digits="0" name="flexAdvLow" units="Deg">0.0</constant>
<constant digits="0" name="flexAdvHigh" units="Deg">10.0</constant>
<constant digits="0" name="iacCLminDuty" units="%">0.0</constant>
<constant digits="0" name="iacCLmaxDuty" units="%">0.0</constant>
<constant digits="0" name="boostMinDuty" units="%">20.0</constant>
@ -281,15 +275,12 @@
<constant name="fuelPumpPin">"Board Default"</constant>
<constant name="useResync">"No"</constant>
<constant digits="1" name="sparkDur" units="ms">1.0</constant>
<constant digits="1" name="unused4-8" units="ms">25.5</constant>
<constant digits="1" name="unused4-9" units="ms">25.5</constant>
<constant digits="1" name="unused4-10" units="ms">25.5</constant>
<constant digits="0" name="SkipCycles" units="cycles">1.0</constant>
<constant name="unused4-12a">"NOTHING"</constant>
<constant name="useDwellLim">"On"</constant>
<constant name="sparkMode">"Wasted Spark"</constant>
<constant name="TrigFilter">"Off"</constant>
<constant name="ignCranklock">"On"</constant>
<constant name="ignCranklock">"Off"</constant>
<constant digits="1" name="dwellcrank" units="ms">4.5</constant>
<constant digits="1" name="dwellrun" units="ms">3.0</constant>
<constant digits="0" name="numTeeth" units="teeth">36.0</constant>
@ -996,166 +987,53 @@
<constant digits="0" name="boostIntv" units="ms">20.0</constant>
<constant digits="0" name="stagedInjSizePri" units="cc/min">200.0</constant>
<constant digits="0" name="stagedInjSizeSec" units="cc/min">600.0</constant>
<constant cols="1" digits="0" name="unused11_32_192" rows="159" units="RPM">
700.0
25500.0
700.0
700.0
<constant cols="1" digits="0" name="flexBoostBins" rows="6" units="%">
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
700.0
700.0
700.0
700.0
700.0
700.0
0.0
0.0
25500.0
25500.0
20.0
40.0
60.0
80.0
100.0
</constant>
<constant cols="1" digits="0" name="flexBoostAdj" rows="6" units="kPa">
0.0
10.0
20.0
30.0
40.0
50.0
</constant>
<constant cols="1" digits="0" name="flexFuelBins" rows="6" units="%">
0.0
20.0
40.0
60.0
80.0
100.0
</constant>
<constant cols="1" digits="0" name="flexFuelAdj" rows="6" units="%">
100.0
139.0
156.0
160.0
163.0
163.0
</constant>
<constant cols="1" digits="0" name="flexAdvBins" rows="6" units="%">
0.0
20.0
40.0
60.0
80.0
100.0
100.0
100.0
100.0
100.0
100.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
700.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
100.0
0.0
200.0
200.0
100.0
100.0
100.0
200.0
25500.0
25500.0
25500.0
25500.0
0.0
100.0
0.0
100.0
100.0
25500.0
100.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
25500.0
1000.0
5000.0
7500.0
11000.0
15000.0
12000.0
10900.0
9600.0
0.0
1200.0
1000.0
600.0
500.0
1000.0
1000.0
1300.0
1500.0
1500.0
2500.0
3800.0
4500.0
5000.0
6500.0
9000.0
12500.0
21600.0
100.0
3000.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
</constant>
<constant cols="1" digits="0" name="flexAdvAdj" rows="6" units="Deg">
0.0
2.0
5.0
8.0
9.0
10.0
</constant>
<constant digits="0" name="UNALLOCATED_TOP_9" units="RAW">
255.0
@ -1166,6 +1044,7 @@
<setting name="SPEED_DENSITY" value="SPEED_DENSITY"/>
<setting name="CAN_COMMANDS_OFF" value="CAN_COMMANDS_OFF"/>
<setting name="CELSIUS" value="CELSIUS"/>
<setting name="resetcontrol_standard" value="resetcontrol_standard"/>
<setting name="AFR" value="AFR"/>
</settings>
<userComments Comment="These are user comments that can be related to a particular setting or dialog."/>

File diff suppressed because it is too large Load Diff

View File

@ -2,122 +2,37 @@
; THROUGH (PLATED) HOLES START AT T100
M48
INCH
T1C0.033465
T2C0.165354
T3C0.125984
T100C0.038194
T101C0.042000
T102C0.015748
T103C0.040000
T104C0.031496
T105C0.030000
T106C0.038000
T107C0.043302
T108C0.035433
T1C0.165354
T2C0.125984
T3C0.033465
T100C0.015748
T101C0.040000
T102C0.031496
T103C0.030000
T104C0.038000
T105C0.043302
T106C0.035433
T107C0.038194
T108C0.042000
%
T1
X018002Y017668
X016821Y017668
T2
X001895Y003148
X030651Y013731
X001895Y036497
X001895Y018448
X030651Y022829
T3
X037661Y012030
T2
X035411Y030780
X037661Y012030
T3
X018002Y017668
X016821Y017668
T100
X037911Y022780
X012911Y011780
X036911Y014780
X021911Y011780
X021911Y030780
X037911Y018780
X030911Y011780
X015311Y030780
X030911Y030780
X036911Y029780
X037911Y021780
X036911Y013780
X015911Y011780
X037911Y017780
X024911Y011780
X009311Y030780
X024911Y030780
X036911Y028780
X033911Y011780
X037911Y020780
X033911Y030780
X037911Y016780
X010311Y030780
X018911Y030780
X036911Y027780
X027911Y030780
X010911Y011780
X036911Y030780
X037911Y015780
X036911Y026780
X013311Y030780
X037911Y014780
X013911Y011780
X022911Y011780
X036911Y025780
X007311Y030780
X022911Y030780
X031911Y011780
X016311Y030780
X037911Y029780
X031911Y030780
X037911Y013780
X016911Y011780
X036911Y024780
X025911Y011780
X037911Y028780
X034911Y011780
X036911Y023780
X019911Y011780
X011311Y030780
X019911Y030780
X037911Y027780
X028911Y011780
X036911Y019780
X028911Y030780
X037911Y030780
X036911Y022780
X011911Y011780
X020911Y011780
X020911Y030780
X037911Y026780
X036911Y018780
X014311Y030780
X036911Y021780
X014911Y011780
X037911Y025780
X008311Y030780
X023911Y011780
X036911Y017780
X023911Y030780
X032911Y011780
X032911Y030780
X036911Y020780
X037911Y024780
X017911Y011780
X036911Y016780
X017911Y030780
X026911Y011780
X026911Y030780
X035911Y011780
X037911Y023780
X036911Y015780
X012311Y030780
X037911Y019780
X029911Y011780
X029911Y030780
T101
X023681Y004280
X026661Y004280
T102
X006411Y035280
X024911Y028530
X012161Y002280
X014661Y015280
X015911Y009780
X007161Y006030
X003661Y002280
X029161Y013780
@ -127,8 +42,8 @@ X026661Y016280
X022161Y006280
X018911Y029780
X017161Y033030
X018411Y015030
X027911Y029780
X018411Y015030
X015161Y002280
X035661Y031780
X002161Y026030
@ -147,7 +62,6 @@ X002161Y021530
X005161Y011280
X035911Y018530
X007411Y012530
X006661Y028780
X001911Y033030
X008911Y017530
X028161Y020530
@ -156,8 +70,8 @@ X031661Y004280
X029014Y005516
X018661Y028530
X007411Y034030
X005911Y004280
X009411Y009280
X005911Y004280
X011661Y017530
X035661Y008030
X028661Y020530
@ -182,8 +96,8 @@ X034911Y033030
X034911Y034280
X009411Y010280
X003411Y004280
X008411Y032530
X014161Y003030
X008411Y032530
X023161Y035780
X033911Y005030
X016911Y005530
@ -198,8 +112,8 @@ X013411Y007280
X026911Y009530
X029661Y020530
X013911Y006030
X011161Y028780
X035661Y004280
X011161Y028780
X019161Y008780
X017661Y018030
X025411Y030280
@ -208,22 +122,19 @@ X035161Y018280
X030911Y020030
X019161Y007780
X017911Y010530
X006411Y035280
X024911Y028530
X012161Y002280
X014661Y015280
X015911Y009780
T103
T101
X025927Y018780
X025927Y019780
X025927Y016780
X025927Y020780
X025927Y017780
X025927Y015779
X025927Y018780
T104
X022161Y004780
T102
X022161Y007733
T105
X022161Y004780
T103
X030906Y028285
X027906Y033285
X031906Y028285
X028906Y033285
X029906Y028285
@ -238,9 +149,12 @@ X033906Y033285
X026906Y033285
X027906Y028285
X028906Y028285
X030906Y028285
X027906Y033285
T106
T104
X019911Y026280
X010911Y022280
X015911Y020280
X013911Y023280
X018911Y021280
X011911Y026280
X022911Y023280
X016911Y024280
@ -320,8 +234,8 @@ X012911Y023280
X017911Y021280
X023911Y020280
X010911Y026280
X015911Y024280
X021911Y023280
X015911Y024280
X018911Y025280
X037911Y032030
X012911Y022280
@ -348,12 +262,8 @@ X018911Y022280
X013911Y024280
X016911Y025280
X022911Y024280
X019911Y026280
X010911Y022280
X015911Y020280
X013911Y023280
X018911Y021280
T107
T105
X004141Y030535
X005911Y005140
X005911Y011281
X005911Y028172
@ -386,8 +296,8 @@ X005911Y006515
X004141Y029356
X005911Y021047
X004141Y007740
X005911Y024631
X004141Y026989
X005911Y024631
X004141Y031756
X004141Y023447
X004141Y013644
@ -401,11 +311,100 @@ X005911Y017223
X004141Y006515
X004141Y021047
X004141Y024631
X004141Y030535
T108
T106
X037661Y004480
X037661Y007280
X037661Y011030
X037661Y008230
X037661Y004480
T107
X012311Y030780
X037911Y019780
X029911Y011780
X029911Y030780
X037911Y022780
X012911Y011780
X036911Y014780
X021911Y011780
X021911Y030780
X037911Y018780
X030911Y011780
X015311Y030780
X030911Y030780
X036911Y029780
X037911Y021780
X036911Y013780
X015911Y011780
X037911Y017780
X024911Y011780
X009311Y030780
X024911Y030780
X036911Y028780
X033911Y011780
X037911Y020780
X033911Y030780
X037911Y016780
X010311Y030780
X018911Y030780
X036911Y027780
X027911Y030780
X010911Y011780
X036911Y030780
X037911Y015780
X036911Y026780
X013311Y030780
X037911Y014780
X013911Y011780
X022911Y011780
X036911Y025780
X007311Y030780
X022911Y030780
X031911Y011780
X016311Y030780
X037911Y029780
X031911Y030780
X037911Y013780
X016911Y011780
X036911Y024780
X025911Y011780
X037911Y028780
X034911Y011780
X036911Y023780
X019911Y011780
X011311Y030780
X019911Y030780
X037911Y027780
X028911Y011780
X036911Y019780
X028911Y030780
X037911Y030780
X036911Y022780
X011911Y011780
X020911Y011780
X020911Y030780
X037911Y026780
X036911Y018780
X014311Y030780
X036911Y021780
X014911Y011780
X037911Y025780
X023911Y011780
X036911Y017780
X008311Y030780
X023911Y030780
X032911Y011780
X032911Y030780
X036911Y020780
X037911Y024780
X017911Y011780
X036911Y016780
X017911Y030780
X026911Y011780
X026911Y030780
X035911Y011780
X037911Y023780
X036911Y015780
T108
X026661Y004280
X023681Y004280
T00
M30

View File

@ -259,7 +259,6 @@ X1716Y3303D03*
X2316Y3578D03*
X3591Y1853D03*
X2341Y1453D03*
X666Y2878D03*
X1591Y978D03*
X1441Y878D03*
X1341Y728D03*

View File

@ -278,7 +278,6 @@ X1716Y3303D03*
X2316Y3578D03*
X3591Y1853D03*
X2341Y1453D03*
X666Y2878D03*
X1591Y978D03*
X1441Y878D03*
X1341Y728D03*

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 645 KiB

After

Width:  |  Height:  |  Size: 654 KiB

View File

@ -7,87 +7,117 @@ T101C0.038194
T102C0.015748
%
T100
X002021Y015166
X019021Y014166
X009021Y009166
X001021Y015166
X003021Y015166
X005021Y015166
X007021Y015166
X004021Y015166
X006021Y015166
X008021Y015166
X012021Y009166
X010021Y009166
X009021Y015166
X019021Y012166
X017021Y009166
X015021Y009166
X013021Y009166
X011021Y009166
X018021Y009166
X016021Y009166
X014021Y009166
X010021Y015166
X012021Y015166
X007021Y003416
X005021Y003416
X003021Y003416
X019021Y009166
X011021Y015166
X013021Y015166
X015021Y015166
X017021Y015166
X006021Y003416
X004021Y003416
X019021Y010166
X014021Y015166
X016021Y015166
X018021Y015166
X024021Y009166
X022021Y009166
X020021Y009166
X019021Y015166
X023021Y009166
X021021Y009166
X024021Y009166
X020021Y015166
X022021Y015166
X021021Y015166
X023021Y015166
X019021Y013166
X020021Y015166
X022021Y015166
X024021Y015166
X019021Y011166
X002021Y009166
X007021Y009166
X005021Y009166
X003021Y009166
X001021Y009166
X008021Y009166
X006021Y009166
X004021Y009166
X002021Y009166
X019021Y014166
X009021Y009166
X007021Y009166
X001021Y015166
X003021Y015166
X005021Y015166
X002021Y015166
X004021Y015166
X006021Y015166
X008021Y015166
X007021Y015166
X009021Y015166
X019021Y012166
X015021Y009166
X013021Y009166
X011021Y009166
X018021Y009166
X016021Y009166
X014021Y009166
X012021Y009166
X010021Y009166
X005021Y003416
X003021Y003416
X019021Y009166
X017021Y009166
X011021Y015166
X013021Y015166
X015021Y015166
X006021Y003416
X004021Y003416
X019021Y010166
X010021Y015166
X012021Y015166
X014021Y015166
X016021Y015166
X018021Y015166
X007021Y003416
X017021Y015166
X019021Y015166
X023021Y009166
X021021Y009166
T101
X038021Y004916
X037021Y015916
X029021Y019916
X038021Y019916
X014021Y000916
X038021Y003916
X021021Y019916
X037021Y014916
X023021Y000916
X030021Y019916
X032021Y000916
X012421Y019916
X038021Y018916
X038021Y002916
X017021Y000916
X037021Y013916
X024021Y019916
X026021Y000916
X038021Y017916
X037021Y009916
X033021Y019916
X015421Y019916
X035021Y000916
X037021Y012916
X018021Y019916
X027021Y019916
X029021Y000916
X038021Y016916
X009421Y019916
X037021Y008916
X037021Y011916
X012021Y000916
X021021Y000916
X038021Y015916
X037021Y007916
X010421Y019916
X030021Y000916
X010421Y019916
X037021Y010916
X015021Y000916
X038021Y014916
X022021Y019916
X038021Y014916
X024021Y000916
X037021Y006916
X031021Y019916
X013421Y019916
X033021Y000916
X038021Y013916
X018021Y000916
X037021Y005916
X018021Y000916
X025021Y019916
X007421Y019916
X027021Y000916
X007421Y019916
X034021Y019916
X038021Y009916
X016421Y019916
@ -113,83 +143,53 @@ X016021Y000916
X023021Y019916
X038021Y006916
X025021Y000916
X032021Y019916
X037021Y017916
X034021Y000916
X032021Y019916
X014421Y019916
X034021Y000916
X038021Y005916
X008421Y019916
X037021Y016916
X008421Y019916
X011021Y000916
X038021Y004916
X020021Y000916
X037021Y015916
X029021Y019916
X038021Y019916
X014021Y000916
X038021Y003916
X021021Y019916
X023021Y000916
X037021Y014916
X030021Y019916
X032021Y000916
X012421Y019916
X038021Y018916
X038021Y002916
X017021Y000916
X037021Y013916
X024021Y019916
X026021Y000916
X038021Y017916
X033021Y019916
X015421Y019916
X037021Y009916
X035021Y000916
X037021Y012916
X018021Y019916
X029021Y000916
X038021Y016916
X027021Y019916
X009421Y019916
X037021Y008916
T102
X024021Y009916
X038521Y001166
X014521Y005166
X032021Y008666
X014521Y001666
X030521Y007666
X019271Y004166
X014521Y003166
X034771Y011916
X014521Y004666
X032021Y012666
X024271Y004166
X022271Y004166
X020271Y004166
X037021Y001166
X025271Y004166
X023271Y004166
X021271Y004166
X018771Y004666
X014521Y002666
X026271Y004166
X021646Y010666
X009271Y002916
X014521Y002666
X018771Y000916
X005771Y011666
X009271Y002916
X014021Y004916
X014521Y004166
X009271Y001166
X005771Y011666
X014021Y004916
X028521Y012416
X014521Y002166
X028271Y008666
X017271Y004666
X018021Y004666
X030771Y004666
X014521Y003666
X030521Y009666
X016521Y000416
X014521Y002166
X027771Y004166
X014521Y003666
X024021Y009916
X038521Y001166
X032021Y008666
X030521Y007666
X014521Y005166
X014521Y001666
X034771Y011916
X019271Y004166
X014521Y003166
X032021Y012666
X020271Y004166
X014521Y004666
X025271Y004166
X023271Y004166
X021271Y004166
X018771Y004666
X026271Y004166
X024271Y004166
X022271Y004166
T00
M30

View File

@ -4,7 +4,7 @@
*eMail=
*
*Project=Teensy 3.5 Adaptor
*Date=23:00:50
*Date=14:20:27
*CreatedBy=Fritzing 0.9.3b.04.19.5c895d327c44a3114e5fcc9d8260daf0cbb52806
*
*
@ -13,472 +13,454 @@
*Rotation in degree (0-360, math. pos.)
*
*No;Value;Package;X;Y;Rotation;Side;Name
1;;;90.5138;-45.3247;0;Bottom;TXT19
2;;;37.0349;-47.6956;-90;Bottom;TXT19
3;;;56.5691;-10.5834;0;Bottom;Via16
4;;;95.3008;-51.5337;0;Bottom;Copper Fill163
5;;;98.6693;-25.2846;0;Bottom;TXT19
6;;;51.4891;-10.5834;0;Bottom;Via13
7;;;66.6877;-11.0969;0;Bottom;Copper Fill151
8;;;54.6608;-51.4575;0;Bottom;Copper Fill15
9;;;90.5138;-22.3761;0;Bottom;TXT19
10;;;69.4944;-5.6105;0;Bottom;Copper Fill275
11;;;49.0474;-20.6219;0;Bottom;Copper Fill245
12;;;36.8841;-5.50335;0;Bottom;Via9
13;;;12.7381;-9.5729;0;Bottom;Copper Fill283
14;;so014;67.3642;-31.1634;0;Top;IC1
15;;;6.6294;-19.0471;0;Bottom;Copper Fill68
16;;;47.9806;-21.1807;0;Bottom;Copper Fill238
17;;;70.4977;-11.0969;0;Bottom;Copper Fill332
18;;;95.3262;-41.7039;0;Bottom;Copper Fill188
19;;;78.5368;-11.9224;0;Bottom;Copper Fill120
20;;;47.6791;-11.8534;0;Bottom;Via39
21;;;88.3191;-30.2684;0;Bottom;Via32
22;;;45.4406;-36.7255;0;Bottom;Copper Fill213
23;;;54.5084;-27.1624;0;Bottom;Copper Fill108
24;;;95.3262;-41.7039;0;Bottom;Copper Fill38
25;;;72.8218;-31.582;0;Bottom;Copper Fill143
26;;;26.7208;-24.2541;0;Bottom;Copper Fill60
27;;;21.844;-40.8403;0;Bottom;Copper Fill187
28;;;90.5138;-29.9718;0;Bottom;TXT19
29;;;77.4573;-25.0669;0;Bottom;Copper Fill298
30;;;23.5077;-7.0329;0;Bottom;Copper Fill103
31;;;34.3408;-24.2541;0;Bottom;Copper Fill63
32;;;96.5073;-6.6519;0;Bottom;Copper Fill139
33;;;89.9456;-7.11828;0;Bottom;TXT19
34;;;49.5808;-51.4575;0;Bottom;Copper Fill13
35;;;53.7718;-33.9823;0;Bottom;Copper Fill202
36;;;95.3262;-21.3839;0;Bottom;Copper Fill239
37;;;72.3773;-32.0265;0;Bottom;Copper Fill141
38;;;47.4218;-30.9724;0;Bottom;Copper Fill136
39;;;69.9008;-51.4575;0;Bottom;Copper Fill19
40;;;70.4977;-10.2079;0;Bottom;Copper Fill333
41;;;22.6568;-51.4575;0;Bottom;Copper Fill3
42;;;23.9268;-7.452;0;Bottom;Copper Fill105
43;;;98.6693;-30.2596;0;Bottom;TXT19
44;180k;0805 [SMD];57.8391;-6.38318;90;Top;R7
45;;;2.5781;-22.5015;0;Bottom;Copper Fill314
46;;;55.3212;-17.0659;0;Bottom;Copper Fill252
47;;;36.8808;-37.4875;0;Bottom;Copper Fill197
48;;;47.2694;-47.3935;0;Bottom;Copper Fill31
49;180k;0805 [SMD];55.2991;-6.38318;90;Top;R5
50;;;95.3262;-29.0039;0;Bottom;Copper Fill47
51;;;95.3262;-46.7839;0;Bottom;Copper Fill36
52;;;54.5084;-27.1624;0;Bottom;Copper Fill292
53;;;87.8332;-30.312;0;Bottom;Copper Fill100
54;;;61.2569;-45.8965;-90;Bottom;TXT19
55;;;23.5491;-7.40835;0;Bottom;Via30
56;;;46.4566;-33.6267;0;Bottom;Copper Fill222
57;;;95.3262;-39.1639;0;Bottom;Copper Fill194
58;;;49.0982;-30.9724;0;Bottom;Copper Fill321
59;;;19.3294;-41.1705;0;Bottom;Copper Fill186
60;;;46.5328;-21.5109;0;Bottom;Copper Fill243
61;;;98.6693;-35.3396;0;Bottom;TXT19
62;;;95.3262;-34.0839;0;Bottom;Copper Fill221
63;;;95.3262;-23.9239;0;Bottom;Copper Fill236
64;330k;0805 [SMD];55.2992;-14.0032;-90;Top;R6
65;;;90.7097;-50.4047;0;Bottom;TXT19
66;;;48.0568;-2.372;0;Bottom;Copper Fill158
67;;;72.4408;-51.4575;0;Bottom;Copper Fill20
68;;;43.7896;-47.9269;0;Bottom;Copper Fill11
69;;;90.5138;-27.4882;0;Bottom;TXT19
70;;;64.1096;-24.2541;0;Bottom;Copper Fill230
71;;;95.3262;-34.0839;0;Bottom;Copper Fill45
72;;;64.1477;-10.2079;0;Bottom;Copper Fill329
73;;;95.3262;-16.3039;0;Bottom;Copper Fill255
74;;;69.215;-31.8741;0;Bottom;Copper Fill224
75;;;77.0128;-24.6224;0;Bottom;Copper Fill116
76;;;39.751;-33.4489;0;Bottom;Copper Fill70
77;;;27.9908;-30.9089;0;Bottom;Copper Fill41
78;;THT;12.7542;-8.67826;-90;Bottom;J4
79;;;97.8441;-2.96335;0;Bottom;Via27
80;;;19.3469;-1.27133;0;Bottom;TXT18
81;;;59.0804;-6.3979;0;Bottom;Copper Fill272
82;;;51.4477;-10.2079;0;Bottom;Copper Fill324
83;;;26.4033;-51.4575;0;Bottom;Copper Fill138
84;;;78.1177;-11.4779;0;Bottom;Copper Fill118
85;;;10.4066;-5.05384;-90;Bottom;TXT20
86;;;90.5138;-19.8406;0;Bottom;TXT19
87;;;88.2777;-29.8929;0;Bottom;Copper Fill99
88;;;56.5404;-6.3979;0;Bottom;Copper Fill271
89;;;50.8964;-26.4583;0;Bottom;Part1
90;;;55.372;-27.1624;0;Bottom;Copper Fill109
91;;;95.3262;-46.7839;0;Bottom;Copper Fill175
92;;;59.1091;-10.5834;0;Bottom;Via17
93;;THT;31.8042;-38.5233;90;Bottom;J2
94;;;50.9524;-36.5223;0;Bottom;Copper Fill200
95;;;64.1891;-10.5834;0;Bottom;Via19
96;;;5.334;-35.6079;0;Bottom;Copper Fill207
97;;;88.2777;-29.8929;0;Bottom;Copper Fill285
98;;;34.7726;-22.2221;0;Bottom;Copper Fill77
99;180k;0805 [SMD];65.4591;-6.38318;90;Top;R13
100;180k;0805 [SMD];67.9991;-6.38318;90;Top;R15
101;;;55.372;-27.1624;0;Bottom;Copper Fill293
102;;;90.5256;-21.8157;0;Bottom;Copper Fill78
103;;;90.5138;-42.6718;0;Bottom;TXT19
104;;;78.5368;-11.9224;0;Bottom;Copper Fill305
105;;;57.2008;-51.4575;0;Bottom;Copper Fill16
106;;;32.6898;-45.7933;0;Bottom;Copper Fill27
107;;;88.6968;-30.312;0;Bottom;Copper Fill101
108;;;95.631;-15.8467;0;Bottom;Copper Fill85
109;;;77.0128;-24.6224;0;Bottom;Copper Fill300
110;;;55.118;-11.4525;0;Bottom;Copper Fill261
111;;;42.0678;-47.9743;-90;Bottom;TXT19
112;;;9.1694;-19.3773;0;Bottom;Copper Fill69
113;;;11.4808;-24.2541;0;Bottom;Copper Fill54
114;;;57.658;-11.4525;0;Bottom;Copper Fill262
115;;;95.631;-13.2813;0;Bottom;Copper Fill88
116;;;94.4118;-3.0324;0;Bottom;Copper Fill338
117;;;91.1606;-17.3707;0;Bottom;Copper Fill84
118;;;19.304;-20.3425;0;Bottom;Copper Fill71
119;;;23.9268;-3.0324;0;Bottom;Copper Fill131
120;;;35.179;-46.1489;0;Bottom;Copper Fill28
121;;;70.9168;-10.6524;0;Bottom;Copper Fill334
122;;;39.8526;-5.0517;0;Bottom;Copper Fill280
123;;;95.3262;-49.3239;0;Bottom;Copper Fill35
124;;;95.3262;-26.4639;0;Bottom;Copper Fill235
125;;;59.0677;-11.0969;0;Bottom;Copper Fill153
126;;;21.6408;-24.2541;0;Bottom;Copper Fill58
127;;;95.3262;-31.5439;0;Bottom;Copper Fill46
128;;;79.8576;-26.8195;0;Bottom;Copper Fill217
129;;;36.8841;-9.31335;0;Bottom;Via36
130;;;98.6693;-27.7761;0;Bottom;TXT19
131;;;2.5781;-24.1779;0;Bottom;Copper Fill313
132;;;77.0128;-19.5424;0;Bottom;Copper Fill307
133;;;77.0128;-19.5424;0;Bottom;Copper Fill123
134;;;95.3262;-11.2239;0;Bottom;Copper Fill259
135;;;77.4573;-25.0669;0;Bottom;Copper Fill114
136;;;16.5608;-24.2541;0;Bottom;Copper Fill56
137;;;65.278;-11.4525;0;Bottom;Copper Fill265
138;;;23.5077;-3.4769;0;Bottom;Copper Fill129
139;;;71.8091;-22.0134;0;Bottom;Via1
140;;;7.8994;-35.9127;0;Bottom;Copper Fill208
141;;;54.9529;-27.6069;0;Bottom;Copper Fill106
142;;;4.5466;-30.9089;0;Bottom;Copper Fill44
143;330k;0805 [SMD];62.9192;-14.0032;-90;Top;R12
144;;;81.1784;-19.4027;0;Bottom;Copper Fill247
145;;;35.3568;-51.4575;0;Bottom;Copper Fill8
146;;;90.5138;-40.1318;0;Bottom;TXT19
147;;;95.631;-26.0067;0;Bottom;Copper Fill49
148;;;52.578;-11.4525;0;Bottom;Copper Fill260
149;;;81.3341;-32.1734;0;Bottom;Via12
150;;;83.6168;-26.5401;0;Bottom;Copper Fill229
151;;;98.6693;-22.6639;0;Bottom;TXT19
152;;;26.7621;-47.0408;-90;Bottom;TXT19
153;;;81.7118;-32.2424;0;Bottom;Copper Fill150
154;;;36.8046;-24.2541;0;Bottom;Copper Fill64
155;;;12.7381;-7.8965;0;Bottom;Copper Fill284
156;;;41.9641;-1.05835;0;Bottom;Via38
157;;;75.3618;-26.7941;0;Bottom;Copper Fill219
158;;;23.5077;-7.0329;0;Bottom;Copper Fill287
159;;;90.5138;-17.3096;0;Bottom;TXT19
160;;;56.5277;-11.0969;0;Bottom;Copper Fill146
161;;;97.7773;-2.5879;0;Bottom;Copper Fill111
162;;;93.9673;-6.6519;0;Bottom;Copper Fill134
163;;;89.5858;-25.6511;0;Bottom;Copper Fill50
164;;;72.4441;-31.5384;0;Bottom;Via11
165;;;37.8968;-51.4575;0;Bottom;Copper Fill9
166;;;62.2808;-33.0171;0;Bottom;Copper Fill215
167;;;7.91792;-5.74702;-90;Bottom;TXT20
168;;;77.851;-36.9541;0;Bottom;Copper Fill203
169;;;78.232;-48.9175;0;Bottom;Copper Fill170
170;;;12.7478;-10.7894;0;Bottom;TXT21
171;;;56.3085;-48.0494;-90;Bottom;TXT19
172;;;14.0208;-24.2541;0;Bottom;Copper Fill55
173;;;25.1968;-51.4575;0;Bottom;Copper Fill4
174;;;84.3165;-47.7896;-90;Bottom;TXT19
175;;;38.608;-10.1825;0;Bottom;Copper Fill268
176;;;34.3408;-37.4875;0;Bottom;Copper Fill196
177;;;94.4118;-3.0324;0;Bottom;Copper Fill161
178;;;21.844;-20.6473;0;Bottom;Copper Fill72
179;;;90.5138;-12.2296;0;Bottom;TXT19
180;;;41.8973;-0.7083;0;Bottom;Copper Fill282
181;;;93.9673;-3.4769;0;Bottom;Copper Fill337
182;;;77.4573;-19.9869;0;Bottom;Copper Fill121
183;;;95.3262;-8.6839;0;Bottom;Copper Fill276
184;;;72.3773;-31.1629;0;Bottom;Copper Fill142
185;;;77.9018;-19.5424;0;Bottom;Copper Fill124
186;;;95.3262;-29.0039;0;Bottom;Copper Fill227
187;;;30.2768;-51.4575;0;Bottom;Copper Fill6
188;;;92.5322;-45.3107;0;Bottom;Copper Fill178
189;;;47.6377;-2.8165;0;Bottom;Copper Fill335
190;;;26.924;-21.2823;0;Bottom;Copper Fill74
191;;;80.6196;-25.0161;0;Bottom;Copper Fill233
192;;;98.6693;-40.4196;0;Bottom;TXT19
193;;;58.8485;-48.0494;-90;Bottom;TXT19
194;;;90.8304;-19.9107;0;Bottom;Copper Fill82
195;;;37.7444;-46.4537;0;Bottom;Copper Fill29
196;;;81.3341;-22.0134;0;Bottom;Via2
197;;;95.3262;-31.5439;0;Bottom;Copper Fill225
198;;;19.1008;-24.2541;0;Bottom;Copper Fill57
199;;;48.9491;-10.5834;0;Bottom;Via14
200;;;32.1564;-39.5703;0;Bottom;Copper Fill193
201;;;77.4573;-19.0979;0;Bottom;Copper Fill122
202;;;46.736;-36.0905;0;Bottom;Copper Fill216
203;;THT;31.8042;-23.2833;-90;Bottom;J1
204;;;60.198;-11.4525;0;Bottom;Copper Fill263
205;;;78.1177;-12.3669;0;Bottom;Copper Fill302
206;;;95.3262;-18.8439;0;Bottom;Copper Fill250
207;;;97.3074;-7.452;0;Bottom;Copper Fill140
208;;;50.1904;-20.0631;0;Bottom;Copper Fill246
209;;;98.7625;-9.94614;0;Bottom;TXT19
210;330k;0805 [SMD];65.4592;-14.0032;-90;Top;R14
211;;;93.9673;-2.5879;0;Bottom;Copper Fill160
212;;;23.0632;-3.0324;0;Bottom;Copper Fill130
213;;;98.6693;-20.1284;0;Bottom;TXT19
214;;;77.4573;-24.1779;0;Bottom;Copper Fill115
215;;;97.7773;-2.5879;0;Bottom;Copper Fill295
216;;;77.5241;-24.5534;0;Bottom;Via25
217;;;38.2778;-11.4271;0;Bottom;Copper Fill267
218;;;43.7388;-50.6955;0;Bottom;Copper Fill165
219;;;82.042;-25.0415;0;Bottom;Copper Fill234
220;;;95.3262;-36.6239;0;Bottom;Copper Fill206
221;;;32.8168;-51.4575;0;Bottom;Copper Fill7
222;;;98.6693;-32.7432;0;Bottom;TXT19
223;;;61.341;-33.4489;0;Bottom;Copper Fill214
224;;;95.3262;-39.1639;0;Bottom;Copper Fill40
225;;;59.7408;-51.4575;0;Bottom;Copper Fill17
226;;THT;48.3142;-30.9033;0;Bottom;J3
227;;;78.1591;-11.8534;0;Bottom;Via24
228;;;77.9018;-24.6224;0;Bottom;Copper Fill301
229;;;95.3262;-11.2239;0;Bottom;Copper Fill90
230;;;98.6693;-45.6125;0;Bottom;TXT19
231;;;51.0286;-19.5043;0;Bottom;Copper Fill248
232;;;98.6693;-42.9596;0;Bottom;TXT19
233;;;39.243;-7.6425;0;Bottom;Copper Fill278
234;;;61.6712;-11.5541;0;Bottom;Copper Fill87
235;;;76.708;-36.1667;0;Bottom;Copper Fill205
236;;;16.1544;-42.0849;0;Bottom;Copper Fill184
237;;;70.4977;-11.0969;0;Bottom;Copper Fill155
238;;;65.5574;-16.2531;0;Bottom;Copper Fill257
239;;;63.8813;-45.8494;-90;Bottom;TXT19
240;;;45.7741;-11.8534;0;Bottom;Via22
241;;;66.6877;-10.2079;0;Bottom;Copper Fill328
242;;;66.0908;-50.6955;0;Bottom;Copper Fill166
243;;;97.3074;-7.452;0;Bottom;Copper Fill323
244;;;96.5073;-6.6519;0;Bottom;Copper Fill322
245;180k;0805 [SMD];50.2191;-6.38318;90;Top;R1
246;;;81.2673;-32.6869;0;Bottom;Copper Fill147
247;;;5.715;-13.7131;0;Bottom;Copper Fill67
248;;;64.1477;-11.0969;0;Bottom;Copper Fill152
249;;;54.9529;-27.6069;0;Bottom;Copper Fill290
250;;;20.1168;-51.4575;0;Bottom;Copper Fill2
251;;;61.6491;-10.5834;0;Bottom;Via18
252;;;61.0141;-25.1884;0;Bottom;Via37
253;;;71.1962;-27.8101;0;Bottom;Copper Fill228
254;330k;0805 [SMD];60.3792;-14.0032;-90;Top;R10
255;;;24.4094;-40.5355;0;Bottom;Copper Fill189
256;;;36.8841;-8.04335;0;Bottom;Via6
257;;;39.1922;-37.4875;0;Bottom;Copper Fill198
258;;;74.1;-47.7896;-90;Bottom;TXT19
259;;;2.5781;-24.1779;0;Bottom;Copper Fill132
260;;;8.9408;-24.2541;0;Bottom;Copper Fill53
261;;;16.1798;-15.6435;0;Bottom;Copper Fill244
262;;;82.6008;-51.4575;0;Bottom;Copper Fill24
263;;;93.1672;-7.452;0;Bottom;Copper Fill320
264;;;61.6077;-11.0969;0;Bottom;Copper Fill154
265;;;88.2777;-30.7565;0;Bottom;Copper Fill98
266;;;41.8973;-0.7083;0;Bottom;Copper Fill95
267;;;95.3262;-8.6839;0;Bottom;Copper Fill92
268;;;29.2608;-24.2541;0;Bottom;Copper Fill61
269;;;62.738;-11.4525;0;Bottom;Copper Fill264
270;;;59.6138;-22.2475;0;Bottom;Copper Fill237
271;;;32.004;-21.9173;0;Bottom;Copper Fill76
272;;;13.6144;-42.7199;0;Bottom;Copper Fill179
273;;;98.5765;-37.8796;0;Bottom;TXT19
274;;;47.0408;-51.4575;0;Bottom;Copper Fill12
275;;;46.1296;-48.0494;-90;Bottom;TXT19
276;;;36.8841;-10.5834;0;Bottom;Via5
277;;;14.859;-42.3897;0;Bottom;Copper Fill181
278;;;36.8841;-6.77335;0;Bottom;Via8
279;;;52.5018;-35.2523;0;Bottom;Copper Fill201
280;;;45.8216;-32.3821;0;Bottom;Copper Fill223
281;;;86.8;-47.7896;-90;Bottom;TXT19
282;;;79.18;-47.7896;-90;Bottom;TXT19
283;;;29.464;-21.6125;0;Bottom;Copper Fill75
284;;;73.4568;-31.3407;0;Bottom;Copper Fill226
285;;;49.0982;-30.9724;0;Bottom;Copper Fill137
286;;;14.6177;-30.1469;0;Bottom;Copper Fill125
287;;;23.0632;-7.452;0;Bottom;Copper Fill104
288;;;64.1604;-6.3979;0;Bottom;Copper Fill274
289;;;24.892;-37.4621;0;Bottom;Copper Fill212
290;;;14.6177;-29.2579;0;Bottom;Copper Fill126
291;;;81.72;-47.7896;-90;Bottom;TXT19
292;;;95.3262;-13.7639;0;Bottom;Copper Fill258
293;;;95.3262;-44.2439;0;Bottom;Copper Fill37
294;;;95.3008;-51.4575;0;Bottom;Copper Fill26
295;;;71.4471;-47.7896;-90;Bottom;TXT19
296;;;36.8841;-13.1234;0;Bottom;Via3
297;;;14.1732;-29.7024;0;Bottom;Copper Fill311
298;;;54.0004;-6.3979;0;Bottom;Copper Fill270
299;;;47.6791;-2.32835;0;Bottom;Via31
300;;;54.9816;-27.0934;0;Bottom;Via28
301;;;84.6582;-35.2015;0;Bottom;Copper Fill220
302;;;62.103;-24.0001;0;Bottom;Copper Fill51
303;;;91.567;-43.7359;0;Bottom;Copper Fill180
304;;;9.779;-43.6597;0;Bottom;Copper Fill174
305;;;36.3466;-5.74226;0;Bottom;TXT5
306;;;53.9877;-11.0969;0;Bottom;Copper Fill145
307;;;78.867;-33.0425;0;Bottom;Copper Fill80
308;;;14.6177;-30.1469;0;Bottom;Copper Fill309
309;;;89.7128;-27.0989;0;Bottom;Copper Fill48
310;;;26.924;-40.2053;0;Bottom;Copper Fill190
311;;;98.2218;-3.0324;0;Bottom;Copper Fill113
312;;;11.0744;-43.3549;0;Bottom;Copper Fill176
313;;;23.5077;-7.8965;0;Bottom;Copper Fill286
314;;;52.1208;-51.4575;0;Bottom;Copper Fill14
315;;;77.6732;-11.9224;0;Bottom;Copper Fill304
316;;;80.8228;-32.2424;0;Bottom;Copper Fill149
317;;;77.9018;-24.6224;0;Bottom;Copper Fill117
318;;;15.0368;-29.7024;0;Bottom;Copper Fill312
319;;;98.6693;-15.0261;0;Bottom;TXT19
320;;;5.334;-44.2947;0;Bottom;Copper Fill172
321;;;80.0608;-51.4575;0;Bottom;Copper Fill23
322;;;67.818;-11.4525;0;Bottom;Copper Fill266
323;;;39.5478;-6.3217;0;Bottom;Copper Fill279
324;;;95.3262;-44.2439;0;Bottom;Copper Fill183
325;;;77.5208;-51.4575;0;Bottom;Copper Fill22
326;;;81.2673;-31.7979;0;Bottom;Copper Fill148
327;;;59.944;-48.9937;0;Bottom;Copper Fill33
328;;;97.3328;-3.0324;0;Bottom;Copper Fill112
329;;;91.5162;-14.8815;0;Bottom;Copper Fill86
330;;;36.8841;-4.23335;0;Bottom;Via10
331;;;42.5704;-37.1573;0;Bottom;Copper Fill199
332;;;48.3955;-3.62757;0;Bottom;TXT19
333;;;98.2218;-3.0324;0;Bottom;Copper Fill297
334;;;39.4903;-47.9272;-90;Bottom;TXT19
335;;;2.5781;-22.5015;0;Bottom;Copper Fill133
336;;;23.5077;-7.8965;0;Bottom;Copper Fill102
337;;;74.9808;-51.4575;0;Bottom;Copper Fill21
338;;;75.3872;-48.9429;0;Bottom;Copper Fill169
339;;;10.5156;-45.6917;0;Bottom;Copper Fill164
340;;;29.9084;-30.0886;0;Bottom;IMG1
341;;;54.0291;-10.5834;0;Bottom;Via15
342;;;17.399;-41.7547;0;Bottom;Copper Fill185
343;;;34.6235;-9.47286;0;Bottom;TXT3
344;;;81.1022;-37.8685;0;Bottom;Copper Fill182
345;;;49.8094;-47.7237;0;Bottom;Copper Fill32
346;;;34.4949;-47.6956;-90;Bottom;TXT19
347;;;70.2818;-25.0415;0;Bottom;Copper Fill232
348;;;61.6077;-10.2079;0;Bottom;Copper Fill331
349;;;62.2808;-51.4575;0;Bottom;Copper Fill18
350;;;77.9018;-19.5424;0;Bottom;Copper Fill308
351;;;61.6204;-6.3979;0;Bottom;Copper Fill273
352;;;15.0368;-29.7024;0;Bottom;Copper Fill128
353;;;31.9549;-47.6956;-90;Bottom;TXT19
354;;;45.0088;-21.5871;0;Bottom;Copper Fill242
355;;;77.5241;-19.4734;0;Bottom;Via23
356;;;23.9268;-3.0324;0;Bottom;Copper Fill318
357;;;14.6177;-29.2579;0;Bottom;Copper Fill310
358;;;64.6684;-35.3539;0;Bottom;Copper Fill192
359;;;95.3262;-36.6239;0;Bottom;Copper Fill43
360;;;43.4086;-15.0339;0;Bottom;Copper Fill253
361;;;90.5138;-14.7383;0;Bottom;TXT19
362;;;53.9877;-10.2079;0;Bottom;Copper Fill326
363;;;38.0873;-37.7415;0;Bottom;Copper Fill135
364;;;92.456;-11.0461;0;Bottom;Copper Fill91
365;;;98.6693;-17.5975;0;Bottom;TXT19
366;;;74.4474;-34.5919;0;Bottom;Copper Fill218
367;330k;0805 [SMD];57.8392;-14.0032;-90;Top;R8
368;;;98.6693;-48.0586;0;Bottom;TXT19
369;;;48.9077;-10.2079;0;Bottom;Copper Fill325
370;;;59.0677;-10.2079;0;Bottom;Copper Fill330
371;;;90.5138;-35.0518;0;Bottom;TXT19
372;;;70.9676;-18.1835;0;Bottom;Copper Fill79
373;;;51.4477;-11.0969;0;Bottom;Copper Fill144
374;;;23.5077;-3.4769;0;Bottom;Copper Fill316
375;;;54.9529;-26.7179;0;Bottom;Copper Fill107
376;;;43.8691;-11.8534;0;Bottom;Via21
377;;;12.319;-43.0247;0;Bottom;Copper Fill177
378;;;14.1732;-29.7024;0;Bottom;Copper Fill127
379;;;56.7182;-39.5957;0;Bottom;Copper Fill39
380;;;1.6256;-45.4377;0;Bottom;Copper Fill162
381;;;63.0936;-16.5579;0;Bottom;Copper Fill256
382;;;51.4604;-6.3979;0;Bottom;Copper Fill269
383;;;23.5491;-2.96335;0;Bottom;Via29
1;;;77.851;-36.9541;0;Bottom;Copper Fill184
2;;;95.3262;-18.8439;0;Bottom;Copper Fill231
3;;;36.8046;-24.2541;0;Bottom;Copper Fill48
4;;;76.64;-47.7896;-90;Bottom;TXT19
5;;;43.7388;-50.6955;0;Bottom;Copper Fill146
6;;;29.464;-21.6125;0;Bottom;Copper Fill59
7;180k;0805 [SMD];60.3791;-6.38318;90;Top;R9
8;;;12.7381;-9.5729;0;Bottom;Copper Fill79
9;;;92.5322;-45.3107;0;Bottom;Copper Fill159
10;;;90.5138;-32.4553;0;Bottom;TXT19
11;;;13.6144;-42.7199;0;Bottom;Copper Fill160
12;;;54.9816;-27.0934;0;Bottom;Via28
13;;;94.4118;-3.0324;0;Bottom;Copper Fill142
14;;;21.6408;-24.2541;0;Bottom;Copper Fill42
15;330k;0805 [SMD];50.2192;-14.0032;-90;Top;R2
16;;THT;12.7542;-8.67826;-90;Bottom;J4
17;;THT;48.3142;-30.9033;0;Bottom;J3
18;;;39.4903;-47.9272;-90;Bottom;TXT19
19;;;61.6712;-11.5541;0;Bottom;Copper Fill70
20;;;26.7208;-24.2541;0;Bottom;Copper Fill44
21;;;54.5084;-27.1624;0;Bottom;Copper Fill273
22;;;71.4471;-47.7896;-90;Bottom;TXT19
23;;;70.9168;-10.6524;0;Bottom;Copper Fill137
24;;;4.5466;-30.9089;0;Bottom;Copper Fill26
25;;;56.7182;-39.5957;0;Bottom;Copper Fill21
26;;;62.5094;-49.2985;0;Bottom;Copper Fill14
27;;;91.1606;-17.3707;0;Bottom;Copper Fill67
28;;;78.9178;-32.9663;0;Bottom;Copper Fill64
29;;;56.3085;-48.0494;-90;Bottom;TXT19
30;;;26.854;-17.4709;0;Bottom;TXT18
31;;;70.9676;-18.1835;0;Bottom;Copper Fill63
32;;;42.0678;-47.9743;-90;Bottom;TXT19
33;;;10.4066;-5.05384;-90;Bottom;TXT20
34;;;90.2208;-23.1111;0;Bottom;Copper Fill50
35;;;35.179;-46.1489;0;Bottom;Copper Fill8
36;;;93.9673;-3.4769;0;Bottom;Copper Fill318
37;;;98.5765;-37.8796;0;Bottom;TXT19
38;;;54.0004;-6.3979;0;Bottom;Copper Fill251
39;;;90.5256;-21.8157;0;Bottom;Copper Fill62
40;;;98.6693;-20.1284;0;Bottom;TXT19
41;;;48.0568;-2.372;0;Bottom;Copper Fill317
42;;;90.5138;-14.7383;0;Bottom;TXT19
43;;;23.5077;-7.0329;0;Bottom;Copper Fill268
44;;;74.1;-47.7896;-90;Bottom;TXT19
45;;;52.578;-11.4525;0;Bottom;Copper Fill241
46;;;15.494;-36.8779;0;Bottom;Copper Fill192
47;;;58.8485;-48.0494;-90;Bottom;TXT19
48;;;98.7625;-12.5175;0;Bottom;TXT19
49;;;78.5368;-11.9224;0;Bottom;Copper Fill103
50;;;26.924;-21.2823;0;Bottom;Copper Fill58
51;;;43.5356;-22.1205;0;Bottom;Copper Fill222
52;;;98.6693;-27.7761;0;Bottom;TXT19
53;;;12.7381;-7.8965;0;Bottom;Copper Fill265
54;;;90.5138;-35.0518;0;Bottom;TXT19
55;;;26.4033;-51.4575;0;Bottom;Copper Fill121
56;;;90.5138;-47.7707;0;Bottom;TXT19
57;;;64.1096;-24.2541;0;Bottom;Copper Fill211
58;180k;0805 [SMD];55.2991;-6.38318;90;Top;R5
59;180k;0805 [SMD];65.4591;-6.38318;90;Top;R13
60;330k;0805 [SMD];60.3792;-14.0032;-90;Top;R10
61;;;81.3341;-22.0134;0;Bottom;Via2
62;;;6.6294;-19.0471;0;Bottom;Copper Fill52
63;;;95.631;-23.4413;0;Bottom;Copper Fill49
64;;;73.1266;-49.2985;0;Bottom;Copper Fill149
65;;;77.0128;-19.5424;0;Bottom;Copper Fill106
66;;;98.6693;-42.9596;0;Bottom;TXT19
67;;;95.3262;-34.0839;0;Bottom;Copper Fill202
68;;;46.1296;-48.0494;-90;Bottom;TXT19
69;;;25.1968;-51.4575;0;Bottom;Copper Fill4
70;;;8.9408;-24.2541;0;Bottom;Copper Fill37
71;;;61.6077;-11.0969;0;Bottom;Copper Fill135
72;;;37.7444;-46.4537;0;Bottom;Copper Fill9
73;;;81.1784;-19.4027;0;Bottom;Copper Fill228
74;;;98.6693;-15.0261;0;Bottom;TXT19
75;;;34.4949;-47.6956;-90;Bottom;TXT19
76;;;24.4094;-40.5355;0;Bottom;Copper Fill170
77;;;12.9587;-5.04509;-90;Bottom;TXT20
78;;;48.0568;-2.372;0;Bottom;Copper Fill139
79;;;69.0011;-47.7896;-90;Bottom;TXT19
80;;;98.6693;-22.6639;0;Bottom;TXT19
81;;;54.9529;-27.6069;0;Bottom;Copper Fill89
82;;;19.1008;-24.2541;0;Bottom;Copper Fill41
83;;;56.5404;-6.3979;0;Bottom;Copper Fill252
84;;;95.3262;-34.0839;0;Bottom;Copper Fill27
85;;;70.4977;-11.0969;0;Bottom;Copper Fill313
86;;;23.5077;-7.0329;0;Bottom;Copper Fill86
87;;;82.042;-25.0415;0;Bottom;Copper Fill215
88;;;69.4944;-5.6105;0;Bottom;Copper Fill256
89;;;76.708;-36.1667;0;Bottom;Copper Fill186
90;;;95.3262;-44.2439;0;Bottom;Copper Fill18
91;;;71.8091;-22.0134;0;Bottom;Via1
92;;;72.8218;-31.582;0;Bottom;Copper Fill124
93;;;39.8526;-5.0517;0;Bottom;Copper Fill261
94;;;95.3262;-36.6239;0;Bottom;Copper Fill187
95;;;16.1544;-42.0849;0;Bottom;Copper Fill165
96;330k;0805 [SMD];52.7592;-14.0032;-90;Top;R4
97;;;21.844;-45.4377;0;Bottom;Copper Fill1
98;;;95.3262;-13.7639;0;Bottom;Copper Fill239
99;;;2.5781;-22.5015;0;Bottom;Copper Fill295
100;;;37.0349;-47.6956;-90;Bottom;TXT19
101;;;95.3262;-29.0039;0;Bottom;Copper Fill208
102;;;95.3262;-46.7839;0;Bottom;Copper Fill156
103;;;47.9806;-21.1807;0;Bottom;Copper Fill219
104;;;54.9529;-27.6069;0;Bottom;Copper Fill271
105;;;75.3618;-26.7941;0;Bottom;Copper Fill200
106;;;95.3008;-51.5337;0;Bottom;Copper Fill144
107;;;81.7118;-32.2424;0;Bottom;Copper Fill131
108;;;34.7726;-22.2221;0;Bottom;Copper Fill61
109;;;95.3262;-26.4639;0;Bottom;Copper Fill216
110;;;95.3262;-44.2439;0;Bottom;Copper Fill164
111;;;92.456;-11.0461;0;Bottom;Copper Fill74
112;;;11.4808;-24.2541;0;Bottom;Copper Fill38
113;;;98.6693;-35.3396;0;Bottom;TXT19
114;;;61.0141;-25.1884;0;Bottom;Via37
115;180k;0805 [SMD];50.2191;-6.38318;90;Top;R1
116;;;80.6196;-25.0161;0;Bottom;Copper Fill214
117;;;59.0804;-6.3979;0;Bottom;Copper Fill253
118;;;31.8008;-24.2541;0;Bottom;Copper Fill46
119;;;49.8094;-47.7237;0;Bottom;Copper Fill12
120;;;96.5073;-6.6519;0;Bottom;Copper Fill303
121;;;12.7478;-10.7894;0;Bottom;TXT21
122;;;88.2777;-30.7565;0;Bottom;Copper Fill81
123;;;95.3262;-39.1639;0;Bottom;Copper Fill22
124;;;98.6693;-45.6125;0;Bottom;TXT19
125;;;77.9018;-19.5424;0;Bottom;Copper Fill289
126;;;25.9334;-12.0113;0;Bottom;Copper Fill262
127;;;37.6317;-7.61951;0;Bottom;TXT6
128;;;70.4977;-10.2079;0;Bottom;Copper Fill314
129;;;70.9168;-10.6524;0;Bottom;Copper Fill315
130;;;23.0632;-3.0324;0;Bottom;Copper Fill113
131;;;12.9794;-36.5477;0;Bottom;Copper Fill191
132;;;72.4441;-31.5384;0;Bottom;Via11
133;;;77.5241;-24.5534;0;Bottom;Via25
134;;;40.2844;-46.7585;0;Bottom;Copper Fill10
135;;;90.5138;-17.3096;0;Bottom;TXT19
136;;;60.198;-11.4525;0;Bottom;Copper Fill244
137;;;57.658;-11.4525;0;Bottom;Copper Fill243
138;;;95.3262;-49.3239;0;Bottom;Copper Fill15
139;;;93.9673;-6.6519;0;Bottom;Copper Fill300
140;;;56.5277;-10.2079;0;Bottom;Copper Fill308
141;180k;0805 [SMD];62.9191;-6.38318;90;Top;R11
142;;;51.4477;-11.0969;0;Bottom;Copper Fill125
143;;;14.1732;-29.7024;0;Bottom;Copper Fill292
144;;;14.859;-42.3897;0;Bottom;Copper Fill162
145;;;97.3328;-3.0324;0;Bottom;Copper Fill95
146;;;74.4474;-34.5919;0;Bottom;Copper Fill199
147;;;90.5138;-37.5918;0;Bottom;TXT19
148;;;24.1808;-24.2541;0;Bottom;Copper Fill43
149;;;51.4891;-10.5834;0;Bottom;Via13
150;;;78.1591;-11.8534;0;Bottom;Via24
151;;;5.334;-44.2947;0;Bottom;Copper Fill153
152;;;56.5691;-10.5834;0;Bottom;Via16
153;;;97.7773;-3.4769;0;Bottom;Copper Fill275
154;;;42.5704;-37.1573;0;Bottom;Copper Fill180
155;;;41.8973;-0.7083;0;Bottom;Copper Fill263
156;;;54.9529;-26.7179;0;Bottom;Copper Fill272
157;;;19.304;-20.3425;0;Bottom;Copper Fill55
158;;;59.0677;-11.0969;0;Bottom;Copper Fill134
159;;;36.8841;-9.31335;0;Bottom;Via36
160;;;52.5018;-35.2523;0;Bottom;Copper Fill182
161;;;45.7741;-11.8534;0;Bottom;Via22
162;;;14.6177;-30.1469;0;Bottom;Copper Fill290
163;;;78.1177;-11.4779;0;Bottom;Copper Fill101
164;;;94.4118;-3.0324;0;Bottom;Copper Fill319
165;;;24.4348;-30.9089;0;Bottom;Copper Fill176
166;;;48.9491;-10.5834;0;Bottom;Via14
167;;;23.9268;-7.452;0;Bottom;Copper Fill88
168;;;80.8228;-32.2424;0;Bottom;Copper Fill130
169;;;23.0632;-7.452;0;Bottom;Copper Fill87
170;;;77.9018;-24.6224;0;Bottom;Copper Fill282
171;;;2.5781;-24.1779;0;Bottom;Copper Fill115
172;;;21.844;-40.8403;0;Bottom;Copper Fill168
173;;;36.3466;-5.74226;0;Bottom;TXT5
174;;;15.4755;-5.53168;-90;Bottom;TXT20
175;;;90.5138;-12.2296;0;Bottom;TXT19
176;;;39.243;-7.6425;0;Bottom;Copper Fill259
177;;;65.278;-11.4525;0;Bottom;Copper Fill246
178;;;59.944;-48.9937;0;Bottom;Copper Fill13
179;;;53.9877;-11.0969;0;Bottom;Copper Fill126
180;;;23.9268;-3.0324;0;Bottom;Copper Fill299
181;;;59.0677;-10.2079;0;Bottom;Copper Fill311
182;;;2.5781;-22.5015;0;Bottom;Copper Fill116
183;;;97.9424;-31.4423;0;Bottom;Copper Fill28
184;;;38.9128;-8.8617;0;Bottom;Copper Fill258
185;;;23.0632;-3.0324;0;Bottom;Copper Fill298
186;;;95.3262;-41.7039;0;Bottom;Copper Fill169
187;;;48.3955;-3.62757;0;Bottom;TXT19
188;;;81.2673;-32.6869;0;Bottom;Copper Fill128
189;;;88.2777;-29.8929;0;Bottom;Copper Fill82
190;;;5.334;-35.6079;0;Bottom;Copper Fill188
191;;;95.3262;-23.9239;0;Bottom;Copper Fill217
192;;;90.7097;-50.4047;0;Bottom;TXT19
193;;;69.4182;-23.6953;0;Bottom;Copper Fill212
194;;;24.4094;-20.9521;0;Bottom;Copper Fill57
195;330k;0805 [SMD];62.9192;-14.0032;-90;Top;R12
196;;;34.3408;-37.4875;0;Bottom;Copper Fill177
197;;;86.8;-47.7896;-90;Bottom;TXT19
198;;;49.0982;-30.9724;0;Bottom;Copper Fill302
199;;;97.5614;-25.8289;0;Bottom;Copper Fill31
200;;;23.9268;-3.0324;0;Bottom;Copper Fill114
201;;;95.631;-26.0067;0;Bottom;Copper Fill33
202;;;46.736;-36.0905;0;Bottom;Copper Fill197
203;;;78.5368;-11.9224;0;Bottom;Copper Fill286
204;;;47.6791;-11.8534;0;Bottom;Via39
205;;;94.0341;-2.96335;0;Bottom;Via26
206;;;53.7718;-33.9823;0;Bottom;Copper Fill183
207;;;32.004;-21.9173;0;Bottom;Copper Fill60
208;;;77.6732;-11.9224;0;Bottom;Copper Fill285
209;;;98.6693;-25.2846;0;Bottom;TXT19
210;;;95.631;-18.3613;0;Bottom;Copper Fill66
211;;;49.0474;-20.6219;0;Bottom;Copper Fill226
212;;;45.0088;-21.5871;0;Bottom;Copper Fill223
213;;;81.3341;-32.1734;0;Bottom;Via12
214;;;90.5138;-40.1318;0;Bottom;TXT19
215;;;9.1694;-19.3773;0;Bottom;Copper Fill53
216;;;55.3974;-30.9089;0;Bottom;Copper Fill24
217;;;95.3262;-49.2223;0;Bottom;Copper Fill148
218;;;95.3262;-21.3839;0;Bottom;Copper Fill220
219;;;37.0078;-17.8787;0;Bottom;Copper Fill221
220;;;77.4573;-24.1779;0;Bottom;Copper Fill98
221;180k;0805 [SMD];52.7591;-6.38318;90;Top;R3
222;;;95.3262;-36.6239;0;Bottom;Copper Fill25
223;;;39.1922;-37.4875;0;Bottom;Copper Fill179
224;;;61.2569;-45.8965;-90;Bottom;TXT19
225;;;7.8994;-35.9127;0;Bottom;Copper Fill189
226;;;81.1022;-37.8685;0;Bottom;Copper Fill163
227;;;9.779;-43.6597;0;Bottom;Copper Fill155
228;;;14.6177;-29.2579;0;Bottom;Copper Fill291
229;;;55.7276;-29.4357;0;Bottom;Copper Fill185
230;;;23.5077;-7.8965;0;Bottom;Copper Fill85
231;;;90.5138;-42.6718;0;Bottom;TXT19
232;;;22.6568;-51.4575;0;Bottom;Copper Fill3
233;;;58.0644;-17.2183;0;Bottom;Copper Fill232
234;;;29.4149;-47.6956;-90;Bottom;TXT19
235;;;67.818;-11.4525;0;Bottom;Copper Fill247
236;;;55.372;-27.1624;0;Bottom;Copper Fill274
237;;;29.6418;-45.4885;0;Bottom;Copper Fill16
238;;so014;81.3342;-31.1634;0;Top;IC2
239;;;93.1672;-7.452;0;Bottom;Copper Fill301
240;;;87.8332;-30.312;0;Bottom;Copper Fill83
241;;;95.631;-15.8467;0;Bottom;Copper Fill68
242;;;23.9268;-7.452;0;Bottom;Copper Fill270
243;;;90.5138;-9.65828;0;Bottom;TXT19
244;;;66.0908;-50.6955;0;Bottom;Copper Fill147
245;;;21.844;-20.6473;0;Bottom;Copper Fill56
246;;;97.3328;-3.0324;0;Bottom;Copper Fill277
247;;;23.5491;-2.96335;0;Bottom;Via29
248;;;11.0744;-43.3549;0;Bottom;Copper Fill157
249;;;56.5277;-11.0969;0;Bottom;Copper Fill127
250;;;89.5858;-25.6511;0;Bottom;Copper Fill34
251;;;14.0208;-24.2541;0;Bottom;Copper Fill39
252;;;90.5138;-29.9718;0;Bottom;TXT19
253;;so014;67.3642;-31.1634;0;Top;IC1
254;;;64.1477;-10.2079;0;Bottom;Copper Fill310
255;;;43.7896;-47.8507;0;Bottom;Copper Fill5
256;;;81.72;-47.7896;-90;Bottom;TXT19
257;;;49.0982;-30.9724;0;Bottom;Copper Fill118
258;;;97.5614;-42.5421;0;Bottom;Copper Fill6
259;;;36.8841;-4.23335;0;Bottom;Via10
260;;;66.6877;-11.0969;0;Bottom;Copper Fill132
261;;;77.9018;-24.6224;0;Bottom;Copper Fill100
262;;;53.9877;-10.2079;0;Bottom;Copper Fill307
263;;;77.5241;-19.4734;0;Bottom;Via23
264;;;97.7773;-2.5879;0;Bottom;Copper Fill94
265;;;73.4568;-31.3407;0;Bottom;Copper Fill207
266;;;4.191;-2.6133;0;Bottom;Copper Fill76
267;;;77.4573;-19.9869;0;Bottom;Copper Fill287
268;;;48.9077;-10.2079;0;Bottom;Copper Fill306
269;;;14.1732;-29.7024;0;Bottom;Copper Fill110
270;;;91.7956;-12.9511;0;Bottom;Copper Fill72
271;;;20.1168;-51.4575;0;Bottom;Copper Fill2
272;;;77.4573;-24.1779;0;Bottom;Copper Fill280
273;;;50.1904;-20.0631;0;Bottom;Copper Fill227
274;;;64.1604;-6.3979;0;Bottom;Copper Fill255
275;;;77.0128;-19.5424;0;Bottom;Copper Fill288
276;;;70.5391;-10.5834;0;Bottom;Via34
277;;;45.8216;-32.3821;0;Bottom;Copper Fill204
278;;;79.18;-47.7896;-90;Bottom;TXT19
279;;;14.6591;-29.6334;0;Bottom;Via35
280;;;38.2778;-11.4271;0;Bottom;Copper Fill248
281;;;24.892;-37.4621;0;Bottom;Copper Fill193
282;;;1.6256;-45.4377;0;Bottom;Copper Fill143
283;;;91.5162;-14.8815;0;Bottom;Copper Fill69
284;;;36.8841;-6.77335;0;Bottom;Via8
285;;;55.3212;-17.0659;0;Bottom;Copper Fill233
286;;;36.8841;-13.1234;0;Bottom;Via3
287;;;95.3262;-31.5439;0;Bottom;Copper Fill206
288;;;95.3262;-11.2239;0;Bottom;Copper Fill73
289;;;23.5077;-3.4769;0;Bottom;Copper Fill297
290;;;95.3262;-29.0039;0;Bottom;Copper Fill30
291;;;16.5608;-24.2541;0;Bottom;Copper Fill40
292;;;95.631;-13.2813;0;Bottom;Copper Fill71
293;;;54.5084;-27.1624;0;Bottom;Copper Fill91
294;330k;0805 [SMD];65.4592;-14.0032;-90;Top;R14
295;;;12.319;-43.0247;0;Bottom;Copper Fill158
296;;;23.5491;-7.40835;0;Bottom;Via30
297;;;63.8813;-45.8494;-90;Bottom;TXT19
298;;;81.2673;-31.7979;0;Bottom;Copper Fill129
299;180k;0805 [SMD];67.9991;-6.38318;90;Top;R15
300;;;90.5138;-27.4882;0;Bottom;TXT19
301;;;61.6077;-10.2079;0;Bottom;Copper Fill312
302;;;77.6732;-11.9224;0;Bottom;Copper Fill102
303;;;32.1564;-39.5703;0;Bottom;Copper Fill174
304;;;70.4977;-11.0969;0;Bottom;Copper Fill136
305;;;51.4477;-10.2079;0;Bottom;Copper Fill305
306;;;78.1177;-12.3669;0;Bottom;Copper Fill283
307;;;36.8841;-5.50335;0;Bottom;Via9
308;;;19.3294;-41.1705;0;Bottom;Copper Fill167
309;;;47.0662;-39.8751;0;Bottom;Copper Fill20
310;;;64.1891;-10.5834;0;Bottom;Via19
311;;;47.6791;-2.32835;0;Bottom;Via31
312;;;69.215;-31.8741;0;Bottom;Copper Fill205
313;;;98.6693;-30.2596;0;Bottom;TXT19
314;;;90.5138;-24.9968;0;Bottom;TXT19
315;;;27.8531;-27.0933;0;Bottom;TXT18
316;;;73.9493;-5.40915;-90;Bottom;TXT19
317;;;23.5077;-3.4769;0;Bottom;Copper Fill112
318;;;26.7621;-47.0408;-90;Bottom;TXT19
319;;;64.1477;-11.0969;0;Bottom;Copper Fill133
320;;;29.2608;-24.2541;0;Bottom;Copper Fill45
321;;;75.3872;-48.9429;0;Bottom;Copper Fill150
322;;THT;31.8042;-23.2833;-90;Bottom;J1
323;;;43.4086;-15.0339;0;Bottom;Copper Fill234
324;330k;0805 [SMD];67.9992;-14.0032;-90;Top;R16
325;;;53.4924;-11.3001;0;Bottom;Copper Fill77
326;;;60.5536;-16.8627;0;Bottom;Copper Fill235
327;;;36.8808;-37.4875;0;Bottom;Copper Fill178
328;;;89.8906;-24.3557;0;Bottom;Copper Fill36
329;;;36.8841;-8.04335;0;Bottom;Via6
330;;;78.1177;-11.4779;0;Bottom;Copper Fill284
331;;;39.751;-33.4489;0;Bottom;Copper Fill54
332;;;62.103;-24.0001;0;Bottom;Copper Fill35
333;;;88.2777;-29.8929;0;Bottom;Copper Fill266
334;;;46.5328;-21.5109;0;Bottom;Copper Fill224
335;;;72.3773;-31.1629;0;Bottom;Copper Fill123
336;;;84.3165;-47.7896;-90;Bottom;TXT19
337;;;63.0936;-16.5579;0;Bottom;Copper Fill237
338;;;70.2818;-25.0415;0;Bottom;Copper Fill213
339;;;97.3074;-7.452;0;Bottom;Copper Fill120
340;;;98.6693;-17.5975;0;Bottom;TXT19
341;;;98.6693;-40.4196;0;Bottom;TXT19
342;;;14.6177;-29.2579;0;Bottom;Copper Fill109
343;;;98.6693;-48.0586;0;Bottom;TXT19
344;;;50.9524;-36.5223;0;Bottom;Copper Fill181
345;;;72.3773;-32.0265;0;Bottom;Copper Fill122
346;;;98.2218;-3.0324;0;Bottom;Copper Fill96
347;;;91.567;-43.7359;0;Bottom;Copper Fill161
348;;;47.6377;-1.9529;0;Bottom;Copper Fill138
349;;;90.5138;-22.3761;0;Bottom;TXT19
350;;;77.9018;-19.5424;0;Bottom;Copper Fill107
351;;;77.4573;-25.0669;0;Bottom;Copper Fill97
352;;;86.1568;-49.2477;0;Bottom;Copper Fill152
353;;;90.5138;-19.8406;0;Bottom;TXT19
354;;;17.399;-41.7547;0;Bottom;Copper Fill166
355;180k;0805 [SMD];57.8391;-6.38318;90;Top;R7
356;;;46.4566;-33.6267;0;Bottom;Copper Fill203
357;;;95.3262;-16.3039;0;Bottom;Copper Fill236
358;;;89.9456;-7.11828;0;Bottom;TXT19
359;;;41.8973;-0.7083;0;Bottom;Copper Fill78
360;;;47.6377;-2.8165;0;Bottom;Copper Fill316
361;;;59.1091;-10.5834;0;Bottom;Via17
362;;;27.9942;-29.9155;0;Bottom;TXT18
363;;;90.8304;-19.9107;0;Bottom;Copper Fill65
364;;;77.0128;-24.6224;0;Bottom;Copper Fill99
365;;;88.6968;-30.312;0;Bottom;Copper Fill84
366;;;84.6582;-35.2015;0;Bottom;Copper Fill201
367;;;34.6235;-9.47286;0;Bottom;TXT3
368;;;95.3262;-8.6839;0;Bottom;Copper Fill75
369;;;93.9673;-3.4769;0;Bottom;Copper Fill140
370;;;16.1798;-15.6435;0;Bottom;Copper Fill225
371;;;14.6177;-30.1469;0;Bottom;Copper Fill108
372;;;98.7625;-9.94614;0;Bottom;TXT19
373;;;45.4406;-36.7255;0;Bottom;Copper Fill194
374;;;77.4573;-25.0669;0;Bottom;Copper Fill279
375;;;59.6138;-22.2475;0;Bottom;Copper Fill218
376;;;79.8576;-26.8195;0;Bottom;Copper Fill198
377;;;95.3262;-39.1639;0;Bottom;Copper Fill175
378;;;93.9673;-6.6519;0;Bottom;Copper Fill117
379;;;64.6684;-35.3539;0;Bottom;Copper Fill173
380;;;26.924;-40.2053;0;Bottom;Copper Fill171
381;;;98.2218;-3.0324;0;Bottom;Copper Fill278
382;;;15.0368;-29.7024;0;Bottom;Copper Fill293
383;;;61.6491;-10.5834;0;Bottom;Via18
384;;;51.2285;-48.0494;-90;Bottom;TXT19
385;;;31.8008;-24.2541;0;Bottom;Copper Fill62
386;;;24.1808;-24.2541;0;Bottom;Copper Fill59
387;;;97.3328;-3.0324;0;Bottom;Copper Fill296
388;;;93.9673;-3.4769;0;Bottom;Copper Fill159
389;;;56.5277;-10.2079;0;Bottom;Copper Fill327
390;;;73.9493;-5.40915;-90;Bottom;TXT19
391;;;70.9168;-10.6524;0;Bottom;Copper Fill156
392;;;12.9794;-36.5477;0;Bottom;Copper Fill210
393;;;29.4894;-39.9005;0;Bottom;Copper Fill191
394;;;37.0078;-17.8787;0;Bottom;Copper Fill240
395;;;25.9334;-12.0113;0;Bottom;Copper Fill281
396;;;38.9128;-8.8617;0;Bottom;Copper Fill277
397;;;4.191;-2.6133;0;Bottom;Copper Fill93
398;;;91.7956;-12.9511;0;Bottom;Copper Fill89
399;;;53.4924;-26.5401;0;Bottom;Copper Fill94
400;;;95.631;-23.4413;0;Bottom;Copper Fill65
385;;;23.5077;-7.8965;0;Bottom;Copper Fill267
386;;;1.7272;-23.3524;0;Bottom;Copper Fill296
387;;;62.738;-11.4525;0;Bottom;Copper Fill245
388;;;7.91792;-5.74702;-90;Bottom;TXT20
389;;;5.715;-13.7131;0;Bottom;Copper Fill51
390;;;36.8841;-10.5834;0;Bottom;Via5
391;;THT;31.8042;-38.5233;90;Bottom;J2
392;;;15.0368;-29.7024;0;Bottom;Copper Fill111
393;;;55.372;-27.1624;0;Bottom;Copper Fill92
394;;;38.608;-10.1825;0;Bottom;Copper Fill249
395;;;95.3262;-8.6839;0;Bottom;Copper Fill257
396;;;12.7381;-9.5729;0;Bottom;Copper Fill264
397;;;97.7773;-2.5879;0;Bottom;Copper Fill276
398;;;36.8841;-11.8534;0;Bottom;Via4
399;;;96.5073;-6.6519;0;Bottom;Copper Fill119
400;;;97.3074;-7.452;0;Bottom;Copper Fill304
401;;;53.7685;-48.0494;-90;Bottom;TXT19
402;;;35.6141;-12.4884;0;Bottom;Via7
403;;;66.7291;-10.5834;0;Bottom;Via20
404;;;69.4182;-23.6953;0;Bottom;Copper Fill231
405;;;27.7368;-51.4575;0;Bottom;Copper Fill5
406;;;78.1177;-11.4779;0;Bottom;Copper Fill303
407;;;90.5138;-47.7707;0;Bottom;TXT19
408;;;90.5138;-9.65828;0;Bottom;TXT19
409;;;90.5138;-32.4553;0;Bottom;TXT19
410;;;98.7625;-12.5175;0;Bottom;TXT19
411;;;76.64;-47.7896;-90;Bottom;TXT19
412;;;23.0632;-3.0324;0;Bottom;Copper Fill317
413;;;48.0568;-2.372;0;Bottom;Copper Fill336
414;;;37.6317;-7.61951;0;Bottom;TXT6
415;180k;0805 [SMD];52.7591;-6.38318;90;Top;R3
416;;;58.0644;-17.2183;0;Bottom;Copper Fill251
417;330k;0805 [SMD];67.9992;-14.0032;-90;Top;R16
418;;;95.631;-20.9013;0;Bottom;Copper Fill81
419;;;40.2844;-46.7585;0;Bottom;Copper Fill30
420;;;90.5138;-37.5918;0;Bottom;TXT19
421;;;14.6591;-29.6334;0;Bottom;Via35
422;;;23.0632;-7.452;0;Bottom;Copper Fill288
423;;;24.4094;-20.9521;0;Bottom;Copper Fill73
424;;;55.3974;-30.9089;0;Bottom;Copper Fill42
425;;;85.1408;-51.4575;0;Bottom;Copper Fill25
426;;;36.8841;-11.8534;0;Bottom;Via4
427;;;86.1568;-49.2477;0;Bottom;Copper Fill171
428;;;89.8906;-24.3557;0;Bottom;Copper Fill52
429;330k;0805 [SMD];50.2192;-14.0032;-90;Top;R2
430;;;43.5356;-22.1205;0;Bottom;Copper Fill241
431;;;55.7276;-29.4357;0;Bottom;Copper Fill204
432;;;69.0011;-47.7896;-90;Bottom;TXT19
433;;;12.7381;-7.8965;0;Bottom;Copper Fill97
434;;;15.4755;-5.53168;-90;Bottom;TXT20
435;;;12.9587;-5.04509;-90;Bottom;TXT20
436;;;48.5756;-48.0494;-90;Bottom;TXT19
437;;;1.7272;-23.3524;0;Bottom;Copper Fill315
438;;;10.414;-36.2429;0;Bottom;Copper Fill209
439;180k;0805 [SMD];62.9191;-6.38318;90;Top;R11
440;;;77.6732;-11.9224;0;Bottom;Copper Fill119
441;;;90.2208;-23.1111;0;Bottom;Copper Fill66
442;;;60.5536;-16.8627;0;Bottom;Copper Fill254
443;;;62.5094;-49.2985;0;Bottom;Copper Fill34
444;;;23.9268;-7.452;0;Bottom;Copper Fill289
445;;;15.494;-36.8779;0;Bottom;Copper Fill211
446;;;26.0096;-45.4377;0;Bottom;Copper Fill1
447;;;12.7381;-9.5729;0;Bottom;Copper Fill96
448;330k;0805 [SMD];52.7592;-14.0032;-90;Top;R4
449;;;47.6377;-1.9529;0;Bottom;Copper Fill157
450;;;94.0341;-2.96335;0;Bottom;Via26
451;;;90.5138;-24.9968;0;Bottom;TXT19
452;;;29.4149;-47.6956;-90;Bottom;TXT19
453;;;77.4573;-19.9869;0;Bottom;Copper Fill306
454;;;97.7773;-3.4769;0;Bottom;Copper Fill110
455;;;77.4573;-24.1779;0;Bottom;Copper Fill299
456;180k;0805 [SMD];60.3791;-6.38318;90;Top;R9
457;;;97.7773;-3.4769;0;Bottom;Copper Fill294
458;;;70.5391;-10.5834;0;Bottom;Via34
459;;;40.4368;-51.4575;0;Bottom;Copper Fill10
460;;;54.9529;-26.7179;0;Bottom;Copper Fill291
461;;;93.9673;-6.6519;0;Bottom;Copper Fill319
462;;;24.4348;-30.9089;0;Bottom;Copper Fill195
463;;;18.1849;-5.52717;-90;Bottom;TXT20
464;;;53.5432;-18.3613;0;Bottom;Copper Fill249
465;;;73.1266;-49.2985;0;Bottom;Copper Fill168
466;;so014;81.3342;-31.1634;0;Top;IC2
467;;;95.631;-18.3613;0;Bottom;Copper Fill83
468;;;7.8994;-43.9899;0;Bottom;Copper Fill173
469;;;95.3262;-49.2223;0;Bottom;Copper Fill167
402;;;23.0632;-7.452;0;Bottom;Copper Fill269
403;;;66.6877;-10.2079;0;Bottom;Copper Fill309
404;;;77.0128;-24.6224;0;Bottom;Copper Fill281
405;;;34.3408;-24.2541;0;Bottom;Copper Fill47
406;;;83.6168;-26.5401;0;Bottom;Copper Fill210
407;;;50.8964;-26.4583;0;Bottom;Part1
408;;;66.7291;-10.5834;0;Bottom;Via20
409;;;54.0291;-10.5834;0;Bottom;Via15
410;;;2.5781;-24.1779;0;Bottom;Copper Fill294
411;;;77.4573;-19.9869;0;Bottom;Copper Fill104
412;;;97.7773;-3.4769;0;Bottom;Copper Fill93
413;;;61.341;-33.4489;0;Bottom;Copper Fill195
414;;;32.6898;-45.7933;0;Bottom;Copper Fill7
415;330k;0805 [SMD];57.8392;-14.0032;-90;Top;R8
416;;;97.8441;-2.96335;0;Bottom;Via27
417;;;43.8691;-11.8534;0;Bottom;Via21
418;;;71.1962;-27.8101;0;Bottom;Copper Fill209
419;;;10.414;-36.2429;0;Bottom;Copper Fill190
420;;;95.3262;-31.5439;0;Bottom;Copper Fill29
421;;;55.118;-11.4525;0;Bottom;Copper Fill242
422;;;35.6141;-12.4884;0;Bottom;Via7
423;;;62.2808;-33.0171;0;Bottom;Copper Fill196
424;;;89.7128;-27.0989;0;Bottom;Copper Fill32
425;;;65.5574;-16.2531;0;Bottom;Copper Fill238
426;;;53.5432;-18.3613;0;Bottom;Copper Fill230
427;;;95.3262;-41.7039;0;Bottom;Copper Fill19
428;;;31.9549;-47.6956;-90;Bottom;TXT19
429;;;95.3262;-11.2239;0;Bottom;Copper Fill240
430;;;29.4894;-39.9005;0;Bottom;Copper Fill172
431;330k;0805 [SMD];55.2992;-14.0032;-90;Top;R6
432;;;51.0286;-19.5043;0;Bottom;Copper Fill229
433;;;51.4604;-6.3979;0;Bottom;Copper Fill250
434;;;41.9641;-1.05835;0;Bottom;Via38
435;;;61.6204;-6.3979;0;Bottom;Copper Fill254
436;;;10.5156;-45.6917;0;Bottom;Copper Fill145
437;;;27.9908;-30.9089;0;Bottom;Copper Fill23
438;;;12.7381;-7.8965;0;Bottom;Copper Fill80
439;;;48.5756;-48.0494;-90;Bottom;TXT19
440;;;88.3191;-30.2684;0;Bottom;Via32
441;;;78.232;-48.9175;0;Bottom;Copper Fill151
442;;;93.9673;-2.5879;0;Bottom;Copper Fill141
443;;;7.8994;-43.9899;0;Bottom;Copper Fill154
444;;;77.4573;-19.0979;0;Bottom;Copper Fill105
445;;;47.2694;-47.3935;0;Bottom;Copper Fill11
446;;;98.6693;-32.7432;0;Bottom;TXT19
447;;;54.9529;-26.7179;0;Bottom;Copper Fill90
448;;;90.5138;-45.3247;0;Bottom;TXT19
449;;;18.1849;-5.52717;-90;Bottom;TXT20
450;;;39.5478;-6.3217;0;Bottom;Copper Fill260
451;;;95.3262;-46.7839;0;Bottom;Copper Fill17

View File

@ -6,7 +6,7 @@
MTversion = 2.25
queryCommand = "Q"
signature = "speeduino 201801-dev"
signature = "speeduino 201803-dev"
versionInfo = "S" ;This info is what is displayed to user
[TunerStudio]
@ -26,6 +26,9 @@
;settingOption = BOOSTPSI, "PSI"
settingGroup = enablehardware_test, "Enable Hardware Test Page"
settingGroup = resetcontrol_group, "Reset Control Features"
settingOption = resetcontrol_standard, "Basic Options Only"
settingOption = resetcontrol_adv, "Advanced Features (16u2 Firmware Update Required)"
[PcVariables]
; valid types: boolean, double, int, list
@ -281,10 +284,16 @@ page = 4
useResync = bits, U08, 6,[7:7], "No", "Yes"
sparkDur = scalar, U08, 7, "ms", 0.1, 0, 0, 25.5, 1 ; Spark duration
trigPatternSec = bits, U08, 8,[0:7], "Single tooth cam", "4-1 cam", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
bootloaderCaps = scalar, U08, 9, "level", 1, 0, 0, 255, 0
resetControl_custom = bits, U08, 10,[0:1], "Disabled", "Prevent When Running", "Prevent Always", "Serial Command"
resetControl_standard = bits, U08, 10,[0:1], "Disabled", "INVALID", "INVALID", "Enabled"
resetControlPin = bits, U08, 10,[2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
;Reset Control
bootloaderCaps = scalar, U08, 9, "level", 1, 0, 0, 255, 0
#if resetcontrol_adv
resetControl = bits, U08, 10,[0:1], "Disabled", "Prevent When Running", "Prevent Always", "Serial Command"
#else
resetControl = bits, U08, 10,[0:1], "Disabled", "INVALID", "INVALID", "Serial Command"
#endif
resetControlPin = bits, U08, 10,[2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
SkipCycles = scalar, U08, 11, "cycles", 1, 0, 0, 255, 0
; name = array, type, offset, shape, units, scale, translate, lo, hi, digits
@ -465,7 +474,7 @@ page = 6
; Begin fan control vairables
fanInv = bits, U08, 120, [0:0], "No", "Yes"
fanEnable = bits, U08, 120, [1:1], "Off", "On/Off"
fanPin = bits, U08, 120, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
fanPin = bits , U08, 120, [2:7], "Board Default", "INVALID", "INVALID", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "INVALID"
#if CELSIUS
fanSP = scalar, U08, 121, "C", 1.0, -40, -40, 215.0, 0
fanHyster = scalar, U08, 122, "C", 1.0, 0.0, 0.0, 40, 0
@ -728,7 +737,7 @@ page = 10
flexAdvBins = array, U08, 63, [6], "%", 1.0, 0.0, 0.0, 250.0, 0
flexAdvAdj = array, U08, 69, [6], "Deg", 1.0, 0.0, 0.0, 250.0, 0
unused11_75_192 = array, U08, 75,[117],"RPM", 100.0, 0.0, 100, 25500, 0
unused11_75_191 = array, U08, 75,[116],"RPM", 100.0, 0.0, 100, 25500, 0
;-------------------------------------------------------------------------------
@ -765,8 +774,7 @@ page = 10
requiresPowerCycle = stagedInjSizePri
requiresPowerCycle = stagedInjSizeSec
requiresPowerCycle = stagingEnabled
requiresPowerCycle = resetControl_custom
requiresPowerCycle = resetControl_standard
requiresPowerCycle = resetControl
requiresPowerCycle = resetControlPin
defaultValue = pinLayout, 1
@ -818,8 +826,7 @@ page = 10
defaultValue = VVTasOnOff, 0
defaultValue = stagingEnabled, 0
defaultValue = lnchCtrlTPS, 0
defaultValue = resetControl_custom, 0
defaultValue = resetControl_standard, 0
defaultValue = resetControl, 0
defaultValue = bootloaderCaps, 0
; defaultValue = obd_address, 0
@ -883,7 +890,7 @@ menuDialog = main
subMenu = afrTable1Tbl, "AFR Table", 5
subMenu = std_separator
subMenu = inj_trimad, "Sequential fuel trim", 9
subMenu = stagingTableDialog, "Staged Injection", 10
subMenu = stagingTableDialog, "Staged Injection", 10, { nCylinders <= 4 } ; Can't do staging on more than 4 cylinder engines
menu = "&Spark"
subMenu = sparkSettings, "Spark Settings"
@ -1114,9 +1121,11 @@ menuDialog = main
stagedInjSizePri= "Size of the primary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
stagedInjSizeSec= "Size of the secondary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
resetControl_standard = "Whether to enable reset control of the Arduino's automatic reset feature. If this feature is enabled, the selected control pin will be held high at all times. In order to update your Speeduino's firmware, you will first need to open a serial terminal and send a 'U' command so that the Arduino resets when the upload starts. The control pin should be connected to the Arduino's reset pin."
resetControl_custom = "How to control the Arduino's automatic reset feature. NOTE: Some of these settings require modifying your hardware and replacing the Arduino bootloader. See the Wiki for more details.\n\nDisabled: Allow the Arduino to reset when a new serial connection is made.\n\nPrevent When Running: Hold the control pin high while the engine is running.\n\nPrevent Always: Always hold the control pin high.\n\nSerial Command: Normally hold the control pin high, but pull it low when the 'U' serial command is issued and reset upon receiving more data."
#if resetcontrol_adv
resetControl = "How to control the Arduino's automatic reset feature. NOTE: Some of these settings require modifying your hardware and replacing the Arduino bootloader. See the Wiki for more details.\n\nDisabled: Allow the Arduino to reset when a new serial connection is made.\n\nPrevent When Running: Hold the control pin high while the engine is running.\n\nPrevent Always: Always hold the control pin high.\n\nSerial Command: Normally hold the control pin high, but pull it low when the 'U' serial command is issued and reset upon receiving more data."
#else
resetControl = "If set to Serial Command, normally hold the control pin high but pull it low when the 'U' serial command is issued and reset upon receiving more data. The control pin should be connected to the Arduino's reset pin."
#endif
resetControlPin = "The Arduino pin used to control resets."
[UserDefined]
@ -1169,18 +1178,23 @@ menuDialog = main
field = "Low (E0) ", flexFreqLow, { flexEnabled }
field = "High (E100) ", flexFreqHigh, { flexEnabled }
dialog = flexFuelWest, "", border
panel = flexFuelSettings, North
dialog = flexCurves, "", indexCard
dialog = flexFuelWest, ""
panel = flex_fuel_curve, { flexEnabled }
panel = flex_adv_curve, { flexEnabled }
dialog = flexFuelEast, ""
panel = flex_boost_curve, { flexEnabled && boostEnabled }
;dialog = flexCurves, "", indexCard
dialog = flexCurves, "", xAxis
panel = flexFuelWest, West
panel = flexFuelEast, East
dialog = flexFueling, "Fuel Sensor Settings", border
topicHelp = "http://speeduino.com/wiki/index.php/Flex_Fuel"
panel = flexFuelWest, West
panel = flexCurves, Center
;panel = flexFuelWest, West
panel = flexFuelSettings, North
panel = flexCurves, South
dialog = tacho, "Tacho"
field = "Output pin", tachoPin
@ -1290,9 +1304,11 @@ menuDialog = main
dialog = crankingEnrichDialog, "Cranking Enrichment", yAxis
panel = cranking_enrich_curve
field = "#Note"
field = "Values are specified as modifiers to the normal fueling. Eg 100% = No change."
dialog = crankingIgnOptions, "Cranking Timing", yAxis
field = "Cranking advance Angle", CrankAng
field = "Cranking advance Angle", CrankAng, { ignCranklock == 0 }
field = "Cranking bypass", ignBypassEnable
field = "Bypass output pin", ignBypassPin { ignBypassEnable }
field = "Fix cranking timing with trigger", ignCranklock, { TrigPattern == 1 || TrigPattern == 4 || TrigPattern == 10 || TrigPattern == 9 }
@ -1809,9 +1825,7 @@ menuDialog = main
dialog = reset_control, "Reset Control"
; Control type options for custom firmware
field = "Control Type", resetControl_custom, { bootloaderCaps > 0 }, { bootloaderCaps > 0 }
; Control type options for standard / unmodifyable firmware
field = "Control Type", resetControl_standard, { bootloaderCaps == 0 }, { bootloaderCaps == 0 }
field = "Control Type", resetControl
field = "Control Pin", resetControlPin
;-------------------------------------------------------------------------------
@ -1980,7 +1994,7 @@ cmdtestspk450dc = "E\x03\x0C"
; Cranking enrichment curve
curve = cranking_enrich_curve, "Cranking Enrichment Curve"
columnLabel = "Coolant", "Enrich %"
columnLabel = "Coolant", "Fuel Modifier"
xAxis = -40, 110, 9
yAxis = 0, 200, 6
xBins = crankingEnrichBins, coolant
@ -1998,23 +2012,23 @@ cmdtestspk450dc = "E\x03\x0C"
; Flex fuel correction curves
curve = flex_fuel_curve, "Flex Fuel Adjustments"
columnLabel = "Ethanol", "Fuel"
xAxis = 0, 100, 5
yAxis = 0, 255, 10
xAxis = 0, 100, 10
yAxis = 50, 250, 5
xBins = flexFuelBins, flex
yBins = flexFuelAdj
size = 400, 200
curve = flex_adv_curve, "Flex Timing Advance"
columnLabel = "Ethanol", "Advance"
xAxis = 0, 100, 5
yAxis = 0, 100, 5
xAxis = 0, 100, 10
yAxis = 0, 50, 5
xBins = flexAdvBins, flex
yBins = flexAdvAdj
size = 400, 200
curve = flex_boost_curve, "Flex Boost Adjustments"
columnLabel = "Ethanol", "Boost"
xAxis = 0, 100, 5
xAxis = 0, 100, 10
yAxis = -100, 200, 5
xBins = flexBoostBins, flex
yBins = flexBoostAdj

View File

@ -132,7 +132,7 @@ void command()
break;
case 'Q': // send code version
Serial.print("speeduino 201801-dev");
Serial.print("speeduino 201803-dev");
break;
case 'r': //New format for the optimised OutputChannels
@ -162,7 +162,7 @@ void command()
break;
case 'S': // send code version
Serial.print("Speeduino 2018.1-dev");
Serial.print("Speeduino 2018.3-dev");
currentStatus.secl = 0; //This is required in TS3 due to its stricter timings
break;

View File

@ -159,7 +159,7 @@ static inline int16_t correctionAccel()
if( BIT_CHECK(currentStatus.engine, BIT_ENGINE_ACC) )
{
//If it is currently running, check whether it should still be running or whether it's reached it's end time
if( micros() >= currentStatus.TAEEndTime )
if( micros_safe() >= currentStatus.TAEEndTime )
{
//Time to turn enrichment off
BIT_CLEAR(currentStatus.engine, BIT_ENGINE_ACC);
@ -192,7 +192,7 @@ static inline int16_t correctionAccel()
if (rateOfChange > configPage2.tpsThresh)
{
BIT_SET(currentStatus.engine, BIT_ENGINE_ACC); //Mark accleration enrichment as active.
currentStatus.TAEEndTime = micros() + ((unsigned long)configPage2.taeTime * 10000); //Set the time in the future where the enrichment will be turned off. taeTime is stored as mS / 10, so multiply it by 100 to get it in uS
currentStatus.TAEEndTime = micros_safe() + ((unsigned long)configPage2.taeTime * 10000); //Set the time in the future where the enrichment will be turned off. taeTime is stored as mS / 10, so multiply it by 100 to get it in uS
accelValue = 100 + table2D_getValue(&taeTable, currentStatus.tpsDOT);
}
}
@ -280,7 +280,7 @@ static inline bool correctionDFCO()
static inline byte correctionFlex()
{
byte flexValue = 100;
if (configPage2.flexEnabled == 1)
{
flexValue = table2D_getValue(&flexFuelTable, currentStatus.ethanolPct);

View File

@ -262,11 +262,13 @@ int getCrankAngle_missingTooth(int timePerDegree)
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
tempRevolutionOne = revolutionOne;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
int crankAngle = ((tempToothCurrentCount - 1) * triggerToothAngle) + configPage4.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = (micros() - tempToothLastToothTime);
//crankAngle += DIV_ROUND_CLOSEST(elapsedTime, timePerDegree);
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -376,8 +378,6 @@ void triggerSec_DualWheel()
if(currentStatus.hasSync == false)
{
toothLastToothTime = micros();
//CONFIRM THE BELOW! IT DOESN'T LOOK RIGHT (toothOneTime??)
//toothLastMinusOneToothTime = (toothOneTime - 6000000) / configPage4.triggerTeeth; //Fixes RPM at 10rpm until a full revolution has taken place
toothLastMinusOneToothTime = micros() - (6000000 / configPage4.triggerTeeth); //Fixes RPM at 10rpm until a full revolution has taken place
toothCurrentCount = configPage4.triggerTeeth;
@ -411,6 +411,7 @@ int getCrankAngle_DualWheel(int timePerDegree)
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
tempRevolutionOne = revolutionOne;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Handle case where the secondary tooth was the last one seen
@ -418,7 +419,6 @@ int getCrankAngle_DualWheel(int timePerDegree)
int crankAngle = ((tempToothCurrentCount - 1) * triggerToothAngle) + configPage4.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -552,11 +552,11 @@ int getCrankAngle_BasicDistributor(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
int crankAngle = ((tempToothCurrentCount - 1) * triggerToothAngle) + configPage4.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -637,6 +637,7 @@ int getCrankAngle_GM7X(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Check if the last tooth seen was the reference tooth (Number 3). All others can be calculated, but tooth 3 has a unique angle
@ -655,7 +656,6 @@ int getCrankAngle_GM7X(int timePerDegree)
}
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -964,12 +964,12 @@ int getCrankAngle_4G63(int timePerDegree)
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
tempToothLastMinusOneToothTime = toothLastMinusOneToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle; //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
unsigned long elapsedTime = micros() - tempToothLastToothTime;
//Estimate the number of degrees travelled since the last tooth}
//crankAngle += uSToDegrees(elapsedTime);
unsigned long toothTime = tempToothLastToothTime - tempToothLastMinusOneToothTime;
crankAngle += int((elapsedTime * triggerToothAngle) / toothTime);
@ -1027,7 +1027,6 @@ void triggerSetup_24X()
MAX_STALL_TIME = (3333UL * triggerToothAngle); //Minimum 50rpm. (3333uS is the time per degree at 50rpm)
if(initialisationComplete == false) { toothCurrentCount = 25; toothLastToothTime = micros(); } //Set a startup value here to avoid filter errors when starting. This MUST have the initi check to prevent the fuel pump just staying on all the time
//We set the initial tooth value to be something that should never be reached. This indicates no sync
secondDerivEnabled = false;
decoderIsSequential = true;
}
@ -1084,19 +1083,19 @@ int getCrankAngle_24X(int timePerDegree)
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
tempRevolutionOne = revolutionOne;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
int crankAngle;
if (toothCurrentCount == 0) { crankAngle = 0 + configPage4.triggerAngle; } //This is the special case to handle when the 'last tooth' seen was the cam tooth. 0 is the angle at which the crank tooth goes high (Within 360 degrees).
if (tempToothCurrentCount == 0) { crankAngle = 0 + configPage4.triggerAngle; } //This is the special case to handle when the 'last tooth' seen was the cam tooth. 0 is the angle at which the crank tooth goes high (Within 360 degrees).
else { crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle;} //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
//Sequential check (simply sets whether we're on the first or 2nd revoltuion of the cycle)
if (tempRevolutionOne) { crankAngle += 360; }
if (tempRevolutionOne == 1) { crankAngle += 360; }
if (crankAngle >= 720) { crankAngle -= 720; }
if (crankAngle > CRANK_ANGLE_MAX) { crankAngle -= CRANK_ANGLE_MAX; }
@ -1134,7 +1133,7 @@ void triggerSetup_Jeep2000()
toothAngles[11] = 474;
MAX_STALL_TIME = (3333UL * 60); //Minimum 50rpm. (3333uS is the time per degree at 50rpm). Largest gap between teeth is 60 degrees.
toothCurrentCount = 13; //We set the initial tooth value to be something that should never be reached. This indicates no sync
if(initialisationComplete == false) { toothCurrentCount = 13; toothLastToothTime = micros(); } //Set a startup value here to avoid filter errors when starting. This MUST have the initi check to prevent the fuel pump just staying on all the time
secondDerivEnabled = false;
decoderIsSequential = false;
}
@ -1189,13 +1188,14 @@ int getCrankAngle_Jeep2000(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
int crankAngle;
if (toothCurrentCount == 0) { crankAngle = 146 + configPage4.triggerAngle; } //This is the special case to handle when the 'last tooth' seen was the cam tooth. 146 is the angle at which the crank tooth goes high.
else { crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle;} //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -1303,6 +1303,7 @@ int getCrankAngle_Audi135(int timePerDegree)
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
tempRevolutionOne = revolutionOne;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Handle case where the secondary tooth was the last one seen
@ -1310,7 +1311,6 @@ int getCrankAngle_Audi135(int timePerDegree)
int crankAngle = ((tempToothCurrentCount - 1) * triggerToothAngle) + configPage4.triggerAngle; //Number of teeth that have passed since tooth 1, multiplied by the angle each tooth represents, plus the angle that tooth 1 is ATDC. This gives accuracy only to the nearest tooth.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -1397,6 +1397,7 @@ int getCrankAngle_HondaD17(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Check if the last tooth seen was the reference tooth 13 (Number 0 here). All others can be calculated, but tooth 3 has a unique angle
@ -1411,7 +1412,6 @@ int getCrankAngle_HondaD17(int timePerDegree)
}
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -1442,7 +1442,7 @@ void triggerSetup_Miata9905()
decoderIsSequential = true;
triggerActualTeeth = 8;
if(initialisationComplete == false) { secondaryToothCount = 0;toothLastToothTime = micros(); } //Set a startup value here to avoid filter errors when starting. This MUST have the initi check to prevent the fuel pump just staying on all the time
if(initialisationComplete == false) { secondaryToothCount = 0; toothLastToothTime = micros(); } //Set a startup value here to avoid filter errors when starting. This MUST have the initi check to prevent the fuel pump just staying on all the time
else { toothLastToothTime = 0; }
toothLastMinusOneToothTime = 0;
@ -1535,9 +1535,9 @@ void triggerPri_Miata9905()
toothLastMinusOneToothTime = toothLastToothTime;
toothLastToothTime = curTime;
if ( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) && configPage4.ignCranklock)
//if ( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) && configPage4.ignCranklock)
if ( currentStatus.RPM < (currentStatus.crankRPM + 100) && configPage4.ignCranklock)
{
//This operates in waasted spark mode during cranking to align with crank teeth
if( (toothCurrentCount == 1) || (toothCurrentCount == 5) ) { endCoil1Charge(); endCoil3Charge(); }
else if( (toothCurrentCount == 3) || (toothCurrentCount == 7) ) { endCoil2Charge(); endCoil4Charge(); }
}
@ -1610,12 +1610,12 @@ int getCrankAngle_Miata9905(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle; //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
unsigned long elapsedTime = micros() - tempToothLastToothTime;
//Estimate the number of degrees travelled since the last tooth}
crankAngle += uSToDegrees(elapsedTime);
if (crankAngle >= 720) { crankAngle -= 720; }
@ -1763,12 +1763,12 @@ int getCrankAngle_MazdaAU(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle; //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
//Estimate the number of degrees travelled since the last tooth}
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -1832,6 +1832,7 @@ int getCrankAngle_non360(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Handle case where the secondary tooth was the last one seen
@ -1842,7 +1843,6 @@ int getCrankAngle_non360(int timePerDegree)
crankAngle = (crankAngle / configPage4.TrigAngMul) + configPage4.triggerAngle; //Have to divide by the multiplier to get back to actual crank angle.
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -2039,11 +2039,12 @@ int getCrankAngle_Nissan360(int timePerDegree)
tempToothLastToothTime = toothLastToothTime;
tempToothLastMinusOneToothTime = toothLastMinusOneToothTime;
tempToothCurrentCount = toothCurrentCount;
unsigned long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = ( (tempToothCurrentCount - 1) * 2) + configPage4.triggerAngle;
unsigned long halfTooth = (tempToothLastToothTime - tempToothLastMinusOneToothTime) >> 1;
if ( (micros() - tempToothLastToothTime) > halfTooth)
if (elapsedTime > halfTooth)
{
//Means we're over halfway to the next tooth, so add on 1 degree
crankAngle += 1;
@ -2202,12 +2203,12 @@ int getCrankAngle_Subaru67(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = toothAngles[(tempToothCurrentCount - 1)] + configPage4.triggerAngle; //Perform a lookup of the fixed toothAngles array to find what the angle of the last tooth passed was.
//Estimate the number of degrees travelled since the last tooth}
unsigned long elapsedTime = micros() - tempToothLastToothTime;
//Estimate the number of degrees travelled since the last tooth}
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -2307,11 +2308,11 @@ void triggerPri_Daihatsu()
//Aim for tooth times less than about 60 degrees
if(configPage2.nCylinders == 3)
{
targetTime = (toothLastToothTime - toothLastMinusOneToothTime) >> 2; //Teeth are 240 degrees apart for 3 cylinder. 240/3 = 60
targetTime = (toothLastToothTime - toothLastMinusOneToothTime) / 4; //Teeth are 240 degrees apart for 3 cylinder. 240/4 = 60
}
else
{
targetTime = ((toothLastToothTime - toothLastMinusOneToothTime) * 3) >> 4; //Teeth are 180 degrees apart for 4 cylinder. (180*3)/8 = 67
targetTime = ((toothLastToothTime - toothLastMinusOneToothTime) * 3) / 8; //Teeth are 180 degrees apart for 4 cylinder. (180*3)/8 = 67
}
if(curGap < targetTime)
{
@ -2366,11 +2367,12 @@ int getCrankAngle_Daihatsu(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
crankAngle = toothAngles[tempToothCurrentCount-1] + configPage4.triggerAngle; //Crank angle of the last tooth seen
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
@ -2495,6 +2497,7 @@ int getCrankAngle_Harley(int timePerDegree)
noInterrupts();
tempToothCurrentCount = toothCurrentCount;
tempToothLastToothTime = toothLastToothTime;
long elapsedTime = (micros() - tempToothLastToothTime); //micros() is no longer interrupt safe
interrupts();
//Check if the last tooth seen was the reference tooth (Number 3). All others can be calculated, but tooth 3 has a unique angle
@ -2508,7 +2511,6 @@ int getCrankAngle_Harley(int timePerDegree)
}
//Estimate the number of degrees travelled since the last tooth}
long elapsedTime = micros() - tempToothLastToothTime;
if (elapsedTime < SHRT_MAX ) {
crankAngle += div((int)elapsedTime, timePerDegree).quot; //This option is much faster, but only available for smaller values of elapsedTime
}

View File

@ -12,15 +12,19 @@
#define BOARD_NR_GPIO_PINS 62
#define LED_BUILTIN 13
#define CORE_AVR
//#define TIMER5_MICROS
#elif defined(CORE_TEENSY)
#define BOARD_DIGITAL_GPIO_PINS 34
#define BOARD_NR_GPIO_PINS 34
#elif defined(STM32_MCU_SERIES) || defined(ARDUINO_ARCH_STM32) || defined(__STM32F1__) || defined(STM32F4) || defined(STM32)
#define CORE_STM32
#define word(h, l) ((h << 8) | l) //word() function not defined for this platform in the main library
#ifndef word
#define word(h, l) ((h << 8) | l) //word() function not defined for this platform in the main library
#endif
#if defined (STM32F1) || defined(__STM32F1__)
#define BOARD_DIGITAL_GPIO_PINS 34
#undef BOARD_NR_GPIO_PINS //This is declared as 49 in .../framework-arduinoststm32/STM32F1/variants/generic_stm32f103r8/board/board.h
#define BOARD_NR_GPIO_PINS 34
#ifndef LED_BUILTIN
#define LED_BUILTIN PB1 //Maple Mini
@ -37,14 +41,12 @@
#endif
extern "C" char* sbrk(int incr); //Used to freeRam
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
//inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
#if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
#define portOutputRegister(port) (volatile byte *)( &(port->ODR) )
#define portInputRegister(port) (volatile byte *)( &(port->IDR) )
#else //libmaple core aka STM32DUINO
//These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value
#undef portOutputRegister
#undef portInputRegister
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) )
#define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) )
#endif
@ -57,6 +59,8 @@
#define BIT_CLEAR(a,b) ((a) &= ~(1<<(b)))
#define BIT_CHECK(var,pos) !!((var) & (1<<(pos)))
#define interruptSafe(c) noInterrupts(); c interrupts(); //Wraps any code between nointerrupt and interrupt calls
#define MS_IN_MINUTE 60000
#define US_IN_MINUTE 60000000
@ -258,6 +262,8 @@ int ignition4EndAngle = 0;
//This is used across multiple files
unsigned long revolutionTime; //The time in uS that one revolution would take at current speed (The time tooth 1 was last seen, minus the time it was seen prior to that)
volatile unsigned long timer5_overflow_count = 0; //Increments every time counter 5 overflows. Used for the fast version of micros()
volatile unsigned long ms_counter = 0; //A counter that increments once per ms
//This needs to be here because using the config page directly can prevent burning the setting
byte resetControl = RESET_CONTROL_DISABLED;
@ -693,7 +699,7 @@ struct config10 {
uint8_t flexAdvAdj[6]; //Additional advance (in degrees) @ current ethanol (typically 0 @ 0%, 10-20 @ 100%)
//And another three corn rows die.
byte unused11_75_192[117];
byte unused11_75_191[117];
#if defined(CORE_AVR)
};

View File

@ -321,7 +321,7 @@ static inline byte isStepperHomed()
digitalWrite(pinStepperDir, STEPPER_BACKWARD); //Sets stepper direction to backwards
digitalWrite(pinStepperEnable, LOW); //Enable the DRV8825
digitalWrite(pinStepperStep, HIGH);
idleStepper.stepStartTime = micros();
idleStepper.stepStartTime = micros_safe();
idleStepper.stepperStatus = STEPPING;
completedHomeSteps++;
idleOn = true;
@ -341,13 +341,13 @@ static inline byte checkForStepping()
bool isStepping = false;
if( (idleStepper.stepperStatus == STEPPING) || (idleStepper.stepperStatus == COOLING) )
{
if(micros() > (idleStepper.stepStartTime + iacStepTime) )
if(micros_safe() > (idleStepper.stepStartTime + iacStepTime) )
{
if(idleStepper.stepperStatus == STEPPING)
{
//Means we're currently in a step, but it needs to be turned off
digitalWrite(pinStepperStep, LOW); //Turn off the step
idleStepper.stepStartTime = micros();
idleStepper.stepStartTime = micros_safe();
idleStepper.stepperStatus = COOLING; //'Cooling' is the time the stepper needs to sit in LOW state before the next step can be made
isStepping = true;
}
@ -379,7 +379,7 @@ static inline void doStep()
digitalWrite(pinStepperEnable, LOW); //Enable the DRV8825
digitalWrite(pinStepperStep, HIGH);
idleStepper.stepStartTime = micros();
idleStepper.stepStartTime = micros_safe();
idleStepper.stepperStatus = STEPPING;
idleOn = true;
}

View File

@ -1,6 +1,9 @@
#ifndef SCHEDULEDIO_H
#define SCHEDULEDIO_H
//If coil inverse is on, set the output low, else set it high
//#define beginCoil1Charge() { configPage4.IgInv == 1 ? *ign1_pin_port &= ~(ign1_pin_mask); : *ign1_pin_port |= (ign1_pin_mask); } TACH_PULSE_LOW();
inline void beginCoil1Charge();
inline void endCoil1Charge();
@ -16,6 +19,15 @@ inline void endCoil4Charge();
inline void beginCoil5Charge();
inline void endCoil5Charge();
inline void beginCoil6Charge();
inline void endCoil6Charge();
inline void beginCoil7Charge();
inline void endCoil7Charge();
inline void beginCoil8Charge();
inline void endCoil8Charge();
//The following functions are used specifically for the trailing coil on rotary engines. They are separate as they also control the switching of the trailing select pin
inline void beginTrailingCoilCharge();
inline void endTrailingCoilCharge1();

View File

@ -20,6 +20,15 @@ volatile bool tachoAlt = true;
inline void beginCoil5Charge() { digitalWrite(pinCoil5, coilHIGH); TACH_PULSE_LOW(); }
inline void endCoil5Charge() { digitalWrite(pinCoil5, coilLOW); TACH_PULSE_HIGH(); }
inline void beginCoil6Charge() { digitalWrite(pinCoil6, coilHIGH); TACH_PULSE_LOW(); }
inline void endCoil6Charge() { digitalWrite(pinCoil6, coilLOW); TACH_PULSE_HIGH(); }
inline void beginCoil7Charge() { digitalWrite(pinCoil7, coilHIGH); TACH_PULSE_LOW(); }
inline void endCoil7Charge() { digitalWrite(pinCoil7, coilLOW); TACH_PULSE_HIGH(); }
inline void beginCoil8Charge() { digitalWrite(pinCoil8, coilHIGH); TACH_PULSE_LOW(); }
inline void endCoil8Charge() { digitalWrite(pinCoil8, coilLOW); TACH_PULSE_HIGH(); }
inline void beginTrailingCoilCharge() { digitalWrite(pinCoil2, coilHIGH); }
inline void endTrailingCoilCharge1() { digitalWrite(pinCoil2, coilLOW); *ign3_pin_port |= ign3_pin_mask; } //Sets ign3 (Trailing select) high
inline void endTrailingCoilCharge2() { digitalWrite(pinCoil2, coilLOW); *ign3_pin_port &= ~(ign3_pin_mask); } //sets ign3 (Trailing select) low

View File

@ -21,7 +21,7 @@ void initialiseSchedulers()
TCCR3B = (1 << CS12); //Timer3 Control Reg B: Timer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
//TCCR3B = 0x03; //Timer3 Control Reg B: Timer Prescaler set to 64. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
//Ignition Schedules, which uses timer 5
//Ignition Schedules, which uses timer 5. This is also used by the fast version of micros(). If the speed of this timer is changed from 4uS ticks, that MUST be changed as well. See globals.h and timers.ino
TCCR5B = 0x00; //Disable Timer5 while we set it up
TCNT5 = 0; //Reset Timer Count
TIFR5 = 0x00; //Timer5 INT Flag Reg: Clear Timer Overflow Flag
@ -29,6 +29,11 @@ void initialiseSchedulers()
//TCCR5B = (1 << CS12); //Timer5 Control Reg B: Timer Prescaler set to 256. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
TCCR5B = 0x03; //aka Divisor = 64 = 490.1Hz
#if defined(TIMER5_MICROS)
TIMSK5 |= (1 << TOIE5); //Enable the timer5 overflow interrupt (See timers.ino for ISR)
TIMSK0 &= ~_BV(TOIE0); // disable timer0 overflow interrupt
#endif
//The remaining Schedules (Schedules 4 for fuel and ignition) use Timer4
TCCR4B = 0x00; //Disable Timer4 while we set it up
TCNT4 = 0; //Reset Timer Count

View File

@ -133,6 +133,12 @@ void (*ign4StartFunction)();
void (*ign4EndFunction)();
void (*ign5StartFunction)();
void (*ign5EndFunction)();
void (*ign6StartFunction)();
void (*ign6EndFunction)();
void (*ign7StartFunction)();
void (*ign7EndFunction)();
void (*ign8StartFunction)();
void (*ign8EndFunction)();
volatile int timePerDegree;
byte degreesPerLoop; //The number of crank degrees that pass for each mainloop of the program
@ -659,6 +665,12 @@ void setup()
ign4EndFunction = endCoil4Charge;
ign5StartFunction = beginCoil5Charge;
ign5EndFunction = endCoil5Charge;
ign6StartFunction = beginCoil6Charge;
ign6EndFunction = endCoil6Charge;
ign7StartFunction = beginCoil7Charge;
ign7EndFunction = endCoil7Charge;
ign8StartFunction = beginCoil8Charge;
ign8EndFunction = endCoil8Charge;
break;
case IGN_MODE_ROTARY:
@ -742,7 +754,7 @@ void loop()
// if (configPage2.displayType && (mainLoopCount & 255) == 1) { updateDisplay();}
previousLoopTime = currentLoopTime;
currentLoopTime = micros();
currentLoopTime = micros_safe();
unsigned long timeToLastTooth = (currentLoopTime - toothLastToothTime);
if ( (timeToLastTooth < MAX_STALL_TIME) || (toothLastToothTime > currentLoopTime) ) //Check how long ago the last tooth was seen compared to now. If it was more than half a second ago then the engine is probably stopped. toothLastToothTime can be greater than currentLoopTime if a pulse occurs between getting the lastest time and doing the comparison
{
@ -1049,7 +1061,8 @@ void loop()
}
else
{
long rpm_adjust = ((long)(micros() - toothOneTime) * (long)currentStatus.rpmDOT) / 1000000; //Take into account any likely accleration that has occurred since the last full revolution completed
interruptSafe(long elapsedTime = (micros() - toothOneTime);) //micros() is no longer interrupt safe
long rpm_adjust = (elapsedTime * (long)currentStatus.rpmDOT) / 1000000; //Take into account any likely accleration that has occurred since the last full revolution completed
timePerDegree = ldiv( 166666L, currentStatus.RPM + rpm_adjust).quot; //There is a small amount of rounding in this calculation, however it is less than 0.001 of a uS (Faster as ldiv than / )
}
@ -1062,7 +1075,8 @@ void loop()
if( (!BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) && configPage10.stagingEnabled == false) { if (currentStatus.PW1 > pwLimit) { currentStatus.PW1 = pwLimit; } }
//Calculate staging pulsewidths if used
if(configPage10.stagingEnabled == true)
//To run staged injection, the number of cylinders must be less than or equal to the injector channels (ie Assuming you're running paired injection, you need at least as many injector channels as you have cylinders, half for the primaries and half for the secondaries)
if( (configPage10.stagingEnabled == true) && (configPage2.nCylinders <= INJ_CHANNELS) )
{
//Scale the 'full' pulsewidth by each of the injector capacities
uint32_t tempPW1 = ((unsigned long)currentStatus.PW1 * staged_req_fuel_mult_pri) / 100;
@ -1548,6 +1562,7 @@ void loop()
crankAngle = getCrankAngle(timePerDegree); //Refresh with the latest crank angle
if (crankAngle > CRANK_ANGLE_MAX_IGN ) { crankAngle -= 360; }
#if IGN_CHANNELS >= 1
if ( (ignition1StartAngle > crankAngle) && (curRollingCut != 1) )
{
/*
@ -1567,6 +1582,7 @@ void loop()
);
}
}
#endif
/*
if( (ignitionSchedule1.Status == RUNNING) && (ignition1EndAngle > crankAngle) && configPage4.StgCycles == 0)
{
@ -1585,7 +1601,7 @@ void loop()
*/
#if IGN_CHANNELS >= 2
tempCrankAngle = crankAngle - channel2IgnDegrees;
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
tempStartAngle = ignition2StartAngle - channel2IgnDegrees;
@ -1605,7 +1621,9 @@ void loop()
);
}
}
#endif
#if IGN_CHANNELS >= 3
tempCrankAngle = crankAngle - channel3IgnDegrees;
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
tempStartAngle = ignition3StartAngle - channel3IgnDegrees;
@ -1626,7 +1644,9 @@ void loop()
);
}
}
#endif
#if IGN_CHANNELS >= 4
tempCrankAngle = crankAngle - channel4IgnDegrees;
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
tempStartAngle = ignition4StartAngle - channel4IgnDegrees;
@ -1648,7 +1668,9 @@ void loop()
);
}
}
#endif
#if IGN_CHANNELS >= 5
tempCrankAngle = crankAngle - channel5IgnDegrees;
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
tempStartAngle = ignition5StartAngle - channel5IgnDegrees;
@ -1669,6 +1691,29 @@ void loop()
);
}
}
#endif
#if IGN_CHANNELS >= 6
tempCrankAngle = crankAngle - channel6IgnDegrees;
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
tempStartAngle = ignition6StartAngle - channel6IgnDegrees;
if ( tempStartAngle < 0) { tempStartAngle += CRANK_ANGLE_MAX_IGN; }
{
unsigned long ignition6StartTime = 0;
if(tempStartAngle > tempCrankAngle) { ignition6StartTime = degreesToUS((tempStartAngle - tempCrankAngle)); }
else { ignition6StartTime = 0; }
if( (ignition6StartTime > 0) && (curRollingCut != 2) )
{
setIgnitionSchedule6(ign6StartFunction,
ignition6StartTime,
currentStatus.dwell + fixedCrankingOverride,
ign6EndFunction
);
}
}
#endif
} //Ignition schedules on
if (!BIT_CHECK(currentStatus.status3, BIT_STATUS3_RESET_PREVENT) && resetControl == RESET_CONTROL_PREVENT_WHEN_RUNNING) {

View File

@ -64,7 +64,7 @@ int table2D_getValue(struct table2D *fromTable, int X_in)
int xMax = 0;
//Check whether the X input is the same as last time this ran
if(X_in == fromTable->lastInput && fromTable->cacheTime == currentStatus.secl)
if( (X_in == fromTable->lastInput) && (fromTable->cacheTime == currentStatus.secl) )
{
returnValue = fromTable->lastOutput;
valueFound = true;

View File

@ -29,6 +29,14 @@ volatile unsigned int dwellLimit_uS;
volatile uint16_t lastRPM_100ms; //Need to record this for rpmDOT calculation
volatile uint16_t last250msLoopCount = 1000; //Set to effectively random number on startup. Just need this to be different to what mainLoopCount equals initially (Probably 0)
#if defined(TIMER5_MICROS)
#define micros() (((timer5_overflow_count << 16) + TCNT5) * 4) //Fast version of micros() that uses the 4uS tick of timer5. See timers.ino for the overflow ISR of timer5
#define millis() (ms_counter) //Replaces the standard millis() function with this macro. It is both faster and more accurate. See timers.ino for its counter increment.
static inline unsigned long micros_safe(); //A version of micros() that is interrupt safe
#else
#define micros_safe() micros() //If the timer5 method is not used, the micros_safe() macro is simply an alias for the normal micros()
#endif
#if defined (CORE_TEENSY)
IntervalTimer lowResTimer;
void oneMSInterval();

View File

@ -66,11 +66,12 @@ void initialiseTimers()
//Timer2 Overflow Interrupt Vector, called when the timer overflows.
//Executes every ~1ms.
#if defined(CORE_AVR) //AVR chips use the ISR for this
ISR(TIMER2_OVF_vect, ISR_NOBLOCK)
ISR(TIMER2_OVF_vect)
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
void oneMSInterval() //Most ARM chips can simply call a function
#endif
{
ms_counter++;
//Increment Loop Counters
loop33ms++;
@ -226,3 +227,21 @@ void oneMSInterval() //Most ARM chips can simply call a function
TIFR2 = 0x00; //Timer2 INT Flag Reg: Clear Timer Overflow Flag
#endif
}
#if defined(TIMER5_MICROS)
//This is used by the fast version of micros(). We just need to increment the timer overflow counter
ISR(TIMER5_OVF_vect)
{
++timer5_overflow_count;
}
static inline unsigned long micros_safe()
{
unsigned long newMicros;
noInterrupts();
newMicros = micros();
interrupts();
return newMicros;
}
#endif

View File

@ -96,14 +96,21 @@ void doUpdates()
if (currentVersion == 7) {
//Convert whatever flex fuel settings are there into the new tables
configPage10.flexBoostAdj[0] = (int8_t)configPage2.unused2_1;
configPage10.flexBoostBins[0] = 0;
configPage10.flexBoostAdj[0] = (int8_t)configPage2.unused2_1;
configPage10.flexFuelBins[0] = 0;
configPage10.flexFuelAdj[0] = configPage2.unused2_57;
configPage10.flexAdvAdj[0] = configPage2.unused2_59;
configPage10.flexAdvBins[0] = 0;
configPage10.flexAdvAdj[0] = configPage2.unused2_59;
for (uint8_t x = 1; x < 6; x++)
{
uint8_t pct = x * 20;
configPage10.flexBoostBins[x] = configPage10.flexFuelBins[x] = configPage10.flexAdvBins[x] = pct;
configPage10.flexBoostBins[x] = pct;
configPage10.flexFuelBins[x] = pct;
configPage10.flexAdvBins[x] = pct;
int16_t boostAdder = (((configPage2.unused2_2 - (int8_t)configPage2.unused2_1) * pct) / 100) + (int8_t)configPage2.unused2_1;
configPage10.flexBoostAdj[x] = boostAdder;