Merge branch 'teensy_reva' of https://github.com/Autohome2/speeduino
|
@ -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
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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."/>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -259,7 +259,6 @@ X1716Y3303D03*
|
|||
X2316Y3578D03*
|
||||
X3591Y1853D03*
|
||||
X2341Y1453D03*
|
||||
X666Y2878D03*
|
||||
X1591Y978D03*
|
||||
X1441Y878D03*
|
||||
X1341Y728D03*
|
||||
|
|
|
@ -278,7 +278,6 @@ X1716Y3303D03*
|
|||
X2316Y3578D03*
|
||||
X3591Y1853D03*
|
||||
X2341Y1453D03*
|
||||
X666Y2878D03*
|
||||
X1591Y978D03*
|
||||
X1441Y878D03*
|
||||
X1341Y728D03*
|
||||
|
|
Before Width: | Height: | Size: 487 KiB After Width: | Height: | Size: 512 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 645 KiB After Width: | Height: | Size: 654 KiB |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,353 +2,35 @@
|
|||
; THROUGH (PLATED) HOLES START AT T100
|
||||
M48
|
||||
INCH
|
||||
T1C0.125984
|
||||
T2C0.165354
|
||||
T100C0.059055
|
||||
T101C0.070000
|
||||
T102C0.031496
|
||||
T103C0.031497
|
||||
T104C0.035000
|
||||
T105C0.038194
|
||||
T106C0.040000
|
||||
T107C0.042000
|
||||
T108C0.030000
|
||||
T109C0.038000
|
||||
T110C0.039370
|
||||
T111C0.015748
|
||||
T1C0.165354
|
||||
T2C0.125984
|
||||
T100C0.030000
|
||||
T101C0.038000
|
||||
T102C0.039370
|
||||
T103C0.015748
|
||||
T104C0.059055
|
||||
T105C0.070000
|
||||
T106C0.031496
|
||||
T107C0.031497
|
||||
T108C0.035000
|
||||
T109C0.038194
|
||||
T110C0.040000
|
||||
T111C0.042000
|
||||
%
|
||||
T1
|
||||
X001437Y030579
|
||||
X001437Y021481
|
||||
T2
|
||||
X035411Y031280
|
||||
X037661Y012280
|
||||
T2
|
||||
X001437Y021481
|
||||
X001437Y030579
|
||||
T100
|
||||
X036411Y034811
|
||||
X036411Y036780
|
||||
T101
|
||||
X012411Y024280
|
||||
X012411Y022280
|
||||
X012411Y028280
|
||||
X012411Y026280
|
||||
T102
|
||||
X033911Y034030
|
||||
X033911Y036983
|
||||
T103
|
||||
X018161Y033045
|
||||
X025911Y023030
|
||||
X025177Y015030
|
||||
X026161Y015030
|
||||
X018161Y034030
|
||||
X018161Y035045
|
||||
X025177Y017030
|
||||
X005421Y033789
|
||||
X005421Y032805
|
||||
X026161Y017030
|
||||
X018161Y036030
|
||||
X024927Y021030
|
||||
X025911Y021030
|
||||
X005421Y035789
|
||||
X005421Y034805
|
||||
X024927Y023030
|
||||
T104
|
||||
X010911Y032530
|
||||
X023161Y010780
|
||||
X020911Y010280
|
||||
X037911Y006280
|
||||
X023161Y006780
|
||||
X016411Y014530
|
||||
X031911Y014530
|
||||
X031411Y002280
|
||||
X017411Y006030
|
||||
X017411Y018530
|
||||
X032911Y007280
|
||||
X019661Y030280
|
||||
X024161Y036280
|
||||
X024161Y013780
|
||||
X032911Y010280
|
||||
X016661Y037780
|
||||
X004661Y019030
|
||||
X019661Y026280
|
||||
X016652Y033521
|
||||
X020661Y030280
|
||||
X016661Y035530
|
||||
X020661Y026280
|
||||
X031661Y023280
|
||||
X029161Y013280
|
||||
X012911Y011280
|
||||
X029911Y006030
|
||||
X021411Y006030
|
||||
X035911Y017530
|
||||
X015911Y011030
|
||||
X016661Y034530
|
||||
X022661Y021030
|
||||
X023661Y030280
|
||||
X020661Y018780
|
||||
X012911Y007280
|
||||
X031661Y022280
|
||||
X015911Y007030
|
||||
X012411Y006280
|
||||
X021911Y007280
|
||||
X037911Y002280
|
||||
X023661Y025030
|
||||
X023661Y026280
|
||||
X029911Y005030
|
||||
X030911Y007280
|
||||
X035911Y016530
|
||||
X021911Y010280
|
||||
X017661Y030280
|
||||
X030911Y010280
|
||||
X031661Y021280
|
||||
X017411Y014530
|
||||
X021911Y018780
|
||||
X017661Y026280
|
||||
X016661Y029530
|
||||
X023161Y017780
|
||||
X035911Y015530
|
||||
X024161Y032280
|
||||
X033911Y006030
|
||||
X033911Y007280
|
||||
X012652Y036521
|
||||
X016661Y032530
|
||||
X031661Y020280
|
||||
X006911Y037780
|
||||
X006911Y036530
|
||||
X033911Y010280
|
||||
X018911Y007280
|
||||
X035911Y014530
|
||||
X027661Y010780
|
||||
X033911Y005030
|
||||
X035411Y002280
|
||||
X018911Y010280
|
||||
X021661Y030280
|
||||
X006911Y035530
|
||||
X027661Y006780
|
||||
X024661Y030030
|
||||
X021661Y026280
|
||||
X006911Y034530
|
||||
X012661Y037780
|
||||
X023661Y021030
|
||||
X000661Y019030
|
||||
X010911Y037780
|
||||
X010911Y036530
|
||||
X025911Y030030
|
||||
X012652Y033521
|
||||
X024661Y025030
|
||||
X020661Y013780
|
||||
X035661Y023280
|
||||
X016411Y018530
|
||||
X031911Y007280
|
||||
X006911Y033530
|
||||
X012661Y035530
|
||||
X018661Y030280
|
||||
X016661Y025530
|
||||
X010911Y035530
|
||||
X023161Y013780
|
||||
X031911Y010280
|
||||
X018661Y026280
|
||||
X025161Y013280
|
||||
X035661Y022280
|
||||
X024161Y017780
|
||||
X016411Y006280
|
||||
X031911Y017530
|
||||
X006911Y032530
|
||||
X025911Y025030
|
||||
X021911Y013780
|
||||
X012661Y034530
|
||||
X010911Y034530
|
||||
X035661Y021280
|
||||
X019911Y007280
|
||||
X031911Y016530
|
||||
X010911Y033530
|
||||
X014911Y011030
|
||||
X019911Y010280
|
||||
X016652Y036521
|
||||
X022661Y030280
|
||||
X035661Y020280
|
||||
X014911Y007030
|
||||
X031911Y015530
|
||||
X020911Y007280
|
||||
X022661Y025030
|
||||
X022661Y026280
|
||||
X012661Y032530
|
||||
T105
|
||||
X037911Y025280
|
||||
X017911Y012280
|
||||
X036911Y017280
|
||||
X017911Y031280
|
||||
X026911Y012280
|
||||
X026911Y031280
|
||||
X036911Y020280
|
||||
X035911Y012280
|
||||
X037911Y024280
|
||||
X036911Y016280
|
||||
X012311Y031280
|
||||
X029911Y012280
|
||||
X029911Y031280
|
||||
X037911Y023280
|
||||
X012911Y012280
|
||||
X036911Y015280
|
||||
X021911Y012280
|
||||
X021911Y031280
|
||||
X037911Y019280
|
||||
X030911Y012280
|
||||
X015311Y031280
|
||||
X030911Y031280
|
||||
X037911Y022280
|
||||
X036911Y014280
|
||||
X015911Y012280
|
||||
X037911Y018280
|
||||
X024911Y012280
|
||||
X009311Y031280
|
||||
X024911Y031280
|
||||
X036911Y029280
|
||||
X033911Y012280
|
||||
X037911Y021280
|
||||
X033911Y031280
|
||||
X037911Y017280
|
||||
X010311Y031280
|
||||
X018911Y031280
|
||||
X036911Y028280
|
||||
X027911Y031280
|
||||
X037911Y020280
|
||||
X036911Y031280
|
||||
X010911Y012280
|
||||
X037911Y016280
|
||||
X036911Y027280
|
||||
X013311Y031280
|
||||
X036911Y030280
|
||||
X037911Y015280
|
||||
X013911Y012280
|
||||
X022911Y012280
|
||||
X036911Y026280
|
||||
X007311Y031280
|
||||
X022911Y031280
|
||||
X031911Y012280
|
||||
X016311Y031280
|
||||
X031911Y031280
|
||||
X037911Y014280
|
||||
X016911Y012280
|
||||
X036911Y025280
|
||||
X025911Y012280
|
||||
X037911Y029280
|
||||
X034911Y012280
|
||||
X036911Y024280
|
||||
X019911Y012280
|
||||
X011311Y031280
|
||||
X019911Y031280
|
||||
X037911Y028280
|
||||
X028911Y012280
|
||||
X028911Y031280
|
||||
X037911Y031280
|
||||
X036911Y023280
|
||||
X011911Y012280
|
||||
X020911Y012280
|
||||
X037911Y027280
|
||||
X020911Y031280
|
||||
X036911Y019280
|
||||
X014311Y031280
|
||||
X037911Y030280
|
||||
X036911Y022280
|
||||
X014911Y012280
|
||||
X037911Y026280
|
||||
X023911Y012280
|
||||
X036911Y018280
|
||||
X008311Y031280
|
||||
X023911Y031280
|
||||
X032911Y012280
|
||||
X032911Y031280
|
||||
X036911Y021280
|
||||
T106
|
||||
X008911Y003780
|
||||
X007911Y008780
|
||||
X008911Y016780
|
||||
X008911Y008780
|
||||
X006161Y024530
|
||||
X007911Y022780
|
||||
X007911Y014780
|
||||
X008911Y022780
|
||||
X007911Y006780
|
||||
X008911Y014780
|
||||
X007911Y019780
|
||||
X008911Y006780
|
||||
X008911Y019780
|
||||
X007911Y020780
|
||||
X006161Y027530
|
||||
X007911Y012780
|
||||
X008911Y020780
|
||||
X007911Y004780
|
||||
X008911Y012780
|
||||
X007911Y017780
|
||||
X008911Y004780
|
||||
X007911Y009780
|
||||
X008911Y017780
|
||||
X008911Y009780
|
||||
X006161Y025530
|
||||
X007911Y010780
|
||||
X006161Y023529
|
||||
X008911Y010780
|
||||
X007911Y015780
|
||||
X007911Y007780
|
||||
X008911Y015780
|
||||
X008911Y007780
|
||||
X007911Y021780
|
||||
X006161Y028530
|
||||
X007911Y013780
|
||||
X008911Y021780
|
||||
X007911Y005780
|
||||
X008911Y013780
|
||||
X007911Y018780
|
||||
X008911Y005780
|
||||
X008911Y018780
|
||||
X006161Y026530
|
||||
X007911Y011780
|
||||
X007911Y003780
|
||||
X008911Y011780
|
||||
X007911Y016780
|
||||
T107
|
||||
X020661Y024780
|
||||
X021931Y037280
|
||||
X014911Y025030
|
||||
X030661Y036280
|
||||
X003891Y037780
|
||||
X025161Y033280
|
||||
X001411Y033030
|
||||
X003411Y033030
|
||||
X014911Y028280
|
||||
X018661Y022280
|
||||
X021161Y033030
|
||||
X002411Y033030
|
||||
X011911Y010760
|
||||
X019661Y022280
|
||||
X022161Y033030
|
||||
X020161Y033030
|
||||
X014911Y023030
|
||||
X030661Y033300
|
||||
X028661Y037030
|
||||
X026661Y037030
|
||||
X020661Y022280
|
||||
X027661Y037030
|
||||
X002421Y035289
|
||||
X000911Y036530
|
||||
X014911Y029280
|
||||
X001421Y035289
|
||||
X003421Y035289
|
||||
X014911Y024030
|
||||
X020911Y037280
|
||||
X018661Y024780
|
||||
X019661Y024780
|
||||
X014911Y027280
|
||||
X024911Y037280
|
||||
X011911Y007780
|
||||
X000911Y037780
|
||||
X017931Y037280
|
||||
X021161Y035280
|
||||
X003891Y036530
|
||||
X025161Y036260
|
||||
X022161Y035280
|
||||
X020161Y035280
|
||||
T108
|
||||
X024411Y010280
|
||||
X025911Y008280
|
||||
X013911Y007780
|
||||
X025411Y005780
|
||||
X014411Y016530
|
||||
X032161Y035780
|
||||
X015411Y016530
|
||||
X013911Y013780
|
||||
X011911Y013780
|
||||
X004911Y016780
|
||||
|
@ -402,22 +84,7 @@ X023411Y005780
|
|||
X014661Y003780
|
||||
X016661Y003780
|
||||
X037911Y009030
|
||||
X024411Y010280
|
||||
X025911Y008280
|
||||
X013911Y007780
|
||||
X025411Y005780
|
||||
X014411Y016530
|
||||
X032161Y035780
|
||||
X015411Y016530
|
||||
T109
|
||||
X001911Y009530
|
||||
X001911Y012530
|
||||
X005911Y002530
|
||||
X035661Y008780
|
||||
X004911Y013530
|
||||
X003911Y005530
|
||||
X001911Y008530
|
||||
X004911Y009530
|
||||
T101
|
||||
X001911Y011530
|
||||
X004911Y012530
|
||||
X003911Y004530
|
||||
|
@ -493,9 +160,15 @@ X005911Y003530
|
|||
X035661Y009780
|
||||
X004911Y014530
|
||||
X003911Y006530
|
||||
T110
|
||||
X027661Y015530
|
||||
X030661Y014530
|
||||
X001911Y009530
|
||||
X001911Y012530
|
||||
X005911Y002530
|
||||
X035661Y008780
|
||||
X004911Y013530
|
||||
X003911Y005530
|
||||
X001911Y008530
|
||||
X004911Y009530
|
||||
T102
|
||||
X027661Y016530
|
||||
X030661Y015530
|
||||
X027661Y020530
|
||||
|
@ -510,7 +183,17 @@ X027661Y023530
|
|||
X030661Y022530
|
||||
X027661Y014530
|
||||
X030661Y023530
|
||||
T111
|
||||
X027661Y015530
|
||||
X030661Y014530
|
||||
T103
|
||||
X030661Y002780
|
||||
X010661Y003530
|
||||
X031161Y008530
|
||||
X008911Y032780
|
||||
X021411Y016780
|
||||
X018911Y012280
|
||||
X035161Y018280
|
||||
X035661Y004280
|
||||
X030661Y006030
|
||||
X038161Y013030
|
||||
X013411Y016280
|
||||
|
@ -547,13 +230,330 @@ X022161Y029530
|
|||
X012411Y003780
|
||||
X015023Y006280
|
||||
X029661Y023530
|
||||
X010661Y003530
|
||||
X030661Y002780
|
||||
X031161Y008530
|
||||
X008911Y032780
|
||||
X021411Y016780
|
||||
X018911Y012280
|
||||
X035161Y018280
|
||||
X035661Y004280
|
||||
T104
|
||||
X036411Y034811
|
||||
X036411Y036780
|
||||
T105
|
||||
X012411Y026280
|
||||
X012411Y024280
|
||||
X012411Y022280
|
||||
X012411Y028280
|
||||
T106
|
||||
X033911Y036983
|
||||
X033911Y034030
|
||||
T107
|
||||
X025177Y015030
|
||||
X026161Y015030
|
||||
X018161Y034030
|
||||
X018161Y035045
|
||||
X025177Y017030
|
||||
X005421Y033789
|
||||
X005421Y032805
|
||||
X026161Y017030
|
||||
X018161Y036030
|
||||
X024927Y021030
|
||||
X025911Y021030
|
||||
X005421Y035789
|
||||
X005421Y034805
|
||||
X024927Y023030
|
||||
X018161Y033045
|
||||
X025911Y023030
|
||||
T108
|
||||
X024161Y013780
|
||||
X032911Y010280
|
||||
X016661Y037780
|
||||
X004661Y019030
|
||||
X019661Y026280
|
||||
X016652Y033521
|
||||
X020661Y030280
|
||||
X016661Y035530
|
||||
X020661Y026280
|
||||
X031661Y023280
|
||||
X029161Y013280
|
||||
X012911Y011280
|
||||
X029911Y006030
|
||||
X021411Y006030
|
||||
X035911Y017530
|
||||
X015911Y011030
|
||||
X016661Y034530
|
||||
X022661Y021030
|
||||
X023661Y030280
|
||||
X020661Y018780
|
||||
X012911Y007280
|
||||
X031661Y022280
|
||||
X015911Y007030
|
||||
X012411Y006280
|
||||
X021911Y007280
|
||||
X037911Y002280
|
||||
X023661Y025030
|
||||
X023661Y026280
|
||||
X029911Y005030
|
||||
X030911Y007280
|
||||
X035911Y016530
|
||||
X021911Y010280
|
||||
X017661Y030280
|
||||
X030911Y010280
|
||||
X031661Y021280
|
||||
X017411Y014530
|
||||
X021911Y018780
|
||||
X017661Y026280
|
||||
X016661Y029530
|
||||
X023161Y017780
|
||||
X035911Y015530
|
||||
X024161Y032280
|
||||
X012652Y036521
|
||||
X033911Y006030
|
||||
X033911Y007280
|
||||
X016661Y032530
|
||||
X031661Y020280
|
||||
X006911Y037780
|
||||
X006911Y036530
|
||||
X033911Y010280
|
||||
X018911Y007280
|
||||
X035911Y014530
|
||||
X027661Y010780
|
||||
X033911Y005030
|
||||
X035411Y002280
|
||||
X018911Y010280
|
||||
X021661Y030280
|
||||
X006911Y035530
|
||||
X027661Y006780
|
||||
X024661Y030030
|
||||
X021661Y026280
|
||||
X006911Y034530
|
||||
X012661Y037780
|
||||
X023661Y021030
|
||||
X000661Y019030
|
||||
X010911Y037780
|
||||
X010911Y036530
|
||||
X025911Y030030
|
||||
X012652Y033521
|
||||
X024661Y025030
|
||||
X020661Y013780
|
||||
X035661Y023280
|
||||
X016411Y018530
|
||||
X031911Y007280
|
||||
X006911Y033530
|
||||
X012661Y035530
|
||||
X018661Y030280
|
||||
X016661Y025530
|
||||
X023161Y013780
|
||||
X010911Y035530
|
||||
X031911Y010280
|
||||
X018661Y026280
|
||||
X025161Y013280
|
||||
X035661Y022280
|
||||
X024161Y017780
|
||||
X016411Y006280
|
||||
X031911Y017530
|
||||
X006911Y032530
|
||||
X025911Y025030
|
||||
X021911Y013780
|
||||
X012661Y034530
|
||||
X010911Y034530
|
||||
X035661Y021280
|
||||
X019911Y007280
|
||||
X031911Y016530
|
||||
X010911Y033530
|
||||
X014911Y011030
|
||||
X019911Y010280
|
||||
X016652Y036521
|
||||
X022661Y030280
|
||||
X035661Y020280
|
||||
X014911Y007030
|
||||
X020911Y007280
|
||||
X031911Y015530
|
||||
X022661Y025030
|
||||
X022661Y026280
|
||||
X012661Y032530
|
||||
X023161Y010780
|
||||
X010911Y032530
|
||||
X020911Y010280
|
||||
X037911Y006280
|
||||
X023161Y006780
|
||||
X016411Y014530
|
||||
X031911Y014530
|
||||
X031411Y002280
|
||||
X017411Y006030
|
||||
X017411Y018530
|
||||
X032911Y007280
|
||||
X019661Y030280
|
||||
X024161Y036280
|
||||
T109
|
||||
X012311Y031280
|
||||
X029911Y012280
|
||||
X029911Y031280
|
||||
X037911Y023280
|
||||
X012911Y012280
|
||||
X036911Y015280
|
||||
X021911Y012280
|
||||
X021911Y031280
|
||||
X037911Y019280
|
||||
X030911Y012280
|
||||
X015311Y031280
|
||||
X030911Y031280
|
||||
X037911Y022280
|
||||
X036911Y014280
|
||||
X015911Y012280
|
||||
X037911Y018280
|
||||
X024911Y012280
|
||||
X009311Y031280
|
||||
X024911Y031280
|
||||
X036911Y029280
|
||||
X033911Y012280
|
||||
X037911Y021280
|
||||
X033911Y031280
|
||||
X037911Y017280
|
||||
X010311Y031280
|
||||
X018911Y031280
|
||||
X036911Y028280
|
||||
X027911Y031280
|
||||
X037911Y020280
|
||||
X036911Y031280
|
||||
X010911Y012280
|
||||
X037911Y016280
|
||||
X036911Y027280
|
||||
X013311Y031280
|
||||
X036911Y030280
|
||||
X037911Y015280
|
||||
X013911Y012280
|
||||
X022911Y012280
|
||||
X036911Y026280
|
||||
X007311Y031280
|
||||
X022911Y031280
|
||||
X031911Y012280
|
||||
X016311Y031280
|
||||
X031911Y031280
|
||||
X037911Y014280
|
||||
X016911Y012280
|
||||
X036911Y025280
|
||||
X025911Y012280
|
||||
X037911Y029280
|
||||
X034911Y012280
|
||||
X036911Y024280
|
||||
X019911Y012280
|
||||
X011311Y031280
|
||||
X019911Y031280
|
||||
X037911Y028280
|
||||
X028911Y012280
|
||||
X028911Y031280
|
||||
X037911Y031280
|
||||
X036911Y023280
|
||||
X011911Y012280
|
||||
X020911Y012280
|
||||
X020911Y031280
|
||||
X037911Y027280
|
||||
X036911Y019280
|
||||
X014311Y031280
|
||||
X037911Y030280
|
||||
X036911Y022280
|
||||
X014911Y012280
|
||||
X037911Y026280
|
||||
X023911Y012280
|
||||
X036911Y018280
|
||||
X008311Y031280
|
||||
X023911Y031280
|
||||
X032911Y012280
|
||||
X032911Y031280
|
||||
X036911Y021280
|
||||
X037911Y025280
|
||||
X017911Y012280
|
||||
X036911Y017280
|
||||
X017911Y031280
|
||||
X026911Y012280
|
||||
X026911Y031280
|
||||
X036911Y020280
|
||||
X035911Y012280
|
||||
X037911Y024280
|
||||
X036911Y016280
|
||||
T110
|
||||
X008911Y005780
|
||||
X007911Y013780
|
||||
X008911Y018780
|
||||
X007911Y005780
|
||||
X007911Y018780
|
||||
X006161Y026530
|
||||
X008911Y011780
|
||||
X008911Y003780
|
||||
X007911Y011780
|
||||
X008911Y016780
|
||||
X007911Y003780
|
||||
X008911Y008780
|
||||
X007911Y016780
|
||||
X006161Y024530
|
||||
X007911Y008780
|
||||
X008911Y022780
|
||||
X008911Y014780
|
||||
X007911Y022780
|
||||
X008911Y006780
|
||||
X007911Y014780
|
||||
X008911Y019780
|
||||
X007911Y006780
|
||||
X007911Y019780
|
||||
X006161Y027530
|
||||
X008911Y020780
|
||||
X008911Y012780
|
||||
X007911Y020780
|
||||
X008911Y004780
|
||||
X007911Y012780
|
||||
X008911Y017780
|
||||
X007911Y004780
|
||||
X008911Y009780
|
||||
X007911Y017780
|
||||
X006161Y025530
|
||||
X006161Y023529
|
||||
X007911Y009780
|
||||
X008911Y010780
|
||||
X007911Y010780
|
||||
X008911Y015780
|
||||
X008911Y007780
|
||||
X007911Y015780
|
||||
X007911Y007780
|
||||
X006161Y028530
|
||||
X008911Y021780
|
||||
X008911Y013780
|
||||
X007911Y021780
|
||||
T111
|
||||
X024911Y037280
|
||||
X020911Y037280
|
||||
X011911Y007780
|
||||
X000911Y037780
|
||||
X017931Y037280
|
||||
X021161Y035280
|
||||
X003891Y036530
|
||||
X025161Y036260
|
||||
X022161Y035280
|
||||
X020161Y035280
|
||||
X020661Y024780
|
||||
X021931Y037280
|
||||
X014911Y025030
|
||||
X030661Y036280
|
||||
X003891Y037780
|
||||
X025161Y033280
|
||||
X001411Y033030
|
||||
X003411Y033030
|
||||
X014911Y028280
|
||||
X018661Y022280
|
||||
X021161Y033030
|
||||
X002411Y033030
|
||||
X011911Y010760
|
||||
X019661Y022280
|
||||
X022161Y033030
|
||||
X020161Y033030
|
||||
X014911Y023030
|
||||
X030661Y033300
|
||||
X028661Y037030
|
||||
X026661Y037030
|
||||
X020661Y022280
|
||||
X027661Y037030
|
||||
X002421Y035289
|
||||
X000911Y036530
|
||||
X014911Y029280
|
||||
X001421Y035289
|
||||
X003421Y035289
|
||||
X014911Y024030
|
||||
X018661Y024780
|
||||
X019661Y024780
|
||||
X014911Y027280
|
||||
T00
|
||||
M30
|
||||
|
|
|
@ -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
|
||||
|
@ -300,7 +309,7 @@ page = 4
|
|||
numTeeth = scalar, U08, 15, "teeth", 1.0, 0.0, 0.0, 255, 0
|
||||
missingTeeth = scalar, U08, 16, "teeth", 1.0, 0.0, 0.0, 255, 0
|
||||
|
||||
crankRPM = scalar, U08, 17, "rpm", 100, 0.0, 100, 1000, 0
|
||||
crankRPM = scalar, U08, 17, "rpm", 10, 0.0, 100, 1000, 0
|
||||
tpsflood = scalar, U08, 18, "%", 1.0, 0.0, 0.0, 255.0, 0
|
||||
|
||||
;Rev Limits
|
||||
|
@ -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
|
||||
|
@ -2182,6 +2196,10 @@ cmdtestspk450dc = "E\x03\x0C"
|
|||
tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0
|
||||
veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0
|
||||
warmupEnrichGauge = warmupEnrich, "Warmup Enrichment", "%", 100, 200, 130, 140, 140, 150, 0, 0
|
||||
aseEnrichGauge = ase_enrich, "Afterstart Enrichment","%", 0, 200, 130, 140, 140, 150, 0, 0
|
||||
batCorrectGauge = batCorrection, "Voltage Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
|
||||
iatCorrectGauge = airCorrection, "IAT Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
|
||||
flexEnrich, = flexFuelCor, "Flex Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0
|
||||
advanceGauge = advance, "Spark Advance", "deg BTDC", 50, -10, 0, 0, 35, 45, 0, 0
|
||||
dwellGauge = dwell, "Ign Dwell", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3
|
||||
|
||||
|
@ -2232,6 +2250,10 @@ cmdtestspk450dc = "E\x03\x0C"
|
|||
clockGauge = secl, "Clock", "Seconds", 0, 255, 10, 10, 245, 245, 0, 0
|
||||
loopGauge = loopsPerSecond,"Main loop speed", "Loops/S" , 0, 70000, -1, 500,1800, 4000, 0, 0
|
||||
memoryGauge = freeRAM, "Free memory", "bytes" , 0, 8000, -1, 1000,8000, 1000, 0, 0
|
||||
reqFuelGauge = req_fuel, "Req. Fuel", "ms", 0, 35.0, 1.0, 1.2, 20, 25, 2, 2
|
||||
injOpenGauge = inj_open, "Injector Open Time", "ms", 0, 35.0, 1.0, 1.2, 20, 25, 1, 1
|
||||
mapMultiplyGauge = map_multiply_amt, "MAP Multiply", "%", 0, 200, 130, 140, 140, 150, 0, 0
|
||||
nSquirtsGauge = nSquirts, "# Squirts", "", 0, 10, 130, 140, 140, 150, 0, 0
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
[FrontPage]
|
||||
|
@ -2394,6 +2416,11 @@ cmdtestspk450dc = "E\x03\x0C"
|
|||
lambda = { afr / stoich }
|
||||
MAPxRPM = { rpm * map }
|
||||
loopsPerRev = { loopsPerSecond / (rpm / 60) }
|
||||
req_fuel = { reqFuel }
|
||||
inj_open = { injOpen }
|
||||
ase_enrich = { ase ? (100 + asePct ) : 100 } ; If ASE is active then equal the ASE + 100
|
||||
map_multiply_amt = { multiplyMAP ? map : 100 } ; If multiply MAP is enabled, use the current MAP value, otherwise 100%
|
||||
nSquirts = { nCylinders / divider }
|
||||
|
||||
;Manifold pressure in weirdo units
|
||||
map_bar = { (map - baro) / 101.33 }
|
||||
|
|
|
@ -39,11 +39,21 @@ void initialiseAuxPWM()
|
|||
TCCR1A = 0x00; //Timer1 Control Reg A: Wave Gen Mode normal (Simply counts up from 0 to 65535 (16-bit int)
|
||||
TCCR1B = (1 << CS12); //Timer1 Control Reg B: Timer Prescaler set to 256. 1 tick = 16uS. Refer to http://www.instructables.com/files/orig/F3T/TIKL/H3WSA4V7/F3TTIKLH3WSA4V7.jpg
|
||||
#elif defined(CORE_TEENSY)
|
||||
//REALLY NEED TO DO THIS!
|
||||
#elif defined(CORE_STM32)
|
||||
Timer1.attachInterrupt(2, boostInterrupt);
|
||||
Timer1.attachInterrupt(3, vvtInterrupt);
|
||||
Timer1.resume();
|
||||
//FlexTimer 1 is used for boost and VVT. There are 8 channels on this module
|
||||
FTM1_MODE |= FTM_MODE_WPDIS; // Write Protection Disable
|
||||
FTM1_MODE |= FTM_MODE_FTMEN; //Flex Timer module enable
|
||||
FTM1_MODE |= FTM_MODE_INIT;
|
||||
FTM1_SC |= FTM_SC_CLKS(0b1); // Set internal clocked
|
||||
FTM1_SC |= FTM_SC_PS(0b111); //Set prescaler to 128 (2.1333uS tick time)
|
||||
|
||||
//Enable each compare channel individually
|
||||
FTM1_C0SC &= ~FTM_CSC_MSB; //According to Pg 965 of the K64 datasheet, this should not be needed as MSB is reset to 0 upon reset, but the channel interrupt fails to fire without it
|
||||
FTM1_C0SC |= FTM_CSC_MSA; //Enable Compare mode
|
||||
FTM1_C0SC |= FTM_CSC_CHIE; //Enable channel compare interrupt
|
||||
FTM1_C1SC &= ~FTM_CSC_MSB; //According to Pg 965 of the K64 datasheet, this should not be needed as MSB is reset to 0 upon reset, but the channel interrupt fails to fire without it
|
||||
FTM1_C1SC |= FTM_CSC_MSA; //Enable Compare mode
|
||||
FTM1_C1SC |= FTM_CSC_CHIE; //Enable channel compare interrupt
|
||||
|
||||
#endif
|
||||
|
||||
boost_pin_port = portOutputRegister(digitalPinToPort(pinBoost));
|
||||
|
@ -51,14 +61,13 @@ void initialiseAuxPWM()
|
|||
vvt_pin_port = portOutputRegister(digitalPinToPort(pinVVT_1));
|
||||
vvt_pin_mask = digitalPinToBitMask(pinVVT_1);
|
||||
|
||||
#if defined(CORE_STM32) //2uS resolution Min 8Hz, Max 5KHz
|
||||
boost_pwm_max_count = 1000000L / (configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||
vvt_pwm_max_count = 1000000L / (configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle
|
||||
#if defined(CORE_STM32) || defined(CORE_TEENSY) //2uS resolution Min 8Hz, Max 5KHz
|
||||
boost_pwm_max_count = 1000000L / (2 * configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||
vvt_pwm_max_count = 1000000L / (2 * configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 2uS) it takes to complete 1 cycle
|
||||
#else
|
||||
boost_pwm_max_count = 1000000L / (16 * configPage6.boostFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle. The x2 is there because the frequency is stored at half value (in a byte) to allow freqneucies up to 511Hz
|
||||
vvt_pwm_max_count = 1000000L / (16 * configPage6.vvtFreq * 2); //Converts the frequency in Hz to the number of ticks (at 16uS) it takes to complete 1 cycle
|
||||
#endif
|
||||
//TIMSK1 |= (1 << OCIE1A); <---- Not required as compare A is turned on when needed by boost control
|
||||
ENABLE_VVT_TIMER(); //Turn on the B compare unit (ie turn on the interrupt)
|
||||
|
||||
boostPID.SetOutputLimits(configPage2.boostMinDuty, configPage2.boostMaxDuty);
|
||||
|
@ -67,6 +76,13 @@ void initialiseAuxPWM()
|
|||
|
||||
currentStatus.boostDuty = 0;
|
||||
boostCounter = 0;
|
||||
#if defined(CORE_STM32) //Need to be initialised last due to instant interrupt
|
||||
Timer1.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
Timer1.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
if(boost_pwm_max_count > 0) { Timer1.attachInterrupt(2, boostInterrupt);}
|
||||
if(vvt_pwm_max_count > 0) { Timer1.attachInterrupt(3, vvtInterrupt);}
|
||||
Timer1.resume();
|
||||
#endif
|
||||
}
|
||||
|
||||
#define BOOST_HYSTER 40
|
||||
|
@ -123,7 +139,7 @@ void boostControl()
|
|||
}
|
||||
}
|
||||
else { // Disable timer channel and zero the flex boost correction status
|
||||
DISABLE_BOOST_TIMER();
|
||||
DISABLE_BOOST_TIMER();
|
||||
currentStatus.flexBoostCorrection = 0;
|
||||
}
|
||||
|
||||
|
@ -175,7 +191,7 @@ void boostDisable()
|
|||
static inline void boostInterrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
if (boost_pwm_state)
|
||||
if (boost_pwm_state == true)
|
||||
{
|
||||
BOOST_PIN_LOW(); // Switch pin to low
|
||||
BOOST_TIMER_COMPARE = BOOST_TIMER_COUNTER + (boost_pwm_max_count - boost_pwm_cur_value);
|
||||
|
@ -197,7 +213,7 @@ void boostDisable()
|
|||
static inline void vvtInterrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
if (vvt_pwm_state)
|
||||
if (vvt_pwm_state == true)
|
||||
{
|
||||
VVT_PIN_LOW(); // Switch pin to low
|
||||
VVT_TIMER_COMPARE = VVT_TIMER_COUNTER + (vvt_pwm_max_count - vvt_pwm_cur_value);
|
||||
|
@ -211,3 +227,17 @@ void boostDisable()
|
|||
vvt_pwm_state = true;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CORE_TEENSY)
|
||||
void ftm1_isr(void)
|
||||
{
|
||||
//FTM1 only has 2 compare channels
|
||||
//Use separate variables for each test to ensure conversion to bool
|
||||
bool interrupt1 = (FTM1_C0SC & FTM_CSC_CHF);
|
||||
bool interrupt2 = (FTM1_C1SC & FTM_CSC_CHF);
|
||||
|
||||
if(interrupt1) { FTM1_C0SC &= ~FTM_CSC_CHF; boostInterrupt(); }
|
||||
else if(interrupt2) { FTM1_C1SC &= ~FTM_CSC_CHF; vvtInterrupt(); }
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ static inline byte correctionWUE()
|
|||
{
|
||||
//This prevents us doing the 2D lookup if we're already up to temp
|
||||
BIT_CLEAR(currentStatus.engine, BIT_ENGINE_WARMUP);
|
||||
WUEValue = 100;
|
||||
WUEValue = WUETable.values[9]; //Set the current value to be whatever the final value on the curve is.
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -1503,7 +1503,7 @@ void triggerPri_Miata9905()
|
|||
addToothLogEntry(curGap);
|
||||
|
||||
//Whilst this is an uneven tooth pattern, if the specific angle between the last 2 teeth is specified, 1st deriv prediction can be used
|
||||
if( (configPage4.triggerFilter == 1) )
|
||||
if( (configPage4.triggerFilter == 1) || (currentStatus.RPM < 1400) )
|
||||
{
|
||||
//Lite filter
|
||||
if( (toothCurrentCount == 1) || (toothCurrentCount == 3) || (toothCurrentCount == 5) || (toothCurrentCount == 7) ) { triggerToothAngle = 70; triggerFilterTime = curGap; } //Trigger filter is set to whatever time it took to do 70 degrees (Next trigger is 110 degrees away)
|
||||
|
@ -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 + 50)) && 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(); }
|
||||
}
|
||||
|
@ -1585,6 +1585,7 @@ uint16_t getRPM_Miata9905()
|
|||
toothTime = toothTime * 36;
|
||||
tempRPM = ((unsigned long)tempToothAngle * 6000000UL) / toothTime;
|
||||
revolutionTime = (10UL * toothTime) / tempToothAngle;
|
||||
MAX_STALL_TIME = 366667UL; // 50RPM
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1610,12 +1611,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 +1764,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 +1833,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 +1844,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 +2040,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 +2204,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 +2309,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 +2368,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 +2498,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 +2512,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
|
||||
}
|
||||
|
|
|
@ -12,17 +12,23 @@
|
|||
#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
|
||||
#define LED_BUILTIN 33
|
||||
#ifndef LED_BUILTIN
|
||||
#define LED_BUILTIN PB1 //Maple Mini
|
||||
#endif
|
||||
#elif defined(ARDUINO_BLACK_F407VE) || defined(STM32F4)
|
||||
#define BOARD_DIGITAL_GPIO_PINS 80
|
||||
#define BOARD_NR_GPIO_PINS 80
|
||||
|
@ -30,19 +36,17 @@
|
|||
#endif
|
||||
|
||||
//Specific mode for Bluepill due to its small flash size. This disables a number of strings from being compiled into the flash
|
||||
#if defined(MCU_STM32F103C8)
|
||||
#if defined(MCU_STM32F103C8) | defined(MCU_STM32F103CB)
|
||||
#define SMALL_FLASH_MODE
|
||||
#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)
|
||||
#if defined(ARDUINO_ARCH_STM32) // STM32GENERIC core
|
||||
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
|
||||
#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
|
||||
|
@ -55,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
|
||||
|
||||
|
@ -217,6 +223,12 @@ volatile byte *inj4_pin_port;
|
|||
volatile byte inj4_pin_mask;
|
||||
volatile byte *inj5_pin_port;
|
||||
volatile byte inj5_pin_mask;
|
||||
volatile byte *inj6_pin_port;
|
||||
volatile byte inj6_pin_mask;
|
||||
volatile byte *inj7_pin_port;
|
||||
volatile byte inj7_pin_mask;
|
||||
volatile byte *inj8_pin_port;
|
||||
volatile byte inj8_pin_mask;
|
||||
|
||||
volatile byte *ign1_pin_port;
|
||||
volatile byte ign1_pin_mask;
|
||||
|
@ -228,6 +240,12 @@ volatile byte *ign4_pin_port;
|
|||
volatile byte ign4_pin_mask;
|
||||
volatile byte *ign5_pin_port;
|
||||
volatile byte ign5_pin_mask;
|
||||
volatile byte *ign6_pin_port;
|
||||
volatile byte ign6_pin_mask;
|
||||
volatile byte *ign7_pin_port;
|
||||
volatile byte ign7_pin_mask;
|
||||
volatile byte *ign8_pin_port;
|
||||
volatile byte ign8_pin_mask;
|
||||
|
||||
volatile byte *tach_pin_port;
|
||||
volatile byte tach_pin_mask;
|
||||
|
@ -256,6 +274,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;
|
||||
|
@ -691,7 +711,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)
|
||||
};
|
||||
|
|
|
@ -78,9 +78,6 @@ void initialiseIdle()
|
|||
NVIC_ENABLE_IRQ(IRQ_FTM2);
|
||||
}
|
||||
|
||||
#elif defined(CORE_STM32)
|
||||
Timer1.attachInterrupt(4, idleInterrupt);
|
||||
Timer1.resume();
|
||||
#endif
|
||||
|
||||
//Initialising comprises of setting the 2D tables with the relevant values from the config pages
|
||||
|
@ -196,6 +193,11 @@ void initialiseIdle()
|
|||
}
|
||||
idleInitComplete = configPage6.iacAlgorithm; //Sets which idle method was initialised
|
||||
currentStatus.idleLoad = 0;
|
||||
#if defined(CORE_STM32) //Need to be initialised last due to instant interrupt
|
||||
Timer1.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
if(idle_pwm_max_count > 0) { Timer1.attachInterrupt(4, idleInterrupt);} //on first flash the configPage4.iacAlgorithm is invalid
|
||||
Timer1.resume();
|
||||
#endif
|
||||
}
|
||||
|
||||
void idleControl()
|
||||
|
@ -319,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;
|
||||
|
@ -339,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;
|
||||
}
|
||||
|
@ -377,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;
|
||||
}
|
||||
|
@ -459,3 +461,4 @@ static inline void idleInterrupt() //Most ARM chips can simply call a function
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -16,8 +16,14 @@ unsigned long percentage(byte, unsigned long);
|
|||
|
||||
//This is a dedicated function that specifically handles the case of mapping 0-1023 values into a 0 to X range
|
||||
//This is a common case because it means converting from a standard 10-bit analog input to a byte or 10-bit analog into 0-511 (Eg the temperature readings)
|
||||
#define fastMap1023toX(x, out_max) ( ((unsigned long)x * out_max) >> 10)
|
||||
//This is a new version that allows for out_min
|
||||
#define fastMap10Bit(x, out_min, out_max) ( ( ((unsigned long)x * (out_max-out_min)) >> 10 ) + out_min)
|
||||
#if defined(_VARIANT_ARDUINO_STM32_) //libmaple
|
||||
#define fastMap1023toX(x, out_max) ( ((unsigned long)x * out_max) >> 12)
|
||||
//This is a new version that allows for out_min
|
||||
#define fastMap10Bit(x, out_min, out_max) ( ( ((unsigned long)x * (out_max-out_min)) >> 12 ) + out_min)
|
||||
#else
|
||||
#define fastMap1023toX(x, out_max) ( ((unsigned long)x * out_max) >> 10)
|
||||
//This is a new version that allows for out_min
|
||||
#define fastMap10Bit(x, out_min, out_max) ( ( ((unsigned long)x * (out_max-out_min)) >> 10 ) + out_min)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -35,18 +35,16 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#define FUEL2_COUNTER TCNT3
|
||||
#define FUEL3_COUNTER TCNT3
|
||||
#define FUEL4_COUNTER TCNT4
|
||||
#define FUEL5_COUNTER TCNT3
|
||||
//The following are for the additional dynamic modes and share the counter and compares with the ignition
|
||||
#define FUEL6_COUNTER TCNT4 //Takes off ignition 4
|
||||
#define FUEL7_COUNTER TCNT5
|
||||
#define FUEL8_COUNTER TCNT5
|
||||
#define FUEL5_COUNTER TCNT1
|
||||
#define FUEL6_COUNTER TCNT4 //Replaces ignition 4
|
||||
#define FUEL7_COUNTER TCNT5 //Replaces ignition 3
|
||||
#define FUEL8_COUNTER TCNT5 //Replaces ignition 2
|
||||
|
||||
#define IGN1_COUNTER TCNT5
|
||||
#define IGN2_COUNTER TCNT5
|
||||
#define IGN3_COUNTER TCNT5
|
||||
#define IGN4_COUNTER TCNT4
|
||||
#define IGN5_COUNTER TCNT1
|
||||
//The following are for the additional dynamic modes and share the counter and compares with the injectors
|
||||
#define IGN6_COUNTER TCNT4 //Replaces injector 4
|
||||
#define IGN7_COUNTER TCNT3 //Replaces injector 3
|
||||
#define IGN8_COUNTER TCNT3 //Replaces injector 2
|
||||
|
@ -55,8 +53,7 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#define FUEL2_COMPARE OCR3B
|
||||
#define FUEL3_COMPARE OCR3C
|
||||
#define FUEL4_COMPARE OCR4B
|
||||
#define FUEL5_COMPARE OCR3A //Shared with FUEL1
|
||||
//The following are for the additional dynamic modes and share the counter and compares with the ignition
|
||||
#define FUEL5_COMPARE OCR1C //Shared with FUEL1
|
||||
#define FUEL6_COMPARE OCR4A //Replaces ignition4
|
||||
#define FUEL7_COMPARE OCR5C //Replaces ignition3
|
||||
#define FUEL8_COMPARE OCR5B //Replaces ignition2
|
||||
|
@ -66,7 +63,6 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#define IGN3_COMPARE OCR5C
|
||||
#define IGN4_COMPARE OCR4A
|
||||
#define IGN5_COMPARE OCR1C
|
||||
//The following are for the additional dynamic modes and share the counter and compares with the injectors
|
||||
#define IGN6_COMPARE OCR4B //Replaces injector 4
|
||||
#define IGN7_COMPARE OCR3C //Replaces injector 3
|
||||
#define IGN8_COMPARE OCR3B //Replaces injector 2
|
||||
|
@ -75,19 +71,19 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#define FUEL2_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //Turn on the B compare unit (ie turn on the interrupt)
|
||||
#define FUEL3_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //Turn on the C compare unit (ie turn on the interrupt)
|
||||
#define FUEL4_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //Turn on the B compare unit (ie turn on the interrupt)
|
||||
#define FUEL5_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //
|
||||
#define FUEL6_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3B) //
|
||||
#define FUEL7_TIMER_ENABLE() TIMSK3 |= (1 << OCIE3C) //
|
||||
#define FUEL8_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4B) //
|
||||
#define FUEL5_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C) //
|
||||
#define FUEL6_TIMER_ENABLE() TIMSK4 |= (1 << OCIE4A) //
|
||||
#define FUEL7_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5C) //
|
||||
#define FUEL8_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //
|
||||
|
||||
#define FUEL1_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3A); //Turn off this output compare unit
|
||||
#define FUEL2_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B); //Turn off this output compare unit
|
||||
#define FUEL3_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C); //Turn off this output compare unit
|
||||
#define FUEL4_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B); //Turn off this output compare unit
|
||||
#define FUEL5_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3A); //
|
||||
#define FUEL6_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3B); //
|
||||
#define FUEL7_TIMER_DISABLE() TIMSK3 &= ~(1 << OCIE3C); //
|
||||
#define FUEL8_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4B); //
|
||||
#define FUEL5_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C); //
|
||||
#define FUEL6_TIMER_DISABLE() TIMSK4 &= ~(1 << OCIE4A); //
|
||||
#define FUEL7_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5C); //
|
||||
#define FUEL8_TIMER_DISABLE() TIMSK5 &= ~(1 << OCIE5B); //
|
||||
|
||||
#define IGN1_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5A) //Turn on the A compare unit (ie turn on the interrupt)
|
||||
#define IGN2_TIMER_ENABLE() TIMSK5 |= (1 << OCIE5B) //Turn on the B compare unit (ie turn on the interrupt)
|
||||
|
@ -204,138 +200,169 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#define FUEL2_COUNTER (TIM2)->CNT
|
||||
#define FUEL3_COUNTER (TIM2)->CNT
|
||||
#define FUEL4_COUNTER (TIM2)->CNT
|
||||
#define FUEL5_COUNTER (TIM4)->CNT
|
||||
#define FUEL6_COUNTER (TIM4)->CNT
|
||||
#define FUEL7_COUNTER (TIM4)->CNT
|
||||
#define FUEL8_COUNTER (TIM4)->CNT
|
||||
|
||||
#define IGN1_COUNTER (TIM3)->CNT
|
||||
#define IGN2_COUNTER (TIM3)->CNT
|
||||
#define IGN3_COUNTER (TIM3)->CNT
|
||||
#define IGN4_COUNTER (TIM3)->CNT
|
||||
#define IGN5_COUNTER (TIM4)->CNT
|
||||
#define IGN6_COUNTER (TIM4)->CNT
|
||||
#define IGN7_COUNTER (TIM4)->CNT
|
||||
#define IGN8_COUNTER (TIM4)->CNT
|
||||
|
||||
#define FUEL1_COMPARE (TIM2)->CCR1
|
||||
#define FUEL2_COMPARE (TIM2)->CCR2
|
||||
#define FUEL3_COMPARE (TIM2)->CCR3
|
||||
#define FUEL4_COMPARE (TIM2)->CCR4
|
||||
#define FUEL5_COMPARE (TIM4)->CCR1
|
||||
#define FUEL6_COMPARE (TIM4)->CCR2
|
||||
#define FUEL7_COMPARE (TIM4)->CCR3
|
||||
#define FUEL8_COMPARE (TIM4)->CCR4
|
||||
|
||||
#define IGN1_COUNTER (TIM3)->CNT
|
||||
#define IGN2_COUNTER (TIM3)->CNT
|
||||
#define IGN3_COUNTER (TIM3)->CNT
|
||||
#define IGN4_COUNTER (TIM3)->CNT
|
||||
|
||||
#define IGN1_COMPARE (TIM3)->CCR1
|
||||
#define IGN2_COMPARE (TIM3)->CCR2
|
||||
#define IGN3_COMPARE (TIM3)->CCR3
|
||||
#define IGN4_COMPARE (TIM3)->CCR4
|
||||
|
||||
#ifndef SMALL_FLASH_MODE
|
||||
#define FUEL5_COUNTER (TIM5)->CNT
|
||||
#define FUEL6_COUNTER (TIM5)->CNT
|
||||
#define FUEL7_COUNTER (TIM5)->CNT
|
||||
#define FUEL8_COUNTER (TIM5)->CNT
|
||||
|
||||
#define FUEL5_COMPARE (TIM5)->CCR1
|
||||
#define FUEL6_COMPARE (TIM5)->CCR2
|
||||
#define FUEL7_COMPARE (TIM5)->CCR3
|
||||
#define FUEL8_COMPARE (TIM5)->CCR4
|
||||
|
||||
#define IGN5_COUNTER (TIM4)->CNT
|
||||
#define IGN6_COUNTER (TIM4)->CNT
|
||||
#define IGN7_COUNTER (TIM4)->CNT
|
||||
#define IGN8_COUNTER (TIM4)->CNT
|
||||
|
||||
#define IGN5_COMPARE (TIM4)->CCR1
|
||||
#define IGN6_COMPARE (TIM4)->CCR2
|
||||
#define IGN7_COMPARE (TIM4)->CCR3
|
||||
#define IGN8_COMPARE (TIM4)->CCR4
|
||||
|
||||
#endif
|
||||
//https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
|
||||
#define FUEL1_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC1E
|
||||
#define FUEL2_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC2E
|
||||
#define FUEL3_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC3E
|
||||
#define FUEL4_TIMER_ENABLE() (TIM2)->CCER |= TIM_CCER_CC4E
|
||||
#define FUEL5_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC1E
|
||||
#define FUEL6_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC2E
|
||||
#define FUEL7_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC3E
|
||||
#define FUEL8_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC1E
|
||||
#define IGN2_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC2E
|
||||
#define IGN3_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC3E
|
||||
#define IGN4_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC4E
|
||||
#define IGN5_TIMER_ENABLE() (TIM1)->CCER |= TIM_CCER_CC1E
|
||||
|
||||
#define FUEL1_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC1E
|
||||
#define FUEL2_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC2E
|
||||
#define FUEL3_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC3E
|
||||
#define FUEL4_TIMER_DISABLE() (TIM2)->CCER &= ~TIM_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC1E
|
||||
#define IGN2_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC2E
|
||||
#define IGN3_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC3E
|
||||
#define IGN4_TIMER_ENABLE() (TIM3)->CCER |= TIM_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC1E
|
||||
#define IGN2_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC2E
|
||||
#define IGN3_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC3E
|
||||
#define IGN4_TIMER_DISABLE() (TIM3)->CCER &= ~TIM_CCER_CC4E
|
||||
#define IGN5_TIMER_DISABLE() (TIM1)->CCER &= ~TIM_CCER_CC1E
|
||||
|
||||
#ifndef SMALL_FLASH_MODE
|
||||
#define FUEL5_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC1E
|
||||
#define FUEL6_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC2E
|
||||
#define FUEL7_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC3E
|
||||
#define FUEL8_TIMER_ENABLE() (TIM5)->CCER |= TIM_CCER_CC4E
|
||||
|
||||
#define FUEL5_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC1E
|
||||
#define FUEL6_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC2E
|
||||
#define FUEL7_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC3E
|
||||
#define FUEL8_TIMER_DISABLE() (TIM5)->CCER &= ~TIM_CCER_CC4E
|
||||
|
||||
#define IGN5_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC1E
|
||||
#define IGN6_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC2E
|
||||
#define IGN7_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC3E
|
||||
#define IGN8_TIMER_ENABLE() (TIM4)->CCER |= TIM_CCER_CC4E
|
||||
|
||||
#define IGN5_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC1E
|
||||
#define IGN6_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC2E
|
||||
#define IGN7_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC3E
|
||||
#define IGN8_TIMER_DISABLE() (TIM4)->CCER &= ~TIM_CCER_CC4E
|
||||
#endif
|
||||
#else //libmaple core aka STM32DUINO
|
||||
#define FUEL1_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL2_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL3_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL4_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL5_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define FUEL6_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define FUEL7_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define FUEL8_COUNTER (TIMER4->regs).gen->CNT
|
||||
|
||||
#define IGN1_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN2_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN3_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN4_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN5_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN6_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN7_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN8_COUNTER (TIMER4->regs).gen->CNT
|
||||
|
||||
#define FUEL1_COMPARE (TIMER2->regs).gen->CCR1
|
||||
#define FUEL2_COMPARE (TIMER2->regs).gen->CCR2
|
||||
#define FUEL3_COMPARE (TIMER2->regs).gen->CCR3
|
||||
#define FUEL4_COMPARE (TIMER2->regs).gen->CCR4
|
||||
#define FUEL5_COMPARE (TIMER4->regs).gen->CCR1
|
||||
#define FUEL6_COMPARE (TIMER4->regs).gen->CCR2
|
||||
#define FUEL7_COMPARE (TIMER4->regs).gen->CCR3
|
||||
#define FUEL8_COMPARE (TIMER4->regs).gen->CCR4
|
||||
|
||||
#define IGN1_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN2_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN3_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN4_COUNTER (TIMER3->regs).gen->CNT
|
||||
|
||||
#define IGN1_COMPARE (TIMER3->regs).gen->CCR1
|
||||
#define IGN2_COMPARE (TIMER3->regs).gen->CCR2
|
||||
#define IGN3_COMPARE (TIMER3->regs).gen->CCR3
|
||||
#define IGN4_COMPARE (TIMER3->regs).gen->CCR4
|
||||
|
||||
#ifndef SMALL_FLASH_MODE
|
||||
#define FUEL5_COUNTER (TIMER5->regs).gen->CNT
|
||||
#define FUEL6_COUNTER (TIMER5->regs).gen->CNT
|
||||
#define FUEL7_COUNTER (TIMER5->regs).gen->CNT
|
||||
#define FUEL8_COUNTER (TIMER5->regs).gen->CNT
|
||||
|
||||
#define FUEL5_COMPARE (TIMER5->regs).gen->CCR1
|
||||
#define FUEL6_COMPARE (TIMER5->regs).gen->CCR2
|
||||
#define FUEL7_COMPARE (TIMER5->regs).gen->CCR3
|
||||
#define FUEL8_COMPARE (TIMER5->regs).gen->CCR4
|
||||
|
||||
#define IGN5_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN6_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN7_COUNTER (TIMER4->regs).gen->CNT
|
||||
#define IGN8_COUNTER (TIMER4->regs).gen->CNT
|
||||
|
||||
#define IGN5_COMPARE (TIMER4->regs).gen->CCR1
|
||||
#define IGN6_COMPARE (TIMER4->regs).gen->CCR2
|
||||
#define IGN7_COMPARE (TIMER4->regs).gen->CCR3
|
||||
#define IGN8_COMPARE (TIMER4->regs).gen->CCR4
|
||||
|
||||
#endif
|
||||
//https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
|
||||
#define FUEL1_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define FUEL2_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define FUEL3_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define FUEL4_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
#define FUEL5_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define FUEL6_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define FUEL7_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define FUEL8_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define IGN2_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define IGN3_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define IGN4_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
#define IGN5_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define IGN6_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define IGN7_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define IGN8_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#define FUEL1_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define FUEL2_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define FUEL3_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define FUEL4_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
#define FUEL5_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define FUEL6_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define FUEL7_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define FUEL8_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define IGN2_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define IGN3_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define IGN4_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define IGN2_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define IGN3_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define IGN4_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#ifndef SMALL_FLASH_MODE
|
||||
#define FUEL5_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define FUEL6_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define FUEL7_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define FUEL8_TIMER_ENABLE() (TIMER5->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#define IGN5_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define IGN6_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define IGN7_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define IGN8_TIMER_ENABLE() (TIMER4->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#define FUEL5_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define FUEL6_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define FUEL7_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define FUEL8_TIMER_DISABLE() (TIMER5->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
|
||||
#define IGN5_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define IGN6_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define IGN7_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define IGN8_TIMER_DISABLE() (TIMER4->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -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
|
||||
|
@ -48,15 +53,15 @@ void initialiseSchedulers()
|
|||
FTM0_CNT = 0x0000; // Reset the count to zero
|
||||
FTM0_MOD = 0xFFFF; // max modulus = 65535
|
||||
|
||||
//FlexTimer 1 is used for schedules on channel 5+. Currently only channel 5 is used, but will likely be expanded later
|
||||
FTM1_MODE |= FTM_MODE_WPDIS; // Write Protection Disable
|
||||
FTM1_MODE |= FTM_MODE_FTMEN; //Flex Timer module enable
|
||||
FTM1_MODE |= FTM_MODE_INIT;
|
||||
//FlexTimer 3 is used for schedules on channel 5+. Currently only channel 5 is used, but will likely be expanded later
|
||||
FTM3_MODE |= FTM_MODE_WPDIS; // Write Protection Disable
|
||||
FTM3_MODE |= FTM_MODE_FTMEN; //Flex Timer module enable
|
||||
FTM3_MODE |= FTM_MODE_INIT;
|
||||
|
||||
FTM1_SC = 0x00; // Set this to zero before changing the modulus
|
||||
FTM1_CNTIN = 0x0000; //Shouldn't be needed, but just in case
|
||||
FTM1_CNT = 0x0000; // Reset the count to zero
|
||||
FTM1_MOD = 0xFFFF; // max modulus = 65535
|
||||
FTM3_SC = 0x00; // Set this to zero before changing the modulus
|
||||
FTM3_CNTIN = 0x0000; //Shouldn't be needed, but just in case
|
||||
FTM3_CNT = 0x0000; // Reset the count to zero
|
||||
FTM3_MOD = 0xFFFF; // max modulus = 65535
|
||||
|
||||
/*
|
||||
* Enable the clock for FTM0/1
|
||||
|
@ -66,7 +71,7 @@ void initialiseSchedulers()
|
|||
* 11 External clock
|
||||
*/
|
||||
FTM0_SC |= FTM_SC_CLKS(0b1);
|
||||
FTM1_SC |= FTM_SC_CLKS(0b1);
|
||||
FTM3_SC |= FTM_SC_CLKS(0b1);
|
||||
|
||||
/*
|
||||
* Set Prescaler
|
||||
|
@ -84,7 +89,7 @@ void initialiseSchedulers()
|
|||
* 111 Divide by 128
|
||||
*/
|
||||
FTM0_SC |= FTM_SC_PS(0b111);
|
||||
FTM1_SC |= FTM_SC_PS(0b111);
|
||||
FTM3_SC |= FTM_SC_PS(0b111);
|
||||
|
||||
//Setup the channels (See Pg 1014 of K64 DS).
|
||||
//The are probably not needed as power on state should be 0
|
||||
|
@ -166,35 +171,33 @@ void initialiseSchedulers()
|
|||
Timer1.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
|
||||
Timer2.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
|
||||
Timer3.setPrescaleFactor((HAL_RCC_GetHCLKFreq() * 2U)-1); //2us resolution
|
||||
Timer2.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
Timer3.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
Timer1.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
#else //libmaple core aka STM32DUINO
|
||||
//see https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
|
||||
//(CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz).
|
||||
//Timer2 to 4 is on APB1, Timer1 on APB2. http://www.st.com/resource/en/datasheet/stm32f103cb.pdf sheet 12
|
||||
Timer1.setPrescaleFactor((72 * 2U)-1); //2us resolution
|
||||
Timer2.setPrescaleFactor((36 * 2U)-1); //2us resolution
|
||||
Timer3.setPrescaleFactor((36 * 2U)-1); //2us resolution
|
||||
Timer2.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(TIMER_CH2, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(TIMER_CH3, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(TIMER_CH4, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
Timer3.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(TIMER_CH2, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(TIMER_CH3, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(TIMER_CH4, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
#if defined (STM32F1) || defined(__STM32F1__)
|
||||
//(CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz).
|
||||
//Timer2 to 4 is on APB1, Timer1 on APB2. http://www.st.com/resource/en/datasheet/stm32f103cb.pdf sheet 12
|
||||
Timer1.setPrescaleFactor((72 * 2U)-1); //2us resolution
|
||||
Timer2.setPrescaleFactor((36 * 2U)-1); //2us resolution
|
||||
Timer3.setPrescaleFactor((36 * 2U)-1); //2us resolution
|
||||
#elif defined(STM32F4)
|
||||
//(CYCLES_PER_MICROSECOND == 168, APB2 at 84MHz, APB1 at 42MHz).
|
||||
//Timer2 to 14 is on APB1, Timers 1, 8, 9 and 10 on APB2. http://www.st.com/resource/en/datasheet/stm32f407vg.pdf sheet 120
|
||||
Timer1.setPrescaleFactor((84 * 2U)-1); //2us resolution
|
||||
Timer2.setPrescaleFactor((42 * 2U)-1); //2us resolution
|
||||
Timer3.setPrescaleFactor((42 * 2U)-1); //2us resolution
|
||||
#endif
|
||||
#endif
|
||||
Timer2.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
Timer2.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
Timer3.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(2, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(3, TIMER_OUTPUT_COMPARE);
|
||||
Timer3.setMode(4, TIMER_OUTPUT_COMPARE);
|
||||
Timer1.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
|
||||
Timer2.attachInterrupt(1, fuelSchedule1Interrupt);
|
||||
Timer2.attachInterrupt(2, fuelSchedule2Interrupt);
|
||||
Timer2.attachInterrupt(3, fuelSchedule3Interrupt);
|
||||
|
@ -243,10 +246,18 @@ void initialiseSchedulers()
|
|||
fuelSchedule2.counter = &FUEL2_COUNTER;
|
||||
fuelSchedule3.counter = &FUEL3_COUNTER;
|
||||
fuelSchedule4.counter = &FUEL4_COUNTER;
|
||||
#if (INJ_CHANNELS >= 5)
|
||||
fuelSchedule5.counter = &FUEL5_COUNTER;
|
||||
fuelSchedule6.counter = &FUEL6_COUNTER;
|
||||
fuelSchedule7.counter = &FUEL7_COUNTER;
|
||||
fuelSchedule8.counter = &FUEL8_COUNTER;
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 6)
|
||||
fuelSchedule5.counter = &FUEL6_COUNTER;
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 7)
|
||||
fuelSchedule5.counter = &FUEL7_COUNTER;
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 8)
|
||||
fuelSchedule5.counter = &FUEL8_COUNTER;
|
||||
#endif
|
||||
|
||||
ignitionSchedule1.Status = OFF;
|
||||
ignitionSchedule2.Status = OFF;
|
||||
|
@ -475,6 +486,7 @@ void setFuelSchedule4(unsigned long timeout, unsigned long duration) //Uses time
|
|||
}
|
||||
}
|
||||
|
||||
#if INJ_CHANNELS >= 5
|
||||
void setFuelSchedule5(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||
{
|
||||
if(fuelSchedule5.Status != RUNNING) //Check that we're not already part way through a schedule
|
||||
|
@ -506,6 +518,7 @@ void setFuelSchedule5(void (*startCallback)(), unsigned long timeout, unsigned l
|
|||
fuelSchedule5.hasNextSchedule = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INJ_CHANNELS >= 6
|
||||
//This uses timer
|
||||
|
@ -563,7 +576,7 @@ void setFuelSchedule7(unsigned long timeout, unsigned long duration)
|
|||
//The following must be enclosed in the noInterupts block to avoid contention caused if the relevant interrupt fires before the state is fully set
|
||||
noInterrupts();
|
||||
fuelSchedule7.startCompare = FUEL7_COUNTER + timeout_timer_compare;
|
||||
fuelSchedule7.endCompare = fuelSchedule6.startCompare + uS_TO_TIMER_COMPARE(duration);
|
||||
fuelSchedule7.endCompare = fuelSchedule7.startCompare + uS_TO_TIMER_COMPARE(duration);
|
||||
FUEL7_COMPARE = fuelSchedule7.startCompare; //Use the C copmare unit of timer 3
|
||||
fuelSchedule7.Status = PENDING; //Turn this schedule on
|
||||
fuelSchedule7.schedulesSet++; //Increment the number of times this schedule has been set
|
||||
|
@ -767,6 +780,102 @@ void setIgnitionSchedule5(void (*startCallback)(), unsigned long timeout, unsign
|
|||
IGN5_TIMER_ENABLE();
|
||||
}
|
||||
}
|
||||
void setIgnitionSchedule6(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||
{
|
||||
if(ignitionSchedule6.Status != RUNNING) //Check that we're not already part way through a schedule
|
||||
{
|
||||
|
||||
ignitionSchedule6.StartCallback = startCallback; //Name the start callback function
|
||||
ignitionSchedule6.EndCallback = endCallback; //Name the start callback function
|
||||
ignitionSchedule6.duration = duration;
|
||||
|
||||
//Need to check that the timeout doesn't exceed the overflow
|
||||
uint16_t timeout_timer_compare;
|
||||
if (timeout > MAX_TIMER_PERIOD) { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW( (MAX_TIMER_PERIOD - 1) ); } // If the timeout is >4x (Each tick represents 4uS) the maximum allowed value of unsigned int (65535), the timer compare value will overflow when appliedcausing erratic behaviour such as erroneous sparking.
|
||||
else { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW(timeout); } //Normal case
|
||||
|
||||
noInterrupts();
|
||||
ignitionSchedule6.startCompare = IGN6_COUNTER + timeout_timer_compare;
|
||||
ignitionSchedule6.endCompare = ignitionSchedule6.startCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
IGN6_COMPARE = ignitionSchedule6.startCompare;
|
||||
ignitionSchedule6.Status = PENDING; //Turn this schedule on
|
||||
ignitionSchedule6.schedulesSet++;
|
||||
interrupts();
|
||||
IGN6_TIMER_ENABLE();
|
||||
}
|
||||
else
|
||||
{
|
||||
//If the schedule is already running, we can set the next schedule so it is ready to go
|
||||
//This is required in cases of high rpm and high DC where there otherwise would not be enough time to set the schedule
|
||||
ignitionSchedule6.nextStartCompare = IGN6_COUNTER + uS_TO_TIMER_COMPARE_SLOW(timeout);
|
||||
ignitionSchedule6.nextEndCompare = ignitionSchedule6.nextStartCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
ignitionSchedule6.hasNextSchedule = true;
|
||||
}
|
||||
}
|
||||
void setIgnitionSchedule7(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||
{
|
||||
if(ignitionSchedule7.Status != RUNNING) //Check that we're not already part way through a schedule
|
||||
{
|
||||
|
||||
ignitionSchedule7.StartCallback = startCallback; //Name the start callback function
|
||||
ignitionSchedule7.EndCallback = endCallback; //Name the start callback function
|
||||
ignitionSchedule7.duration = duration;
|
||||
|
||||
//Need to check that the timeout doesn't exceed the overflow
|
||||
uint16_t timeout_timer_compare;
|
||||
if (timeout > MAX_TIMER_PERIOD) { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW( (MAX_TIMER_PERIOD - 1) ); } // If the timeout is >4x (Each tick represents 4uS) the maximum allowed value of unsigned int (65535), the timer compare value will overflow when appliedcausing erratic behaviour such as erroneous sparking.
|
||||
else { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW(timeout); } //Normal case
|
||||
|
||||
noInterrupts();
|
||||
ignitionSchedule7.startCompare = IGN4_COUNTER + timeout_timer_compare;
|
||||
ignitionSchedule7.endCompare = ignitionSchedule7.startCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
IGN7_COMPARE = ignitionSchedule7.startCompare;
|
||||
ignitionSchedule7.Status = PENDING; //Turn this schedule on
|
||||
ignitionSchedule7.schedulesSet++;
|
||||
interrupts();
|
||||
IGN7_TIMER_ENABLE();
|
||||
}
|
||||
else
|
||||
{
|
||||
//If the schedule is already running, we can set the next schedule so it is ready to go
|
||||
//This is required in cases of high rpm and high DC where there otherwise would not be enough time to set the schedule
|
||||
ignitionSchedule7.nextStartCompare = IGN7_COUNTER + uS_TO_TIMER_COMPARE_SLOW(timeout);
|
||||
ignitionSchedule7.nextEndCompare = ignitionSchedule7.nextStartCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
ignitionSchedule7.hasNextSchedule = true;
|
||||
}
|
||||
}
|
||||
void setIgnitionSchedule8(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||
{
|
||||
if(ignitionSchedule8.Status != RUNNING) //Check that we're not already part way through a schedule
|
||||
{
|
||||
|
||||
ignitionSchedule8.StartCallback = startCallback; //Name the start callback function
|
||||
ignitionSchedule8.EndCallback = endCallback; //Name the start callback function
|
||||
ignitionSchedule8.duration = duration;
|
||||
|
||||
//Need to check that the timeout doesn't exceed the overflow
|
||||
uint16_t timeout_timer_compare;
|
||||
if (timeout > MAX_TIMER_PERIOD) { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW( (MAX_TIMER_PERIOD - 1) ); } // If the timeout is >4x (Each tick represents 4uS) the maximum allowed value of unsigned int (65535), the timer compare value will overflow when appliedcausing erratic behaviour such as erroneous sparking.
|
||||
else { timeout_timer_compare = uS_TO_TIMER_COMPARE_SLOW(timeout); } //Normal case
|
||||
|
||||
noInterrupts();
|
||||
ignitionSchedule8.startCompare = IGN8_COUNTER + timeout_timer_compare;
|
||||
ignitionSchedule8.endCompare = ignitionSchedule8.startCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
IGN8_COMPARE = ignitionSchedule8.startCompare;
|
||||
ignitionSchedule8.Status = PENDING; //Turn this schedule on
|
||||
ignitionSchedule8.schedulesSet++;
|
||||
interrupts();
|
||||
IGN8_TIMER_ENABLE();
|
||||
}
|
||||
else
|
||||
{
|
||||
//If the schedule is already running, we can set the next schedule so it is ready to go
|
||||
//This is required in cases of high rpm and high DC where there otherwise would not be enough time to set the schedule
|
||||
ignitionSchedule8.nextStartCompare = IGN8_COUNTER + uS_TO_TIMER_COMPARE_SLOW(timeout);
|
||||
ignitionSchedule8.nextEndCompare = ignitionSchedule8.nextStartCompare + uS_TO_TIMER_COMPARE_SLOW(duration);
|
||||
ignitionSchedule8.hasNextSchedule = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************************************************************************************************************************************/
|
||||
//This function (All 8 ISR functions that are below) gets called when either the start time or the duration time are reached
|
||||
|
@ -915,6 +1024,39 @@ static inline void fuelSchedule4Interrupt() //Most ARM chips can simply call a f
|
|||
}
|
||||
}
|
||||
|
||||
#if (INJ_CHANNELS >= 5)
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER1_COMPC_vect) //fuelSchedule5
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule5Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
if (fuelSchedule5.Status == PENDING) //Check to see if this schedule is turn on
|
||||
{
|
||||
openInjector5();
|
||||
fuelSchedule5.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||
FUEL5_COMPARE = fuelSchedule5.endCompare;
|
||||
}
|
||||
else if (fuelSchedule5.Status == RUNNING)
|
||||
{
|
||||
closeInjector5();
|
||||
fuelSchedule5.Status = OFF; //Turn off the schedule
|
||||
fuelSchedule5.schedulesSet = 0;
|
||||
|
||||
//If there is a next schedule queued up, activate it
|
||||
if(fuelSchedule5.hasNextSchedule == true)
|
||||
{
|
||||
FUEL5_COMPARE = fuelSchedule5.nextStartCompare;
|
||||
fuelSchedule5.endCompare = fuelSchedule5.nextEndCompare;
|
||||
fuelSchedule5.Status = PENDING;
|
||||
fuelSchedule5.schedulesSet = 1;
|
||||
fuelSchedule5.hasNextSchedule = false;
|
||||
}
|
||||
else { FUEL5_TIMER_DISABLE(); }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (INJ_CHANNELS >= 6)
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER4_COMPA_vect) //fuelSchedule6
|
||||
|
@ -950,7 +1092,76 @@ static inline void fuelSchedule6Interrupt() //Most ARM chips can simply call a f
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
#if (INJ_CHANNELS >= 7)
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPC_vect) //fuelSchedule7
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule7Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
if (fuelSchedule7.Status == PENDING) //Check to see if this schedule is turn on
|
||||
{
|
||||
openInjector7();
|
||||
fuelSchedule7.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||
FUEL7_COMPARE = fuelSchedule7.endCompare;
|
||||
}
|
||||
else if (fuelSchedule7.Status == RUNNING)
|
||||
{
|
||||
closeInjector7();
|
||||
fuelSchedule7.Status = OFF; //Turn off the schedule
|
||||
fuelSchedule7.schedulesSet = 0;
|
||||
|
||||
//If there is a next schedule queued up, activate it
|
||||
if(fuelSchedule7.hasNextSchedule == true)
|
||||
{
|
||||
FUEL7_COMPARE = fuelSchedule7.nextStartCompare;
|
||||
fuelSchedule7.endCompare = fuelSchedule7.nextEndCompare;
|
||||
fuelSchedule7.Status = PENDING;
|
||||
fuelSchedule7.schedulesSet = 1;
|
||||
fuelSchedule7.hasNextSchedule = false;
|
||||
}
|
||||
else { FUEL7_TIMER_DISABLE(); }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (INJ_CHANNELS >= 8)
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPB_vect) //fuelSchedule8
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule8Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
if (fuelSchedule8.Status == PENDING) //Check to see if this schedule is turn on
|
||||
{
|
||||
//fuelSchedule4.StartCallback();
|
||||
openInjector8();
|
||||
fuelSchedule8.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||
FUEL8_COMPARE = fuelSchedule8.endCompare;
|
||||
}
|
||||
else if (fuelSchedule8.Status == RUNNING)
|
||||
{
|
||||
//fuelSchedule4.EndCallback();
|
||||
closeInjector8();
|
||||
fuelSchedule8.Status = OFF; //Turn off the schedule
|
||||
fuelSchedule8.schedulesSet = 0;
|
||||
|
||||
//If there is a next schedule queued up, activate it
|
||||
if(fuelSchedule8.hasNextSchedule == true)
|
||||
{
|
||||
FUEL8_COMPARE = fuelSchedule8.nextStartCompare;
|
||||
fuelSchedule8.endCompare = fuelSchedule8.nextEndCompare;
|
||||
fuelSchedule8.Status = PENDING;
|
||||
fuelSchedule8.schedulesSet = 1;
|
||||
fuelSchedule8.hasNextSchedule = false;
|
||||
}
|
||||
else { FUEL8_TIMER_DISABLE(); }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 1
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPA_vect) //ignitionSchedule1
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule1Interrupt() //Most ARM chips can simply call a function
|
||||
|
@ -988,8 +1199,10 @@ static inline void ignitionSchedule1Interrupt() //Most ARM chips can simply call
|
|||
IGN1_TIMER_DISABLE();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
#if IGN_CHANNELS >= 2
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPB_vect) //ignitionSchedule2
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule2Interrupt() //Most ARM chips can simply call a function
|
||||
|
@ -1011,8 +1224,10 @@ static inline void ignitionSchedule2Interrupt() //Most ARM chips can simply call
|
|||
IGN2_TIMER_DISABLE();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
#if IGN_CHANNELS >= 3
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPC_vect) //ignitionSchedule3
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule3Interrupt() //Most ARM chips can simply call a function
|
||||
|
@ -1044,7 +1259,9 @@ static inline void ignitionSchedule3Interrupt() //Most ARM chips can simply call
|
|||
else { IGN3_TIMER_DISABLE(); }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 4
|
||||
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||
ISR(TIMER4_COMPA_vect) //ignitionSchedule4
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
|
@ -1077,7 +1294,9 @@ static inline void ignitionSchedule4Interrupt() //Most ARM chips can simply call
|
|||
else { IGN4_TIMER_DISABLE(); }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 5
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER1_COMPC_vect) //ignitionSchedule5
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
|
@ -1100,7 +1319,7 @@ static inline void ignitionSchedule5Interrupt() //Most ARM chips can simply call
|
|||
IGN5_TIMER_DISABLE();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(CORE_TEENSY)
|
||||
|
@ -1125,5 +1344,34 @@ void ftm0_isr(void)
|
|||
else if(interrupt7) { FTM0_C6SC &= ~FTM_CSC_CHF; ignitionSchedule3Interrupt(); }
|
||||
else if(interrupt8) { FTM0_C7SC &= ~FTM_CSC_CHF; ignitionSchedule4Interrupt(); }
|
||||
|
||||
}
|
||||
void ftm3_isr(void)
|
||||
{
|
||||
|
||||
#if (INJ_CHANNELS >= 5)
|
||||
if(bool(FTM3_C0SC & FTM_CSC_CHF)) { FTM3_C0SC &= ~FTM_CSC_CHF; fuelSchedule5Interrupt(); }
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 6)
|
||||
else if(bool(FTM3_C1SC & FTM_CSC_CHF)) { FTM3_C1SC &= ~FTM_CSC_CHF; fuelSchedule6Interrupt(); }
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 7)
|
||||
else if(bool(FTM3_C2SC & FTM_CSC_CHF)) { FTM3_C2SC &= ~FTM_CSC_CHF; fuelSchedule7Interrupt(); }
|
||||
#endif
|
||||
#if (INJ_CHANNELS >= 8)
|
||||
else if(bool(FTM3_C3SC & FTM_CSC_CHF)) { FTM3_C3SC &= ~FTM_CSC_CHF; fuelSchedule8Interrupt(); }
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 5)
|
||||
if(bool(FTM3_C4SC & FTM_CSC_CHF)) { FTM3_C4SC &= ~FTM_CSC_CHF; ignitionSchedule5Interrupt(); }
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 6)
|
||||
else if(bool(FTM3_C5SC & FTM_CSC_CHF)) { FTM3_C5SC &= ~FTM_CSC_CHF; ignitionSchedule6Interrupt(); }
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 7)
|
||||
else if(bool(FTM3_C6SC & FTM_CSC_CHF)) { FTM3_C6SC &= ~FTM_CSC_CHF; ignitionSchedule7Interrupt(); }
|
||||
#endif
|
||||
#if (IGN_CHANNELS >= 8)
|
||||
else if(bool(FTM3_C7SC & FTM_CSC_CHF)) { FTM3_C7SC &= ~FTM_CSC_CHF; ignitionSchedule8Interrupt(); }
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -42,6 +42,8 @@ void initialiseADC()
|
|||
BIT_CLEAR(ADCSRA,ADPS1);
|
||||
BIT_CLEAR(ADCSRA,ADPS0);
|
||||
#endif
|
||||
#elif defined(ARDUINO_ARCH_STM32) //STM32GENERIC lib
|
||||
analogReadResolution(10); //use 10bits for analog
|
||||
#endif
|
||||
MAPcurRev = 0;
|
||||
MAPcount = 0;
|
||||
|
@ -119,7 +121,6 @@ static inline void readMAP()
|
|||
if(currentStatus.MAP < 0) { currentStatus.MAP = 0; } //Sanity check
|
||||
}
|
||||
else { instanteneousMAPReading(); }
|
||||
|
||||
MAPcurRev = currentStatus.startRevolutions; //Reset the current rev count
|
||||
MAPrunningValue = 0;
|
||||
MAPcount = 0;
|
||||
|
|
|
@ -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
|
||||
|
@ -141,9 +147,11 @@ bool initialisationComplete = false; //Tracks whether the setup() functino has r
|
|||
|
||||
void setup()
|
||||
{
|
||||
initialiseTimers();
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
|
||||
//Setup the dummy fuel and ignition tables
|
||||
//dummyFuelTable(&fuelTable);
|
||||
//dummyIgnitionTable(&ignitionTable);
|
||||
table3D_setSize(&fuelTable, 16);
|
||||
table3D_setSize(&ignitionTable, 16);
|
||||
table3D_setSize(&afrTable, 16);
|
||||
|
@ -154,10 +162,8 @@ void setup()
|
|||
table3D_setSize(&trim2Table, 6);
|
||||
table3D_setSize(&trim3Table, 6);
|
||||
table3D_setSize(&trim4Table, 6);
|
||||
initialiseTimers();
|
||||
|
||||
#if defined(CORE_STM32)
|
||||
EEPROM.init();
|
||||
#endif
|
||||
loadConfig();
|
||||
doUpdates(); //Check if any data items need updating (Occurs ith firmware updates)
|
||||
|
||||
|
@ -166,16 +172,9 @@ void setup()
|
|||
configPage4.bootloaderCaps = 0;
|
||||
|
||||
Serial.begin(115200);
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3
|
||||
if (configPage9.enable_canbus == 1) { CANSerial.begin(115200); }
|
||||
#elif defined(CORE_STM32)
|
||||
if (configPage9.enable_canbus == 1) { CANSerial.begin(115200); }
|
||||
else if (configPage9.enable_canbus == 2)
|
||||
{
|
||||
//enable local can interface
|
||||
}
|
||||
#elif defined(CORE_TEENSY)
|
||||
if (configPage9.enable_canbus == 1) { CANSerial.begin(115200); }
|
||||
|
||||
#if defined(CORE_STM32) || defined(CORE_TEENSY)
|
||||
else if (configPage9.enable_canbus == 2)
|
||||
{
|
||||
//Teensy onboard CAN not used currently
|
||||
|
@ -185,7 +184,8 @@ void setup()
|
|||
//static CAN_message_t txmsg,rxmsg;
|
||||
//CANbus0.begin();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
//Repoint the 2D table structs to the config pages that were just loaded
|
||||
taeTable.valueSize = SIZE_BYTE; //Set this table to use byte values
|
||||
|
@ -665,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:
|
||||
|
@ -721,48 +727,34 @@ void loop()
|
|||
// 1) Every 64 loops (64 Is more than fast enough for TunerStudio). This function is equivalent to ((loopCount % 64) == 1) but is considerably faster due to not using the mod or division operations
|
||||
// 2) If the amount of data in the serial buffer is greater than a set threhold (See globals.h). This is to avoid serial buffer overflow when large amounts of data is being sent
|
||||
//if ( (BIT_CHECK(TIMER_mask, BIT_TIMER_15HZ)) || (Serial.available() > SERIAL_BUFFER_THRESHOLD) )
|
||||
//if ( (timer15Hz == true) )
|
||||
if ( ((mainLoopCount & 31) == 1) or (Serial.available() > SERIAL_BUFFER_THRESHOLD) )
|
||||
{
|
||||
if (Serial.available() > 0) { command(); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3
|
||||
//if serial3 interface is enabled then check for serial3 requests.
|
||||
if (configPage9.enable_canbus == 1)
|
||||
{
|
||||
if ( (BIT_CHECK(LOOP_TIMER, BIT_TIMER_15HZ)) || (CANSerial.available() > SERIAL_BUFFER_THRESHOLD) )
|
||||
{
|
||||
if (CANSerial.available() > 0) { canCommand(); }
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(CORE_TEENSY) || defined(CORE_STM32)
|
||||
//if can or secondary serial interface is enabled then check for requests.
|
||||
if (configPage9.enable_canbus == 1) //secondary serial interface enabled
|
||||
{
|
||||
if ( (BIT_CHECK(LOOP_TIMER, BIT_TIMER_15HZ)) || (CANSerial.available() > SERIAL_BUFFER_THRESHOLD) )
|
||||
{
|
||||
if (CANSerial.available() > 0) { canCommand(); }
|
||||
}
|
||||
}
|
||||
else if (configPage9.enable_canbus == 2) // can module enabled
|
||||
{
|
||||
if ( ((mainLoopCount & 31) == 1) or (CANSerial.available() > SERIAL_BUFFER_THRESHOLD) )
|
||||
{
|
||||
if (CANSerial.available() > 0) { canCommand(); }
|
||||
}
|
||||
}
|
||||
#if defined(CORE_TEENSY) || defined(CORE_STM32)
|
||||
else if (configPage9.enable_canbus == 2) // can module enabled
|
||||
{
|
||||
//check local can module
|
||||
// if ( (BIT_CHECK(LOOP_TIMER, BIT_TIMER_15HZ)) or (CANbus0.available())
|
||||
// if ( BIT_CHECK(LOOP_TIMER, BIT_TIMER_15HZ) or (CANbus0.available())
|
||||
// {
|
||||
// CANbus0.read(rx_msg);
|
||||
// }
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//Displays currently disabled
|
||||
// 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
|
||||
{
|
||||
|
@ -928,12 +920,12 @@ void loop()
|
|||
#endif
|
||||
vvtControl();
|
||||
idleControl(); //Perform any idle related actions. Even at higher frequencies, running 4x per second is sufficient.
|
||||
}
|
||||
} //4Hz timer
|
||||
if (BIT_CHECK(LOOP_TIMER, BIT_TIMER_1HZ)) //Once per second)
|
||||
{
|
||||
BIT_CLEAR(TIMER_mask, BIT_TIMER_1HZ);
|
||||
readBaro(); //Infrequent baro readings are not an issue.
|
||||
}
|
||||
} //1Hz timer
|
||||
|
||||
if(configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_OL || configPage6.iacAlgorithm == IAC_ALGORITHM_STEP_CL) { idleControl(); } //Run idlecontrol every loop for stepper idle.
|
||||
|
||||
|
@ -1069,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 / )
|
||||
}
|
||||
|
||||
|
@ -1082,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,7 +1542,18 @@ void loop()
|
|||
//Likewise for the ignition
|
||||
|
||||
//fixedCrankingOverride is used to extend the dwell during cranking so that the decoder can trigger the spark upon seeing a certain tooth. Currently only available on the basic distributor and 4g63 decoders.
|
||||
if ( configPage4.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) && (decoderHasFixedCrankingTiming == true) ) { fixedCrankingOverride = currentStatus.dwell * 3; }
|
||||
if ( configPage4.ignCranklock && BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) && (decoderHasFixedCrankingTiming == true) )
|
||||
{
|
||||
fixedCrankingOverride = currentStatus.dwell * 3;
|
||||
//This is a safety step to prevent the ignition start time occuring AFTER the target tooth pulse has already occcured. It simply moves the start time forward a little, which is compensated for by the increase in the dwell time
|
||||
if(currentStatus.RPM < 250)
|
||||
{
|
||||
ignition1StartAngle -= 5;
|
||||
ignition2StartAngle -= 5;
|
||||
ignition3StartAngle -= 5;
|
||||
ignition4StartAngle -= 5;
|
||||
}
|
||||
}
|
||||
else { fixedCrankingOverride = 0; }
|
||||
|
||||
//Perform an initial check to see if the ignition is turned on (Ignition only turns on after a preset number of cranking revolutions and:
|
||||
|
@ -1568,6 +1573,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) )
|
||||
{
|
||||
/*
|
||||
|
@ -1587,6 +1593,7 @@ void loop()
|
|||
);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
if( (ignitionSchedule1.Status == RUNNING) && (ignition1EndAngle > crankAngle) && configPage4.StgCycles == 0)
|
||||
{
|
||||
|
@ -1605,7 +1612,7 @@ void loop()
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#if IGN_CHANNELS >= 2
|
||||
tempCrankAngle = crankAngle - channel2IgnDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
|
||||
tempStartAngle = ignition2StartAngle - channel2IgnDegrees;
|
||||
|
@ -1625,7 +1632,9 @@ void loop()
|
|||
);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 3
|
||||
tempCrankAngle = crankAngle - channel3IgnDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
|
||||
tempStartAngle = ignition3StartAngle - channel3IgnDegrees;
|
||||
|
@ -1646,7 +1655,9 @@ void loop()
|
|||
);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 4
|
||||
tempCrankAngle = crankAngle - channel4IgnDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
|
||||
tempStartAngle = ignition4StartAngle - channel4IgnDegrees;
|
||||
|
@ -1668,7 +1679,9 @@ void loop()
|
|||
);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IGN_CHANNELS >= 5
|
||||
tempCrankAngle = crankAngle - channel5IgnDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
|
||||
tempStartAngle = ignition5StartAngle - channel5IgnDegrees;
|
||||
|
@ -1689,6 +1702,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) {
|
||||
|
|
|
@ -7,7 +7,11 @@ void loadConfig();
|
|||
void loadCalibration();
|
||||
void writeCalibration();
|
||||
|
||||
#if defined(CORE_STM32) || defined(CORE_TEENSY)
|
||||
#define EEPROM_MAX_WRITE_BLOCK 64 //The maximum number of write operations that will be performed in one go. If we try to write to the EEPROM too fast (Each write takes ~3ms) then the rest of the system can hang)
|
||||
#else
|
||||
#define EEPROM_MAX_WRITE_BLOCK 30 //The maximum number of write operations that will be performed in one go. If we try to write to the EEPROM too fast (Each write takes ~3ms) then the rest of the system can hang)
|
||||
#endif
|
||||
bool eepromWritesPending = false;
|
||||
|
||||
/*
|
||||
|
|
|
@ -42,6 +42,7 @@ void writeConfig(byte tableNum)
|
|||
byte newVal; //Used for tempoerarily storing the new intended value
|
||||
//Create a pointer to the config page
|
||||
byte* pnt_configPage;
|
||||
|
||||
switch(tableNum)
|
||||
{
|
||||
case veMapPage:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -40,16 +40,19 @@ void initialiseTimers()
|
|||
lowResTimer.begin(oneMSInterval, 1000);
|
||||
|
||||
#elif defined(CORE_STM32)
|
||||
#if defined(ARDUINO_BLACK_F407VE) || defined(STM32F4) || defined(_STM32F4_)
|
||||
Timer8.setPeriod(1000); // Set up period
|
||||
Timer8.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer8.attachInterrupt(1, oneMSInterval);
|
||||
Timer8.resume(); //Start Timer
|
||||
#else
|
||||
Timer4.setPeriod(1000); // Set up period
|
||||
// Set up an interrupt
|
||||
Timer4.setMode(1, TIMER_OUTPUT_COMPARE);
|
||||
Timer4.attachInterrupt(1, oneMSInterval);
|
||||
Timer4.resume(); //Start Timer
|
||||
#endif
|
||||
|
||||
#if defined(CORE_STM32)
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
#endif
|
||||
pinMode(LED_BUILTIN, OUTPUT); //Visual WDT
|
||||
#endif
|
||||
|
||||
lastRPM_100ms = 0;
|
||||
loop33ms = 0;
|
||||
|
@ -63,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++;
|
||||
|
@ -111,9 +115,6 @@ void oneMSInterval() //Most ARM chips can simply call a function
|
|||
{
|
||||
loop100ms = 0; //Reset counter
|
||||
BIT_SET(TIMER_mask, BIT_TIMER_10HZ);
|
||||
#if defined(CORE_STM32) //debug purpose, only visal for running code
|
||||
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
||||
#endif
|
||||
|
||||
currentStatus.rpmDOT = (currentStatus.RPM - lastRPM_100ms) * 10; //This is the RPM per second that the engine has accelerated/decelleratedin the last loop
|
||||
lastRPM_100ms = currentStatus.RPM; //Record the current RPM for next calc
|
||||
|
@ -125,6 +126,9 @@ void oneMSInterval() //Most ARM chips can simply call a function
|
|||
{
|
||||
loop250ms = 0; //Reset Counter
|
||||
BIT_SET(TIMER_mask, BIT_TIMER_4HZ);
|
||||
#if defined(CORE_STM32) //debug purpose, only visal for running code
|
||||
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
||||
#endif
|
||||
|
||||
#if defined(CORE_AVR)
|
||||
//Reset watchdog timer (Not active currently)
|
||||
|
@ -143,7 +147,7 @@ void oneMSInterval() //Most ARM chips can simply call a function
|
|||
BIT_SET(TIMER_mask, BIT_TIMER_1HZ);
|
||||
|
||||
dwellLimit_uS = (1000 * configPage4.dwellLimit); //Update uS value incase setting has changed
|
||||
currentStatus.crankRPM = ((unsigned int)configPage4.crankRPM * 100);
|
||||
currentStatus.crankRPM = ((unsigned int)configPage4.crankRPM * 10);
|
||||
|
||||
//**************************************************************************************************************************************************
|
||||
//This updates the runSecs variable
|
||||
|
@ -223,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
|
||||
|
|
|
@ -95,14 +95,21 @@ void doUpdates()
|
|||
if (EEPROM.read(EEPROM_DATA_VERSION) == 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;
|
||||
|
|
|
@ -239,23 +239,32 @@ void setPinMapping(byte boardID)
|
|||
pinCoil3 = 30;
|
||||
pinO2 = A22;
|
||||
#elif defined(STM32F4)
|
||||
//Black F407VE http://wiki.stm32duino.com/index.php?title=STM32F407
|
||||
//PC8~PC12 SDio
|
||||
//PA13~PA15 & PB4 SWD(debug) pins
|
||||
//PB0 EEPROM CS pin
|
||||
//PD5 & PD6 Serial2
|
||||
pinInjector1 = PE7; //Output pin injector 1 is on
|
||||
pinInjector2 = PE8; //Output pin injector 2 is on
|
||||
pinInjector3 = PE9; //Output pin injector 3 is on
|
||||
pinInjector4 = PE10; //Output pin injector 4 is on
|
||||
pinInjector5 = PE11; //Output pin injector 5 is on
|
||||
pinCoil1 = PB10; //Pin for coil 1
|
||||
pinCoil2 = PB11; //Pin for coil 2
|
||||
pinCoil3 = PB12; //Pin for coil 3
|
||||
pinCoil4 = PB13; //Pin for coil 4
|
||||
pinCoil5 = PB14; //Pin for coil 5
|
||||
pinCoil1 = PB5; //Pin for coil 1
|
||||
pinCoil2 = PB6; //Pin for coil 2
|
||||
pinCoil3 = PB7; //Pin for coil 3
|
||||
pinCoil4 = PB8; //Pin for coil 4
|
||||
pinCoil5 = PB9; //Pin for coil 5
|
||||
pinTPS = A0; //TPS input pin
|
||||
pinMAP = A1; //MAP sensor pin
|
||||
pinIAT = A2; //IAT sensor pin
|
||||
pinCLT = A3; //CLS sensor pin
|
||||
pinCLT = A3; //CLT sensor pin
|
||||
pinO2 = A4; //O2 Sensor pin
|
||||
pinBat = A5; //Battery reference voltage pin
|
||||
pinBaro = A6;
|
||||
pinBaro = A10;
|
||||
pinIdle1 = PB8; //Single wire idle control
|
||||
pinIdle2 = PB9; //2 wire idle control
|
||||
pinBoost = PE0; //Boost control
|
||||
pinVVT_1 = PE1; //Default VVT output
|
||||
pinStepperDir = PD8; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PB15; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PD9; //Enable pin for DRV8825
|
||||
|
@ -264,43 +273,45 @@ void setPinMapping(byte boardID)
|
|||
pinFuelPump = PA6; //Fuel pump output
|
||||
pinTachOut = PA7; //Tacho output pin
|
||||
//external interrupt enabled pins
|
||||
pinFlex = PC4; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PC5; //The CAS pin
|
||||
pinTrigger2 = PC6; //The Cam Sensor pin
|
||||
pinBoost = PE0; //Boost control
|
||||
pinVVT_1 = PE1; //Default VVT output
|
||||
//external interrupts could be enalbed in any pin, except same port numbers (PA4,PE4)
|
||||
pinFlex = PE2; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PE3; //The CAS pin
|
||||
pinTrigger2 = PE4; //The Cam Sensor pin
|
||||
#elif defined(CORE_STM32)
|
||||
//http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/0.0.12/hardware/maple-mini.html#master-pin-map
|
||||
//pins 23, 24 and 33 couldn't be used
|
||||
pinInjector1 = 15; //Output pin injector 1 is on
|
||||
pinInjector2 = 16; //Output pin injector 2 is on
|
||||
pinInjector3 = 17; //Output pin injector 3 is on
|
||||
pinInjector4 = 18; //Output pin injector 4 is on
|
||||
pinCoil1 = 19; //Pin for coil 1
|
||||
pinCoil2 = 20; //Pin for coil 2
|
||||
pinCoil3 = 21; //Pin for coil 3
|
||||
pinCoil4 = 26; //Pin for coil 4
|
||||
pinCoil5 = 27; //Pin for coil 5
|
||||
//blue pill http://wiki.stm32duino.com/index.php?title=Blue_Pill
|
||||
//Maple mini http://wiki.stm32duino.com/index.php?title=Maple_Mini
|
||||
//pins PA12, PA11 are used for USB or CAN couldn't be used for GPIO
|
||||
pinInjector1 = PB7; //Output pin injector 1 is on
|
||||
pinInjector2 = PB6; //Output pin injector 2 is on
|
||||
pinInjector3 = PB5; //Output pin injector 3 is on
|
||||
pinInjector4 = PB4; //Output pin injector 4 is on
|
||||
pinCoil1 = PB3; //Pin for coil 1
|
||||
pinCoil2 = PA15; //Pin for coil 2
|
||||
pinCoil3 = PA14; //Pin for coil 3
|
||||
pinCoil4 = PA9; //Pin for coil 4
|
||||
pinCoil5 = PA8; //Pin for coil 5
|
||||
pinTPS = A0; //TPS input pin
|
||||
pinMAP = A1; //MAP sensor pin
|
||||
pinIAT = A2; //IAT sensor pin
|
||||
pinCLT = A3; //CLS sensor pin
|
||||
pinO2 = A4; //O2 Sensor pin
|
||||
pinBat = A5; //Battery reference voltage pin
|
||||
pinStepperDir = 12; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = 13; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = 14; //Enable pin for DRV8825
|
||||
pinDisplayReset = 2; // OLED reset pin
|
||||
pinFan = 1; //Pin for the fan output
|
||||
pinFuelPump = 0; //Fuel pump output
|
||||
pinTachOut = 31; //Tacho output pin
|
||||
//external interrupt enabled pins
|
||||
pinFlex = 32; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = 25; //The CAS pin
|
||||
pinTrigger2 = 22; //The Cam Sensor pin
|
||||
pinBaro = pinMAP;
|
||||
pinBoost = 1; //Boost control
|
||||
pinVVT_1 = 0; //Default VVT output
|
||||
pinIdle1 = PB2; //Single wire idle control
|
||||
pinIdle2 = PA2; //2 wire idle control
|
||||
pinBoost = PA1; //Boost control
|
||||
pinVVT_1 = PA0; //Default VVT output
|
||||
pinStepperDir = PC15; //Direction pin for DRV8825 driver
|
||||
pinStepperStep = PC14; //Step pin for DRV8825 driver
|
||||
pinStepperEnable = PC13; //Enable pin for DRV8825
|
||||
pinDisplayReset = PB2; // OLED reset pin
|
||||
pinFan = PB1; //Pin for the fan output
|
||||
pinFuelPump = PB11; //Fuel pump output
|
||||
pinTachOut = PB10; //Tacho output pin
|
||||
//external interrupt enabled pins
|
||||
pinFlex = PB8; // Flex sensor (Must be external interrupt enabled)
|
||||
pinTrigger = PA10; //The CAS pin
|
||||
pinTrigger2 = PA13; //The Cam Sensor pin
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
@ -688,6 +699,12 @@ void setPinMapping(byte boardID)
|
|||
inj4_pin_mask = digitalPinToBitMask(pinInjector4);
|
||||
inj5_pin_port = portOutputRegister(digitalPinToPort(pinInjector5));
|
||||
inj5_pin_mask = digitalPinToBitMask(pinInjector5);
|
||||
inj6_pin_port = portOutputRegister(digitalPinToPort(pinInjector6));
|
||||
inj6_pin_mask = digitalPinToBitMask(pinInjector6);
|
||||
inj7_pin_port = portOutputRegister(digitalPinToPort(pinInjector7));
|
||||
inj7_pin_mask = digitalPinToBitMask(pinInjector7);
|
||||
inj8_pin_port = portOutputRegister(digitalPinToPort(pinInjector8));
|
||||
inj8_pin_mask = digitalPinToBitMask(pinInjector8);
|
||||
|
||||
ign1_pin_port = portOutputRegister(digitalPinToPort(pinCoil1));
|
||||
ign1_pin_mask = digitalPinToBitMask(pinCoil1);
|
||||
|
@ -699,13 +716,18 @@ void setPinMapping(byte boardID)
|
|||
ign4_pin_mask = digitalPinToBitMask(pinCoil4);
|
||||
ign5_pin_port = portOutputRegister(digitalPinToPort(pinCoil5));
|
||||
ign5_pin_mask = digitalPinToBitMask(pinCoil5);
|
||||
ign6_pin_port = portOutputRegister(digitalPinToPort(pinCoil6));
|
||||
ign6_pin_mask = digitalPinToBitMask(pinCoil6);
|
||||
ign7_pin_port = portOutputRegister(digitalPinToPort(pinCoil7));
|
||||
ign7_pin_mask = digitalPinToBitMask(pinCoil7);
|
||||
ign8_pin_port = portOutputRegister(digitalPinToPort(pinCoil8));
|
||||
ign8_pin_mask = digitalPinToBitMask(pinCoil8);
|
||||
|
||||
tach_pin_port = portOutputRegister(digitalPinToPort(pinTachOut));
|
||||
tach_pin_mask = digitalPinToBitMask(pinTachOut);
|
||||
pump_pin_port = portOutputRegister(digitalPinToPort(pinFuelPump));
|
||||
pump_pin_mask = digitalPinToBitMask(pinFuelPump);
|
||||
|
||||
//And for inputs
|
||||
//And for inputs
|
||||
#if defined(CORE_STM32)
|
||||
#ifndef ARDUINO_ARCH_STM32 //libmaple core aka STM32DUINO
|
||||
|
|