diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6960b34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.bak +*.sch-bak +*.kicad_pcb-bak +*.zip +*-cache$ +*-cache.lib +fp-info-cache +*.bck +*_autosave-* +*.gbr +*.drl +*.gbrjob + diff --git a/README.md b/README.md index 43f6b2a..c49c370 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,10 @@ # VW-bms Can based decoding of VW bms data + +## Teensy 4 version + +This is a port for Teensy4.0, it uses a connection PCB to reroute signals to the Teensy3.2 footprint. The board adapter is in kicad format. +On the Teensy4, you can lower the frequency to 150Mhz and it works. +A second can, CAN2, is available on Teensy4.0 to add functionalities or to resolve CAN speed conflicts. + +Uncomment //#define USING_TEENSY4 in config.h and select Teensy4.0 as board to use it. diff --git a/Teensy4_PCB_adapter/LICENCE b/Teensy4_PCB_adapter/LICENCE new file mode 100644 index 0000000..15212e4 --- /dev/null +++ b/Teensy4_PCB_adapter/LICENCE @@ -0,0 +1,14 @@ +teensy4 adapter +Copyright 2023 Patrick Areny + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/Teensy4_PCB_adapter/README.md b/Teensy4_PCB_adapter/README.md new file mode 100644 index 0000000..1eb9bf4 --- /dev/null +++ b/Teensy4_PCB_adapter/README.md @@ -0,0 +1,9 @@ +Adapter to use a Teensy4.0 board with the simpBMS in place of the Teensy3.2. + +Mostly all pins are the same, but CAN1 must be rerouted. And the Teensy4.0 UART3 is used as Teensy3.2 UART2. +The firmware is modified to take the rerouting into account. +The source code modifications are under the USING_TEENSY4 directive. + +The schematic is drawn with kicad 7.0 and under the Apache licence + +Note that this is just a proof of concept, the schematics of the carrier board could be adapted to add a CAN bus or two. diff --git a/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pcb b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pcb new file mode 100644 index 0000000..bc578ab --- /dev/null +++ b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pcb @@ -0,0 +1,4831 @@ +(kicad_pcb (version 20221018) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + + (setup + (stackup + (layer "F.SilkS" (type "Top Silk Screen")) + (layer "F.Paste" (type "Top Solder Paste")) + (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01)) + (layer "F.Cu" (type "copper") (thickness 0.035)) + (layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) + (layer "B.Cu" (type "copper") (thickness 0.035)) + (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01)) + (layer "B.Paste" (type "Bottom Solder Paste")) + (layer "B.SilkS" (type "Bottom Silk Screen")) + (copper_finish "None") + (dielectric_constraints no) + ) + (pad_to_mask_clearance 0) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (plot_on_all_layers_selection 0x0000000_00000000) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (dxfpolygonmode true) + (dxfimperialunits true) + (dxfusepcbnewfont true) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (sketchpadsonfab false) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory "gerber/") + ) + ) + + (net 0 "") + (net 1 "Net-(J1-Pin_1)") + (net 2 "Net-(J1-Pin_2)") + (net 3 "Net-(J1-Pin_3)") + (net 4 "/CANRX1") + (net 5 "/CANTX1") + (net 6 "/A7") + (net 7 "/A6") + (net 8 "/A5") + (net 9 "/A4") + (net 10 "/A3") + (net 11 "/A2") + (net 12 "/RX3T4") + (net 13 "/TX3T4") + (net 14 "/LED{slash}SCK") + (net 15 "/GND") + (net 16 "/CANRX2") + (net 17 "/CANTX2") + (net 18 "Net-(J2-Pin_4)") + (net 19 "Net-(J2-Pin_7)") + (net 20 "Net-(J2-Pin_8)") + (net 21 "/IO3") + (net 22 "/CS") + (net 23 "Net-(J2-Pin_11)") + (net 24 "Net-(J2-Pin_12)") + (net 25 "/MOSI") + (net 26 "/MISO") + (net 27 "/IO1") + (net 28 "/IO2") + (net 29 "Net-(J2-Pin_5)") + (net 30 "Net-(J2-Pin_6)") + (net 31 "/RX3") + (net 32 "/TX3") + (net 33 "/P17") + (net 34 "/P18") + + (footprint "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp 05309bb8-f2bc-418c-86dc-094f50cf49fc) + (at 142.1 88.2) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, open") + (property "ki_keywords" "solder jumper SPST") + (path "/9b0c5058-9460-4b2d-826b-7b388717e7e7") + (attr exclude_from_pos_files) + (fp_text reference "JP6" (at 0 2) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ad275bfe-d93a-4b78-8885-222516745ea6) + ) + (fp_text value "SolderJumper_2_Open" (at 0 1.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 47823e6c-353a-4127-bed2-0e6f69c68833) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3c444929-4acc-4e8f-aeac-f7dd24afd8bd)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3e2280be-3ea4-4ccb-8ad1-544e51cba2d2)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 75e40728-dd26-4b8b-830c-855f4436d7d1)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cd39678b-675e-4d5c-9b2d-9a5b0a6f408d)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp bc13585b-b852-4320-88f8-b9525e07bbe4)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f78bd2b1-b45a-4dfd-b19a-06cbe3be86d1)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 657de690-ca0c-4036-a71c-757e17d11e1a)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e0a337f5-410e-4bf6-9860-1e4899bf2322)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 62587ccf-1e32-4d0b-a2ff-5d0e9d850399)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 96599636-9f47-47a2-ad5a-4365a99c342e)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp b517d480-c4dc-4236-b135-7df0ca95aec1)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ca0b36d0-d878-424a-bf8b-5de8d3b706c1)) + (pad "1" smd custom (at -0.65 0) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 22 "/CS") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 822a3542-74a3-42b6-a28d-e964f6d36b94)) + (pad "2" smd custom (at 0.65 0) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 34 "/P18") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 774d4ca8-7a92-4a15-b626-63688c27a931)) + ) + + (footprint "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp 353a6703-9dd8-48d2-9f04-21a0100a6a82) + (at 138.75 87.65 90) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, open") + (property "ki_keywords" "solder jumper SPST") + (path "/327bef65-2a36-432f-95e9-b785d64e1c02") + (attr exclude_from_pos_files) + (fp_text reference "JP3" (at 3.15 0 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 08a290f4-03b4-446f-8289-2551d1e695af) + ) + (fp_text value "SolderJumper_2_Open" (at 0 1.9 90) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp c0ef50da-374c-466e-be17-d9731cfac9b9) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b60a1e26-a0f0-470a-91ea-ddf9adba82cc)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f3c2e2af-94be-4a3f-b409-d39d1be5c4ef)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 35128dce-6baa-4323-bff1-391347325c8a)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c8b428fa-c37d-4c3e-b7aa-224268398eb6)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ff3f0bd4-2124-4816-a561-0b63b0da851a)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 47dd1196-3324-4042-9351-fe280c1e334f)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fce02cca-ea83-493d-8b40-e26c96591480)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 17750402-00df-4073-9ce3-d9effde60fed)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2cc0ca50-0ea0-4663-b124-dcf318c22e81)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a08133fd-642d-4f2d-9809-f3c94efc4e9b)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 657494a4-f688-49a6-b5ee-a08e034d6c2a)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ad588255-9895-47ce-9027-7101d885e01d)) + (pad "1" smd custom (at -0.65 0 90) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 12 "/RX3T4") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 67281dcd-e885-4c4c-bc34-c2f3b206a42e)) + (pad "2" smd custom (at 0.65 0 90) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 31 "/RX3") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 7cf718b4-511a-4e5a-9dee-76598d2d8cb4)) + ) + + (footprint "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp 4dce40fe-b232-4748-a511-c8e3d8bd9950) + (at 141.5 84.1) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, open") + (property "ki_keywords" "solder jumper SPST") + (path "/e3201b85-670b-4d30-9006-f6042352552a") + (attr exclude_from_pos_files) + (fp_text reference "JP5" (at 0 2) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp b545d6c8-3e2c-4e55-85e4-963724ccd6d0) + ) + (fp_text value "SolderJumper_2_Open" (at 0 1.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp b071a135-f9aa-47b7-9e7a-cb0183394b45) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0c21e0df-81bb-40b3-8fc1-cfa46cdf0ddb)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp da048a64-9a3d-4053-b98d-8ad6b70b4707)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e13b0b6d-ba4f-49cb-92c3-57dc04225963)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1fdfad1f-1494-4ce8-b07e-c83eb1cb6a14)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2026fb35-2478-4c48-9e79-1d793949fc6f)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1ffc641b-42d6-4835-95ed-0b2a0d8cef7c)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6a4e5b3f-bd32-4137-a73b-b4d1983b0894)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fbd88b37-3588-4bf0-a4e8-da75869b1336)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 46adc9bc-6a2d-4105-894f-8787634c7b35)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 928357ab-298b-44fd-ba4f-59a4717c101c)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9d968ae8-ce4e-4a8e-853e-0a0e49dcff0c)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f7765289-da65-44b4-9548-4b1ac0f4d9ce)) + (pad "1" smd custom (at -0.65 0) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 21 "/IO3") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp ac580ae3-cf03-46ff-80b3-38d55f2b9f7a)) + (pad "2" smd custom (at 0.65 0) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 33 "/P17") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 16ad3242-7df2-42e5-b2a1-0de044fccdad)) + ) + + (footprint "TestPoint:TestPoint_Pad_D1.5mm" (layer "F.Cu") + (tstamp 52ee249c-0cf8-445d-aa00-7ddb6070bc6d) + (at 141 69) + (descr "SMD pad as test Point, diameter 1.5mm") + (tags "test point SMD pad") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "test point") + (property "ki_keywords" "test point tp") + (path "/6ca33eeb-5023-47ed-86b0-84827661d444") + (attr exclude_from_pos_files) + (fp_text reference "TP2" (at -2.5 0) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp eb757e8f-5643-4265-a00d-ea4fe8f3c639) + ) + (fp_text value "TestPoint" (at 0 1.75) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 00821be4-3194-4a69-a5c1-1aad9572c829) + ) + (fp_text user "${REFERENCE}" (at 0 -1.65) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 08e21a5d-c1fc-4f12-9b7f-ce3461f1443a) + ) + (fp_circle (center 0 0) (end 0 0.95) + (stroke (width 0.12) (type solid)) (fill none) (layer "F.SilkS") (tstamp 47990c58-4663-42de-96c4-f9b6ec7e4de1)) + (fp_circle (center 0 0) (end 1.25 0) + (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp 53e3e519-46e0-4817-8d66-d3adec55f627)) + (pad "1" smd circle (at 0 0) (size 1.5 1.5) (layers "F.Cu" "F.Mask") + (net 16 "/CANRX2") (pinfunction "1") (pintype "passive") (tstamp 7f2d642b-52d6-460c-a0f9-0fc50e1704cf)) + ) + + (footprint "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp 6cb6c43c-b8de-4a60-b528-770fcfb05fcc) + (at 138.75 93.15 90) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, open") + (property "ki_keywords" "solder jumper SPST") + (path "/79a45669-9e88-4951-8d0d-b6102dbe24ac") + (attr exclude_from_pos_files) + (fp_text reference "JP4" (at -3.35 0 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3284bfee-c209-458b-9840-438c86149548) + ) + (fp_text value "SolderJumper_2_Open" (at 0 1.9 90) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp feadf395-a888-4b8d-968a-1213790e14e1) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e7b5902c-dc1d-43b6-b095-f4af095ff449)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 312c07f4-ea02-488c-9755-5861ad1a4c67)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7347539a-c19f-41df-b706-69dee6169767)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3e2b1bd8-8d28-4980-8dcf-8e8a25f299fe)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5ef62a93-9210-4330-9b81-b380109c2cac)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9f43f8d6-e383-40aa-a0aa-05c729ae6d8c)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 5b795bcb-1058-468e-a093-e769ea0b0b5e)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c9b0895b-a7f6-4791-80d6-bb55e17c1b29)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 20c1f55e-4b3f-48dc-896a-5aedb7523a8d)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0192b0a6-b80a-493c-92ae-6bf53ed3ba94)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d768a5ae-3e52-4135-896e-a199088d69e2)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 99b612cc-0d0d-46a4-b495-426bba1d0a1b)) + (pad "1" smd custom (at -0.65 0 90) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 13 "/TX3T4") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 4d622ff4-c96b-4934-8d2f-8b0c77fa9d78)) + (pad "2" smd custom (at 0.65 0 90) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 32 "/TX3") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp c846bdd1-73c1-43c7-a1c6-87a3b51537e0)) + ) + + (footprint "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp 88aa4b94-c32f-427c-9e81-947ee0504179) + (at 141.35 79 180) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, bridged with 1 copper strip") + (tags "net tie solder jumper bridged") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, closed/bridged") + (property "ki_keywords" "solder jumper SPST") + (path "/f1ee04fc-56a0-4c24-baad-1f780ebc0b25") + (attr exclude_from_pos_files) + (net_tie_pad_groups "1, 2") + (fp_text reference "JP1" (at -0.05 -2) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3d3c23e3-0a50-467f-9a22-509d28fc25c6) + ) + (fp_text value "SolderJumper_2_Bridged" (at 0 1.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 63c27134-68be-4480-ab09-d83b28cba2ec) + ) + (fp_poly + (pts + (xy 0.25 -0.3) + (xy -0.25 -0.3) + (xy -0.25 0.3) + (xy 0.25 0.3) + ) + + (stroke (width 0) (type solid)) (fill solid) (layer "F.Cu") (tstamp 08d3303c-095f-4478-bcbb-4c645694fa44)) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 24762a36-1dfe-446b-8c4d-cb55894c94cb)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 573c78f9-dc3e-4c1b-976b-d950c7e1104d)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a366b5a9-3cd6-4ea5-b2da-c83762a81794)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6ba59783-a445-498c-8f29-b5f3caebf5bb)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e74d4467-19f2-4b38-ab4c-2f6f50fd9051)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 809e3036-b31d-480f-8b6b-d4aa95bf2cc2)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1c3575d1-a35a-4ab3-9493-7dfbeea78ddc)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b1ce549b-0d42-4297-a057-fd0be7419682)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8cece959-a3d8-42bb-bd47-ce79194a1a71)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1b70af8a-d02f-415b-b84f-79e820c53985)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d89049a3-7b2b-4563-9416-161888ed6577)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 94b2f919-f10e-4862-8c26-1b07da3e443d)) + (pad "1" smd custom (at -0.65 0 180) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 4 "/CANRX1") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 99d23e89-d0d3-4f5b-be06-47e3dd6447d7)) + (pad "2" smd custom (at 0.65 0 180) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 30 "Net-(J2-Pin_6)") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 9333340d-2e0c-4167-82e9-1a7d8849d06b)) + ) + + (footprint "TestPoint:TestPoint_Pad_D1.5mm" (layer "F.Cu") + (tstamp 8e6a8bfb-6521-48a1-9ef3-c58e6f264a2f) + (at 141 72) + (descr "SMD pad as test Point, diameter 1.5mm") + (tags "test point SMD pad") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "test point") + (property "ki_keywords" "test point tp") + (path "/211b73ad-dd24-4f7f-aa80-3a5a32b554bb") + (attr exclude_from_pos_files) + (fp_text reference "TP3" (at -2.5 0.25) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 9af0330a-e049-4dc5-9811-6630ab60478d) + ) + (fp_text value "TestPoint" (at 0 1.75) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 42310762-15b4-4df4-9aa6-911f0f3ddbe3) + ) + (fp_text user "${REFERENCE}" (at 0 -1.65) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0b709543-9912-4a18-91f4-53c529c7381c) + ) + (fp_circle (center 0 0) (end 0 0.95) + (stroke (width 0.12) (type solid)) (fill none) (layer "F.SilkS") (tstamp fb344f1e-514f-4e6c-b6ba-b317616adb17)) + (fp_circle (center 0 0) (end 1.25 0) + (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp 15342039-01f7-43b8-b1cd-83306959006f)) + (pad "1" smd circle (at 0 0) (size 1.5 1.5) (layers "F.Cu" "F.Mask") + (net 17 "/CANTX2") (pinfunction "1") (pintype "passive") (tstamp 929fbdd2-74c4-4515-882f-df0e38b4ea70)) + ) + + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x14_P2.54mm_Vertical" (layer "F.Cu") + (tstamp 965995c8-c009-4f7e-a68d-029ec149f180) + (at 131.5 66.04) + (descr "Through hole straight socket strip, 1x14, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x14 2.54mm single row") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Generic connector, single row, 01x14, script generated") + (property "ki_keywords" "connector") + (path "/9ec06175-fbc3-4ae8-9717-08d8ff0ec1ff") + (attr through_hole) + (fp_text reference "J4" (at 2.5 3.96) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1366827b-eaa0-43cb-ba45-87b3a9991fd8) + ) + (fp_text value "Conn_01x14_Socket" (at 0 35.79) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 959a18d4-d738-4935-9e84-23c4ca4461e5) + ) + (fp_text user "${REFERENCE}" (at 0 16.51 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 065aa93c-7d02-49c4-a5b1-e1e91f63a6c6) + ) + (fp_line (start -1.33 1.27) (end -1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a7d100b9-fa5e-4139-8ee1-549a802d0409)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6b91f1e3-fc28-44f4-85de-18976b18dfe3)) + (fp_line (start -1.33 34.35) (end 1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 895d97b0-0eaf-404a-a456-3f661c34a253)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3dc387f4-8a29-4bc3-87e4-a1069e7eb80c)) + (fp_line (start 1.33 -1.33) (end 1.33 0) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 79870e37-fa55-4fa4-b835-c42b45a54e07)) + (fp_line (start 1.33 1.27) (end 1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 05230f32-6c46-4aa4-babf-08ef6df35324)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a627753b-79bf-45e8-b4cf-ece8db503ed0)) + (fp_line (start -1.8 34.8) (end -1.8 -1.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 413dd4e9-deae-42de-9519-11139115264c)) + (fp_line (start 1.75 -1.8) (end 1.75 34.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ca5f7cc8-7620-4e98-a850-5058a1eef532)) + (fp_line (start 1.75 34.8) (end -1.8 34.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fb17e9d4-fe21-4531-8774-a9cb4df7c57a)) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp e9646cd1-ef7d-4168-bb24-7fff21d49c44)) + (fp_line (start -1.27 34.29) (end -1.27 -1.27) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 8ee722ed-ef8e-4255-a10d-41d124514e92)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp c1c2d944-fdff-4dab-a34e-fbe8cc0a13bf)) + (fp_line (start 1.27 -0.635) (end 1.27 34.29) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp cfb15248-dd2d-44bc-86b3-aefe33e89997)) + (fp_line (start 1.27 34.29) (end -1.27 34.29) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5dc212fe-d51c-4ee9-9d6d-a67760806812)) + (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 15 "/GND") (pinfunction "Pin_1") (pintype "passive") (tstamp 06f94787-a51a-4ebe-9155-354339800b0d)) + (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 16 "/CANRX2") (pinfunction "Pin_2") (pintype "passive") (tstamp 65201f26-88d8-463e-bdde-deea7dfadb50)) + (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 17 "/CANTX2") (pinfunction "Pin_3") (pintype "passive") (tstamp 72647682-9705-466c-b3d0-77f23cffebd7)) + (pad "4" thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 18 "Net-(J2-Pin_4)") (pinfunction "Pin_4") (pintype "passive") (tstamp d5426f45-258c-4572-9736-dd979dcac8e0)) + (pad "5" thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 27 "/IO1") (pinfunction "Pin_5") (pintype "passive") (tstamp b7f2ac14-ca6c-4cb8-8f39-22359ce4e409)) + (pad "6" thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 28 "/IO2") (pinfunction "Pin_6") (pintype "passive") (tstamp f2bacf17-1fff-4545-9a15-93aa21918fed)) + (pad "7" thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 19 "Net-(J2-Pin_7)") (pinfunction "Pin_7") (pintype "passive") (tstamp 952c9cd5-194e-430f-a481-13ad1beff031)) + (pad "8" thru_hole oval (at 0 17.78) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 20 "Net-(J2-Pin_8)") (pinfunction "Pin_8") (pintype "passive") (tstamp 6c758569-e72a-46b7-9b52-a194b7a1f629)) + (pad "9" thru_hole oval (at 0 20.32) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 23 "Net-(J2-Pin_11)") (pinfunction "Pin_9") (pintype "passive") (tstamp a94f9b3a-cc84-432b-8687-02767ae5df38)) + (pad "10" thru_hole oval (at 0 22.86) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 24 "Net-(J2-Pin_12)") (pinfunction "Pin_10") (pintype "passive") (tstamp f1b840f0-45b1-4fab-990b-8ced65892324)) + (pad "11" thru_hole oval (at 0 25.4) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 21 "/IO3") (pinfunction "Pin_11") (pintype "passive") (tstamp 8c0706b2-698d-4343-90f4-a0e8ad6caa9b)) + (pad "12" thru_hole oval (at 0 27.94) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 22 "/CS") (pinfunction "Pin_12") (pintype "passive") (tstamp 070957bd-a241-423d-bb99-9ad32a2d6a4f)) + (pad "13" thru_hole oval (at 0 30.48) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 25 "/MOSI") (pinfunction "Pin_13") (pintype "passive") (tstamp 5d67585e-4fe3-4ea8-a9f7-7e9eb58cbf15)) + (pad "14" thru_hole oval (at 0 33.02) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 26 "/MISO") (pinfunction "Pin_14") (pintype "passive") (tstamp 1d7654d1-3c9f-4784-9bbc-fe2496b260d6)) + (model "${KICAD6_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x14_P2.54mm_Vertical.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_PinSocket_2.54mm:PinSocket_1x14_P2.54mm_Vertical" (layer "F.Cu") + (tstamp bd2b6436-342c-4755-b561-9d73e8b929b1) + (at 146.75 66.04) + (descr "Through hole straight socket strip, 1x14, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x14 2.54mm single row") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Generic connector, single row, 01x14, script generated") + (property "ki_keywords" "connector") + (path "/1677d2d8-4cd6-4b68-b1b7-4b056fa633d4") + (attr through_hole) + (fp_text reference "J1" (at -2.5 27.46) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1199ddca-a80a-497a-8e5f-ca90189d3058) + ) + (fp_text value "Conn_01x14_Socket" (at 0 35.79) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3463b618-4aed-4f81-87c9-1cb084a36e58) + ) + (fp_text user "${REFERENCE}" (at 0 16.51 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a5b5cc42-db1a-4af1-b78f-7ae5d909b7f0) + ) + (fp_line (start -1.33 1.27) (end -1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fd3cd766-2322-4785-a34c-22b6f881109d)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp f38552b2-a051-4762-8f16-e7e5721bbdb2)) + (fp_line (start -1.33 34.35) (end 1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 40328d54-51c4-450c-a083-cca0cce9d6c0)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7ee3281b-edf8-4698-9f59-c47ce1a98df3)) + (fp_line (start 1.33 -1.33) (end 1.33 0) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6548eb5a-7089-40b0-901a-4c1b273b20c6)) + (fp_line (start 1.33 1.27) (end 1.33 34.35) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ad90bbc8-d61d-4f2a-8095-e3b0efcee952)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fe75c07c-5fe9-48a4-8382-8e355e1170a1)) + (fp_line (start -1.8 34.8) (end -1.8 -1.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3a7a50eb-daba-41bf-989b-02666efd1ad9)) + (fp_line (start 1.75 -1.8) (end 1.75 34.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f3b4653c-b61c-4704-b93d-dd23b35a6d03)) + (fp_line (start 1.75 34.8) (end -1.8 34.8) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c7fedfeb-7597-4627-b45b-0612d964d115)) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9a79f7b6-1354-44d4-8f97-355d717bab2e)) + (fp_line (start -1.27 34.29) (end -1.27 -1.27) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 00379869-1e95-41df-b5b7-ee93c139f8b1)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp be870543-afb8-4e02-81c0-63c197b2f81d)) + (fp_line (start 1.27 -0.635) (end 1.27 34.29) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 67297dd7-f43d-4cf4-8bac-d15c365cdbcd)) + (fp_line (start 1.27 34.29) (end -1.27 34.29) + (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp da520aa0-f2ff-4123-b704-3decf9ad0354)) + (pad "1" thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 1 "Net-(J1-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp fd98d946-eba2-4825-ae83-0cf7868d6c2b)) + (pad "2" thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 2 "Net-(J1-Pin_2)") (pinfunction "Pin_2") (pintype "passive") (tstamp 1d5d9473-dd71-46f5-8927-be777d224a84)) + (pad "3" thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 3 "Net-(J1-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp d8cfd666-b413-41b0-b1a2-f1610cf14bb7)) + (pad "4" thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 4 "/CANRX1") (pinfunction "Pin_4") (pintype "passive") (tstamp 3d91dd08-2906-4357-9995-140f98cfdbb9)) + (pad "5" thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 5 "/CANTX1") (pinfunction "Pin_5") (pintype "passive") (tstamp 1ce9048c-7186-4897-86ee-dd46065fdf52)) + (pad "6" thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 6 "/A7") (pinfunction "Pin_6") (pintype "passive") (tstamp ec1724e7-1116-403c-8dc6-e92ea1d7047a)) + (pad "7" thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 7 "/A6") (pinfunction "Pin_7") (pintype "passive") (tstamp 675b5f37-481d-4511-a936-95b81f223e79)) + (pad "8" thru_hole oval (at 0 17.78) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 8 "/A5") (pinfunction "Pin_8") (pintype "passive") (tstamp 54789ec9-d220-4dd2-92ca-f86a3cbcc444)) + (pad "9" thru_hole oval (at 0 20.32) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 9 "/A4") (pinfunction "Pin_9") (pintype "passive") (tstamp d8a30391-66c1-453a-94a7-90d77350ac3d)) + (pad "10" thru_hole oval (at 0 22.86) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 10 "/A3") (pinfunction "Pin_10") (pintype "passive") (tstamp da7f48c2-948a-4176-9e6f-83fced232d50)) + (pad "11" thru_hole oval (at 0 25.4) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 11 "/A2") (pinfunction "Pin_11") (pintype "passive") (tstamp 8525a460-d91f-4962-bfdb-7e3ab92583bb)) + (pad "12" thru_hole oval (at 0 27.94) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 12 "/RX3T4") (pinfunction "Pin_12") (pintype "passive") (tstamp e68886ed-b98e-4fff-8c35-d7b38bafe538)) + (pad "13" thru_hole oval (at 0 30.48) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 13 "/TX3T4") (pinfunction "Pin_13") (pintype "passive") (tstamp c2ebbfe1-df63-424e-99d8-7bdeb4915573)) + (pad "14" thru_hole oval (at 0 33.02) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 14 "/LED{slash}SCK") (pinfunction "Pin_14") (pintype "passive") (tstamp b5d003f6-6031-4606-9cb9-c14854d43e8f)) + (model "${KICAD6_3DMODEL_DIR}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x14_P2.54mm_Vertical.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "TestPoint:TestPoint_Pad_D1.5mm" (layer "F.Cu") + (tstamp f2c0506a-decd-4f1d-8108-feb8f43fe363) + (at 141 66) + (descr "SMD pad as test Point, diameter 1.5mm") + (tags "test point SMD pad") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "test point") + (property "ki_keywords" "test point tp") + (path "/ef7dba1d-0589-46ab-b74d-4f4df621559a") + (attr exclude_from_pos_files) + (fp_text reference "TP1" (at -2.5 0.75) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5af7f88c-cc78-4715-a125-bb6d97f62675) + ) + (fp_text value "TestPoint" (at 0 1.75) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 121c03e3-cd29-4bb0-8c87-3e052dd46d12) + ) + (fp_text user "${REFERENCE}" (at 0 -1.65) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 40feef29-76da-40c7-91ab-558b099f7876) + ) + (fp_circle (center 0 0) (end 0 0.95) + (stroke (width 0.12) (type solid)) (fill none) (layer "F.SilkS") (tstamp 2086066e-e60b-4558-aa41-968fa7fbc102)) + (fp_circle (center 0 0) (end 1.25 0) + (stroke (width 0.05) (type solid)) (fill none) (layer "F.CrtYd") (tstamp bc561182-d5c8-4c42-930d-3c24dd115bcd)) + (pad "1" smd circle (at 0 0) (size 1.5 1.5) (layers "F.Cu" "F.Mask") + (net 15 "/GND") (pinfunction "1") (pintype "passive") (tstamp 7c940bc6-3ba3-4bd0-93b0-9e0633f234e8)) + ) + + (footprint "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" (layer "F.Cu") + (tstamp f858ea56-240e-4635-b6dd-e1cdb4f020a9) + (at 141.35 76 180) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, bridged with 1 copper strip") + (tags "net tie solder jumper bridged") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Solder Jumper, 2-pole, closed/bridged") + (property "ki_keywords" "solder jumper SPST") + (path "/711bbf71-c355-4212-b060-7e5105f37b56") + (attr exclude_from_pos_files) + (net_tie_pad_groups "1, 2") + (fp_text reference "JP7" (at 3.05 0.2) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 10a864c5-39f3-445f-a9cf-593e1e9cb2cf) + ) + (fp_text value "SolderJumper_2_Bridged" (at 0 1.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1f922af7-e0c6-45a1-8b54-838d8bd197bd) + ) + (fp_poly + (pts + (xy 0.25 -0.3) + (xy -0.25 -0.3) + (xy -0.25 0.3) + (xy 0.25 0.3) + ) + + (stroke (width 0) (type solid)) (fill solid) (layer "F.Cu") (tstamp cc4d0e3c-459d-4d5e-bdda-322e4eec4cf7)) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 813537e9-8c54-4f96-af53-9898b2773d5e)) + (fp_line (start -0.7 -1) (end 0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 2fd34949-a1a8-48c8-9ec2-c43f070a0971)) + (fp_line (start 0.7 1) (end -0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c5662f51-9162-431f-aeec-604ff3a0de5c)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 9e8d3836-180f-407e-968e-a2ea9ea695a7)) + (fp_arc (start -1.4 -0.3) (mid -1.194975 -0.794975) (end -0.7 -1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 633b5c1d-b87d-4e14-91c5-26705a1cb33b)) + (fp_arc (start -0.7 1) (mid -1.194975 0.794975) (end -1.4 0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b16116b4-1370-4dce-85bc-a490de27deb3)) + (fp_arc (start 0.7 -1) (mid 1.194975 -0.794975) (end 1.4 -0.3) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fb5dfabd-8424-4324-b26c-7822c2c80751)) + (fp_arc (start 1.4 0.3) (mid 1.194975 0.794975) (end 0.7 1) + (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp fc0cdc90-4ede-41a5-aa80-7dc5d859223a)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 628fb711-64b5-4b10-989d-d74e086e941f)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6adb5ef0-4208-44f2-8a13-8bd234105bb5)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 68869f72-0967-4492-8458-52095f8d7e59)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) + (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 63d3d9a8-e069-450f-b2ce-ed9357fda373)) + (pad "1" smd custom (at -0.65 0 180) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 5 "/CANTX1") (pinfunction "A") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0.5 0.75) + (xy 0 0.75) + (xy 0 -0.75) + (xy 0.5 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp fcaacc1d-4f3d-4ab1-8189-446a0d577253)) + (pad "2" smd custom (at 0.65 0 180) (size 1 0.5) (layers "F.Cu" "F.Mask") + (net 29 "Net-(J2-Pin_5)") (pinfunction "B") (pintype "passive") (zone_connect 2) (thermal_bridge_angle 45) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0) (fill yes)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0) (fill yes)) + (gr_poly + (pts + (xy 0 0.75) + (xy -0.5 0.75) + (xy -0.5 -0.75) + (xy 0 -0.75) + ) + (width 0) (fill yes)) + ) (tstamp 7ccdaf20-1b50-43c4-bf53-78d9b5545292)) + ) + + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x14_P2.54mm_Vertical" (layer "B.Cu") + (tstamp 1b956f67-c0b7-4eed-9db6-3de578bdc6ec) + (at 135.48 66.04 180) + (descr "Through hole straight pin header, 1x14, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x14 2.54mm single row") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Generic connector, single row, 01x14, script generated") + (property "ki_keywords" "connector") + (path "/6023bf3f-c770-450a-bb7e-c43737278813") + (attr through_hole) + (fp_text reference "J2" (at -2.52 0.79) (layer "B.SilkS") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp d328f162-2814-4eb0-b434-9a0ab2465901) + ) + (fp_text value "Conn_01x14_Pin" (at 9.73 -35.35) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 6297488f-67b6-4b7f-8d23-14affe7b457f) + ) + (fp_text user "${REFERENCE}" (at 0 -16.51 90) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 7b5604a1-0401-43ff-9307-9cd978490a01) + ) + (fp_line (start -1.33 -34.35) (end 1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp a6b1701d-2707-475b-8b0d-abcae891e562)) + (fp_line (start -1.33 -1.27) (end -1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp da883b15-790e-4487-a1e3-b77d8ad9a8eb)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 44806017-46dc-4769-b0f0-7c519da6e5d0)) + (fp_line (start -1.33 0) (end -1.33 1.33) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 9f026e27-3998-4b56-a53f-ac29e5a0745d)) + (fp_line (start -1.33 1.33) (end 0 1.33) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 7bd91bce-9c4a-468b-b904-cc1e1ed4f061)) + (fp_line (start 1.33 -1.27) (end 1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp a51ebf15-90a3-451d-9c3d-9d68122ee434)) + (fp_line (start -1.8 -34.8) (end 1.8 -34.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 2d070cd7-74ea-4bd9-9ce0-10f2cf0e72cf)) + (fp_line (start -1.8 1.8) (end -1.8 -34.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 857da28e-94b5-4cf5-a981-85466f42552b)) + (fp_line (start 1.8 -34.8) (end 1.8 1.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp a127a92d-9451-4603-9666-e3b729779ab5)) + (fp_line (start 1.8 1.8) (end -1.8 1.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 82d30e06-61ca-4324-ac48-3fece223c1ea)) + (fp_line (start -1.27 -34.29) (end -1.27 0.635) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 22086de8-1b1e-4e40-9555-6eef739ed518)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp a63a9e54-674d-4926-9196-62a1a1b1a845)) + (fp_line (start -0.635 1.27) (end 1.27 1.27) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 220e35d0-c224-42f2-a787-eab1fdb2bc4b)) + (fp_line (start 1.27 -34.29) (end -1.27 -34.29) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 9ad03b53-ef8a-4f3a-be09-c79beb057d5c)) + (fp_line (start 1.27 1.27) (end 1.27 -34.29) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 0cb63cc5-f6e2-4ffd-85c3-a9e0425df48e)) + (pad "1" thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 15 "/GND") (pinfunction "Pin_1") (pintype "passive") (tstamp a7df3545-249c-4ea5-92c2-2faa10e5d1db)) + (pad "2" thru_hole oval (at 0 -2.54 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 16 "/CANRX2") (pinfunction "Pin_2") (pintype "passive") (tstamp 3563350d-fda2-4d4b-b5b5-aa90e944933d)) + (pad "3" thru_hole oval (at 0 -5.08 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 17 "/CANTX2") (pinfunction "Pin_3") (pintype "passive") (tstamp 07ba857a-368a-434f-b4f7-55f0ab15def9)) + (pad "4" thru_hole oval (at 0 -7.62 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 18 "Net-(J2-Pin_4)") (pinfunction "Pin_4") (pintype "passive") (tstamp 66230308-4106-4560-b86a-9c31575245e6)) + (pad "5" thru_hole oval (at 0 -10.16 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 29 "Net-(J2-Pin_5)") (pinfunction "Pin_5") (pintype "passive") (tstamp bf9e2ef3-dcfc-45ca-bfb0-d4af95885b3c)) + (pad "6" thru_hole oval (at 0 -12.7 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 30 "Net-(J2-Pin_6)") (pinfunction "Pin_6") (pintype "passive") (tstamp b7c321af-029b-47be-80b9-9fd2162aba47)) + (pad "7" thru_hole oval (at 0 -15.24 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 19 "Net-(J2-Pin_7)") (pinfunction "Pin_7") (pintype "passive") (tstamp 0747edf9-2c35-40d2-8fc6-2ce77a43ba36)) + (pad "8" thru_hole oval (at 0 -17.78 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 20 "Net-(J2-Pin_8)") (pinfunction "Pin_8") (pintype "passive") (tstamp 355b3b72-7212-400a-8518-4b86463d5889)) + (pad "9" thru_hole oval (at 0 -20.32 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 31 "/RX3") (pinfunction "Pin_9") (pintype "passive") (tstamp 8d07f967-2cfc-4300-a88d-4187f3a44ca3)) + (pad "10" thru_hole oval (at 0 -22.86 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 32 "/TX3") (pinfunction "Pin_10") (pintype "passive") (tstamp 374704e6-3095-4f14-888b-69fd9ade460a)) + (pad "11" thru_hole oval (at 0 -25.4 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 23 "Net-(J2-Pin_11)") (pinfunction "Pin_11") (pintype "passive") (tstamp 7b06c8ba-3353-48a7-8ed8-0bdc51b96e8e)) + (pad "12" thru_hole oval (at 0 -27.94 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 24 "Net-(J2-Pin_12)") (pinfunction "Pin_12") (pintype "passive") (tstamp b6535d45-8e08-45fb-b1ed-75023a12f255)) + (pad "13" thru_hole oval (at 0 -30.48 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 25 "/MOSI") (pinfunction "Pin_13") (pintype "passive") (tstamp f0760fce-c00d-46a7-940a-88b08baf237f)) + (pad "14" thru_hole oval (at 0 -33.02 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 26 "/MISO") (pinfunction "Pin_14") (pintype "passive") (tstamp 6ba8310a-7516-40b8-909b-c691e8bf8f93)) + (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x14_P2.54mm_Vertical.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x14_P2.54mm_Vertical" (layer "B.Cu") + (tstamp c1b8e44c-45a1-445f-b186-da35ede6be8b) + (at 150.61 66.04 180) + (descr "Through hole straight pin header, 1x14, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x14 2.54mm single row") + (property "Sheetfile" "teensyBMSadapter.kicad_sch") + (property "Sheetname" "") + (property "ki_description" "Generic connector, single row, 01x14, script generated") + (property "ki_keywords" "connector") + (path "/e7b85242-0b8b-494e-b713-98b9b536947c") + (attr through_hole) + (fp_text reference "J3" (at 1.86 0.29) (layer "B.SilkS") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 62459ebc-6c05-4511-abce-db1b5b9467d6) + ) + (fp_text value "Conn_01x14_Pin" (at 0 -35.35) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp ca26a447-5cce-4c55-8bd1-0177dcc68315) + ) + (fp_text user "${REFERENCE}" (at 0 -16.51 90) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 8351e774-b122-411e-bc5e-14e3f278bce6) + ) + (fp_line (start -1.33 -34.35) (end 1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp e62eab2c-70e7-4866-9f9f-cb4479a41d69)) + (fp_line (start -1.33 -1.27) (end -1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 06cb1b0e-5563-49d1-a277-beace3c5f24e)) + (fp_line (start -1.33 -1.27) (end 1.33 -1.27) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 25044cbe-49d2-4826-9ba5-9fc544532f4e)) + (fp_line (start -1.33 0) (end -1.33 1.33) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 1a5b77de-d515-45fa-871a-e2591c874235)) + (fp_line (start -1.33 1.33) (end 0 1.33) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 381206ed-f9ce-4da1-8ed9-f9891b6db423)) + (fp_line (start 1.33 -1.27) (end 1.33 -34.35) + (stroke (width 0.12) (type solid)) (layer "B.SilkS") (tstamp 0ccf6ba6-c449-4631-b933-b6eb53a1f249)) + (fp_line (start -1.8 -34.8) (end 1.8 -34.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 19ec4ec2-d83b-4ab9-a095-8caaac2a19d5)) + (fp_line (start -1.8 1.8) (end -1.8 -34.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp b87948a4-8d09-431a-a829-2eeb0f23196c)) + (fp_line (start 1.8 -34.8) (end 1.8 1.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp 6578a84e-b123-48fb-8bc4-29f7dde8943b)) + (fp_line (start 1.8 1.8) (end -1.8 1.8) + (stroke (width 0.05) (type solid)) (layer "B.CrtYd") (tstamp f0e50ef5-8540-44a9-9e99-8fe0bc4e5b13)) + (fp_line (start -1.27 -34.29) (end -1.27 0.635) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 916b5d8b-ce9a-4865-9130-47a1c836a7ca)) + (fp_line (start -1.27 0.635) (end -0.635 1.27) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 999579fd-473e-4bb3-86fc-452f80ccb561)) + (fp_line (start -0.635 1.27) (end 1.27 1.27) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp 6d9c8c18-3701-4936-b00f-7b28011e9963)) + (fp_line (start 1.27 -34.29) (end -1.27 -34.29) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp e8b89ab3-45c0-4c2a-b578-211acf830258)) + (fp_line (start 1.27 1.27) (end 1.27 -34.29) + (stroke (width 0.1) (type solid)) (layer "B.Fab") (tstamp e26e7081-6ebf-4f53-8505-d969400c89e3)) + (pad "1" thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 1 "Net-(J1-Pin_1)") (pinfunction "Pin_1") (pintype "passive") (tstamp 785c2467-f3ff-4458-b8e6-51788cb04542)) + (pad "2" thru_hole oval (at 0 -2.54 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 2 "Net-(J1-Pin_2)") (pinfunction "Pin_2") (pintype "passive") (tstamp d5b41b42-da6d-4395-9fe3-1bd14f86da6f)) + (pad "3" thru_hole oval (at 0 -5.08 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 3 "Net-(J1-Pin_3)") (pinfunction "Pin_3") (pintype "passive") (tstamp 5bc239db-c203-45b4-a941-216d42b399e7)) + (pad "4" thru_hole oval (at 0 -7.62 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 27 "/IO1") (pinfunction "Pin_4") (pintype "passive") (tstamp d8a0e428-8c86-4e67-9476-084fcabceaa7)) + (pad "5" thru_hole oval (at 0 -10.16 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 28 "/IO2") (pinfunction "Pin_5") (pintype "passive") (tstamp 9d0bd50c-9c87-4932-a4d9-c0391cae3123)) + (pad "6" thru_hole oval (at 0 -12.7 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 6 "/A7") (pinfunction "Pin_6") (pintype "passive") (tstamp 5238ff21-a4f7-4bfd-985b-f652d69205c4)) + (pad "7" thru_hole oval (at 0 -15.24 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 7 "/A6") (pinfunction "Pin_7") (pintype "passive") (tstamp 0a282154-30cd-46fd-9abe-debeea0f07c4)) + (pad "8" thru_hole oval (at 0 -17.78 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 8 "/A5") (pinfunction "Pin_8") (pintype "passive") (tstamp cf0fe01a-64d5-4f7f-aeff-40d83d339169)) + (pad "9" thru_hole oval (at 0 -20.32 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 9 "/A4") (pinfunction "Pin_9") (pintype "passive") (tstamp ab4588ec-78b1-4bd2-85a4-a435e2eba539)) + (pad "10" thru_hole oval (at 0 -22.86 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 33 "/P17") (pinfunction "Pin_10") (pintype "passive") (tstamp 43299b61-ecbb-4eed-b66c-b044020660a9)) + (pad "11" thru_hole oval (at 0 -25.4 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 34 "/P18") (pinfunction "Pin_11") (pintype "passive") (tstamp 0de822be-5d08-46b8-8974-0587dfdb59e3)) + (pad "12" thru_hole oval (at 0 -27.94 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 10 "/A3") (pinfunction "Pin_12") (pintype "passive") (tstamp eda6a5cd-5bed-4a12-a865-dd72f938fe28)) + (pad "13" thru_hole oval (at 0 -30.48 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 11 "/A2") (pinfunction "Pin_13") (pintype "passive") (tstamp d295cde7-341b-4dda-9b58-2ea0ea037f97)) + (pad "14" thru_hole oval (at 0 -33.02 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") + (net 14 "/LED{slash}SCK") (pinfunction "Pin_14") (pintype "passive") (tstamp 395c1837-7270-4898-8e84-fbbfc68e3db0)) + (model "${KICAD6_3DMODEL_DIR}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x14_P2.54mm_Vertical.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_rect (start 129.5 64) (end 152.75 101) + (stroke (width 0.1) (type default)) (fill none) (layer "Edge.Cuts") (tstamp f57b8165-bbc3-43a5-a3f6-a1c4fcfab9f4)) + (gr_text "Teensy 4.0 SIMPBMS adapter" (at 144.6 86.7 90) (layer "F.SilkS") (tstamp 1e84de2d-554c-4cd8-8227-550d6fe4a179) + (effects (font (size 1 1) (thickness 0.15)) (justify left bottom)) + ) + (gr_text "kitOffgrid" (at 137.5 100) (layer "F.SilkS") (tstamp cbb43d44-e0e8-437e-9f3a-5ee916d5b5ec) + (effects (font (size 1 1) (thickness 0.15)) (justify left bottom)) + ) + + (segment (start 146.5 66.04) (end 150.36 66.04) (width 1) (layer "F.Cu") (net 1) (tstamp 04e149d0-92d7-477d-94c6-a99236f0783c)) + (segment (start 150.36 68.58) (end 146.5 68.58) (width 1) (layer "F.Cu") (net 2) (tstamp de6469c3-5fed-4a71-82c4-b9f18c484541)) + (segment (start 146.5 71.12) (end 150.36 71.12) (width 1) (layer "F.Cu") (net 3) (tstamp b4ca9109-b572-45b3-b29c-80247d5125a1)) + (segment (start 142.05 79) (end 144 79) (width 1) (layer "F.Cu") (net 4) (tstamp 6ddc71af-37ec-4396-9d98-3791d9467d4d)) + (via (at 144 79) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 4) (tstamp a447bcfc-bb8b-4793-bc7f-249b681ee67e)) + (segment (start 144 75) (end 145.34 73.66) (width 1) (layer "B.Cu") (net 4) (tstamp 261ceb4a-a4a0-49d8-9118-dde204d01bc9)) + (segment (start 144 79) (end 144 75) (width 1) (layer "B.Cu") (net 4) (tstamp 77c83b1d-61d2-481e-b74e-d2c57f9fc29e)) + (segment (start 145.34 73.66) (end 146.5 73.66) (width 1) (layer "B.Cu") (net 4) (tstamp e3b3aa58-baad-4b13-ab52-94ffe3e2a17f)) + (segment (start 146.3 76) (end 146.5 76.2) (width 1) (layer "F.Cu") (net 5) (tstamp 286edc7c-ca17-4ef1-ae9a-3703c2813800)) + (segment (start 142.05 76) (end 146.3 76) (width 1) (layer "F.Cu") (net 5) (tstamp cb43f1ae-865f-4c77-8b05-e25b6ca2d7e7)) + (segment (start 150.36 78.74) (end 146.5 78.74) (width 1) (layer "F.Cu") (net 6) (tstamp 2b157ced-bdc2-470d-a6df-9da8a67bb4cc)) + (segment (start 146.5 81.28) (end 150.36 81.28) (width 1) (layer "F.Cu") (net 7) (tstamp 3a34288a-e156-4a13-84af-83358c23ec4f)) + (segment (start 146.5 83.82) (end 150.36 83.82) (width 1) (layer "F.Cu") (net 8) (tstamp 7eaab8d8-29bd-43cf-9ca9-5f365fa800f4)) + (segment (start 150.36 86.36) (end 146.5 86.36) (width 1) (layer "F.Cu") (net 9) (tstamp c38f7be1-caa0-4daf-b04b-7d411d50c59b)) + (segment (start 149 91.491701) (end 149 92.37) (width 0.25) (layer "F.Cu") (net 10) (tstamp 038ccfd4-cb23-4480-905d-7a8023c4bf6a)) + (segment (start 146.75 88.9) (end 146.75 89.241701) (width 0.25) (layer "F.Cu") (net 10) (tstamp 13d5b3bd-e653-494c-b59d-05b9a565f3eb)) + (segment (start 146.75 89.241701) (end 149 91.491701) (width 0.25) (layer "F.Cu") (net 10) (tstamp 266e1453-b19d-488b-8f60-dee8f9386cb8)) + (segment (start 149 92.37) (end 150.61 93.98) (width 0.25) (layer "F.Cu") (net 10) (tstamp 9133a530-a65a-4662-b986-fc643ddc677e)) + (segment (start 148.5 93.19) (end 146.75 91.44) (width 0.25) (layer "F.Cu") (net 11) (tstamp 49dd1850-be6d-4617-acb7-562ce5b30c93)) + (segment (start 150.61 96.52) (end 148.5 94.41) (width 0.25) (layer "F.Cu") (net 11) (tstamp c187ca57-1e75-40d5-90cf-d992e1ebcf10)) + (segment (start 148.5 94.41) (end 148.5 93.19) (width 0.25) (layer "F.Cu") (net 11) (tstamp fb507eb7-f7f5-49a2-acca-f5860d304735)) + (segment (start 138.75 88.3) (end 144.43 93.98) (width 0.25) (layer "F.Cu") (net 12) (tstamp 4cbde1e7-843f-4f44-b5ad-2ef886110a0e)) + (segment (start 144.43 93.98) (end 146.75 93.98) (width 0.25) (layer "F.Cu") (net 12) (tstamp e93be622-3bec-4d2f-abf0-dab9bb06fed7)) + (segment (start 138.75 93.8) (end 141.05 93.8) (width 0.25) (layer "F.Cu") (net 13) (tstamp 6d7923d3-3742-494a-b13f-f7b7fddaca12)) + (segment (start 141.05 93.8) (end 143.77 96.52) (width 0.25) (layer "F.Cu") (net 13) (tstamp 75f85412-fac2-45b2-8a6b-90e460c797d1)) + (segment (start 143.77 96.52) (end 146.75 96.52) (width 0.25) (layer "F.Cu") (net 13) (tstamp cff5aaba-8183-47e4-a82f-1486a7a6f6f1)) + (segment (start 146.5 99.06) (end 150.36 99.06) (width 1) (layer "F.Cu") (net 14) (tstamp ae0da65a-83b5-4d4b-935c-5da61a3288e6)) + (segment (start 131.5 66.04) (end 135.48 66.04) (width 1) (layer "F.Cu") (net 15) (tstamp 48ecb1fc-cf22-4802-8cdb-7a5ede43652c)) + (segment (start 140.96 66.04) (end 141 66) (width 1) (layer "F.Cu") (net 15) (tstamp bed28598-408e-4d6d-9fde-5800362fd097)) + (segment (start 135.48 66.04) (end 140.96 66.04) (width 1) (layer "F.Cu") (net 15) (tstamp cac09f50-cdba-46ee-aa7d-a58a93faa0cf)) + (segment (start 131.5 68.58) (end 135.48 68.58) (width 1) (layer "F.Cu") (net 16) (tstamp 98f74dad-33d9-4c19-960c-b0f3f88eda3f)) + (segment (start 141 69) (end 135.9 69) (width 1) (layer "F.Cu") (net 16) (tstamp ad533112-cd33-461f-bef7-b607b6ff4d25)) + (segment (start 135.9 69) (end 135.48 68.58) (width 1) (layer "F.Cu") (net 16) (tstamp c3cb80fd-d3b8-4c27-8f6c-2c9c2c4a36e8)) + (segment (start 140.12 71.12) (end 141 72) (width 1) (layer "F.Cu") (net 17) (tstamp 3da4351f-36f6-4795-96b9-e1de03e0b45e)) + (segment (start 135.48 71.12) (end 140.12 71.12) (width 1) (layer "F.Cu") (net 17) (tstamp 47ce2a0d-5168-407f-8eaf-a40b23b615dc)) + (segment (start 131.5 71.12) (end 135.48 71.12) (width 1) (layer "F.Cu") (net 17) (tstamp f019085b-b7ed-455a-a562-e01b699df17d)) + (segment (start 131.5 73.66) (end 135.48 73.66) (width 1) (layer "F.Cu") (net 18) (tstamp d8a6456e-0dc3-4eb7-ab1d-4c80f7e73627)) + (segment (start 131.5 81.28) (end 135.48 81.28) (width 1) (layer "F.Cu") (net 19) (tstamp 21e34252-2a07-43dc-9b92-02a8b33aa09e)) + (segment (start 135.48 83.82) (end 131.5 83.82) (width 1) (layer "F.Cu") (net 20) (tstamp 63bef9b0-a9eb-421d-9cf1-b7a717776bd1)) + (segment (start 136.5 85) (end 134.5 85) (width 0.25) (layer "F.Cu") (net 21) (tstamp 1a3934dc-1f68-438a-bb05-200521320129)) + (segment (start 140.7 84.25) (end 137.25 84.25) (width 0.25) (layer "F.Cu") (net 21) (tstamp 45e4a6a3-8e0e-4d22-9c52-73d4ff3f45d2)) + (segment (start 134 85.5) (end 134 88.94) (width 0.25) (layer "F.Cu") (net 21) (tstamp 53bed2fc-abea-4ad7-a6e3-2758591f1289)) + (segment (start 137.25 84.25) (end 136.5 85) (width 0.25) (layer "F.Cu") (net 21) (tstamp 8df71015-744b-477a-9eaa-637cfd8c6adc)) + (segment (start 140.85 84.1) (end 140.7 84.25) (width 0.25) (layer "F.Cu") (net 21) (tstamp aa8b933e-22c8-4f2a-9f95-00fc0ba1c16d)) + (segment (start 134 88.94) (end 131.5 91.44) (width 0.25) (layer "F.Cu") (net 21) (tstamp bba0d227-84fe-4e0b-b3cc-2fa869f70f4c)) + (segment (start 134.5 85) (end 134 85.5) (width 0.25) (layer "F.Cu") (net 21) (tstamp fe7a2d6b-dec1-4cfe-958a-42e103ba5642)) + (segment (start 141.5 90) (end 141.5 88.25) (width 0.25) (layer "F.Cu") (net 22) (tstamp 16b77171-229a-41c1-875a-f7f8ab947b03)) + (segment (start 141.5 88.25) (end 141.45 88.2) (width 0.25) (layer "F.Cu") (net 22) (tstamp 9badd38a-d190-48da-995b-d9ed57c6112d)) + (via (at 141.5 90) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 22) (tstamp 2d837e88-9be3-4810-9fa9-d15b2e380474)) + (segment (start 141.5 90) (end 141.5 91) (width 0.25) (layer "B.Cu") (net 22) (tstamp 0a441882-222c-48d4-8537-37949e5b1721)) + (segment (start 132.77 95.25) (end 131.5 93.98) (width 0.25) (layer "B.Cu") (net 22) (tstamp 27364969-503b-4b3d-8c80-2724e8d48e5a)) + (segment (start 137.25 95.25) (end 132.77 95.25) (width 0.25) (layer "B.Cu") (net 22) (tstamp c45413bc-1791-4317-b2fa-d10ba7d38fcf)) + (segment (start 141.5 91) (end 137.25 95.25) (width 0.25) (layer "B.Cu") (net 22) (tstamp c6dedbc1-c5ef-4917-86e8-9e4da435fffd)) + (segment (start 134 89.5) (end 134 90.5) (width 0.25) (layer "B.Cu") (net 23) (tstamp 184c1696-c52b-4856-842f-be340fc4f8dd)) + (segment (start 133.5 89) (end 134 89.5) (width 0.25) (layer "B.Cu") (net 23) (tstamp 42dffd32-f93c-472b-92b8-3edf815474e4)) + (segment (start 131.5 86.36) (end 132.86 86.36) (width 0.25) (layer "B.Cu") (net 23) (tstamp 67849fee-0b39-4126-b0c7-2d6a025d5b9b)) + (segment (start 134.94 91.44) (end 135.48 91.44) (width 0.25) (layer "B.Cu") (net 23) (tstamp 6ece3364-5868-42ce-b329-520ef6a8462a)) + (segment (start 133.5 87) (end 133.5 89) (width 0.25) (layer "B.Cu") (net 23) (tstamp b8f35488-0d62-47a8-9264-ad9f3e8bfd89)) + (segment (start 132.86 86.36) (end 133.5 87) (width 0.25) (layer "B.Cu") (net 23) (tstamp bac9dea4-8f76-425e-95c5-303a67b0410d)) + (segment (start 134 90.5) (end 134.94 91.44) (width 0.25) (layer "B.Cu") (net 23) (tstamp ca200446-114c-4a67-9ca9-1e26ed448177)) + (segment (start 135.48 93.48) (end 132.5 90.5) (width 0.25) (layer "B.Cu") (net 24) (tstamp 225e8f06-a6b8-4dbf-84a4-d327df32a502)) + (segment (start 135.48 93.98) (end 135.48 93.48) (width 0.25) (layer "B.Cu") (net 24) (tstamp 612c7eb2-c32e-47ff-ae82-5522a5ae1c62)) + (segment (start 132.5 90.5) (end 132.5 89.9) (width 0.25) (layer "B.Cu") (net 24) (tstamp fae38723-b82d-46e3-8e98-ab259e31505f)) + (segment (start 132.5 89.9) (end 131.5 88.9) (width 0.25) (layer "B.Cu") (net 24) (tstamp fe554ed9-34ed-40e4-b694-c452942ffac6)) + (segment (start 131.5 96.52) (end 135.48 96.52) (width 1) (layer "F.Cu") (net 25) (tstamp 5386ff0a-648e-4928-b115-5284bb93ea79)) + (segment (start 135.48 99.06) (end 131.5 99.06) (width 1) (layer "F.Cu") (net 26) (tstamp c0153554-d78b-40c2-b1d9-1b157f48f8f4)) + (segment (start 145.25 74.5) (end 137 74.5) (width 0.25) (layer "F.Cu") (net 27) (tstamp 06c5fd1f-ed4d-40dc-a9fb-d25adbb0e434)) + (segment (start 145.75 75) (end 145.25 74.5) (width 0.25) (layer "F.Cu") (net 27) (tstamp 080ac15c-9156-4903-b5d3-ab848454068a)) + (segment (start 136.5 75) (end 132.7 75) (width 0.25) (layer "F.Cu") (net 27) (tstamp 3bf43e14-ea8e-4e8d-a708-f933879e40f2)) + (segment (start 137 74.5) (end 136.5 75) (width 0.25) (layer "F.Cu") (net 27) (tstamp 7b3e62b5-6b7b-423e-82a4-9d0a1b04076f)) + (segment (start 132.7 75) (end 131.5 76.2) (width 0.25) (layer "F.Cu") (net 27) (tstamp 81be3970-87ab-4975-a0c7-eaa586639057)) + (segment (start 149.02 75) (end 145.75 75) (width 0.25) (layer "F.Cu") (net 27) (tstamp 96cfd8cd-1e25-43ca-a7df-fd3c047bd8b0)) + (segment (start 150.36 73.66) (end 149.02 75) (width 0.25) (layer "F.Cu") (net 27) (tstamp 9b444598-e164-4891-84d8-a1ff9882d56c)) + (segment (start 148.995 77.565) (end 150.36 76.2) (width 0.25) (layer "F.Cu") (net 28) (tstamp 0b4308e3-7172-400b-9573-31e358626726)) + (segment (start 132.675 77.565) (end 148.995 77.565) (width 0.25) (layer "F.Cu") (net 28) (tstamp 4e84329d-263d-441f-805c-2447d70ba5ea)) + (segment (start 131.5 78.74) (end 132.675 77.565) (width 0.25) (layer "F.Cu") (net 28) (tstamp 9041e8c9-187e-4a3f-b4cf-d88b7f9f5654)) + (segment (start 138.5 76) (end 140.75 76) (width 1) (layer "F.Cu") (net 29) (tstamp 1fa6dfd5-82a1-44e9-8b99-aa05d53b4ca1)) + (segment (start 135.48 76.2) (end 138.3 76.2) (width 1) (layer "F.Cu") (net 29) (tstamp 780d47e2-ef6c-44de-8891-ba1ed9184374)) + (segment (start 138.3 76.2) (end 138.5 76) (width 1) (layer "F.Cu") (net 29) (tstamp e258fbab-9cf4-4b39-975c-dc7e37d7f0af)) + (segment (start 140.49 78.74) (end 140.75 79) (width 1) (layer "F.Cu") (net 30) (tstamp 09ccedc6-005e-4dec-a945-41a1dfec081e)) + (segment (start 135.48 78.74) (end 140.49 78.74) (width 1) (layer "F.Cu") (net 30) (tstamp fae5160d-8f11-4bcd-95e2-6e0cf8dde00b)) + (segment (start 138.11 86.36) (end 138.75 87) (width 0.25) (layer "F.Cu") (net 31) (tstamp 99739f46-8752-411e-b735-9aa5f85dfa37)) + (segment (start 135.48 86.36) (end 138.11 86.36) (width 0.25) (layer "F.Cu") (net 31) (tstamp fc72e862-d1cb-477a-9984-dbcc4d543188)) + (segment (start 138.75 90.75) (end 138.75 92.5) (width 0.25) (layer "F.Cu") (net 32) (tstamp dbae0858-7632-4e68-bf91-82b504786f68)) + (via (at 138.75 90.75) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 32) (tstamp fbebb416-a414-4f1c-ae6c-a4964d0ef2e3)) + (segment (start 136.9 88.9) (end 138.75 90.75) (width 0.25) (layer "B.Cu") (net 32) (tstamp 27c8f6a9-eff8-415d-ae8a-d501aab753df)) + (segment (start 135.48 88.9) (end 136.9 88.9) (width 0.25) (layer "B.Cu") (net 32) (tstamp 3989603c-0c28-4273-824b-58b976013603)) + (segment (start 144.5 84.25) (end 142.3 84.25) (width 0.25) (layer "F.Cu") (net 33) (tstamp 150c3974-3d26-4c17-a21a-481c1b4d670f)) + (segment (start 142.3 84.25) (end 142.15 84.1) (width 0.25) (layer "F.Cu") (net 33) (tstamp cfc44259-8b61-4efd-994a-b2f84399759f)) + (via (at 144.5 84.25) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 33) (tstamp 8ecc4332-f4bd-48d4-8adb-1a9edd3d0815)) + (segment (start 149.435 87.725) (end 145.725 87.725) (width 0.25) (layer "B.Cu") (net 33) (tstamp 2602f143-2537-4bc8-8749-cd19660e1d7a)) + (segment (start 145 87) (end 145 84.75) (width 0.25) (layer "B.Cu") (net 33) (tstamp 4b52aa48-3950-42c9-9b96-6098d54f05f1)) + (segment (start 145 84.75) (end 144.5 84.25) (width 0.25) (layer "B.Cu") (net 33) (tstamp b98782a2-20cd-4e98-89e1-12742955a5f2)) + (segment (start 145.725 87.725) (end 145 87) (width 0.25) (layer "B.Cu") (net 33) (tstamp eeda5fde-b31b-4a33-a04f-9277ffebf40e)) + (segment (start 150.61 88.9) (end 149.435 87.725) (width 0.25) (layer "B.Cu") (net 33) (tstamp fdbbc781-4658-420d-8876-d37506138a85)) + (segment (start 144 89.45) (end 142.75 88.2) (width 0.25) (layer "F.Cu") (net 34) (tstamp 68570df1-02a4-4d55-96b3-3be43644f500)) + (segment (start 144 90) (end 144 89.45) (width 0.25) (layer "F.Cu") (net 34) (tstamp 9e574366-98b7-4829-b378-e512f652f772)) + (via (at 144 90) (size 0.8) (drill 0.4) (layers "F.Cu" "B.Cu") (net 34) (tstamp a3b49dce-f3ee-4ff0-a37b-36cf0d93f1ed)) + (segment (start 144.25 90.25) (end 144 90) (width 0.25) (layer "B.Cu") (net 34) (tstamp 010b64e9-75ce-4b7e-8926-df636e6faec3)) + (segment (start 150.61 91.44) (end 149.42 90.25) (width 0.25) (layer "B.Cu") (net 34) (tstamp 3a1020aa-deba-4f18-a7c3-65793b811c78)) + (segment (start 149.42 90.25) (end 145 90.25) (width 0.25) (layer "B.Cu") (net 34) (tstamp 5e7115d2-19cd-4594-a51c-8d0ee133477f)) + (segment (start 145 90.25) (end 144.25 90.25) (width 0.25) (layer "B.Cu") (net 34) (tstamp f5addb6f-1368-4a3d-9da4-dc79fced9aa6)) + + (zone (net 15) (net_name "/GND") (layers "F&B.Cu") (tstamp ddcb4ad3-c2e5-4728-92aa-5327b693d52a) (hatch edge 0.5) + (connect_pads (clearance 0.5)) + (min_thickness 0.25) (filled_areas_thickness no) + (fill yes (thermal_gap 0.5) (thermal_bridge_width 0.5)) + (polygon + (pts + (xy 130 64.25) + (xy 152.25 64.25) + (xy 152.25 100.75) + (xy 130 100.75) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 152.193039 64.269685) + (xy 152.238794 64.322489) + (xy 152.25 64.374) + (xy 152.25 100.626) + (xy 152.230315 100.693039) + (xy 152.177511 100.738794) + (xy 152.126 100.75) + (xy 130.124 100.75) + (xy 130.056961 100.730315) + (xy 130.011206 100.677511) + (xy 130 100.626) + (xy 130 99.598123) + (xy 130.019685 99.531084) + (xy 130.072489 99.485329) + (xy 130.141647 99.475385) + (xy 130.205203 99.50441) + (xy 130.23638 99.545716) + (xy 130.325965 99.73783) + (xy 130.325967 99.737834) + (xy 130.434281 99.892521) + (xy 130.461505 99.931401) + (xy 130.628599 100.098495) + (xy 130.725384 100.166264) + (xy 130.822165 100.234032) + (xy 130.822167 100.234033) + (xy 130.82217 100.234035) + (xy 131.036337 100.333903) + (xy 131.264592 100.395063) + (xy 131.452918 100.411539) + (xy 131.499999 100.415659) + (xy 131.5 100.415659) + (xy 131.500001 100.415659) + (xy 131.539234 100.412226) + (xy 131.735408 100.395063) + (xy 131.963663 100.333903) + (xy 132.17783 100.234035) + (xy 132.371401 100.098495) + (xy 132.373077 100.096819) + (xy 132.373995 100.096317) + (xy 132.375544 100.095018) + (xy 132.375805 100.095329) + (xy 132.4344 100.063334) + (xy 132.460758 100.0605) + (xy 134.519242 100.0605) + (xy 134.586281 100.080185) + (xy 134.606923 100.096819) + (xy 134.608599 100.098495) + (xy 134.705384 100.166264) + (xy 134.802165 100.234032) + (xy 134.802167 100.234033) + (xy 134.80217 100.234035) + (xy 135.016337 100.333903) + (xy 135.244592 100.395063) + (xy 135.432918 100.411539) + (xy 135.479999 100.415659) + (xy 135.48 100.415659) + (xy 135.480001 100.415659) + (xy 135.519234 100.412226) + (xy 135.715408 100.395063) + (xy 135.943663 100.333903) + (xy 136.15783 100.234035) + (xy 136.351401 100.098495) + (xy 136.518495 99.931401) + (xy 136.654035 99.73783) + (xy 136.753903 99.523663) + (xy 136.815063 99.295408) + (xy 136.835659 99.06) + (xy 136.815063 98.824592) + (xy 136.753903 98.596337) + (xy 136.654035 98.382171) + (xy 136.518495 98.188599) + (xy 136.518494 98.188597) + (xy 136.351402 98.021506) + (xy 136.351396 98.021501) + (xy 136.165842 97.891575) + (xy 136.122217 97.836998) + (xy 136.115023 97.7675) + (xy 136.146546 97.705145) + (xy 136.165842 97.688425) + (xy 136.188026 97.672891) + (xy 136.351401 97.558495) + (xy 136.518495 97.391401) + (xy 136.654035 97.19783) + (xy 136.753903 96.983663) + (xy 136.815063 96.755408) + (xy 136.835659 96.52) + (xy 136.815063 96.284592) + (xy 136.753903 96.056337) + (xy 136.654035 95.842171) + (xy 136.653652 95.841623) + (xy 136.518494 95.648597) + (xy 136.351402 95.481506) + (xy 136.351401 95.481505) + (xy 136.165842 95.351575) + (xy 136.165841 95.351574) + (xy 136.122216 95.296997) + (xy 136.115024 95.227498) + (xy 136.146546 95.165144) + (xy 136.165836 95.148428) + (xy 136.351401 95.018495) + (xy 136.518495 94.851401) + (xy 136.654035 94.65783) + (xy 136.753903 94.443663) + (xy 136.815063 94.215408) + (xy 136.835659 93.98) + (xy 136.815063 93.744592) + (xy 136.753903 93.516337) + (xy 136.654035 93.302171) + (xy 136.653652 93.301623) + (xy 136.518494 93.108597) + (xy 136.351402 92.941506) + (xy 136.351396 92.941501) + (xy 136.165842 92.811575) + (xy 136.122217 92.756998) + (xy 136.115023 92.6875) + (xy 136.146546 92.625145) + (xy 136.165842 92.608425) + (xy 136.188026 92.592891) + (xy 136.351401 92.478495) + (xy 136.518495 92.311401) + (xy 136.654035 92.11783) + (xy 136.753903 91.903663) + (xy 136.815063 91.675408) + (xy 136.835659 91.44) + (xy 136.815063 91.204592) + (xy 136.753903 90.976337) + (xy 136.654035 90.762171) + (xy 136.645513 90.749999) + (xy 136.518494 90.568597) + (xy 136.351402 90.401506) + (xy 136.351401 90.401505) + (xy 136.165842 90.271575) + (xy 136.165841 90.271574) + (xy 136.122216 90.216997) + (xy 136.115024 90.147498) + (xy 136.146546 90.085144) + (xy 136.165836 90.068428) + (xy 136.351401 89.938495) + (xy 136.518495 89.771401) + (xy 136.654035 89.57783) + (xy 136.753903 89.363663) + (xy 136.815063 89.135408) + (xy 136.835659 88.9) + (xy 136.815063 88.664592) + (xy 136.753903 88.436337) + (xy 136.654035 88.222171) + (xy 136.518495 88.028599) + (xy 136.518494 88.028597) + (xy 136.351402 87.861506) + (xy 136.351396 87.861501) + (xy 136.165842 87.731575) + (xy 136.122217 87.676998) + (xy 136.115023 87.6075) + (xy 136.146546 87.545145) + (xy 136.165842 87.528425) + (xy 136.3345 87.410329) + (xy 136.351401 87.398495) + (xy 136.518495 87.231401) + (xy 136.653651 87.038377) + (xy 136.708229 86.994752) + (xy 136.755227 86.9855) + (xy 137.370353 86.9855) + (xy 137.437392 87.005185) + (xy 137.483147 87.057989) + (xy 137.494353 87.1095) + (xy 137.494353 87.500002) + (xy 137.499499 87.57196) + (xy 137.4995 87.571965) + (xy 137.510454 87.60927) + (xy 137.514215 87.66185) + (xy 137.494353 87.799999) + (xy 137.494353 88.371889) + (xy 137.514834 88.514341) + (xy 137.514834 88.514343) + (xy 137.525028 88.549059) + (xy 137.555342 88.6523) + (xy 137.575567 88.696585) + (xy 137.615129 88.783215) + (xy 137.615129 88.783217) + (xy 137.661432 88.855266) + (xy 137.690416 88.900366) + (xy 137.692862 88.904171) + (xy 137.692864 88.904175) + (xy 137.787108 89.012938) + (xy 137.78711 89.012941) + (xy 137.895762 89.107088) + (xy 137.895771 89.107094) + (xy 137.895774 89.107097) + (xy 137.895779 89.1071) + (xy 137.895783 89.107103) + (xy 138.016833 89.184897) + (xy 138.016856 89.18491) + (xy 138.148028 89.244814) + (xy 138.149737 89.24525) + (xy 138.285723 89.28518) + (xy 138.285724 89.28518) + (xy 138.285727 89.285181) + (xy 138.328162 89.291281) + (xy 138.428038 89.305642) + (xy 138.484397 89.305642) + (xy 138.484414 89.305647) + (xy 138.535764 89.305647) + (xy 138.819695 89.305647) + (xy 138.886734 89.325332) + (xy 138.907376 89.341966) + (xy 139.321833 89.756423) + (xy 139.355318 89.817746) + (xy 139.350334 89.887438) + (xy 139.308462 89.943371) + (xy 139.242998 89.967788) + (xy 139.183716 89.957383) + (xy 139.029807 89.888857) + (xy 139.029802 89.888855) + (xy 138.884 89.857865) + (xy 138.844646 89.8495) + (xy 138.655354 89.8495) + (xy 138.622897 89.856398) + (xy 138.470197 89.888855) + (xy 138.470192 89.888857) + (xy 138.29727 89.965848) + (xy 138.297265 89.965851) + (xy 138.144129 90.077111) + (xy 138.017466 90.217785) + (xy 137.922821 90.381715) + (xy 137.922818 90.381722) + (xy 137.873921 90.532214) + (xy 137.864326 90.561744) + (xy 137.84454 90.75) + (xy 137.864326 90.938256) + (xy 137.864327 90.938259) + (xy 137.922818 91.118277) + (xy 137.922821 91.118284) + (xy 138.017467 91.282216) + (xy 138.060772 91.33031) + (xy 138.09265 91.365715) + (xy 138.12288 91.428706) + (xy 138.1245 91.448687) + (xy 138.1245 91.486241) + (xy 138.104815 91.55328) + (xy 138.052014 91.599034) + (xy 138.016848 91.615094) + (xy 138.016828 91.615105) + (xy 137.895783 91.692896) + (xy 137.895762 91.692912) + (xy 137.78713 91.787041) + (xy 137.787111 91.787058) + (xy 137.78711 91.78706) + (xy 137.692861 91.89583) + (xy 137.692859 91.895832) + (xy 137.692859 91.895833) + (xy 137.692857 91.895836) + (xy 137.615131 92.016778) + (xy 137.615129 92.016784) + (xy 137.555342 92.1477) + (xy 137.514834 92.285656) + (xy 137.514834 92.285658) + (xy 137.494353 92.42811) + (xy 137.494353 93.000002) + (xy 137.499499 93.07196) + (xy 137.4995 93.071965) + (xy 137.510454 93.10927) + (xy 137.514215 93.16185) + (xy 137.494353 93.299999) + (xy 137.494353 93.871889) + (xy 137.514834 94.014341) + (xy 137.514834 94.014343) + (xy 137.514835 94.014345) + (xy 137.555342 94.1523) + (xy 137.584163 94.215408) + (xy 137.615129 94.283215) + (xy 137.615129 94.283217) + (xy 137.646117 94.331435) + (xy 137.687215 94.395385) + (xy 137.692862 94.404171) + (xy 137.692864 94.404175) + (xy 137.787108 94.512938) + (xy 137.78711 94.512941) + (xy 137.895762 94.607088) + (xy 137.895771 94.607094) + (xy 137.895774 94.607097) + (xy 137.895779 94.6071) + (xy 137.895783 94.607103) + (xy 138.016833 94.684897) + (xy 138.016856 94.68491) + (xy 138.148028 94.744814) + (xy 138.149737 94.74525) + (xy 138.285723 94.78518) + (xy 138.285724 94.78518) + (xy 138.285727 94.785181) + (xy 138.328162 94.791281) + (xy 138.428038 94.805642) + (xy 138.484397 94.805642) + (xy 138.484414 94.805647) + (xy 138.535764 94.805647) + (xy 139.015556 94.805647) + (xy 139.015603 94.805642) + (xy 139.071961 94.805642) + (xy 139.071962 94.805642) + (xy 139.186491 94.789175) + (xy 139.205501 94.786442) + (xy 139.214277 94.78518) + (xy 139.214278 94.78518) + (xy 139.35237 94.744632) + (xy 139.352381 94.744627) + (xy 139.483143 94.68491) + (xy 139.483147 94.684907) + (xy 139.483155 94.684904) + (xy 139.604226 94.607097) + (xy 139.712887 94.512943) + (xy 139.71289 94.51294) + (xy 139.751573 94.468296) + (xy 139.810351 94.430523) + (xy 139.845286 94.4255) + (xy 140.739548 94.4255) + (xy 140.806587 94.445185) + (xy 140.827229 94.461819) + (xy 143.269197 96.903788) + (xy 143.279022 96.916051) + (xy 143.279243 96.915869) + (xy 143.284211 96.921874) + (xy 143.333932 96.968566) + (xy 143.335332 96.969923) + (xy 143.355523 96.990115) + (xy 143.355527 96.990118) + (xy 143.355529 96.99012) + (xy 143.361011 96.994373) + (xy 143.365443 96.998157) + (xy 143.399418 97.030062) + (xy 143.416976 97.039714) + (xy 143.433233 97.050393) + (xy 143.449064 97.062673) + (xy 143.468737 97.071186) + (xy 143.491833 97.081182) + (xy 143.497077 97.08375) + (xy 143.537908 97.106197) + (xy 143.550523 97.109435) + (xy 143.557305 97.111177) + (xy 143.575719 97.117481) + (xy 143.594104 97.125438) + (xy 143.640157 97.132732) + (xy 143.645826 97.133906) + (xy 143.690981 97.1455) + (xy 143.711016 97.1455) + (xy 143.730413 97.147026) + (xy 143.750196 97.15016) + (xy 143.796583 97.145775) + (xy 143.802422 97.1455) + (xy 145.474773 97.1455) + (xy 145.541812 97.165185) + (xy 145.576348 97.198377) + (xy 145.711501 97.391396) + (xy 145.711506 97.391402) + (xy 145.878597 97.558493) + (xy 145.878603 97.558498) + (xy 146.064158 97.688425) + (xy 146.107783 97.743002) + (xy 146.114977 97.8125) + (xy 146.083454 97.874855) + (xy 146.064158 97.891575) + (xy 145.878597 98.021505) + (xy 145.711505 98.188597) + (xy 145.575965 98.382169) + (xy 145.575964 98.382171) + (xy 145.476098 98.596335) + (xy 145.476094 98.596344) + (xy 145.414938 98.824586) + (xy 145.414936 98.824596) + (xy 145.394341 99.059999) + (xy 145.394341 99.06) + (xy 145.414936 99.295403) + (xy 145.414938 99.295413) + (xy 145.476094 99.523655) + (xy 145.476096 99.523659) + (xy 145.476097 99.523663) + (xy 145.575965 99.737829) + (xy 145.575965 99.73783) + (xy 145.575967 99.737834) + (xy 145.684281 99.892521) + (xy 145.711505 99.931401) + (xy 145.878599 100.098495) + (xy 145.975384 100.166265) + (xy 146.072165 100.234032) + (xy 146.072167 100.234033) + (xy 146.07217 100.234035) + (xy 146.286337 100.333903) + (xy 146.514592 100.395063) + (xy 146.702918 100.411539) + (xy 146.749999 100.415659) + (xy 146.75 100.415659) + (xy 146.750001 100.415659) + (xy 146.789234 100.412226) + (xy 146.985408 100.395063) + (xy 147.213663 100.333903) + (xy 147.42783 100.234035) + (xy 147.621401 100.098495) + (xy 147.623077 100.096819) + (xy 147.623995 100.096317) + (xy 147.625544 100.095018) + (xy 147.625805 100.095329) + (xy 147.6844 100.063334) + (xy 147.710758 100.0605) + (xy 149.649242 100.0605) + (xy 149.716281 100.080185) + (xy 149.736923 100.096819) + (xy 149.738599 100.098495) + (xy 149.835384 100.166265) + (xy 149.932165 100.234032) + (xy 149.932167 100.234033) + (xy 149.93217 100.234035) + (xy 150.146337 100.333903) + (xy 150.374592 100.395063) + (xy 150.562918 100.411539) + (xy 150.609999 100.415659) + (xy 150.61 100.415659) + (xy 150.610001 100.415659) + (xy 150.649234 100.412226) + (xy 150.845408 100.395063) + (xy 151.073663 100.333903) + (xy 151.28783 100.234035) + (xy 151.481401 100.098495) + (xy 151.648495 99.931401) + (xy 151.784035 99.73783) + (xy 151.883903 99.523663) + (xy 151.945063 99.295408) + (xy 151.965659 99.06) + (xy 151.945063 98.824592) + (xy 151.883903 98.596337) + (xy 151.784035 98.382171) + (xy 151.648495 98.188599) + (xy 151.648494 98.188597) + (xy 151.481402 98.021506) + (xy 151.481396 98.021501) + (xy 151.295842 97.891575) + (xy 151.252217 97.836998) + (xy 151.245023 97.7675) + (xy 151.276546 97.705145) + (xy 151.295842 97.688425) + (xy 151.318026 97.672891) + (xy 151.481401 97.558495) + (xy 151.648495 97.391401) + (xy 151.784035 97.19783) + (xy 151.883903 96.983663) + (xy 151.945063 96.755408) + (xy 151.965659 96.52) + (xy 151.945063 96.284592) + (xy 151.883903 96.056337) + (xy 151.784035 95.842171) + (xy 151.783652 95.841623) + (xy 151.648494 95.648597) + (xy 151.481402 95.481506) + (xy 151.481401 95.481505) + (xy 151.295842 95.351575) + (xy 151.295841 95.351574) + (xy 151.252216 95.296997) + (xy 151.245024 95.227498) + (xy 151.276546 95.165144) + (xy 151.295836 95.148428) + (xy 151.481401 95.018495) + (xy 151.648495 94.851401) + (xy 151.784035 94.65783) + (xy 151.883903 94.443663) + (xy 151.945063 94.215408) + (xy 151.965659 93.98) + (xy 151.945063 93.744592) + (xy 151.883903 93.516337) + (xy 151.784035 93.302171) + (xy 151.783652 93.301623) + (xy 151.648494 93.108597) + (xy 151.481402 92.941506) + (xy 151.481396 92.941501) + (xy 151.295842 92.811575) + (xy 151.252217 92.756998) + (xy 151.245023 92.6875) + (xy 151.276546 92.625145) + (xy 151.295842 92.608425) + (xy 151.318026 92.592891) + (xy 151.481401 92.478495) + (xy 151.648495 92.311401) + (xy 151.784035 92.11783) + (xy 151.883903 91.903663) + (xy 151.945063 91.675408) + (xy 151.965659 91.44) + (xy 151.945063 91.204592) + (xy 151.883903 90.976337) + (xy 151.784035 90.762171) + (xy 151.775513 90.749999) + (xy 151.648494 90.568597) + (xy 151.481402 90.401506) + (xy 151.481401 90.401505) + (xy 151.295842 90.271575) + (xy 151.295841 90.271574) + (xy 151.252216 90.216997) + (xy 151.245024 90.147498) + (xy 151.276546 90.085144) + (xy 151.295836 90.068428) + (xy 151.481401 89.938495) + (xy 151.648495 89.771401) + (xy 151.784035 89.57783) + (xy 151.883903 89.363663) + (xy 151.945063 89.135408) + (xy 151.965659 88.9) + (xy 151.945063 88.664592) + (xy 151.883903 88.436337) + (xy 151.784035 88.222171) + (xy 151.648495 88.028599) + (xy 151.648494 88.028597) + (xy 151.481402 87.861506) + (xy 151.481396 87.861501) + (xy 151.295842 87.731575) + (xy 151.252217 87.676998) + (xy 151.245023 87.6075) + (xy 151.276546 87.545145) + (xy 151.295842 87.528425) + (xy 151.4645 87.410329) + (xy 151.481401 87.398495) + (xy 151.648495 87.231401) + (xy 151.784035 87.03783) + (xy 151.883903 86.823663) + (xy 151.945063 86.595408) + (xy 151.965659 86.36) + (xy 151.945063 86.124592) + (xy 151.883903 85.896337) + (xy 151.784035 85.682171) + (xy 151.740072 85.619384) + (xy 151.648494 85.488597) + (xy 151.481402 85.321506) + (xy 151.481401 85.321505) + (xy 151.295842 85.191575) + (xy 151.295841 85.191574) + (xy 151.252216 85.136997) + (xy 151.245024 85.067498) + (xy 151.276546 85.005144) + (xy 151.295836 84.988428) + (xy 151.481401 84.858495) + (xy 151.648495 84.691401) + (xy 151.784035 84.49783) + (xy 151.883903 84.283663) + (xy 151.945063 84.055408) + (xy 151.965659 83.82) + (xy 151.945063 83.584592) + (xy 151.883903 83.356337) + (xy 151.784035 83.142171) + (xy 151.780506 83.13713) + (xy 151.648494 82.948597) + (xy 151.481402 82.781506) + (xy 151.481396 82.781501) + (xy 151.295842 82.651575) + (xy 151.252217 82.596998) + (xy 151.245023 82.5275) + (xy 151.276546 82.465145) + (xy 151.295842 82.448425) + (xy 151.318026 82.432891) + (xy 151.481401 82.318495) + (xy 151.648495 82.151401) + (xy 151.784035 81.95783) + (xy 151.883903 81.743663) + (xy 151.945063 81.515408) + (xy 151.965659 81.28) + (xy 151.945063 81.044592) + (xy 151.883903 80.816337) + (xy 151.784035 80.602171) + (xy 151.648495 80.408599) + (xy 151.648494 80.408597) + (xy 151.481402 80.241506) + (xy 151.481401 80.241505) + (xy 151.295842 80.111575) + (xy 151.295841 80.111574) + (xy 151.252216 80.056997) + (xy 151.245024 79.987498) + (xy 151.276546 79.925144) + (xy 151.295836 79.908428) + (xy 151.481401 79.778495) + (xy 151.648495 79.611401) + (xy 151.784035 79.41783) + (xy 151.883903 79.203663) + (xy 151.945063 78.975408) + (xy 151.965659 78.74) + (xy 151.945063 78.504592) + (xy 151.883903 78.276337) + (xy 151.784035 78.062171) + (xy 151.648495 77.868599) + (xy 151.648494 77.868597) + (xy 151.481402 77.701506) + (xy 151.481396 77.701501) + (xy 151.295842 77.571575) + (xy 151.252217 77.516998) + (xy 151.245023 77.4475) + (xy 151.276546 77.385145) + (xy 151.295842 77.368425) + (xy 151.318026 77.352891) + (xy 151.481401 77.238495) + (xy 151.648495 77.071401) + (xy 151.784035 76.87783) + (xy 151.883903 76.663663) + (xy 151.945063 76.435408) + (xy 151.965659 76.2) + (xy 151.945063 75.964592) + (xy 151.883903 75.736337) + (xy 151.784035 75.522171) + (xy 151.76723 75.49817) + (xy 151.648494 75.328597) + (xy 151.481402 75.161506) + (xy 151.481401 75.161505) + (xy 151.295842 75.031575) + (xy 151.295841 75.031574) + (xy 151.252216 74.976997) + (xy 151.245024 74.907498) + (xy 151.276546 74.845144) + (xy 151.295836 74.828428) + (xy 151.481401 74.698495) + (xy 151.648495 74.531401) + (xy 151.784035 74.33783) + (xy 151.883903 74.123663) + (xy 151.945063 73.895408) + (xy 151.965659 73.66) + (xy 151.945063 73.424592) + (xy 151.883903 73.196337) + (xy 151.784035 72.982171) + (xy 151.769627 72.961593) + (xy 151.648494 72.788597) + (xy 151.481402 72.621506) + (xy 151.481396 72.621501) + (xy 151.295842 72.491575) + (xy 151.252217 72.436998) + (xy 151.245023 72.3675) + (xy 151.276546 72.305145) + (xy 151.295842 72.288425) + (xy 151.396452 72.217977) + (xy 151.481401 72.158495) + (xy 151.648495 71.991401) + (xy 151.784035 71.79783) + (xy 151.883903 71.583663) + (xy 151.945063 71.355408) + (xy 151.965659 71.12) + (xy 151.945063 70.884592) + (xy 151.883903 70.656337) + (xy 151.784035 70.442171) + (xy 151.707974 70.333543) + (xy 151.648494 70.248597) + (xy 151.481402 70.081506) + (xy 151.481401 70.081505) + (xy 151.359746 69.996321) + (xy 151.295841 69.951574) + (xy 151.252216 69.896997) + (xy 151.245024 69.827498) + (xy 151.276546 69.765144) + (xy 151.295836 69.748428) + (xy 151.481401 69.618495) + (xy 151.648495 69.451401) + (xy 151.784035 69.25783) + (xy 151.883903 69.043663) + (xy 151.945063 68.815408) + (xy 151.965659 68.58) + (xy 151.945063 68.344592) + (xy 151.883903 68.116337) + (xy 151.784035 67.902171) + (xy 151.673789 67.744723) + (xy 151.648496 67.7086) + (xy 151.648495 67.708599) + (xy 151.526567 67.586671) + (xy 151.493084 67.525351) + (xy 151.498068 67.455659) + (xy 151.539939 67.399725) + (xy 151.570915 67.38281) + (xy 151.702331 67.333796) + (xy 151.817546 67.247546) + (xy 151.903796 67.132331) + (xy 151.954091 66.997483) + (xy 151.9605 66.937873) + (xy 151.960499 65.142128) + (xy 151.954091 65.082517) + (xy 151.913081 64.972564) + (xy 151.903797 64.947671) + (xy 151.903793 64.947664) + (xy 151.817547 64.832455) + (xy 151.817544 64.832452) + (xy 151.702335 64.746206) + (xy 151.702328 64.746202) + (xy 151.567482 64.695908) + (xy 151.567483 64.695908) + (xy 151.507883 64.689501) + (xy 151.507881 64.6895) + (xy 151.507873 64.6895) + (xy 151.507864 64.6895) + (xy 149.712129 64.6895) + (xy 149.712123 64.689501) + (xy 149.652516 64.695908) + (xy 149.517671 64.746202) + (xy 149.517664 64.746206) + (xy 149.402455 64.832452) + (xy 149.402452 64.832455) + (xy 149.316206 64.947664) + (xy 149.316204 64.947668) + (xy 149.316204 64.947669) + (xy 149.312039 64.958834) + (xy 149.270171 65.014766) + (xy 149.204707 65.039184) + (xy 149.195859 65.0395) + (xy 148.164141 65.0395) + (xy 148.097102 65.019815) + (xy 148.051347 64.967011) + (xy 148.047969 64.958859) + (xy 148.043796 64.947669) + (xy 148.043793 64.947665) + (xy 148.043793 64.947664) + (xy 147.957547 64.832455) + (xy 147.957544 64.832452) + (xy 147.842335 64.746206) + (xy 147.842328 64.746202) + (xy 147.707482 64.695908) + (xy 147.707483 64.695908) + (xy 147.647883 64.689501) + (xy 147.647881 64.6895) + (xy 147.647873 64.6895) + (xy 147.647864 64.6895) + (xy 145.852129 64.6895) + (xy 145.852123 64.689501) + (xy 145.792516 64.695908) + (xy 145.657671 64.746202) + (xy 145.657664 64.746206) + (xy 145.542455 64.832452) + (xy 145.542452 64.832455) + (xy 145.456206 64.947664) + (xy 145.456202 64.947671) + (xy 145.405908 65.082517) + (xy 145.399501 65.142116) + (xy 145.399501 65.142123) + (xy 145.3995 65.142135) + (xy 145.3995 66.93787) + (xy 145.399501 66.937876) + (xy 145.405908 66.997483) + (xy 145.456202 67.132328) + (xy 145.456206 67.132335) + (xy 145.542452 67.247544) + (xy 145.542455 67.247547) + (xy 145.657664 67.333793) + (xy 145.657671 67.333797) + (xy 145.789081 67.38281) + (xy 145.845015 67.424681) + (xy 145.869432 67.490145) + (xy 145.85458 67.558418) + (xy 145.83343 67.586673) + (xy 145.711503 67.7086) + (xy 145.575965 67.902169) + (xy 145.575964 67.902171) + (xy 145.476098 68.116335) + (xy 145.476094 68.116344) + (xy 145.414938 68.344586) + (xy 145.414936 68.344596) + (xy 145.394341 68.579999) + (xy 145.394341 68.58) + (xy 145.414936 68.815403) + (xy 145.414938 68.815413) + (xy 145.476094 69.043655) + (xy 145.476096 69.043659) + (xy 145.476097 69.043663) + (xy 145.55738 69.217975) + (xy 145.575965 69.25783) + (xy 145.575967 69.257834) + (xy 145.711501 69.451395) + (xy 145.711506 69.451402) + (xy 145.878597 69.618493) + (xy 145.878603 69.618498) + (xy 146.064158 69.748425) + (xy 146.107783 69.803002) + (xy 146.114977 69.8725) + (xy 146.083454 69.934855) + (xy 146.064158 69.951575) + (xy 145.878597 70.081505) + (xy 145.711505 70.248597) + (xy 145.575965 70.442169) + (xy 145.575964 70.442171) + (xy 145.476098 70.656335) + (xy 145.476094 70.656344) + (xy 145.414938 70.884586) + (xy 145.414936 70.884596) + (xy 145.394341 71.119999) + (xy 145.394341 71.12) + (xy 145.414936 71.355403) + (xy 145.414938 71.355413) + (xy 145.476094 71.583655) + (xy 145.476096 71.583659) + (xy 145.476097 71.583663) + (xy 145.568593 71.78202) + (xy 145.575965 71.79783) + (xy 145.575967 71.797834) + (xy 145.711501 71.991395) + (xy 145.711506 71.991402) + (xy 145.878597 72.158493) + (xy 145.878603 72.158498) + (xy 146.064158 72.288425) + (xy 146.107783 72.343002) + (xy 146.114977 72.4125) + (xy 146.083454 72.474855) + (xy 146.064158 72.491575) + (xy 145.878597 72.621505) + (xy 145.711505 72.788597) + (xy 145.575965 72.982169) + (xy 145.575964 72.982171) + (xy 145.476098 73.196335) + (xy 145.476094 73.196344) + (xy 145.414938 73.424586) + (xy 145.414936 73.424596) + (xy 145.394341 73.659999) + (xy 145.394341 73.660003) + (xy 145.40092 73.735211) + (xy 145.387153 73.803711) + (xy 145.338537 73.853893) + (xy 145.277555 73.868953) + (xy 145.27757 73.869106) + (xy 145.276548 73.869202) + (xy 145.273498 73.869956) + (xy 145.269805 73.869839) + (xy 145.223416 73.874225) + (xy 145.217578 73.8745) + (xy 137.082743 73.8745) + (xy 137.067122 73.872775) + (xy 137.067096 73.873061) + (xy 137.059333 73.872326) + (xy 136.991153 73.874469) + (xy 136.989206 73.8745) + (xy 136.96065 73.8745) + (xy 136.960648 73.8745) + (xy 136.959968 73.874543) + (xy 136.959778 73.8745) + (xy 136.956755 73.8745) + (xy 136.956755 73.873814) + (xy 136.891826 73.859103) + (xy 136.842848 73.809273) + (xy 136.828586 73.740874) + (xy 136.828646 73.740155) + (xy 136.835659 73.66) + (xy 136.815063 73.424592) + (xy 136.753903 73.196337) + (xy 136.654035 72.982171) + (xy 136.639627 72.961593) + (xy 136.518494 72.788597) + (xy 136.351402 72.621506) + (xy 136.351396 72.621501) + (xy 136.165842 72.491575) + (xy 136.122217 72.436998) + (xy 136.115023 72.3675) + (xy 136.146546 72.305145) + (xy 136.165842 72.288425) + (xy 136.266452 72.217977) + (xy 136.351401 72.158495) + (xy 136.353077 72.156819) + (xy 136.353995 72.156317) + (xy 136.355544 72.155018) + (xy 136.355805 72.155329) + (xy 136.4144 72.123334) + (xy 136.440758 72.1205) + (xy 139.642557 72.1205) + (xy 139.709596 72.140185) + (xy 139.755351 72.192989) + (xy 139.761555 72.212972) + (xy 139.762392 72.212748) + (xy 139.820423 72.429325) + (xy 139.820424 72.429327) + (xy 139.820425 72.42933) + (xy 139.866661 72.528484) + (xy 139.912897 72.627638) + (xy 139.912898 72.627639) + (xy 140.038402 72.806877) + (xy 140.193123 72.961598) + (xy 140.372361 73.087102) + (xy 140.57067 73.179575) + (xy 140.782023 73.236207) + (xy 140.964926 73.252208) + (xy 140.999998 73.255277) + (xy 141 73.255277) + (xy 141.000002 73.255277) + (xy 141.028254 73.252805) + (xy 141.217977 73.236207) + (xy 141.42933 73.179575) + (xy 141.627639 73.087102) + (xy 141.806877 72.961598) + (xy 141.961598 72.806877) + (xy 142.087102 72.627639) + (xy 142.179575 72.42933) + (xy 142.236207 72.217977) + (xy 142.255277 72) + (xy 142.236207 71.782023) + (xy 142.183057 71.583664) + (xy 142.179577 71.570677) + (xy 142.179576 71.570676) + (xy 142.179575 71.57067) + (xy 142.087102 71.372362) + (xy 142.0871 71.372359) + (xy 142.087099 71.372357) + (xy 141.961599 71.193124) + (xy 141.888474 71.119999) + (xy 141.806877 71.038402) + (xy 141.627639 70.912898) + (xy 141.62764 70.912898) + (xy 141.627638 70.912897) + (xy 141.528484 70.866661) + (xy 141.42933 70.820425) + (xy 141.429327 70.820424) + (xy 141.429325 70.820423) + (xy 141.21798 70.763793) + (xy 141.212649 70.762854) + (xy 141.212934 70.761234) + (xy 141.154839 70.738509) + (xy 141.143042 70.728121) + (xy 140.879477 70.464557) + (xy 140.845993 70.403235) + (xy 140.850977 70.333543) + (xy 140.892849 70.27761) + (xy 140.958313 70.253193) + (xy 140.977961 70.253348) + (xy 141 70.255277) + (xy 141 70.255276) + (xy 141.000001 70.255277) + (xy 141.000002 70.255277) + (xy 141.028254 70.252805) + (xy 141.217977 70.236207) + (xy 141.42933 70.179575) + (xy 141.627639 70.087102) + (xy 141.806877 69.961598) + (xy 141.961598 69.806877) + (xy 142.087102 69.627639) + (xy 142.179575 69.42933) + (xy 142.236207 69.217977) + (xy 142.255277 69) + (xy 142.236207 68.782023) + (xy 142.179575 68.57067) + (xy 142.087102 68.372362) + (xy 142.0871 68.372359) + (xy 142.087099 68.372357) + (xy 141.961599 68.193124) + (xy 141.88481 68.116335) + (xy 141.806877 68.038402) + (xy 141.627639 67.912898) + (xy 141.62764 67.912898) + (xy 141.627638 67.912897) + (xy 141.528484 67.866661) + (xy 141.42933 67.820425) + (xy 141.429326 67.820424) + (xy 141.429322 67.820422) + (xy 141.217977 67.763793) + (xy 141.000002 67.744723) + (xy 140.999998 67.744723) + (xy 140.854682 67.757436) + (xy 140.782023 67.763793) + (xy 140.78202 67.763793) + (xy 140.570677 67.820422) + (xy 140.570668 67.820426) + (xy 140.372361 67.912898) + (xy 140.372357 67.9129) + (xy 140.280707 67.977075) + (xy 140.214501 67.999402) + (xy 140.209584 67.9995) + (xy 136.778417 67.9995) + (xy 136.711378 67.979815) + (xy 136.666035 67.927904) + (xy 136.654037 67.902175) + (xy 136.654034 67.902169) + (xy 136.518496 67.7086) + (xy 136.518495 67.708599) + (xy 136.396179 67.586283) + (xy 136.362696 67.524963) + (xy 136.36768 67.455271) + (xy 136.409551 67.399337) + (xy 136.440529 67.382422) + (xy 136.572086 67.333354) + (xy 136.572093 67.33335) + (xy 136.687187 67.24719) + (xy 136.68719 67.247187) + (xy 136.77335 67.132093) + (xy 136.773354 67.132086) + (xy 136.806534 67.043124) + (xy 140.310426 67.043124) + (xy 140.372611 67.086666) + (xy 140.372613 67.086667) + (xy 140.57084 67.179101) + (xy 140.570849 67.179105) + (xy 140.782105 67.23571) + (xy 140.782115 67.235712) + (xy 140.999999 67.254775) + (xy 141.000001 67.254775) + (xy 141.217884 67.235712) + (xy 141.217894 67.23571) + (xy 141.42915 67.179105) + (xy 141.429159 67.179101) + (xy 141.627387 67.086666) + (xy 141.689572 67.043124) + (xy 141.000001 66.353553) + (xy 141 66.353553) + (xy 140.310426 67.043124) + (xy 136.806534 67.043124) + (xy 136.823596 66.997379) + (xy 136.823598 66.997372) + (xy 136.829999 66.937844) + (xy 136.83 66.937827) + (xy 136.83 66.29) + (xy 135.913686 66.29) + (xy 135.939493 66.249844) + (xy 135.98 66.111889) + (xy 135.98 66) + (xy 139.745225 66) + (xy 139.764287 66.217884) + (xy 139.764289 66.217894) + (xy 139.820894 66.42915) + (xy 139.820898 66.429159) + (xy 139.913335 66.627391) + (xy 139.956873 66.689571) + (xy 139.956875 66.689572) + (xy 140.646447 66) + (xy 141.353553 66) + (xy 142.043124 66.689572) + (xy 142.086666 66.627387) + (xy 142.179101 66.429159) + (xy 142.179105 66.42915) + (xy 142.23571 66.217894) + (xy 142.235712 66.217884) + (xy 142.254775 66) + (xy 142.254775 65.999999) + (xy 142.235712 65.782115) + (xy 142.23571 65.782105) + (xy 142.179105 65.570849) + (xy 142.179101 65.57084) + (xy 142.086668 65.372615) + (xy 142.043123 65.310428) + (xy 141.353553 65.999999) + (xy 141.353553 66) + (xy 140.646447 66) + (xy 140.646447 65.999999) + (xy 139.956875 65.310427) + (xy 139.956875 65.310428) + (xy 139.913333 65.372612) + (xy 139.913332 65.372614) + (xy 139.820898 65.57084) + (xy 139.820894 65.570849) + (xy 139.764289 65.782105) + (xy 139.764287 65.782115) + (xy 139.745225 65.999999) + (xy 139.745225 66) + (xy 135.98 66) + (xy 135.98 65.968111) + (xy 135.939493 65.830156) + (xy 135.913686 65.79) + (xy 136.83 65.79) + (xy 136.83 65.142172) + (xy 136.829999 65.142155) + (xy 136.823598 65.082627) + (xy 136.823596 65.08262) + (xy 136.776697 64.956875) + (xy 140.310427 64.956875) + (xy 141 65.646446) + (xy 141.000001 65.646446) + (xy 141.689572 64.956874) + (xy 141.689571 64.956873) + (xy 141.627391 64.913335) + (xy 141.429159 64.820898) + (xy 141.42915 64.820894) + (xy 141.217894 64.764289) + (xy 141.217884 64.764287) + (xy 141.000001 64.745225) + (xy 140.999999 64.745225) + (xy 140.782115 64.764287) + (xy 140.782105 64.764289) + (xy 140.570849 64.820894) + (xy 140.57084 64.820898) + (xy 140.372614 64.913332) + (xy 140.372612 64.913333) + (xy 140.310428 64.956875) + (xy 140.310427 64.956875) + (xy 136.776697 64.956875) + (xy 136.773354 64.947913) + (xy 136.77335 64.947906) + (xy 136.68719 64.832812) + (xy 136.687187 64.832809) + (xy 136.572093 64.746649) + (xy 136.572086 64.746645) + (xy 136.437379 64.696403) + (xy 136.437372 64.696401) + (xy 136.377844 64.69) + (xy 135.73 64.69) + (xy 135.73 65.604498) + (xy 135.622315 65.55532) + (xy 135.515763 65.54) + (xy 135.444237 65.54) + (xy 135.337685 65.55532) + (xy 135.23 65.604498) + (xy 135.23 64.69) + (xy 134.582155 64.69) + (xy 134.522627 64.696401) + (xy 134.52262 64.696403) + (xy 134.387913 64.746645) + (xy 134.387906 64.746649) + (xy 134.272812 64.832809) + (xy 134.272809 64.832812) + (xy 134.186649 64.947906) + (xy 134.186645 64.947913) + (xy 134.136403 65.08262) + (xy 134.136401 65.082627) + (xy 134.13 65.142155) + (xy 134.13 65.79) + (xy 135.046314 65.79) + (xy 135.020507 65.830156) + (xy 134.98 65.968111) + (xy 134.98 66.111889) + (xy 135.020507 66.249844) + (xy 135.046314 66.29) + (xy 134.13 66.29) + (xy 134.13 66.937844) + (xy 134.136401 66.997372) + (xy 134.136403 66.997379) + (xy 134.186645 67.132086) + (xy 134.186649 67.132093) + (xy 134.272809 67.247187) + (xy 134.272812 67.24719) + (xy 134.387906 67.33335) + (xy 134.387913 67.333354) + (xy 134.403903 67.339318) + (xy 134.459837 67.381189) + (xy 134.484254 67.446653) + (xy 134.469403 67.514926) + (xy 134.419998 67.564332) + (xy 134.36057 67.5795) + (xy 132.61943 67.5795) + (xy 132.552391 67.559815) + (xy 132.506636 67.507011) + (xy 132.496692 67.437853) + (xy 132.525717 67.374297) + (xy 132.576097 67.339318) + (xy 132.592086 67.333354) + (xy 132.592093 67.33335) + (xy 132.707187 67.24719) + (xy 132.70719 67.247187) + (xy 132.79335 67.132093) + (xy 132.793354 67.132086) + (xy 132.843596 66.997379) + (xy 132.843598 66.997372) + (xy 132.849999 66.937844) + (xy 132.85 66.937827) + (xy 132.85 66.29) + (xy 131.933686 66.29) + (xy 131.959493 66.249844) + (xy 132 66.111889) + (xy 132 65.968111) + (xy 131.959493 65.830156) + (xy 131.933686 65.79) + (xy 132.85 65.79) + (xy 132.85 65.142172) + (xy 132.849999 65.142155) + (xy 132.843598 65.082627) + (xy 132.843596 65.08262) + (xy 132.793354 64.947913) + (xy 132.79335 64.947906) + (xy 132.70719 64.832812) + (xy 132.707187 64.832809) + (xy 132.592093 64.746649) + (xy 132.592086 64.746645) + (xy 132.457379 64.696403) + (xy 132.457372 64.696401) + (xy 132.397844 64.69) + (xy 131.75 64.69) + (xy 131.75 65.604498) + (xy 131.642315 65.55532) + (xy 131.535763 65.54) + (xy 131.464237 65.54) + (xy 131.357685 65.55532) + (xy 131.25 65.604498) + (xy 131.25 64.69) + (xy 130.602155 64.69) + (xy 130.542627 64.696401) + (xy 130.54262 64.696403) + (xy 130.407913 64.746645) + (xy 130.407906 64.746649) + (xy 130.292812 64.832809) + (xy 130.223266 64.92571) + (xy 130.167332 64.96758) + (xy 130.09764 64.972564) + (xy 130.036318 64.939078) + (xy 130.002833 64.877754) + (xy 130 64.851398) + (xy 130 64.374) + (xy 130.019685 64.306961) + (xy 130.072489 64.261206) + (xy 130.124 64.25) + (xy 152.126 64.25) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 152.193039 64.269685) + (xy 152.238794 64.322489) + (xy 152.25 64.374) + (xy 152.25 100.626) + (xy 152.230315 100.693039) + (xy 152.177511 100.738794) + (xy 152.126 100.75) + (xy 130.124 100.75) + (xy 130.056961 100.730315) + (xy 130.011206 100.677511) + (xy 130 100.626) + (xy 130 99.598123) + (xy 130.019685 99.531084) + (xy 130.072489 99.485329) + (xy 130.141647 99.475385) + (xy 130.205203 99.50441) + (xy 130.23638 99.545716) + (xy 130.325965 99.73783) + (xy 130.325967 99.737834) + (xy 130.434281 99.892521) + (xy 130.461505 99.931401) + (xy 130.628599 100.098495) + (xy 130.725384 100.166264) + (xy 130.822165 100.234032) + (xy 130.822167 100.234033) + (xy 130.82217 100.234035) + (xy 131.036337 100.333903) + (xy 131.264592 100.395063) + (xy 131.452918 100.411539) + (xy 131.499999 100.415659) + (xy 131.5 100.415659) + (xy 131.500001 100.415659) + (xy 131.539234 100.412226) + (xy 131.735408 100.395063) + (xy 131.963663 100.333903) + (xy 132.17783 100.234035) + (xy 132.371401 100.098495) + (xy 132.538495 99.931401) + (xy 132.674035 99.73783) + (xy 132.773903 99.523663) + (xy 132.835063 99.295408) + (xy 132.855659 99.06) + (xy 132.835063 98.824592) + (xy 132.773903 98.596337) + (xy 132.674035 98.382171) + (xy 132.538495 98.188599) + (xy 132.538494 98.188597) + (xy 132.371402 98.021506) + (xy 132.371396 98.021501) + (xy 132.185842 97.891575) + (xy 132.142217 97.836998) + (xy 132.135023 97.7675) + (xy 132.166546 97.705145) + (xy 132.185842 97.688425) + (xy 132.208026 97.672891) + (xy 132.371401 97.558495) + (xy 132.538495 97.391401) + (xy 132.674035 97.19783) + (xy 132.773903 96.983663) + (xy 132.835063 96.755408) + (xy 132.855659 96.52) + (xy 132.835063 96.284592) + (xy 132.773903 96.056337) + (xy 132.771837 96.051906) + (xy 132.761344 95.982829) + (xy 132.789863 95.919045) + (xy 132.848339 95.880804) + (xy 132.884218 95.8755) + (xy 134.095782 95.8755) + (xy 134.162821 95.895185) + (xy 134.208576 95.947989) + (xy 134.21852 96.017147) + (xy 134.208163 96.051906) + (xy 134.206099 96.05633) + (xy 134.206094 96.056344) + (xy 134.144938 96.284586) + (xy 134.144936 96.284596) + (xy 134.124341 96.519999) + (xy 134.124341 96.52) + (xy 134.144936 96.755403) + (xy 134.144938 96.755413) + (xy 134.206094 96.983655) + (xy 134.206096 96.983659) + (xy 134.206097 96.983663) + (xy 134.305965 97.19783) + (xy 134.305967 97.197834) + (xy 134.441501 97.391395) + (xy 134.441506 97.391402) + (xy 134.608597 97.558493) + (xy 134.608603 97.558498) + (xy 134.794158 97.688425) + (xy 134.837783 97.743002) + (xy 134.844977 97.8125) + (xy 134.813454 97.874855) + (xy 134.794158 97.891575) + (xy 134.608597 98.021505) + (xy 134.441505 98.188597) + (xy 134.305965 98.382169) + (xy 134.305964 98.382171) + (xy 134.206098 98.596335) + (xy 134.206094 98.596344) + (xy 134.144938 98.824586) + (xy 134.144936 98.824596) + (xy 134.124341 99.059999) + (xy 134.124341 99.06) + (xy 134.144936 99.295403) + (xy 134.144938 99.295413) + (xy 134.206094 99.523655) + (xy 134.206096 99.523659) + (xy 134.206097 99.523663) + (xy 134.305964 99.737829) + (xy 134.305965 99.73783) + (xy 134.305967 99.737834) + (xy 134.414281 99.892521) + (xy 134.441505 99.931401) + (xy 134.608599 100.098495) + (xy 134.705384 100.166264) + (xy 134.802165 100.234032) + (xy 134.802167 100.234033) + (xy 134.80217 100.234035) + (xy 135.016337 100.333903) + (xy 135.244592 100.395063) + (xy 135.432918 100.411539) + (xy 135.479999 100.415659) + (xy 135.48 100.415659) + (xy 135.480001 100.415659) + (xy 135.519234 100.412226) + (xy 135.715408 100.395063) + (xy 135.943663 100.333903) + (xy 136.15783 100.234035) + (xy 136.351401 100.098495) + (xy 136.518495 99.931401) + (xy 136.654035 99.73783) + (xy 136.753903 99.523663) + (xy 136.815063 99.295408) + (xy 136.835659 99.06) + (xy 136.815063 98.824592) + (xy 136.753903 98.596337) + (xy 136.654035 98.382171) + (xy 136.518495 98.188599) + (xy 136.518494 98.188597) + (xy 136.351402 98.021506) + (xy 136.351396 98.021501) + (xy 136.165842 97.891575) + (xy 136.122217 97.836998) + (xy 136.115023 97.7675) + (xy 136.146546 97.705145) + (xy 136.165842 97.688425) + (xy 136.188026 97.672891) + (xy 136.351401 97.558495) + (xy 136.518495 97.391401) + (xy 136.654035 97.19783) + (xy 136.753903 96.983663) + (xy 136.815063 96.755408) + (xy 136.835659 96.52) + (xy 136.815063 96.284592) + (xy 136.753903 96.056337) + (xy 136.751837 96.051906) + (xy 136.741344 95.982829) + (xy 136.769863 95.919045) + (xy 136.828339 95.880804) + (xy 136.864218 95.8755) + (xy 137.167257 95.8755) + (xy 137.182877 95.877224) + (xy 137.182904 95.876939) + (xy 137.190666 95.877673) + (xy 137.190666 95.877672) + (xy 137.190667 95.877673) + (xy 137.193999 95.877568) + (xy 137.258847 95.875531) + (xy 137.260794 95.8755) + (xy 137.289347 95.8755) + (xy 137.28935 95.8755) + (xy 137.296228 95.87463) + (xy 137.302041 95.874172) + (xy 137.348627 95.872709) + (xy 137.367869 95.867117) + (xy 137.386912 95.863174) + (xy 137.406792 95.860664) + (xy 137.450122 95.843507) + (xy 137.455646 95.841617) + (xy 137.459396 95.840527) + (xy 137.50039 95.828618) + (xy 137.517629 95.818422) + (xy 137.535103 95.809862) + (xy 137.553727 95.802488) + (xy 137.553727 95.802487) + (xy 137.553732 95.802486) + (xy 137.591449 95.775082) + (xy 137.596305 95.771892) + (xy 137.63642 95.74817) + (xy 137.650589 95.733999) + (xy 137.665379 95.721368) + (xy 137.681587 95.709594) + (xy 137.711299 95.673676) + (xy 137.715212 95.669376) + (xy 141.883786 91.500802) + (xy 141.896048 91.49098) + (xy 141.895865 91.490759) + (xy 141.901873 91.485788) + (xy 141.901877 91.485786) + (xy 141.948649 91.435977) + (xy 141.949891 91.434697) + (xy 141.97012 91.41447) + (xy 141.974373 91.408986) + (xy 141.97815 91.404563) + (xy 142.010062 91.370582) + (xy 142.019714 91.353023) + (xy 142.030389 91.336772) + (xy 142.042674 91.320936) + (xy 142.061186 91.278152) + (xy 142.063742 91.272935) + (xy 142.086197 91.232092) + (xy 142.09118 91.21268) + (xy 142.097477 91.194291) + (xy 142.105438 91.175895) + (xy 142.112729 91.129853) + (xy 142.113908 91.124162) + (xy 142.1255 91.079019) + (xy 142.1255 91.058982) + (xy 142.127027 91.039582) + (xy 142.127757 91.034975) + (xy 142.13016 91.019804) + (xy 142.125775 90.973415) + (xy 142.1255 90.967577) + (xy 142.1255 90.698687) + (xy 142.145185 90.631648) + (xy 142.15735 90.615715) + (xy 142.199773 90.568599) + (xy 142.232533 90.532216) + (xy 142.327179 90.368284) + (xy 142.385674 90.188256) + (xy 142.40546 90) + (xy 142.385674 89.811744) + (xy 142.327179 89.631716) + (xy 142.232533 89.467784) + (xy 142.105871 89.327112) + (xy 142.103417 89.325329) + (xy 141.952734 89.215851) + (xy 141.952729 89.215848) + (xy 141.779807 89.138857) + (xy 141.779802 89.138855) + (xy 141.634001 89.107865) + (xy 141.594646 89.0995) + (xy 141.405354 89.0995) + (xy 141.372897 89.106398) + (xy 141.220197 89.138855) + (xy 141.220192 89.138857) + (xy 141.04727 89.215848) + (xy 141.047265 89.215851) + (xy 140.894129 89.327111) + (xy 140.767466 89.467785) + (xy 140.672821 89.631715) + (xy 140.672818 89.631722) + (xy 140.614327 89.81174) + (xy 140.614326 89.811744) + (xy 140.59454 90) + (xy 140.614326 90.188256) + (xy 140.614327 90.188259) + (xy 140.672818 90.368277) + (xy 140.672821 90.368284) + (xy 140.767467 90.532216) + (xy 140.800225 90.568597) + (xy 140.838319 90.610905) + (xy 140.868549 90.673896) + (xy 140.859924 90.743232) + (xy 140.83385 90.781558) + (xy 137.027228 94.588181) + (xy 136.965905 94.621666) + (xy 136.939547 94.6245) + (xy 136.864218 94.6245) + (xy 136.797179 94.604815) + (xy 136.751424 94.552011) + (xy 136.74148 94.482853) + (xy 136.751837 94.448094) + (xy 136.7539 94.443669) + (xy 136.753903 94.443663) + (xy 136.815063 94.215408) + (xy 136.835659 93.98) + (xy 136.815063 93.744592) + (xy 136.753903 93.516337) + (xy 136.654035 93.302171) + (xy 136.608068 93.236522) + (xy 136.518494 93.108597) + (xy 136.351402 92.941506) + (xy 136.351396 92.941501) + (xy 136.165842 92.811575) + (xy 136.122217 92.756998) + (xy 136.115023 92.6875) + (xy 136.146546 92.625145) + (xy 136.165842 92.608425) + (xy 136.188026 92.592891) + (xy 136.351401 92.478495) + (xy 136.518495 92.311401) + (xy 136.654035 92.11783) + (xy 136.753903 91.903663) + (xy 136.815063 91.675408) + (xy 136.835659 91.44) + (xy 136.815063 91.204592) + (xy 136.753903 90.976337) + (xy 136.654035 90.762171) + (xy 136.645513 90.749999) + (xy 136.518494 90.568597) + (xy 136.351402 90.401506) + (xy 136.351401 90.401505) + (xy 136.229746 90.316321) + (xy 136.165841 90.271574) + (xy 136.122216 90.216997) + (xy 136.115024 90.147498) + (xy 136.146546 90.085144) + (xy 136.165836 90.068428) + (xy 136.351401 89.938495) + (xy 136.518495 89.771401) + (xy 136.58542 89.675822) + (xy 136.639995 89.632198) + (xy 136.709494 89.625004) + (xy 136.771849 89.656526) + (xy 136.774672 89.659262) + (xy 137.303665 90.188256) + (xy 137.811038 90.695629) + (xy 137.844523 90.756952) + (xy 137.846678 90.770348) + (xy 137.848129 90.784148) + (xy 137.864326 90.938256) + (xy 137.864327 90.938259) + (xy 137.922818 91.118277) + (xy 137.922821 91.118284) + (xy 138.017467 91.282216) + (xy 138.097034 91.370584) + (xy 138.144129 91.422888) + (xy 138.297265 91.534148) + (xy 138.29727 91.534151) + (xy 138.470192 91.611142) + (xy 138.470197 91.611144) + (xy 138.655354 91.6505) + (xy 138.655355 91.6505) + (xy 138.844644 91.6505) + (xy 138.844646 91.6505) + (xy 139.029803 91.611144) + (xy 139.20273 91.534151) + (xy 139.355871 91.422888) + (xy 139.482533 91.282216) + (xy 139.577179 91.118284) + (xy 139.635674 90.938256) + (xy 139.65546 90.75) + (xy 139.635674 90.561744) + (xy 139.577179 90.381716) + (xy 139.482533 90.217784) + (xy 139.355871 90.077112) + (xy 139.351636 90.074035) + (xy 139.202734 89.965851) + (xy 139.202729 89.965848) + (xy 139.029807 89.888857) + (xy 139.029802 89.888855) + (xy 138.880124 89.857041) + (xy 138.844646 89.8495) + (xy 138.844645 89.8495) + (xy 138.785452 89.8495) + (xy 138.718413 89.829815) + (xy 138.697771 89.813181) + (xy 137.400803 88.516212) + (xy 137.39098 88.50395) + (xy 137.390759 88.504134) + (xy 137.385786 88.498122) + (xy 137.336066 88.451432) + (xy 137.334666 88.450075) + (xy 137.314476 88.429884) + (xy 137.308986 88.425625) + (xy 137.304561 88.421847) + (xy 137.270582 88.389938) + (xy 137.27058 88.389936) + (xy 137.270577 88.389935) + (xy 137.253029 88.380288) + (xy 137.236763 88.369604) + (xy 137.220936 88.357327) + (xy 137.220935 88.357326) + (xy 137.220933 88.357325) + (xy 137.178168 88.338818) + (xy 137.172922 88.336248) + (xy 137.132093 88.313803) + (xy 137.132092 88.313802) + (xy 137.112693 88.308822) + (xy 137.094281 88.302518) + (xy 137.075898 88.294562) + (xy 137.075892 88.29456) + (xy 137.029874 88.287272) + (xy 137.024152 88.286087) + (xy 136.979021 88.2745) + (xy 136.979019 88.2745) + (xy 136.958984 88.2745) + (xy 136.939586 88.272973) + (xy 136.932162 88.271797) + (xy 136.919805 88.26984) + (xy 136.919804 88.26984) + (xy 136.873416 88.274225) + (xy 136.867578 88.2745) + (xy 136.755227 88.2745) + (xy 136.688188 88.254815) + (xy 136.653652 88.221623) + (xy 136.518494 88.028597) + (xy 136.351402 87.861506) + (xy 136.351396 87.861501) + (xy 136.165842 87.731575) + (xy 136.122217 87.676998) + (xy 136.115023 87.6075) + (xy 136.146546 87.545145) + (xy 136.165842 87.528425) + (xy 136.261723 87.461288) + (xy 136.351401 87.398495) + (xy 136.518495 87.231401) + (xy 136.654035 87.03783) + (xy 136.753903 86.823663) + (xy 136.815063 86.595408) + (xy 136.835659 86.36) + (xy 136.815063 86.124592) + (xy 136.753903 85.896337) + (xy 136.654035 85.682171) + (xy 136.653652 85.681623) + (xy 136.518494 85.488597) + (xy 136.351402 85.321506) + (xy 136.351401 85.321505) + (xy 136.229746 85.236321) + (xy 136.165841 85.191574) + (xy 136.122216 85.136997) + (xy 136.115024 85.067498) + (xy 136.146546 85.005144) + (xy 136.165836 84.988428) + (xy 136.351401 84.858495) + (xy 136.518495 84.691401) + (xy 136.654035 84.49783) + (xy 136.753903 84.283663) + (xy 136.815063 84.055408) + (xy 136.835659 83.82) + (xy 136.815063 83.584592) + (xy 136.753903 83.356337) + (xy 136.654035 83.142171) + (xy 136.518495 82.948599) + (xy 136.518494 82.948597) + (xy 136.351402 82.781506) + (xy 136.351396 82.781501) + (xy 136.165842 82.651575) + (xy 136.122217 82.596998) + (xy 136.115023 82.5275) + (xy 136.146546 82.465145) + (xy 136.165842 82.448425) + (xy 136.188026 82.432891) + (xy 136.351401 82.318495) + (xy 136.518495 82.151401) + (xy 136.654035 81.95783) + (xy 136.753903 81.743663) + (xy 136.815063 81.515408) + (xy 136.835659 81.28) + (xy 136.815063 81.044592) + (xy 136.753903 80.816337) + (xy 136.654035 80.602171) + (xy 136.518495 80.408599) + (xy 136.518494 80.408597) + (xy 136.351402 80.241506) + (xy 136.351396 80.241501) + (xy 136.165842 80.111575) + (xy 136.122217 80.056998) + (xy 136.115023 79.9875) + (xy 136.146546 79.925145) + (xy 136.165842 79.908425) + (xy 136.244361 79.853445) + (xy 136.351401 79.778495) + (xy 136.518495 79.611401) + (xy 136.654035 79.41783) + (xy 136.753903 79.203663) + (xy 136.815063 78.975408) + (xy 136.835659 78.74) + (xy 136.815063 78.504592) + (xy 136.753903 78.276337) + (xy 136.654035 78.062171) + (xy 136.518495 77.868599) + (xy 136.518494 77.868597) + (xy 136.351402 77.701506) + (xy 136.351396 77.701501) + (xy 136.165842 77.571575) + (xy 136.122217 77.516998) + (xy 136.115023 77.4475) + (xy 136.146546 77.385145) + (xy 136.165842 77.368425) + (xy 136.188026 77.352891) + (xy 136.351401 77.238495) + (xy 136.518495 77.071401) + (xy 136.654035 76.87783) + (xy 136.753903 76.663663) + (xy 136.815063 76.435408) + (xy 136.835659 76.2) + (xy 136.815063 75.964592) + (xy 136.753903 75.736337) + (xy 136.654035 75.522171) + (xy 136.614552 75.465782) + (xy 136.518494 75.328597) + (xy 136.351402 75.161506) + (xy 136.351401 75.161505) + (xy 136.165842 75.031575) + (xy 136.165841 75.031574) + (xy 136.160965 75.025474) + (xy 142.994662 75.025474) + (xy 142.996707 75.041527) + (xy 142.999003 75.05956) + (xy 142.9995 75.067388) + (xy 142.999499 79.050743) + (xy 143.014925 79.202439) + (xy 143.075837 79.396579) + (xy 143.075844 79.396594) + (xy 143.174589 79.574499) + (xy 143.174592 79.574504) + (xy 143.307132 79.728893) + (xy 143.307134 79.728895) + (xy 143.468037 79.853445) + (xy 143.468038 79.853445) + (xy 143.468042 79.853448) + (xy 143.650729 79.94306) + (xy 143.847715 79.994063) + (xy 144.050936 80.004369) + (xy 144.252071 79.973556) + (xy 144.442887 79.902886) + (xy 144.615571 79.795252) + (xy 144.763053 79.655059) + (xy 144.879295 79.488049) + (xy 144.95954 79.301058) + (xy 145.0005 79.101741) + (xy 145.0005 75.465782) + (xy 145.020185 75.398743) + (xy 145.036819 75.378101) + (xy 145.355373 75.059547) + (xy 145.710074 74.704845) + (xy 145.771395 74.671362) + (xy 145.841086 74.676346) + (xy 145.87405 74.695552) + (xy 145.874164 74.69539) + (xy 145.876106 74.69675) + (xy 145.877457 74.697537) + (xy 145.8786 74.698496) + (xy 146.064158 74.828425) + (xy 146.107783 74.883002) + (xy 146.114977 74.9525) + (xy 146.083454 75.014855) + (xy 146.064158 75.031575) + (xy 145.878597 75.161505) + (xy 145.711505 75.328597) + (xy 145.575965 75.522169) + (xy 145.575964 75.522171) + (xy 145.476098 75.736335) + (xy 145.476094 75.736344) + (xy 145.414938 75.964586) + (xy 145.414936 75.964596) + (xy 145.394341 76.199999) + (xy 145.394341 76.2) + (xy 145.414936 76.435403) + (xy 145.414938 76.435413) + (xy 145.476094 76.663655) + (xy 145.476096 76.663659) + (xy 145.476097 76.663663) + (xy 145.575965 76.87783) + (xy 145.575967 76.877834) + (xy 145.711501 77.071395) + (xy 145.711506 77.071402) + (xy 145.878597 77.238493) + (xy 145.878603 77.238498) + (xy 146.064158 77.368425) + (xy 146.107783 77.423002) + (xy 146.114977 77.4925) + (xy 146.083454 77.554855) + (xy 146.064158 77.571575) + (xy 145.878597 77.701505) + (xy 145.711505 77.868597) + (xy 145.575965 78.062169) + (xy 145.575964 78.062171) + (xy 145.476098 78.276335) + (xy 145.476094 78.276344) + (xy 145.414938 78.504586) + (xy 145.414936 78.504596) + (xy 145.394341 78.739999) + (xy 145.394341 78.74) + (xy 145.414936 78.975403) + (xy 145.414938 78.975413) + (xy 145.476094 79.203655) + (xy 145.476096 79.203659) + (xy 145.476097 79.203663) + (xy 145.575965 79.417829) + (xy 145.575965 79.41783) + (xy 145.575967 79.417834) + (xy 145.711501 79.611395) + (xy 145.711506 79.611402) + (xy 145.878597 79.778493) + (xy 145.878603 79.778498) + (xy 146.064158 79.908425) + (xy 146.107783 79.963002) + (xy 146.114977 80.0325) + (xy 146.083454 80.094855) + (xy 146.064158 80.111575) + (xy 145.878597 80.241505) + (xy 145.711505 80.408597) + (xy 145.575965 80.602169) + (xy 145.575964 80.602171) + (xy 145.476098 80.816335) + (xy 145.476094 80.816344) + (xy 145.414938 81.044586) + (xy 145.414936 81.044596) + (xy 145.394341 81.279999) + (xy 145.394341 81.28) + (xy 145.414936 81.515403) + (xy 145.414938 81.515413) + (xy 145.476094 81.743655) + (xy 145.476096 81.743659) + (xy 145.476097 81.743663) + (xy 145.575965 81.957829) + (xy 145.575965 81.95783) + (xy 145.575967 81.957834) + (xy 145.711501 82.151395) + (xy 145.711506 82.151402) + (xy 145.878597 82.318493) + (xy 145.878603 82.318498) + (xy 146.064158 82.448425) + (xy 146.107783 82.503002) + (xy 146.114977 82.5725) + (xy 146.083454 82.634855) + (xy 146.064158 82.651575) + (xy 145.878597 82.781505) + (xy 145.711505 82.948597) + (xy 145.575965 83.142169) + (xy 145.575964 83.142171) + (xy 145.476098 83.356335) + (xy 145.476094 83.356344) + (xy 145.414938 83.584586) + (xy 145.414936 83.584595) + (xy 145.413017 83.606535) + (xy 145.387563 83.671603) + (xy 145.330971 83.712581) + (xy 145.261209 83.716457) + (xy 145.200426 83.682002) + (xy 145.197339 83.678697) + (xy 145.10587 83.577111) + (xy 144.952734 83.465851) + (xy 144.952729 83.465848) + (xy 144.779807 83.388857) + (xy 144.779802 83.388855) + (xy 144.626802 83.356335) + (xy 144.594646 83.3495) + (xy 144.405354 83.3495) + (xy 144.373198 83.356335) + (xy 144.220197 83.388855) + (xy 144.220192 83.388857) + (xy 144.04727 83.465848) + (xy 144.047265 83.465851) + (xy 143.894129 83.577111) + (xy 143.767466 83.717785) + (xy 143.672821 83.881715) + (xy 143.672818 83.881722) + (xy 143.616383 84.055413) + (xy 143.614326 84.061744) + (xy 143.59454 84.25) + (xy 143.614326 84.438256) + (xy 143.614327 84.438259) + (xy 143.672818 84.618277) + (xy 143.672821 84.618284) + (xy 143.767467 84.782216) + (xy 143.836149 84.858495) + (xy 143.894129 84.922888) + (xy 144.047265 85.034148) + (xy 144.04727 85.034151) + (xy 144.220191 85.111142) + (xy 144.220193 85.111142) + (xy 144.220197 85.111144) + (xy 144.276282 85.123064) + (xy 144.337761 85.156255) + (xy 144.371539 85.217418) + (xy 144.3745 85.244354) + (xy 144.3745 86.917255) + (xy 144.372775 86.932872) + (xy 144.373061 86.932899) + (xy 144.372326 86.940666) + (xy 144.374469 87.008846) + (xy 144.3745 87.010793) + (xy 144.3745 87.039343) + (xy 144.374501 87.03936) + (xy 144.375368 87.046231) + (xy 144.375826 87.05205) + (xy 144.37729 87.098624) + (xy 144.377291 87.098627) + (xy 144.38288 87.117867) + (xy 144.386824 87.136911) + (xy 144.389336 87.156792) + (xy 144.40649 87.200119) + (xy 144.408382 87.205647) + (xy 144.421381 87.250388) + (xy 144.43158 87.267634) + (xy 144.440138 87.285103) + (xy 144.447514 87.303732) + (xy 144.474898 87.341423) + (xy 144.478106 87.346307) + (xy 144.501827 87.386416) + (xy 144.501833 87.386424) + (xy 144.51599 87.40058) + (xy 144.528628 87.415376) + (xy 144.540405 87.431586) + (xy 144.540406 87.431587) + (xy 144.576309 87.461288) + (xy 144.58062 87.46521) + (xy 145.144006 88.028597) + (xy 145.224197 88.108788) + (xy 145.234022 88.121051) + (xy 145.234243 88.120869) + (xy 145.239211 88.126874) + (xy 145.288932 88.173566) + (xy 145.290332 88.174923) + (xy 145.310523 88.195115) + (xy 145.310527 88.195118) + (xy 145.310529 88.19512) + (xy 145.316011 88.199373) + (xy 145.320443 88.203157) + (xy 145.354418 88.235062) + (xy 145.371976 88.244714) + (xy 145.388233 88.255393) + (xy 145.404064 88.267673) + (xy 145.41242 88.271289) + (xy 145.466127 88.315977) + (xy 145.487149 88.382609) + (xy 145.476956 88.430895) + (xy 145.477947 88.431256) + (xy 145.476094 88.436344) + (xy 145.414938 88.664586) + (xy 145.414936 88.664596) + (xy 145.394341 88.899999) + (xy 145.394341 88.9) + (xy 145.414936 89.135403) + (xy 145.414938 89.135413) + (xy 145.476094 89.363655) + (xy 145.476099 89.363669) + (xy 145.515468 89.448096) + (xy 145.52596 89.517173) + (xy 145.49744 89.580957) + (xy 145.438963 89.619196) + (xy 145.403086 89.6245) + (xy 144.894604 89.6245) + (xy 144.827565 89.604815) + (xy 144.787217 89.562499) + (xy 144.732536 89.467788) + (xy 144.732534 89.467785) + (xy 144.60587 89.327111) + (xy 144.452734 89.215851) + (xy 144.452729 89.215848) + (xy 144.279807 89.138857) + (xy 144.279802 89.138855) + (xy 144.134 89.107865) + (xy 144.094646 89.0995) + (xy 143.905354 89.0995) + (xy 143.872897 89.106398) + (xy 143.720197 89.138855) + (xy 143.720192 89.138857) + (xy 143.54727 89.215848) + (xy 143.547265 89.215851) + (xy 143.394129 89.327111) + (xy 143.267466 89.467785) + (xy 143.172821 89.631715) + (xy 143.172818 89.631722) + (xy 143.114327 89.81174) + (xy 143.114326 89.811744) + (xy 143.09454 90) + (xy 143.114326 90.188256) + (xy 143.114327 90.188259) + (xy 143.172818 90.368277) + (xy 143.172821 90.368284) + (xy 143.267467 90.532216) + (xy 143.338319 90.610905) + (xy 143.394129 90.672888) + (xy 143.547265 90.784148) + (xy 143.54727 90.784151) + (xy 143.720192 90.861142) + (xy 143.720197 90.861144) + (xy 143.905354 90.9005) + (xy 143.905355 90.9005) + (xy 144.094645 90.9005) + (xy 144.094646 90.9005) + (xy 144.184874 90.88132) + (xy 144.222381 90.880338) + (xy 144.222395 90.879915) + (xy 144.229749 90.880146) + (xy 144.230057 90.880138) + (xy 144.230196 90.88016) + (xy 144.276583 90.875775) + (xy 144.282422 90.8755) + (xy 144.920981 90.8755) + (xy 145.341516 90.8755) + (xy 145.408555 90.895185) + (xy 145.45431 90.947989) + (xy 145.464254 91.017147) + (xy 145.461291 91.031593) + (xy 145.414938 91.204586) + (xy 145.414936 91.204596) + (xy 145.394341 91.439999) + (xy 145.394341 91.44) + (xy 145.414936 91.675403) + (xy 145.414938 91.675413) + (xy 145.476094 91.903655) + (xy 145.476096 91.903659) + (xy 145.476097 91.903663) + (xy 145.575965 92.11783) + (xy 145.575967 92.117834) + (xy 145.711501 92.311395) + (xy 145.711506 92.311402) + (xy 145.878597 92.478493) + (xy 145.878603 92.478498) + (xy 146.064158 92.608425) + (xy 146.107783 92.663002) + (xy 146.114977 92.7325) + (xy 146.083454 92.794855) + (xy 146.064158 92.811575) + (xy 145.878597 92.941505) + (xy 145.711505 93.108597) + (xy 145.575965 93.302169) + (xy 145.575964 93.302171) + (xy 145.476098 93.516335) + (xy 145.476094 93.516344) + (xy 145.414938 93.744586) + (xy 145.414936 93.744596) + (xy 145.394341 93.979999) + (xy 145.394341 93.98) + (xy 145.414936 94.215403) + (xy 145.414938 94.215413) + (xy 145.476094 94.443655) + (xy 145.476096 94.443659) + (xy 145.476097 94.443663) + (xy 145.543487 94.588181) + (xy 145.575965 94.65783) + (xy 145.575967 94.657834) + (xy 145.711501 94.851395) + (xy 145.711506 94.851402) + (xy 145.878597 95.018493) + (xy 145.878603 95.018498) + (xy 146.064158 95.148425) + (xy 146.107783 95.203002) + (xy 146.114977 95.2725) + (xy 146.083454 95.334855) + (xy 146.064158 95.351575) + (xy 145.878597 95.481505) + (xy 145.711505 95.648597) + (xy 145.575965 95.842169) + (xy 145.575964 95.842171) + (xy 145.476098 96.056335) + (xy 145.476094 96.056344) + (xy 145.414938 96.284586) + (xy 145.414936 96.284596) + (xy 145.394341 96.519999) + (xy 145.394341 96.52) + (xy 145.414936 96.755403) + (xy 145.414938 96.755413) + (xy 145.476094 96.983655) + (xy 145.476096 96.983659) + (xy 145.476097 96.983663) + (xy 145.575965 97.19783) + (xy 145.575967 97.197834) + (xy 145.711501 97.391395) + (xy 145.711506 97.391402) + (xy 145.878597 97.558493) + (xy 145.878603 97.558498) + (xy 146.064158 97.688425) + (xy 146.107783 97.743002) + (xy 146.114977 97.8125) + (xy 146.083454 97.874855) + (xy 146.064158 97.891575) + (xy 145.878597 98.021505) + (xy 145.711505 98.188597) + (xy 145.575965 98.382169) + (xy 145.575964 98.382171) + (xy 145.476098 98.596335) + (xy 145.476094 98.596344) + (xy 145.414938 98.824586) + (xy 145.414936 98.824596) + (xy 145.394341 99.059999) + (xy 145.394341 99.06) + (xy 145.414936 99.295403) + (xy 145.414938 99.295413) + (xy 145.476094 99.523655) + (xy 145.476096 99.523659) + (xy 145.476097 99.523663) + (xy 145.575965 99.737829) + (xy 145.575965 99.73783) + (xy 145.575967 99.737834) + (xy 145.684281 99.892521) + (xy 145.711505 99.931401) + (xy 145.878599 100.098495) + (xy 145.975384 100.166265) + (xy 146.072165 100.234032) + (xy 146.072167 100.234033) + (xy 146.07217 100.234035) + (xy 146.286337 100.333903) + (xy 146.514592 100.395063) + (xy 146.702918 100.411539) + (xy 146.749999 100.415659) + (xy 146.75 100.415659) + (xy 146.750001 100.415659) + (xy 146.789234 100.412226) + (xy 146.985408 100.395063) + (xy 147.213663 100.333903) + (xy 147.42783 100.234035) + (xy 147.621401 100.098495) + (xy 147.788495 99.931401) + (xy 147.924035 99.73783) + (xy 148.023903 99.523663) + (xy 148.085063 99.295408) + (xy 148.105659 99.06) + (xy 148.085063 98.824592) + (xy 148.023903 98.596337) + (xy 147.924035 98.382171) + (xy 147.788495 98.188599) + (xy 147.788494 98.188597) + (xy 147.621402 98.021506) + (xy 147.621396 98.021501) + (xy 147.435842 97.891575) + (xy 147.392217 97.836998) + (xy 147.385023 97.7675) + (xy 147.416546 97.705145) + (xy 147.435842 97.688425) + (xy 147.458026 97.672891) + (xy 147.621401 97.558495) + (xy 147.788495 97.391401) + (xy 147.924035 97.19783) + (xy 148.023903 96.983663) + (xy 148.085063 96.755408) + (xy 148.105659 96.52) + (xy 148.085063 96.284592) + (xy 148.023903 96.056337) + (xy 147.924035 95.842171) + (xy 147.914546 95.828618) + (xy 147.788494 95.648597) + (xy 147.621402 95.481506) + (xy 147.621401 95.481505) + (xy 147.435842 95.351575) + (xy 147.435841 95.351574) + (xy 147.392216 95.296997) + (xy 147.385024 95.227498) + (xy 147.416546 95.165144) + (xy 147.435836 95.148428) + (xy 147.621401 95.018495) + (xy 147.788495 94.851401) + (xy 147.924035 94.65783) + (xy 148.023903 94.443663) + (xy 148.085063 94.215408) + (xy 148.105659 93.98) + (xy 148.085063 93.744592) + (xy 148.023903 93.516337) + (xy 147.924035 93.302171) + (xy 147.878068 93.236522) + (xy 147.788494 93.108597) + (xy 147.621402 92.941506) + (xy 147.621396 92.941501) + (xy 147.435842 92.811575) + (xy 147.392217 92.756998) + (xy 147.385023 92.6875) + (xy 147.416546 92.625145) + (xy 147.435842 92.608425) + (xy 147.458026 92.592891) + (xy 147.621401 92.478495) + (xy 147.788495 92.311401) + (xy 147.924035 92.11783) + (xy 148.023903 91.903663) + (xy 148.085063 91.675408) + (xy 148.105659 91.44) + (xy 148.085063 91.204592) + (xy 148.046048 91.058983) + (xy 148.038709 91.031593) + (xy 148.040372 90.961743) + (xy 148.079535 90.903881) + (xy 148.143764 90.876377) + (xy 148.158484 90.8755) + (xy 149.109548 90.8755) + (xy 149.176587 90.895185) + (xy 149.197229 90.911819) + (xy 149.269762 90.984352) + (xy 149.303247 91.045675) + (xy 149.301856 91.104126) + (xy 149.274938 91.204586) + (xy 149.274936 91.204596) + (xy 149.254341 91.439999) + (xy 149.254341 91.44) + (xy 149.274936 91.675403) + (xy 149.274938 91.675413) + (xy 149.336094 91.903655) + (xy 149.336096 91.903659) + (xy 149.336097 91.903663) + (xy 149.435964 92.11783) + (xy 149.435965 92.11783) + (xy 149.435967 92.117834) + (xy 149.571501 92.311395) + (xy 149.571506 92.311402) + (xy 149.738597 92.478493) + (xy 149.738603 92.478498) + (xy 149.924158 92.608425) + (xy 149.967783 92.663002) + (xy 149.974977 92.7325) + (xy 149.943454 92.794855) + (xy 149.924158 92.811575) + (xy 149.738597 92.941505) + (xy 149.571505 93.108597) + (xy 149.435965 93.302169) + (xy 149.435964 93.302171) + (xy 149.336098 93.516335) + (xy 149.336094 93.516344) + (xy 149.274938 93.744586) + (xy 149.274936 93.744596) + (xy 149.254341 93.979999) + (xy 149.254341 93.98) + (xy 149.274936 94.215403) + (xy 149.274938 94.215413) + (xy 149.336094 94.443655) + (xy 149.336096 94.443659) + (xy 149.336097 94.443663) + (xy 149.403487 94.588181) + (xy 149.435965 94.65783) + (xy 149.435967 94.657834) + (xy 149.571501 94.851395) + (xy 149.571506 94.851402) + (xy 149.738597 95.018493) + (xy 149.738603 95.018498) + (xy 149.924158 95.148425) + (xy 149.967783 95.203002) + (xy 149.974977 95.2725) + (xy 149.943454 95.334855) + (xy 149.924158 95.351575) + (xy 149.738597 95.481505) + (xy 149.571505 95.648597) + (xy 149.435965 95.842169) + (xy 149.435964 95.842171) + (xy 149.336098 96.056335) + (xy 149.336094 96.056344) + (xy 149.274938 96.284586) + (xy 149.274936 96.284596) + (xy 149.254341 96.519999) + (xy 149.254341 96.52) + (xy 149.274936 96.755403) + (xy 149.274938 96.755413) + (xy 149.336094 96.983655) + (xy 149.336096 96.983659) + (xy 149.336097 96.983663) + (xy 149.435964 97.19783) + (xy 149.435965 97.19783) + (xy 149.435967 97.197834) + (xy 149.571501 97.391395) + (xy 149.571506 97.391402) + (xy 149.738597 97.558493) + (xy 149.738603 97.558498) + (xy 149.924158 97.688425) + (xy 149.967783 97.743002) + (xy 149.974977 97.8125) + (xy 149.943454 97.874855) + (xy 149.924158 97.891575) + (xy 149.738597 98.021505) + (xy 149.571505 98.188597) + (xy 149.435965 98.382169) + (xy 149.435964 98.382171) + (xy 149.336098 98.596335) + (xy 149.336094 98.596344) + (xy 149.274938 98.824586) + (xy 149.274936 98.824596) + (xy 149.254341 99.059999) + (xy 149.254341 99.06) + (xy 149.274936 99.295403) + (xy 149.274938 99.295413) + (xy 149.336094 99.523655) + (xy 149.336096 99.523659) + (xy 149.336097 99.523663) + (xy 149.435965 99.73783) + (xy 149.435967 99.737834) + (xy 149.544281 99.892521) + (xy 149.571505 99.931401) + (xy 149.738599 100.098495) + (xy 149.835384 100.166265) + (xy 149.932165 100.234032) + (xy 149.932167 100.234033) + (xy 149.93217 100.234035) + (xy 150.146337 100.333903) + (xy 150.374592 100.395063) + (xy 150.562918 100.411539) + (xy 150.609999 100.415659) + (xy 150.61 100.415659) + (xy 150.610001 100.415659) + (xy 150.649234 100.412226) + (xy 150.845408 100.395063) + (xy 151.073663 100.333903) + (xy 151.28783 100.234035) + (xy 151.481401 100.098495) + (xy 151.648495 99.931401) + (xy 151.784035 99.73783) + (xy 151.883903 99.523663) + (xy 151.945063 99.295408) + (xy 151.965659 99.06) + (xy 151.945063 98.824592) + (xy 151.883903 98.596337) + (xy 151.784035 98.382171) + (xy 151.648495 98.188599) + (xy 151.648494 98.188597) + (xy 151.481402 98.021506) + (xy 151.481396 98.021501) + (xy 151.295842 97.891575) + (xy 151.252217 97.836998) + (xy 151.245023 97.7675) + (xy 151.276546 97.705145) + (xy 151.295842 97.688425) + (xy 151.318026 97.672891) + (xy 151.481401 97.558495) + (xy 151.648495 97.391401) + (xy 151.784035 97.19783) + (xy 151.883903 96.983663) + (xy 151.945063 96.755408) + (xy 151.965659 96.52) + (xy 151.945063 96.284592) + (xy 151.883903 96.056337) + (xy 151.784035 95.842171) + (xy 151.774546 95.828618) + (xy 151.648494 95.648597) + (xy 151.481402 95.481506) + (xy 151.481401 95.481505) + (xy 151.295842 95.351575) + (xy 151.295841 95.351574) + (xy 151.252216 95.296997) + (xy 151.245024 95.227498) + (xy 151.276546 95.165144) + (xy 151.295836 95.148428) + (xy 151.481401 95.018495) + (xy 151.648495 94.851401) + (xy 151.784035 94.65783) + (xy 151.883903 94.443663) + (xy 151.945063 94.215408) + (xy 151.965659 93.98) + (xy 151.945063 93.744592) + (xy 151.883903 93.516337) + (xy 151.784035 93.302171) + (xy 151.738068 93.236522) + (xy 151.648494 93.108597) + (xy 151.481402 92.941506) + (xy 151.481396 92.941501) + (xy 151.295842 92.811575) + (xy 151.252217 92.756998) + (xy 151.245023 92.6875) + (xy 151.276546 92.625145) + (xy 151.295842 92.608425) + (xy 151.318026 92.592891) + (xy 151.481401 92.478495) + (xy 151.648495 92.311401) + (xy 151.784035 92.11783) + (xy 151.883903 91.903663) + (xy 151.945063 91.675408) + (xy 151.965659 91.44) + (xy 151.945063 91.204592) + (xy 151.883903 90.976337) + (xy 151.784035 90.762171) + (xy 151.775513 90.749999) + (xy 151.648494 90.568597) + (xy 151.481402 90.401506) + (xy 151.481401 90.401505) + (xy 151.359746 90.316321) + (xy 151.295841 90.271574) + (xy 151.252216 90.216997) + (xy 151.245024 90.147498) + (xy 151.276546 90.085144) + (xy 151.295836 90.068428) + (xy 151.481401 89.938495) + (xy 151.648495 89.771401) + (xy 151.784035 89.57783) + (xy 151.883903 89.363663) + (xy 151.945063 89.135408) + (xy 151.965659 88.9) + (xy 151.945063 88.664592) + (xy 151.883903 88.436337) + (xy 151.784035 88.222171) + (xy 151.783652 88.221623) + (xy 151.648494 88.028597) + (xy 151.481402 87.861506) + (xy 151.481396 87.861501) + (xy 151.295842 87.731575) + (xy 151.252217 87.676998) + (xy 151.245023 87.6075) + (xy 151.276546 87.545145) + (xy 151.295842 87.528425) + (xy 151.391723 87.461288) + (xy 151.481401 87.398495) + (xy 151.648495 87.231401) + (xy 151.784035 87.03783) + (xy 151.883903 86.823663) + (xy 151.945063 86.595408) + (xy 151.965659 86.36) + (xy 151.945063 86.124592) + (xy 151.883903 85.896337) + (xy 151.784035 85.682171) + (xy 151.783652 85.681623) + (xy 151.648494 85.488597) + (xy 151.481402 85.321506) + (xy 151.481401 85.321505) + (xy 151.359746 85.236321) + (xy 151.295841 85.191574) + (xy 151.252216 85.136997) + (xy 151.245024 85.067498) + (xy 151.276546 85.005144) + (xy 151.295836 84.988428) + (xy 151.481401 84.858495) + (xy 151.648495 84.691401) + (xy 151.784035 84.49783) + (xy 151.883903 84.283663) + (xy 151.945063 84.055408) + (xy 151.965659 83.82) + (xy 151.945063 83.584592) + (xy 151.883903 83.356337) + (xy 151.784035 83.142171) + (xy 151.648495 82.948599) + (xy 151.648494 82.948597) + (xy 151.481402 82.781506) + (xy 151.481396 82.781501) + (xy 151.295842 82.651575) + (xy 151.252217 82.596998) + (xy 151.245023 82.5275) + (xy 151.276546 82.465145) + (xy 151.295842 82.448425) + (xy 151.318026 82.432891) + (xy 151.481401 82.318495) + (xy 151.648495 82.151401) + (xy 151.784035 81.95783) + (xy 151.883903 81.743663) + (xy 151.945063 81.515408) + (xy 151.965659 81.28) + (xy 151.945063 81.044592) + (xy 151.883903 80.816337) + (xy 151.784035 80.602171) + (xy 151.648495 80.408599) + (xy 151.648494 80.408597) + (xy 151.481402 80.241506) + (xy 151.481401 80.241505) + (xy 151.295842 80.111575) + (xy 151.295841 80.111574) + (xy 151.252216 80.056997) + (xy 151.245024 79.987498) + (xy 151.276546 79.925144) + (xy 151.295836 79.908428) + (xy 151.481401 79.778495) + (xy 151.648495 79.611401) + (xy 151.784035 79.41783) + (xy 151.883903 79.203663) + (xy 151.945063 78.975408) + (xy 151.965659 78.74) + (xy 151.945063 78.504592) + (xy 151.883903 78.276337) + (xy 151.784035 78.062171) + (xy 151.648495 77.868599) + (xy 151.648494 77.868597) + (xy 151.481402 77.701506) + (xy 151.481396 77.701501) + (xy 151.295842 77.571575) + (xy 151.252217 77.516998) + (xy 151.245023 77.4475) + (xy 151.276546 77.385145) + (xy 151.295842 77.368425) + (xy 151.318026 77.352891) + (xy 151.481401 77.238495) + (xy 151.648495 77.071401) + (xy 151.784035 76.87783) + (xy 151.883903 76.663663) + (xy 151.945063 76.435408) + (xy 151.965659 76.2) + (xy 151.945063 75.964592) + (xy 151.883903 75.736337) + (xy 151.784035 75.522171) + (xy 151.744552 75.465782) + (xy 151.648494 75.328597) + (xy 151.481402 75.161506) + (xy 151.481401 75.161505) + (xy 151.295842 75.031575) + (xy 151.295841 75.031574) + (xy 151.252216 74.976997) + (xy 151.245024 74.907498) + (xy 151.276546 74.845144) + (xy 151.295836 74.828428) + (xy 151.481401 74.698495) + (xy 151.648495 74.531401) + (xy 151.784035 74.33783) + (xy 151.883903 74.123663) + (xy 151.945063 73.895408) + (xy 151.965659 73.66) + (xy 151.945063 73.424592) + (xy 151.883903 73.196337) + (xy 151.784035 72.982171) + (xy 151.773509 72.967137) + (xy 151.648494 72.788597) + (xy 151.481402 72.621506) + (xy 151.481396 72.621501) + (xy 151.295842 72.491575) + (xy 151.252217 72.436998) + (xy 151.245023 72.3675) + (xy 151.276546 72.305145) + (xy 151.295842 72.288425) + (xy 151.318026 72.272891) + (xy 151.481401 72.158495) + (xy 151.648495 71.991401) + (xy 151.784035 71.79783) + (xy 151.883903 71.583663) + (xy 151.945063 71.355408) + (xy 151.965659 71.12) + (xy 151.945063 70.884592) + (xy 151.883903 70.656337) + (xy 151.784035 70.442171) + (xy 151.648495 70.248599) + (xy 151.648494 70.248597) + (xy 151.481402 70.081506) + (xy 151.481401 70.081505) + (xy 151.295842 69.951575) + (xy 151.295841 69.951574) + (xy 151.252216 69.896997) + (xy 151.245024 69.827498) + (xy 151.276546 69.765144) + (xy 151.295836 69.748428) + (xy 151.481401 69.618495) + (xy 151.648495 69.451401) + (xy 151.784035 69.25783) + (xy 151.883903 69.043663) + (xy 151.945063 68.815408) + (xy 151.965659 68.58) + (xy 151.945063 68.344592) + (xy 151.883903 68.116337) + (xy 151.784035 67.902171) + (xy 151.648495 67.708599) + (xy 151.526567 67.586671) + (xy 151.493084 67.525351) + (xy 151.498068 67.455659) + (xy 151.539939 67.399725) + (xy 151.570915 67.38281) + (xy 151.702331 67.333796) + (xy 151.817546 67.247546) + (xy 151.903796 67.132331) + (xy 151.954091 66.997483) + (xy 151.9605 66.937873) + (xy 151.960499 65.142128) + (xy 151.954091 65.082517) + (xy 151.913081 64.972564) + (xy 151.903797 64.947671) + (xy 151.903793 64.947664) + (xy 151.817547 64.832455) + (xy 151.817544 64.832452) + (xy 151.702335 64.746206) + (xy 151.702328 64.746202) + (xy 151.567482 64.695908) + (xy 151.567483 64.695908) + (xy 151.507883 64.689501) + (xy 151.507881 64.6895) + (xy 151.507873 64.6895) + (xy 151.507864 64.6895) + (xy 149.712129 64.6895) + (xy 149.712123 64.689501) + (xy 149.652516 64.695908) + (xy 149.517671 64.746202) + (xy 149.517664 64.746206) + (xy 149.402455 64.832452) + (xy 149.402452 64.832455) + (xy 149.316206 64.947664) + (xy 149.316202 64.947671) + (xy 149.265908 65.082517) + (xy 149.259501 65.142116) + (xy 149.259501 65.142123) + (xy 149.2595 65.142135) + (xy 149.2595 66.93787) + (xy 149.259501 66.937876) + (xy 149.265908 66.997483) + (xy 149.316202 67.132328) + (xy 149.316206 67.132335) + (xy 149.402452 67.247544) + (xy 149.402455 67.247547) + (xy 149.517664 67.333793) + (xy 149.517671 67.333797) + (xy 149.649081 67.38281) + (xy 149.705015 67.424681) + (xy 149.729432 67.490145) + (xy 149.71458 67.558418) + (xy 149.69343 67.586673) + (xy 149.571503 67.7086) + (xy 149.435965 67.902169) + (xy 149.435964 67.902171) + (xy 149.336098 68.116335) + (xy 149.336094 68.116344) + (xy 149.274938 68.344586) + (xy 149.274936 68.344596) + (xy 149.254341 68.579999) + (xy 149.254341 68.58) + (xy 149.274936 68.815403) + (xy 149.274938 68.815413) + (xy 149.336094 69.043655) + (xy 149.336096 69.043659) + (xy 149.336097 69.043663) + (xy 149.435965 69.25783) + (xy 149.435967 69.257834) + (xy 149.571501 69.451395) + (xy 149.571506 69.451402) + (xy 149.738597 69.618493) + (xy 149.738603 69.618498) + (xy 149.924158 69.748425) + (xy 149.967783 69.803002) + (xy 149.974977 69.8725) + (xy 149.943454 69.934855) + (xy 149.924158 69.951575) + (xy 149.738597 70.081505) + (xy 149.571505 70.248597) + (xy 149.435965 70.442169) + (xy 149.435964 70.442171) + (xy 149.336098 70.656335) + (xy 149.336094 70.656344) + (xy 149.274938 70.884586) + (xy 149.274936 70.884596) + (xy 149.254341 71.119999) + (xy 149.254341 71.12) + (xy 149.274936 71.355403) + (xy 149.274938 71.355413) + (xy 149.336094 71.583655) + (xy 149.336096 71.583659) + (xy 149.336097 71.583663) + (xy 149.435965 71.79783) + (xy 149.435967 71.797834) + (xy 149.571501 71.991395) + (xy 149.571506 71.991402) + (xy 149.738597 72.158493) + (xy 149.738603 72.158498) + (xy 149.924158 72.288425) + (xy 149.967783 72.343002) + (xy 149.974977 72.4125) + (xy 149.943454 72.474855) + (xy 149.924158 72.491575) + (xy 149.738597 72.621505) + (xy 149.571505 72.788597) + (xy 149.435965 72.982169) + (xy 149.435964 72.982171) + (xy 149.336098 73.196335) + (xy 149.336094 73.196344) + (xy 149.274938 73.424586) + (xy 149.274936 73.424596) + (xy 149.254341 73.659999) + (xy 149.254341 73.66) + (xy 149.274936 73.895403) + (xy 149.274938 73.895413) + (xy 149.336094 74.123655) + (xy 149.336096 74.123659) + (xy 149.336097 74.123663) + (xy 149.410392 74.282988) + (xy 149.435965 74.33783) + (xy 149.435967 74.337834) + (xy 149.533446 74.477047) + (xy 149.571505 74.531401) + (xy 149.738599 74.698495) + (xy 149.738601 74.698496) + (xy 149.738603 74.698498) + (xy 149.924158 74.828425) + (xy 149.967783 74.883002) + (xy 149.974977 74.9525) + (xy 149.943454 75.014855) + (xy 149.924158 75.031575) + (xy 149.738597 75.161505) + (xy 149.571505 75.328597) + (xy 149.435965 75.522169) + (xy 149.435964 75.522171) + (xy 149.336098 75.736335) + (xy 149.336094 75.736344) + (xy 149.274938 75.964586) + (xy 149.274936 75.964596) + (xy 149.254341 76.199999) + (xy 149.254341 76.2) + (xy 149.274936 76.435403) + (xy 149.274938 76.435413) + (xy 149.336094 76.663655) + (xy 149.336096 76.663659) + (xy 149.336097 76.663663) + (xy 149.435965 76.877829) + (xy 149.435965 76.87783) + (xy 149.435967 76.877834) + (xy 149.571501 77.071395) + (xy 149.571506 77.071402) + (xy 149.738597 77.238493) + (xy 149.738603 77.238498) + (xy 149.924158 77.368425) + (xy 149.967783 77.423002) + (xy 149.974977 77.4925) + (xy 149.943454 77.554855) + (xy 149.924158 77.571575) + (xy 149.738597 77.701505) + (xy 149.571505 77.868597) + (xy 149.435965 78.062169) + (xy 149.435964 78.062171) + (xy 149.336098 78.276335) + (xy 149.336094 78.276344) + (xy 149.274938 78.504586) + (xy 149.274936 78.504596) + (xy 149.254341 78.739999) + (xy 149.254341 78.74) + (xy 149.274936 78.975403) + (xy 149.274938 78.975413) + (xy 149.336094 79.203655) + (xy 149.336096 79.203659) + (xy 149.336097 79.203663) + (xy 149.435965 79.417829) + (xy 149.435965 79.41783) + (xy 149.435967 79.417834) + (xy 149.571501 79.611395) + (xy 149.571506 79.611402) + (xy 149.738597 79.778493) + (xy 149.738603 79.778498) + (xy 149.924158 79.908425) + (xy 149.967783 79.963002) + (xy 149.974977 80.0325) + (xy 149.943454 80.094855) + (xy 149.924158 80.111575) + (xy 149.738597 80.241505) + (xy 149.571505 80.408597) + (xy 149.435965 80.602169) + (xy 149.435964 80.602171) + (xy 149.336098 80.816335) + (xy 149.336094 80.816344) + (xy 149.274938 81.044586) + (xy 149.274936 81.044596) + (xy 149.254341 81.279999) + (xy 149.254341 81.28) + (xy 149.274936 81.515403) + (xy 149.274938 81.515413) + (xy 149.336094 81.743655) + (xy 149.336096 81.743659) + (xy 149.336097 81.743663) + (xy 149.435965 81.957829) + (xy 149.435965 81.95783) + (xy 149.435967 81.957834) + (xy 149.571501 82.151395) + (xy 149.571506 82.151402) + (xy 149.738597 82.318493) + (xy 149.738603 82.318498) + (xy 149.924158 82.448425) + (xy 149.967783 82.503002) + (xy 149.974977 82.5725) + (xy 149.943454 82.634855) + (xy 149.924158 82.651575) + (xy 149.738597 82.781505) + (xy 149.571505 82.948597) + (xy 149.435965 83.142169) + (xy 149.435964 83.142171) + (xy 149.336098 83.356335) + (xy 149.336094 83.356344) + (xy 149.274938 83.584586) + (xy 149.274936 83.584596) + (xy 149.254341 83.819999) + (xy 149.254341 83.82) + (xy 149.274936 84.055403) + (xy 149.274938 84.055413) + (xy 149.336094 84.283655) + (xy 149.336096 84.283659) + (xy 149.336097 84.283663) + (xy 149.429999 84.485036) + (xy 149.435965 84.49783) + (xy 149.435967 84.497834) + (xy 149.571501 84.691395) + (xy 149.571506 84.691402) + (xy 149.738597 84.858493) + (xy 149.738603 84.858498) + (xy 149.924158 84.988425) + (xy 149.967783 85.043002) + (xy 149.974977 85.1125) + (xy 149.943454 85.174855) + (xy 149.924158 85.191575) + (xy 149.738597 85.321505) + (xy 149.571505 85.488597) + (xy 149.435965 85.682169) + (xy 149.435964 85.682171) + (xy 149.336098 85.896335) + (xy 149.336094 85.896344) + (xy 149.274938 86.124586) + (xy 149.274936 86.124596) + (xy 149.254341 86.359999) + (xy 149.254341 86.36) + (xy 149.274936 86.595403) + (xy 149.274938 86.595413) + (xy 149.336094 86.823655) + (xy 149.336096 86.823659) + (xy 149.336097 86.823663) + (xy 149.358992 86.872761) + (xy 149.382463 86.923095) + (xy 149.392955 86.992173) + (xy 149.364435 87.055957) + (xy 149.305959 87.094196) + (xy 149.270081 87.0995) + (xy 148.089919 87.0995) + (xy 148.02288 87.079815) + (xy 147.977125 87.027011) + (xy 147.967181 86.957853) + (xy 147.977537 86.923095) + (xy 147.987666 86.901373) + (xy 148.023903 86.823663) + (xy 148.085063 86.595408) + (xy 148.105659 86.36) + (xy 148.085063 86.124592) + (xy 148.023903 85.896337) + (xy 147.924035 85.682171) + (xy 147.923652 85.681623) + (xy 147.788494 85.488597) + (xy 147.621402 85.321506) + (xy 147.621401 85.321505) + (xy 147.499746 85.236321) + (xy 147.435841 85.191574) + (xy 147.392216 85.136997) + (xy 147.385024 85.067498) + (xy 147.416546 85.005144) + (xy 147.435836 84.988428) + (xy 147.621401 84.858495) + (xy 147.788495 84.691401) + (xy 147.924035 84.49783) + (xy 148.023903 84.283663) + (xy 148.085063 84.055408) + (xy 148.105659 83.82) + (xy 148.085063 83.584592) + (xy 148.023903 83.356337) + (xy 147.924035 83.142171) + (xy 147.788495 82.948599) + (xy 147.788494 82.948597) + (xy 147.621402 82.781506) + (xy 147.621396 82.781501) + (xy 147.435842 82.651575) + (xy 147.392217 82.596998) + (xy 147.385023 82.5275) + (xy 147.416546 82.465145) + (xy 147.435842 82.448425) + (xy 147.458026 82.432891) + (xy 147.621401 82.318495) + (xy 147.788495 82.151401) + (xy 147.924035 81.95783) + (xy 148.023903 81.743663) + (xy 148.085063 81.515408) + (xy 148.105659 81.28) + (xy 148.085063 81.044592) + (xy 148.023903 80.816337) + (xy 147.924035 80.602171) + (xy 147.788495 80.408599) + (xy 147.788494 80.408597) + (xy 147.621402 80.241506) + (xy 147.621396 80.241501) + (xy 147.435842 80.111575) + (xy 147.392217 80.056998) + (xy 147.385023 79.9875) + (xy 147.416546 79.925145) + (xy 147.435842 79.908425) + (xy 147.514361 79.853445) + (xy 147.621401 79.778495) + (xy 147.788495 79.611401) + (xy 147.924035 79.41783) + (xy 148.023903 79.203663) + (xy 148.085063 78.975408) + (xy 148.105659 78.74) + (xy 148.085063 78.504592) + (xy 148.023903 78.276337) + (xy 147.924035 78.062171) + (xy 147.788495 77.868599) + (xy 147.788494 77.868597) + (xy 147.621402 77.701506) + (xy 147.621396 77.701501) + (xy 147.435842 77.571575) + (xy 147.392217 77.516998) + (xy 147.385023 77.4475) + (xy 147.416546 77.385145) + (xy 147.435842 77.368425) + (xy 147.458026 77.352891) + (xy 147.621401 77.238495) + (xy 147.788495 77.071401) + (xy 147.924035 76.87783) + (xy 148.023903 76.663663) + (xy 148.085063 76.435408) + (xy 148.105659 76.2) + (xy 148.085063 75.964592) + (xy 148.023903 75.736337) + (xy 147.924035 75.522171) + (xy 147.884552 75.465782) + (xy 147.788494 75.328597) + (xy 147.621402 75.161506) + (xy 147.621396 75.161501) + (xy 147.435842 75.031575) + (xy 147.392217 74.976998) + (xy 147.385023 74.9075) + (xy 147.416546 74.845145) + (xy 147.435842 74.828425) + (xy 147.458026 74.812891) + (xy 147.621401 74.698495) + (xy 147.788495 74.531401) + (xy 147.924035 74.33783) + (xy 148.023903 74.123663) + (xy 148.085063 73.895408) + (xy 148.105659 73.66) + (xy 148.085063 73.424592) + (xy 148.023903 73.196337) + (xy 147.924035 72.982171) + (xy 147.913509 72.967137) + (xy 147.788494 72.788597) + (xy 147.621402 72.621506) + (xy 147.621396 72.621501) + (xy 147.435842 72.491575) + (xy 147.392217 72.436998) + (xy 147.385023 72.3675) + (xy 147.416546 72.305145) + (xy 147.435842 72.288425) + (xy 147.458026 72.272891) + (xy 147.621401 72.158495) + (xy 147.788495 71.991401) + (xy 147.924035 71.79783) + (xy 148.023903 71.583663) + (xy 148.085063 71.355408) + (xy 148.105659 71.12) + (xy 148.085063 70.884592) + (xy 148.023903 70.656337) + (xy 147.924035 70.442171) + (xy 147.788495 70.248599) + (xy 147.788494 70.248597) + (xy 147.621402 70.081506) + (xy 147.621396 70.081501) + (xy 147.435842 69.951575) + (xy 147.392217 69.896998) + (xy 147.385023 69.8275) + (xy 147.416546 69.765145) + (xy 147.435842 69.748425) + (xy 147.458026 69.732891) + (xy 147.621401 69.618495) + (xy 147.788495 69.451401) + (xy 147.924035 69.25783) + (xy 148.023903 69.043663) + (xy 148.085063 68.815408) + (xy 148.105659 68.58) + (xy 148.085063 68.344592) + (xy 148.023903 68.116337) + (xy 147.924035 67.902171) + (xy 147.788495 67.708599) + (xy 147.666567 67.586671) + (xy 147.633084 67.525351) + (xy 147.638068 67.455659) + (xy 147.679939 67.399725) + (xy 147.710915 67.38281) + (xy 147.842331 67.333796) + (xy 147.957546 67.247546) + (xy 148.043796 67.132331) + (xy 148.094091 66.997483) + (xy 148.1005 66.937873) + (xy 148.100499 65.142128) + (xy 148.094091 65.082517) + (xy 148.053081 64.972564) + (xy 148.043797 64.947671) + (xy 148.043793 64.947664) + (xy 147.957547 64.832455) + (xy 147.957544 64.832452) + (xy 147.842335 64.746206) + (xy 147.842328 64.746202) + (xy 147.707482 64.695908) + (xy 147.707483 64.695908) + (xy 147.647883 64.689501) + (xy 147.647881 64.6895) + (xy 147.647873 64.6895) + (xy 147.647864 64.6895) + (xy 145.852129 64.6895) + (xy 145.852123 64.689501) + (xy 145.792516 64.695908) + (xy 145.657671 64.746202) + (xy 145.657664 64.746206) + (xy 145.542455 64.832452) + (xy 145.542452 64.832455) + (xy 145.456206 64.947664) + (xy 145.456202 64.947671) + (xy 145.405908 65.082517) + (xy 145.399501 65.142116) + (xy 145.399501 65.142123) + (xy 145.3995 65.142135) + (xy 145.3995 66.93787) + (xy 145.399501 66.937876) + (xy 145.405908 66.997483) + (xy 145.456202 67.132328) + (xy 145.456206 67.132335) + (xy 145.542452 67.247544) + (xy 145.542455 67.247547) + (xy 145.657664 67.333793) + (xy 145.657671 67.333797) + (xy 145.789081 67.38281) + (xy 145.845015 67.424681) + (xy 145.869432 67.490145) + (xy 145.85458 67.558418) + (xy 145.83343 67.586673) + (xy 145.711503 67.7086) + (xy 145.575965 67.902169) + (xy 145.575964 67.902171) + (xy 145.476098 68.116335) + (xy 145.476094 68.116344) + (xy 145.414938 68.344586) + (xy 145.414936 68.344596) + (xy 145.394341 68.579999) + (xy 145.394341 68.58) + (xy 145.414936 68.815403) + (xy 145.414938 68.815413) + (xy 145.476094 69.043655) + (xy 145.476096 69.043659) + (xy 145.476097 69.043663) + (xy 145.575965 69.25783) + (xy 145.575967 69.257834) + (xy 145.711501 69.451395) + (xy 145.711506 69.451402) + (xy 145.878597 69.618493) + (xy 145.878603 69.618498) + (xy 146.064158 69.748425) + (xy 146.107783 69.803002) + (xy 146.114977 69.8725) + (xy 146.083454 69.934855) + (xy 146.064158 69.951575) + (xy 145.878597 70.081505) + (xy 145.711505 70.248597) + (xy 145.575965 70.442169) + (xy 145.575964 70.442171) + (xy 145.476098 70.656335) + (xy 145.476094 70.656344) + (xy 145.414938 70.884586) + (xy 145.414936 70.884596) + (xy 145.394341 71.119999) + (xy 145.394341 71.12) + (xy 145.414936 71.355403) + (xy 145.414938 71.355413) + (xy 145.476094 71.583655) + (xy 145.476096 71.583659) + (xy 145.476097 71.583663) + (xy 145.575965 71.79783) + (xy 145.575967 71.797834) + (xy 145.711501 71.991395) + (xy 145.711506 71.991402) + (xy 145.878597 72.158493) + (xy 145.878603 72.158498) + (xy 146.064158 72.288425) + (xy 146.107783 72.343002) + (xy 146.114977 72.4125) + (xy 146.083454 72.474855) + (xy 146.064158 72.491575) + (xy 145.878597 72.621505) + (xy 145.876922 72.623181) + (xy 145.876 72.623684) + (xy 145.874449 72.624986) + (xy 145.874187 72.624674) + (xy 145.815599 72.656666) + (xy 145.789241 72.6595) + (xy 145.353453 72.6595) + (xy 145.351891 72.65948) + (xy 145.263637 72.657244) + (xy 145.263626 72.657245) + (xy 145.203271 72.668062) + (xy 145.198607 72.668716) + (xy 145.137563 72.674925) + (xy 145.137555 72.674927) + (xy 145.104781 72.68521) + (xy 145.097153 72.687082) + (xy 145.063349 72.693141) + (xy 145.006381 72.715895) + (xy 145.001945 72.717474) + (xy 144.943414 72.73584) + (xy 144.94341 72.735842) + (xy 144.913378 72.75251) + (xy 144.906284 72.755879) + (xy 144.874382 72.768623) + (xy 144.874377 72.768625) + (xy 144.823156 72.802381) + (xy 144.819128 72.804822) + (xy 144.765501 72.834588) + (xy 144.739434 72.856965) + (xy 144.733165 72.861692) + (xy 144.704484 72.880595) + (xy 144.704478 72.8806) + (xy 144.661109 72.923968) + (xy 144.657655 72.927169) + (xy 144.611102 72.967136) + (xy 144.611101 72.967137) + (xy 144.590077 72.994298) + (xy 144.584885 73.000193) + (xy 143.30209 74.282988) + (xy 143.300966 74.284084) + (xy 143.236946 74.344942) + (xy 143.201899 74.395294) + (xy 143.199062 74.399056) + (xy 143.160302 74.446592) + (xy 143.160299 74.446597) + (xy 143.144392 74.477047) + (xy 143.140324 74.483761) + (xy 143.120702 74.511954) + (xy 143.096509 74.56833) + (xy 143.094488 74.572584) + (xy 143.066091 74.626951) + (xy 143.06609 74.626952) + (xy 143.05664 74.659975) + (xy 143.054007 74.667371) + (xy 143.040459 74.698943) + (xy 143.028113 74.759019) + (xy 143.02699 74.763595) + (xy 143.010113 74.822577) + (xy 143.010113 74.822579) + (xy 143.007503 74.856841) + (xy 143.006414 74.864608) + (xy 143.002635 74.883002) + (xy 142.9995 74.898258) + (xy 142.9995 74.959597) + (xy 142.999321 74.964306) + (xy 142.994662 75.025474) + (xy 136.160965 75.025474) + (xy 136.122216 74.976997) + (xy 136.115024 74.907498) + (xy 136.146546 74.845144) + (xy 136.165836 74.828428) + (xy 136.351401 74.698495) + (xy 136.518495 74.531401) + (xy 136.654035 74.33783) + (xy 136.753903 74.123663) + (xy 136.815063 73.895408) + (xy 136.835659 73.66) + (xy 136.815063 73.424592) + (xy 136.753903 73.196337) + (xy 136.654035 72.982171) + (xy 136.643509 72.967137) + (xy 136.518494 72.788597) + (xy 136.351402 72.621506) + (xy 136.351396 72.621501) + (xy 136.165842 72.491575) + (xy 136.122217 72.436998) + (xy 136.115023 72.3675) + (xy 136.146546 72.305145) + (xy 136.165842 72.288425) + (xy 136.188026 72.272891) + (xy 136.351401 72.158495) + (xy 136.518495 71.991401) + (xy 136.654035 71.79783) + (xy 136.753903 71.583663) + (xy 136.815063 71.355408) + (xy 136.835659 71.12) + (xy 136.815063 70.884592) + (xy 136.753903 70.656337) + (xy 136.654035 70.442171) + (xy 136.518495 70.248599) + (xy 136.518494 70.248597) + (xy 136.351402 70.081506) + (xy 136.351401 70.081505) + (xy 136.165842 69.951575) + (xy 136.165841 69.951574) + (xy 136.122216 69.896997) + (xy 136.115024 69.827498) + (xy 136.146546 69.765144) + (xy 136.165836 69.748428) + (xy 136.351401 69.618495) + (xy 136.518495 69.451401) + (xy 136.654035 69.25783) + (xy 136.753903 69.043663) + (xy 136.815063 68.815408) + (xy 136.835659 68.58) + (xy 136.815063 68.344592) + (xy 136.753903 68.116337) + (xy 136.654035 67.902171) + (xy 136.518495 67.708599) + (xy 136.396179 67.586283) + (xy 136.362696 67.524963) + (xy 136.36768 67.455271) + (xy 136.409551 67.399337) + (xy 136.440529 67.382422) + (xy 136.572086 67.333354) + (xy 136.572093 67.33335) + (xy 136.687187 67.24719) + (xy 136.68719 67.247187) + (xy 136.77335 67.132093) + (xy 136.773354 67.132086) + (xy 136.823596 66.997379) + (xy 136.823598 66.997372) + (xy 136.829999 66.937844) + (xy 136.83 66.937827) + (xy 136.83 66.29) + (xy 135.913686 66.29) + (xy 135.939493 66.249844) + (xy 135.98 66.111889) + (xy 135.98 65.968111) + (xy 135.939493 65.830156) + (xy 135.913686 65.79) + (xy 136.83 65.79) + (xy 136.83 65.142172) + (xy 136.829999 65.142155) + (xy 136.823598 65.082627) + (xy 136.823596 65.08262) + (xy 136.773354 64.947913) + (xy 136.77335 64.947906) + (xy 136.68719 64.832812) + (xy 136.687187 64.832809) + (xy 136.572093 64.746649) + (xy 136.572086 64.746645) + (xy 136.437379 64.696403) + (xy 136.437372 64.696401) + (xy 136.377844 64.69) + (xy 135.73 64.69) + (xy 135.73 65.604498) + (xy 135.622315 65.55532) + (xy 135.515763 65.54) + (xy 135.444237 65.54) + (xy 135.337685 65.55532) + (xy 135.23 65.604498) + (xy 135.23 64.69) + (xy 134.582155 64.69) + (xy 134.522627 64.696401) + (xy 134.52262 64.696403) + (xy 134.387913 64.746645) + (xy 134.387906 64.746649) + (xy 134.272812 64.832809) + (xy 134.272809 64.832812) + (xy 134.186649 64.947906) + (xy 134.186645 64.947913) + (xy 134.136403 65.08262) + (xy 134.136401 65.082627) + (xy 134.13 65.142155) + (xy 134.13 65.79) + (xy 135.046314 65.79) + (xy 135.020507 65.830156) + (xy 134.98 65.968111) + (xy 134.98 66.111889) + (xy 135.020507 66.249844) + (xy 135.046314 66.29) + (xy 134.13 66.29) + (xy 134.13 66.937844) + (xy 134.136401 66.997372) + (xy 134.136403 66.997379) + (xy 134.186645 67.132086) + (xy 134.186649 67.132093) + (xy 134.272809 67.247187) + (xy 134.272812 67.24719) + (xy 134.387906 67.33335) + (xy 134.387913 67.333354) + (xy 134.51947 67.382421) + (xy 134.575403 67.424292) + (xy 134.599821 67.489756) + (xy 134.58497 67.558029) + (xy 134.563819 67.586284) + (xy 134.441503 67.7086) + (xy 134.305965 67.902169) + (xy 134.305964 67.902171) + (xy 134.206098 68.116335) + (xy 134.206094 68.116344) + (xy 134.144938 68.344586) + (xy 134.144936 68.344596) + (xy 134.124341 68.579999) + (xy 134.124341 68.58) + (xy 134.144936 68.815403) + (xy 134.144938 68.815413) + (xy 134.206094 69.043655) + (xy 134.206096 69.043659) + (xy 134.206097 69.043663) + (xy 134.305964 69.25783) + (xy 134.305965 69.25783) + (xy 134.305967 69.257834) + (xy 134.441501 69.451395) + (xy 134.441506 69.451402) + (xy 134.608597 69.618493) + (xy 134.608603 69.618498) + (xy 134.794158 69.748425) + (xy 134.837783 69.803002) + (xy 134.844977 69.8725) + (xy 134.813454 69.934855) + (xy 134.794158 69.951575) + (xy 134.608597 70.081505) + (xy 134.441505 70.248597) + (xy 134.305965 70.442169) + (xy 134.305964 70.442171) + (xy 134.206098 70.656335) + (xy 134.206094 70.656344) + (xy 134.144938 70.884586) + (xy 134.144936 70.884596) + (xy 134.124341 71.119999) + (xy 134.124341 71.12) + (xy 134.144936 71.355403) + (xy 134.144938 71.355413) + (xy 134.206094 71.583655) + (xy 134.206096 71.583659) + (xy 134.206097 71.583663) + (xy 134.305965 71.797829) + (xy 134.305965 71.79783) + (xy 134.305967 71.797834) + (xy 134.441501 71.991395) + (xy 134.441506 71.991402) + (xy 134.608597 72.158493) + (xy 134.608603 72.158498) + (xy 134.794158 72.288425) + (xy 134.837783 72.343002) + (xy 134.844977 72.4125) + (xy 134.813454 72.474855) + (xy 134.794158 72.491575) + (xy 134.608597 72.621505) + (xy 134.441505 72.788597) + (xy 134.305965 72.982169) + (xy 134.305964 72.982171) + (xy 134.206098 73.196335) + (xy 134.206094 73.196344) + (xy 134.144938 73.424586) + (xy 134.144936 73.424596) + (xy 134.124341 73.659999) + (xy 134.124341 73.66) + (xy 134.144936 73.895403) + (xy 134.144938 73.895413) + (xy 134.206094 74.123655) + (xy 134.206096 74.123659) + (xy 134.206097 74.123663) + (xy 134.280392 74.282988) + (xy 134.305965 74.33783) + (xy 134.305967 74.337834) + (xy 134.403446 74.477047) + (xy 134.441505 74.531401) + (xy 134.608599 74.698495) + (xy 134.608601 74.698496) + (xy 134.608603 74.698498) + (xy 134.794158 74.828425) + (xy 134.837783 74.883002) + (xy 134.844977 74.9525) + (xy 134.813454 75.014855) + (xy 134.794158 75.031575) + (xy 134.608597 75.161505) + (xy 134.441505 75.328597) + (xy 134.305965 75.522169) + (xy 134.305964 75.522171) + (xy 134.206098 75.736335) + (xy 134.206094 75.736344) + (xy 134.144938 75.964586) + (xy 134.144936 75.964596) + (xy 134.124341 76.199999) + (xy 134.124341 76.2) + (xy 134.144936 76.435403) + (xy 134.144938 76.435413) + (xy 134.206094 76.663655) + (xy 134.206096 76.663659) + (xy 134.206097 76.663663) + (xy 134.305965 76.877829) + (xy 134.305965 76.87783) + (xy 134.305967 76.877834) + (xy 134.441501 77.071395) + (xy 134.441506 77.071402) + (xy 134.608597 77.238493) + (xy 134.608603 77.238498) + (xy 134.794158 77.368425) + (xy 134.837783 77.423002) + (xy 134.844977 77.4925) + (xy 134.813454 77.554855) + (xy 134.794158 77.571575) + (xy 134.608597 77.701505) + (xy 134.441505 77.868597) + (xy 134.305965 78.062169) + (xy 134.305964 78.062171) + (xy 134.206098 78.276335) + (xy 134.206094 78.276344) + (xy 134.144938 78.504586) + (xy 134.144936 78.504596) + (xy 134.124341 78.739999) + (xy 134.124341 78.74) + (xy 134.144936 78.975403) + (xy 134.144938 78.975413) + (xy 134.206094 79.203655) + (xy 134.206096 79.203659) + (xy 134.206097 79.203663) + (xy 134.305964 79.417829) + (xy 134.305965 79.41783) + (xy 134.305967 79.417834) + (xy 134.441501 79.611395) + (xy 134.441506 79.611402) + (xy 134.608597 79.778493) + (xy 134.608603 79.778498) + (xy 134.794158 79.908425) + (xy 134.837783 79.963002) + (xy 134.844977 80.0325) + (xy 134.813454 80.094855) + (xy 134.794158 80.111575) + (xy 134.608597 80.241505) + (xy 134.441505 80.408597) + (xy 134.305965 80.602169) + (xy 134.305964 80.602171) + (xy 134.206098 80.816335) + (xy 134.206094 80.816344) + (xy 134.144938 81.044586) + (xy 134.144936 81.044596) + (xy 134.124341 81.279999) + (xy 134.124341 81.28) + (xy 134.144936 81.515403) + (xy 134.144938 81.515413) + (xy 134.206094 81.743655) + (xy 134.206096 81.743659) + (xy 134.206097 81.743663) + (xy 134.305965 81.957829) + (xy 134.305965 81.95783) + (xy 134.305967 81.957834) + (xy 134.441501 82.151395) + (xy 134.441506 82.151402) + (xy 134.608597 82.318493) + (xy 134.608603 82.318498) + (xy 134.794158 82.448425) + (xy 134.837783 82.503002) + (xy 134.844977 82.5725) + (xy 134.813454 82.634855) + (xy 134.794158 82.651575) + (xy 134.608597 82.781505) + (xy 134.441505 82.948597) + (xy 134.305965 83.142169) + (xy 134.305964 83.142171) + (xy 134.206098 83.356335) + (xy 134.206094 83.356344) + (xy 134.144938 83.584586) + (xy 134.144936 83.584596) + (xy 134.124341 83.819999) + (xy 134.124341 83.82) + (xy 134.144936 84.055403) + (xy 134.144938 84.055413) + (xy 134.206094 84.283655) + (xy 134.206096 84.283659) + (xy 134.206097 84.283663) + (xy 134.299999 84.485036) + (xy 134.305965 84.49783) + (xy 134.305967 84.497834) + (xy 134.441501 84.691395) + (xy 134.441506 84.691402) + (xy 134.608597 84.858493) + (xy 134.608603 84.858498) + (xy 134.794158 84.988425) + (xy 134.837783 85.043002) + (xy 134.844977 85.1125) + (xy 134.813454 85.174855) + (xy 134.794158 85.191575) + (xy 134.608597 85.321505) + (xy 134.441505 85.488597) + (xy 134.305965 85.682169) + (xy 134.305964 85.682171) + (xy 134.206098 85.896335) + (xy 134.206094 85.896344) + (xy 134.144938 86.124586) + (xy 134.144936 86.124596) + (xy 134.124341 86.359999) + (xy 134.124341 86.36) + (xy 134.131016 86.436294) + (xy 134.11725 86.504794) + (xy 134.068634 86.554977) + (xy 134.000606 86.570911) + (xy 133.934762 86.547536) + (xy 133.928465 86.542661) + (xy 133.928345 86.542562) + (xy 133.923688 86.538709) + (xy 133.91938 86.53479) + (xy 133.360803 85.976212) + (xy 133.35098 85.96395) + (xy 133.350759 85.964134) + (xy 133.345786 85.958122) + (xy 133.296066 85.911432) + (xy 133.294666 85.910075) + (xy 133.274476 85.889884) + (xy 133.268986 85.885625) + (xy 133.264561 85.881847) + (xy 133.230582 85.849938) + (xy 133.23058 85.849936) + (xy 133.230577 85.849935) + (xy 133.213029 85.840288) + (xy 133.196763 85.829604) + (xy 133.180936 85.817327) + (xy 133.180935 85.817326) + (xy 133.180933 85.817325) + (xy 133.138168 85.798818) + (xy 133.132922 85.796248) + (xy 133.092093 85.773803) + (xy 133.092092 85.773802) + (xy 133.072693 85.768822) + (xy 133.054281 85.762518) + (xy 133.035898 85.754562) + (xy 133.035892 85.75456) + (xy 132.989874 85.747272) + (xy 132.984152 85.746087) + (xy 132.939021 85.7345) + (xy 132.939019 85.7345) + (xy 132.918984 85.7345) + (xy 132.899586 85.732973) + (xy 132.892162 85.731797) + (xy 132.879805 85.72984) + (xy 132.879804 85.72984) + (xy 132.833416 85.734225) + (xy 132.827578 85.7345) + (xy 132.775227 85.7345) + (xy 132.708188 85.714815) + (xy 132.673652 85.681623) + (xy 132.538494 85.488597) + (xy 132.371402 85.321506) + (xy 132.371401 85.321505) + (xy 132.249746 85.236321) + (xy 132.185841 85.191574) + (xy 132.142216 85.136997) + (xy 132.135024 85.067498) + (xy 132.166546 85.005144) + (xy 132.185836 84.988428) + (xy 132.371401 84.858495) + (xy 132.538495 84.691401) + (xy 132.674035 84.49783) + (xy 132.773903 84.283663) + (xy 132.835063 84.055408) + (xy 132.855659 83.82) + (xy 132.835063 83.584592) + (xy 132.773903 83.356337) + (xy 132.674035 83.142171) + (xy 132.538495 82.948599) + (xy 132.538494 82.948597) + (xy 132.371402 82.781506) + (xy 132.371396 82.781501) + (xy 132.185842 82.651575) + (xy 132.142217 82.596998) + (xy 132.135023 82.5275) + (xy 132.166546 82.465145) + (xy 132.185842 82.448425) + (xy 132.208026 82.432891) + (xy 132.371401 82.318495) + (xy 132.538495 82.151401) + (xy 132.674035 81.95783) + (xy 132.773903 81.743663) + (xy 132.835063 81.515408) + (xy 132.855659 81.28) + (xy 132.835063 81.044592) + (xy 132.773903 80.816337) + (xy 132.674035 80.602171) + (xy 132.538495 80.408599) + (xy 132.538494 80.408597) + (xy 132.371402 80.241506) + (xy 132.371401 80.241505) + (xy 132.185842 80.111575) + (xy 132.185841 80.111574) + (xy 132.142216 80.056997) + (xy 132.135024 79.987498) + (xy 132.166546 79.925144) + (xy 132.185836 79.908428) + (xy 132.371401 79.778495) + (xy 132.538495 79.611401) + (xy 132.674035 79.41783) + (xy 132.773903 79.203663) + (xy 132.835063 78.975408) + (xy 132.855659 78.74) + (xy 132.835063 78.504592) + (xy 132.773903 78.276337) + (xy 132.674035 78.062171) + (xy 132.538495 77.868599) + (xy 132.538494 77.868597) + (xy 132.371402 77.701506) + (xy 132.371396 77.701501) + (xy 132.185842 77.571575) + (xy 132.142217 77.516998) + (xy 132.135023 77.4475) + (xy 132.166546 77.385145) + (xy 132.185842 77.368425) + (xy 132.208026 77.352891) + (xy 132.371401 77.238495) + (xy 132.538495 77.071401) + (xy 132.674035 76.87783) + (xy 132.773903 76.663663) + (xy 132.835063 76.435408) + (xy 132.855659 76.2) + (xy 132.835063 75.964592) + (xy 132.773903 75.736337) + (xy 132.674035 75.522171) + (xy 132.634552 75.465782) + (xy 132.538494 75.328597) + (xy 132.371402 75.161506) + (xy 132.371401 75.161505) + (xy 132.185842 75.031575) + (xy 132.185841 75.031574) + (xy 132.142216 74.976997) + (xy 132.135024 74.907498) + (xy 132.166546 74.845144) + (xy 132.185836 74.828428) + (xy 132.371401 74.698495) + (xy 132.538495 74.531401) + (xy 132.674035 74.33783) + (xy 132.773903 74.123663) + (xy 132.835063 73.895408) + (xy 132.855659 73.66) + (xy 132.835063 73.424592) + (xy 132.773903 73.196337) + (xy 132.674035 72.982171) + (xy 132.663509 72.967137) + (xy 132.538494 72.788597) + (xy 132.371402 72.621506) + (xy 132.371396 72.621501) + (xy 132.185842 72.491575) + (xy 132.142217 72.436998) + (xy 132.135023 72.3675) + (xy 132.166546 72.305145) + (xy 132.185842 72.288425) + (xy 132.208026 72.272891) + (xy 132.371401 72.158495) + (xy 132.538495 71.991401) + (xy 132.674035 71.79783) + (xy 132.773903 71.583663) + (xy 132.835063 71.355408) + (xy 132.855659 71.12) + (xy 132.835063 70.884592) + (xy 132.773903 70.656337) + (xy 132.674035 70.442171) + (xy 132.538495 70.248599) + (xy 132.538494 70.248597) + (xy 132.371402 70.081506) + (xy 132.371401 70.081505) + (xy 132.185842 69.951575) + (xy 132.185841 69.951574) + (xy 132.142216 69.896997) + (xy 132.135024 69.827498) + (xy 132.166546 69.765144) + (xy 132.185836 69.748428) + (xy 132.371401 69.618495) + (xy 132.538495 69.451401) + (xy 132.674035 69.25783) + (xy 132.773903 69.043663) + (xy 132.835063 68.815408) + (xy 132.855659 68.58) + (xy 132.835063 68.344592) + (xy 132.773903 68.116337) + (xy 132.674035 67.902171) + (xy 132.538495 67.708599) + (xy 132.416179 67.586283) + (xy 132.382696 67.524963) + (xy 132.38768 67.455271) + (xy 132.429551 67.399337) + (xy 132.460529 67.382422) + (xy 132.592086 67.333354) + (xy 132.592093 67.33335) + (xy 132.707187 67.24719) + (xy 132.70719 67.247187) + (xy 132.79335 67.132093) + (xy 132.793354 67.132086) + (xy 132.843596 66.997379) + (xy 132.843598 66.997372) + (xy 132.849999 66.937844) + (xy 132.85 66.937827) + (xy 132.85 66.29) + (xy 131.933686 66.29) + (xy 131.959493 66.249844) + (xy 132 66.111889) + (xy 132 65.968111) + (xy 131.959493 65.830156) + (xy 131.933686 65.79) + (xy 132.85 65.79) + (xy 132.85 65.142172) + (xy 132.849999 65.142155) + (xy 132.843598 65.082627) + (xy 132.843596 65.08262) + (xy 132.793354 64.947913) + (xy 132.79335 64.947906) + (xy 132.70719 64.832812) + (xy 132.707187 64.832809) + (xy 132.592093 64.746649) + (xy 132.592086 64.746645) + (xy 132.457379 64.696403) + (xy 132.457372 64.696401) + (xy 132.397844 64.69) + (xy 131.75 64.69) + (xy 131.75 65.604498) + (xy 131.642315 65.55532) + (xy 131.535763 65.54) + (xy 131.464237 65.54) + (xy 131.357685 65.55532) + (xy 131.25 65.604498) + (xy 131.25 64.69) + (xy 130.602155 64.69) + (xy 130.542627 64.696401) + (xy 130.54262 64.696403) + (xy 130.407913 64.746645) + (xy 130.407906 64.746649) + (xy 130.292812 64.832809) + (xy 130.223266 64.92571) + (xy 130.167332 64.96758) + (xy 130.09764 64.972564) + (xy 130.036318 64.939078) + (xy 130.002833 64.877754) + (xy 130 64.851398) + (xy 130 64.374) + (xy 130.019685 64.306961) + (xy 130.072489 64.261206) + (xy 130.124 64.25) + (xy 152.126 64.25) + ) + ) + ) +) diff --git a/Teensy4_PCB_adapter/teensyBMSadapter.kicad_prl b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_prl new file mode 100644 index 0000000..8d43e35 --- /dev/null +++ b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_prl @@ -0,0 +1,77 @@ +{ + "board": { + "active_layer": 37, + "active_layer_preset": "All Layers", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 39, + 40 + ], + "visible_layers": "fffffff_ffffffff", + "zone_display_mode": 1 + }, + "meta": { + "filename": "teensyBMSadapter.kicad_prl", + "version": 3 + }, + "project": { + "files": [] + } +} diff --git a/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pro b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pro new file mode 100644 index 0000000..898e733 --- /dev/null +++ b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_pro @@ -0,0 +1,500 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "board_outline_line_width": 0.09999999999999999, + "copper_line_width": 0.19999999999999998, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.049999999999999996, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": false, + "text_position": 0, + "units_format": 1 + }, + "fab_line_width": 0.09999999999999999, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.15, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.762, + "height": 1.524, + "width": 1.524 + }, + "silk_line_width": 0.15, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.15, + "silk_text_upright": false, + "zones": { + "min_clearance": 0.5 + } + }, + "diff_pair_dimensions": [ + { + "gap": 0.0, + "via_gap": 0.0, + "width": 0.0 + } + ], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "connection_width": "warning", + "copper_edge_clearance": "error", + "copper_sliver": "warning", + "courtyards_overlap": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint": "error", + "footprint_type_mismatch": "ignore", + "hole_clearance": "error", + "hole_near_hole": "error", + "invalid_outline": "error", + "isolated_copper": "warning", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "lib_footprint_issues": "warning", + "lib_footprint_mismatch": "warning", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "warning", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_edge_clearance": "warning", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "solder_mask_bridge": "error", + "starved_thermal": "error", + "text_height": "warning", + "text_thickness": "warning", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_dangling": "warning", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zones_intersect": "error" + }, + "rules": { + "max_error": 0.005, + "min_clearance": 0.0, + "min_connection": 0.0, + "min_copper_edge_clearance": 0.0, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.19999999999999998, + "min_microvia_drill": 0.09999999999999999, + "min_resolved_spokes": 2, + "min_silk_clearance": 0.0, + "min_text_height": 0.7999999999999999, + "min_text_thickness": 0.08, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.0, + "min_via_annular_width": 0.09999999999999999, + "min_via_diameter": 0.5, + "solder_mask_clearance": 0.0, + "solder_mask_min_width": 0.0, + "solder_mask_to_copper_clearance": 0.0, + "use_height_for_length_calcs": true + }, + "teardrop_options": [ + { + "td_allow_use_two_tracks": true, + "td_curve_segcount": 5, + "td_on_pad_in_zone": false, + "td_onpadsmd": true, + "td_onroundshapesonly": false, + "td_ontrackend": false, + "td_onviapad": true + } + ], + "teardrop_parameters": [ + { + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_target_name": "td_round_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_target_name": "td_rect_shape", + "td_width_to_size_filter_ratio": 0.9 + }, + { + "td_curve_segcount": 0, + "td_height_ratio": 1.0, + "td_length_ratio": 0.5, + "td_maxheight": 2.0, + "td_maxlen": 1.0, + "td_target_name": "td_track_end", + "td_width_to_size_filter_ratio": 0.9 + } + ], + "track_widths": [ + 0.0, + 0.25, + 1.0 + ], + "via_dimensions": [ + { + "diameter": 0.0, + "drill": 0.0 + } + ], + "zones_allow_external_fillets": false + }, + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "conflicting_netclasses": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "endpoint_off_grid": "warning", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "missing_bidi_pin": "warning", + "missing_input_pin": "warning", + "missing_power_pin": "error", + "missing_unit": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "warning", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "simulation_model_issue": "ignore", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "teensyBMSadapter.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.25, + "via_diameter": 0.8, + "via_drill": 0.4, + "wire_width": 6 + } + ], + "meta": { + "version": 3 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "specctra_dsn": "", + "step": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "drawing": { + "dashed_lines_dash_length_ratio": 12.0, + "dashed_lines_gap_length_ratio": 3.0, + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "ngspice": { + "fix_include_paths": true, + "meta": { + "version": 0 + }, + "model_mode": 0, + "workbook_filename": "" + }, + "page_layout_descr_file": "", + "plot_directory": "", + "spice_current_sheet_as_root": false, + "spice_external_command": "spice \"%I\"", + "spice_model_current_sheet_as_root": true, + "spice_save_all_currents": false, + "spice_save_all_voltages": false, + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "a15f0488-2f03-4fa0-a88c-aed6c7b384e8", + "" + ] + ], + "text_variables": {} +} diff --git a/Teensy4_PCB_adapter/teensyBMSadapter.kicad_sch b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_sch new file mode 100644 index 0000000..aa3491b --- /dev/null +++ b/Teensy4_PCB_adapter/teensyBMSadapter.kicad_sch @@ -0,0 +1,1553 @@ +(kicad_sch (version 20230121) (generator eeschema) + + (uuid a15f0488-2f03-4fa0-a88c-aed6c7b384e8) + + (paper "A4") + + (lib_symbols + (symbol "Connector:Conn_01x14_Pin" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (at 0 17.78 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_01x14_Pin" (at 0 -20.32 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_locked" "" (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (property "ki_keywords" "connector" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, single row, 01x14, script generated" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_01x14_Pin_1_1" + (polyline + (pts + (xy 1.27 -17.78) + (xy 0.8636 -17.78) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -15.24) + (xy 0.8636 -15.24) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -12.7) + (xy 0.8636 -12.7) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -10.16) + (xy 0.8636 -10.16) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -7.62) + (xy 0.8636 -7.62) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -5.08) + (xy 0.8636 -5.08) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -2.54) + (xy 0.8636 -2.54) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 0) + (xy 0.8636 0) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 2.54) + (xy 0.8636 2.54) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 5.08) + (xy 0.8636 5.08) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 7.62) + (xy 0.8636 7.62) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 10.16) + (xy 0.8636 10.16) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 12.7) + (xy 0.8636 12.7) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 15.24) + (xy 0.8636 15.24) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 0.8636 -17.653) (end 0 -17.907) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -15.113) (end 0 -15.367) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -12.573) (end 0 -12.827) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -10.033) (end 0 -10.287) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -7.493) (end 0 -7.747) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -4.953) (end 0 -5.207) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 0.127) (end 0 -0.127) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 2.667) (end 0 2.413) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 5.207) (end 0 4.953) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 7.747) (end 0 7.493) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 10.287) (end 0 10.033) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 12.827) (end 0 12.573) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (rectangle (start 0.8636 15.367) (end 0 15.113) + (stroke (width 0.1524) (type default)) + (fill (type outline)) + ) + (pin passive line (at 5.08 15.24 180) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -7.62 180) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -10.16 180) (length 3.81) + (name "Pin_11" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -12.7 180) (length 3.81) + (name "Pin_12" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -15.24 180) (length 3.81) + (name "Pin_13" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -17.78 180) (length 3.81) + (name "Pin_14" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 12.7 180) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 10.16 180) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 7.62 180) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 5.08 180) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 2.54 180) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 0 180) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -2.54 180) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -5.08 180) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Connector:Conn_01x14_Socket" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (at 0 17.78 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_01x14_Socket" (at 0 -20.32 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_locked" "" (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (property "ki_keywords" "connector" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, single row, 01x14, script generated" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_01x14_Socket_1_1" + (arc (start 0 -17.272) (mid -0.5058 -17.78) (end 0 -18.288) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -14.732) (mid -0.5058 -15.24) (end 0 -15.748) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -12.192) (mid -0.5058 -12.7) (end 0 -13.208) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -9.652) (mid -0.5058 -10.16) (end 0 -10.668) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -7.112) (mid -0.5058 -7.62) (end 0 -8.128) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -4.572) (mid -0.5058 -5.08) (end 0 -5.588) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 -2.032) (mid -0.5058 -2.54) (end 0 -3.048) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -17.78) + (xy -0.508 -17.78) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -15.24) + (xy -0.508 -15.24) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -12.7) + (xy -0.508 -12.7) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -10.16) + (xy -0.508 -10.16) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -7.62) + (xy -0.508 -7.62) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -5.08) + (xy -0.508 -5.08) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 -2.54) + (xy -0.508 -2.54) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 0) + (xy -0.508 0) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 2.54) + (xy -0.508 2.54) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 5.08) + (xy -0.508 5.08) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 7.62) + (xy -0.508 7.62) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 10.16) + (xy -0.508 10.16) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 12.7) + (xy -0.508 12.7) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.27 15.24) + (xy -0.508 15.24) + ) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 0.508) (mid -0.5058 0) (end 0 -0.508) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 3.048) (mid -0.5058 2.54) (end 0 2.032) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 5.588) (mid -0.5058 5.08) (end 0 4.572) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 8.128) (mid -0.5058 7.62) (end 0 7.112) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 10.668) (mid -0.5058 10.16) (end 0 9.652) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 13.208) (mid -0.5058 12.7) (end 0 12.192) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (arc (start 0 15.748) (mid -0.5058 15.24) (end 0 14.732) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (pin passive line (at -5.08 15.24 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 0) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -10.16 0) (length 3.81) + (name "Pin_11" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -12.7 0) (length 3.81) + (name "Pin_12" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -15.24 0) (length 3.81) + (name "Pin_13" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -17.78 0) (length 3.81) + (name "Pin_14" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 12.7 0) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 10.16 0) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 7.62 0) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 5.08 0) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 2.54 0) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -5.08 0) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Connector:TestPoint" (pin_numbers hide) (pin_names (offset 0.762) hide) (in_bom yes) (on_board yes) + (property "Reference" "TP" (at 0 6.858 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "TestPoint" (at 0 5.08 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 5.08 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 5.08 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "test point tp" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "test point" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Pin* Test*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "TestPoint_0_1" + (circle (center 0 3.302) (radius 0.762) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "TestPoint_1_1" + (pin passive line (at 0 0 90) (length 2.54) + (name "1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Jumper:SolderJumper_2_Bridged" (pin_names (offset 0) hide) (in_bom yes) (on_board yes) + (property "Reference" "JP" (at 0 2.032 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Bridged" (at 0 -2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "solder jumper SPST" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Solder Jumper, 2-pole, closed/bridged" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "SolderJumper*Bridged*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "SolderJumper_2_Bridged_0_1" + (rectangle (start -0.508 0.508) (end 0.508 -0.508) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + (arc (start -0.254 1.016) (mid -1.2656 0) (end -0.254 -1.016) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start -0.254 1.016) (mid -1.2656 0) (end -0.254 -1.016) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + (polyline + (pts + (xy -0.254 1.016) + (xy -0.254 -1.016) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.254 1.016) + (xy 0.254 -1.016) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0.254 -1.016) (mid 1.2656 0) (end 0.254 1.016) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0.254 -1.016) (mid 1.2656 0) (end 0.254 1.016) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + ) + (symbol "SolderJumper_2_Bridged_1_1" + (pin passive line (at -3.81 0 0) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 2.54) + (name "B" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Jumper:SolderJumper_2_Open" (pin_names (offset 0) hide) (in_bom yes) (on_board yes) + (property "Reference" "JP" (at 0 2.032 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Open" (at 0 -2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "solder jumper SPST" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Solder Jumper, 2-pole, open" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "SolderJumper*Open*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "SolderJumper_2_Open_0_1" + (arc (start -0.254 1.016) (mid -1.2656 0) (end -0.254 -1.016) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start -0.254 1.016) (mid -1.2656 0) (end -0.254 -1.016) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + (polyline + (pts + (xy -0.254 1.016) + (xy -0.254 -1.016) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.254 1.016) + (xy 0.254 -1.016) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0.254 -1.016) (mid 1.2656 0) (end 0.254 1.016) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (arc (start 0.254 -1.016) (mid 1.2656 0) (end 0.254 1.016) + (stroke (width 0) (type default)) + (fill (type outline)) + ) + ) + (symbol "SolderJumper_2_Open_1_1" + (pin passive line (at -3.81 0 0) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 2.54) + (name "B" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + + (wire (pts (xy 114.3 78.74) (xy 118.11 78.74)) + (stroke (width 0) (type default)) + (uuid 00599833-256f-47f1-a3fc-5d5e6232a6ef) + ) + (wire (pts (xy 95.25 71.12) (xy 128.27 71.12)) + (stroke (width 0) (type default)) + (uuid 0c80ab70-0719-4d53-8489-7e3753bfc1e7) + ) + (wire (pts (xy 85.09 48.26) (xy 102.87 48.26)) + (stroke (width 0) (type default)) + (uuid 13cfc4e9-bc55-46e1-a728-d577425fc1bd) + ) + (wire (pts (xy 143.51 107.95) (xy 146.05 107.95)) + (stroke (width 0) (type default)) + (uuid 16cc6383-83e3-4d5e-9f90-655340a8f4b9) + ) + (wire (pts (xy 95.25 73.66) (xy 128.27 73.66)) + (stroke (width 0) (type default)) + (uuid 1866d472-cb3e-4d98-87de-064f6788d853) + ) + (wire (pts (xy 106.68 93.98) (xy 128.27 93.98)) + (stroke (width 0) (type default)) + (uuid 186aab84-099d-4461-a0e4-f5b4c2cc8b75) + ) + (wire (pts (xy 111.76 88.9) (xy 118.11 88.9)) + (stroke (width 0) (type default)) + (uuid 1c998a26-be5d-4393-ba34-b135796c8ada) + ) + (wire (pts (xy 177.8 76.2) (xy 179.07 76.2)) + (stroke (width 0) (type default)) + (uuid 1f239ecb-6808-4490-8eab-bad5ead2cbd8) + ) + (wire (pts (xy 95.25 101.6) (xy 128.27 101.6)) + (stroke (width 0) (type default)) + (uuid 26ea9acf-2199-4a49-9fe2-1f07aadf1962) + ) + (wire (pts (xy 177.8 86.36) (xy 191.77 86.36)) + (stroke (width 0) (type default)) + (uuid 27c6c5bd-dc7f-4fa5-aa0b-c49f18a2db4f) + ) + (wire (pts (xy 125.73 91.44) (xy 128.27 91.44)) + (stroke (width 0) (type default)) + (uuid 34f59905-3efa-4ed4-9d92-bb35f62b6e5d) + ) + (wire (pts (xy 95.25 76.2) (xy 128.27 76.2)) + (stroke (width 0) (type default)) + (uuid 379a37fe-33a6-4696-a7e5-698f3dbb921e) + ) + (wire (pts (xy 186.69 91.44) (xy 186.69 96.52)) + (stroke (width 0) (type default)) + (uuid 3de643b6-9fdc-4800-a838-a9ba58922ddb) + ) + (wire (pts (xy 114.3 81.28) (xy 118.11 81.28)) + (stroke (width 0) (type default)) + (uuid 4003378f-8505-49c2-83a2-a392879ae74c) + ) + (wire (pts (xy 189.23 78.74) (xy 191.77 78.74)) + (stroke (width 0) (type default)) + (uuid 46ad665f-831c-4536-99a8-6670107d17b7) + ) + (wire (pts (xy 185.42 99.06) (xy 185.42 93.98)) + (stroke (width 0) (type default)) + (uuid 4bb6051e-0650-463e-9af1-bb86fa6e7927) + ) + (wire (pts (xy 185.42 99.06) (xy 191.77 99.06)) + (stroke (width 0) (type default)) + (uuid 5525ba5e-47ab-453b-8371-be37b6e823b6) + ) + (wire (pts (xy 95.25 86.36) (xy 128.27 86.36)) + (stroke (width 0) (type default)) + (uuid 611a113e-4f32-4c5f-b40b-7bdb6152cb3f) + ) + (wire (pts (xy 186.69 96.52) (xy 191.77 96.52)) + (stroke (width 0) (type default)) + (uuid 67421baf-9b91-4be6-98a3-2563616d47fb) + ) + (wire (pts (xy 153.67 110.49) (xy 156.21 110.49)) + (stroke (width 0) (type default)) + (uuid 685b495a-1053-4659-9c0c-a5142386394d) + ) + (wire (pts (xy 85.09 43.18) (xy 102.87 43.18)) + (stroke (width 0) (type default)) + (uuid 69049051-54ae-408f-8d3f-3b93264515b6) + ) + (wire (pts (xy 125.73 88.9) (xy 128.27 88.9)) + (stroke (width 0) (type default)) + (uuid 6910fe22-e012-47aa-b8f9-1bd33dafac59) + ) + (wire (pts (xy 95.25 81.28) (xy 96.52 81.28)) + (stroke (width 0) (type default)) + (uuid 6a0294e7-f367-4712-b0cb-704a783cefc6) + ) + (wire (pts (xy 95.25 96.52) (xy 96.52 96.52)) + (stroke (width 0) (type default)) + (uuid 6f0710da-027c-4c75-a403-96df64e90a11) + ) + (wire (pts (xy 104.14 91.44) (xy 104.14 96.52)) + (stroke (width 0) (type default)) + (uuid 78bdbce3-88e6-48fc-a159-3481a64c3675) + ) + (wire (pts (xy 177.8 71.12) (xy 191.77 71.12)) + (stroke (width 0) (type default)) + (uuid 794fcc6d-f266-4947-a0cb-6d030fcebdd0) + ) + (wire (pts (xy 95.25 93.98) (xy 96.52 93.98)) + (stroke (width 0) (type default)) + (uuid 7fc19b97-6565-42b8-8d5e-388bf6d3c0b8) + ) + (wire (pts (xy 177.8 88.9) (xy 191.77 88.9)) + (stroke (width 0) (type default)) + (uuid 818cf48c-b577-456c-ae69-29547fa01aa6) + ) + (wire (pts (xy 177.8 96.52) (xy 179.07 96.52)) + (stroke (width 0) (type default)) + (uuid 829d382d-5471-4834-abce-23e0bdde05cd) + ) + (wire (pts (xy 95.25 99.06) (xy 128.27 99.06)) + (stroke (width 0) (type default)) + (uuid 8be095ad-f602-44fc-82b6-eb1be31faeec) + ) + (wire (pts (xy 177.8 78.74) (xy 179.07 78.74)) + (stroke (width 0) (type default)) + (uuid 904ce399-77e6-40d9-a3e5-26e7824e8e84) + ) + (wire (pts (xy 187.96 91.44) (xy 191.77 91.44)) + (stroke (width 0) (type default)) + (uuid 917b7015-0ea1-4338-b525-5fbae57073cc) + ) + (wire (pts (xy 95.25 91.44) (xy 104.14 91.44)) + (stroke (width 0) (type default)) + (uuid 92023e93-f048-4d8e-bef4-ee2eaac2e29d) + ) + (wire (pts (xy 85.09 45.72) (xy 102.87 45.72)) + (stroke (width 0) (type default)) + (uuid 9c92ef51-62ca-4b1a-938d-06207b0ba574) + ) + (wire (pts (xy 104.14 96.52) (xy 128.27 96.52)) + (stroke (width 0) (type default)) + (uuid 9cb06ce9-4c12-46d4-af65-8e3816dbf11d) + ) + (wire (pts (xy 153.67 107.95) (xy 156.21 107.95)) + (stroke (width 0) (type default)) + (uuid a1d5ebd1-c226-494b-9505-a6cd550791da) + ) + (wire (pts (xy 95.25 78.74) (xy 96.52 78.74)) + (stroke (width 0) (type default)) + (uuid a2d6d9a8-553b-432e-aa0c-4661d81727cc) + ) + (wire (pts (xy 189.23 76.2) (xy 191.77 76.2)) + (stroke (width 0) (type default)) + (uuid aabc35f1-0f90-4b45-b68b-fd1cbbef5056) + ) + (wire (pts (xy 177.8 91.44) (xy 186.69 91.44)) + (stroke (width 0) (type default)) + (uuid abd42600-5a31-48f9-95d6-2d237aaf901c) + ) + (wire (pts (xy 177.8 99.06) (xy 179.07 99.06)) + (stroke (width 0) (type default)) + (uuid addd422a-1552-45ab-9fcd-6bf1e2a31660) + ) + (wire (pts (xy 177.8 68.58) (xy 191.77 68.58)) + (stroke (width 0) (type default)) + (uuid bbcd381a-e0ee-46a7-a7f6-20a31faeb572) + ) + (wire (pts (xy 177.8 83.82) (xy 191.77 83.82)) + (stroke (width 0) (type default)) + (uuid c07c4b1d-7263-423e-8bf4-6765783b92ff) + ) + (wire (pts (xy 111.76 91.44) (xy 118.11 91.44)) + (stroke (width 0) (type default)) + (uuid c6322e6c-56d8-4f85-8225-b3b17b9950a1) + ) + (wire (pts (xy 106.68 88.9) (xy 106.68 93.98)) + (stroke (width 0) (type default)) + (uuid c86b2092-553e-4961-b452-8f783afa9c83) + ) + (wire (pts (xy 143.51 110.49) (xy 146.05 110.49)) + (stroke (width 0) (type default)) + (uuid ca2fb897-c8bc-4849-8931-b4c3caa81832) + ) + (wire (pts (xy 125.73 81.28) (xy 128.27 81.28)) + (stroke (width 0) (type default)) + (uuid dc1ab572-1732-486c-b0b6-bc6dbbc4b073) + ) + (wire (pts (xy 187.96 93.98) (xy 191.77 93.98)) + (stroke (width 0) (type default)) + (uuid dfee891d-f9ed-40b0-aafd-f4285933dfb1) + ) + (wire (pts (xy 177.8 93.98) (xy 185.42 93.98)) + (stroke (width 0) (type default)) + (uuid e3cf2014-c2d2-438c-942a-6fa28bbbcce1) + ) + (wire (pts (xy 177.8 101.6) (xy 191.77 101.6)) + (stroke (width 0) (type default)) + (uuid e6f48f1d-cf28-4001-8010-fb8fc355e1bf) + ) + (wire (pts (xy 125.73 78.74) (xy 128.27 78.74)) + (stroke (width 0) (type default)) + (uuid e758a275-aa88-4a44-af93-890f2b928403) + ) + (wire (pts (xy 177.8 81.28) (xy 191.77 81.28)) + (stroke (width 0) (type default)) + (uuid efb0de8d-1684-4f70-a0e1-4ba287d1b3bf) + ) + (wire (pts (xy 95.25 68.58) (xy 128.27 68.58)) + (stroke (width 0) (type default)) + (uuid f2541dd2-480f-49df-bd18-3c7611e9496c) + ) + (wire (pts (xy 95.25 88.9) (xy 106.68 88.9)) + (stroke (width 0) (type default)) + (uuid f4039c75-73f6-4226-9424-671d92141443) + ) + (wire (pts (xy 95.25 83.82) (xy 128.27 83.82)) + (stroke (width 0) (type default)) + (uuid fb457c7a-5dc1-4470-9ee5-e2dd19cfa24b) + ) + (wire (pts (xy 177.8 73.66) (xy 191.77 73.66)) + (stroke (width 0) (type default)) + (uuid ffdd1417-7184-4e2b-9784-d2fc21b31449) + ) + + (text "GND + pins 0 to 12" (at 95.25 60.96 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0b0e1285-d5c2-4129-91a5-9039ab759f5a) + ) + (text "9" (at 87.63 95.25 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0cb980d8-9ace-49d4-8d5b-00167f185001) + ) + (text "4" (at 87.63 82.55 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 1055fc71-8bf0-4d56-a158-837a9b701bfc) + ) + (text "18" (at 199.39 90.17 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 158e6598-c5d5-4fa2-a1d8-1c56999c8c88) + ) + (text "17" (at 199.39 92.71 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 1fbfd34f-7581-4c99-bad2-2b214791f1d1) + ) + (text "21" (at 199.39 82.55 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 4ccd6dc1-8062-4a5d-95f7-d5ba9bd38742) + ) + (text "0" (at 87.63 72.39 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5170890b-a1cc-48c6-82fc-d9a30d568e61) + ) + (text "12" (at 86.36 102.87 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5aa966f4-8a51-4dd0-9cfb-f00e11060886) + ) + (text "2" (at 87.63 77.47 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 703ed75e-9a91-46e3-975f-8b14bfcf6227) + ) + (text "3" (at 87.63 80.01 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 78ee96b9-ee91-43bb-a5fd-78cf474ebd37) + ) + (text "14" (at 199.39 100.33 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 7a25611c-e788-43d6-9d3d-acdfcabe96ad) + ) + (text "20" (at 199.39 85.09 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 859fddcd-ecc2-4dcb-b620-4383e49de378) + ) + (text "10" (at 86.36 97.79 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 864d9b13-0e51-4196-954f-c565e852d2fe) + ) + (text "4.0 TX2 to 3.2 TX2" (at 106.68 96.52 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 8a1c246c-414b-43db-8564-47176b4cab5c) + ) + (text "6" (at 87.63 87.63 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 8be205ea-e53b-4f77-9ad4-6c2c93bacf50) + ) + (text "13" (at 199.39 102.87 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid a7ec2f54-db5b-484e-8aca-bc611d2ac941) + ) + (text "1" (at 87.63 74.93 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid ae289b1f-242b-412a-af57-6546a1c6aa0a) + ) + (text "22" (at 199.39 80.01 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b47868cf-7310-4d98-bc1b-34e1a6e46a57) + ) + (text "15" (at 199.39 97.79 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b8721446-fb65-401e-8177-e4cd80dc0dfa) + ) + (text "13 to 26" (at 180.34 60.96 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c47fa903-eb23-46d6-b751-ffbf20084184) + ) + (text "7" (at 87.63 90.17 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c524cfc3-6a10-4da6-9136-9495f22f9bbc) + ) + (text "23" (at 199.39 77.47 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c95aa38f-a3d1-4415-a104-b7deec2ea5c8) + ) + (text "11" (at 86.36 100.33 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid cbfcdaba-53c4-45ea-8b99-9151e633362e) + ) + (text "8" (at 87.63 92.71 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid dfe61f9d-d399-4340-b293-f9246e336a3a) + ) + (text "19" (at 199.39 87.63 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid e412f499-e6f2-4133-9d0d-0a35cdffdfb2) + ) + (text "5" (at 87.63 85.09 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid f0ec8f5b-32e6-4c32-a04e-552aa34b4441) + ) + (text "16" (at 199.39 95.25 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid fe014988-8034-40ca-aa38-b79811dc7c30) + ) + + (label "CANRX2" (at 85.09 45.72 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0377457c-9a15-4411-99f8-d6ebe89d2afc) + ) + (label "A3" (at 179.07 91.44 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 078aa651-f14c-4404-af55-0f1b5b55ed76) + ) + (label "A6" (at 182.88 83.82 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 07bd3e4c-65f0-460c-921e-bb2a87abb376) + ) + (label "CANTX2" (at 96.52 73.66 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 10801129-3054-4390-ae9e-225fe4c6ee24) + ) + (label "CANRX1" (at 114.3 81.28 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 19098cf5-c7bf-44ea-8dff-a07b7596fb5f) + ) + (label "GND" (at 85.09 43.18 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 2129c362-dfdd-480b-aa6e-a19ce615efc8) + ) + (label "LED{slash}SCK" (at 179.07 101.6 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 2264a0a7-1ee3-4695-a3a6-6ffd4202d7f6) + ) + (label "A7" (at 182.88 81.28 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 2a33df6a-36f1-4afc-9565-4b78d2086c5c) + ) + (label "TX3T4" (at 179.07 99.06 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 306c0865-a75c-48e5-ab6f-36edbc9d61a6) + ) + (label "CANTX1" (at 114.3 78.74 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 339ca035-0641-4b3a-806e-198de861b760) + ) + (label "CS" (at 96.52 96.52 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 3b0b8f68-abf6-47d2-8355-0cf5d8ade504) + ) + (label "TX3" (at 125.73 91.44 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 41752455-d36f-4384-bca4-268feef3872d) + ) + (label "CANTX1" (at 179.07 78.74 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 43e0fff4-96ff-4560-be2b-a765723ec28a) + ) + (label "IO1" (at 96.52 78.74 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 4562d2e1-7eb2-4536-a73a-799cc2d3aee1) + ) + (label "P18" (at 156.21 110.49 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5bc06544-0d54-4b19-b9db-b5e9d7fd9ecb) + ) + (label "CANTX2" (at 85.09 48.26 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5bdb0492-511e-40cc-bf81-b5804b84b828) + ) + (label "IO2" (at 96.52 81.28 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5c2edbcb-a0ee-46c4-901f-92f2275e1f7b) + ) + (label "A4" (at 182.88 88.9 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 676386a5-c8ef-4c8b-8cfe-3ed9de7f625c) + ) + (label "IO3" (at 143.51 107.95 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 6a65e047-4476-4af2-bf09-22f9ff7ae4da) + ) + (label "IO3" (at 96.52 93.98 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 754755a9-a1b0-4a4e-8cb9-69a48e6403e9) + ) + (label "IO1" (at 189.23 76.2 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 76bd501e-185e-4e48-bf86-9c7bd6ffa47f) + ) + (label "TX3T4" (at 111.76 91.44 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 8013ad61-3f1b-43ad-ad54-228ee56583c5) + ) + (label "IO2" (at 189.23 78.74 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 9496f0c6-33e4-4430-aab6-0d9cf85dfa9d) + ) + (label "RX3T4" (at 179.07 96.52 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 99994180-26ea-4f9a-8fee-391f959128a2) + ) + (label "A5" (at 182.88 86.36 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid a1e25402-b982-420f-b10f-05d350151c7a) + ) + (label "RX3" (at 125.73 88.9 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b1a790d0-a85d-4866-9931-d9cd33537664) + ) + (label "CANRX1" (at 179.07 76.2 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b3fc0e0d-c2ff-4a18-9ebd-1b03109e04da) + ) + (label "P18" (at 187.96 93.98 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid ba02941c-b863-4583-a7ff-65ea328ba67e) + ) + (label "MOSI" (at 96.52 99.06 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c50c1ed6-6fc6-4ea1-9780-91b2e2a4e74e) + ) + (label "RX3T4" (at 111.76 88.9 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c5efa2a2-62d0-4cd5-b1ad-59b06179f25f) + ) + (label "CS" (at 143.51 110.49 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid ce2c683f-9c02-4ad3-a914-43cf102007e3) + ) + (label "CANRX2" (at 96.52 71.12 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid d03ebb28-6211-472d-8e2b-56b3b4fbdda7) + ) + (label "MISO" (at 96.52 101.6 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid d3fb2963-1c9a-45c2-b0f8-471bcde93272) + ) + (label "P17" (at 187.96 91.44 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid d6cf825f-498f-4751-97dc-b8da21dbb6e6) + ) + (label "P17" (at 156.21 107.95 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid e45ac847-599d-4226-88a8-37c4022e69da) + ) + (label "GND" (at 96.52 68.58 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid f19c69dc-340a-47bb-be57-286a2faceb12) + ) + (label "A2" (at 179.07 93.98 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid f983394d-a943-47cc-b68f-a6e05aa6ac9c) + ) + + (symbol (lib_id "Connector:Conn_01x14_Socket") (at 172.72 83.82 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 1677d2d8-4cd6-4b68-b1b7-4b056fa633d4) + (property "Reference" "J1" (at 171.45 83.82 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Conn_01x14_Socket" (at 181.61 105.41 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x14_P2.54mm_Vertical" (at 172.72 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 172.72 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 29bdea01-0afc-4917-bd1d-b099d9115b8d)) + (pin "10" (uuid 991ee16b-944b-4063-b229-8a74a43d9558)) + (pin "11" (uuid cb9f9e9c-63a6-4315-b2a1-aa8ee733d1ba)) + (pin "12" (uuid 2c163c97-9eaf-4459-806d-e95f97c6fa34)) + (pin "13" (uuid c83bf24a-177b-47a0-90a4-684b5e4768bc)) + (pin "14" (uuid 3e3beb00-e838-497c-b138-9bfbfb8d52e4)) + (pin "2" (uuid 51d897d1-715d-4d37-a026-bc0d451e41e9)) + (pin "3" (uuid 52fe5e61-94d5-4b0f-85bd-4ca1ce0017f8)) + (pin "4" (uuid 5f2c3866-5375-4fe4-ad2a-8c9a905beb1b)) + (pin "5" (uuid b87c0a00-abbf-4035-9796-67365df57eab)) + (pin "6" (uuid 49a047b2-a02c-465b-a00c-9a6fd1264e7f)) + (pin "7" (uuid 6954d601-bb6c-4fac-98fb-cbb83551dca9)) + (pin "8" (uuid 3d998dd1-a77c-4ab6-87e0-6bcace103faf)) + (pin "9" (uuid 10523ca5-f613-4fd1-b4f0-fcf1d53ee90b)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "J1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:TestPoint") (at 102.87 48.26 270) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 211b73ad-dd24-4f7f-aa80-3a5a32b554bb) + (property "Reference" "TP3" (at 107.95 48.26 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "TestPoint" (at 113.03 48.26 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "TestPoint:TestPoint_Pad_D1.5mm" (at 102.87 53.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 102.87 53.34 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 3d904c4e-2ffe-437f-b4a4-cb8afe91e3a4)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "TP3") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Open") (at 121.92 88.9 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 327bef65-2a36-432f-95e9-b785d64e1c02) + (property "Reference" "JP3" (at 121.92 86.36 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Open" (at 146.05 88.9 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (at 121.92 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 121.92 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d9eae642-3daa-4222-9aa6-89bbe936901b)) + (pin "2" (uuid a5df4b42-7552-4a7e-92a8-65e3be253624)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP3") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:Conn_01x14_Pin") (at 133.35 83.82 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6023bf3f-c770-450a-bb7e-c43737278813) + (property "Reference" "J2" (at 132.715 63.5 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_01x14_Pin" (at 132.715 66.04 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x14_P2.54mm_Vertical" (at 133.35 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 133.35 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c79612b6-7dc1-43e3-8124-30d2cc27261e)) + (pin "10" (uuid 4ad85796-1789-43e4-bb6c-313e687c80b6)) + (pin "11" (uuid 6a8e8b5e-2271-4e00-bd32-7f0b3e675ebe)) + (pin "12" (uuid 9f67a992-6f3c-49bd-bc73-63813f65013a)) + (pin "13" (uuid 0a45840f-3fcd-46ce-be58-26cb0e69bbcf)) + (pin "14" (uuid c5d9a16d-97ac-4b0f-8abd-a9ea7366ba24)) + (pin "2" (uuid 77985a50-d5b4-4bf0-8a43-508b8ba50891)) + (pin "3" (uuid 82ceedba-c1b3-403f-922f-625ec205b018)) + (pin "4" (uuid 0ecd0306-2dfa-4aa2-87d7-07d7aa1fbd33)) + (pin "5" (uuid a9df8d49-b43a-40cf-b380-fb409198fa6e)) + (pin "6" (uuid 4292ec15-fe79-4571-b159-77ff1ca6abac)) + (pin "7" (uuid 095b299a-1375-486a-8578-c2a418a0cede)) + (pin "8" (uuid b09c7e2a-5002-437c-a741-950075998e21)) + (pin "9" (uuid 66d0a51d-ac74-4e8b-b383-d13c96715aa2)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "J2") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:TestPoint") (at 102.87 45.72 270) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 6ca33eeb-5023-47ed-86b0-84827661d444) + (property "Reference" "TP2" (at 107.95 45.72 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "TestPoint" (at 113.03 45.72 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "TestPoint:TestPoint_Pad_D1.5mm" (at 102.87 50.8 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 102.87 50.8 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7412c60e-143f-4230-8d10-c90075f9e593)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "TP2") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Bridged") (at 121.92 78.74 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 711bbf71-c355-4212-b060-7e5105f37b56) + (property "Reference" "JP7" (at 121.92 72.39 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Bridged" (at 147.32 78.74 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" (at 121.92 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 121.92 78.74 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2b422b5e-1a26-4ab7-9a6e-02380de7dd59)) + (pin "2" (uuid 936abd7e-e956-4c87-9b61-e97ade4be7fe)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP7") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Open") (at 121.92 91.44 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 79a45669-9e88-4951-8d0d-b6102dbe24ac) + (property "Reference" "JP4" (at 127 92.71 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Open" (at 146.05 91.44 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (at 121.92 91.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 121.92 91.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7d0f59a0-2e96-485a-b708-1c08bb656346)) + (pin "2" (uuid 15231ed6-63d1-4538-9e73-ae7aa4d677f1)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP4") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Open") (at 149.86 110.49 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9b0c5058-9460-4b2d-826b-7b388717e7e7) + (property "Reference" "JP6" (at 154.94 111.76 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Open" (at 173.99 110.49 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (at 149.86 110.49 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 149.86 110.49 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2caeb4be-fca0-4963-a702-ab886d1848fa)) + (pin "2" (uuid 8f79218d-c9e3-4d7f-aa2c-22bafcad1ba5)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP6") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:Conn_01x14_Socket") (at 90.17 83.82 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid 9ec06175-fbc3-4ae8-9717-08d8ff0ec1ff) + (property "Reference" "J4" (at 83.82 83.82 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Conn_01x14_Socket" (at 83.82 86.36 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x14_P2.54mm_Vertical" (at 90.17 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 90.17 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 7c2694ea-9baa-40b1-aeac-92f9d5eada9c)) + (pin "10" (uuid e7f082ee-897f-4b13-b3be-6fdced6fe27e)) + (pin "11" (uuid fe142807-9880-44cb-ad89-27647bcec490)) + (pin "12" (uuid 7150a5ed-7156-4c2e-882d-3adb4fed6c2f)) + (pin "13" (uuid 0fc003e0-72f5-408f-a301-1cd123b3bd45)) + (pin "14" (uuid e18140a0-4ed8-4d0c-bee5-d618e8933a91)) + (pin "2" (uuid dc62d522-942d-4666-b990-9882252e8e6a)) + (pin "3" (uuid 7b4a286b-3e42-4099-b212-ef608bc3d1cf)) + (pin "4" (uuid 14fb9b9b-c7fe-4eba-99fa-930e8637ea0f)) + (pin "5" (uuid 52f2ebf0-972a-4c54-9d60-3542bb548eff)) + (pin "6" (uuid 80de8afc-72eb-4e4f-9302-ea92f6535491)) + (pin "7" (uuid 6b550324-d84c-4aac-81af-a761d5faaf21)) + (pin "8" (uuid 1590b456-d455-4f21-b858-8193cf64d5f3)) + (pin "9" (uuid 5416b2f2-1ae4-4d0f-9d02-3ffd1ecb2b0c)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "J4") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Open") (at 149.86 107.95 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e3201b85-670b-4d30-9006-f6042352552a) + (property "Reference" "JP5" (at 149.86 105.41 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Open" (at 173.99 107.95 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" (at 149.86 107.95 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 149.86 107.95 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 782686dd-3668-4acd-b1fd-70d1d5bf6fd7)) + (pin "2" (uuid 00c70817-36da-4747-a42b-18973f142056)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP5") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:Conn_01x14_Pin") (at 196.85 83.82 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e7b85242-0b8b-494e-b713-98b9b536947c) + (property "Reference" "J3" (at 196.215 63.5 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_01x14_Pin" (at 196.215 66.04 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x14_P2.54mm_Vertical" (at 196.85 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 196.85 83.82 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 56a36fbd-c92b-4c9a-9ac4-85b95a7fe83b)) + (pin "10" (uuid 10db2da0-6f1a-4d4e-a8f6-b4e6be23ba2b)) + (pin "11" (uuid 7a240ca9-ea9e-44c6-826a-c713a2516368)) + (pin "12" (uuid fff75c30-349d-4b3c-b95e-ec84afe1bcd1)) + (pin "13" (uuid 0272b9ab-47a7-4aff-bbb5-560441201e40)) + (pin "14" (uuid 24801afc-a480-41c6-9407-740dcd885e9d)) + (pin "2" (uuid 25e43270-1bde-4722-b66b-b638d15fad0e)) + (pin "3" (uuid 59f75af3-001e-47a4-8220-ef1202b3c6b7)) + (pin "4" (uuid f5377df1-80ba-4f0b-92c0-8303116a27c3)) + (pin "5" (uuid 3bcfb53d-0dee-4ab3-b708-98987f5c06e2)) + (pin "6" (uuid d99e267b-ee2e-4dcd-af7d-bd1cb6012c4f)) + (pin "7" (uuid 2e21a06a-341d-4b70-b7aa-03c943adf664)) + (pin "8" (uuid d25fc4d3-142d-493b-ac60-cc4239932e1d)) + (pin "9" (uuid 39ea7bf6-730f-4514-a00d-c2e0ba915e31)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "J3") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector:TestPoint") (at 102.87 43.18 270) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid ef7dba1d-0589-46ab-b74d-4f4df621559a) + (property "Reference" "TP1" (at 107.95 43.18 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "TestPoint" (at 113.03 43.18 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "TestPoint:TestPoint_Pad_D1.5mm" (at 102.87 48.26 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 102.87 48.26 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ce26ee49-4eec-49dd-9b54-109080709331)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "TP1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Jumper:SolderJumper_2_Bridged") (at 121.92 81.28 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid f1ee04fc-56a0-4c24-baad-1f780ebc0b25) + (property "Reference" "JP1" (at 121.92 74.93 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "SolderJumper_2_Bridged" (at 147.32 81.28 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm" (at 121.92 81.28 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 121.92 81.28 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1e1960b3-6b32-45c0-bb9c-ac7cf3835b67)) + (pin "2" (uuid f2ae32e2-337b-4309-92e4-bd78da7d0374)) + (instances + (project "teensyBMSadapter" + (path "/a15f0488-2f03-4fa0-a88c-aed6c7b384e8" + (reference "JP1") (unit 1) + ) + ) + ) + ) + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/VWBMSV2/BMSModule.cpp b/VWBMSV2/BMSModule.cpp index cdef7ce..34dc643 100644 --- a/VWBMSV2/BMSModule.cpp +++ b/VWBMSV2/BMSModule.cpp @@ -422,6 +422,7 @@ float BMSModule::getLowTemp() { return temperatures[0]; } + return 0.0f; } float BMSModule::getHighTemp() @@ -494,16 +495,17 @@ float BMSModule::getAvgTemp() { return temperatures[0]; } + return 0.0f; } float BMSModule::getModuleVoltage() { moduleVolt = 0; - for (int I; I < 13; I++) + for (int i = 0; i < 13; i++) { - if (cellVolt[I] > IgnoreCell && cellVolt[I] < 5.0) + if (cellVolt[i] > IgnoreCell && cellVolt[i] < 5.0) { - moduleVolt = moduleVolt + cellVolt[I]; + moduleVolt = moduleVolt + cellVolt[i]; } } return moduleVolt; @@ -569,9 +571,9 @@ void BMSModule::setReset(bool ex) void BMSModule::setIgnoreCell(float Ignore) { IgnoreCell = Ignore; - Serial.println(); - Serial.println(); - Serial.println(Ignore); - Serial.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.println(Ignore); + SERIALCONSOLE.println(); } diff --git a/VWBMSV2/BMSModule.h b/VWBMSV2/BMSModule.h index 28172ad..52b61fc 100644 --- a/VWBMSV2/BMSModule.h +++ b/VWBMSV2/BMSModule.h @@ -1,5 +1,24 @@ #pragma once +#ifdef USING_TEENSY4 +#include +#else #include +#endif + +#define MAIN_MENU_KEY 's' + +enum en_menus +{ + q_exit_menu = 0, + s_main_menu, + c_Current_Sensor_Calibration, + b_Battery_Settings, + d_Debug_Settings, + k_Contactor_and_Gauge_Settings, + e_Charging_Settings, + a_Alarm_and_Warning_Settings, + i_Ignore_Value_Settings +}; class BMSModule { diff --git a/VWBMSV2/BMSModuleManager.cpp b/VWBMSV2/BMSModuleManager.cpp index f4efd64..44b47ca 100644 --- a/VWBMSV2/BMSModuleManager.cpp +++ b/VWBMSV2/BMSModuleManager.cpp @@ -3,6 +3,9 @@ #include "BMSUtil.h" #include "Logger.h" +#ifdef USING_TEENSY4 +extern FlexCAN_T4 Can0; +#endif //USING_TEENSY4 extern EEPROMSettings settings; CAN_message_t OUTmsg; @@ -52,8 +55,8 @@ bool BMSModuleManager::checkcomms() void BMSModuleManager::setBalanceHyst(float newVal) { BalHys = newVal; - //Serial.println(); - //Serial.println(BalHys, 3); + //SERIALCONSOLE.println(); + //SERIALCONSOLE.println(BalHys, 3); } void BMSModuleManager::balanceCells(int debug) @@ -61,13 +64,13 @@ void BMSModuleManager::balanceCells(int debug) uint16_t balance = 0;//bit 0 - 5 are to activate cell balancing 1-6 - //Serial.println(); - // Serial.println(LowCellVolt + BalHys, 3); + //SERIALCONSOLE.println(); + // SERIALCONSOLE.println(LowCellVolt + BalHys, 3); /* - Serial.println(); - Serial.println(); - Serial.print("Balcnt:"); - Serial.println(balcnt); + SERIALCONSOLE.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.print("Balcnt:"); + SERIALCONSOLE.println(balcnt); */ if (balcnt > 60) { @@ -94,8 +97,8 @@ void BMSModuleManager::balanceCells(int debug) /* else { - Serial.print(" | "); - Serial.print(i); + SERIALCONSOLE.print(" | "); + SERIALCONSOLE.print(i); } */ } @@ -105,11 +108,11 @@ void BMSModuleManager::balanceCells(int debug) } if (debug == 1) { - Serial.println(); - Serial.print("Module "); - Serial.print(y); - Serial.print(" | "); - Serial.println(balance, HEX); + SERIALCONSOLE.println(); + SERIALCONSOLE.print("Module "); + SERIALCONSOLE.print(y); + SERIALCONSOLE.print(" | "); + SERIALCONSOLE.println(balance, HEX); } @@ -177,7 +180,7 @@ void BMSModuleManager::balanceCells(int debug) break; } OUTmsg.len = 8; - OUTmsg.ext = 1; + OUTmsg.flags.extended = 1; Can0.write(OUTmsg); delay(1); @@ -241,7 +244,7 @@ void BMSModuleManager::balanceCells(int debug) break; } OUTmsg.len = 8; - OUTmsg.ext = 1; + OUTmsg.flags.extended = 1; Can0.write(OUTmsg); } } @@ -266,7 +269,7 @@ void BMSModuleManager::balanceCells(int debug) OUTmsg.buf[7] = 0X00; OUTmsg.len = 8; - OUTmsg.ext = 1; + OUTmsg.flags.extended = 1; OUTmsg.id = 0x1A55540A; Can0.write(OUTmsg); @@ -379,10 +382,10 @@ void BMSModuleManager::balanceCells(int debug) } balcnt++; /* - Serial.print("Bal:"); - Serial.print(balancing); + SERIALCONSOLE.print("Bal:"); + SERIALCONSOLE.print(balancing); */ - OUTmsg.ext = 0; + OUTmsg.flags.extended = 0; } @@ -432,9 +435,9 @@ void BMSModuleManager::decodetemp(CAN_message_t &msg, int debug, int type) modules[CMU].decodetemp(msg, 1); if (debug == 1) { - Serial.println(); - Serial.print(CMU); - Serial.print(" | Temp Found"); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CMU); + SERIALCONSOLE.print(" | Temp Found"); } } } @@ -451,9 +454,9 @@ void BMSModuleManager::decodetemp(CAN_message_t &msg, int debug, int type) modules[CMU].decodetemp(msg, 2); if (debug == 1) { - Serial.println(); - Serial.print(CMU); - Serial.print("| Temp Found"); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CMU); + SERIALCONSOLE.print("| Temp Found"); } } } @@ -727,11 +730,11 @@ void BMSModuleManager::decodecan(CAN_message_t &msg, int debug) { if (debug == 1) { - Serial.println(); - Serial.print(CMU); - Serial.print(","); - Serial.print(Id); - Serial.print(" | "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CMU); + SERIALCONSOLE.print(","); + SERIALCONSOLE.print(Id); + SERIALCONSOLE.print(" | "); } modules[CMU].setExists(true); modules[CMU].setReset(true); @@ -744,11 +747,11 @@ void BMSModuleManager::decodecan(CAN_message_t &msg, int debug) { if (debug == 1) { - Serial.println(); - Serial.print(CMU); - Serial.print(","); - Serial.print(Id); - Serial.print(" | "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CMU); + SERIALCONSOLE.print(","); + SERIALCONSOLE.print(Id); + SERIALCONSOLE.print(" | "); } modules[CMU].setExists(true); modules[CMU].setReset(true); diff --git a/VWBMSV2/BMSModuleManager.h b/VWBMSV2/BMSModuleManager.h index 79cde61..6f4add4 100644 --- a/VWBMSV2/BMSModuleManager.h +++ b/VWBMSV2/BMSModuleManager.h @@ -1,7 +1,9 @@ #pragma once #include "config.h" #include "BMSModule.h" +#ifndef USING_TEENSY4 #include +#endif class BMSModuleManager { diff --git a/VWBMSV2/Logger.cpp b/VWBMSV2/Logger.cpp index 8ce6f2c..4984a3f 100644 --- a/VWBMSV2/Logger.cpp +++ b/VWBMSV2/Logger.cpp @@ -34,7 +34,7 @@ uint32_t Logger::lastLogTime = 0; printf() style, see Logger::log() */ -void Logger::debug(char *message, ...) { +void Logger::debug(const char *message, ...) { if (logLevel > Debug) return; va_list args; @@ -47,7 +47,7 @@ void Logger::debug(char *message, ...) { Output a info message with a variable amount of parameters printf() style, see Logger::log() */ -void Logger::info(char *message, ...) { +void Logger::info(const char *message, ...) { if (logLevel > Info) return; va_list args; @@ -60,7 +60,7 @@ void Logger::info(char *message, ...) { Output a warning message with a variable amount of parameters printf() style, see Logger::log() */ -void Logger::warn(char *message, ...) { +void Logger::warn(const char *message, ...) { if (logLevel > Warn) return; va_list args; @@ -73,7 +73,7 @@ void Logger::warn(char *message, ...) { Output a error message with a variable amount of parameters printf() style, see Logger::log() */ -void Logger::error(char *message, ...) { +void Logger::error(const char *message, ...) { if (logLevel > Error) return; va_list args; @@ -86,7 +86,7 @@ void Logger::error(char *message, ...) { Output a comnsole message with a variable amount of parameters printf() style, see Logger::logMessage() */ -void Logger::console(char *message, ...) { +void Logger::console(const char *message, ...) { va_list args; va_start(args, message); Logger::logMessage(message, args); @@ -146,7 +146,7 @@ boolean Logger::isDebug() { %t - prints the next parameter as boolean ('T' or 'F') %T - prints the next parameter as boolean ('true' or 'false') */ -void Logger::log(LogLevel level, char *format, va_list args) { +void Logger::log(LogLevel level, const char *format, va_list args) { lastLogTime = millis(); SERIALCONSOLE.print(lastLogTime); SERIALCONSOLE.print(" - "); @@ -164,6 +164,8 @@ void Logger::log(LogLevel level, char *format, va_list args) { case Error: SERIALCONSOLE.print("ERROR"); break; + default: + break; } SERIALCONSOLE.print(": "); @@ -188,7 +190,7 @@ void Logger::log(LogLevel level, char *format, va_list args) { %t - prints the next parameter as boolean ('T' or 'F') %T - prints the next parameter as boolean ('true' or 'false') */ -void Logger::logMessage(char *format, va_list args) { +void Logger::logMessage(const char *format, va_list args) { for (; *format != 0; ++format) { if (*format == '%') { ++format; diff --git a/VWBMSV2/Logger.h b/VWBMSV2/Logger.h index 99343d7..c481ac5 100644 --- a/VWBMSV2/Logger.h +++ b/VWBMSV2/Logger.h @@ -35,11 +35,11 @@ class Logger { enum LogLevel { Debug = 0, Info = 1, Warn = 2, Error = 3, Off = 4 }; - static void debug(char *, ...); - static void info(char *, ...); - static void warn(char *, ...); - static void error(char *, ...); - static void console(char *, ...); + static void debug(const char *, ...); + static void info(const char *, ...); + static void warn(const char *, ...); + static void error(const char *, ...); + static void console(const char *, ...); static void setLoglevel(LogLevel); static LogLevel getLogLevel(); static uint32_t getLastLogTime(); @@ -48,8 +48,8 @@ class Logger { static LogLevel logLevel; static uint32_t lastLogTime; - static void log(LogLevel, char *format, va_list); - static void logMessage(char *format, va_list args); + static void log(LogLevel, const char *format, va_list); + static void logMessage(const char *format, va_list args); }; #endif /* LOGGER_H_ */ diff --git a/VWBMSV2/SerialConsole.cpp b/VWBMSV2/SerialConsole.cpp index 8ab3e27..fcf88b0 100644 --- a/VWBMSV2/SerialConsole.cpp +++ b/VWBMSV2/SerialConsole.cpp @@ -78,13 +78,14 @@ void SerialConsole::printMenu() { Logger::console(" d = Toggle output of pack details every 3 seconds"); Logger::console(" LOGLEVEL=%i - set log level (0=debug, 1=info, 2=warn, 3=error, 4=off)", Logger::getLogLevel()); - +/* float OverVSetpoint; float UnderVSetpoint; float OverTSetpoint; float UnderTSetpoint; float balanceVoltage; float balanceHyst; +*/ } /* There is a help menu (press H or h or ?) @@ -97,7 +98,8 @@ void SerialConsole::serialEvent() { if (incoming == -1) { //false alarm.... return; } - + // Line feed and carriage return chars + // LF CR if (incoming == 10 || incoming == 13) { //command done. Parse it. handleConsoleCmd(); ptrBuffer = 0; //reset line counter once the line has been processed @@ -121,8 +123,6 @@ void SerialConsole::handleConsoleCmd() { void SerialConsole::handleShortCmd() { - uint8_t val; - switch (cmdBuffer[0]) { case 'h': @@ -201,14 +201,14 @@ void SerialConsole::handleShortCmd() break; case '0': //Send all boards into Sleep state - Serial.println(); - Serial.println("Sleep Mode"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Sleep Mode"); sleepBoards(); break; case '9'://Pull all boards out of Sleep state - Serial.println(); - Serial.println("Wake Boards"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Wake Boards"); wakeBoards(); break; diff --git a/VWBMSV2/VWBMSV2.ino b/VWBMSV2/VWBMSV2.ino index 6d808f0..68cfa06 100644 --- a/VWBMSV2/VWBMSV2.ino +++ b/VWBMSV2/VWBMSV2.ino @@ -18,27 +18,52 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/******************************** + Port notes: +Clone those libraries: +https://github.com/JonHub/Filters +https://github.com/tonton81/FlexCAN_T4 +https://github.com/tonton81/WDT_T4 +in ~/Arduino/libraries + ********************************/ +#include "config.h" #include "BMSModuleManager.h" #include -#include "config.h" #include "SerialConsole.h" #include "Logger.h" #include //https://github.com/pedvide/ADC #include -#include //https://github.com/collin80/FlexCAN_Library + #include #include //https://github.com/JonHub/Filters #include "BMSUtil.h" #define CPU_REBOOT (_reboot_Teensyduino_()); +#ifdef USING_TEENSY4 +#include //https://github.com/tonton81/FlexCAN_T4 +#include +#include +#include +#include +#include +#include "Watchdog_t4.h" //https://github.com/tonton81/WDT_T4 +WDT_T4 wdt; +/******************************** + Port notes: + WDOG_TOVALL The bare metal watchdog register acces must be replaced + PMC_LVDSC2 The bare metal low voltage irq must be replaced. + */ +#else +#include //https://github.com/collin80/FlexCAN_Library +#endif //USING_TEENSY4 + BMSModuleManager bms; SerialConsole console; EEPROMSettings settings; - /////Version Identifier///////// -int firmver = 230920; +int firmver = 240101; //Curent filter// float filterFrequency = 5.0; @@ -46,20 +71,38 @@ FilterOnePole lowpassFilter(LOWPASS, filterFrequency); //Simple BMS V2 wiring// +#ifdef USING_TEENSY4 +FlexCAN_T4 Can0; + +// A0 and A1 are needed for serial3 used on the Tesla BMS +// Take them on IN1 and IN2 +// Some pins must be cut on the adapter +const int ACUR2 = A2; // current 1 +const int ACUR1 = A3; // current 2 +const int IN1 = 9; // input 1 - high active +const int IN2 = 10; // input 2- high active +#else const int ACUR2 = A0; // current 1o const int ACUR1 = A1; // current 2 const int IN1 = 17; // input 1 - high active const int IN2 = 16; // input 2- high active -const int IN3 = 18; // input 1 - high active -const int IN4 = 19; // input 2- high active -const int OUT1 = 11; // output 1 - high active -const int OUT2 = 12; // output 1 - high active -const int OUT3 = 20; // output 1 - high active -const int OUT4 = 21; // output 1 - high active +#endif //USING_TEENSY4 +const int IN3 = 18; // input 1 - high active +const int IN4 = 19; // input 2- high active +const int OUT1 = 11; // output 1 - high active +const int OUT2 = 12; // output 1 - high active +const int OUT3 = 20; // output 1 - high active +const int OUT4 = 21; // output 1 - high active +#ifdef USING_TEENSY4 +// Swaped with Teensy 4.0 CAN1 +const int OUT5 = 3; // output 1 - high active +const int OUT6 = 4; // output 1 - high active +#else const int OUT5 = 22; // output 1 - high active const int OUT6 = 23; // output 1 - high active -const int OUT7 = 5; // output 1 - high active -const int OUT8 = 6; // output 1 - high active +#endif //USING_TEENSY4 +const int OUT7 = 5; // output 1 - high active +const int OUT8 = 6; // output 1 - high active const int led = 13; const int BMBfault = 11; @@ -115,7 +158,7 @@ int16_t pwmcurmin = 0; //DONOT fill in, calculated later based on other values //variables for VE driect bus comms -char* myStrings[] = { "V", "14674", "I", "0", "CE", "-1", "SOC", "800", "TTG", "-1", "Alarm", "OFF", "Relay", "OFF", "AR", "0", "BMV", "600S", "FW", "212", "H1", "-3", "H2", "-3", "H3", "0", "H4", "0", "H5", "0", "H6", "-7", "H7", "13180", "H8", "14774", "H9", "137", "H10", "0", "H11", "0", "H12", "0" }; +const char* myStrings[] = { "V", "14674", "I", "0", "CE", "-1", "SOC", "800", "TTG", "-1", "Alarm", "OFF", "Relay", "OFF", "AR", "0", "BMV", "600S", "FW", "212", "H1", "-3", "H2", "-3", "H3", "0", "H4", "0", "H5", "0", "H6", "-7", "H7", "13180", "H8", "14774", "H9", "137", "H10", "0", "H11", "0", "H12", "0" }; //variables for VE can uint16_t chargevoltage = 49100; //max charge voltage in mv @@ -207,11 +250,37 @@ int outputcheck = 0; //check outputs int candebug = 0; //view can frames int debugCur = 0; int CSVdebug = 0; -int menuload = 0; +int menuload = q_exit_menu; int debugdigits = 2; //amount of digits behind decimal for voltage reading ADC* adc = new ADC(); // adc object +/** +* Prints the ErrorReason bits in readable form +*/ +void serial_print_ErrorReason(int reason) +{ + const char* pErrorStr[] = { + "0x01-\"Undervoltage Fault\" ", + "0x02-\"unknown\"", + "0x04-\"Series Cells Fault\" ", + "0x08-\"Missing Module\"" + }; + + if (reason != 0) + { + SERIALCONSOLE.print(" ("); + for (int i = 0; i < 4; i++) + { + if (reason & (1 << i)) + { + SERIALCONSOLE.print(pErrorStr[i]); + } + } + SERIALCONSOLE.print(") "); + } +} + void loadSettings() { Logger::console("Resetting to factory defaults"); settings.version = EEPROM_VERSION; @@ -275,7 +344,13 @@ void loadSettings() { CAN_message_t msg; CAN_message_t inMsg; +#ifndef USING_TEENSY4 CAN_filter_t filter; +#else +void myCallback() { + SERIALCONSOLE.println("FEED THE DOG SOON, OR RESET!"); +} +#endif uint32_t lastUpdate; @@ -311,6 +386,22 @@ void setup() { analogWriteFrequency(OUT7, pwmfreq); analogWriteFrequency(OUT8, pwmfreq); +#ifdef USING_TEENSY4 + Can0.begin(); + Can0.setBaudRate(500000); + + Can0.mailboxStatus(); + //set filters for standard 11 bits ID on mailboxes 0 to 8 + for (int i = 0; i < 8; i++) { + Can0.setMB(static_cast(i), RX, STD); + } + //set filters for extended 29 bits ID on mailboxes 9 to 13 + for (int i = 9; i < 13; i++) { + Can0.setMB(static_cast(i), RX, EXT); + } + // MB 14 and 15 are TX + Can0.mailboxStatus(); +#else Can0.begin(500000); //set filters for standard @@ -325,6 +416,7 @@ void setup() { filter.flags.extended = 1; Can0.setFilter(filter, i); } +#endif //USING_TEENSY4 //if using enable pins on a transceiver they need to be set on @@ -343,23 +435,33 @@ void setup() { Serial2.begin(115200); // Display reason the Teensy was last reset - Serial.println(); - Serial.println("Reason for last Reset: "); - - if (RCM_SRS1 & RCM_SRS1_SACKERR) Serial.println("Stop Mode Acknowledge Error Reset"); - if (RCM_SRS1 & RCM_SRS1_MDM_AP) Serial.println("MDM-AP Reset"); - if (RCM_SRS1 & RCM_SRS1_SW) Serial.println("Software Reset"); // reboot with SCB_AIRCR = 0x05FA0004 - if (RCM_SRS1 & RCM_SRS1_LOCKUP) Serial.println("Core Lockup Event Reset"); - if (RCM_SRS0 & RCM_SRS0_POR) Serial.println("Power-on Reset"); // removed / applied power - if (RCM_SRS0 & RCM_SRS0_PIN) Serial.println("External Pin Reset"); // Reboot with software download - if (RCM_SRS0 & RCM_SRS0_WDOG) Serial.println("Watchdog(COP) Reset"); // WDT timed out - if (RCM_SRS0 & RCM_SRS0_LOC) Serial.println("Loss of External Clock Reset"); - if (RCM_SRS0 & RCM_SRS0_LOL) Serial.println("Loss of Lock in PLL Reset"); - if (RCM_SRS0 & RCM_SRS0_LVD) Serial.println("Low-voltage Detect Reset"); - Serial.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Reason for last Reset: "); +#ifdef USING_TEENSY4 + // Reset cause regisgter not avialable on Teensy 4 + SERIALCONSOLE.println("Reset cause regisgter not avialable on Teensy 4"); +#else + if (RCM_SRS1 & RCM_SRS1_SACKERR) SERIALCONSOLE.println("Stop Mode Acknowledge Error Reset"); + if (RCM_SRS1 & RCM_SRS1_MDM_AP) SERIALCONSOLE.println("MDM-AP Reset"); + if (RCM_SRS1 & RCM_SRS1_SW) SERIALCONSOLE.println("Software Reset"); // reboot with SCB_AIRCR = 0x05FA0004 + if (RCM_SRS1 & RCM_SRS1_LOCKUP) SERIALCONSOLE.println("Core Lockup Event Reset"); + if (RCM_SRS0 & RCM_SRS0_POR) SERIALCONSOLE.println("Power-on Reset"); // removed / applied power + if (RCM_SRS0 & RCM_SRS0_PIN) SERIALCONSOLE.println("External Pin Reset"); // Reboot with software download + if (RCM_SRS0 & RCM_SRS0_WDOG) SERIALCONSOLE.println("Watchdog(COP) Reset"); // WDT timed out + if (RCM_SRS0 & RCM_SRS0_LOC) SERIALCONSOLE.println("Loss of External Clock Reset"); + if (RCM_SRS0 & RCM_SRS0_LOL) SERIALCONSOLE.println("Loss of Lock in PLL Reset"); + if (RCM_SRS0 & RCM_SRS0_LVD) SERIALCONSOLE.println("Low-voltage Detect Reset"); +#endif + SERIALCONSOLE.println(); /////////////////// - +#ifdef USING_TEENSY4 + WDT_timings_t config; + config.trigger = 10; /* in seconds, 0->128 */ + config.timeout = 20; /* in seconds, 0->128 */ + config.callback = myCallback; + wdt.begin(config); +#else // enable WDT noInterrupts(); // don't allow interrupts while setting up WDOG WDOG_UNLOCK = WDOG_UNLOCK_SEQ1; // unlock access to WDOG registers @@ -371,6 +473,7 @@ void setup() { WDOG_PRESC = 0; WDOG_STCTRLH |= WDOG_STCTRLH_ALLOWUPDATE | WDOG_STCTRLH_WDOGEN | WDOG_STCTRLH_WAITEN | WDOG_STCTRLH_STOPEN | WDOG_STCTRLH_CLKSRC; interrupts(); +#endif //USING_TEENSY4 ///////////////// SERIALBMS.begin(115200); //SERIALBMS.begin(612500); //Tesla serial bus @@ -383,7 +486,7 @@ void setup() { EEPROM.get(0, settings); if (settings.version != EEPROM_VERSION) { - Serial.println(); + SERIALCONSOLE.println(); loadSettings(); } @@ -430,18 +533,24 @@ void setup() { //RISING/HIGH/CHANGE/LOW/FALLING attachInterrupt(IN4, isrCP, CHANGE); // attach BUTTON 1 interrupt handler [ pin# 7 ] +// TEESNY4 has no low voltage detector +#ifndef USING_TEENSY4 PMC_LVDSC1 = PMC_LVDSC1_LVDV(1); // enable hi v PMC_LVDSC2 = PMC_LVDSC2_LVWIE | PMC_LVDSC2_LVWV(3); // 2.92-3.08v attachInterruptVector(IRQ_LOW_VOLTAGE, low_voltage_isr); NVIC_ENABLE_IRQ(IRQ_LOW_VOLTAGE); - +#endif cleartime = millis(); } void loop() { + #ifdef USING_TEENSY4 + canread(); + #else while (Can0.available()) { canread(); } + #endif if (SERIALCONSOLE.available() > 0) { menu(); @@ -458,17 +567,17 @@ void loop() { if (digitalRead(OUT2) == LOW && digitalRead(OUT4) == LOW) { mainconttimer = millis(); digitalWrite(OUT4, HIGH); //Precharge start - Serial.println(); - Serial.println("Precharge!!!"); - Serial.println(mainconttimer); - Serial.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Precharge!!!"); + SERIALCONSOLE.println(mainconttimer); + SERIALCONSOLE.println(); } if (mainconttimer + settings.Pretime < millis() && digitalRead(OUT2) == LOW && abs(currentact) < settings.Precurrent) { digitalWrite(OUT2, HIGH); //turn on contactor contctrl = contctrl | 2; //turn on contactor - Serial.println(); - Serial.println("Main On!!!"); - Serial.println(); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Main On!!!"); + SERIALCONSOLE.println(); mainconttimer = millis() + settings.Pretime; } if (mainconttimer + settings.Pretime + 1000 < millis()) { @@ -533,8 +642,8 @@ void loop() { if (bms.getHighCellVolt() > settings.OverVSetpoint || bms.getHighCellVolt() > settings.ChargeVsetpoint || chargecurrent == 0) { if ((millis() - overtriptimer) > settings.triptime) { if (digitalRead(OUT3) == 1) { - Serial.println(); - Serial.println("Over Voltage Trip"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Over Voltage Trip"); digitalWrite(OUT3, LOW); //turn off charger // contctrl = contctrl & 253; //Pretimer = millis(); @@ -548,31 +657,31 @@ void loop() { if (bms.getHighCellVolt() < (settings.ChargeVsetpoint - settings.ChargeHys)) { if (digitalRead(OUT3) == 0) { - Serial.println(); - Serial.println("Reset Over Voltage Trip Not Charged"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Reset Over Voltage Trip Not Charged"); Charged = 0; digitalWrite(OUT3, HIGH); //turn on charger } /* if (Pretimer + settings.Pretime < millis()) { - // Serial.println(); - //Serial.print(Pretimer); + // SERIALCONSOLE.println(); + //SERIALCONSOLE.print(Pretimer); contctrl = contctrl | 2; }*/ } } else { if (digitalRead(OUT3) == 0) { - Serial.println(); - Serial.println("Reset Over Voltage Trip Not Charged"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Reset Over Voltage Trip Not Charged"); digitalWrite(OUT3, HIGH); //turn on charger } /* if (Pretimer + settings.Pretime < millis()) { - // Serial.println(); - //Serial.print(Pretimer); + // SERIALCONSOLE.println(); + //SERIALCONSOLE.print(Pretimer); contctrl = contctrl | 2; }*/ } @@ -583,8 +692,8 @@ void loop() { if (digitalRead(OUT1) == 1) { if ((millis() - undertriptimer) > settings.triptime) { - Serial.println(); - Serial.println("Under Voltage Trip"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Under Voltage Trip"); digitalWrite(OUT1, LOW); //turn off discharge // contctrl = contctrl & 254; // Pretimer1 = millis(); @@ -595,8 +704,8 @@ void loop() { if (bms.getLowCellVolt() > settings.DischVsetpoint + settings.DischHys) { if (digitalRead(OUT1) == 0) { - Serial.println(); - Serial.println("Reset Under Voltage Trip"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("Reset Under Voltage Trip"); digitalWrite(OUT1, HIGH); //turn on discharge } /* @@ -882,7 +991,7 @@ void loop() { cleartime = millis(); } - if (millis() - looptime1 > settings.chargerspd) { + if (millis() - looptime1 > (unsigned int)settings.chargerspd) { looptime1 = millis(); if (settings.ESSmode == 1) { chargercomms(); @@ -1003,6 +1112,7 @@ void printbmsstat() { } SERIALCONSOLE.print("ErrSt: "); SERIALCONSOLE.print(ErrorReason); + serial_print_ErrorReason(ErrorReason); } else { SERIALCONSOLE.print(bmsstatus); switch (bmsstatus) { @@ -1041,7 +1151,7 @@ void printbmsstat() { if (balancecells == 1) { SERIALCONSOLE.print("|Balancing Active"); } - SERIALCONSOLE.print(" "); + SERIALCONSOLE.print(" cells:"); SERIALCONSOLE.print(cellspresent); SERIALCONSOLE.println(); SERIALCONSOLE.print("Out:"); @@ -1134,7 +1244,7 @@ void getcurrent() { SERIALCONSOLE.print(settings.offset2); } RawCur = int16_t((value * 3300 / adc->adc0->getMaxValue()) - settings.offset2) / (settings.convhigh * 0.00001); - if (value < 100 || value > (adc->adc0->getMaxValue() - 100)) { + if (value < 100 || value > (int)(adc->adc0->getMaxValue() - 100)) { RawCur = 0; } if (debugCur != 0) { @@ -1360,8 +1470,8 @@ void contcon() { if ((contctrl & 2) == 2) { if ((contstat & 2) != 2) { if (conttimer2 == 0) { - Serial.println(); - Serial.println("pull in OUT6"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("pull in OUT6"); analogWrite(OUT6, 255); conttimer2 = millis() + pulltime; } @@ -1375,8 +1485,8 @@ void contcon() { if ((contctrl & 4) == 4) { if ((contstat & 4) != 4) { if (conttimer3 == 0) { - Serial.println(); - Serial.println("pull in OUT7"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("pull in OUT7"); analogWrite(OUT7, 255); conttimer3 = millis() + pulltime; } @@ -1508,8 +1618,13 @@ void VEcan() //communication with Victron system over CAN msg.id = 0x35E; msg.len = 2; +#ifdef USING_TEENSY4 + msg.buf[0] = 'T'; //No idea how the naming works + msg.buf[1] = 'P'; //No idea how the naming works +#else msg.buf[0] = "T"; //No idea how the naming works msg.buf[1] = "P"; //No idea how the naming works +#endif Can0.write(msg); } else { msg.id = 0x351; @@ -1720,27 +1835,90 @@ void BMVmessage() //communication with the Victron Color Control System over VE VE.write(231); } +/** +* Clear the serial buffer to ignore the next values +*/ +void clear_serial_buffer() +{ + while (SERIALCONSOLE.available()) + { + SERIALCONSOLE.read(); + } +} + +size_t csize = 128; +char g_serial_buffer[128]; +int g_serial_index = 0; + +/** +** Add the data to a buffer until CR or LF is found +*/ +bool read_new_line() +{ + size_t index = 0; + int inputbyte; + + inputbyte = SERIALCONSOLE.read(); + if (inputbyte != -1) + { + g_serial_buffer[g_serial_index++] = inputbyte; + g_serial_buffer[g_serial_index] = '\0'; + } + if (index >= csize - 1) + { + index = 0; + } + return (inputbyte == 10 || inputbyte == 13); +} + +int getint(char *pbuffer, int size) +{ + if (size) + { + return atoi(pbuffer); + } + return 0; +} + +#define PARSEINT getint(input_line, input_size - 1) +//#define PARSEINT SERIALCONSOLE.parseInt() + // Settings menu void menu() { + char input_line[128]; + int input_size; + + //incomingByte = SERIALCONSOLE.read(); // read the incoming byte: + bool bnewline = read_new_line(); + if (!bnewline) + { + return ; + } + incomingByte = g_serial_buffer[0]; + input_size = g_serial_index; + g_serial_index = 0; + memcpy(input_line, &g_serial_buffer[1], input_size); - incomingByte = Serial.read(); // read the incoming byte: - if (menuload == 4) { + //SERIALCONSOLE.print("Recieved: "); + //SERIALCONSOLE.println(input_line); + + if (menuload == d_Debug_Settings) { switch (incomingByte) { case '1': - menuload = 1; + menuload = s_main_menu; candebug = !candebug; incomingByte = 'd'; break; case '2': - menuload = 1; + menuload = s_main_menu; debugCur = !debugCur; incomingByte = 'd'; break; case '3': - menuload = 1; + menuload = s_main_menu; outputcheck = !outputcheck; if (outputcheck == 0) { contctrl = 0; @@ -1753,39 +1931,39 @@ void menu() { break; case '4': - menuload = 1; + menuload = s_main_menu; inputcheck = !inputcheck; incomingByte = 'd'; break; case '5': - menuload = 1; + menuload = s_main_menu; settings.ESSmode = !settings.ESSmode; incomingByte = 'd'; break; case '6': - menuload = 1; + menuload = s_main_menu; cellspresent = bms.seriescells(); incomingByte = 'd'; break; case '7': - menuload = 1; + menuload = s_main_menu; gaugedebug = !gaugedebug; incomingByte = 'd'; break; case '8': - menuload = 1; + menuload = s_main_menu; CSVdebug = !CSVdebug; incomingByte = 'd'; break; case '9': - menuload = 1; - if (Serial.available() > 0) { - debugdigits = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + debugdigits = PARSEINT; } if (debugdigits > 4) { debugdigits = 2; @@ -1795,15 +1973,15 @@ void menu() { case 'b': - menuload = 1; + menuload = s_main_menu; balon = !balon; incomingByte = 'd'; break; - case 113: //q for quite menu + case 'q': //q for quit menu - menuload = 0; - incomingByte = 115; + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; default: @@ -1813,7 +1991,7 @@ void menu() { } } - if (menuload == 2) { + if (menuload == c_Current_Sensor_Calibration) { switch (incomingByte) { @@ -1823,63 +2001,63 @@ void menu() { break; case '1': - menuload = 1; + menuload = s_main_menu; settings.invertcur = !settings.invertcur; incomingByte = 'c'; break; case '2': - menuload = 1; + menuload = s_main_menu; settings.voltsoc = !settings.voltsoc; incomingByte = 'c'; break; case '3': - menuload = 1; - if (Serial.available() > 0) { - settings.ncur = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + settings.ncur = PARSEINT; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'c'; break; case '4': - menuload = 1; - if (Serial.available() > 0) { - settings.convlow = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + settings.convlow = PARSEINT; } incomingByte = 'c'; break; case '5': - menuload = 1; - if (Serial.available() > 0) { - settings.convhigh = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + settings.convhigh = PARSEINT; } incomingByte = 'c'; break; case '6': - menuload = 1; - if (Serial.available() > 0) { - settings.CurDead = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + settings.CurDead = PARSEINT; } incomingByte = 'c'; break; case '8': - menuload = 1; - if (Serial.available() > 0) { - settings.changecur = Serial.parseInt(); + menuload = s_main_menu; + if (input_size > 0) { + settings.changecur = PARSEINT; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'c'; break; - case 113: //q for quite menu + case 'q': //q for quite menu - menuload = 0; - incomingByte = 115; + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; case 115: //s for switch sensor @@ -1903,7 +2081,7 @@ void menu() { SERIALCONSOLE.println(" "); } */ - menuload = 1; + menuload = s_main_menu; incomingByte = 'c'; break; @@ -1912,7 +2090,7 @@ void menu() { if (settings.curcan > CurCanMax) { settings.curcan = 1; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'c'; break; @@ -1923,127 +2101,122 @@ void menu() { } } - if (menuload == 8) { + if (menuload == i_Ignore_Value_Settings) { switch (incomingByte) { case '1': //e dispaly settings - if (Serial.available() > 0) { - settings.IgnoreTemp = Serial.parseInt(); + if (input_size > 0) { + settings.IgnoreTemp = PARSEINT; } if (settings.IgnoreTemp > 3) { settings.IgnoreTemp = 0; } bms.setSensors(settings.IgnoreTemp, settings.IgnoreVolt, settings.DeltaVolt); - menuload = 1; + menuload = s_main_menu; incomingByte = 'i'; break; case '2': - if (Serial.available() > 0) { - settings.IgnoreVolt = Serial.parseInt(); + if (input_size > 0) { + settings.IgnoreVolt = PARSEINT; settings.IgnoreVolt = settings.IgnoreVolt * 0.001; bms.setSensors(settings.IgnoreTemp, settings.IgnoreVolt, settings.DeltaVolt); - // Serial.println(settings.IgnoreVolt); - menuload = 1; + // SERIALCONSOLE.println(settings.IgnoreVolt); + menuload = s_main_menu; incomingByte = 'i'; } break; - case 113: //q to go back to main menu + case 'q': //q to go back to main menu - menuload = 0; - incomingByte = 115; + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; } } - - - if (menuload == 7) { + if (menuload == a_Alarm_and_Warning_Settings) { switch (incomingByte) { case '1': - if (Serial.available() > 0) { - settings.WarnOff = Serial.parseInt(); + if (input_size > 0) { + settings.WarnOff = PARSEINT; settings.WarnOff = settings.WarnOff * 0.001; - menuload = 1; + menuload = s_main_menu; incomingByte = 'a'; } break; case '2': - if (Serial.available() > 0) { - settings.CellGap = Serial.parseInt(); + if (input_size > 0) { + settings.CellGap = PARSEINT; settings.CellGap = settings.CellGap * 0.001; - menuload = 1; + menuload = s_main_menu; incomingByte = 'a'; } break; case '3': - if (Serial.available() > 0) { - settings.WarnToff = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.WarnToff = PARSEINT; + menuload = s_main_menu; incomingByte = 'a'; } break; case '4': - if (Serial.available() > 0) { - settings.triptime = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.triptime = PARSEINT; + menuload = s_main_menu; incomingByte = 'a'; } break; - case 113: //q to go back to main menu - menuload = 0; - incomingByte = 115; + case 'q': //q to go back to main menu + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; } } - if (menuload == 6) //Charging settings + if (menuload == e_Charging_Settings) //Charging settings { switch (incomingByte) { - case 113: //q to go back to main menu + case 'q': //q to go back to main menu - menuload = 0; - incomingByte = 115; + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; case '1': - if (Serial.available() > 0) { - settings.ChargeVsetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.ChargeVsetpoint = PARSEINT; settings.ChargeVsetpoint = settings.ChargeVsetpoint / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; } break; - case '2': - if (Serial.available() > 0) { - settings.ChargeHys = Serial.parseInt(); + if (input_size > 0) { + settings.ChargeHys = PARSEINT; settings.ChargeHys = settings.ChargeHys / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; } break; - case '4': - if (Serial.available() > 0) { - settings.chargecurrentend = Serial.parseInt() * 10; - menuload = 1; + if (input_size > 0) { + settings.chargecurrentend = PARSEINT * 10; + menuload = s_main_menu; incomingByte = 'e'; } break; - case '3': - if (Serial.available() > 0) { - settings.chargecurrentmax = Serial.parseInt() * 10; - menuload = 1; + if (input_size > 0) { + settings.chargecurrentmax = PARSEINT * 10; + menuload = s_main_menu; incomingByte = 'e'; } break; @@ -2053,14 +2226,14 @@ void menu() { if (settings.chargertype > 8) { settings.chargertype = 0; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; break; case '6': - if (Serial.available() > 0) { - settings.chargerspd = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.chargerspd = PARSEINT; + menuload = s_main_menu; incomingByte = 'e'; } break; @@ -2071,74 +2244,74 @@ void menu() { } else { settings.ChargerDirect = 1; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; break; case '9': - if (Serial.available() > 0) { - settings.ChargeTSetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.ChargeTSetpoint = PARSEINT; if (settings.ChargeTSetpoint < settings.UnderTSetpoint) { settings.ChargeTSetpoint = settings.UnderTSetpoint; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; } break; case '0': - if (Serial.available() > 0) { - settings.chargecurrentcold = Serial.parseInt() * 10; + if (input_size > 0) { + settings.chargecurrentcold = PARSEINT * 10; if (settings.chargecurrentcold > settings.chargecurrentmax) { settings.chargecurrentcold = settings.chargecurrentmax; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'e'; } break; } } - if (menuload == 5) { + if (menuload == k_Contactor_and_Gauge_Settings) { switch (incomingByte) { case '1': - if (Serial.available() > 0) { - settings.Pretime = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.Pretime = PARSEINT; + menuload = s_main_menu; incomingByte = 'k'; } break; case '2': - if (Serial.available() > 0) { - settings.Precurrent = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.Precurrent = PARSEINT; + menuload = s_main_menu; incomingByte = 'k'; } break; case '3': - if (Serial.available() > 0) { - settings.conthold = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.conthold = PARSEINT; + menuload = s_main_menu; incomingByte = 'k'; } break; case '4': - if (Serial.available() > 0) { - settings.gaugelow = Serial.parseInt(); + if (input_size > 0) { + settings.gaugelow = PARSEINT; gaugedebug = 2; gaugeupdate(); - menuload = 1; + menuload = s_main_menu; incomingByte = 'k'; } break; case '5': - if (Serial.available() > 0) { - settings.gaugehigh = Serial.parseInt(); + if (input_size > 0) { + settings.gaugehigh = PARSEINT; gaugedebug = 3; gaugeupdate(); - menuload = 1; + menuload = s_main_menu; incomingByte = 'k'; } break; @@ -2148,24 +2321,23 @@ void menu() { if (settings.tripcont > 1) { settings.tripcont = 0; } - menuload = 1; + menuload = s_main_menu; incomingByte = 'k'; break; - case 113: //q to go back to main menu + case 'q': //q to go back to main menu gaugedebug = 0; - menuload = 0; - incomingByte = 115; + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; } } - if (menuload == 3) { + if (menuload == b_Battery_Settings) { switch (incomingByte) { - case 113: //q to go back to main menu - - menuload = 0; - incomingByte = 115; + case 'q': //q to go back to main menu + menuload = q_exit_menu; + incomingByte = MAIN_MENU_KEY; break; case 'f': //f factory settings @@ -2175,7 +2347,7 @@ void menu() { SERIALCONSOLE.println(" "); SERIALCONSOLE.println(" Coded Settings Loaded "); SERIALCONSOLE.println(" "); - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; break; @@ -2184,186 +2356,184 @@ void menu() { SERIALCONSOLE.println(" "); SERIALCONSOLE.print(" mAh Reset "); SERIALCONSOLE.println(" "); - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; break; - - - case '1': //1 Over Voltage Setpoint - if (Serial.available() > 0) { - settings.OverVSetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.OverVSetpoint = PARSEINT; settings.OverVSetpoint = settings.OverVSetpoint / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } break; case 'g': - if (Serial.available() > 0) { - settings.StoreVsetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.StoreVsetpoint = PARSEINT; settings.StoreVsetpoint = settings.StoreVsetpoint / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } case 'h': - if (Serial.available() > 0) { - settings.DisTaper = Serial.parseInt(); + if (input_size > 0) { + settings.DisTaper = PARSEINT; settings.DisTaper = settings.DisTaper / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } case 'b': - if (Serial.available() > 0) { - settings.socvolt[0] = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.socvolt[0] = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; - case 'c': - if (Serial.available() > 0) { - settings.socvolt[1] = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.socvolt[1] = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case 'd': - if (Serial.available() > 0) { - settings.socvolt[2] = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.socvolt[2] = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case 'e': - if (Serial.available() > 0) { - settings.socvolt[3] = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.socvolt[3] = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case 'k': //Discharge Voltage hysteresis - if (Serial.available() > 0) { - settings.DischHys = Serial.parseInt(); + if (input_size > 0) { + settings.DischHys = PARSEINT; settings.DischHys = settings.DischHys / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } break; case 'j': - if (Serial.available() > 0) { - settings.DisTSetpoint = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.DisTSetpoint = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case '9': //Discharge Voltage Setpoint - if (Serial.available() > 0) { - settings.DischVsetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.DischVsetpoint = PARSEINT; settings.DischVsetpoint = settings.DischVsetpoint / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } break; case '0': //c Pstrings - if (Serial.available() > 0) { - settings.Pstrings = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.Pstrings = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; bms.setPstrings(settings.Pstrings); } + else + { + SERIALCONSOLE.println(" No value available "); + } break; case 'a': // - if (Serial.available() > 0) { - settings.Scells = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.Scells = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case '2': //2 Under Voltage Setpoint - if (Serial.available() > 0) { - settings.UnderVSetpoint = Serial.parseInt(); + if (input_size > 0) { + settings.UnderVSetpoint = PARSEINT; settings.UnderVSetpoint = settings.UnderVSetpoint / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } break; case '3': //3 Over Temperature Setpoint - if (Serial.available() > 0) { - settings.OverTSetpoint = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.OverTSetpoint = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case '4': //4 Udner Temperature Setpoint - if (Serial.available() > 0) { - settings.UnderTSetpoint = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.UnderTSetpoint = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case '5': //5 Balance Voltage Setpoint - if (Serial.available() > 0) { - settings.balanceVoltage = Serial.parseInt(); + if (input_size > 0) { + settings.balanceVoltage = PARSEINT; settings.balanceVoltage = settings.balanceVoltage / 1000; - menuload = 1; + menuload = s_main_menu; incomingByte = 'b'; } break; case '6': //6 Balance Voltage Hystersis - if (Serial.available() > 0) { - settings.balanceHyst = Serial.parseInt(); + if (input_size > 0) { + settings.balanceHyst = PARSEINT; settings.balanceHyst = settings.balanceHyst / 1000; - menuload = 1; + menuload = s_main_menu; bms.setBalanceHyst(settings.balanceHyst); incomingByte = 'b'; } break; case '7': //7 Battery Capacity inAh - if (Serial.available() > 0) { - settings.CAP = Serial.parseInt(); - menuload = 1; + if (input_size > 0) { + settings.CAP = PARSEINT; + menuload = s_main_menu; incomingByte = 'b'; } break; case '8': // discurrent in A - if (Serial.available() > 0) { - settings.discurrentmax = Serial.parseInt() * 10; - menuload = 1; + if (input_size > 0) { + settings.discurrentmax = PARSEINT * 10; + menuload = s_main_menu; incomingByte = 'b'; } break; } } - if (menuload == 1) { + if (menuload == s_main_menu) { switch (incomingByte) { case 'R': //restart CPU_REBOOT; break; case 'i': //Ignore Value Settings - while (Serial.available()) { - Serial.read(); - } + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2376,13 +2546,11 @@ void menu() { SERIALCONSOLE.print(settings.IgnoreVolt * 1000, 0); SERIALCONSOLE.println("mV"); SERIALCONSOLE.println("q - Go back to menu"); - menuload = 8; + menuload = i_Ignore_Value_Settings; break; case 'e': //Charging settings - while (Serial.available()) { - Serial.read(); - } + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2399,11 +2567,11 @@ void menu() { SERIALCONSOLE.print("3 - Pack Max Charge Current: "); SERIALCONSOLE.print(settings.chargecurrentmax * 0.1); SERIALCONSOLE.println("A"); - SERIALCONSOLE.print("4- Pack End of Charge Current: "); + SERIALCONSOLE.print("4 - Pack End of Charge Current: "); SERIALCONSOLE.print(settings.chargecurrentend * 0.1); SERIALCONSOLE.println("A"); } - SERIALCONSOLE.print("5- Charger Type: "); + SERIALCONSOLE.print("5 - Charger Type: "); switch (settings.chargertype) { case 0: SERIALCONSOLE.print("Relay Control"); @@ -2435,10 +2603,9 @@ void menu() { } SERIALCONSOLE.println(); if (settings.chargertype > 0) { - SERIALCONSOLE.print("6- Charger Can Msg Spd: "); + SERIALCONSOLE.print("6 - Charger Can Msg Spd: "); SERIALCONSOLE.print(settings.chargerspd); SERIALCONSOLE.println("mS"); - SERIALCONSOLE.println(); } /* SERIALCONSOLE.print("7- Can Speed:"); @@ -2464,13 +2631,11 @@ void menu() { SERIALCONSOLE.println("A"); SERIALCONSOLE.println("q - Go back to menu"); - menuload = 6; + menuload = e_Charging_Settings; break; case 'a': //Alarm and Warning settings - while (Serial.available()) { - Serial.read(); - } + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2495,13 +2660,11 @@ void menu() { SERIALCONSOLE.print(settings.triptime); SERIALCONSOLE.println(" mS"); - menuload = 7; + menuload = a_Alarm_and_Warning_Settings; break; case 'k': //contactor settings - while (Serial.available()) { - Serial.read(); - } + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2530,18 +2693,16 @@ void menu() { } } - menuload = 5; + menuload = k_Contactor_and_Gauge_Settings; break; - case 113: //q to go back to main menu + case 'q': //q to go back to main menu EEPROM.put(0, settings); //save all change to eeprom - menuload = 0; + menuload = q_exit_menu; debug = 1; break; case 'd': //d for debug settings - while (Serial.available()) { - Serial.read(); - } + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2568,13 +2729,11 @@ void menu() { SERIALCONSOLE.print("9 - Decimal Places to Show :"); SERIALCONSOLE.println(debugdigits); SERIALCONSOLE.println("q - Go back to menu"); - menuload = 4; + menuload = d_Debug_Settings; break; - case 99: //c for calibrate zero offset - while (Serial.available()) { - Serial.read(); - } + case 'c': //c for calibrate zero offset + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2625,7 +2784,7 @@ void menu() { SERIALCONSOLE.println(" A"); } if (settings.cursens == Canbus) { - SERIALCONSOLE.print("7 -Can Current Sensor :"); + SERIALCONSOLE.print("7 - Can Current Sensor :"); if (settings.curcan == LemCAB300) { SERIALCONSOLE.println(" LEM CAB300/500 series "); } else if (settings.curcan == LemCAB500) { @@ -2637,13 +2796,11 @@ void menu() { } } SERIALCONSOLE.println("q - Go back to menu"); - menuload = 2; + menuload = c_Current_Sensor_Calibration; break; - case 98: //c for calibrate zero offset - while (Serial.available()) { - Serial.read(); - } + case 'b': //b for battery settings + clear_serial_buffer(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); SERIALCONSOLE.println(); @@ -2729,7 +2886,7 @@ void menu() { SERIALCONSOLE.print(settings.DischHys * 1000, 0); SERIALCONSOLE.print("mV"); SERIALCONSOLE.println(); - menuload = 3; + menuload = b_Battery_Settings; break; default: @@ -2739,12 +2896,15 @@ void menu() { } } - if (incomingByte == 115 & menuload == 0) { + if ((incomingByte == 's') && (menuload == q_exit_menu)) { SERIALCONSOLE.println(); SERIALCONSOLE.println("MENU"); SERIALCONSOLE.println("Debugging Paused"); SERIALCONSOLE.print("Firmware Version : "); - SERIALCONSOLE.println(firmver); + SERIALCONSOLE.print(firmver); + #ifdef USING_TEENSY4 + SERIALCONSOLE.println("_Teensy4.0_Port"); + #endif SERIALCONSOLE.println("b - Battery Settings"); SERIALCONSOLE.println("a - Alarm and Warning Settings"); SERIALCONSOLE.println("e - Charging Settings"); @@ -2754,12 +2914,18 @@ void menu() { SERIALCONSOLE.println("d - Debug Settings"); SERIALCONSOLE.println("q - exit menu"); debug = 0; - menuload = 1; + menuload = s_main_menu; } } void canread() { +#ifdef USING_TEENSY4 + if (Can0.read(inMsg) == 0) { + return; + } +#else Can0.read(inMsg); +#endif // Read data: len = data length, buf = data byte(s) if (settings.cursens == Canbus) { if (settings.curcan == 1) { @@ -2846,25 +3012,25 @@ void canread() { } if (candebug == 1) { - Serial.print(millis()); + SERIALCONSOLE.print(millis()); if ((inMsg.id & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits) sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (inMsg.id & 0x1FFFFFFF), inMsg.len); else sprintf(msgString, ",0x%.3lX,false,%1d", inMsg.id, inMsg.len); - Serial.print(msgString); + SERIALCONSOLE.print(msgString); if ((inMsg.id & 0x40000000) == 0x40000000) { // Determine if message is a remote request frame. sprintf(msgString, " REMOTE REQUEST FRAME"); - Serial.print(msgString); + SERIALCONSOLE.print(msgString); } else { for (byte i = 0; i < inMsg.len; i++) { sprintf(msgString, ", 0x%.2X", inMsg.buf[i]); - Serial.print(msgString); + SERIALCONSOLE.print(msgString); } } - Serial.println(); + SERIALCONSOLE.println(); } } @@ -2873,8 +3039,8 @@ void CAB300() { inbox = (inbox << 8) | inMsg.buf[i]; } CANmilliamps = inbox; - if (CANmilliamps > 0x80000000) { - CANmilliamps -= 0x80000000; + if (CANmilliamps > (long int)0x80000000) { + CANmilliamps -= (long int)0x80000000; } else { CANmilliamps = (0x80000000 - CANmilliamps) * -1; } @@ -2883,9 +3049,9 @@ void CAB300() { getcurrent(); } if (candebug == 1) { - Serial.println(); - Serial.print(CANmilliamps); - Serial.print("mA "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CANmilliamps); + SERIALCONSOLE.print("mA "); } } @@ -2896,8 +3062,8 @@ void CAB500() { } CANmilliamps = inbox; if (candebug == 1) { - Serial.println(); - Serial.print(CANmilliamps, HEX); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CANmilliamps, HEX); } if (CANmilliamps > 0x800000) { CANmilliamps -= 0x800000; @@ -2909,9 +3075,9 @@ void CAB500() { getcurrent(); } if (candebug == 1) { - Serial.println(); - Serial.print(CANmilliamps); - Serial.print("mA "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CANmilliamps); + SERIALCONSOLE.print("mA "); } } @@ -2925,9 +3091,9 @@ void handleVictronLynx() { getcurrent(); } if (candebug == 1) { - Serial.println(); - Serial.print(CANmilliamps); - Serial.print("mA "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(CANmilliamps); + SERIALCONSOLE.print("mA "); } } @@ -3015,29 +3181,29 @@ void currentlimit() { void inputdebug() { - Serial.println(); - Serial.print("Input: "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print("Input: "); if (digitalRead(IN1)) { - Serial.print("1 ON "); + SERIALCONSOLE.print("1 ON "); } else { - Serial.print("1 OFF "); + SERIALCONSOLE.print("1 OFF "); } if (digitalRead(IN3)) { - Serial.print("2 ON "); + SERIALCONSOLE.print("2 ON "); } else { - Serial.print("2 OFF "); + SERIALCONSOLE.print("2 OFF "); } if (digitalRead(IN3)) { - Serial.print("3 ON "); + SERIALCONSOLE.print("3 ON "); } else { - Serial.print("3 OFF "); + SERIALCONSOLE.print("3 OFF "); } if (digitalRead(IN4)) { - Serial.print("4 ON "); + SERIALCONSOLE.print("4 ON "); } else { - Serial.print("4 OFF "); + SERIALCONSOLE.print("4 OFF "); } - Serial.println(); + SERIALCONSOLE.println(); } void outputdebug() { @@ -3098,7 +3264,7 @@ void sendbalancingtest() { if (balinit == 0) { msg.id = 0x1A555418; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0xFE; msg.buf[1] = 0xFE; msg.buf[2] = 0xFE; @@ -3128,7 +3294,7 @@ void sendbalancingtest() { if (balon == 1) { msg.id = 0x1A555418; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x08; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3141,7 +3307,7 @@ void sendbalancingtest() { delay(1); msg.id = 0x1A555419; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3155,7 +3321,7 @@ void sendbalancingtest() { msg.id = 0x1A555416; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x08; msg.buf[2] = 0x00; @@ -3168,7 +3334,7 @@ void sendbalancingtest() { delay(1); msg.id = 0x1A555417; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x08; msg.buf[2] = 0x00; @@ -3182,7 +3348,7 @@ void sendbalancingtest() { } else { msg.id = 0x1A555418; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3195,7 +3361,7 @@ void sendbalancingtest() { delay(1); msg.id = 0x1A555419; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3209,7 +3375,7 @@ void sendbalancingtest() { msg.id = 0x1A555416; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3222,7 +3388,7 @@ void sendbalancingtest() { delay(1); msg.id = 0x1A555417; msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = 0x00; msg.buf[1] = 0x00; msg.buf[2] = 0x00; @@ -3244,14 +3410,18 @@ void sendbalancingtest() { balcycle = 0; } - msg.ext = 0; + msg.flags.extended = 0; } void resetwdog() { - noInterrupts(); // No - reset WDT +#ifdef USING_TEENSY4 + wdt.feed(); +#else + noInterrupts(); // No - reset WDT WDOG_REFRESH = 0xA602; WDOG_REFRESH = 0xB480; interrupts(); +#endif //USING_TEENSY4 } void pwmcomms() { @@ -3259,9 +3429,9 @@ void pwmcomms() { p = map((currentact * 0.001), pwmcurmin, pwmcurmax, 50, 255); analogWrite(OUT7, p); /* - Serial.println(); - Serial.print(p*100/255); - Serial.print(" OUT8 "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(p*100/255); + SERIALCONSOLE.print(" OUT8 "); */ if (bms.getLowCellVolt() < settings.UnderVSetpoint) { analogWrite(OUT8, 224); //12V to 10V converter 1.5V @@ -3270,9 +3440,9 @@ void pwmcomms() { analogWrite(OUT8, p); //2V to 10V converter 1.5-10V } /* - Serial.println(); - Serial.print(p*100/255); - Serial.print(" OUT7 "); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(p*100/255); + SERIALCONSOLE.print(" OUT7 "); */ } @@ -3388,25 +3558,25 @@ void dashupdate() { void Serialexp() { /* incomingByte = SERIALBMS.read(); // read the incoming byte: - Serial.println(); - Serial.print(incomingByte); - Serial.print("|"); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(incomingByte); + SERIALCONSOLE.print("|"); incomingByte = SERIALBMS.read(); // read the incoming byte: if (incomingByte == 0xFF) { - Serial.println(); - Serial.print(incomingByte); + SERIALCONSOLE.println(); + SERIALCONSOLE.print(incomingByte); incomingByte = SERIALBMS.read(); // read the incoming byte: - Serial.print("|"); - Serial.print(incomingByte); - Serial.print("|"); - Serial.print(incomingByte); + SERIALCONSOLE.print("|"); + SERIALCONSOLE.print(incomingByte); + SERIALCONSOLE.print("|"); + SERIALCONSOLE.print(incomingByte); if (settings.Serialexp == 1) //Do Serial Master Things { - Serial.print(SERIALBMS.read(), HEX); - Serial.print("|"); - Serial.print(SERIALBMS.read(), HEX); + SERIALCONSOLE.print(SERIALBMS.read(), HEX); + SERIALCONSOLE.print("|"); + SERIALCONSOLE.print(SERIALBMS.read(), HEX); } if (settings.Serialexp == 2) //Do Serial Slave Things { @@ -3419,8 +3589,8 @@ void Serialexp() { SERIALBMS.write(0x01); //response is 1 higher than sent id SERIALBMS.write(SerialID); - Serial.print("New ID : "); - Serial.print(SerialID); + SERIALCONSOLE.print("New ID : "); + SERIALCONSOLE.print(SerialID); } else { @@ -3451,16 +3621,16 @@ void Serialslaveinit() { SERIALBMS.write(0xFF); SERIALBMS.write(0x00); SERIALBMS.write(I); - Serial.write(" | "); + SERIALCONSOLE.write(" | "); delay(2); if (SERIALBMS.available() > 0) { for (int x = 0; x < 4; x++) { buff[x] = SERIALBMS.read(); - Serial.write(buff[0]); - Serial.write(buff[1]); - Serial.write(buff[2]); + SERIALCONSOLE.write(buff[0]); + SERIALCONSOLE.write(buff[1]); + SERIALCONSOLE.write(buff[2]); } if (buff[0] = 0xFF) { @@ -3472,7 +3642,7 @@ void Serialslaveinit() { } else { - Serial.write("No Serial Slaves Found"); + SERIALCONSOLE.write("No Serial Slaves Found"); break; } @@ -3487,7 +3657,7 @@ void chargercomms() { if (settings.chargertype == Elcon) { msg.id = 0x1806E5F4; //broadcast to all Elteks msg.len = 8; - msg.ext = 1; + msg.flags.extended = 1; msg.buf[0] = highByte(uint16_t(settings.ChargeVsetpoint * settings.Scells * 10)); msg.buf[1] = lowByte(uint16_t(settings.ChargeVsetpoint * settings.Scells * 10)); msg.buf[2] = highByte(chargecurrent / ncharger); @@ -3498,7 +3668,7 @@ void chargercomms() { msg.buf[7] = 0x00; Can0.write(msg); - msg.ext = 0; + msg.flags.extended = 0; } if (settings.chargertype == Eltek) { @@ -3660,13 +3830,16 @@ void isrCP() { } } // ******** end of isr CP ******** +// TEESNY4 has no low voltage detector +#ifndef USING_TEENSY4 void low_voltage_isr(void) { EEPROM.update(1000, uint8_t(SOC)); PMC_LVDSC2 |= PMC_LVDSC2_LVWACK; // clear if we can PMC_LVDSC1 |= PMC_LVDSC1_LVDACK; - Serial.println(); - Serial.println("GoodBye"); + SERIALCONSOLE.println(); + SERIALCONSOLE.println("GoodBye"); } +#endif ////////END/////////// diff --git a/VWBMSV2/CONFIG.H b/VWBMSV2/config.h similarity index 99% rename from VWBMSV2/CONFIG.H rename to VWBMSV2/config.h index 2668cb6..d3c04f8 100644 --- a/VWBMSV2/CONFIG.H +++ b/VWBMSV2/config.h @@ -2,6 +2,8 @@ #include +//#define USING_TEENSY4 + //Set to the proper port for your USB connection - SerialUSB on Due (Native) or Serial for Due (Programming) or Teensy #define SERIALCONSOLE Serial