Merge branch 'master' into can_io_2
This commit is contained in:
commit
8db13859e1
26
.travis.yml
26
.travis.yml
|
@ -28,16 +28,40 @@ language: python
|
||||||
python:
|
python:
|
||||||
- "2.7"
|
- "2.7"
|
||||||
|
|
||||||
sudo: false
|
dist: trusty
|
||||||
|
sudo: required
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- "~/.platformio"
|
- "~/.platformio"
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- sourceline: 'deb http://ports.ubuntu.com/ubuntu-ports trusty-backports main restricted universe multiverse'
|
||||||
|
packages:
|
||||||
|
- cppcheck/trusty-backports
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
#- sudo apt-get update -qq
|
||||||
|
#- sudo apt-get install -t trusty-backports cppcheck
|
||||||
|
#- sudo apt-get build-dep -qq cppcheck
|
||||||
|
#- wget https://github.com/danmar/cppcheck/archive/1.79.zip
|
||||||
|
#- unzip 1.79.zip
|
||||||
|
#- cd cppcheck-1.79
|
||||||
|
#- make SRCDIR=build CFGDIR=/usr/share/cppcheck/ HAVE_RULES=yes
|
||||||
|
#- sudo make install CFGDIR=/usr/share/cppcheck/
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- pip install -U platformio
|
- pip install -U platformio
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
- cd /home/travis/build
|
||||||
|
- git clone --depth=20 https://github.com/noisymime/cppcheck.git noisymime/cppcheck
|
||||||
|
- cd noisymime/speeduino
|
||||||
- platformio run
|
- platformio run
|
||||||
|
- cd ..
|
||||||
|
# - speeduino/misra/check_misra.sh
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
if [ -f ./results.txt ]; then
|
||||||
|
rm results.txt
|
||||||
|
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
|
||||||
|
done
|
||||||
|
mv speeduino/speeduino/*.dump ./
|
||||||
|
|
||||||
|
python cppcheck/addons/misra.py *.dump 2> results.txt
|
||||||
|
rm *.dump
|
||||||
|
|
||||||
|
cat results.txt
|
||||||
|
# wc -l results.txt
|
||||||
|
|
||||||
|
errors=`wc -l < results.txt | tr -d ' '`
|
||||||
|
echo $errors + " MISRA violations"
|
||||||
|
|
||||||
|
if [ $errors -gt 0 ]; then
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 236 KiB |
Binary file not shown.
Before Width: | Height: | Size: 612 KiB After Width: | Height: | Size: 639 KiB |
File diff suppressed because it is too large
Load Diff
|
@ -7,14 +7,18 @@ T101C0.038194
|
||||||
T102C0.015748
|
T102C0.015748
|
||||||
%
|
%
|
||||||
T100
|
T100
|
||||||
|
X008277Y009166
|
||||||
|
X002277Y015166
|
||||||
|
X004277Y015166
|
||||||
|
X006277Y015166
|
||||||
X001277Y015166
|
X001277Y015166
|
||||||
X003277Y015166
|
X003277Y015166
|
||||||
X005277Y015166
|
X005277Y015166
|
||||||
X007277Y015166
|
X007277Y015166
|
||||||
X009277Y015166
|
X009277Y015166
|
||||||
X019277Y012166
|
X019277Y012166
|
||||||
X006277Y015166
|
|
||||||
X008277Y015166
|
X008277Y015166
|
||||||
|
X016277Y009166
|
||||||
X014277Y009166
|
X014277Y009166
|
||||||
X012277Y009166
|
X012277Y009166
|
||||||
X010277Y009166
|
X010277Y009166
|
||||||
|
@ -23,18 +27,22 @@ X017277Y009166
|
||||||
X015277Y009166
|
X015277Y009166
|
||||||
X013277Y009166
|
X013277Y009166
|
||||||
X011277Y009166
|
X011277Y009166
|
||||||
|
X006277Y003416
|
||||||
|
X004277Y003416
|
||||||
X018277Y009166
|
X018277Y009166
|
||||||
X016277Y009166
|
|
||||||
X019277Y010166
|
X019277Y010166
|
||||||
X010277Y015166
|
X010277Y015166
|
||||||
X012277Y015166
|
X012277Y015166
|
||||||
X014277Y015166
|
X014277Y015166
|
||||||
|
X016277Y015166
|
||||||
|
X007277Y003416
|
||||||
|
X005277Y003416
|
||||||
|
X003277Y003416
|
||||||
X011277Y015166
|
X011277Y015166
|
||||||
X013277Y015166
|
X013277Y015166
|
||||||
X015277Y015166
|
X015277Y015166
|
||||||
X017277Y015166
|
X017277Y015166
|
||||||
X019277Y015166
|
X019277Y015166
|
||||||
X016277Y015166
|
|
||||||
X018277Y015166
|
X018277Y015166
|
||||||
X024277Y009166
|
X024277Y009166
|
||||||
X022277Y009166
|
X022277Y009166
|
||||||
|
@ -48,6 +56,7 @@ X024277Y015166
|
||||||
X021277Y015166
|
X021277Y015166
|
||||||
X023277Y015166
|
X023277Y015166
|
||||||
X019277Y011166
|
X019277Y011166
|
||||||
|
X006277Y009166
|
||||||
X004277Y009166
|
X004277Y009166
|
||||||
X002277Y009166
|
X002277Y009166
|
||||||
X019277Y014166
|
X019277Y014166
|
||||||
|
@ -56,14 +65,18 @@ X007277Y009166
|
||||||
X005277Y009166
|
X005277Y009166
|
||||||
X003277Y009166
|
X003277Y009166
|
||||||
X001277Y009166
|
X001277Y009166
|
||||||
X008277Y009166
|
|
||||||
X006277Y009166
|
|
||||||
X002277Y015166
|
|
||||||
X004277Y015166
|
|
||||||
T101
|
T101
|
||||||
|
X037027Y015916
|
||||||
|
X029027Y019916
|
||||||
|
X038027Y019916
|
||||||
|
X038027Y003916
|
||||||
|
X014027Y000916
|
||||||
|
X021027Y019916
|
||||||
|
X023027Y000916
|
||||||
|
X037027Y014916
|
||||||
X030027Y019916
|
X030027Y019916
|
||||||
X032027Y000916
|
|
||||||
X012427Y019916
|
X012427Y019916
|
||||||
|
X032027Y000916
|
||||||
X038027Y018916
|
X038027Y018916
|
||||||
X038027Y002916
|
X038027Y002916
|
||||||
X017027Y000916
|
X017027Y000916
|
||||||
|
@ -77,9 +90,9 @@ X037027Y009916
|
||||||
X035027Y000916
|
X035027Y000916
|
||||||
X037027Y012916
|
X037027Y012916
|
||||||
X018027Y019916
|
X018027Y019916
|
||||||
X029027Y000916
|
|
||||||
X038027Y016916
|
X038027Y016916
|
||||||
X027027Y019916
|
X027027Y019916
|
||||||
|
X029027Y000916
|
||||||
X009427Y019916
|
X009427Y019916
|
||||||
X037027Y008916
|
X037027Y008916
|
||||||
X037027Y011916
|
X037027Y011916
|
||||||
|
@ -91,8 +104,8 @@ X010427Y019916
|
||||||
X030027Y000916
|
X030027Y000916
|
||||||
X037027Y010916
|
X037027Y010916
|
||||||
X015027Y000916
|
X015027Y000916
|
||||||
X022027Y019916
|
|
||||||
X038027Y014916
|
X038027Y014916
|
||||||
|
X022027Y019916
|
||||||
X024027Y000916
|
X024027Y000916
|
||||||
X037027Y006916
|
X037027Y006916
|
||||||
X031027Y019916
|
X031027Y019916
|
||||||
|
@ -106,8 +119,8 @@ X007427Y019916
|
||||||
X027027Y000916
|
X027027Y000916
|
||||||
X034027Y019916
|
X034027Y019916
|
||||||
X038027Y009916
|
X038027Y009916
|
||||||
X016427Y019916
|
|
||||||
X036027Y000916
|
X036027Y000916
|
||||||
|
X016427Y019916
|
||||||
X038027Y012916
|
X038027Y012916
|
||||||
X037027Y004916
|
X037027Y004916
|
||||||
X019027Y019916
|
X019027Y019916
|
||||||
|
@ -129,8 +142,8 @@ X016027Y000916
|
||||||
X023027Y019916
|
X023027Y019916
|
||||||
X038027Y006916
|
X038027Y006916
|
||||||
X025027Y000916
|
X025027Y000916
|
||||||
X032027Y019916
|
|
||||||
X037027Y017916
|
X037027Y017916
|
||||||
|
X032027Y019916
|
||||||
X034027Y000916
|
X034027Y000916
|
||||||
X014427Y019916
|
X014427Y019916
|
||||||
X038027Y005916
|
X038027Y005916
|
||||||
|
@ -139,47 +152,41 @@ X037027Y016916
|
||||||
X011027Y000916
|
X011027Y000916
|
||||||
X038027Y004916
|
X038027Y004916
|
||||||
X020027Y000916
|
X020027Y000916
|
||||||
X037027Y015916
|
|
||||||
X029027Y019916
|
|
||||||
X038027Y019916
|
|
||||||
X014027Y000916
|
|
||||||
X038027Y003916
|
|
||||||
X021027Y019916
|
|
||||||
X023027Y000916
|
|
||||||
X037027Y014916
|
|
||||||
T102
|
T102
|
||||||
X014777Y001666
|
|
||||||
X017527Y004666
|
|
||||||
X019027Y000916
|
|
||||||
X009527Y003416
|
|
||||||
X009527Y001166
|
|
||||||
X026527Y004166
|
|
||||||
X020277Y010666
|
|
||||||
X038777Y001166
|
|
||||||
X024527Y004166
|
|
||||||
X031027Y004666
|
|
||||||
X018277Y004666
|
|
||||||
X023527Y004166
|
|
||||||
X014777Y004166
|
|
||||||
X014777Y003666
|
|
||||||
X020527Y004166
|
|
||||||
X035527Y011166
|
|
||||||
X016527Y000416
|
|
||||||
X030777Y007666
|
|
||||||
X032277Y008666
|
X032277Y008666
|
||||||
X032277Y012666
|
X019027Y000916
|
||||||
X014777Y003166
|
|
||||||
X037277Y001166
|
|
||||||
X025527Y004166
|
|
||||||
X028777Y012416
|
|
||||||
X014777Y002666
|
|
||||||
X019527Y004166
|
|
||||||
X022527Y004166
|
|
||||||
X028527Y008666
|
|
||||||
X030777Y009666
|
|
||||||
X021527Y004166
|
|
||||||
X014777Y005166
|
X014777Y005166
|
||||||
X014777Y002166
|
X009527Y002916
|
||||||
|
X014777Y001666
|
||||||
|
X030777Y007666
|
||||||
|
X009527Y001166
|
||||||
|
X020277Y010666
|
||||||
|
X014777Y003166
|
||||||
|
X032277Y012666
|
||||||
|
X028527Y008666
|
||||||
X014777Y004666
|
X014777Y004666
|
||||||
|
X031027Y004666
|
||||||
|
X017527Y004666
|
||||||
|
X028027Y004166
|
||||||
|
X037277Y001166
|
||||||
|
X014777Y002666
|
||||||
|
X014777Y004166
|
||||||
|
X019527Y004166
|
||||||
|
X028777Y012416
|
||||||
|
X035027Y011916
|
||||||
|
X015527Y011916
|
||||||
|
X016527Y000416
|
||||||
|
X014777Y002166
|
||||||
|
X026527Y004166
|
||||||
|
X024527Y004166
|
||||||
|
X022527Y004166
|
||||||
|
X020527Y004166
|
||||||
|
X018277Y004666
|
||||||
|
X014777Y003666
|
||||||
|
X030777Y009666
|
||||||
|
X025527Y004166
|
||||||
|
X023527Y004166
|
||||||
|
X021527Y004166
|
||||||
|
X038777Y001166
|
||||||
T00
|
T00
|
||||||
M30
|
M30
|
|
@ -15,6 +15,7 @@ G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
|
||||||
G90*
|
G90*
|
||||||
G70*
|
G70*
|
||||||
G54D10*
|
G54D10*
|
||||||
|
X1653Y42D03*
|
||||||
X3228Y867D03*
|
X3228Y867D03*
|
||||||
X1478Y467D03*
|
X1478Y467D03*
|
||||||
X1478Y417D03*
|
X1478Y417D03*
|
||||||
|
@ -43,9 +44,9 @@ X3728Y117D03*
|
||||||
X3878Y117D03*
|
X3878Y117D03*
|
||||||
X2028Y1067D03*
|
X2028Y1067D03*
|
||||||
X953Y117D03*
|
X953Y117D03*
|
||||||
X953Y342D03*
|
X953Y292D03*
|
||||||
X1903Y92D03*
|
X1903Y92D03*
|
||||||
X3553Y1117D03*
|
X3503Y1192D03*
|
||||||
X2853Y867D03*
|
X2853Y867D03*
|
||||||
G54D11*
|
G54D11*
|
||||||
X3003Y92D03*
|
X3003Y92D03*
|
||||||
|
@ -183,12 +184,18 @@ X2128Y917D03*
|
||||||
X2228Y917D03*
|
X2228Y917D03*
|
||||||
X2328Y917D03*
|
X2328Y917D03*
|
||||||
X2428Y917D03*
|
X2428Y917D03*
|
||||||
|
X328Y342D03*
|
||||||
|
X428Y342D03*
|
||||||
|
X528Y342D03*
|
||||||
|
X628Y342D03*
|
||||||
|
X728Y342D03*
|
||||||
X1928Y1417D03*
|
X1928Y1417D03*
|
||||||
X1928Y1317D03*
|
X1928Y1317D03*
|
||||||
X1928Y1217D03*
|
X1928Y1217D03*
|
||||||
X1928Y1117D03*
|
X1928Y1117D03*
|
||||||
X1928Y1017D03*
|
X1928Y1017D03*
|
||||||
G54D10*
|
G54D10*
|
||||||
X1653Y42D03*
|
X2803Y417D03*
|
||||||
|
X1553Y1192D03*
|
||||||
G04 End of Mask0*
|
G04 End of Mask0*
|
||||||
M02*
|
M02*
|
|
@ -17,6 +17,7 @@ G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
|
||||||
G90*
|
G90*
|
||||||
G70*
|
G70*
|
||||||
G54D10*
|
G54D10*
|
||||||
|
X1653Y42D03*
|
||||||
X3228Y867D03*
|
X3228Y867D03*
|
||||||
X1478Y467D03*
|
X1478Y467D03*
|
||||||
X1478Y417D03*
|
X1478Y417D03*
|
||||||
|
@ -45,9 +46,9 @@ X3728Y117D03*
|
||||||
X3878Y117D03*
|
X3878Y117D03*
|
||||||
X2028Y1067D03*
|
X2028Y1067D03*
|
||||||
X953Y117D03*
|
X953Y117D03*
|
||||||
X953Y342D03*
|
X953Y292D03*
|
||||||
X1903Y92D03*
|
X1903Y92D03*
|
||||||
X3553Y1117D03*
|
X3503Y1192D03*
|
||||||
X2853Y867D03*
|
X2853Y867D03*
|
||||||
G54D11*
|
G54D11*
|
||||||
X3003Y92D03*
|
X3003Y92D03*
|
||||||
|
@ -190,8 +191,14 @@ X1928Y1317D03*
|
||||||
X1928Y1217D03*
|
X1928Y1217D03*
|
||||||
X1928Y1117D03*
|
X1928Y1117D03*
|
||||||
X1928Y1017D03*
|
X1928Y1017D03*
|
||||||
|
X328Y342D03*
|
||||||
|
X428Y342D03*
|
||||||
|
X528Y342D03*
|
||||||
|
X628Y342D03*
|
||||||
|
X728Y342D03*
|
||||||
G54D10*
|
G54D10*
|
||||||
X1653Y42D03*
|
X2803Y417D03*
|
||||||
|
X1553Y1192D03*
|
||||||
G54D13*
|
G54D13*
|
||||||
X3078Y1117D03*
|
X3078Y1117D03*
|
||||||
X3128Y1117D03*
|
X3128Y1117D03*
|
||||||
|
@ -242,8 +249,8 @@ X2403Y511D03*
|
||||||
X2403Y592D03*
|
X2403Y592D03*
|
||||||
X2003Y511D03*
|
X2003Y511D03*
|
||||||
X2003Y592D03*
|
X2003Y592D03*
|
||||||
X2403Y211D03*
|
|
||||||
X2403Y292D03*
|
X2403Y292D03*
|
||||||
|
X2403Y211D03*
|
||||||
X2003Y292D03*
|
X2003Y292D03*
|
||||||
X2003Y211D03*
|
X2003Y211D03*
|
||||||
X2503Y511D03*
|
X2503Y511D03*
|
|
@ -64,8 +64,8 @@ X2403Y511D03*
|
||||||
X2403Y592D03*
|
X2403Y592D03*
|
||||||
X2003Y511D03*
|
X2003Y511D03*
|
||||||
X2003Y592D03*
|
X2003Y592D03*
|
||||||
X2403Y211D03*
|
|
||||||
X2403Y292D03*
|
X2403Y292D03*
|
||||||
|
X2403Y211D03*
|
||||||
X2003Y292D03*
|
X2003Y292D03*
|
||||||
X2003Y211D03*
|
X2003Y211D03*
|
||||||
X2503Y511D03*
|
X2503Y511D03*
|
|
@ -0,0 +1,498 @@
|
||||||
|
*Pick And Place List
|
||||||
|
*Company=
|
||||||
|
*Author=
|
||||||
|
*eMail=
|
||||||
|
*
|
||||||
|
*Project=Teensy 3.5 Adaptor v2
|
||||||
|
*Date=21:52:18
|
||||||
|
*CreatedBy=Fritzing 0.9.3b.04.19.5c895d327c44a3114e5fcc9d8260daf0cbb52806
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*Coordinates in mm, always center of component
|
||||||
|
*Origin 0/0=Lower left corner of PCB
|
||||||
|
*Rotation in degree (0-360, math. pos.)
|
||||||
|
*
|
||||||
|
*No;Value;Package;X;Y;Rotation;Side;Name
|
||||||
|
1;;;67.3481;-11.0969;0;Bottom;Copper Fill131
|
||||||
|
2;;;95.3262;-31.5439;0;Bottom;Copper Fill246
|
||||||
|
3;;;16.127;-5.53161;-90;Bottom;TXT20
|
||||||
|
4;;;13.6101;-5.04497;-90;Bottom;TXT20
|
||||||
|
5;;;52.1081;-10.2079;0;Bottom;Copper Fill350
|
||||||
|
6;;;78.7781;-12.3669;0;Bottom;Copper Fill324
|
||||||
|
7;;;57.2205;-10.5834;0;Bottom;Via16
|
||||||
|
8;;;78.8105;-11.8534;0;Bottom;Via24
|
||||||
|
9;;;71.1581;-10.2079;0;Bottom;Copper Fill304
|
||||||
|
10;;;78.1755;-24.5534;0;Bottom;Via25
|
||||||
|
11;;;66.0908;-50.7971;0;Bottom;Copper Fill183
|
||||||
|
12;;;99.3684;-45.3999;0;Bottom;TXT19
|
||||||
|
13;;;91.1651;-24.9967;0;Bottom;TXT19
|
||||||
|
14;;;55.753;-11.4525;0;Bottom;Copper Fill278
|
||||||
|
15;;;14.6812;-24.2541;0;Bottom;Copper Fill51
|
||||||
|
16;;;97.3582;-7.452;0;Bottom;Copper Fill151
|
||||||
|
17;;;91.1651;-32.4555;0;Bottom;TXT19
|
||||||
|
18;;;57.1881;-10.2079;0;Bottom;Copper Fill337
|
||||||
|
19;;;94.0181;-6.6519;0;Bottom;Copper Fill145
|
||||||
|
20;;;39.4081;-29.8929;0;Bottom;Copper Fill96
|
||||||
|
21;;;40.1828;-6.2963;0;Bottom;Copper Fill297
|
||||||
|
22;;;99.3684;-35.1271;0;Bottom;TXT19
|
||||||
|
23;;;95.3262;-11.2239;0;Bottom;Copper Fill276
|
||||||
|
24;;;25.1968;-51.4829;0;Bottom;Copper Fill168
|
||||||
|
25;;;39.4831;-47.9272;-90;Bottom;TXT19
|
||||||
|
26;;;82.3722;-32.2424;0;Bottom;Copper Fill141
|
||||||
|
27;;;33.3502;-45.7679;0;Bottom;Copper Fill26
|
||||||
|
28;180k;0805 [SMD];66.1105;-6.38318;90;Top;R13
|
||||||
|
29;;;95.3262;-18.8439;0;Bottom;Copper Fill78
|
||||||
|
30;;;35.3568;-51.4829;0;Bottom;Copper Fill7
|
||||||
|
31;;;22.6568;-51.4829;0;Bottom;Copper Fill167
|
||||||
|
32;;;27.5844;-40.2053;0;Bottom;Copper Fill215
|
||||||
|
33;;;22.5044;-20.6219;0;Bottom;Copper Fill67
|
||||||
|
34;;;73.0377;-32.0265;0;Bottom;Copper Fill134
|
||||||
|
35;;;55.0418;-17.5231;0;Bottom;Copper Fill75
|
||||||
|
36;;;90.2462;-25.6511;0;Bottom;Copper Fill47
|
||||||
|
37;;;80.0608;-51.4829;0;Bottom;Copper Fill22
|
||||||
|
38;;;37.8968;-51.4829;0;Bottom;Copper Fill8
|
||||||
|
39;;;67.3608;-6.4233;0;Bottom;Copper Fill293
|
||||||
|
40;;;67.3481;-10.2079;0;Bottom;Copper Fill332
|
||||||
|
41;180k;0805 [SMD];55.9505;-6.38318;90;Top;R5
|
||||||
|
42;;;23.7236;-3.0324;0;Bottom;Copper Fill348
|
||||||
|
43;;;11.7094;-43.3549;0;Bottom;Copper Fill201
|
||||||
|
44;;;58.293;-11.4525;0;Bottom;Copper Fill279
|
||||||
|
45;;;81.9855;-22.0134;0;Bottom;Via2
|
||||||
|
46;;;91.3611;-50.4048;0;Bottom;TXT19
|
||||||
|
47;;;77.3684;-36.1667;0;Bottom;Copper Fill226
|
||||||
|
48;;;26.5938;-37.4367;0;Bottom;Copper Fill233
|
||||||
|
49;330k;0805 [SMD];66.1105;-14.0032;-90;Top;R14
|
||||||
|
50;;;39.4406;-30.2683;0;Bottom;Via35
|
||||||
|
51;;;74.1172;-31.3407;0;Bottom;Copper Fill245
|
||||||
|
52;;;24.1681;-7.8965;0;Bottom;Copper Fill309
|
||||||
|
53;;;39.5224;-8.8109;0;Bottom;Copper Fill295
|
||||||
|
54;;;48.5686;-48.0493;-90;Bottom;TXT19
|
||||||
|
55;;;51.4477;-27.6069;0;Bottom;Copper Fill313
|
||||||
|
56;;;88.4936;-30.312;0;Bottom;Copper Fill105
|
||||||
|
57;;;37.5355;-4.23335;0;Bottom;Via10
|
||||||
|
58;;;59.7408;-51.4829;0;Bottom;Copper Fill181
|
||||||
|
59;;;52.1208;-51.4829;0;Bottom;Copper Fill178
|
||||||
|
60;;;52.1208;-6.4233;0;Bottom;Copper Fill287
|
||||||
|
61;;;95.631;-13.3067;0;Bottom;Copper Fill81
|
||||||
|
62;;;78.5622;-24.6224;0;Bottom;Copper Fill323
|
||||||
|
63;;;81.8388;-19.4027;0;Bottom;Copper Fill266
|
||||||
|
64;;;7.2644;-18.7169;0;Bottom;Copper Fill63
|
||||||
|
65;;;24.5872;-3.0324;0;Bottom;Copper Fill155
|
||||||
|
66;;;91.567;-43.7359;0;Bottom;Copper Fill205
|
||||||
|
67;;;39.8272;-30.312;0;Bottom;Copper Fill302
|
||||||
|
68;;;47.0408;-51.4829;0;Bottom;Copper Fill176
|
||||||
|
69;;;59.7408;-51.4829;0;Bottom;Copper Fill16
|
||||||
|
70;;;37.5355;-5.50335;0;Bottom;Via9
|
||||||
|
71;330k;0805 [SMD];61.0305;-14.0032;-90;Top;R10
|
||||||
|
72;;;59.7605;-10.5834;0;Bottom;Via17
|
||||||
|
73;;;51.8922;-27.1624;0;Bottom;Copper Fill315
|
||||||
|
74;330k;0805 [SMD];63.5705;-14.0032;-90;Top;R12
|
||||||
|
75;;;13.3477;-7.8965;0;Bottom;Copper Fill307
|
||||||
|
76;;;81.9277;-31.7979;0;Bottom;Copper Fill139
|
||||||
|
77;;;38.9636;-30.312;0;Bottom;Copper Fill301
|
||||||
|
78;;;71.5772;-10.6524;0;Bottom;Copper Fill100
|
||||||
|
79;;;48.387;-21.2061;0;Bottom;Copper Fill261
|
||||||
|
80;;;95.3262;-34.0839;0;Bottom;Copper Fill241
|
||||||
|
81;;;27.7368;-51.4829;0;Bottom;Copper Fill4
|
||||||
|
82;;;97.9932;-3.0324;0;Bottom;Copper Fill116
|
||||||
|
83;;;39.8272;-30.312;0;Bottom;Copper Fill98
|
||||||
|
84;;;95.3262;-46.7839;0;Bottom;Copper Fill200
|
||||||
|
85;;;49.7332;-30.9724;0;Bottom;Copper Fill343
|
||||||
|
86;;;41.9481;-0.7083;0;Bottom;Copper Fill331
|
||||||
|
87;;;57.9374;-25.0669;0;Bottom;Copper Fill250
|
||||||
|
88;180k;0805 [SMD];68.6505;-6.38318;90;Top;R15
|
||||||
|
89;;;24.5872;-7.452;0;Bottom;Copper Fill312
|
||||||
|
90;;;78.1177;-25.0669;0;Bottom;Copper Fill118
|
||||||
|
91;;;3.1877;-22.5015;0;Bottom;Copper Fill339
|
||||||
|
92;;;38.9128;-11.3763;0;Bottom;Copper Fill284
|
||||||
|
93;;;26.4541;-51.4575;0;Bottom;Copper Fill149
|
||||||
|
94;;;95.3262;-21.3839;0;Bottom;Copper Fill257
|
||||||
|
95;;;51.2215;-48.0493;-90;Bottom;TXT19
|
||||||
|
96;;;91.1651;-12.2296;0;Bottom;TXT19
|
||||||
|
97;;;12.9794;-43.0247;0;Bottom;Copper Fill202
|
||||||
|
98;;;95.3262;-46.7839;0;Bottom;Copper Fill35
|
||||||
|
99;;;95.3008;-51.5337;0;Bottom;Copper Fill191
|
||||||
|
100;;;73.0955;-31.5384;0;Bottom;Via11
|
||||||
|
101;;;23.7236;-7.452;0;Bottom;Copper Fill109
|
||||||
|
102;;;64.8081;-11.0969;0;Bottom;Copper Fill132
|
||||||
|
103;;;46.1225;-48.0493;-90;Bottom;TXT19
|
||||||
|
104;;;74.0918;-49.6033;0;Bottom;Copper Fill194
|
||||||
|
105;;;44.9834;-9.1411;0;Bottom;Copper Fill285
|
||||||
|
106;;;88.9706;-30.2683;0;Bottom;Via32
|
||||||
|
107;;;58.7248;-17.2183;0;Bottom;Copper Fill268
|
||||||
|
108;;;9.6012;-24.2541;0;Bottom;Copper Fill49
|
||||||
|
109;;;35.8394;-46.1235;0;Bottom;Copper Fill27
|
||||||
|
110;;;25.1968;-51.4829;0;Bottom;Copper Fill3
|
||||||
|
111;;;48.2981;-1.9529;0;Bottom;Copper Fill159
|
||||||
|
112;;;71.1906;-10.5833;0;Bottom;Via34
|
||||||
|
113;;;79.1972;-11.9224;0;Bottom;Copper Fill327
|
||||||
|
114;;;91.1651;-40.1319;0;Bottom;TXT19
|
||||||
|
115;;;35.2749;-9.47286;0;Bottom;TXT3
|
||||||
|
116;;;92.1512;-12.0113;0;Bottom;Copper Fill82
|
||||||
|
117;;;31.9478;-47.6957;-90;Bottom;TXT19
|
||||||
|
118;;;91.1651;-14.7382;0;Bottom;TXT19
|
||||||
|
119;;;49.5681;-10.2079;0;Bottom;Copper Fill351
|
||||||
|
120;;;78.1755;-19.4734;0;Bottom;Via23
|
||||||
|
121;;;95.3262;-49.2477;0;Bottom;Copper Fill193
|
||||||
|
122;;;94.6277;-3.4769;0;Bottom;Copper Fill160
|
||||||
|
123;;;81.9277;-32.6869;0;Bottom;Copper Fill138
|
||||||
|
124;;;45.6692;-10.9191;0;Bottom;Copper Fill84
|
||||||
|
125;;;99.3684;-40.2071;0;Bottom;TXT19
|
||||||
|
126;;;40.4876;-5.0263;0;Bottom;Copper Fill298
|
||||||
|
127;;;78.5114;-36.9287;0;Bottom;Copper Fill225
|
||||||
|
128;;;94.1832;-3.0324;0;Bottom;Copper Fill354
|
||||||
|
129;;;97.3582;-7.452;0;Bottom;Copper Fill345
|
||||||
|
130;;;70.0786;-23.6953;0;Bottom;Copper Fill251
|
||||||
|
131;;;48.0568;-30.9724;0;Bottom;Copper Fill147
|
||||||
|
132;;;46.482;-32.4075;0;Bottom;Copper Fill243
|
||||||
|
133;;;99.3684;-17.3849;0;Bottom;TXT19
|
||||||
|
134;;;41.9481;-0.7083;0;Bottom;Copper Fill130
|
||||||
|
135;;;37.5355;-11.8534;0;Bottom;Via3
|
||||||
|
136;;;47.3964;-36.0905;0;Bottom;Copper Fill236
|
||||||
|
137;;;94.6855;-2.96335;0;Bottom;Via26
|
||||||
|
138;;;36.998;-5.74226;0;Bottom;TXT5
|
||||||
|
139;;;70.9789;-3.80992;0;Bottom;TXT19
|
||||||
|
140;;;30.1498;-39.9005;0;Bottom;Copper Fill216
|
||||||
|
141;;;46.1772;-21.5109;0;Bottom;Copper Fill260
|
||||||
|
142;;;24.1681;-3.4769;0;Bottom;Copper Fill347
|
||||||
|
143;;;51.4477;-26.7179;0;Bottom;Copper Fill314
|
||||||
|
144;;;8.5344;-43.9899;0;Bottom;Copper Fill198
|
||||||
|
145;;;54.6481;-10.2079;0;Bottom;Copper Fill346
|
||||||
|
146;;;81.4832;-32.2424;0;Bottom;Copper Fill140
|
||||||
|
147;;;49.1236;-10.6524;0;Bottom;Copper Fill158
|
||||||
|
148;;;90.8812;-23.1111;0;Bottom;Copper Fill62
|
||||||
|
149;;;99.3684;-30.0471;0;Bottom;TXT19
|
||||||
|
150;;;95.3262;-8.6839;0;Bottom;Copper Fill88
|
||||||
|
151;;;10.9982;-45.7933;0;Bottom;Copper Fill165
|
||||||
|
152;;;48.2981;-2.8165;0;Bottom;Copper Fill352
|
||||||
|
153;;;78.3336;-11.9224;0;Bottom;Copper Fill326
|
||||||
|
154;180k;0805 [SMD];58.4905;-6.38318;90;Top;R7
|
||||||
|
155;;;51.4477;-27.6069;0;Bottom;Copper Fill111
|
||||||
|
156;;;24.2005;-2.96335;0;Bottom;Via29
|
||||||
|
157;;;40.7162;-37.1319;0;Bottom;Copper Fill221
|
||||||
|
158;;;98.4955;-2.96335;0;Bottom;Via27
|
||||||
|
159;;;62.2808;-6.4233;0;Bottom;Copper Fill291
|
||||||
|
160;;;82.7024;-25.0161;0;Bottom;Copper Fill254
|
||||||
|
161;;;48.3884;-3.6277;0;Bottom;TXT19
|
||||||
|
162;;;48.3305;-2.32835;0;Bottom;Via31
|
||||||
|
163;;;29.2608;-3.2229;0;Bottom;Copper Fill92
|
||||||
|
164;;;85.1408;-51.4829;0;Bottom;Copper Fill190
|
||||||
|
165;;;99.3684;-12.3049;0;Bottom;TXT19
|
||||||
|
166;;;30.1244;-21.5871;0;Bottom;Copper Fill70
|
||||||
|
167;;;60.833;-11.4525;0;Bottom;Copper Fill280
|
||||||
|
168;;;15.5194;-42.3897;0;Bottom;Copper Fill206
|
||||||
|
169;;;95.3262;-23.9239;0;Bottom;Copper Fill256
|
||||||
|
170;;;81.713;-47.7898;-90;Bottom;TXT19
|
||||||
|
171;;;99.3684;-27.5635;0;Bottom;TXT19
|
||||||
|
172;;;72.4408;-51.4829;0;Bottom;Copper Fill185
|
||||||
|
173;;;31.8008;-3.2229;0;Bottom;Copper Fill93
|
||||||
|
174;180k;0805 [SMD];50.8705;-6.38318;90;Top;R1
|
||||||
|
175;330k;0805 [SMD];53.4105;-14.0032;-90;Top;R4
|
||||||
|
176;;;49.6005;-10.5834;0;Bottom;Via14
|
||||||
|
177;;;95.3262;-41.7039;0;Bottom;Copper Fill213
|
||||||
|
178;;;99.3684;-47.846;0;Bottom;TXT19
|
||||||
|
179;;;91.1651;-35.0519;0;Bottom;TXT19
|
||||||
|
180;;THT;32.4556;-38.5233;90;Bottom;J2
|
||||||
|
181;;;84.7598;-26.5401;0;Bottom;Copper Fill249
|
||||||
|
182;;;95.3262;-29.0039;0;Bottom;Copper Fill248
|
||||||
|
183;;;94.1832;-3.0324;0;Bottom;Copper Fill162
|
||||||
|
184;;;62.2808;-51.4829;0;Bottom;Copper Fill17
|
||||||
|
185;;;52.8828;-36.4969;0;Bottom;Copper Fill222
|
||||||
|
186;;;76.3016;-49.2731;0;Bottom;Copper Fill195
|
||||||
|
187;;;79.173;-47.7898;-90;Bottom;TXT19
|
||||||
|
188;;;40.4368;-51.4829;0;Bottom;Copper Fill174
|
||||||
|
189;;;17.2212;-24.2541;0;Bottom;Copper Fill52
|
||||||
|
190;180k;0805 [SMD];63.5705;-6.38318;90;Top;R11
|
||||||
|
191;;;32.1818;-37.3351;0;Bottom;Copper Fill41
|
||||||
|
192;;;39.4081;-30.7565;0;Bottom;Copper Fill299
|
||||||
|
193;;;94.0181;-6.6519;0;Bottom;Copper Fill341
|
||||||
|
194;;;95.3262;-41.7039;0;Bottom;Copper Fill37
|
||||||
|
195;;;86.4616;-49.3493;0;Bottom;Copper Fill192
|
||||||
|
196;;;51.4477;-26.7179;0;Bottom;Copper Fill112
|
||||||
|
197;;;91.1651;-9.65819;0;Bottom;TXT19
|
||||||
|
198;;;62.3005;-10.5834;0;Bottom;Via18
|
||||||
|
199;;;25.0698;-40.5355;0;Bottom;Copper Fill214
|
||||||
|
200;;;32.4612;-24.2541;0;Bottom;Copper Fill58
|
||||||
|
201;;;8.56929;-5.74713;-90;Bottom;TXT20
|
||||||
|
202;;;64.8405;-10.5834;0;Bottom;Via19
|
||||||
|
203;;;32.8168;-51.4829;0;Bottom;Copper Fill6
|
||||||
|
204;;;37.5355;-13.1234;0;Bottom;Via7
|
||||||
|
205;;;92.7608;-9.9285;0;Bottom;Copper Fill87
|
||||||
|
206;;;65.913;-11.4525;0;Bottom;Copper Fill282
|
||||||
|
207;;;59.7281;-10.2079;0;Bottom;Copper Fill335
|
||||||
|
208;;;95.0722;-3.0324;0;Bottom;Copper Fill355
|
||||||
|
209;;;54.4322;-35.2269;0;Bottom;Copper Fill223
|
||||||
|
210;;;57.2008;-51.4829;0;Bottom;Copper Fill180
|
||||||
|
211;;;70.9422;-25.0415;0;Bottom;Copper Fill252
|
||||||
|
212;330k;0805 [SMD];68.6505;-14.0032;-90;Top;R16
|
||||||
|
213;;;49.7332;-30.9724;0;Bottom;Copper Fill148
|
||||||
|
214;;;30.2768;-51.4829;0;Bottom;Copper Fill5
|
||||||
|
215;;;24.1681;-7.0329;0;Bottom;Copper Fill310
|
||||||
|
216;;THT;48.9656;-30.9033;0;Bottom;J3
|
||||||
|
217;;;51.5055;-27.0934;0;Bottom;Via28
|
||||||
|
218;;;10.4394;-43.6597;0;Bottom;Copper Fill199
|
||||||
|
219;;;74.9808;-51.4829;0;Bottom;Copper Fill186
|
||||||
|
220;;;94.6277;-2.5879;0;Bottom;Copper Fill161
|
||||||
|
221;;;96.5581;-6.6519;0;Bottom;Copper Fill344
|
||||||
|
222;;;68.9941;-47.7898;-90;Bottom;TXT19
|
||||||
|
223;;;46.101;-36.7255;0;Bottom;Copper Fill234
|
||||||
|
224;;;44.5205;-11.8534;0;Bottom;Via21
|
||||||
|
225;;;95.3262;-36.6239;0;Bottom;Copper Fill227
|
||||||
|
226;;;39.4081;-29.8929;0;Bottom;Copper Fill300
|
||||||
|
227;330k;0805 [SMD];58.4905;-14.0032;-90;Top;R8
|
||||||
|
228;;;86.793;-47.7898;-90;Bottom;TXT19
|
||||||
|
229;;;72.4605;-22.0134;0;Bottom;Via1
|
||||||
|
230;;;95.0722;-3.0324;0;Bottom;Copper Fill163
|
||||||
|
231;;;95.631;-23.4667;0;Bottom;Copper Fill61
|
||||||
|
232;;;12.1412;-24.2541;0;Bottom;Copper Fill50
|
||||||
|
233;;;64.8208;-6.4233;0;Bottom;Copper Fill292
|
||||||
|
234;;;77.6732;-19.5424;0;Bottom;Copper Fill128
|
||||||
|
235;;;3.1877;-24.1779;0;Bottom;Copper Fill338
|
||||||
|
236;;;22.6568;-51.4829;0;Bottom;Copper Fill2
|
||||||
|
237;180k;0805 [SMD];53.4105;-6.38318;90;Top;R3
|
||||||
|
238;;;78.5622;-19.5424;0;Bottom;Copper Fill330
|
||||||
|
239;;;27.3812;-24.2541;0;Bottom;Copper Fill56
|
||||||
|
240;;;54.6608;-51.4829;0;Bottom;Copper Fill14
|
||||||
|
241;;;19.9983;-1.27133;0;Bottom;TXT18
|
||||||
|
242;;;78.1177;-19.0979;0;Bottom;Copper Fill127
|
||||||
|
243;;;91.1651;-22.3761;0;Bottom;TXT19
|
||||||
|
244;;;39.878;-7.6171;0;Bottom;Copper Fill296
|
||||||
|
245;;;46.4255;-11.8534;0;Bottom;Via22
|
||||||
|
246;;;8.5598;-35.9127;0;Bottom;Copper Fill229
|
||||||
|
247;;;70.231;-30.8327;0;Bottom;Copper Fill85
|
||||||
|
248;;;78.7781;-11.4779;0;Bottom;Copper Fill123
|
||||||
|
249;;;18.0594;-41.7547;0;Bottom;Copper Fill210
|
||||||
|
250;;;99.3684;-42.7471;0;Bottom;TXT19
|
||||||
|
251;;;99.3684;-14.8135;0;Bottom;TXT19
|
||||||
|
252;;;54.6608;-6.4233;0;Bottom;Copper Fill288
|
||||||
|
253;;;76.0222;-26.7941;0;Bottom;Copper Fill239
|
||||||
|
254;;;77.6732;-19.5424;0;Bottom;Copper Fill329
|
||||||
|
255;;;95.3262;-39.1639;0;Bottom;Copper Fill219
|
||||||
|
256;;;52.1405;-10.5834;0;Bottom;Via13
|
||||||
|
257;;;24.765;-26.5401;0;Bottom;Copper Fill164
|
||||||
|
258;;;49.5681;-11.0969;0;Bottom;Copper Fill157
|
||||||
|
259;;;32.6644;-21.8919;0;Bottom;Copper Fill71
|
||||||
|
260;;;24.5872;-7.452;0;Bottom;Copper Fill110
|
||||||
|
261;;;88.9381;-29.8929;0;Bottom;Copper Fill104
|
||||||
|
262;;;74.9808;-51.4829;0;Bottom;Copper Fill20
|
||||||
|
263;;;59.9694;-48.9683;0;Bottom;Copper Fill32
|
||||||
|
264;;;95.3262;-31.5439;0;Bottom;Copper Fill44
|
||||||
|
265;;;20.1168;-51.4829;0;Bottom;Copper Fill1
|
||||||
|
266;;;22.3012;-24.2541;0;Bottom;Copper Fill54
|
||||||
|
267;;;82.6008;-51.4829;0;Bottom;Copper Fill23
|
||||||
|
268;;;35.3576;-17.2945;0;Bottom;IMG1
|
||||||
|
269;;;63.8744;-45.8495;-90;Bottom;TXT19
|
||||||
|
270;;;28.6512;-30.8835;0;Bottom;Copper Fill40
|
||||||
|
271;;;41.3512;-10.5635;0;Bottom;Copper Fill83
|
||||||
|
272;;;92.5322;-45.3107;0;Bottom;Copper Fill203
|
||||||
|
273;;;13.3477;-9.5729;0;Bottom;Copper Fill306
|
||||||
|
274;;;71.4401;-47.7898;-90;Bottom;TXT19
|
||||||
|
275;;;78.7781;-12.3669;0;Bottom;Copper Fill122
|
||||||
|
276;;;38.9636;-30.312;0;Bottom;Copper Fill97
|
||||||
|
277;;;91.821;-18.6661;0;Bottom;Copper Fill77
|
||||||
|
278;;;6.4516;-13.7385;0;Bottom;Copper Fill73
|
||||||
|
279;;;95.3008;-51.4829;0;Bottom;Copper Fill25
|
||||||
|
280;;;47.244;-47.3935;0;Bottom;Copper Fill30
|
||||||
|
281;;;91.8464;-14.8815;0;Bottom;Copper Fill80
|
||||||
|
282;;;47.0408;-51.4829;0;Bottom;Copper Fill11
|
||||||
|
283;;;66.2178;-16.2531;0;Bottom;Copper Fill274
|
||||||
|
284;;;24.5872;-3.0324;0;Bottom;Copper Fill349
|
||||||
|
285;;;43.7388;-50.7971;0;Bottom;Copper Fill175
|
||||||
|
286;;;76.633;-47.7898;-90;Bottom;TXT19
|
||||||
|
287;330k;0805 [SMD];55.9505;-14.0032;-90;Top;R6
|
||||||
|
288;;;95.3262;-13.7639;0;Bottom;Copper Fill275
|
||||||
|
289;;;75.0824;-34.6173;0;Bottom;Copper Fill238
|
||||||
|
290;;;37.465;-24.2541;0;Bottom;Copper Fill60
|
||||||
|
291;;;59.7408;-6.4233;0;Bottom;Copper Fill290
|
||||||
|
292;;;85.1408;-51.4829;0;Bottom;Copper Fill24
|
||||||
|
293;;;90.597;-7.11819;0;Bottom;TXT19
|
||||||
|
294;;;54.6805;-10.5834;0;Bottom;Via15
|
||||||
|
295;;;29.4078;-47.6957;-90;Bottom;TXT19
|
||||||
|
296;;;91.1651;-29.9719;0;Bottom;TXT19
|
||||||
|
297;;;42.0608;-47.9743;-90;Bottom;TXT19
|
||||||
|
298;;;78.1177;-19.9869;0;Bottom;Copper Fill328
|
||||||
|
299;;;5.2578;-30.8835;0;Bottom;Copper Fill39
|
||||||
|
300;;;91.1651;-19.8406;0;Bottom;TXT19
|
||||||
|
301;;;81.9855;-32.1734;0;Bottom;Via12
|
||||||
|
302;;;19.9644;-41.1705;0;Bottom;Copper Fill211
|
||||||
|
303;;;11.0744;-36.2429;0;Bottom;Copper Fill230
|
||||||
|
304;;;95.631;-20.9267;0;Bottom;Copper Fill76
|
||||||
|
305;;;57.2008;-51.4829;0;Bottom;Copper Fill15
|
||||||
|
306;;;27.7368;-51.4829;0;Bottom;Copper Fill169
|
||||||
|
307;;;37.5355;-10.5834;0;Bottom;Via4
|
||||||
|
308;;;98.4377;-3.4769;0;Bottom;Copper Fill114
|
||||||
|
309;;;27.5844;-21.2569;0;Bottom;Copper Fill69
|
||||||
|
310;;;91.1651;-45.3248;0;Bottom;TXT19
|
||||||
|
311;;;95.3262;-44.2439;0;Bottom;Copper Fill208
|
||||||
|
312;;;59.563;-21.8919;0;Bottom;Copper Fill264
|
||||||
|
313;;;95.3262;-26.4639;0;Bottom;Copper Fill255
|
||||||
|
314;;;91.1651;-42.6719;0;Bottom;TXT19
|
||||||
|
315;;;95.3262;-39.1639;0;Bottom;Copper Fill38
|
||||||
|
316;;;99.3684;-22.4513;0;Bottom;TXT19
|
||||||
|
317;;;98.8822;-3.0324;0;Bottom;Copper Fill319
|
||||||
|
318;;;20.1168;-51.4829;0;Bottom;Copper Fill166
|
||||||
|
319;;;78.3336;-11.9224;0;Bottom;Copper Fill124
|
||||||
|
320;;;52.0446;-20.3425;0;Bottom;Copper Fill263
|
||||||
|
321;;;98.8822;-3.0324;0;Bottom;Copper Fill117
|
||||||
|
322;;;32.8168;-51.4829;0;Bottom;Copper Fill171
|
||||||
|
323;;;78.1177;-19.9869;0;Bottom;Copper Fill126
|
||||||
|
324;;;34.3408;-3.2229;0;Bottom;Copper Fill94
|
||||||
|
325;;;95.3262;-34.0839;0;Bottom;Copper Fill43
|
||||||
|
326;;;99.3684;-25.072;0;Bottom;TXT19
|
||||||
|
327;;;38.2831;-7.61951;0;Bottom;TXT6
|
||||||
|
328;;;61.2497;-45.8966;-90;Bottom;TXT19
|
||||||
|
329;;;49.5808;-51.4829;0;Bottom;Copper Fill12
|
||||||
|
330;;;40.4114;-33.0933;0;Bottom;Copper Fill65
|
||||||
|
331;;;78.1177;-25.0669;0;Bottom;Copper Fill320
|
||||||
|
332;;;80.0608;-51.4829;0;Bottom;Copper Fill188
|
||||||
|
333;;;71.1581;-11.0969;0;Bottom;Copper Fill99
|
||||||
|
334;;;54.6608;-51.4829;0;Bottom;Copper Fill179
|
||||||
|
335;;;95.3262;-49.3239;0;Bottom;Copper Fill34
|
||||||
|
336;;;13.6398;-36.5477;0;Bottom;Copper Fill231
|
||||||
|
337;;;96.5581;-6.6519;0;Bottom;Copper Fill150
|
||||||
|
338;;;73.4822;-31.582;0;Bottom;Copper Fill136
|
||||||
|
339;;;37.0278;-47.6957;-90;Bottom;TXT19
|
||||||
|
340;;;37.8968;-51.4829;0;Bottom;Copper Fill173
|
||||||
|
341;;;61.214;-16.8627;0;Bottom;Copper Fill271
|
||||||
|
342;;;95.3262;-11.2239;0;Bottom;Copper Fill86
|
||||||
|
343;;;41.9805;-1.05835;0;Bottom;Via33
|
||||||
|
344;;;53.213;-11.4525;0;Bottom;Copper Fill277
|
||||||
|
345;;;78.5368;-48.9683;0;Bottom;Copper Fill196
|
||||||
|
346;;;37.5355;-9.31335;0;Bottom;Via5
|
||||||
|
347;330k;0805 [SMD];50.8705;-14.0032;-90;Top;R2
|
||||||
|
348;;;88.9381;-29.8929;0;Bottom;Copper Fill308
|
||||||
|
349;;;71.1581;-11.0969;0;Bottom;Copper Fill303
|
||||||
|
350;;;50.9133;-26.4583;0;Bottom;Part1
|
||||||
|
351;;;58.8415;-48.0493;-90;Bottom;TXT19
|
||||||
|
352;;;99.3684;-37.6671;0;Bottom;TXT19
|
||||||
|
353;;;50.3428;-13.04;0;Bottom;Copper Fill336
|
||||||
|
354;;;85.2932;-35.2015;0;Bottom;Copper Fill240
|
||||||
|
355;;;74.093;-47.7898;-90;Bottom;TXT19
|
||||||
|
356;;;69.9008;-51.4829;0;Bottom;Copper Fill184
|
||||||
|
357;;;77.6732;-24.6224;0;Bottom;Copper Fill120
|
||||||
|
358;;;3.1877;-24.1779;0;Bottom;Copper Fill143
|
||||||
|
359;;;16.8148;-42.0849;0;Bottom;Copper Fill209
|
||||||
|
360;;;79.1972;-11.9224;0;Bottom;Copper Fill125
|
||||||
|
361;;;69.85;-31.8741;0;Bottom;Copper Fill244
|
||||||
|
362;;;97.9932;-3.0324;0;Bottom;Copper Fill318
|
||||||
|
363;;;62.2808;-51.4829;0;Bottom;Copper Fill182
|
||||||
|
364;;;54.6481;-11.0969;0;Bottom;Copper Fill152
|
||||||
|
365;;;78.5622;-19.5424;0;Bottom;Copper Fill129
|
||||||
|
366;;;99.3684;-19.9158;0;Bottom;TXT19
|
||||||
|
367;;;71.5772;-10.6524;0;Bottom;Copper Fill305
|
||||||
|
368;;;93.1926;-7.452;0;Bottom;Copper Fill342
|
||||||
|
369;;;32.8168;-39.5703;0;Bottom;Copper Fill218
|
||||||
|
370;;;25.0698;-20.9267;0;Bottom;Copper Fill68
|
||||||
|
371;;;35.3568;-51.4829;0;Bottom;Copper Fill172
|
||||||
|
372;;;95.3262;-29.0039;0;Bottom;Copper Fill45
|
||||||
|
373;;;40.9448;-46.7331;0;Bottom;Copper Fill29
|
||||||
|
374;;;47.0916;-33.6013;0;Bottom;Copper Fill242
|
||||||
|
375;;;65.3288;-35.3539;0;Bottom;Copper Fill217
|
||||||
|
376;;;9.8044;-19.0471;0;Bottom;Copper Fill64
|
||||||
|
377;;;84.3094;-47.7898;-90;Bottom;TXT19
|
||||||
|
378;;;37.5355;-8.04335;0;Bottom;Via6
|
||||||
|
379;;;44.0436;-15.0593;0;Bottom;Copper Fill270
|
||||||
|
380;;;91.1651;-17.3096;0;Bottom;TXT19
|
||||||
|
381;;;40.4368;-51.4829;0;Bottom;Copper Fill9
|
||||||
|
382;;;95.631;-26.0067;0;Bottom;Copper Fill46
|
||||||
|
383;;;95.3262;-18.8439;0;Bottom;Copper Fill267
|
||||||
|
384;;;13.3992;-10.7893;0;Bottom;TXT21
|
||||||
|
385;;;98.4377;-2.5879;0;Bottom;Copper Fill115
|
||||||
|
386;;;49.784;-47.6983;0;Bottom;Copper Fill31
|
||||||
|
387;;;62.2681;-11.0969;0;Bottom;Copper Fill133
|
||||||
|
388;;;62.3062;-37.8685;0;Bottom;Copper Fill220
|
||||||
|
389;;;69.342;-26.5401;0;Bottom;Copper Fill89
|
||||||
|
390;;;95.3262;-36.6239;0;Bottom;Copper Fill42
|
||||||
|
391;;so014;68.0156;-31.1634;0;Top;IC1
|
||||||
|
392;;;13.3477;-7.8965;0;Bottom;Copper Fill102
|
||||||
|
393;;;38.4048;-46.4283;0;Bottom;Copper Fill28
|
||||||
|
394;;;16.8402;-15.6435;0;Bottom;Copper Fill265
|
||||||
|
395;;;98.4377;-2.5879;0;Bottom;Copper Fill317
|
||||||
|
396;;;22.9108;-8.8617;0;Bottom;Copper Fill90
|
||||||
|
397;;;82.6008;-51.4829;0;Bottom;Copper Fill189
|
||||||
|
398;;;29.9212;-24.2541;0;Bottom;Copper Fill57
|
||||||
|
399;;;5.9944;-35.6079;0;Bottom;Copper Fill228
|
||||||
|
400;;;78.7781;-11.4779;0;Bottom;Copper Fill325
|
||||||
|
401;;;55.3974;-33.9569;0;Bottom;Copper Fill224
|
||||||
|
402;;;56.3015;-48.0493;-90;Bottom;TXT19
|
||||||
|
403;;;52.1081;-11.0969;0;Bottom;Copper Fill156
|
||||||
|
404;;;5.9944;-44.2947;0;Bottom;Copper Fill197
|
||||||
|
405;;;95.631;-15.8467;0;Bottom;Copper Fill79
|
||||||
|
406;;;62.5348;-49.2985;0;Bottom;Copper Fill33
|
||||||
|
407;;;62.2681;-10.2079;0;Bottom;Copper Fill334
|
||||||
|
408;;;43.9166;-21.8157;0;Bottom;Copper Fill259
|
||||||
|
409;;;63.373;-11.4525;0;Bottom;Copper Fill281
|
||||||
|
410;;;49.5808;-51.4829;0;Bottom;Copper Fill177
|
||||||
|
411;;;22.5044;-40.8403;0;Bottom;Copper Fill212
|
||||||
|
412;;;91.1651;-27.4884;0;Bottom;TXT19
|
||||||
|
413;;;98.4377;-3.4769;0;Bottom;Copper Fill316
|
||||||
|
414;;;81.4324;-37.8685;0;Bottom;Copper Fill207
|
||||||
|
415;;;78.1177;-24.1779;0;Bottom;Copper Fill119
|
||||||
|
416;;;23.7236;-3.0324;0;Bottom;Copper Fill154
|
||||||
|
417;;;69.9008;-51.4829;0;Bottom;Copper Fill18
|
||||||
|
418;;;89.3572;-30.312;0;Bottom;Copper Fill106
|
||||||
|
419;;;62.9158;-33.0171;0;Bottom;Copper Fill235
|
||||||
|
420;;;39.2176;-10.1063;0;Bottom;Copper Fill286
|
||||||
|
421;;;2.3368;-23.3524;0;Bottom;Copper Fill340
|
||||||
|
422;;THT;32.4556;-23.2833;-90;Bottom;J1
|
||||||
|
423;;;71.8312;-27.8355;0;Bottom;Copper Fill247
|
||||||
|
424;;;64.8081;-10.2079;0;Bottom;Copper Fill333
|
||||||
|
425;;so014;81.9856;-31.1634;0;Top;IC2
|
||||||
|
426;180k;0805 [SMD];61.0305;-6.38318;90;Top;R9
|
||||||
|
427;;;63.754;-16.5579;0;Bottom;Copper Fill272
|
||||||
|
428;;;52.1208;-51.4829;0;Bottom;Copper Fill13
|
||||||
|
429;;;30.2768;-51.4829;0;Bottom;Copper Fill170
|
||||||
|
430;;;14.2748;-2.8673;0;Bottom;Copper Fill91
|
||||||
|
431;;;37.5355;-6.77335;0;Bottom;Via8
|
||||||
|
432;;;91.1606;-21.7903;0;Bottom;Copper Fill74
|
||||||
|
433;;;13.3477;-9.5729;0;Bottom;Copper Fill101
|
||||||
|
434;;;77.5208;-51.4829;0;Bottom;Copper Fill187
|
||||||
|
435;;;90.551;-24.3811;0;Bottom;Copper Fill48
|
||||||
|
436;;;77.5208;-51.4829;0;Bottom;Copper Fill21
|
||||||
|
437;;;11.058;-5.05375;-90;Bottom;TXT20
|
||||||
|
438;;;95.3262;-8.6839;0;Bottom;Copper Fill294
|
||||||
|
439;;;53.7615;-48.0493;-90;Bottom;TXT19
|
||||||
|
440;;;23.7236;-7.452;0;Bottom;Copper Fill311
|
||||||
|
441;;THT;13.4056;-8.67826;-90;Bottom;J4
|
||||||
|
442;;;44.0944;-47.9269;0;Bottom;Copper Fill10
|
||||||
|
443;;;81.28;-25.0415;0;Bottom;Copper Fill253
|
||||||
|
444;;;24.8412;-24.2541;0;Bottom;Copper Fill55
|
||||||
|
445;;;68.453;-11.4525;0;Bottom;Copper Fill283
|
||||||
|
446;;;35.433;-22.1967;0;Bottom;Copper Fill72
|
||||||
|
447;;;59.7281;-11.0969;0;Bottom;Copper Fill137
|
||||||
|
448;;;77.6732;-24.6224;0;Bottom;Copper Fill322
|
||||||
|
449;;;80.4672;-26.8195;0;Bottom;Copper Fill237
|
||||||
|
450;;;57.2008;-6.4233;0;Bottom;Copper Fill289
|
||||||
|
451;;;91.1651;-37.5919;0;Bottom;TXT19
|
||||||
|
452;;;72.4408;-51.4829;0;Bottom;Copper Fill19
|
||||||
|
453;;;19.7612;-24.2541;0;Bottom;Copper Fill53
|
||||||
|
454;;;24.1681;-2.5879;0;Bottom;Copper Fill153
|
||||||
|
455;;;3.1877;-22.5015;0;Bottom;Copper Fill144
|
||||||
|
456;;;99.3684;-9.73354;0;Bottom;TXT19
|
||||||
|
457;;;67.3805;-10.5834;0;Bottom;Via20
|
||||||
|
458;;;55.9816;-17.0659;0;Bottom;Copper Fill269
|
||||||
|
459;;;78.5622;-24.6224;0;Bottom;Copper Fill121
|
||||||
|
460;;;34.4878;-47.6957;-90;Bottom;TXT19
|
||||||
|
461;;;38.7477;-37.7415;0;Bottom;Copper Fill146
|
||||||
|
462;;;35.0012;-24.2541;0;Bottom;Copper Fill59
|
||||||
|
463;;;57.1881;-11.0969;0;Bottom;Copper Fill142
|
||||||
|
464;;;16.1544;-36.8779;0;Bottom;Copper Fill232
|
||||||
|
465;;;14.2494;-42.7199;0;Bottom;Copper Fill204
|
||||||
|
466;;;39.0652;-17.3961;0;Bottom;Copper Fill258
|
||||||
|
467;;;94.6277;-3.4769;0;Bottom;Copper Fill353
|
||||||
|
468;;;26.7549;-47.0408;-90;Bottom;TXT19
|
||||||
|
469;;;73.0377;-31.1629;0;Bottom;Copper Fill135
|
||||||
|
470;;;39.4081;-30.7565;0;Bottom;Copper Fill95
|
||||||
|
471;;;19.9644;-20.3171;0;Bottom;Copper Fill66
|
||||||
|
472;;;24.1681;-7.8965;0;Bottom;Copper Fill107
|
||||||
|
473;;;51.8922;-27.1624;0;Bottom;Copper Fill113
|
||||||
|
474;;;24.1681;-7.0329;0;Bottom;Copper Fill108
|
||||||
|
475;;;91.1651;-47.7707;0;Bottom;TXT19
|
||||||
|
476;;;50.6222;-20.9013;0;Bottom;Copper Fill262
|
||||||
|
477;;;18.8363;-5.52706;-90;Bottom;TXT20
|
||||||
|
478;;;95.3262;-16.3039;0;Bottom;Copper Fill273
|
||||||
|
479;;;99.3684;-32.5306;0;Bottom;TXT19
|
||||||
|
480;;;78.1177;-24.1779;0;Bottom;Copper Fill321
|
||||||
|
481;;;95.3262;-44.2439;0;Bottom;Copper Fill36
|
||||||
|
482;;;24.2006;-7.40826;0;Bottom;Via30
|
||||||
|
483;;;88.9381;-30.7565;0;Bottom;Copper Fill103
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,404 +0,0 @@
|
||||||
*Pick And Place List
|
|
||||||
*Company=
|
|
||||||
*Author=
|
|
||||||
*eMail=
|
|
||||||
*
|
|
||||||
*Project=Teensy 3.5 Adaptor
|
|
||||||
*Date=21:31:13
|
|
||||||
*CreatedBy=Fritzing 0.9.3b.04.19.5c895d327c44a3114e5fcc9d8260daf0cbb52806
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*Coordinates in mm, always center of component
|
|
||||||
*Origin 0/0=Lower left corner of PCB
|
|
||||||
*Rotation in degree (0-360, math. pos.)
|
|
||||||
*
|
|
||||||
*No;Value;Package;X;Y;Rotation;Side;Name
|
|
||||||
1;;;51.4477;-27.6069;0;Bottom;Copper Fill288
|
|
||||||
2;;;52.1081;-10.2079;0;Bottom;Copper Fill323
|
|
||||||
3;;;30.2768;-51.4829;0;Bottom;Copper Fill154
|
|
||||||
4;;;95.3262;-26.4639;0;Bottom;Copper Fill234
|
|
||||||
5;;;95.3262;-36.6239;0;Bottom;Copper Fill208
|
|
||||||
6;;;40.9448;-46.7331;0;Bottom;Copper Fill29
|
|
||||||
7;;;47.0408;-51.4829;0;Bottom;Copper Fill11
|
|
||||||
8;;;12.9794;-43.0247;0;Bottom;Copper Fill186
|
|
||||||
9;;;78.5622;-24.6224;0;Bottom;Copper Fill104
|
|
||||||
10;;;22.5044;-41.1451;0;Bottom;Copper Fill194
|
|
||||||
11;;;41.9481;-0.7083;0;Bottom;Copper Fill84
|
|
||||||
12;;;24.5872;-3.0324;0;Bottom;Copper Fill134
|
|
||||||
13;;;95.3262;-11.2239;0;Bottom;Copper Fill76
|
|
||||||
14;;;50.6222;-20.9013;0;Bottom;Copper Fill241
|
|
||||||
15;330k;0805 [SMD];58.4905;-14.0032;-90;Top;R8
|
|
||||||
16;;;98.4377;-3.4769;0;Bottom;Copper Fill97
|
|
||||||
17;;;73.0955;-31.5384;0;Bottom;Via11
|
|
||||||
18;;;46.482;-32.4075;0;Bottom;Copper Fill224
|
|
||||||
19;;;94.6277;-2.5879;0;Bottom;Copper Fill114
|
|
||||||
20;;;67.7672;-10.6524;0;Bottom;Copper Fill143
|
|
||||||
21;;;29.2608;-3.2229;0;Bottom;Copper Fill81
|
|
||||||
22;;;25.1968;-51.4829;0;Bottom;Copper Fill152
|
|
||||||
23;;;95.3262;-8.6839;0;Bottom;Copper Fill78
|
|
||||||
24;330k;0805 [SMD];61.0305;-14.0032;-90;Top;R13
|
|
||||||
25;;;95.3262;-29.0039;0;Bottom;Copper Fill47
|
|
||||||
26;;;59.9694;-48.9683;0;Bottom;Copper Fill35
|
|
||||||
27;;;8.5344;-43.9899;0;Bottom;Copper Fill182
|
|
||||||
28;;;22.6568;-51.4829;0;Bottom;Copper Fill151
|
|
||||||
29;;;52.1405;-10.5834;0;Bottom;Via13
|
|
||||||
30;;;77.6732;-19.5424;0;Bottom;Copper Fill304
|
|
||||||
31;;;52.8828;-36.4969;0;Bottom;Copper Fill203
|
|
||||||
32;180k;0805 [SMD];63.5705;-6.38318;90;Top;R16
|
|
||||||
33;;;39.878;-7.6171;0;Bottom;Copper Fill273
|
|
||||||
34;;;9.56589;-15.1119;0;Bottom;TXT5
|
|
||||||
35;330k;0805 [SMD];55.9505;-14.0032;-90;Top;R6
|
|
||||||
36;;;32.6644;-21.8919;0;Bottom;Copper Fill62
|
|
||||||
37;;;52.2732;-15.3895;0;Bottom;Copper Fill262
|
|
||||||
38;;;25.1968;-51.4829;0;Bottom;Copper Fill3
|
|
||||||
39;;;77.6732;-19.5424;0;Bottom;Copper Fill111
|
|
||||||
40;;;58.293;-11.4525;0;Bottom;Copper Fill256
|
|
||||||
41;;;24.1681;-8.3029;0;Bottom;Copper Fill91
|
|
||||||
42;;;62.5348;-49.2985;0;Bottom;Copper Fill36
|
|
||||||
43;;;82.6008;-51.4829;0;Bottom;Copper Fill23
|
|
||||||
44;;THT;48.9656;-30.9033;0;Bottom;J3
|
|
||||||
45;;;23.7236;-8.722;0;Bottom;Copper Fill92
|
|
||||||
46;;;95.3262;-13.7639;0;Bottom;Copper Fill252
|
|
||||||
47;;;59.7281;-11.0969;0;Bottom;Copper Fill145
|
|
||||||
48;;;27.7368;-51.4829;0;Bottom;Copper Fill153
|
|
||||||
49;;;20.0152;-41.5007;0;Bottom;Copper Fill193
|
|
||||||
50;330k;0805 [SMD];66.1105;-14.0032;-90;Top;R11
|
|
||||||
51;;;79.1972;-11.9224;0;Bottom;Copper Fill302
|
|
||||||
52;;;57.4548;-48.6381;0;Bottom;Copper Fill34
|
|
||||||
53;;;97.3582;-7.452;0;Bottom;Copper Fill312
|
|
||||||
54;;;81.9855;-22.0134;0;Bottom;Via2
|
|
||||||
55;;;82.6008;-51.4829;0;Bottom;Copper Fill173
|
|
||||||
56;;;78.1755;-24.5534;0;Bottom;Via25
|
|
||||||
57;;;54.6805;-10.5834;0;Bottom;Via15
|
|
||||||
58;;;64.8081;-10.2079;0;Bottom;Copper Fill327
|
|
||||||
59;;;95.3262;-8.6839;0;Bottom;Copper Fill271
|
|
||||||
60;;;78.1177;-19.0979;0;Bottom;Copper Fill110
|
|
||||||
61;;;95.3262;-31.5439;0;Bottom;Copper Fill46
|
|
||||||
62;;;50.9133;-26.4583;0;Bottom;Part1
|
|
||||||
63;;;51.4477;-26.7179;0;Bottom;Copper Fill95
|
|
||||||
64;;;67.3805;-10.5834;0;Bottom;Via20
|
|
||||||
65;;;3.1877;-22.5015;0;Bottom;Copper Fill317
|
|
||||||
66;;;48.2981;-1.9529;0;Bottom;Copper Fill89
|
|
||||||
67;;;39.5224;-8.8109;0;Bottom;Copper Fill272
|
|
||||||
68;180k;0805 [SMD];50.8705;-6.38318;90;Top;R3
|
|
||||||
69;;;90.2081;-28.8769;0;Bottom;Copper Fill86
|
|
||||||
70;;;57.2008;-6.4233;0;Bottom;Copper Fill266
|
|
||||||
71;;;43.7388;-50.7971;0;Bottom;Copper Fill159
|
|
||||||
72;;;91.1606;-21.7903;0;Bottom;Copper Fill65
|
|
||||||
73;;;31.8008;-3.2229;0;Bottom;Copper Fill82
|
|
||||||
74;;;57.2008;-51.4829;0;Bottom;Copper Fill164
|
|
||||||
75;;;86.4616;-49.3493;0;Bottom;Copper Fill176
|
|
||||||
76;;;30.1498;-40.2307;0;Bottom;Copper Fill198
|
|
||||||
77;;;62.4332;-23.3524;0;Bottom;Copper Fill278
|
|
||||||
78;;;13.6398;-36.5477;0;Bottom;Copper Fill212
|
|
||||||
79;;;20.1168;-51.4829;0;Bottom;Copper Fill1
|
|
||||||
80;;;66.2178;-16.2531;0;Bottom;Copper Fill251
|
|
||||||
81;;;95.3262;-16.3039;0;Bottom;Copper Fill250
|
|
||||||
82;;;95.3262;-21.3839;0;Bottom;Copper Fill236
|
|
||||||
83;;;49.784;-47.6983;0;Bottom;Copper Fill31
|
|
||||||
84;;;80.4672;-26.8195;0;Bottom;Copper Fill217
|
|
||||||
85;;;73.0377;-31.1629;0;Bottom;Copper Fill130
|
|
||||||
86;;;62.2808;-51.4829;0;Bottom;Copper Fill17
|
|
||||||
87;;;32.8168;-51.4829;0;Bottom;Copper Fill6
|
|
||||||
88;;;24.1681;-3.4769;0;Bottom;Copper Fill320
|
|
||||||
89;;;78.8105;-11.8534;0;Bottom;Via24
|
|
||||||
90;;;90.6272;-28.4324;0;Bottom;Copper Fill282
|
|
||||||
91;;;95.3262;-39.1639;0;Bottom;Copper Fill202
|
|
||||||
92;;;59.7408;-6.4233;0;Bottom;Copper Fill267
|
|
||||||
93;;;22.5044;-20.6219;0;Bottom;Copper Fill58
|
|
||||||
94;330k;0805 [SMD];50.8705;-14.0032;-90;Top;R4
|
|
||||||
95;;;33.3502;-45.7679;0;Bottom;Copper Fill26
|
|
||||||
96;;;81.407;-38.1987;0;Bottom;Copper Fill189
|
|
||||||
97;;;73.0377;-32.0265;0;Bottom;Copper Fill129
|
|
||||||
98;;;27.7368;-51.4829;0;Bottom;Copper Fill4
|
|
||||||
99;;;17.4498;-41.8055;0;Bottom;Copper Fill192
|
|
||||||
100;;;49.5681;-11.0969;0;Bottom;Copper Fill127
|
|
||||||
101;;;98.4377;-2.5879;0;Bottom;Copper Fill292
|
|
||||||
102;;;63.373;-11.4525;0;Bottom;Copper Fill258
|
|
||||||
103;;;78.1177;-25.0669;0;Bottom;Copper Fill101
|
|
||||||
104;;;95.3262;-49.2477;0;Bottom;Copper Fill177
|
|
||||||
105;;;70.0786;-23.6953;0;Bottom;Copper Fill230
|
|
||||||
106;;;62.2808;-6.4233;0;Bottom;Copper Fill268
|
|
||||||
107;;;37.5355;-11.8534;0;Bottom;Via3
|
|
||||||
108;;;39.0652;-17.3961;0;Bottom;Copper Fill237
|
|
||||||
109;;;95.0722;-3.0324;0;Bottom;Copper Fill308
|
|
||||||
110;;;26.4541;-51.4575;0;Bottom;Copper Fill120
|
|
||||||
111;;;78.1177;-24.1779;0;Bottom;Copper Fill296
|
|
||||||
112;;;92.5322;-45.3107;0;Bottom;Copper Fill187
|
|
||||||
113;;;3.1877;-24.1779;0;Bottom;Copper Fill122
|
|
||||||
114;;;60.833;-11.4525;0;Bottom;Copper Fill257
|
|
||||||
115;;;95.3262;-18.8439;0;Bottom;Copper Fill244
|
|
||||||
116;;;95.3262;-44.2439;0;Bottom;Copper Fill191
|
|
||||||
117;;;48.387;-21.2061;0;Bottom;Copper Fill240
|
|
||||||
118;;;79.1972;-11.9224;0;Bottom;Copper Fill108
|
|
||||||
119;;;12.3444;-19.3519;0;Bottom;Copper Fill54
|
|
||||||
120;;;81.8388;-19.4027;0;Bottom;Copper Fill243
|
|
||||||
121;;;39.2176;-10.1063;0;Bottom;Copper Fill263
|
|
||||||
122;;;10.4394;-43.6597;0;Bottom;Copper Fill183
|
|
||||||
123;;;17.4244;-19.9869;0;Bottom;Copper Fill56
|
|
||||||
124;;;91.821;-18.6661;0;Bottom;Copper Fill68
|
|
||||||
125;;;40.1828;-6.2963;0;Bottom;Copper Fill274
|
|
||||||
126;;;24.1681;-8.3029;0;Bottom;Copper Fill285
|
|
||||||
127;;THT;32.4556;-38.5233;90;Bottom;J2
|
|
||||||
128;;;98.8822;-3.0324;0;Bottom;Copper Fill100
|
|
||||||
129;;;67.3481;-10.2079;0;Bottom;Copper Fill326
|
|
||||||
130;;;52.0446;-20.3425;0;Bottom;Copper Fill242
|
|
||||||
131;;;94.6855;-2.96335;0;Bottom;Via26
|
|
||||||
132;;;78.1177;-24.1779;0;Bottom;Copper Fill102
|
|
||||||
133;;;94.0181;-6.6519;0;Bottom;Copper Fill309
|
|
||||||
134;;;15.5194;-42.3897;0;Bottom;Copper Fill190
|
|
||||||
135;;;37.5355;-13.1234;0;Bottom;Via7
|
|
||||||
136;;;37.5355;-8.04335;0;Bottom;Via6
|
|
||||||
137;;;62.2681;-11.0969;0;Bottom;Copper Fill146
|
|
||||||
138;;;9.8044;-19.0471;0;Bottom;Copper Fill53
|
|
||||||
139;;;98.4377;-2.5879;0;Bottom;Copper Fill98
|
|
||||||
140;;;94.1832;-3.0324;0;Bottom;Copper Fill115
|
|
||||||
141;;;8.5598;-35.9127;0;Bottom;Copper Fill210
|
|
||||||
142;;;80.0608;-51.4829;0;Bottom;Copper Fill22
|
|
||||||
143;;;5.9944;-44.2947;0;Bottom;Copper Fill181
|
|
||||||
144;;;55.3974;-33.9569;0;Bottom;Copper Fill205
|
|
||||||
145;;;62.3005;-10.5834;0;Bottom;Via18
|
|
||||||
146;180k;0805 [SMD];68.6505;-6.38318;90;Top;R10
|
|
||||||
147;;;90.8812;-23.1111;0;Bottom;Copper Fill51
|
|
||||||
148;;;10.9982;-45.7933;0;Bottom;Copper Fill149
|
|
||||||
149;;;35.8394;-46.1235;0;Bottom;Copper Fill27
|
|
||||||
150;;;59.7408;-51.4829;0;Bottom;Copper Fill16
|
|
||||||
151;;;37.5355;-10.5834;0;Bottom;Via4
|
|
||||||
152;;;37.5355;-5.50335;0;Bottom;Via9
|
|
||||||
153;;;37.5355;-6.77335;0;Bottom;Via8
|
|
||||||
154;;;97.3582;-27.772;0;Bottom;Copper Fill330
|
|
||||||
155;;;49.7332;-30.9724;0;Bottom;Copper Fill126
|
|
||||||
156;;;95.631;-23.4667;0;Bottom;Copper Fill50
|
|
||||||
157;;;76.0222;-26.7941;0;Bottom;Copper Fill219
|
|
||||||
158;;;24.5872;-3.0324;0;Bottom;Copper Fill322
|
|
||||||
159;;;95.3262;-34.0839;0;Bottom;Copper Fill221
|
|
||||||
160;;;24.2005;-2.96335;0;Bottom;Via29
|
|
||||||
161;;;90.2405;-28.3634;0;Bottom;Via32
|
|
||||||
162;;;78.7781;-11.4779;0;Bottom;Copper Fill106
|
|
||||||
163;;;14.2748;-2.8673;0;Bottom;Copper Fill80
|
|
||||||
164;;;95.3262;-26.4639;0;Bottom;Copper Fill48
|
|
||||||
165;;;95.3262;-49.3239;0;Bottom;Copper Fill37
|
|
||||||
166;;;81.28;-25.0415;0;Bottom;Copper Fill232
|
|
||||||
167;;;57.1881;-11.0969;0;Bottom;Copper Fill137
|
|
||||||
168;330k;0805 [SMD];68.6505;-14.0032;-90;Top;R9
|
|
||||||
169;;;95.631;-20.9267;0;Bottom;Copper Fill67
|
|
||||||
170;;;47.3964;-36.0905;0;Bottom;Copper Fill216
|
|
||||||
171;;;98.4377;-3.4769;0;Bottom;Copper Fill291
|
|
||||||
172;;;25.1714;-30.8835;0;Bottom;Copper Fill42
|
|
||||||
173;;;95.3262;-36.6239;0;Bottom;Copper Fill44
|
|
||||||
174;;;54.6608;-51.4829;0;Bottom;Copper Fill163
|
|
||||||
175;;;58.7248;-17.2183;0;Bottom;Copper Fill245
|
|
||||||
176;;;78.5622;-24.6224;0;Bottom;Copper Fill298
|
|
||||||
177;;;51.4477;-26.7179;0;Bottom;Copper Fill289
|
|
||||||
178;;;37.8968;-51.4829;0;Bottom;Copper Fill8
|
|
||||||
179;;;50.3428;-13.04;0;Bottom;Copper Fill314
|
|
||||||
180;;;24.765;-26.5401;0;Bottom;Copper Fill148
|
|
||||||
181;;;24.1681;-9.1665;0;Bottom;Copper Fill284
|
|
||||||
182;;;89.7636;-28.4324;0;Bottom;Copper Fill281
|
|
||||||
183;;;57.2205;-10.5834;0;Bottom;Via16
|
|
||||||
184;;;69.342;-26.5401;0;Bottom;Copper Fill79
|
|
||||||
185;;;96.5581;-6.6519;0;Bottom;Copper Fill118
|
|
||||||
186;;;37.8968;-51.4829;0;Bottom;Copper Fill157
|
|
||||||
187;;;85.2932;-35.2015;0;Bottom;Copper Fill220
|
|
||||||
188;;;51.4477;-27.6069;0;Bottom;Copper Fill94
|
|
||||||
189;;;51.8922;-27.1624;0;Bottom;Copper Fill290
|
|
||||||
190;;;64.8208;-6.4233;0;Bottom;Copper Fill269
|
|
||||||
191;;;94.6277;-3.4769;0;Bottom;Copper Fill113
|
|
||||||
192;;;76.3016;-49.2731;0;Bottom;Copper Fill179
|
|
||||||
193;;;57.2008;-51.4829;0;Bottom;Copper Fill15
|
|
||||||
194;;;78.1177;-19.9869;0;Bottom;Copper Fill303
|
|
||||||
195;;;48.2981;-2.8165;0;Bottom;Copper Fill283
|
|
||||||
196;;;92.7608;-9.9285;0;Bottom;Copper Fill77
|
|
||||||
197;;;30.2768;-51.4829;0;Bottom;Copper Fill5
|
|
||||||
198;;;12.2621;-17.215;0;Bottom;TXT6
|
|
||||||
199;;;5.9944;-35.6079;0;Bottom;Copper Fill209
|
|
||||||
200;;;24.1681;-2.5879;0;Bottom;Copper Fill132
|
|
||||||
201;;;14.9098;-19.6567;0;Bottom;Copper Fill55
|
|
||||||
202;;;95.3262;-44.2439;0;Bottom;Copper Fill39
|
|
||||||
203;;;89.7636;-28.4324;0;Bottom;Copper Fill87
|
|
||||||
204;;;37.5355;-9.31335;0;Bottom;Via5
|
|
||||||
205;;;95.3008;-51.5337;0;Bottom;Copper Fill175
|
|
||||||
206;;;54.6608;-6.4233;0;Bottom;Copper Fill265
|
|
||||||
207;;;85.1408;-51.4829;0;Bottom;Copper Fill174
|
|
||||||
208;;;96.5581;-6.6519;0;Bottom;Copper Fill311
|
|
||||||
209;;;74.1172;-31.3407;0;Bottom;Copper Fill226
|
|
||||||
210;;;78.5114;-36.9287;0;Bottom;Copper Fill206
|
|
||||||
211;;;11.0744;-36.2429;0;Bottom;Copper Fill211
|
|
||||||
212;;;49.5808;-51.4829;0;Bottom;Copper Fill12
|
|
||||||
213;;;80.0608;-51.4829;0;Bottom;Copper Fill172
|
|
||||||
214;;;38.9128;-11.3763;0;Bottom;Copper Fill261
|
|
||||||
215;;so014;81.9856;-31.1634;0;Top;IC2
|
|
||||||
216;;so014;68.0156;-31.1634;0;Top;IC1
|
|
||||||
217;;;62.2808;-51.4829;0;Bottom;Copper Fill166
|
|
||||||
218;;;34.3408;-3.2229;0;Bottom;Copper Fill83
|
|
||||||
219;;;85.1408;-51.4829;0;Bottom;Copper Fill24
|
|
||||||
220;;;68.453;-11.4525;0;Bottom;Copper Fill260
|
|
||||||
221;;;95.3262;-11.2239;0;Bottom;Copper Fill253
|
|
||||||
222;;;69.2912;-30.5025;0;Bottom;Copper Fill75
|
|
||||||
223;;;95.631;-15.8467;0;Bottom;Copper Fill70
|
|
||||||
224;;;74.9808;-51.4829;0;Bottom;Copper Fill20
|
|
||||||
225;;;78.3336;-11.9224;0;Bottom;Copper Fill301
|
|
||||||
226;;;24.5872;-8.722;0;Bottom;Copper Fill287
|
|
||||||
227;;;84.7598;-26.5401;0;Bottom;Copper Fill222
|
|
||||||
228;;;35.433;-22.1967;0;Bottom;Copper Fill63
|
|
||||||
229;;;35.3568;-51.4829;0;Bottom;Copper Fill156
|
|
||||||
230;;;77.3684;-36.1667;0;Bottom;Copper Fill207
|
|
||||||
231;;;77.6732;-24.6224;0;Bottom;Copper Fill297
|
|
||||||
232;;;78.5622;-19.5424;0;Bottom;Copper Fill305
|
|
||||||
233;;;78.5622;-19.5424;0;Bottom;Copper Fill112
|
|
||||||
234;;;65.3288;-35.6841;0;Bottom;Copper Fill199
|
|
||||||
235;;;78.1755;-19.4734;0;Bottom;Via23
|
|
||||||
236;;;44.0436;-15.0593;0;Bottom;Copper Fill247
|
|
||||||
237;;;81.4832;-32.2424;0;Bottom;Copper Fill140
|
|
||||||
238;;;95.0722;-3.0324;0;Bottom;Copper Fill116
|
|
||||||
239;;;78.7781;-12.3669;0;Bottom;Copper Fill105
|
|
||||||
240;;THT;32.4556;-23.2833;-90;Bottom;J1
|
|
||||||
241;;;38.7477;-37.7415;0;Bottom;Copper Fill124
|
|
||||||
242;;;38.4048;-46.4283;0;Bottom;Copper Fill28
|
|
||||||
243;;;54.6481;-11.0969;0;Bottom;Copper Fill136
|
|
||||||
244;;;27.6098;-40.5355;0;Bottom;Copper Fill197
|
|
||||||
245;;;95.3262;-29.0039;0;Bottom;Copper Fill229
|
|
||||||
246;;;74.9808;-51.4829;0;Bottom;Copper Fill170
|
|
||||||
247;;;41.3512;-10.5635;0;Bottom;Copper Fill74
|
|
||||||
248;;;55.0418;-17.5231;0;Bottom;Copper Fill66
|
|
||||||
249;;;52.1208;-6.4233;0;Bottom;Copper Fill264
|
|
||||||
250;;;67.3481;-11.0969;0;Bottom;Copper Fill142
|
|
||||||
251;;;95.3262;-41.7039;0;Bottom;Copper Fill196
|
|
||||||
252;;;57.1881;-10.2079;0;Bottom;Copper Fill325
|
|
||||||
253;;;46.101;-36.7255;0;Bottom;Copper Fill214
|
|
||||||
254;180k;0805 [SMD];61.0305;-6.38318;-90;Top;R14
|
|
||||||
255;;;40.4876;-5.0263;0;Bottom;Copper Fill275
|
|
||||||
256;;;32.8168;-51.4829;0;Bottom;Copper Fill155
|
|
||||||
257;;;46.8122;-11.9224;0;Bottom;Copper Fill121
|
|
||||||
258;;;51.5055;-27.0934;0;Bottom;Via28
|
|
||||||
259;;;28.8035;-15.8903;0;Bottom;TXT18
|
|
||||||
260;;;90.6272;-28.4324;0;Bottom;Copper Fill88
|
|
||||||
261;;;95.3262;-18.8439;0;Bottom;Copper Fill69
|
|
||||||
262;;;35.3568;-51.4829;0;Bottom;Copper Fill7
|
|
||||||
263;;;23.7236;-8.722;0;Bottom;Copper Fill286
|
|
||||||
264;;;62.9158;-33.0171;0;Bottom;Copper Fill215
|
|
||||||
265;;;41.9806;-1.05826;0;Bottom;Via33
|
|
||||||
266;;;78.5368;-48.9683;0;Bottom;Copper Fill180
|
|
||||||
267;;;78.1177;-19.9869;0;Bottom;Copper Fill109
|
|
||||||
268;330k;0805 [SMD];53.4105;-14.0032;-90;Top;R2
|
|
||||||
269;;;65.913;-11.4525;0;Bottom;Copper Fill259
|
|
||||||
270;;;3.1877;-24.1779;0;Bottom;Copper Fill316
|
|
||||||
271;;;40.4368;-51.4829;0;Bottom;Copper Fill158
|
|
||||||
272;;;20.1168;-51.4829;0;Bottom;Copper Fill150
|
|
||||||
273;;;59.7605;-10.5834;0;Bottom;Via17
|
|
||||||
274;;;97.9932;-3.0324;0;Bottom;Copper Fill99
|
|
||||||
275;;;30.1244;-37.1319;0;Bottom;Copper Fill213
|
|
||||||
276;;;52.1081;-11.0969;0;Bottom;Copper Fill135
|
|
||||||
277;;;47.0916;-33.6013;0;Bottom;Copper Fill223
|
|
||||||
278;;;95.3262;-23.9239;0;Bottom;Copper Fill235
|
|
||||||
279;;;78.3336;-11.9224;0;Bottom;Copper Fill107
|
|
||||||
280;;;19.5072;-13.5099;0;Bottom;Copper Fill64
|
|
||||||
281;;;11.7094;-43.3549;0;Bottom;Copper Fill185
|
|
||||||
282;;;24.5872;-8.722;0;Bottom;Copper Fill93
|
|
||||||
283;;;54.6608;-51.4829;0;Bottom;Copper Fill14
|
|
||||||
284;;;81.9277;-32.6869;0;Bottom;Copper Fill138
|
|
||||||
285;;;43.9166;-21.8157;0;Bottom;Copper Fill238
|
|
||||||
286;;;98.8822;-3.0324;0;Bottom;Copper Fill294
|
|
||||||
287;;;55.9816;-17.0659;0;Bottom;Copper Fill246
|
|
||||||
288;;;95.3262;-46.7839;0;Bottom;Copper Fill184
|
|
||||||
289;;;2.3368;-23.3524;0;Bottom;Copper Fill318
|
|
||||||
290;;;93.1926;-7.452;0;Bottom;Copper Fill310
|
|
||||||
291;;;40.4368;-51.4829;0;Bottom;Copper Fill9
|
|
||||||
292;;;49.7332;-30.9724;0;Bottom;Copper Fill319
|
|
||||||
293;;;90.2081;-28.8769;0;Bottom;Copper Fill279
|
|
||||||
294;330k;0805 [SMD];63.5705;-14.0032;-90;Top;R15
|
|
||||||
295;;;52.1208;-51.4829;0;Bottom;Copper Fill162
|
|
||||||
296;;;66.0908;-50.7971;0;Bottom;Copper Fill167
|
|
||||||
297;;;46.1772;-21.5109;0;Bottom;Copper Fill239
|
|
||||||
298;;;54.8894;-48.3333;0;Bottom;Copper Fill33
|
|
||||||
299;;;49.5808;-51.4829;0;Bottom;Copper Fill161
|
|
||||||
300;;;95.3262;-31.5439;0;Bottom;Copper Fill227
|
|
||||||
301;;;94.0181;-6.6519;0;Bottom;Copper Fill117
|
|
||||||
302;;;44.5205;-11.8534;0;Bottom;Via21
|
|
||||||
303;;;81.9277;-31.7979;0;Bottom;Copper Fill139
|
|
||||||
304;;;22.2549;-19.3072;0;Bottom;TXT3
|
|
||||||
305;;;41.9481;-0.7083;0;Bottom;Copper Fill276
|
|
||||||
306;;;94.1832;-3.0324;0;Bottom;Copper Fill307
|
|
||||||
307;;;97.9932;-3.0324;0;Bottom;Copper Fill293
|
|
||||||
308;;;25.0444;-40.8403;0;Bottom;Copper Fill195
|
|
||||||
309;;;3.1877;-22.5015;0;Bottom;Copper Fill123
|
|
||||||
310;;;95.631;-13.3067;0;Bottom;Copper Fill72
|
|
||||||
311;180k;0805 [SMD];55.9505;-6.38318;90;Top;R5
|
|
||||||
312;;;98.4955;-2.96335;0;Bottom;Via27
|
|
||||||
313;;;54.4322;-35.2269;0;Bottom;Copper Fill204
|
|
||||||
314;;;73.4822;-31.582;0;Bottom;Copper Fill131
|
|
||||||
315;;;95.3262;-39.1639;0;Bottom;Copper Fill41
|
|
||||||
316;;;52.1208;-51.4829;0;Bottom;Copper Fill13
|
|
||||||
317;;;69.9008;-51.4829;0;Bottom;Copper Fill18
|
|
||||||
318;;;55.753;-11.4525;0;Bottom;Copper Fill255
|
|
||||||
319;;;63.754;-16.5579;0;Bottom;Copper Fill249
|
|
||||||
320;;;92.1512;-12.0113;0;Bottom;Copper Fill73
|
|
||||||
321;;;97.3582;-27.772;0;Bottom;Copper Fill147
|
|
||||||
322;;;90.2081;-27.9879;0;Bottom;Copper Fill280
|
|
||||||
323;;;46.4255;-11.8534;0;Bottom;Via22
|
|
||||||
324;;;64.8405;-10.5834;0;Bottom;Via19
|
|
||||||
325;;;14.2494;-42.7199;0;Bottom;Copper Fill188
|
|
||||||
326;;;61.214;-16.8627;0;Bottom;Copper Fill248
|
|
||||||
327;;;72.4605;-22.0134;0;Bottom;Via1
|
|
||||||
328;;;64.8081;-11.0969;0;Bottom;Copper Fill144
|
|
||||||
329;;;77.5208;-51.4829;0;Bottom;Copper Fill21
|
|
||||||
330;;;72.4408;-51.4829;0;Bottom;Copper Fill19
|
|
||||||
331;;;19.9644;-20.3171;0;Bottom;Copper Fill57
|
|
||||||
332;;;47.244;-47.3935;0;Bottom;Copper Fill30
|
|
||||||
333;;;48.0568;-30.9724;0;Bottom;Copper Fill125
|
|
||||||
334;;;49.6005;-10.5834;0;Bottom;Via14
|
|
||||||
335;;;54.6481;-10.2079;0;Bottom;Copper Fill324
|
|
||||||
336;;;94.6277;-3.4769;0;Bottom;Copper Fill306
|
|
||||||
337;;;69.9008;-51.4829;0;Bottom;Copper Fill168
|
|
||||||
338;;;24.2005;-8.67835;0;Bottom;Via30
|
|
||||||
339;;;95.3262;-41.7039;0;Bottom;Copper Fill40
|
|
||||||
340;;;47.0408;-51.4829;0;Bottom;Copper Fill160
|
|
||||||
341;;;82.3722;-32.2424;0;Bottom;Copper Fill141
|
|
||||||
342;;;61.6077;-24.1779;0;Bottom;Copper Fill277
|
|
||||||
343;;;32.1818;-37.3351;0;Bottom;Copper Fill43
|
|
||||||
344;;;75.0824;-34.6173;0;Bottom;Copper Fill218
|
|
||||||
345;;;23.7236;-3.0324;0;Bottom;Copper Fill133
|
|
||||||
346;;;78.7781;-12.3669;0;Bottom;Copper Fill299
|
|
||||||
347;;;97.3582;-7.452;0;Bottom;Copper Fill119
|
|
||||||
348;;;7.2644;-18.7169;0;Bottom;Copper Fill52
|
|
||||||
349;;;32.6644;-39.9005;0;Bottom;Copper Fill200
|
|
||||||
350;;;59.7281;-10.2079;0;Bottom;Copper Fill328
|
|
||||||
351;;;22.6568;-51.4829;0;Bottom;Copper Fill2
|
|
||||||
352;;;59.7408;-51.4829;0;Bottom;Copper Fill165
|
|
||||||
353;;;77.6732;-24.6224;0;Bottom;Copper Fill103
|
|
||||||
354;;;77.5208;-51.4829;0;Bottom;Copper Fill171
|
|
||||||
355;;;61.6077;-24.1779;0;Bottom;Copper Fill85
|
|
||||||
356;;;72.4408;-51.4829;0;Bottom;Copper Fill169
|
|
||||||
357;;;71.8312;-27.8355;0;Bottom;Copper Fill228
|
|
||||||
358;;;27.5844;-21.2569;0;Bottom;Copper Fill60
|
|
||||||
359;;;74.0918;-49.6033;0;Bottom;Copper Fill178
|
|
||||||
360;180k;0805 [SMD];58.4905;-6.38318;90;Top;R7
|
|
||||||
361;180k;0805 [SMD];66.1105;-6.38318;90;Top;R12
|
|
||||||
362;;;23.7236;-3.0324;0;Bottom;Copper Fill321
|
|
||||||
363;;;44.0944;-47.9269;0;Bottom;Copper Fill10
|
|
||||||
364;;;91.8464;-14.8815;0;Bottom;Copper Fill71
|
|
||||||
365;;;48.7934;-38.3257;0;Bottom;Copper Fill201
|
|
||||||
366;;;37.5355;-4.23335;0;Bottom;Via10
|
|
||||||
367;;;49.5681;-10.2079;0;Bottom;Copper Fill315
|
|
||||||
368;;;51.8922;-27.1624;0;Bottom;Copper Fill96
|
|
||||||
369;;;67.3608;-6.4233;0;Bottom;Copper Fill270
|
|
||||||
370;;;90.551;-24.3811;0;Bottom;Copper Fill49
|
|
||||||
371;;;53.213;-11.4525;0;Bottom;Copper Fill254
|
|
||||||
372;;;49.1236;-10.6524;0;Bottom;Copper Fill128
|
|
||||||
373;;;78.7781;-11.4779;0;Bottom;Copper Fill300
|
|
||||||
374;;;25.0698;-20.9267;0;Bottom;Copper Fill59
|
|
||||||
375;;;69.85;-31.8741;0;Bottom;Copper Fill225
|
|
||||||
376;;;48.3305;-2.32835;0;Bottom;Via31
|
|
||||||
377;;;30.1244;-21.5871;0;Bottom;Copper Fill61
|
|
||||||
378;;;24.1681;-9.1665;0;Bottom;Copper Fill90
|
|
||||||
379;;;62.2681;-10.2079;0;Bottom;Copper Fill329
|
|
||||||
380;180k;0805 [SMD];53.4105;-6.38318;90;Top;R1
|
|
||||||
381;;;70.9422;-25.0415;0;Bottom;Copper Fill231
|
|
||||||
382;;;81.9855;-32.1734;0;Bottom;Via12
|
|
||||||
383;;;95.3262;-34.0839;0;Bottom;Copper Fill45
|
|
||||||
384;;;95.3008;-51.4829;0;Bottom;Copper Fill25
|
|
||||||
385;;;95.3262;-46.7839;0;Bottom;Copper Fill38
|
|
||||||
386;;;78.1177;-25.0669;0;Bottom;Copper Fill295
|
|
||||||
387;;;52.324;-48.0285;0;Bottom;Copper Fill32
|
|
||||||
388;;;82.7024;-25.0161;0;Bottom;Copper Fill233
|
|
||||||
389;;;46.8122;-11.9224;0;Bottom;Copper Fill313
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -653,10 +653,12 @@ page = 10
|
||||||
unused10_97 = scalar, U08, 97, "", 1, 0, 0, 255, 0
|
unused10_97 = scalar, U08, 97, "", 1, 0, 0, 255, 0
|
||||||
unused10_98 = scalar, U08, 98, "", 1, 0, 0, 255, 0
|
unused10_98 = scalar, U08, 98, "", 1, 0, 0, 255, 0
|
||||||
unused10_99 = scalar, U08, 99, "", 1, 0, 0, 255, 0
|
unused10_99 = scalar, U08, 99, "", 1, 0, 0, 255, 0
|
||||||
|
|
||||||
speeduino_tsCanId = bits, U08, 100, [0:3], $tsCanId_list
|
speeduino_tsCanId = bits, U08, 100, [0:3], $tsCanId_list
|
||||||
true_address = bits, U16, 101, [0:10], $CAN_ADDRESS_HEX
|
true_address = bits, U16, 101, [0:10], $CAN_ADDRESS_HEX
|
||||||
realtime_base_address = bits, U16, 103, [0:10], $CAN_ADDRESS_HEX
|
realtime_base_address = bits, U16, 103, [0:10], $CAN_ADDRESS_HEX
|
||||||
obd_address = bits, U16, 105, [0:10], $CAN_ADDRESS_HEX
|
obd_address = bits, U16, 105, [0:10], $CAN_ADDRESS_HEX
|
||||||
|
|
||||||
;unused10_101 = scalar, U16, 101, "", 1, 0, 0, 255, 0
|
;unused10_101 = scalar, U16, 101, "", 1, 0, 0, 255, 0
|
||||||
;unused10_103 = scalar, U16, 103, "", 1, 0, 0, 255, 0
|
;unused10_103 = scalar, U16, 103, "", 1, 0, 0, 255, 0
|
||||||
;unused10_105 = scalar, U16, 105, "", 1, 0, 0, 255, 0
|
;unused10_105 = scalar, U16, 105, "", 1, 0, 0, 255, 0
|
||||||
|
|
|
@ -4,26 +4,26 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#if defined(CORE_AVR)
|
#if defined(CORE_AVR)
|
||||||
#define READ_PRI_TRIGGER() ((*triggerPri_pin_port & triggerPri_pin_mask) ? HIGH : LOW)
|
#define READ_PRI_TRIGGER() ((*triggerPri_pin_port & triggerPri_pin_mask) ? true : false)
|
||||||
#define READ_SEC_TRIGGER() ((*triggerSec_pin_port & triggerSec_pin_mask) ? HIGH : LOW)
|
#define READ_SEC_TRIGGER() ((*triggerSec_pin_port & triggerSec_pin_mask) ? true : false)
|
||||||
#elif defined(CORE_TEENSY) || defined(CORE_STM32)
|
#elif defined(CORE_TEENSY) || defined(CORE_STM32)
|
||||||
#define READ_PRI_TRIGGER() digitalRead(pinTrigger)
|
#define READ_PRI_TRIGGER() digitalRead(pinTrigger)
|
||||||
#define READ_SEC_TRIGGER() digitalRead(pinTrigger2)
|
#define READ_SEC_TRIGGER() digitalRead(pinTrigger2)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void addToothLogEntry(unsigned long);
|
static inline void addToothLogEntry(unsigned long);
|
||||||
static inline int stdGetRPM();
|
static inline uint16_t stdGetRPM();
|
||||||
static inline void setFilter(unsigned long);
|
static inline void setFilter(unsigned long);
|
||||||
static inline int crankingGetRPM(byte);
|
static inline int crankingGetRPM(byte);
|
||||||
void triggerSetup_missingTooth();
|
void triggerSetup_missingTooth();
|
||||||
void triggerPri_missingTooth();
|
void triggerPri_missingTooth();
|
||||||
void triggerSec_missingTooth();
|
void triggerSec_missingTooth();
|
||||||
int getRPM_missingTooth();
|
uint16_t getRPM_missingTooth();
|
||||||
int getCrankAngle_missingTooth(int timePerDegree);
|
int getCrankAngle_missingTooth(int timePerDegree);
|
||||||
void triggerSetup_DualWheel();
|
void triggerSetup_DualWheel();
|
||||||
void triggerPri_DualWheel();
|
void triggerPri_DualWheel();
|
||||||
void triggerSec_DualWheel();
|
void triggerSec_DualWheel();
|
||||||
int getRPM_DualWheel();
|
uint16_t getRPM_DualWheel();
|
||||||
int getCrankAngle_DualWheel(int timePerDegree);
|
int getCrankAngle_DualWheel(int timePerDegree);
|
||||||
|
|
||||||
unsigned long MAX_STALL_TIME = 500000UL; //The maximum time (in uS) that the system will continue to function before the engine is considered stalled/stopped. This is unique to each decoder, depending on the number of teeth etc. 500000 (half a second) is used as the default value, most decoders will be much less.
|
unsigned long MAX_STALL_TIME = 500000UL; //The maximum time (in uS) that the system will continue to function before the engine is considered stalled/stopped. This is unique to each decoder, depending on the number of teeth etc. 500000 (half a second) is used as the default value, most decoders will be much less.
|
||||||
|
@ -54,7 +54,7 @@ volatile unsigned long secondaryLastToothTime1 = 0; //The time (micros()) that t
|
||||||
|
|
||||||
volatile int triggerActualTeeth;
|
volatile int triggerActualTeeth;
|
||||||
volatile unsigned long triggerFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering)
|
volatile unsigned long triggerFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering)
|
||||||
unsigned int triggerSecFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) for the secondary input
|
unsigned long triggerSecFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) for the secondary input
|
||||||
unsigned int triggerSecFilterTime_duration; // The shortest valid time (in uS) pulse DURATION
|
unsigned int triggerSecFilterTime_duration; // The shortest valid time (in uS) pulse DURATION
|
||||||
volatile int triggerToothAngle; //The number of crank degrees that elapse per tooth
|
volatile int triggerToothAngle; //The number of crank degrees that elapse per tooth
|
||||||
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)
|
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)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -17,32 +17,32 @@ byte setError(byte errorID)
|
||||||
errorCodes[errorCount] = errorID;
|
errorCodes[errorCount] = errorID;
|
||||||
errorCount++;
|
errorCount++;
|
||||||
if(errorCount == 1) { BIT_SET(currentStatus.spark, BIT_SPARK_ERROR); } //Enable the error indicator
|
if(errorCount == 1) { BIT_SET(currentStatus.spark, BIT_SPARK_ERROR); } //Enable the error indicator
|
||||||
return errorCount;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return errorCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearError(byte errorID)
|
void clearError(byte errorID)
|
||||||
{
|
{
|
||||||
byte clearedError;
|
byte clearedError = 255;
|
||||||
|
|
||||||
if (errorID == errorCodes[0]) { clearedError = 0; }
|
if (errorID == errorCodes[0]) { clearedError = 0; }
|
||||||
else if(errorID == errorCodes[1]) { clearedError = 1; }
|
else if(errorID == errorCodes[1]) { clearedError = 1; }
|
||||||
else if(errorID == errorCodes[2]) { clearedError = 2; }
|
else if(errorID == errorCodes[2]) { clearedError = 2; }
|
||||||
else if(errorID == errorCodes[3]) { clearedError = 3; }
|
else if(errorID == errorCodes[3]) { clearedError = 3; }
|
||||||
else return; //Occurs when the error we're being asked to clear is not currently one of the active errors
|
|
||||||
|
|
||||||
errorCodes[clearedError] = ERR_NONE;
|
if(clearedError < MAX_ERRORS)
|
||||||
//Clear the required error and move any from above it 'down' in the error array
|
|
||||||
for (byte x=clearedError; x < (errorCount-1); x++)
|
|
||||||
{
|
{
|
||||||
errorCodes[x] = errorCodes[x+1];
|
errorCodes[clearedError] = ERR_NONE;
|
||||||
errorCodes[x+1] = ERR_NONE;
|
//Clear the required error and move any from above it 'down' in the error array
|
||||||
|
for (byte x=clearedError; x < (errorCount-1); x++)
|
||||||
|
{
|
||||||
|
errorCodes[x] = errorCodes[x+1];
|
||||||
|
errorCodes[x+1] = ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorCount--;
|
||||||
|
if(errorCount == 0) { BIT_CLEAR(currentStatus.spark, BIT_SPARK_ERROR); } //Enable the error indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
errorCount--;
|
|
||||||
if(errorCount == 0) { BIT_CLEAR(currentStatus.spark, BIT_SPARK_ERROR); } //Enable the error indicator
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
byte getNextError()
|
byte getNextError()
|
||||||
|
|
|
@ -161,8 +161,8 @@ volatile byte triggerSec_pin_mask;
|
||||||
//The status struct contains the current values for all 'live' variables
|
//The status struct contains the current values for all 'live' variables
|
||||||
//In current version this is 64 bytes
|
//In current version this is 64 bytes
|
||||||
struct statuses {
|
struct statuses {
|
||||||
volatile boolean hasSync;
|
volatile bool hasSync;
|
||||||
unsigned int RPM;
|
uint16_t RPM;
|
||||||
long longRPM;
|
long longRPM;
|
||||||
int mapADC;
|
int mapADC;
|
||||||
long MAP; //Has to be a long for PID calcs (Boost control)
|
long MAP; //Has to be a long for PID calcs (Boost control)
|
||||||
|
|
|
@ -25,7 +25,7 @@ struct StepperIdle
|
||||||
volatile unsigned long stepStartTime; //The time the curren
|
volatile unsigned long stepStartTime; //The time the curren
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
|
#if defined(CORE_AVR)
|
||||||
#define IDLE_COUNTER TCNT4
|
#define IDLE_COUNTER TCNT4
|
||||||
#define IDLE_COMPARE OCR4C
|
#define IDLE_COMPARE OCR4C
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,12 @@ void initialiseIdle()
|
||||||
{
|
{
|
||||||
//By default, turn off the PWM interrupt (It gets turned on below if needed)
|
//By default, turn off the PWM interrupt (It gets turned on below if needed)
|
||||||
IDLE_TIMER_DISABLE();
|
IDLE_TIMER_DISABLE();
|
||||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||||
//No timer work required for AVRs. Timer is shared with the schedules and setup in there.
|
//No timer work required for AVRs. Timer is shared with the schedules and setup in there.
|
||||||
|
|
||||||
#elif defined (CORE_TEENSY)
|
#elif defined (CORE_TEENSY)
|
||||||
|
|
||||||
if(configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL || configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL)
|
if( (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL) || (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL) )
|
||||||
{
|
{
|
||||||
//FlexTimer 2 is used for idle
|
//FlexTimer 2 is used for idle
|
||||||
FTM2_MODE |= FTM_MODE_WPDIS; // Write Protection Disable
|
FTM2_MODE |= FTM_MODE_WPDIS; // Write Protection Disable
|
||||||
|
@ -154,7 +154,6 @@ void initialiseIdle()
|
||||||
iacCrankStepsTable.axisX = configPage4.iacCrankBins;
|
iacCrankStepsTable.axisX = configPage4.iacCrankBins;
|
||||||
iacStepTime = configPage4.iacStepTime * 1000;
|
iacStepTime = configPage4.iacStepTime * 1000;
|
||||||
|
|
||||||
//homeStepper(); //Returns the stepper to the 'home' position
|
|
||||||
completedHomeSteps = 0;
|
completedHomeSteps = 0;
|
||||||
idleStepper.curIdleStep = 0;
|
idleStepper.curIdleStep = 0;
|
||||||
idleStepper.stepperStatus = SOFF;
|
idleStepper.stepperStatus = SOFF;
|
||||||
|
@ -181,6 +180,10 @@ void initialiseIdle()
|
||||||
idlePID.SetTunings(configPage3.idleKP, configPage3.idleKI, configPage3.idleKD);
|
idlePID.SetTunings(configPage3.idleKP, configPage3.idleKI, configPage3.idleKD);
|
||||||
idlePID.SetMode(AUTOMATIC); //Turn PID on
|
idlePID.SetMode(AUTOMATIC); //Turn PID on
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
//Well this just shouldn't happen
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
idleInitComplete = configPage4.iacAlgorithm; //Sets which idle method was initialised
|
idleInitComplete = configPage4.iacAlgorithm; //Sets which idle method was initialised
|
||||||
currentStatus.idleLoad = 0;
|
currentStatus.idleLoad = 0;
|
||||||
|
@ -242,48 +245,53 @@ void idleControl()
|
||||||
|
|
||||||
case IAC_ALGORITHM_STEP_OL: //Case 4 is open loop stepper control
|
case IAC_ALGORITHM_STEP_OL: //Case 4 is open loop stepper control
|
||||||
//First thing to check is whether there is currently a step going on and if so, whether it needs to be turned off
|
//First thing to check is whether there is currently a step going on and if so, whether it needs to be turned off
|
||||||
if( checkForStepping() ) { return; } //If this is true it means there's either a step taking place or
|
if( isStepperHomed() && !checkForStepping() ) //Check that homing is complete and that there's not currently a step already taking place
|
||||||
if( !isStepperHomed() ) { return; } //Check whether homing is completed yet.
|
|
||||||
|
|
||||||
//Check for cranking pulsewidth
|
|
||||||
if( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
|
||||||
{
|
{
|
||||||
//Currently cranking. Use the cranking table
|
//Check for cranking pulsewidth
|
||||||
idleStepper.targetIdleStep = table2D_getValue(&iacCrankStepsTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here
|
if( BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
||||||
doStep();
|
|
||||||
}
|
|
||||||
else if( (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET) < iacStepTable.axisX[IDLE_TABLE_SIZE-1])
|
|
||||||
{
|
|
||||||
//Standard running
|
|
||||||
if ((mainLoopCount & 255) == 1)
|
|
||||||
{
|
{
|
||||||
//Only do a lookup of the required value around 4 times per second. Any more than this can create too much jitter and require a hyster value that is too high
|
//Currently cranking. Use the cranking table
|
||||||
idleStepper.targetIdleStep = table2D_getValue(&iacStepTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here
|
idleStepper.targetIdleStep = table2D_getValue(&iacCrankStepsTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here
|
||||||
iacStepTime = configPage4.iacStepTime * 1000;
|
doStep();
|
||||||
}
|
}
|
||||||
doStep();
|
else if( (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET) < iacStepTable.axisX[IDLE_TABLE_SIZE-1])
|
||||||
|
{
|
||||||
|
//Standard running
|
||||||
|
if ((mainLoopCount & 255) == 1)
|
||||||
|
{
|
||||||
|
//Only do a lookup of the required value around 4 times per second. Any more than this can create too much jitter and require a hyster value that is too high
|
||||||
|
idleStepper.targetIdleStep = table2D_getValue(&iacStepTable, (currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET)) * 3; //All temps are offset by 40 degrees. Step counts are divided by 3 in TS. Multiply back out here
|
||||||
|
iacStepTime = configPage4.iacStepTime * 1000;
|
||||||
|
}
|
||||||
|
doStep();
|
||||||
|
}
|
||||||
|
currentStatus.idleLoad = idleStepper.curIdleStep >> 1; //Current step count (Divided by 2 for byte)
|
||||||
}
|
}
|
||||||
currentStatus.idleLoad = idleStepper.curIdleStep >> 1; //Current step count (Divided by 2 for byte)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IAC_ALGORITHM_STEP_CL://Case 5 is closed loop stepper control
|
case IAC_ALGORITHM_STEP_CL://Case 5 is closed loop stepper control
|
||||||
//First thing to check is whether there is currently a step going on and if so, whether it needs to be turned off
|
//First thing to check is whether there is currently a step going on and if so, whether it needs to be turned off
|
||||||
if( checkForStepping() ) { return; } //If this is true it means there's either a step taking place or
|
if( isStepperHomed() && !checkForStepping() ) //Check that homing is complete and that there's not currently a step already taking place
|
||||||
if( !isStepperHomed() ) { return; } //Check whether homing is completed yet.
|
|
||||||
if( (idleCounter & 31) == 1)
|
|
||||||
{
|
{
|
||||||
//This only needs to be run very infrequently, once every 32 calls to idleControl(). This is approx. once per second
|
if( (idleCounter & 31) == 1)
|
||||||
idlePID.SetTunings(configPage3.idleKP, configPage3.idleKI, configPage3.idleKD);
|
{
|
||||||
iacStepTime = configPage4.iacStepTime * 1000;
|
//This only needs to be run very infrequently, once every 32 calls to idleControl(). This is approx. once per second
|
||||||
|
idlePID.SetTunings(configPage3.idleKP, configPage3.idleKI, configPage3.idleKD);
|
||||||
|
iacStepTime = configPage4.iacStepTime * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
idle_cl_target_rpm = table2D_getValue(&iacClosedLoopTable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET) * 10; //All temps are offset by 40 degrees
|
||||||
|
idlePID.Compute();
|
||||||
|
idleStepper.targetIdleStep = idle_pid_target_value;
|
||||||
|
|
||||||
|
doStep();
|
||||||
|
currentStatus.idleLoad = idleStepper.curIdleStep >> 1; //Current step count (Divided by 2 for byte)
|
||||||
|
idleCounter++;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
idle_cl_target_rpm = table2D_getValue(&iacClosedLoopTable, currentStatus.coolant + CALIBRATION_TEMPERATURE_OFFSET) * 10; //All temps are offset by 40 degrees
|
default:
|
||||||
idlePID.Compute();
|
//There really should be a valid idle type
|
||||||
idleStepper.targetIdleStep = idle_pid_target_value;
|
|
||||||
|
|
||||||
doStep();
|
|
||||||
currentStatus.idleLoad = idleStepper.curIdleStep >> 1; //Current step count (Divided by 2 for byte)
|
|
||||||
idleCounter++;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -296,6 +304,7 @@ False: If the motor has not yet been homed. Will also perform another homing ste
|
||||||
*/
|
*/
|
||||||
static inline byte isStepperHomed()
|
static inline byte isStepperHomed()
|
||||||
{
|
{
|
||||||
|
bool isHomed = true; //As it's the most common scenario, default value is true
|
||||||
if( completedHomeSteps < (configPage4.iacStepHome * 3) ) //Home steps are divided by 3 from TS
|
if( completedHomeSteps < (configPage4.iacStepHome * 3) ) //Home steps are divided by 3 from TS
|
||||||
{
|
{
|
||||||
digitalWrite(pinStepperDir, STEPPER_BACKWARD); //Sets stepper direction to backwards
|
digitalWrite(pinStepperDir, STEPPER_BACKWARD); //Sets stepper direction to backwards
|
||||||
|
@ -304,9 +313,9 @@ static inline byte isStepperHomed()
|
||||||
idleStepper.stepperStatus = STEPPING;
|
idleStepper.stepperStatus = STEPPING;
|
||||||
completedHomeSteps++;
|
completedHomeSteps++;
|
||||||
idleOn = true;
|
idleOn = true;
|
||||||
return false;
|
isHomed = false;
|
||||||
}
|
}
|
||||||
return true;
|
return isHomed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -317,7 +326,8 @@ False: If the motor is ready for another step
|
||||||
*/
|
*/
|
||||||
static inline byte checkForStepping()
|
static inline byte checkForStepping()
|
||||||
{
|
{
|
||||||
if(idleStepper.stepperStatus == STEPPING || idleStepper.stepperStatus == COOLING)
|
bool isStepping = false;
|
||||||
|
if( (idleStepper.stepperStatus == STEPPING) || (idleStepper.stepperStatus == COOLING) )
|
||||||
{
|
{
|
||||||
if(micros() > (idleStepper.stepStartTime + iacStepTime) )
|
if(micros() > (idleStepper.stepStartTime + iacStepTime) )
|
||||||
{
|
{
|
||||||
|
@ -327,7 +337,7 @@ static inline byte checkForStepping()
|
||||||
digitalWrite(pinStepperStep, LOW); //Turn off the step
|
digitalWrite(pinStepperStep, LOW); //Turn off the step
|
||||||
idleStepper.stepStartTime = micros();
|
idleStepper.stepStartTime = micros();
|
||||||
idleStepper.stepperStatus = COOLING; //'Cooling' is the time the stepper needs to sit in LOW state before the next step can be made
|
idleStepper.stepperStatus = COOLING; //'Cooling' is the time the stepper needs to sit in LOW state before the next step can be made
|
||||||
return true;
|
isStepping = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -339,10 +349,10 @@ static inline byte checkForStepping()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Means we're in a step, but it doesn't need to turn off yet. No further action at this time
|
//Means we're in a step, but it doesn't need to turn off yet. No further action at this time
|
||||||
return true;
|
isStepping = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return isStepping;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -350,36 +360,31 @@ Performs a step
|
||||||
*/
|
*/
|
||||||
static inline void doStep()
|
static inline void doStep()
|
||||||
{
|
{
|
||||||
if ( idleStepper.targetIdleStep > (idleStepper.curIdleStep - configPage4.iacStepHyster) && idleStepper.targetIdleStep < (idleStepper.curIdleStep + configPage4.iacStepHyster) ) { return; } //Hysteris check
|
if ( (idleStepper.targetIdleStep <= (idleStepper.curIdleStep - configPage4.iacStepHyster)) || (idleStepper.targetIdleStep >= (idleStepper.curIdleStep + configPage4.iacStepHyster)) ) //Hysteris check
|
||||||
else if(idleStepper.targetIdleStep < idleStepper.curIdleStep) { digitalWrite(pinStepperDir, STEPPER_BACKWARD); idleStepper.curIdleStep--; }//Sets stepper direction to backwards
|
{
|
||||||
else if (idleStepper.targetIdleStep > idleStepper.curIdleStep) { digitalWrite(pinStepperDir, STEPPER_FORWARD); idleStepper.curIdleStep++; }//Sets stepper direction to forwards
|
if(idleStepper.targetIdleStep < idleStepper.curIdleStep) { digitalWrite(pinStepperDir, STEPPER_BACKWARD); idleStepper.curIdleStep--; }//Sets stepper direction to backwards
|
||||||
|
else if (idleStepper.targetIdleStep > idleStepper.curIdleStep) { digitalWrite(pinStepperDir, STEPPER_FORWARD); idleStepper.curIdleStep++; }//Sets stepper direction to forwards
|
||||||
|
|
||||||
digitalWrite(pinStepperEnable, LOW); //Enable the DRV8825
|
digitalWrite(pinStepperEnable, LOW); //Enable the DRV8825
|
||||||
digitalWrite(pinStepperStep, HIGH);
|
digitalWrite(pinStepperStep, HIGH);
|
||||||
idleStepper.stepStartTime = micros();
|
idleStepper.stepStartTime = micros();
|
||||||
idleStepper.stepperStatus = STEPPING;
|
idleStepper.stepperStatus = STEPPING;
|
||||||
idleOn = true;
|
idleOn = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//This function simply turns off the idle PWM and sets the pin low
|
//This function simply turns off the idle PWM and sets the pin low
|
||||||
static inline void disableIdle()
|
static inline void disableIdle()
|
||||||
{
|
{
|
||||||
if(configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL || configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL)
|
if( (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL) || (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL) )
|
||||||
{
|
{
|
||||||
IDLE_TIMER_DISABLE();
|
IDLE_TIMER_DISABLE();
|
||||||
digitalWrite(pinIdle1, LOW);
|
digitalWrite(pinIdle1, LOW);
|
||||||
}
|
}
|
||||||
else if (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_CL || configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_OL)
|
else if ( (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_CL) || (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_OL) )
|
||||||
{
|
{
|
||||||
digitalWrite(pinStepperEnable, HIGH); //Disable the DRV8825
|
digitalWrite(pinStepperEnable, HIGH); //Disable the DRV8825
|
||||||
idleStepper.targetIdleStep = idleStepper.curIdleStep; //Don't try to move anymore
|
idleStepper.targetIdleStep = idleStepper.curIdleStep; //Don't try to move anymore
|
||||||
//The below appears to be causing issues, so for now this will simply halt the stepper entirely rather than taking it back to step 1
|
|
||||||
/*
|
|
||||||
idleStepper.targetIdleStep = 1; //Home the stepper
|
|
||||||
if( checkForStepping() ) { return; } //If this is true it means there's either a step taking place or
|
|
||||||
if( !isStepperHomed() ) { return; } //Check whether homing is completed yet.
|
|
||||||
doStep();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,22 +392,22 @@ static inline void disableIdle()
|
||||||
//Typically this is enabling the PWM interrupt
|
//Typically this is enabling the PWM interrupt
|
||||||
static inline void enableIdle()
|
static inline void enableIdle()
|
||||||
{
|
{
|
||||||
if(configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL || configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL)
|
if( (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_CL) || (configPage4.iacAlgorithm == IAC_ALGORITHM_PWM_OL) )
|
||||||
{
|
{
|
||||||
IDLE_TIMER_ENABLE();
|
IDLE_TIMER_ENABLE();
|
||||||
}
|
}
|
||||||
else if (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_CL || configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_OL)
|
else if ( (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_CL) || (configPage4.iacAlgorithm == IAC_ALGORITHM_STEP_OL) )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
#if defined(CORE_AVR) //AVR chips use the ISR for this
|
||||||
ISR(TIMER4_COMPC_vect)
|
ISR(TIMER4_COMPC_vect)
|
||||||
#elif defined (CORE_TEENSY) || defined (CORE_STM32)
|
#elif defined (CORE_TEENSY) || defined (CORE_STM32)
|
||||||
static inline void idleInterrupt() //Most ARM chips can simply call a function
|
static inline void idleInterrupt() //Most ARM chips can simply call a function
|
||||||
#endif
|
#endif
|
||||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined (CORE_TEENSY)
|
#if defined(CORE_AVR) || defined (CORE_TEENSY)
|
||||||
{
|
{
|
||||||
if (idle_pwm_state)
|
if (idle_pwm_state)
|
||||||
{
|
{
|
||||||
|
@ -410,13 +415,13 @@ static inline void idleInterrupt() //Most ARM chips can simply call a function
|
||||||
{
|
{
|
||||||
//Normal direction
|
//Normal direction
|
||||||
*idle_pin_port &= ~(idle_pin_mask); // Switch pin to low (1 pin mode)
|
*idle_pin_port &= ~(idle_pin_mask); // Switch pin to low (1 pin mode)
|
||||||
if(configPage4.iacChannels) { *idle2_pin_port |= (idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
if(configPage4.iacChannels == 1) { *idle2_pin_port |= (idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Reversed direction
|
//Reversed direction
|
||||||
*idle_pin_port |= (idle_pin_mask); // Switch pin high
|
*idle_pin_port |= (idle_pin_mask); // Switch pin high
|
||||||
if(configPage4.iacChannels) { *idle2_pin_port &= ~(idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
if(configPage4.iacChannels == 1) { *idle2_pin_port &= ~(idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
||||||
}
|
}
|
||||||
IDLE_COMPARE = IDLE_COUNTER + (idle_pwm_max_count - idle_pwm_cur_value);
|
IDLE_COMPARE = IDLE_COUNTER + (idle_pwm_max_count - idle_pwm_cur_value);
|
||||||
idle_pwm_state = false;
|
idle_pwm_state = false;
|
||||||
|
@ -427,13 +432,13 @@ static inline void idleInterrupt() //Most ARM chips can simply call a function
|
||||||
{
|
{
|
||||||
//Normal direction
|
//Normal direction
|
||||||
*idle_pin_port |= (idle_pin_mask); // Switch pin high
|
*idle_pin_port |= (idle_pin_mask); // Switch pin high
|
||||||
if(configPage4.iacChannels) { *idle2_pin_port &= ~(idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
if(configPage4.iacChannels == 1) { *idle2_pin_port &= ~(idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Reversed direction
|
//Reversed direction
|
||||||
*idle_pin_port &= ~(idle_pin_mask); // Switch pin to low (1 pin mode)
|
*idle_pin_port &= ~(idle_pin_mask); // Switch pin to low (1 pin mode)
|
||||||
if(configPage4.iacChannels) { *idle2_pin_port |= (idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
if(configPage4.iacChannels == 1) { *idle2_pin_port |= (idle2_pin_mask); } //If 2 idle channels are in use, flip idle2 to be the opposite of idle1
|
||||||
}
|
}
|
||||||
IDLE_COMPARE = IDLE_COUNTER + idle_pwm_target_value;
|
IDLE_COMPARE = IDLE_COUNTER + idle_pwm_target_value;
|
||||||
idle_pwm_cur_value = idle_pwm_target_value;
|
idle_pwm_cur_value = idle_pwm_target_value;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef MATH_H
|
#ifndef MATH_H
|
||||||
#define MATH_H
|
#define MATH_H
|
||||||
|
|
||||||
int fastMap1023toX(unsigned long, int);
|
int fastMap1023toX(int, int);
|
||||||
unsigned long percentage(byte, unsigned long);
|
unsigned long percentage(byte, unsigned long);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,7 +5,12 @@
|
||||||
//Replace the standard arduino map() function to use the div function instead
|
//Replace the standard arduino map() function to use the div function instead
|
||||||
int fastMap(unsigned long x, int in_min, int in_max, int out_min, int out_max)
|
int fastMap(unsigned long x, int in_min, int in_max, int out_min, int out_max)
|
||||||
{
|
{
|
||||||
return ldiv( ((x - in_min) * (out_max - out_min)) , (in_max - in_min) ).quot + out_min;
|
unsigned long a = (x - (unsigned long)in_min);
|
||||||
|
int b = (out_max - out_min);
|
||||||
|
int c = (in_max - in_min);
|
||||||
|
int d = (ldiv( (a * (long)b) , (long)c ).quot);
|
||||||
|
return d + out_min;
|
||||||
|
//return ldiv( ((x - in_min) * (out_max - out_min)) , (in_max - in_min) ).quot + out_min;
|
||||||
//return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
//return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +18,7 @@ int fastMap(unsigned long x, int in_min, int in_max, int out_min, int out_max)
|
||||||
//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)
|
//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)
|
||||||
//int fastMap1023toX(unsigned long x, int in_min, int in_max, int out_min, int out_max)
|
//int fastMap1023toX(unsigned long x, int in_min, int in_max, int out_min, int out_max)
|
||||||
//removed ununsed variables, in_min and out_min is aways 0, in_max is aways 1023
|
//removed ununsed variables, in_min and out_min is aways 0, in_max is aways 1023
|
||||||
int fastMap1023toX(unsigned long x, int out_max)
|
int fastMap1023toX(int x, int out_max)
|
||||||
{
|
{
|
||||||
return (x * out_max) >> 10;
|
return (x * out_max) >> 10;
|
||||||
}
|
}
|
||||||
|
@ -24,57 +29,59 @@ Ref: http://www.hackersdelight.org/divcMore.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//Unsigned divide by 10
|
//Unsigned divide by 10
|
||||||
unsigned int divu10(unsigned int n) {
|
unsigned int divu10(unsigned int n)
|
||||||
unsigned long q, r;
|
{
|
||||||
q = (n >> 1) + (n >> 2);
|
unsigned long q, r;
|
||||||
q = q + (q >> 4);
|
q = (n >> 1) + (n >> 2);
|
||||||
q = q + (q >> 8);
|
q = q + (q >> 4);
|
||||||
q = q + (q >> 16);
|
q = q + (q >> 8);
|
||||||
q = q >> 3;
|
q = q + (q >> 16);
|
||||||
r = n - q*10;
|
q = q >> 3;
|
||||||
return q + ((r + 6) >> 4);
|
r = n - (q * 10);
|
||||||
// return q + (r > 9);
|
return q + ((r + 6) >> 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Signed divide by 10
|
//Signed divide by 10
|
||||||
int divs10(long n) {
|
int divs10(long n)
|
||||||
long q, r;
|
{
|
||||||
n = n + (n>>31 & 9);
|
long q, r, p;
|
||||||
q = (n >> 1) + (n >> 2);
|
p = n + ( (n>>31) & 9);
|
||||||
q = q + (q >> 4);
|
q = (p >> 1) + (p >> 2);
|
||||||
q = q + (q >> 8);
|
q = q + (q >> 4);
|
||||||
q = q + (q >> 16);
|
q = q + (q >> 8);
|
||||||
q = q >> 3;
|
q = q + (q >> 16);
|
||||||
r = n - q*10;
|
q = q >> 3;
|
||||||
return q + ((r + 6) >> 4);
|
r = p - (q * 10);
|
||||||
// return q + (r > 9);
|
return q + ((r + 6) >> 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Signed divide by 100
|
//Signed divide by 100
|
||||||
int divs100(long n) {
|
int divs100(long n)
|
||||||
|
{
|
||||||
return (n / 100); // Amazingly, gcc is producing a better /divide by 100 function than this
|
return (n / 100); // Amazingly, gcc is producing a better /divide by 100 function than this
|
||||||
long q, r;
|
/*
|
||||||
n = n + (n>>31 & 99);
|
long q, r;
|
||||||
q = (n >> 1) + (n >> 3) + (n >> 6) - (n >> 10) +
|
n = n + (n>>31 & 99);
|
||||||
(n >> 12) + (n >> 13) - (n >> 16);
|
q = (n >> 1) + (n >> 3) + (n >> 6) - (n >> 10) +
|
||||||
q = q + (q >> 20);
|
(n >> 12) + (n >> 13) - (n >> 16);
|
||||||
q = q >> 6;
|
q = q + (q >> 20);
|
||||||
r = n - q*100;
|
q = q >> 6;
|
||||||
return q + ((r + 28) >> 7);
|
r = n - q*100;
|
||||||
// return q + (r > 99);
|
return q + ((r + 28) >> 7);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
//Unsigned divide by 100
|
//Unsigned divide by 100
|
||||||
unsigned long divu100(unsigned long n) {
|
unsigned long divu100(unsigned long n)
|
||||||
//return (n / 100); // No difference with this on/off
|
{
|
||||||
unsigned long q, r;
|
//return (n / 100);
|
||||||
q = (n >> 1) + (n >> 3) + (n >> 6) - (n >> 10) +
|
unsigned long q, r;
|
||||||
(n >> 12) + (n >> 13) - (n >> 16);
|
q = (n >> 1) + (n >> 3) + (n >> 6) - (n >> 10) +
|
||||||
q = q + (q >> 20);
|
(n >> 12) + (n >> 13) - (n >> 16);
|
||||||
q = q >> 6;
|
q = q + (q >> 20);
|
||||||
r = n - q*100;
|
q = q >> 6;
|
||||||
return q + ((r + 28) >> 7);
|
r = n - (q * 100);
|
||||||
// return q + (r > 99);
|
return q + ((r + 28) >> 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return x percent of y
|
//Return x percent of y
|
||||||
|
@ -91,7 +98,7 @@ unsigned long percentage(byte x, unsigned long y)
|
||||||
inline long powint(int factor, unsigned int exponent)
|
inline long powint(int factor, unsigned int exponent)
|
||||||
{
|
{
|
||||||
long product = 1;
|
long product = 1;
|
||||||
while (exponent--)
|
unsigned int counter = exponent;
|
||||||
product *= factor;
|
while ( (counter--) > 0) { product *= factor; }
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,39 @@
|
||||||
#ifndef SCHEDULEDIO_H
|
#ifndef SCHEDULEDIO_H
|
||||||
#define SCHEDULEDIO_H
|
#define SCHEDULEDIO_H
|
||||||
|
|
||||||
inline void openInjector1();
|
|
||||||
inline void closeInjector1();
|
|
||||||
inline void beginCoil1Charge();
|
inline void beginCoil1Charge();
|
||||||
inline void endCoil1Charge();
|
inline void endCoil1Charge();
|
||||||
|
|
||||||
inline void openInjector2();
|
|
||||||
inline void closeInjector2();
|
|
||||||
inline void beginCoil2Charge();
|
inline void beginCoil2Charge();
|
||||||
inline void endCoil2Charge();
|
inline void endCoil2Charge();
|
||||||
|
|
||||||
inline void openInjector3();
|
|
||||||
inline void closeInjector3();
|
|
||||||
inline void beginCoil3Charge();
|
inline void beginCoil3Charge();
|
||||||
inline void endCoil3Charge();
|
inline void endCoil3Charge();
|
||||||
|
|
||||||
inline void openInjector4();
|
|
||||||
inline void closeInjector4();
|
|
||||||
inline void beginCoil4Charge();
|
inline void beginCoil4Charge();
|
||||||
inline void endCoil4Charge();
|
inline void endCoil4Charge();
|
||||||
|
|
||||||
inline void openInjector5();
|
|
||||||
inline void closeInjector5();
|
|
||||||
inline void beginCoil5Charge();
|
inline void beginCoil5Charge();
|
||||||
inline void endCoil5Charge();
|
inline void endCoil5Charge();
|
||||||
|
|
||||||
#endif
|
#define openInjector1() *inj1_pin_port |= (inj1_pin_mask); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ1)
|
||||||
|
#define closeInjector1() *inj1_pin_port &= ~(inj1_pin_mask); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ1)
|
||||||
|
#define openInjector2() *inj2_pin_port |= (inj2_pin_mask); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ2)
|
||||||
|
#define closeInjector2() *inj2_pin_port &= ~(inj2_pin_mask); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ2)
|
||||||
|
#define openInjector3() *inj3_pin_port |= (inj3_pin_mask); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ3)
|
||||||
|
#define closeInjector3() *inj3_pin_port &= ~(inj3_pin_mask); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ3)
|
||||||
|
#define openInjector4() *inj4_pin_port |= (inj4_pin_mask); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ4)
|
||||||
|
#define closeInjector4() *inj4_pin_port &= ~(inj4_pin_mask); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ4)
|
||||||
|
#define openInjector5() *inj5_pin_port |= (inj5_pin_mask)
|
||||||
|
#define closeInjector5() *inj5_pin_port &= ~(inj5_pin_mask)
|
||||||
|
|
||||||
|
#define openInjector1and4() openInjector1(); openInjector4()
|
||||||
|
#define closeInjector1and4() closeInjector1(); closeInjector4()
|
||||||
|
#define openInjector2and3() openInjector2(); openInjector2()
|
||||||
|
#define closeInjector2and3() closeInjector2(); closeInjector2()
|
||||||
|
|
||||||
|
//5 cylinder support doubles up injector 3 as being closese to inj 5 (Crank angle)
|
||||||
|
#define openInjector3and5() openInjector3(); openInjector5()
|
||||||
|
#define closeInjector3and5() closeInjector3(); closeInjector5()
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -37,43 +37,23 @@ volatile bool tachoAlt = true;
|
||||||
#define TACH_PULSE_HIGH() *tach_pin_port |= (tach_pin_mask)
|
#define TACH_PULSE_HIGH() *tach_pin_port |= (tach_pin_mask)
|
||||||
#define TACH_PULSE_LOW() if( (configPage1.tachoDiv == 0) || tachoAlt ) *tach_pin_port &= ~(tach_pin_mask); tachoAlt = !tachoAlt
|
#define TACH_PULSE_LOW() if( (configPage1.tachoDiv == 0) || tachoAlt ) *tach_pin_port &= ~(tach_pin_mask); tachoAlt = !tachoAlt
|
||||||
|
|
||||||
inline void openInjector1() { digitalWrite(pinInjector1, HIGH); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ1); }
|
|
||||||
inline void closeInjector1() { digitalWrite(pinInjector1, LOW); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ1); }
|
|
||||||
inline void beginCoil1Charge() { digitalWrite(pinCoil1, coilHIGH); TACH_PULSE_LOW(); }
|
inline void beginCoil1Charge() { digitalWrite(pinCoil1, coilHIGH); TACH_PULSE_LOW(); }
|
||||||
inline void endCoil1Charge() { digitalWrite(pinCoil1, coilLOW); TACH_PULSE_HIGH(); }
|
inline void endCoil1Charge() { digitalWrite(pinCoil1, coilLOW); TACH_PULSE_HIGH(); }
|
||||||
|
|
||||||
inline void openInjector2() { digitalWrite(pinInjector2, HIGH); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ2); } //Sets the relevant pin HIGH and changes the current status bit for injector 2 (2nd bit of currentStatus.squirt)
|
|
||||||
inline void closeInjector2() { digitalWrite(pinInjector2, LOW); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ2); }
|
|
||||||
inline void beginCoil2Charge() { digitalWrite(pinCoil2, coilHIGH); TACH_PULSE_LOW(); }
|
inline void beginCoil2Charge() { digitalWrite(pinCoil2, coilHIGH); TACH_PULSE_LOW(); }
|
||||||
inline void endCoil2Charge() { digitalWrite(pinCoil2, coilLOW); TACH_PULSE_HIGH(); }
|
inline void endCoil2Charge() { digitalWrite(pinCoil2, coilLOW); TACH_PULSE_HIGH(); }
|
||||||
|
|
||||||
inline void openInjector3() { digitalWrite(pinInjector3, HIGH); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ3); } //Sets the relevant pin HIGH and changes the current status bit for injector 3 (3rd bit of currentStatus.squirt)
|
|
||||||
inline void closeInjector3() { digitalWrite(pinInjector3, LOW); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ3); }
|
|
||||||
inline void beginCoil3Charge() { digitalWrite(pinCoil3, coilHIGH); TACH_PULSE_LOW(); }
|
inline void beginCoil3Charge() { digitalWrite(pinCoil3, coilHIGH); TACH_PULSE_LOW(); }
|
||||||
inline void endCoil3Charge() { digitalWrite(pinCoil3, coilLOW); TACH_PULSE_HIGH(); }
|
inline void endCoil3Charge() { digitalWrite(pinCoil3, coilLOW); TACH_PULSE_HIGH(); }
|
||||||
|
|
||||||
inline void openInjector4() { digitalWrite(pinInjector4, HIGH); BIT_SET(currentStatus.squirt, BIT_SQUIRT_INJ4); } //Sets the relevant pin HIGH and changes the current status bit for injector 4 (4th bit of currentStatus.squirt)
|
|
||||||
inline void closeInjector4() { digitalWrite(pinInjector4, LOW); BIT_CLEAR(currentStatus.squirt, BIT_SQUIRT_INJ4); }
|
|
||||||
inline void beginCoil4Charge() { digitalWrite(pinCoil4, coilHIGH); TACH_PULSE_LOW(); }
|
inline void beginCoil4Charge() { digitalWrite(pinCoil4, coilHIGH); TACH_PULSE_LOW(); }
|
||||||
inline void endCoil4Charge() { digitalWrite(pinCoil4, coilLOW); TACH_PULSE_HIGH(); }
|
inline void endCoil4Charge() { digitalWrite(pinCoil4, coilLOW); TACH_PULSE_HIGH(); }
|
||||||
|
|
||||||
inline void openInjector5() { digitalWrite(pinInjector5, HIGH); }
|
|
||||||
inline void closeInjector5() { digitalWrite(pinInjector5, LOW); }
|
|
||||||
inline void beginCoil5Charge() { digitalWrite(pinCoil5, coilHIGH); TACH_PULSE_LOW(); }
|
inline void beginCoil5Charge() { digitalWrite(pinCoil5, coilHIGH); TACH_PULSE_LOW(); }
|
||||||
inline void endCoil5Charge() { digitalWrite(pinCoil5, coilLOW); TACH_PULSE_HIGH(); }
|
inline void endCoil5Charge() { digitalWrite(pinCoil5, coilLOW); TACH_PULSE_HIGH(); }
|
||||||
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
|
|
||||||
//Combination functions for semi-sequential injection
|
|
||||||
void openInjector1and4() { digitalWrite(pinInjector1, HIGH); digitalWrite(pinInjector4, HIGH); BIT_SET(currentStatus.squirt, 0); }
|
|
||||||
void closeInjector1and4() { digitalWrite(pinInjector1, LOW); digitalWrite(pinInjector4, LOW);BIT_CLEAR(currentStatus.squirt, 0); }
|
|
||||||
void openInjector2and3() { digitalWrite(pinInjector2, HIGH); digitalWrite(pinInjector3, HIGH); BIT_SET(currentStatus.squirt, 1); }
|
|
||||||
void closeInjector2and3() { digitalWrite(pinInjector2, LOW); digitalWrite(pinInjector3, LOW); BIT_CLEAR(currentStatus.squirt, 1); }
|
|
||||||
//Below functions are used for 5 cylinder support
|
|
||||||
void openInjector3and5() { digitalWrite(pinInjector3, HIGH); digitalWrite(pinInjector5, HIGH); BIT_SET(currentStatus.squirt, 0); }
|
|
||||||
void closeInjector3and5() { digitalWrite(pinInjector3, LOW); digitalWrite(pinInjector5, LOW);BIT_CLEAR(currentStatus.squirt, 0); }
|
|
||||||
|
|
||||||
//As above but for ignition (Wasted COP mode)
|
//As above but for ignition (Wasted COP mode)
|
||||||
void beginCoil1and3Charge() { digitalWrite(pinCoil1, coilHIGH); digitalWrite(pinCoil3, coilHIGH); digitalWrite(pinTachOut, LOW); }
|
void beginCoil1and3Charge() { digitalWrite(pinCoil1, coilHIGH); digitalWrite(pinCoil3, coilHIGH); digitalWrite(pinTachOut, LOW); }
|
||||||
void endCoil1and3Charge() { digitalWrite(pinCoil1, coilLOW); digitalWrite(pinCoil3, coilLOW); }
|
void endCoil1and3Charge() { digitalWrite(pinCoil1, coilLOW); digitalWrite(pinCoil3, coilLOW); }
|
||||||
|
@ -81,4 +61,3 @@ void beginCoil2and4Charge() { digitalWrite(pinCoil2, coilHIGH); digitalWrite(pin
|
||||||
void endCoil2and4Charge() { digitalWrite(pinCoil2, coilLOW); digitalWrite(pinCoil4, coilLOW); }
|
void endCoil2and4Charge() { digitalWrite(pinCoil2, coilLOW); digitalWrite(pinCoil4, coilLOW); }
|
||||||
|
|
||||||
void nullCallback() { return; }
|
void nullCallback() { return; }
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
||||||
#define SCHEDULER_H
|
#define SCHEDULER_H
|
||||||
|
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
|
#if defined(CORE_AVR)
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
|
|
@ -224,12 +224,13 @@ timeout: The number of uS in the future that the startCallback should be trigger
|
||||||
duration: The number of uS after startCallback is called before endCallback is called
|
duration: The number of uS after startCallback is called before endCallback is called
|
||||||
endCallback: This function is called once the duration time has been reached
|
endCallback: This function is called once the duration time has been reached
|
||||||
*/
|
*/
|
||||||
void setFuelSchedule1(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
//void setFuelSchedule1(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||||
|
void setFuelSchedule1(unsigned long timeout, unsigned long duration)
|
||||||
{
|
{
|
||||||
if(fuelSchedule1.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
if(fuelSchedule1.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
||||||
|
|
||||||
fuelSchedule1.StartCallback = startCallback; //Name the start callback function
|
//fuelSchedule1.StartCallback = startCallback; //Name the start callback function
|
||||||
fuelSchedule1.EndCallback = endCallback; //Name the end callback function
|
//fuelSchedule1.EndCallback = endCallback; //Name the end callback function
|
||||||
fuelSchedule1.duration = duration;
|
fuelSchedule1.duration = duration;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -249,12 +250,12 @@ void setFuelSchedule1(void (*startCallback)(), unsigned long timeout, unsigned l
|
||||||
interrupts();
|
interrupts();
|
||||||
FUEL1_TIMER_ENABLE();
|
FUEL1_TIMER_ENABLE();
|
||||||
}
|
}
|
||||||
void setFuelSchedule2(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
void setFuelSchedule2(unsigned long timeout, unsigned long duration)
|
||||||
{
|
{
|
||||||
if(fuelSchedule2.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
if(fuelSchedule2.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
||||||
|
|
||||||
fuelSchedule2.StartCallback = startCallback; //Name the start callback function
|
//fuelSchedule2.StartCallback = startCallback; //Name the start callback function
|
||||||
fuelSchedule2.EndCallback = endCallback; //Name the end callback function
|
//fuelSchedule2.EndCallback = endCallback; //Name the end callback function
|
||||||
fuelSchedule2.duration = duration;
|
fuelSchedule2.duration = duration;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -272,12 +273,13 @@ void setFuelSchedule2(void (*startCallback)(), unsigned long timeout, unsigned l
|
||||||
interrupts();
|
interrupts();
|
||||||
FUEL2_TIMER_ENABLE();
|
FUEL2_TIMER_ENABLE();
|
||||||
}
|
}
|
||||||
void setFuelSchedule3(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
//void setFuelSchedule3(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)())
|
||||||
|
void setFuelSchedule3(unsigned long timeout, unsigned long duration)
|
||||||
{
|
{
|
||||||
if(fuelSchedule3.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
if(fuelSchedule3.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
||||||
|
|
||||||
fuelSchedule3.StartCallback = startCallback; //Name the start callback function
|
//fuelSchedule3.StartCallback = startCallback; //Name the start callback function
|
||||||
fuelSchedule3.EndCallback = endCallback; //Name the end callback function
|
//fuelSchedule3.EndCallback = endCallback; //Name the end callback function
|
||||||
fuelSchedule3.duration = duration;
|
fuelSchedule3.duration = duration;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -295,12 +297,13 @@ void setFuelSchedule3(void (*startCallback)(), unsigned long timeout, unsigned l
|
||||||
interrupts();
|
interrupts();
|
||||||
FUEL3_TIMER_ENABLE();
|
FUEL3_TIMER_ENABLE();
|
||||||
}
|
}
|
||||||
void setFuelSchedule4(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)()) //Uses timer 4 compare B
|
//void setFuelSchedule4(void (*startCallback)(), unsigned long timeout, unsigned long duration, void(*endCallback)()) //Uses timer 4 compare B
|
||||||
|
void setFuelSchedule4(unsigned long timeout, unsigned long duration) //Uses timer 4 compare B
|
||||||
{
|
{
|
||||||
if(fuelSchedule4.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
if(fuelSchedule4.Status == RUNNING) { return; } //Check that we're not already part way through a schedule
|
||||||
|
|
||||||
fuelSchedule4.StartCallback = startCallback; //Name the start callback function
|
//fuelSchedule4.StartCallback = startCallback; //Name the start callback function
|
||||||
fuelSchedule4.EndCallback = endCallback; //Name the end callback function
|
//fuelSchedule4.EndCallback = endCallback; //Name the end callback function
|
||||||
fuelSchedule4.duration = duration;
|
fuelSchedule4.duration = duration;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -463,13 +466,17 @@ static inline void fuelSchedule1Interrupt() //Most ARM chips can simply call a f
|
||||||
if (timer3Aqueue[0]->Status == OFF) { FUEL1_TIMER_DISABLE(); return; } //Safety check. Turn off this output compare unit and return without performing any action
|
if (timer3Aqueue[0]->Status == OFF) { FUEL1_TIMER_DISABLE(); return; } //Safety check. Turn off this output compare unit and return without performing any action
|
||||||
if (timer3Aqueue[0]->Status == PENDING) //Check to see if this schedule is turn on
|
if (timer3Aqueue[0]->Status == PENDING) //Check to see if this schedule is turn on
|
||||||
{
|
{
|
||||||
timer3Aqueue[0]->StartCallback();
|
//timer3Aqueue[0]->StartCallback();
|
||||||
|
if (configPage1.injLayout == INJ_SEMISEQUENTIAL) { openInjector1and4(); }
|
||||||
|
else { openInjector1(); }
|
||||||
timer3Aqueue[0]->Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
timer3Aqueue[0]->Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||||
FUEL1_COMPARE = popQueue(timer3Aqueue);
|
FUEL1_COMPARE = popQueue(timer3Aqueue);
|
||||||
}
|
}
|
||||||
else if (timer3Aqueue[0]->Status == RUNNING)
|
else if (timer3Aqueue[0]->Status == RUNNING)
|
||||||
{
|
{
|
||||||
timer3Aqueue[0]->EndCallback();
|
//timer3Aqueue[0]->EndCallback();
|
||||||
|
if (configPage1.injLayout == INJ_SEMISEQUENTIAL) { closeInjector1and4(); }
|
||||||
|
else { closeInjector1(); }
|
||||||
timer3Aqueue[0]->Status = OFF; //Turn off the schedule
|
timer3Aqueue[0]->Status = OFF; //Turn off the schedule
|
||||||
timer3Aqueue[0]->schedulesSet = 0;
|
timer3Aqueue[0]->schedulesSet = 0;
|
||||||
FUEL1_COMPARE = popQueue(timer3Aqueue);
|
FUEL1_COMPARE = popQueue(timer3Aqueue);
|
||||||
|
@ -484,13 +491,17 @@ static inline void fuelSchedule2Interrupt() //Most ARM chips can simply call a f
|
||||||
{
|
{
|
||||||
if (fuelSchedule2.Status == PENDING) //Check to see if this schedule is turn on
|
if (fuelSchedule2.Status == PENDING) //Check to see if this schedule is turn on
|
||||||
{
|
{
|
||||||
fuelSchedule2.StartCallback();
|
//fuelSchedule2.StartCallback();
|
||||||
|
if (configPage1.injLayout == INJ_SEMISEQUENTIAL) { openInjector2and3(); }
|
||||||
|
else { openInjector2(); }
|
||||||
fuelSchedule2.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
fuelSchedule2.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||||
FUEL2_COMPARE = fuelSchedule2.endCompare;
|
FUEL2_COMPARE = fuelSchedule2.endCompare;
|
||||||
}
|
}
|
||||||
else if (fuelSchedule2.Status == RUNNING)
|
else if (fuelSchedule2.Status == RUNNING)
|
||||||
{
|
{
|
||||||
fuelSchedule2.EndCallback();
|
//fuelSchedule2.EndCallback();
|
||||||
|
if (configPage1.injLayout == INJ_SEMISEQUENTIAL) { closeInjector2and3(); }
|
||||||
|
else { closeInjector2(); }
|
||||||
fuelSchedule2.Status = OFF; //Turn off the schedule
|
fuelSchedule2.Status = OFF; //Turn off the schedule
|
||||||
fuelSchedule2.schedulesSet = 0;
|
fuelSchedule2.schedulesSet = 0;
|
||||||
FUEL2_TIMER_DISABLE();
|
FUEL2_TIMER_DISABLE();
|
||||||
|
@ -505,13 +516,19 @@ static inline void fuelSchedule3Interrupt() //Most ARM chips can simply call a f
|
||||||
{
|
{
|
||||||
if (fuelSchedule3.Status == PENDING) //Check to see if this schedule is turn on
|
if (fuelSchedule3.Status == PENDING) //Check to see if this schedule is turn on
|
||||||
{
|
{
|
||||||
fuelSchedule3.StartCallback();
|
//fuelSchedule3.StartCallback();
|
||||||
|
//Hack for 5 cylinder
|
||||||
|
if(channel5InjEnabled) { openInjector3and5(); }
|
||||||
|
else { openInjector3(); }
|
||||||
fuelSchedule3.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
fuelSchedule3.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||||
FUEL3_COMPARE = fuelSchedule3.endCompare;
|
FUEL3_COMPARE = fuelSchedule3.endCompare;
|
||||||
}
|
}
|
||||||
else if (fuelSchedule3.Status == RUNNING)
|
else if (fuelSchedule3.Status == RUNNING)
|
||||||
{
|
{
|
||||||
fuelSchedule3.EndCallback();
|
//fuelSchedule3.EndCallback();
|
||||||
|
//Hack for 5 cylinder
|
||||||
|
if(channel5InjEnabled) { closeInjector3and5(); }
|
||||||
|
else { closeInjector3and5(); }
|
||||||
fuelSchedule3.Status = OFF; //Turn off the schedule
|
fuelSchedule3.Status = OFF; //Turn off the schedule
|
||||||
fuelSchedule3.schedulesSet = 0;
|
fuelSchedule3.schedulesSet = 0;
|
||||||
FUEL3_TIMER_DISABLE();
|
FUEL3_TIMER_DISABLE();
|
||||||
|
@ -526,13 +543,15 @@ static inline void fuelSchedule4Interrupt() //Most ARM chips can simply call a f
|
||||||
{
|
{
|
||||||
if (fuelSchedule4.Status == PENDING) //Check to see if this schedule is turn on
|
if (fuelSchedule4.Status == PENDING) //Check to see if this schedule is turn on
|
||||||
{
|
{
|
||||||
fuelSchedule4.StartCallback();
|
//fuelSchedule4.StartCallback();
|
||||||
|
openInjector4();
|
||||||
fuelSchedule4.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
fuelSchedule4.Status = RUNNING; //Set the status to be in progress (ie The start callback has been called, but not the end callback)
|
||||||
FUEL4_COMPARE = fuelSchedule4.endCompare;
|
FUEL4_COMPARE = fuelSchedule4.endCompare;
|
||||||
}
|
}
|
||||||
else if (fuelSchedule4.Status == RUNNING)
|
else if (fuelSchedule4.Status == RUNNING)
|
||||||
{
|
{
|
||||||
fuelSchedule4.EndCallback();
|
//fuelSchedule4.EndCallback();
|
||||||
|
closeInjector4();
|
||||||
fuelSchedule4.Status = OFF; //Turn off the schedule
|
fuelSchedule4.Status = OFF; //Turn off the schedule
|
||||||
fuelSchedule4.schedulesSet = 0;
|
fuelSchedule4.schedulesSet = 0;
|
||||||
FUEL4_TIMER_DISABLE();
|
FUEL4_TIMER_DISABLE();
|
||||||
|
|
|
@ -68,7 +68,7 @@ bool fuelPumpOn = false; //The current status of the fuel pump
|
||||||
|
|
||||||
void (*trigger)(); //Pointer for the trigger function (Gets pointed to the relevant decoder)
|
void (*trigger)(); //Pointer for the trigger function (Gets pointed to the relevant decoder)
|
||||||
void (*triggerSecondary)(); //Pointer for the secondary trigger function (Gets pointed to the relevant decoder)
|
void (*triggerSecondary)(); //Pointer for the secondary trigger function (Gets pointed to the relevant decoder)
|
||||||
int (*getRPM)(); //Pointer to the getRPM function (Gets pointed to the relevant decoder)
|
uint16_t (*getRPM)(); //Pointer to the getRPM function (Gets pointed to the relevant decoder)
|
||||||
int (*getCrankAngle)(int); //Pointer to the getCrank Angle function (Gets pointed to the relevant decoder)
|
int (*getCrankAngle)(int); //Pointer to the getCrank Angle function (Gets pointed to the relevant decoder)
|
||||||
|
|
||||||
byte cltCalibrationTable[CALIBRATION_TABLE_SIZE];
|
byte cltCalibrationTable[CALIBRATION_TABLE_SIZE];
|
||||||
|
@ -164,14 +164,16 @@ void setup()
|
||||||
{
|
{
|
||||||
//enable local can interface
|
//enable local can interface
|
||||||
}
|
}
|
||||||
#elif defined(CORE_TEESNY)
|
#elif defined(CORE_TEENSY)
|
||||||
if (configPage10.enable_canbus == 1) { Serial2.begin(115200); }
|
if (configPage10.enable_canbus == 1) { Serial2.begin(115200); }
|
||||||
else if (configPage10.enable_canbus == 2)
|
else if (configPage10.enable_canbus == 2)
|
||||||
{
|
{
|
||||||
|
//Teensy onboard CAN not used currently
|
||||||
//enable local can interface
|
//enable local can interface
|
||||||
FlexCAN CANbus0(2500000, 0); //setup can interface to 250k
|
//setup can interface to 250k
|
||||||
static CAN_message_t txmsg,rxmsg;
|
//FlexCAN CANbus0(2500000, 0);
|
||||||
CANbus0.begin();
|
//static CAN_message_t txmsg,rxmsg;
|
||||||
|
//CANbus0.begin();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -710,7 +712,7 @@ void setup()
|
||||||
channel1IgnDegrees = channel1InjDegrees = 0;
|
channel1IgnDegrees = channel1InjDegrees = 0;
|
||||||
channel2IgnDegrees = channel2InjDegrees = 90;
|
channel2IgnDegrees = channel2InjDegrees = 90;
|
||||||
channel3IgnDegrees = channel3InjDegrees = 180;
|
channel3IgnDegrees = channel3InjDegrees = 180;
|
||||||
channel4IgnDegrees = channel3InjDegrees = 270;
|
channel4IgnDegrees = channel4InjDegrees = 270;
|
||||||
|
|
||||||
//For alternatiing injection, the squirt occurs at different times for each channel
|
//For alternatiing injection, the squirt occurs at different times for each channel
|
||||||
/*
|
/*
|
||||||
|
@ -830,8 +832,10 @@ void setup()
|
||||||
digitalWrite(pinFuelPump, HIGH);
|
digitalWrite(pinFuelPump, HIGH);
|
||||||
fuelPumpOn = true;
|
fuelPumpOn = true;
|
||||||
//Perform the priming pulses. Set these to run at an arbitrary time in the future (100us). The prime pulse value is in ms*10, so need to multiple by 100 to get to uS
|
//Perform the priming pulses. Set these to run at an arbitrary time in the future (100us). The prime pulse value is in ms*10, so need to multiple by 100 to get to uS
|
||||||
setFuelSchedule1(openInjector1and4, 100, (unsigned long)(configPage1.primePulse * 100), closeInjector1and4);
|
setFuelSchedule1(100, (unsigned long)(configPage1.primePulse * 100));
|
||||||
setFuelSchedule2(openInjector2and3, 100, (unsigned long)(configPage1.primePulse * 100), closeInjector2and3);
|
setFuelSchedule2(100, (unsigned long)(configPage1.primePulse * 100));
|
||||||
|
setFuelSchedule3(100, (unsigned long)(configPage1.primePulse * 100));
|
||||||
|
setFuelSchedule4(100, (unsigned long)(configPage1.primePulse * 100));
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
@ -1364,22 +1368,10 @@ void loop()
|
||||||
if (injector1StartAngle <= crankAngle && fuelSchedule1.schedulesSet == 0) { injector1StartAngle += CRANK_ANGLE_MAX_INJ; }
|
if (injector1StartAngle <= crankAngle && fuelSchedule1.schedulesSet == 0) { injector1StartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||||
if (injector1StartAngle > crankAngle)
|
if (injector1StartAngle > crankAngle)
|
||||||
{
|
{
|
||||||
if (configPage1.injLayout == INJ_SEMISEQUENTIAL)
|
setFuelSchedule1(
|
||||||
{
|
((unsigned long)(injector1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
||||||
setFuelSchedule1(openInjector1and4,
|
(unsigned long)currentStatus.PW1
|
||||||
((unsigned long)(injector1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
);
|
||||||
(unsigned long)currentStatus.PW1,
|
|
||||||
closeInjector1and4
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFuelSchedule1(openInjector1,
|
|
||||||
((unsigned long)(injector1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
|
||||||
(unsigned long)currentStatus.PW1,
|
|
||||||
closeInjector1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------------------
|
||||||
|
@ -1402,22 +1394,10 @@ void loop()
|
||||||
if (tempStartAngle <= tempCrankAngle && fuelSchedule2.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
if (tempStartAngle <= tempCrankAngle && fuelSchedule2.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||||
if ( tempStartAngle > tempCrankAngle )
|
if ( tempStartAngle > tempCrankAngle )
|
||||||
{
|
{
|
||||||
if (configPage1.injLayout == 1)
|
setFuelSchedule2(
|
||||||
{
|
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
||||||
setFuelSchedule2(openInjector2and3,
|
(unsigned long)currentStatus.PW2
|
||||||
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
);
|
||||||
(unsigned long)currentStatus.PW2,
|
|
||||||
closeInjector2and3
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFuelSchedule2(openInjector2,
|
|
||||||
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
|
||||||
(unsigned long)currentStatus.PW2,
|
|
||||||
closeInjector2
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1430,10 +1410,9 @@ void loop()
|
||||||
if (tempStartAngle <= tempCrankAngle && fuelSchedule3.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
if (tempStartAngle <= tempCrankAngle && fuelSchedule3.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||||
if ( tempStartAngle > tempCrankAngle )
|
if ( tempStartAngle > tempCrankAngle )
|
||||||
{
|
{
|
||||||
setFuelSchedule3(openInjector3,
|
setFuelSchedule3(
|
||||||
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
||||||
(unsigned long)currentStatus.PW3,
|
(unsigned long)currentStatus.PW3
|
||||||
closeInjector3
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1447,10 +1426,9 @@ void loop()
|
||||||
if (tempStartAngle <= tempCrankAngle && fuelSchedule4.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
if (tempStartAngle <= tempCrankAngle && fuelSchedule4.schedulesSet == 0) { tempStartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||||
if ( tempStartAngle > tempCrankAngle )
|
if ( tempStartAngle > tempCrankAngle )
|
||||||
{
|
{
|
||||||
setFuelSchedule4(openInjector4,
|
setFuelSchedule4(
|
||||||
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
||||||
(unsigned long)currentStatus.PW4,
|
(unsigned long)currentStatus.PW4
|
||||||
closeInjector4
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1465,10 +1443,15 @@ void loop()
|
||||||
if ( tempStartAngle > tempCrankAngle )
|
if ( tempStartAngle > tempCrankAngle )
|
||||||
{
|
{
|
||||||
//Note the hacky use of fuel schedule 3 below
|
//Note the hacky use of fuel schedule 3 below
|
||||||
|
/*
|
||||||
setFuelSchedule3(openInjector3and5,
|
setFuelSchedule3(openInjector3and5,
|
||||||
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
||||||
(unsigned long)currentStatus.PW1,
|
(unsigned long)currentStatus.PW1,
|
||||||
closeInjector3and5
|
closeInjector3and5
|
||||||
|
);*/
|
||||||
|
setFuelSchedule3(
|
||||||
|
((unsigned long)(tempStartAngle - tempCrankAngle) * (unsigned long)timePerDegree),
|
||||||
|
(unsigned long)currentStatus.PW1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,14 +33,14 @@ void writeConfig()
|
||||||
for(int x=EEPROM_CONFIG1_MAP; x<EEPROM_CONFIG1_XBINS; x++)
|
for(int x=EEPROM_CONFIG1_MAP; x<EEPROM_CONFIG1_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG1_MAP;
|
offset = x - EEPROM_CONFIG1_MAP;
|
||||||
if(EEPROM.read(x) != fuelTable.values[15-offset/16][offset%16]) { EEPROM.write(x, fuelTable.values[15-offset/16][offset%16]); } //Write the 16x16 map
|
if( EEPROM.read(x) != (fuelTable.values[15-(offset/16)][offset%16]) ) { EEPROM.write(x, fuelTable.values[15-(offset/16)][offset%16]); } //Write the 16x16 map
|
||||||
}
|
}
|
||||||
|
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG1_XBINS; x<EEPROM_CONFIG1_YBINS; x++)
|
for(int x=EEPROM_CONFIG1_XBINS; x<EEPROM_CONFIG1_YBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG1_XBINS;
|
offset = x - EEPROM_CONFIG1_XBINS;
|
||||||
if(EEPROM.read(x) != byte(fuelTable.axisX[offset]/TABLE_RPM_MULTIPLIER)) { EEPROM.write(x, byte(fuelTable.axisX[offset]/TABLE_RPM_MULTIPLIER)); } //RPM bins are divided by 100 and converted to a byte
|
if( EEPROM.read(x) != (byte(fuelTable.axisX[offset]/TABLE_RPM_MULTIPLIER)) ) { EEPROM.write(x, byte(fuelTable.axisX[offset]/TABLE_RPM_MULTIPLIER)); } //RPM bins are divided by 100 and converted to a byte
|
||||||
}
|
}
|
||||||
//TPS/MAP bins
|
//TPS/MAP bins
|
||||||
for(int x=EEPROM_CONFIG1_YBINS; x<EEPROM_CONFIG2_START; x++)
|
for(int x=EEPROM_CONFIG1_YBINS; x<EEPROM_CONFIG2_START; x++)
|
||||||
|
@ -74,7 +74,7 @@ void writeConfig()
|
||||||
for(int x=EEPROM_CONFIG3_MAP; x<EEPROM_CONFIG3_XBINS; x++)
|
for(int x=EEPROM_CONFIG3_MAP; x<EEPROM_CONFIG3_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG3_MAP;
|
offset = x - EEPROM_CONFIG3_MAP;
|
||||||
if(EEPROM.read(x) != ignitionTable.values[15-offset/16][offset%16]) { EEPROM.write(x, ignitionTable.values[15-offset/16][offset%16]); } //Write the 16x16 map with translation
|
if(EEPROM.read(x) != (ignitionTable.values[15-(offset/16)][offset%16]) ) { EEPROM.write(x, ignitionTable.values[15-(offset/16)][offset%16]); } //Write the 16x16 map with translation
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG3_XBINS; x<EEPROM_CONFIG3_YBINS; x++)
|
for(int x=EEPROM_CONFIG3_XBINS; x<EEPROM_CONFIG3_YBINS; x++)
|
||||||
|
@ -114,7 +114,7 @@ void writeConfig()
|
||||||
for(int x=EEPROM_CONFIG5_MAP; x<EEPROM_CONFIG5_XBINS; x++)
|
for(int x=EEPROM_CONFIG5_MAP; x<EEPROM_CONFIG5_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG5_MAP;
|
offset = x - EEPROM_CONFIG5_MAP;
|
||||||
if(EEPROM.read(x) != afrTable.values[15-offset/16][offset%16]) { EEPROM.write(x, afrTable.values[15-offset/16][offset%16]); } //Write the 16x16 map
|
if(EEPROM.read(x) != (afrTable.values[15-(offset/16)][offset%16]) ) { EEPROM.write(x, afrTable.values[15-(offset/16)][offset%16]); } //Write the 16x16 map
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG5_XBINS; x<EEPROM_CONFIG5_YBINS; x++)
|
for(int x=EEPROM_CONFIG5_XBINS; x<EEPROM_CONFIG5_YBINS; x++)
|
||||||
|
@ -167,9 +167,9 @@ void writeConfig()
|
||||||
for(int x=EEPROM_CONFIG8_MAP1; x<EEPROM_CONFIG8_XBINS1; x++)
|
for(int x=EEPROM_CONFIG8_MAP1; x<EEPROM_CONFIG8_XBINS1; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG8_MAP1;
|
offset = x - EEPROM_CONFIG8_MAP1;
|
||||||
if(EEPROM.read(x) != boostTable.values[7-offset/8][offset%8]) { EEPROM.write(x, boostTable.values[7-offset/8][offset%8]); } //Write the 8x8 map
|
if(EEPROM.read(x) != (boostTable.values[7-(offset/8)][offset%8]) ) { EEPROM.write(x, boostTable.values[7-(offset/8)][offset%8]); } //Write the 8x8 map
|
||||||
offset = y - EEPROM_CONFIG8_MAP2;
|
offset = y - EEPROM_CONFIG8_MAP2;
|
||||||
if(EEPROM.read(y) != vvtTable.values[7-offset/8][offset%8]) { EEPROM.write(y, vvtTable.values[7-offset/8][offset%8]); } //Write the 8x8 map
|
if(EEPROM.read(y) != (vvtTable.values[7-(offset/8)][offset%8]) ) { EEPROM.write(y, vvtTable.values[7-(offset/8)][offset%8]); } //Write the 8x8 map
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
|
@ -213,13 +213,13 @@ void writeConfig()
|
||||||
for(int x=EEPROM_CONFIG9_MAP1; x<EEPROM_CONFIG9_XBINS1; x++)
|
for(int x=EEPROM_CONFIG9_MAP1; x<EEPROM_CONFIG9_XBINS1; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG9_MAP1;
|
offset = x - EEPROM_CONFIG9_MAP1;
|
||||||
EEPROM.update(x, trim1Table.values[5-offset/6][offset%6]); //Write the 6x6 map
|
EEPROM.update(x, (trim1Table.values[5-(offset/6)][offset%6]) ); //Write the 6x6 map
|
||||||
offset = y - EEPROM_CONFIG9_MAP2;
|
offset = y - EEPROM_CONFIG9_MAP2;
|
||||||
EEPROM.update(y, trim2Table.values[5-offset/6][offset%6]); //Write the 6x6 map
|
EEPROM.update(y, trim2Table.values[5-(offset/6)][offset%6]); //Write the 6x6 map
|
||||||
offset = z - EEPROM_CONFIG9_MAP3;
|
offset = z - EEPROM_CONFIG9_MAP3;
|
||||||
EEPROM.update(z, trim3Table.values[5-offset/6][offset%6]); //Write the 6x6 map
|
EEPROM.update(z, trim3Table.values[5-(offset/6)][offset%6]); //Write the 6x6 map
|
||||||
offset = i - EEPROM_CONFIG9_MAP4;
|
offset = i - EEPROM_CONFIG9_MAP4;
|
||||||
EEPROM.update(i, trim4Table.values[5-offset/6][offset%6]); //Write the 6x6 map
|
EEPROM.update(i, trim4Table.values[5-(offset/6)][offset%6]); //Write the 6x6 map
|
||||||
y++;
|
y++;
|
||||||
z++;
|
z++;
|
||||||
i++;
|
i++;
|
||||||
|
@ -283,12 +283,10 @@ void loadConfig()
|
||||||
|
|
||||||
|
|
||||||
//Fuel table (See storage.h for data layout)
|
//Fuel table (See storage.h for data layout)
|
||||||
//fuelTable.xSize = EEPROM.read(EEPROM_CONFIG1_XSIZE); //Read the VE Tables RPM dimension size
|
|
||||||
//fuelTable.ySize = EEPROM.read(EEPROM_CONFIG1_YSIZE); //Read the VE Tables MAP/TPS dimension size
|
|
||||||
for(int x=EEPROM_CONFIG1_MAP; x<EEPROM_CONFIG1_XBINS; x++)
|
for(int x=EEPROM_CONFIG1_MAP; x<EEPROM_CONFIG1_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG1_MAP;
|
offset = x - EEPROM_CONFIG1_MAP;
|
||||||
fuelTable.values[15-offset/16][offset%16] = EEPROM.read(x); //Read the 8x8 map
|
fuelTable.values[15-(offset/16)][offset%16] = EEPROM.read(x); //Read the 8x8 map
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG1_XBINS; x<EEPROM_CONFIG1_YBINS; x++)
|
for(int x=EEPROM_CONFIG1_XBINS; x<EEPROM_CONFIG1_YBINS; x++)
|
||||||
|
@ -314,13 +312,10 @@ void loadConfig()
|
||||||
//IGNITION CONFIG PAGE (2)
|
//IGNITION CONFIG PAGE (2)
|
||||||
|
|
||||||
//Begin writing the Ignition table, basically the same thing as above
|
//Begin writing the Ignition table, basically the same thing as above
|
||||||
//ignitionTable.xSize = EEPROM.read(EEPROM_CONFIG2_XSIZE); //Read the ignition Table RPM dimension size (Currently not supproted)
|
|
||||||
//ignitionTable.ySize = EEPROM.read(EEPROM_CONFIG2_YSIZE); //Read the ignition Table MAP/TPS dimension size (Currently not supproted)
|
|
||||||
|
|
||||||
for(int x=EEPROM_CONFIG3_MAP; x<EEPROM_CONFIG3_XBINS; x++)
|
for(int x=EEPROM_CONFIG3_MAP; x<EEPROM_CONFIG3_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG3_MAP;
|
offset = x - EEPROM_CONFIG3_MAP;
|
||||||
ignitionTable.values[15-offset/16][offset%16] = EEPROM.read(x); //Read the 8x8 map
|
ignitionTable.values[15-(offset/16)][offset%16] = EEPROM.read(x); //Read the 8x8 map
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG3_XBINS; x<EEPROM_CONFIG3_YBINS; x++)
|
for(int x=EEPROM_CONFIG3_XBINS; x<EEPROM_CONFIG3_YBINS; x++)
|
||||||
|
@ -345,13 +340,10 @@ void loadConfig()
|
||||||
//AFR TARGET CONFIG PAGE (3)
|
//AFR TARGET CONFIG PAGE (3)
|
||||||
|
|
||||||
//Begin writing the Ignition table, basically the same thing as above
|
//Begin writing the Ignition table, basically the same thing as above
|
||||||
//ignitionTable.xSize = EEPROM.read(EEPROM_CONFIG2_XSIZE); //Read the ignition Table RPM dimension size (Currently not supproted)
|
|
||||||
//ignitionTable.ySize = EEPROM.read(EEPROM_CONFIG2_YSIZE); //Read the ignition Table MAP/TPS dimension size (Currently not supproted)
|
|
||||||
|
|
||||||
for(int x=EEPROM_CONFIG5_MAP; x<EEPROM_CONFIG5_XBINS; x++)
|
for(int x=EEPROM_CONFIG5_MAP; x<EEPROM_CONFIG5_XBINS; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG5_MAP;
|
offset = x - EEPROM_CONFIG5_MAP;
|
||||||
afrTable.values[15-offset/16][offset%16] = EEPROM.read(x); //Read the 16x16 map
|
afrTable.values[15-(offset/16)][offset%16] = EEPROM.read(x); //Read the 16x16 map
|
||||||
}
|
}
|
||||||
//RPM bins
|
//RPM bins
|
||||||
for(int x=EEPROM_CONFIG5_XBINS; x<EEPROM_CONFIG5_YBINS; x++)
|
for(int x=EEPROM_CONFIG5_XBINS; x<EEPROM_CONFIG5_YBINS; x++)
|
||||||
|
@ -374,13 +366,10 @@ void loadConfig()
|
||||||
|
|
||||||
//*********************************************************************************************************************************************************************************
|
//*********************************************************************************************************************************************************************************
|
||||||
|
|
||||||
//CONFIG PAGE (4) //############
|
//CONFIG PAGE (4)
|
||||||
pnt_configPage = (byte *)&configPage4; //Create a pointer to Page 3 in memory
|
pnt_configPage = (byte *)&configPage4; //Create a pointer to Page 3 in memory
|
||||||
//Begin writing the Ignition table, basically the same thing as above
|
//Begin writing the Ignition table, basically the same thing as above
|
||||||
//ignitionTable.xSize = EEPROM.read(EEPROM_CONFIG2_XSIZE); //Read the ignition Table RPM dimension size (Currently not supproted)
|
//The first 64 bytes can simply be pulled straight from the configTable
|
||||||
//ignitionTable.ySize = EEPROM.read(EEPROM_CONFIG2_YSIZE); //Read the ignition Table MAP/TPS dimension size (Currently not supproted)
|
|
||||||
|
|
||||||
//The next 64 bytes can simply be pulled straight from the configTable
|
|
||||||
for(int x=EEPROM_CONFIG7_START; x<EEPROM_CONFIG7_END; x++)
|
for(int x=EEPROM_CONFIG7_START; x<EEPROM_CONFIG7_END; x++)
|
||||||
{
|
{
|
||||||
*(pnt_configPage + byte(x - EEPROM_CONFIG7_START)) = EEPROM.read(x);
|
*(pnt_configPage + byte(x - EEPROM_CONFIG7_START)) = EEPROM.read(x);
|
||||||
|
@ -392,9 +381,9 @@ void loadConfig()
|
||||||
for(int x=EEPROM_CONFIG8_MAP1; x<EEPROM_CONFIG8_XBINS1; x++)
|
for(int x=EEPROM_CONFIG8_MAP1; x<EEPROM_CONFIG8_XBINS1; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG8_MAP1;
|
offset = x - EEPROM_CONFIG8_MAP1;
|
||||||
boostTable.values[7-offset/8][offset%8] = EEPROM.read(x); //Read the 8x8 map
|
boostTable.values[7-(offset/8)][offset%8] = EEPROM.read(x); //Read the 8x8 map
|
||||||
offset = y - EEPROM_CONFIG8_MAP2;
|
offset = y - EEPROM_CONFIG8_MAP2;
|
||||||
vvtTable.values[7-offset/8][offset%8] = EEPROM.read(y); //Read the 8x8 map
|
vvtTable.values[7-(offset/8)][offset%8] = EEPROM.read(y); //Read the 8x8 map
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,13 +417,13 @@ void loadConfig()
|
||||||
for(int x=EEPROM_CONFIG9_MAP1; x<EEPROM_CONFIG9_XBINS1; x++)
|
for(int x=EEPROM_CONFIG9_MAP1; x<EEPROM_CONFIG9_XBINS1; x++)
|
||||||
{
|
{
|
||||||
offset = x - EEPROM_CONFIG9_MAP1;
|
offset = x - EEPROM_CONFIG9_MAP1;
|
||||||
trim1Table.values[5-offset/6][offset%6] = EEPROM.read(x); //Read the 6x6 map
|
trim1Table.values[5-(offset/6)][offset%6] = EEPROM.read(x); //Read the 6x6 map
|
||||||
offset = y - EEPROM_CONFIG9_MAP2;
|
offset = y - EEPROM_CONFIG9_MAP2;
|
||||||
trim2Table.values[5-offset/6][offset%6] = EEPROM.read(y); //Read the 6x6 map
|
trim2Table.values[5-(offset/6)][offset%6] = EEPROM.read(y); //Read the 6x6 map
|
||||||
offset = z - EEPROM_CONFIG9_MAP3;
|
offset = z - EEPROM_CONFIG9_MAP3;
|
||||||
trim3Table.values[5-offset/6][offset%6] = EEPROM.read(z); //Read the 6x6 map
|
trim3Table.values[5-(offset/6)][offset%6] = EEPROM.read(z); //Read the 6x6 map
|
||||||
offset = i - EEPROM_CONFIG9_MAP4;
|
offset = i - EEPROM_CONFIG9_MAP4;
|
||||||
trim4Table.values[5-offset/6][offset%6] = EEPROM.read(i); //Read the 6x6 map
|
trim4Table.values[5-(offset/6)][offset%6] = EEPROM.read(i); //Read the 6x6 map
|
||||||
y++;
|
y++;
|
||||||
z++;
|
z++;
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -157,6 +157,7 @@ void setPinMapping(byte boardID)
|
||||||
#if defined(CORE_TEENSY)
|
#if defined(CORE_TEENSY)
|
||||||
pinTrigger = 23;
|
pinTrigger = 23;
|
||||||
pinStepperDir = 33;
|
pinStepperDir = 33;
|
||||||
|
pinStepperStep = 34;
|
||||||
pinCoil1 = 31;
|
pinCoil1 = 31;
|
||||||
pinTachOut = 28;
|
pinTachOut = 28;
|
||||||
pinFan = 27;
|
pinFan = 27;
|
||||||
|
@ -233,6 +234,7 @@ void setPinMapping(byte boardID)
|
||||||
pinTrigger = 23;
|
pinTrigger = 23;
|
||||||
pinTrigger2 = 35;
|
pinTrigger2 = 35;
|
||||||
pinStepperDir = 33;
|
pinStepperDir = 33;
|
||||||
|
pinStepperStep = 34;
|
||||||
pinCoil1 = 31;
|
pinCoil1 = 31;
|
||||||
pinTachOut = 28;
|
pinTachOut = 28;
|
||||||
pinFan = 27;
|
pinFan = 27;
|
||||||
|
|
Loading…
Reference in New Issue