diff --git a/Arduino b/Arduino new file mode 160000 index 0000000..c12eaf2 --- /dev/null +++ b/Arduino @@ -0,0 +1 @@ +Subproject commit c12eaf2651eb6cc169811b1f17a2870c3a3076f2 diff --git a/ESP32 b/ESP32 new file mode 160000 index 0000000..1966efb --- /dev/null +++ b/ESP32 @@ -0,0 +1 @@ +Subproject commit 1966efbfbdb31c02db904cc2ced81cf7de6e8958 diff --git a/KiCad/noise_sensor.kicad_pcb b/KiCad/noise_sensor.kicad_pcb new file mode 100644 index 0000000..73e88d2 --- /dev/null +++ b/KiCad/noise_sensor.kicad_pcb @@ -0,0 +1,2864 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.9) + + (general + (thickness 1.6) + (drawings 28) + (tracks 267) + (zones 0) + (modules 27) + (nets 41) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user hide) + ) + + (setup + (last_trace_width 0.25) + (trace_clearance 0.2) + (zone_clearance 0.1) + (zone_45_only yes) + (trace_min 0.2) + (via_size 0.8) + (via_drill 0.4) + (via_min_size 0.4) + (via_min_drill 0.3) + (uvia_size 0.3) + (uvia_drill 0.1) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.05) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.12) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 1.524 1.524) + (pad_drill 0.762) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (grid_origin 220.868 73.494) + (visible_elements FFFFFF7F) + (pcbplotparams + (layerselection 0x010f0_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (excludeedgelayer true) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue false) + (plotinvisibletext false) + (padsonsilk true) + (subtractmaskfromsilk false) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory "gerber/")) + ) + + (net 0 "") + (net 1 GND) + (net 2 "Net-(D1-Pad2)") + (net 3 +3V3) + (net 4 LED1) + (net 5 TX) + (net 6 SCK) + (net 7 DIO0) + (net 8 MISO) + (net 9 MOSI) + (net 10 BCLK) + (net 11 DOUT) + (net 12 LRCL_WS) + (net 13 SCL) + (net 14 SDA) + (net 15 SWDIO) + (net 16 SWCLK) + (net 17 RX) + (net 18 "Net-(U2-Pad7)") + (net 19 "Net-(U2-Pad11)") + (net 20 "Net-(U2-Pad12)") + (net 21 "Net-(U2-Pad15)") + (net 22 "Net-(U2-Pad16)") + (net 23 +5V) + (net 24 I²C-ADDRESS) + (net 25 DEVICE_ID) + (net 26 BATT_SENSE) + (net 27 SPI_NSS) + (net 28 SPI_RESET) + (net 29 "Net-(U4-Pad31)") + (net 30 "Net-(U4-Pad30)") + (net 31 "Net-(U4-Pad28)") + (net 32 "Net-(U4-Pad21)") + (net 33 "Net-(U4-Pad19)") + (net 34 "Net-(U4-Pad18)") + (net 35 "Net-(U4-Pad17)") + (net 36 "Net-(U4-Pad6)") + (net 37 "Net-(U4-Pad3)") + (net 38 "Net-(U4-Pad2)") + (net 39 "Net-(U4-Pad1)") + (net 40 "Net-(J6-Pad1)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.25) + (via_dia 0.8) + (via_drill 0.4) + (uvia_dia 0.3) + (uvia_drill 0.1) + (add_net +3V3) + (add_net +5V) + (add_net BATT_SENSE) + (add_net BCLK) + (add_net DEVICE_ID) + (add_net DIO0) + (add_net DOUT) + (add_net GND) + (add_net I²C-ADDRESS) + (add_net LED1) + (add_net LRCL_WS) + (add_net MISO) + (add_net MOSI) + (add_net "Net-(D1-Pad2)") + (add_net "Net-(J6-Pad1)") + (add_net "Net-(U2-Pad11)") + (add_net "Net-(U2-Pad12)") + (add_net "Net-(U2-Pad15)") + (add_net "Net-(U2-Pad16)") + (add_net "Net-(U2-Pad7)") + (add_net "Net-(U4-Pad1)") + (add_net "Net-(U4-Pad17)") + (add_net "Net-(U4-Pad18)") + (add_net "Net-(U4-Pad19)") + (add_net "Net-(U4-Pad2)") + (add_net "Net-(U4-Pad21)") + (add_net "Net-(U4-Pad28)") + (add_net "Net-(U4-Pad3)") + (add_net "Net-(U4-Pad30)") + (add_net "Net-(U4-Pad31)") + (add_net "Net-(U4-Pad6)") + (add_net RX) + (add_net SCK) + (add_net SCL) + (add_net SDA) + (add_net SPI_NSS) + (add_net SPI_RESET) + (add_net SWCLK) + (add_net SWDIO) + (add_net TX) + ) + + (module masterarbeit:HOPERF_RFM9XW_SMD_Castellated (layer F.Cu) (tedit 60117980) (tstamp 6011B635) + (at 209.55 65.024 90) + (descr "Low Power Long Range Transceiver Module SMD-16 (https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf)") + (tags "LoRa Low Power Long Range Transceiver Module") + (path /5FF4BB32) + (attr smd) + (fp_text reference U2 (at 0.42 0.0404 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value RFM95W-868S2 (at 0 9.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7 -8) (end -8 -7) (layer F.Fab) (width 0.1)) + (fp_line (start -8.1 -7.75) (end -9 -7.75) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 -8.1) (end -8.1 -7.75) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.1 8.1) (end 8.1 7.7) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 8.1) (end 8.1 8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 7.7) (end -8.1 8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.1 -8.1) (end 8.1 -7.7) (layer F.SilkS) (width 0.12)) + (fp_line (start -8.1 -8.1) (end 8.1 -8.1) (layer F.SilkS) (width 0.12)) + (fp_line (start -9.25 8.25) (end -9.25 -8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 8.25) (end 9.25 8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.25 -8.25) (end 9.25 8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -9.25 -8.25) (end 9.25 -8.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -8 8) (end -8 -7) (layer F.Fab) (width 0.1)) + (fp_line (start -8 8) (end 8 8) (layer F.Fab) (width 0.1)) + (fp_line (start 8 8) (end 8 -8) (layer F.Fab) (width 0.1)) + (fp_line (start -7 -8) (end 8 -8) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 16 smd oval (at 8 -7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 22 "Net-(U2-Pad16)")) + (pad 15 smd oval (at 8 -5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(U2-Pad15)")) + (pad 14 smd oval (at 8 -3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 7 DIO0)) + (pad 13 smd oval (at 8 -1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 3 +3V3)) + (pad 12 smd oval (at 8 1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(U2-Pad12)")) + (pad 11 smd oval (at 8 3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(U2-Pad11)")) + (pad 10 smd oval (at 8 5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (pad 9 smd oval (at 8 7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(J6-Pad1)")) + (pad 8 smd oval (at -8 7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (pad 7 smd oval (at -8 5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(U2-Pad7)")) + (pad 6 smd oval (at -8 3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 28 SPI_RESET)) + (pad 5 smd oval (at -8 1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 27 SPI_NSS)) + (pad 4 smd oval (at -8 -1 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 6 SCK)) + (pad 3 smd oval (at -8 -3 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 9 MOSI)) + (pad 2 smd oval (at -8 -5 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 8 MISO)) + (pad 1 smd oval (at -8 -7 90) (size 2 1) (layers F.Cu F.Paste F.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/RF_Module.3dshapes/HOPERF_RFM9XW_SMD.wrl + (offset (xyz 10.5 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 60 0 0)) + ) + (model "/home/lukas/Downloads/RFM95 LoRa v15.step" + (offset (xyz 8 -8 0)) + (scale (xyz 1 1 1)) + (rotate (xyz -90 0 180)) + ) + ) + + (module Symbol:OSHW-Logo2_9.8x8mm_SilkScreen (layer F.Cu) (tedit 0) (tstamp 6011EBD9) + (at 241.968 73.044) + (descr "Open Source Hardware Symbol") + (tags "Logo Symbol OSHW") + (attr virtual) + (fp_text reference REF** (at 0 0) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value OSHW-Logo2_9.8x8mm_SilkScreen (at 0.75 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy -3.231114 2.584505) (xy -3.156461 2.621727) (xy -3.090569 2.690261) (xy -3.072423 2.715648) + (xy -3.052655 2.748866) (xy -3.039828 2.784945) (xy -3.03249 2.833098) (xy -3.029187 2.902536) + (xy -3.028462 2.994206) (xy -3.031737 3.11983) (xy -3.043123 3.214154) (xy -3.064959 3.284523) + (xy -3.099581 3.338286) (xy -3.14933 3.382788) (xy -3.152986 3.385423) (xy -3.202015 3.412377) + (xy -3.261055 3.425712) (xy -3.336141 3.429) (xy -3.458205 3.429) (xy -3.458256 3.547497) + (xy -3.459392 3.613492) (xy -3.466314 3.652202) (xy -3.484402 3.675419) (xy -3.519038 3.694933) + (xy -3.527355 3.69892) (xy -3.56628 3.717603) (xy -3.596417 3.729403) (xy -3.618826 3.730422) + (xy -3.634567 3.716761) (xy -3.644698 3.684522) (xy -3.650277 3.629804) (xy -3.652365 3.548711) + (xy -3.652019 3.437344) (xy -3.6503 3.291802) (xy -3.649763 3.248269) (xy -3.647828 3.098205) + (xy -3.646096 3.000042) (xy -3.458308 3.000042) (xy -3.457252 3.083364) (xy -3.452562 3.13788) + (xy -3.441949 3.173837) (xy -3.423128 3.201482) (xy -3.41035 3.214965) (xy -3.35811 3.254417) + (xy -3.311858 3.257628) (xy -3.264133 3.225049) (xy -3.262923 3.223846) (xy -3.243506 3.198668) + (xy -3.231693 3.164447) (xy -3.225735 3.111748) (xy -3.22388 3.031131) (xy -3.223846 3.013271) + (xy -3.22833 2.902175) (xy -3.242926 2.825161) (xy -3.26935 2.778147) (xy -3.309317 2.75705) + (xy -3.332416 2.754923) (xy -3.387238 2.7649) (xy -3.424842 2.797752) (xy -3.447477 2.857857) + (xy -3.457394 2.949598) (xy -3.458308 3.000042) (xy -3.646096 3.000042) (xy -3.645778 2.98206) + (xy -3.643127 2.894679) (xy -3.639394 2.830905) (xy -3.634093 2.785582) (xy -3.626742 2.753555) + (xy -3.616857 2.729668) (xy -3.603954 2.708764) (xy -3.598421 2.700898) (xy -3.525031 2.626595) + (xy -3.43224 2.584467) (xy -3.324904 2.572722) (xy -3.231114 2.584505)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -1.728336 2.595089) (xy -1.665633 2.631358) (xy -1.622039 2.667358) (xy -1.590155 2.705075) + (xy -1.56819 2.751199) (xy -1.554351 2.812421) (xy -1.546847 2.895431) (xy -1.543883 3.006919) + (xy -1.543539 3.087062) (xy -1.543539 3.382065) (xy -1.709615 3.456515) (xy -1.719385 3.133402) + (xy -1.723421 3.012729) (xy -1.727656 2.925141) (xy -1.732903 2.86465) (xy -1.739975 2.825268) + (xy -1.749689 2.801007) (xy -1.762856 2.78588) (xy -1.767081 2.782606) (xy -1.831091 2.757034) + (xy -1.895792 2.767153) (xy -1.934308 2.794) (xy -1.949975 2.813024) (xy -1.96082 2.837988) + (xy -1.967712 2.875834) (xy -1.971521 2.933502) (xy -1.973117 3.017935) (xy -1.973385 3.105928) + (xy -1.973437 3.216323) (xy -1.975328 3.294463) (xy -1.981655 3.347165) (xy -1.995017 3.381242) + (xy -2.018015 3.403511) (xy -2.053246 3.420787) (xy -2.100303 3.438738) (xy -2.151697 3.458278) + (xy -2.145579 3.111485) (xy -2.143116 2.986468) (xy -2.140233 2.894082) (xy -2.136102 2.827881) + (xy -2.129893 2.78142) (xy -2.120774 2.748256) (xy -2.107917 2.721944) (xy -2.092416 2.698729) + (xy -2.017629 2.624569) (xy -1.926372 2.581684) (xy -1.827117 2.571412) (xy -1.728336 2.595089)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -3.983114 2.587256) (xy -3.891536 2.635409) (xy -3.823951 2.712905) (xy -3.799943 2.762727) + (xy -3.781262 2.837533) (xy -3.771699 2.932052) (xy -3.770792 3.03521) (xy -3.778079 3.135935) + (xy -3.793097 3.223153) (xy -3.815385 3.285791) (xy -3.822235 3.296579) (xy -3.903368 3.377105) + (xy -3.999734 3.425336) (xy -4.104299 3.43945) (xy -4.210032 3.417629) (xy -4.239457 3.404547) + (xy -4.296759 3.364231) (xy -4.34705 3.310775) (xy -4.351803 3.303995) (xy -4.371122 3.271321) + (xy -4.383892 3.236394) (xy -4.391436 3.190414) (xy -4.395076 3.124584) (xy -4.396135 3.030105) + (xy -4.396154 3.008923) (xy -4.396106 3.002182) (xy -4.200769 3.002182) (xy -4.199632 3.091349) + (xy -4.195159 3.15052) (xy -4.185754 3.188741) (xy -4.169824 3.215053) (xy -4.161692 3.223846) + (xy -4.114942 3.257261) (xy -4.069553 3.255737) (xy -4.02366 3.226752) (xy -3.996288 3.195809) + (xy -3.980077 3.150643) (xy -3.970974 3.07942) (xy -3.970349 3.071114) (xy -3.968796 2.942037) + (xy -3.985035 2.846172) (xy -4.018848 2.784107) (xy -4.070016 2.756432) (xy -4.08828 2.754923) + (xy -4.13624 2.762513) (xy -4.169047 2.788808) (xy -4.189105 2.839095) (xy -4.198822 2.918664) + (xy -4.200769 3.002182) (xy -4.396106 3.002182) (xy -4.395426 2.908249) (xy -4.392371 2.837906) + (xy -4.385678 2.789163) (xy -4.37404 2.753288) (xy -4.356147 2.721548) (xy -4.352192 2.715648) + (xy -4.285733 2.636104) (xy -4.213315 2.589929) (xy -4.125151 2.571599) (xy -4.095213 2.570703) + (xy -3.983114 2.587256)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -2.465746 2.599745) (xy -2.388714 2.651567) (xy -2.329184 2.726412) (xy -2.293622 2.821654) + (xy -2.286429 2.891756) (xy -2.287246 2.921009) (xy -2.294086 2.943407) (xy -2.312888 2.963474) + (xy -2.349592 2.985733) (xy -2.410138 3.014709) (xy -2.500466 3.054927) (xy -2.500923 3.055129) + (xy -2.584067 3.09321) (xy -2.652247 3.127025) (xy -2.698495 3.152933) (xy -2.715842 3.167295) + (xy -2.715846 3.167411) (xy -2.700557 3.198685) (xy -2.664804 3.233157) (xy -2.623758 3.25799) + (xy -2.602963 3.262923) (xy -2.54623 3.245862) (xy -2.497373 3.203133) (xy -2.473535 3.156155) + (xy -2.450603 3.121522) (xy -2.405682 3.082081) (xy -2.352877 3.048009) (xy -2.30629 3.02948) + (xy -2.296548 3.028462) (xy -2.285582 3.045215) (xy -2.284921 3.088039) (xy -2.29298 3.145781) + (xy -2.308173 3.207289) (xy -2.328914 3.261409) (xy -2.329962 3.26351) (xy -2.392379 3.35066) + (xy -2.473274 3.409939) (xy -2.565144 3.439034) (xy -2.660487 3.435634) (xy -2.751802 3.397428) + (xy -2.755862 3.394741) (xy -2.827694 3.329642) (xy -2.874927 3.244705) (xy -2.901066 3.133021) + (xy -2.904574 3.101643) (xy -2.910787 2.953536) (xy -2.903339 2.884468) (xy -2.715846 2.884468) + (xy -2.71341 2.927552) (xy -2.700086 2.940126) (xy -2.666868 2.930719) (xy -2.614506 2.908483) + (xy -2.555976 2.88061) (xy -2.554521 2.879872) (xy -2.504911 2.853777) (xy -2.485 2.836363) + (xy -2.48991 2.818107) (xy -2.510584 2.79412) (xy -2.563181 2.759406) (xy -2.619823 2.756856) + (xy -2.670631 2.782119) (xy -2.705724 2.830847) (xy -2.715846 2.884468) (xy -2.903339 2.884468) + (xy -2.898008 2.835036) (xy -2.865222 2.741055) (xy -2.819579 2.675215) (xy -2.737198 2.608681) + (xy -2.646454 2.575676) (xy -2.553815 2.573573) (xy -2.465746 2.599745)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy -0.840154 2.49212) (xy -0.834428 2.57198) (xy -0.827851 2.619039) (xy -0.818738 2.639566) + (xy -0.805402 2.639829) (xy -0.801077 2.637378) (xy -0.743556 2.619636) (xy -0.668732 2.620672) + (xy -0.592661 2.63891) (xy -0.545082 2.662505) (xy -0.496298 2.700198) (xy -0.460636 2.742855) + (xy -0.436155 2.797057) (xy -0.420913 2.869384) (xy -0.41297 2.966419) (xy -0.410384 3.094742) + (xy -0.410338 3.119358) (xy -0.410308 3.39587) (xy -0.471839 3.41732) (xy -0.515541 3.431912) + (xy -0.539518 3.438706) (xy -0.540223 3.438769) (xy -0.542585 3.420345) (xy -0.544594 3.369526) + (xy -0.546099 3.292993) (xy -0.546947 3.19743) (xy -0.547077 3.139329) (xy -0.547349 3.024771) + (xy -0.548748 2.942667) (xy -0.552151 2.886393) (xy -0.558433 2.849326) (xy -0.568471 2.824844) + (xy -0.583139 2.806325) (xy -0.592298 2.797406) (xy -0.655211 2.761466) (xy -0.723864 2.758775) + (xy -0.786152 2.78917) (xy -0.797671 2.800144) (xy -0.814567 2.820779) (xy -0.826286 2.845256) + (xy -0.833767 2.880647) (xy -0.837946 2.934026) (xy -0.839763 3.012466) (xy -0.840154 3.120617) + (xy -0.840154 3.39587) (xy -0.901685 3.41732) (xy -0.945387 3.431912) (xy -0.969364 3.438706) + (xy -0.97007 3.438769) (xy -0.971874 3.420069) (xy -0.9735 3.367322) (xy -0.974883 3.285557) + (xy -0.975958 3.179805) (xy -0.97666 3.055094) (xy -0.976923 2.916455) (xy -0.976923 2.381806) + (xy -0.849923 2.328236) (xy -0.840154 2.49212)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.053501 2.626303) (xy 0.13006 2.654733) (xy 0.130936 2.655279) (xy 0.178285 2.690127) + (xy 0.213241 2.730852) (xy 0.237825 2.783925) (xy 0.254062 2.855814) (xy 0.263975 2.952992) + (xy 0.269586 3.081928) (xy 0.270077 3.100298) (xy 0.277141 3.377287) (xy 0.217695 3.408028) + (xy 0.174681 3.428802) (xy 0.14871 3.438646) (xy 0.147509 3.438769) (xy 0.143014 3.420606) + (xy 0.139444 3.371612) (xy 0.137248 3.300031) (xy 0.136769 3.242068) (xy 0.136758 3.14817) + (xy 0.132466 3.089203) (xy 0.117503 3.061079) (xy 0.085482 3.059706) (xy 0.030014 3.080998) + (xy -0.053731 3.120136) (xy -0.115311 3.152643) (xy -0.146983 3.180845) (xy -0.156294 3.211582) + (xy -0.156308 3.213104) (xy -0.140943 3.266054) (xy -0.095453 3.29466) (xy -0.025834 3.298803) + (xy 0.024313 3.298084) (xy 0.050754 3.312527) (xy 0.067243 3.347218) (xy 0.076733 3.391416) + (xy 0.063057 3.416493) (xy 0.057907 3.420082) (xy 0.009425 3.434496) (xy -0.058469 3.436537) + (xy -0.128388 3.426983) (xy -0.177932 3.409522) (xy -0.24643 3.351364) (xy -0.285366 3.270408) + (xy -0.293077 3.20716) (xy -0.287193 3.150111) (xy -0.265899 3.103542) (xy -0.223735 3.062181) + (xy -0.155241 3.020755) (xy -0.054956 2.973993) (xy -0.048846 2.97135) (xy 0.04149 2.929617) + (xy 0.097235 2.895391) (xy 0.121129 2.864635) (xy 0.115913 2.833311) (xy 0.084328 2.797383) + (xy 0.074883 2.789116) (xy 0.011617 2.757058) (xy -0.053936 2.758407) (xy -0.111028 2.789838) + (xy -0.148907 2.848024) (xy -0.152426 2.859446) (xy -0.1867 2.914837) (xy -0.230191 2.941518) + (xy -0.293077 2.96796) (xy -0.293077 2.899548) (xy -0.273948 2.80011) (xy -0.217169 2.708902) + (xy -0.187622 2.678389) (xy -0.120458 2.639228) (xy -0.035044 2.6215) (xy 0.053501 2.626303)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.713362 2.62467) (xy 0.802117 2.657421) (xy 0.874022 2.71535) (xy 0.902144 2.756128) + (xy 0.932802 2.830954) (xy 0.932165 2.885058) (xy 0.899987 2.921446) (xy 0.888081 2.927633) + (xy 0.836675 2.946925) (xy 0.810422 2.941982) (xy 0.80153 2.909587) (xy 0.801077 2.891692) + (xy 0.784797 2.825859) (xy 0.742365 2.779807) (xy 0.683388 2.757564) (xy 0.617475 2.763161) + (xy 0.563895 2.792229) (xy 0.545798 2.80881) (xy 0.532971 2.828925) (xy 0.524306 2.859332) + (xy 0.518696 2.906788) (xy 0.515035 2.97805) (xy 0.512215 3.079875) (xy 0.511484 3.112115) + (xy 0.50882 3.22241) (xy 0.505792 3.300036) (xy 0.50125 3.351396) (xy 0.494046 3.38289) + (xy 0.483033 3.40092) (xy 0.46706 3.411888) (xy 0.456834 3.416733) (xy 0.413406 3.433301) + (xy 0.387842 3.438769) (xy 0.379395 3.420507) (xy 0.374239 3.365296) (xy 0.372346 3.272499) + (xy 0.373689 3.141478) (xy 0.374107 3.121269) (xy 0.377058 3.001733) (xy 0.380548 2.914449) + (xy 0.385514 2.852591) (xy 0.392893 2.809336) (xy 0.403624 2.77786) (xy 0.418645 2.751339) + (xy 0.426502 2.739975) (xy 0.471553 2.689692) (xy 0.52194 2.650581) (xy 0.528108 2.647167) + (xy 0.618458 2.620212) (xy 0.713362 2.62467)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 1.602081 2.780289) (xy 1.601833 2.92632) (xy 1.600872 3.038655) (xy 1.598794 3.122678) + (xy 1.595193 3.183769) (xy 1.589665 3.227309) (xy 1.581804 3.258679) (xy 1.571207 3.283262) + (xy 1.563182 3.297294) (xy 1.496728 3.373388) (xy 1.41247 3.421084) (xy 1.319249 3.438199) + (xy 1.2259 3.422546) (xy 1.170312 3.394418) (xy 1.111957 3.34576) (xy 1.072186 3.286333) + (xy 1.04819 3.208507) (xy 1.037161 3.104652) (xy 1.035599 3.028462) (xy 1.035809 3.022986) + (xy 1.172308 3.022986) (xy 1.173141 3.110355) (xy 1.176961 3.168192) (xy 1.185746 3.206029) + (xy 1.201474 3.233398) (xy 1.220266 3.254042) (xy 1.283375 3.29389) (xy 1.351137 3.297295) + (xy 1.415179 3.264025) (xy 1.420164 3.259517) (xy 1.441439 3.236067) (xy 1.454779 3.208166) + (xy 1.462001 3.166641) (xy 1.464923 3.102316) (xy 1.465385 3.0312) (xy 1.464383 2.941858) + (xy 1.460238 2.882258) (xy 1.451236 2.843089) (xy 1.435667 2.81504) (xy 1.422902 2.800144) + (xy 1.3636 2.762575) (xy 1.295301 2.758057) (xy 1.23011 2.786753) (xy 1.217528 2.797406) + (xy 1.196111 2.821063) (xy 1.182744 2.849251) (xy 1.175566 2.891245) (xy 1.172719 2.956319) + (xy 1.172308 3.022986) (xy 1.035809 3.022986) (xy 1.040322 2.905765) (xy 1.056362 2.813577) + (xy 1.086528 2.744269) (xy 1.133629 2.690211) (xy 1.170312 2.662505) (xy 1.23699 2.632572) + (xy 1.314272 2.618678) (xy 1.38611 2.622397) (xy 1.426308 2.6374) (xy 1.442082 2.64167) + (xy 1.45255 2.62575) (xy 1.459856 2.583089) (xy 1.465385 2.518106) (xy 1.471437 2.445732) + (xy 1.479844 2.402187) (xy 1.495141 2.377287) (xy 1.521864 2.360845) (xy 1.538654 2.353564) + (xy 1.602154 2.326963) (xy 1.602081 2.780289)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 2.395929 2.636662) (xy 2.398911 2.688068) (xy 2.401247 2.766192) (xy 2.402749 2.864857) + (xy 2.403231 2.968343) (xy 2.403231 3.318533) (xy 2.341401 3.380363) (xy 2.298793 3.418462) + (xy 2.26139 3.433895) (xy 2.21027 3.432918) (xy 2.189978 3.430433) (xy 2.126554 3.4232) + (xy 2.074095 3.419055) (xy 2.061308 3.418672) (xy 2.018199 3.421176) (xy 1.956544 3.427462) + (xy 1.932638 3.430433) (xy 1.873922 3.435028) (xy 1.834464 3.425046) (xy 1.795338 3.394228) + (xy 1.781215 3.380363) (xy 1.719385 3.318533) (xy 1.719385 2.663503) (xy 1.76915 2.640829) + (xy 1.812002 2.624034) (xy 1.837073 2.618154) (xy 1.843501 2.636736) (xy 1.849509 2.688655) + (xy 1.854697 2.768172) (xy 1.858664 2.869546) (xy 1.860577 2.955192) (xy 1.865923 3.292231) + (xy 1.91256 3.298825) (xy 1.954976 3.294214) (xy 1.97576 3.279287) (xy 1.98157 3.251377) + (xy 1.98653 3.191925) (xy 1.990246 3.108466) (xy 1.992324 3.008532) (xy 1.992624 2.957104) + (xy 1.992923 2.661054) (xy 2.054454 2.639604) (xy 2.098004 2.62502) (xy 2.121694 2.618219) + (xy 2.122377 2.618154) (xy 2.124754 2.636642) (xy 2.127366 2.687906) (xy 2.129995 2.765649) + (xy 2.132421 2.863574) (xy 2.134115 2.955192) (xy 2.139461 3.292231) (xy 2.256692 3.292231) + (xy 2.262072 2.984746) (xy 2.267451 2.677261) (xy 2.324601 2.647707) (xy 2.366797 2.627413) + (xy 2.39177 2.618204) (xy 2.392491 2.618154) (xy 2.395929 2.636662)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 2.887333 2.633528) (xy 2.94359 2.659117) (xy 2.987747 2.690124) (xy 3.020101 2.724795) + (xy 3.042438 2.76952) (xy 3.056546 2.830692) (xy 3.064211 2.914701) (xy 3.06722 3.02794) + (xy 3.067538 3.102509) (xy 3.067538 3.39342) (xy 3.017773 3.416095) (xy 2.978576 3.432667) + (xy 2.959157 3.438769) (xy 2.955442 3.42061) (xy 2.952495 3.371648) (xy 2.950691 3.300153) + (xy 2.950308 3.243385) (xy 2.948661 3.161371) (xy 2.944222 3.096309) (xy 2.93774 3.056467) + (xy 2.93259 3.048) (xy 2.897977 3.056646) (xy 2.84364 3.078823) (xy 2.780722 3.108886) + (xy 2.720368 3.141192) (xy 2.673721 3.170098) (xy 2.651926 3.189961) (xy 2.651839 3.190175) + (xy 2.653714 3.226935) (xy 2.670525 3.262026) (xy 2.700039 3.290528) (xy 2.743116 3.300061) + (xy 2.779932 3.29895) (xy 2.832074 3.298133) (xy 2.859444 3.310349) (xy 2.875882 3.342624) + (xy 2.877955 3.34871) (xy 2.885081 3.394739) (xy 2.866024 3.422687) (xy 2.816353 3.436007) + (xy 2.762697 3.43847) (xy 2.666142 3.42021) (xy 2.616159 3.394131) (xy 2.554429 3.332868) + (xy 2.52169 3.25767) (xy 2.518753 3.178211) (xy 2.546424 3.104167) (xy 2.588047 3.057769) + (xy 2.629604 3.031793) (xy 2.694922 2.998907) (xy 2.771038 2.965557) (xy 2.783726 2.960461) + (xy 2.867333 2.923565) (xy 2.91553 2.891046) (xy 2.93103 2.858718) (xy 2.91655 2.822394) + (xy 2.891692 2.794) (xy 2.832939 2.759039) (xy 2.768293 2.756417) (xy 2.709008 2.783358) + (xy 2.666339 2.837088) (xy 2.660739 2.85095) (xy 2.628133 2.901936) (xy 2.58053 2.939787) + (xy 2.520461 2.97085) (xy 2.520461 2.882768) (xy 2.523997 2.828951) (xy 2.539156 2.786534) + (xy 2.572768 2.741279) (xy 2.605035 2.70642) (xy 2.655209 2.657062) (xy 2.694193 2.630547) + (xy 2.736064 2.619911) (xy 2.78346 2.618154) (xy 2.887333 2.633528)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 3.570807 2.636782) (xy 3.594161 2.646988) (xy 3.649902 2.691134) (xy 3.697569 2.754967) + (xy 3.727048 2.823087) (xy 3.731846 2.85667) (xy 3.71576 2.903556) (xy 3.680475 2.928365) + (xy 3.642644 2.943387) (xy 3.625321 2.946155) (xy 3.616886 2.926066) (xy 3.60023 2.882351) + (xy 3.592923 2.862598) (xy 3.551948 2.794271) (xy 3.492622 2.760191) (xy 3.416552 2.761239) + (xy 3.410918 2.762581) (xy 3.370305 2.781836) (xy 3.340448 2.819375) (xy 3.320055 2.879809) + (xy 3.307836 2.967751) (xy 3.3025 3.087813) (xy 3.302 3.151698) (xy 3.301752 3.252403) + (xy 3.300126 3.321054) (xy 3.295801 3.364673) (xy 3.287454 3.390282) (xy 3.273765 3.404903) + (xy 3.253411 3.415558) (xy 3.252234 3.416095) (xy 3.213038 3.432667) (xy 3.193619 3.438769) + (xy 3.190635 3.420319) (xy 3.188081 3.369323) (xy 3.18614 3.292308) (xy 3.184997 3.195805) + (xy 3.184769 3.125184) (xy 3.185932 2.988525) (xy 3.190479 2.884851) (xy 3.199999 2.808108) + (xy 3.216081 2.752246) (xy 3.240313 2.711212) (xy 3.274286 2.678954) (xy 3.307833 2.65644) + (xy 3.388499 2.626476) (xy 3.482381 2.619718) (xy 3.570807 2.636782)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 4.245224 2.647838) (xy 4.322528 2.698361) (xy 4.359814 2.74359) (xy 4.389353 2.825663) + (xy 4.391699 2.890607) (xy 4.386385 2.977445) (xy 4.186115 3.065103) (xy 4.088739 3.109887) + (xy 4.025113 3.145913) (xy 3.992029 3.177117) (xy 3.98628 3.207436) (xy 4.004658 3.240805) + (xy 4.024923 3.262923) (xy 4.083889 3.298393) (xy 4.148024 3.300879) (xy 4.206926 3.273235) + (xy 4.250197 3.21832) (xy 4.257936 3.198928) (xy 4.295006 3.138364) (xy 4.337654 3.112552) + (xy 4.396154 3.090471) (xy 4.396154 3.174184) (xy 4.390982 3.23115) (xy 4.370723 3.279189) + (xy 4.328262 3.334346) (xy 4.321951 3.341514) (xy 4.27472 3.390585) (xy 4.234121 3.41692) + (xy 4.183328 3.429035) (xy 4.14122 3.433003) (xy 4.065902 3.433991) (xy 4.012286 3.421466) + (xy 3.978838 3.402869) (xy 3.926268 3.361975) (xy 3.889879 3.317748) (xy 3.86685 3.262126) + (xy 3.854359 3.187047) (xy 3.849587 3.084449) (xy 3.849206 3.032376) (xy 3.850501 2.969948) + (xy 3.968471 2.969948) (xy 3.969839 3.003438) (xy 3.973249 3.008923) (xy 3.995753 3.001472) + (xy 4.044182 2.981753) (xy 4.108908 2.953718) (xy 4.122443 2.947692) (xy 4.204244 2.906096) + (xy 4.249312 2.869538) (xy 4.259217 2.835296) (xy 4.235526 2.800648) (xy 4.21596 2.785339) + (xy 4.14536 2.754721) (xy 4.07928 2.75978) (xy 4.023959 2.797151) (xy 3.985636 2.863473) + (xy 3.973349 2.916116) (xy 3.968471 2.969948) (xy 3.850501 2.969948) (xy 3.85173 2.91072) + (xy 3.861032 2.82071) (xy 3.87946 2.755167) (xy 3.90936 2.706912) (xy 3.95308 2.668767) + (xy 3.972141 2.65644) (xy 4.058726 2.624336) (xy 4.153522 2.622316) (xy 4.245224 2.647838)) (layer F.SilkS) (width 0.01)) + (fp_poly (pts (xy 0.139878 -3.712224) (xy 0.245612 -3.711645) (xy 0.322132 -3.710078) (xy 0.374372 -3.707028) + (xy 0.407263 -3.702004) (xy 0.425737 -3.694511) (xy 0.434727 -3.684056) (xy 0.439163 -3.670147) + (xy 0.439594 -3.668346) (xy 0.446333 -3.635855) (xy 0.458808 -3.571748) (xy 0.475719 -3.482849) + (xy 0.495771 -3.375981) (xy 0.517664 -3.257967) (xy 0.518429 -3.253822) (xy 0.540359 -3.138169) + (xy 0.560877 -3.035986) (xy 0.578659 -2.953402) (xy 0.592381 -2.896544) (xy 0.600718 -2.871542) + (xy 0.601116 -2.871099) (xy 0.625677 -2.85889) (xy 0.676315 -2.838544) (xy 0.742095 -2.814455) + (xy 0.742461 -2.814326) (xy 0.825317 -2.783182) (xy 0.923 -2.743509) (xy 1.015077 -2.703619) + (xy 1.019434 -2.701647) (xy 1.169407 -2.63358) (xy 1.501498 -2.860361) (xy 1.603374 -2.929496) + (xy 1.695657 -2.991303) (xy 1.773003 -3.042267) (xy 1.830064 -3.078873) (xy 1.861495 -3.097606) + (xy 1.864479 -3.098996) (xy 1.887321 -3.09281) (xy 1.929982 -3.062965) (xy 1.994128 -3.008053) + (xy 2.081421 -2.926666) (xy 2.170535 -2.840078) (xy 2.256441 -2.754753) (xy 2.333327 -2.676892) + (xy 2.396564 -2.611303) (xy 2.441523 -2.562795) (xy 2.463576 -2.536175) (xy 2.464396 -2.534805) + (xy 2.466834 -2.516537) (xy 2.45765 -2.486705) (xy 2.434574 -2.441279) (xy 2.395337 -2.37623) + (xy 2.33767 -2.28753) (xy 2.260795 -2.173343) (xy 2.19257 -2.072838) (xy 2.131582 -1.982697) + (xy 2.081356 -1.908151) (xy 2.045416 -1.854435) (xy 2.027287 -1.826782) (xy 2.026146 -1.824905) + (xy 2.028359 -1.79841) (xy 2.045138 -1.746914) (xy 2.073142 -1.680149) (xy 2.083122 -1.658828) + (xy 2.126672 -1.563841) (xy 2.173134 -1.456063) (xy 2.210877 -1.362808) (xy 2.238073 -1.293594) + (xy 2.259675 -1.240994) (xy 2.272158 -1.213503) (xy 2.273709 -1.211384) (xy 2.296668 -1.207876) + (xy 2.350786 -1.198262) (xy 2.428868 -1.183911) (xy 2.523719 -1.166193) (xy 2.628143 -1.146475) + (xy 2.734944 -1.126126) (xy 2.836926 -1.106514) (xy 2.926894 -1.089009) (xy 2.997653 -1.074978) + (xy 3.042006 -1.065791) (xy 3.052885 -1.063193) (xy 3.064122 -1.056782) (xy 3.072605 -1.042303) + (xy 3.078714 -1.014867) (xy 3.082832 -0.969589) (xy 3.085341 -0.90158) (xy 3.086621 -0.805953) + (xy 3.087054 -0.67782) (xy 3.087077 -0.625299) (xy 3.087077 -0.198155) (xy 2.9845 -0.177909) + (xy 2.927431 -0.16693) (xy 2.842269 -0.150905) (xy 2.739372 -0.131767) (xy 2.629096 -0.111449) + (xy 2.598615 -0.105868) (xy 2.496855 -0.086083) (xy 2.408205 -0.066627) (xy 2.340108 -0.049303) + (xy 2.300004 -0.035912) (xy 2.293323 -0.031921) (xy 2.276919 -0.003658) (xy 2.253399 0.051109) + (xy 2.227316 0.121588) (xy 2.222142 0.136769) (xy 2.187956 0.230896) (xy 2.145523 0.337101) + (xy 2.103997 0.432473) (xy 2.103792 0.432916) (xy 2.03464 0.582525) (xy 2.489512 1.251617) + (xy 2.1975 1.544116) (xy 2.10918 1.63117) (xy 2.028625 1.707909) (xy 1.96036 1.770237) + (xy 1.908908 1.814056) (xy 1.878794 1.83527) (xy 1.874474 1.836616) (xy 1.849111 1.826016) + (xy 1.797358 1.796547) (xy 1.724868 1.751705) (xy 1.637294 1.694984) (xy 1.542612 1.631462) + (xy 1.446516 1.566668) (xy 1.360837 1.510287) (xy 1.291016 1.465788) (xy 1.242494 1.436639) + (xy 1.220782 1.426308) (xy 1.194293 1.43505) (xy 1.144062 1.458087) (xy 1.080451 1.490631) + (xy 1.073708 1.494249) (xy 0.988046 1.53721) (xy 0.929306 1.558279) (xy 0.892772 1.558503) + (xy 0.873731 1.538928) (xy 0.87362 1.538654) (xy 0.864102 1.515472) (xy 0.841403 1.460441) + (xy 0.807282 1.377822) (xy 0.7635 1.271872) (xy 0.711816 1.146852) (xy 0.653992 1.00702) + (xy 0.597991 0.871637) (xy 0.536447 0.722234) (xy 0.479939 0.583832) (xy 0.430161 0.460673) + (xy 0.388806 0.357002) (xy 0.357568 0.277059) (xy 0.338141 0.225088) (xy 0.332154 0.205692) + (xy 0.347168 0.183443) (xy 0.386439 0.147982) (xy 0.438807 0.108887) (xy 0.587941 -0.014755) + (xy 0.704511 -0.156478) (xy 0.787118 -0.313296) (xy 0.834366 -0.482225) (xy 0.844857 -0.660278) + (xy 0.837231 -0.742461) (xy 0.795682 -0.912969) (xy 0.724123 -1.063541) (xy 0.626995 -1.192691) + (xy 0.508734 -1.298936) (xy 0.37378 -1.38079) (xy 0.226571 -1.436768) (xy 0.071544 -1.465385) + (xy -0.086861 -1.465156) (xy -0.244206 -1.434595) (xy -0.396054 -1.372218) (xy -0.537965 -1.27654) + (xy -0.597197 -1.222428) (xy -0.710797 -1.08348) (xy -0.789894 -0.931639) (xy -0.835014 -0.771333) + (xy -0.846684 -0.606988) (xy -0.825431 -0.443029) (xy -0.77178 -0.283882) (xy -0.68626 -0.133975) + (xy -0.569395 0.002267) (xy -0.438807 0.108887) (xy -0.384412 0.149642) (xy -0.345986 0.184718) + (xy -0.332154 0.205726) (xy -0.339397 0.228635) (xy -0.359995 0.283365) (xy -0.392254 0.365672) + (xy -0.434479 0.471315) (xy -0.484977 0.59605) (xy -0.542052 0.735636) (xy -0.598146 0.87167) + (xy -0.660033 1.021201) (xy -0.717356 1.159767) (xy -0.768356 1.283107) (xy -0.811273 1.386964) + (xy -0.844347 1.46708) (xy -0.865819 1.519195) (xy -0.873775 1.538654) (xy -0.892571 1.558423) + (xy -0.928926 1.558365) (xy -0.987521 1.537441) (xy -1.073032 1.494613) (xy -1.073708 1.494249) + (xy -1.138093 1.461012) (xy -1.190139 1.436802) (xy -1.219488 1.426404) (xy -1.220783 1.426308) + (xy -1.242876 1.436855) (xy -1.291652 1.466184) (xy -1.361669 1.510827) (xy -1.447486 1.567314) + (xy -1.542612 1.631462) (xy -1.63946 1.696411) (xy -1.726747 1.752896) (xy -1.798819 1.797421) + (xy -1.850023 1.82649) (xy -1.874474 1.836616) (xy -1.89699 1.823307) (xy -1.942258 1.786112) + (xy -2.005756 1.729128) (xy -2.082961 1.656449) (xy -2.169349 1.572171) (xy -2.197601 1.544016) + (xy -2.489713 1.251416) (xy -2.267369 0.925104) (xy -2.199798 0.824897) (xy -2.140493 0.734963) + (xy -2.092783 0.66051) (xy -2.059993 0.606751) (xy -2.045452 0.578894) (xy -2.045026 0.576912) + (xy -2.052692 0.550655) (xy -2.073311 0.497837) (xy -2.103315 0.42731) (xy -2.124375 0.380093) + (xy -2.163752 0.289694) (xy -2.200835 0.198366) (xy -2.229585 0.1212) (xy -2.237395 0.097692) + (xy -2.259583 0.034916) (xy -2.281273 -0.013589) (xy -2.293187 -0.031921) (xy -2.319477 -0.043141) + (xy -2.376858 -0.059046) (xy -2.457882 -0.077833) (xy -2.555105 -0.097701) (xy -2.598615 -0.105868) + (xy -2.709104 -0.126171) (xy -2.815084 -0.14583) (xy -2.906199 -0.162912) (xy -2.972092 -0.175482) + (xy -2.9845 -0.177909) (xy -3.087077 -0.198155) (xy -3.087077 -0.625299) (xy -3.086847 -0.765754) + (xy -3.085901 -0.872021) (xy -3.083859 -0.948987) (xy -3.080338 -1.00154) (xy -3.074957 -1.034567) + (xy -3.067334 -1.052955) (xy -3.057088 -1.061592) (xy -3.052885 -1.063193) (xy -3.02753 -1.068873) + (xy -2.971516 -1.080205) (xy -2.892036 -1.095821) (xy -2.796288 -1.114353) (xy -2.691467 -1.134431) + (xy -2.584768 -1.154688) (xy -2.483387 -1.173754) (xy -2.394521 -1.190261) (xy -2.325363 -1.202841) + (xy -2.283111 -1.210125) (xy -2.27371 -1.211384) (xy -2.265193 -1.228237) (xy -2.24634 -1.27313) + (xy -2.220676 -1.33757) (xy -2.210877 -1.362808) (xy -2.171352 -1.460314) (xy -2.124808 -1.568041) + (xy -2.083123 -1.658828) (xy -2.05245 -1.728247) (xy -2.032044 -1.78529) (xy -2.025232 -1.820223) + (xy -2.026318 -1.824905) (xy -2.040715 -1.847009) (xy -2.073588 -1.896169) (xy -2.12141 -1.967152) + (xy -2.180652 -2.054722) (xy -2.247785 -2.153643) (xy -2.261059 -2.17317) (xy -2.338954 -2.28886) + (xy -2.396213 -2.376956) (xy -2.435119 -2.441514) (xy -2.457956 -2.486589) (xy -2.467006 -2.516237) + (xy -2.464552 -2.534515) (xy -2.464489 -2.534631) (xy -2.445173 -2.558639) (xy -2.402449 -2.605053) + (xy -2.340949 -2.669063) (xy -2.265302 -2.745855) (xy -2.180139 -2.830618) (xy -2.170535 -2.840078) + (xy -2.06321 -2.944011) (xy -1.980385 -3.020325) (xy -1.920395 -3.070429) (xy -1.881577 -3.09573) + (xy -1.86448 -3.098996) (xy -1.839527 -3.08475) (xy -1.787745 -3.051844) (xy -1.71448 -3.003792) + (xy -1.62508 -2.94411) (xy -1.524889 -2.876312) (xy -1.501499 -2.860361) (xy -1.169407 -2.63358) + (xy -1.019435 -2.701647) (xy -0.92823 -2.741315) (xy -0.830331 -2.781209) (xy -0.746169 -2.813017) + (xy -0.742462 -2.814326) (xy -0.676631 -2.838424) (xy -0.625884 -2.8588) (xy -0.601158 -2.871064) + (xy -0.601116 -2.871099) (xy -0.593271 -2.893266) (xy -0.579934 -2.947783) (xy -0.56243 -3.02852) + (xy -0.542083 -3.12935) (xy -0.520218 -3.244144) (xy -0.518429 -3.253822) (xy -0.496496 -3.372096) + (xy -0.47636 -3.479458) (xy -0.45932 -3.569083) (xy -0.446672 -3.634149) (xy -0.439716 -3.667832) + (xy -0.439594 -3.668346) (xy -0.435361 -3.682675) (xy -0.427129 -3.693493) (xy -0.409967 -3.701294) + (xy -0.378942 -3.706571) (xy -0.329122 -3.709818) (xy -0.255576 -3.711528) (xy -0.153371 -3.712193) + (xy -0.017575 -3.712307) (xy 0 -3.712308) (xy 0.139878 -3.712224)) (layer F.SilkS) (width 0.01)) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B94B) + (at 255.539 62.747) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601CF5F2) + (attr smd) + (fp_text reference C4 (at -0.127 2.111) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 23 +5V)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B98D) + (at 255.539 59.651) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601CF5F8) + (attr smd) + (fp_text reference C3 (at -0.127 -2.159) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 23 +5V)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B9BD) + (at 242.966 59.73 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601D17B5) + (attr smd) + (fp_text reference C8 (at 0.127 2.111) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B9ED) + (at 242.966 62.826 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601D17AF) + (attr smd) + (fp_text reference C5 (at 0 -2.032) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BA1D) + (at 221.757 56.984 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /602D6D94) + (attr smd) + (fp_text reference C2 (at 0 1.984) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BD47) + (at 221.757 59.778 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /602D3A6D) + (attr smd) + (fp_text reference C1 (at 0 -1.85) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011BD08) + (at 204.7 51.269 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601E7ABB) + (attr smd) + (fp_text reference C6 (at -3.429 -2.413 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7µF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder (layer F.Cu) (tedit 5F68FEEF) (tstamp 6011B59D) + (at 204.7 53.809 180) + (descr "Capacitor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "capacitor handsolder") + (path /601EC4C2) + (attr smd) + (fp_text reference C7 (at -3.556 2.667 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100nF (at 0 1.85) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.711252 -0.91) (end 0.711252 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.711252 0.91) (end 0.711252 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.48 1.15) (end -2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.48 -1.15) (end 2.48 -1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 -1.15) (end 2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.48 1.15) (end -2.48 1.15) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 1 GND)) + (pad 1 smd roundrect (at -1.5625 0 180) (size 1.325 1.8) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1886769811320755) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B8AF) + (at 249.363 75.637 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FFDE894) + (attr smd) + (fp_text reference R2 (at -3.302 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4k7 (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 14 SDA)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B84F) + (at 251.903 75.637 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FFC59E5) + (attr smd) + (fp_text reference R1 (at -3.302 -0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4k7 (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 13 SCL)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011C79F) + (at 235.883 85.763 90) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /601233DD) + (attr smd) + (fp_text reference R7 (at 3.37 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 26 BATT_SENSE)) + (pad 1 smd roundrect (at -1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011C76F) + (at 238.718 85.744 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /601233D3) + (attr smd) + (fp_text reference R6 (at -3.344 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 23 +5V)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 26 BATT_SENSE)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B7F2) + (at 223.768 85.7368 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /5FF5B2E5) + (attr smd) + (fp_text reference R3 (at -3.429 0.127 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 480R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 2 "Net-(D1-Pad2)")) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 4 LED1)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B7BC) + (at 230.773 85.7462 270) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /6009A5CC) + (attr smd) + (fp_text reference R4 (at -3.429 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 3 +3V3)) + (pad 1 smd roundrect (at -1.55 0 270) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 25 DEVICE_ID)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder (layer F.Cu) (tedit 5F68FEEE) (tstamp 6011B78C) + (at 227.979 85.7462 90) + (descr "Resistor SMD 1206 (3216 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator") + (tags "resistor handsolder") + (path /600A5EBF) + (attr smd) + (fp_text reference R5 (at 3.429 0 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ?R (at 0 1.82 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.6 0.8) (end -1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -1.6 -0.8) (end 1.6 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 -0.8) (end 1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 1.6 0.8) (end -1.6 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.727064 -0.91) (end 0.727064 -0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.727064 0.91) (end 0.727064 0.91) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.45 1.12) (end -2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.45 -1.12) (end 2.45 -1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 -1.12) (end 2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.45 1.12) (end -2.45 1.12) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 2 smd roundrect (at 1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 25 DEVICE_ID)) + (pad 1 smd roundrect (at -1.55 0 90) (size 1.3 1.75) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.1923069230769231) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_1206_3216Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A434) (tstamp 6011BC27) + (at 216.535 52.451) + (descr "Through hole straight socket strip, 1x01, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x01 2.54mm single row") + (path /60111880) + (fp_text reference ANT (at -2.667 0.043) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.77) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -0.635) (end 1.27 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 1.33) (end 1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.21) (end -1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.21) (end 1.33 1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.8) (end 1.75 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 1.75) (end -1.8 1.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 1.75) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 40 "Net-(J6-Pad1)")) + ) + + (module Package_TO_SOT_THT:TO-92_Inline (layer F.Cu) (tedit 5A1DD157) (tstamp 6011BCD3) + (at 248.793 59.817 270) + (descr "TO-92 leads in-line, narrow, oval pads, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (path /600FF264) + (fp_text reference U1 (at -2.325 -0.0658 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value L78L33_TO92 (at 1.27 2.79 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.53 1.85) (end 3.07 1.85) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.5 1.75) (end 3 1.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.46 -2.73) (end 4 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.46 -2.73) (end -1.46 2.01) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4 2.01) (end 4 -2.73) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4 2.01) (end -1.46 2.01) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 1.27 0) (end 1.27 -2.6) (angle 135) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 1.27 -2.48) (angle -135) (layer F.Fab) (width 0.1)) + (fp_arc (start 1.27 0) (end 1.27 -2.6) (angle -135) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 1.27 -2.48) (angle 135) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 1.27 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 3 +3V3)) + (pad 3 thru_hole oval (at 2.54 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 23 +5V)) + (pad 2 thru_hole oval (at 1.27 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Package_TO_SOT_THT.3dshapes/TO-92_Inline.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_Wire:SolderWirePad_1x01_SMD_1x2mm (layer F.Cu) (tedit 5DD6EB27) (tstamp 6011BC93) + (at 256.409 71.584 90) + (descr "Wire Pad, Square, SMD Pad, 5mm x 10mm,") + (tags "MesurementPoint Square SMDPad 5mmx10mm ") + (path /601E388E) + (attr virtual) + (fp_text reference J2 (at -3.387 0.181 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.63 -1.27) (end -0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.63 1.27) (end 0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 1.27) (end 0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end -0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end 0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 -1.27) (end 0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 1.27) (end -0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -0.63 1.27) (end -0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 smd roundrect (at 0 0 90) (size 1 2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 23 +5V)) + ) + + (module Connector_Wire:SolderWirePad_1x01_SMD_1x2mm (layer F.Cu) (tedit 5DD6EB27) (tstamp 6011BBE8) + (at 256.409 69.471 90) + (descr "Wire Pad, Square, SMD Pad, 5mm x 10mm,") + (tags "MesurementPoint Square SMDPad 5mmx10mm ") + (path /601E3EB3) + (attr virtual) + (fp_text reference J5 (at 3.073 0.181 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x01 (at 0 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0.63 -1.27) (end -0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.63 1.27) (end 0.63 -1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 1.27) (end 0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end -0.63 1.27) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.63 -1.27) (end 0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 -1.27) (end 0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.63 1.27) (end -0.63 1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -0.63 1.27) (end -0.63 -1.27) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 smd roundrect (at 0 0 90) (size 1 2) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + ) + + (module Package_QFP:LQFP-32_7x7mm_P0.8mm (layer F.Cu) (tedit 5D9F72AF) (tstamp 6011BE78) + (at 230.124 67.437 270) + (descr "LQFP, 32 Pin (https://www.nxp.com/docs/en/package-information/SOT358-1.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py") + (tags "LQFP QFP") + (path /6007BB38) + (attr smd) + (fp_text reference U4 (at 0.0762 -0.0635 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value STM32G071KxT (at 0 5.88 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 3.31 3.61) (end 3.61 3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.61 3.61) (end 3.61 3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.31 3.61) (end -3.61 3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 3.61) (end -3.61 3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.31 -3.61) (end 3.61 -3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.61 -3.61) (end 3.61 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.31 -3.61) (end -3.61 -3.61) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 -3.61) (end -3.61 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.61 -3.31) (end -4.925 -3.31) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.5 -3.5) (end 3.5 -3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 3.5 -3.5) (end 3.5 3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 3.5 3.5) (end -3.5 3.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 3.5) (end -3.5 -2.5) (layer F.Fab) (width 0.1)) + (fp_line (start -3.5 -2.5) (end -2.5 -3.5) (layer F.Fab) (width 0.1)) + (fp_line (start 0 -5.18) (end -3.3 -5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -5.18) (end -3.3 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 -3.75) (end -3.75 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 -3.75) (end -3.75 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 -3.3) (end -5.18 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.18 -3.3) (end -5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 -5.18) (end 3.3 -5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -5.18) (end 3.3 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 -3.75) (end 3.75 -3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 -3.75) (end 3.75 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 -3.3) (end 5.18 -3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.18 -3.3) (end 5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 5.18) (end -3.3 5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 5.18) (end -3.3 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.3 3.75) (end -3.75 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 3.75) (end -3.75 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.75 3.3) (end -5.18 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -5.18 3.3) (end -5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0 5.18) (end 3.3 5.18) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 5.18) (end 3.3 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.3 3.75) (end 3.75 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 3.75) (end 3.75 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.75 3.3) (end 5.18 3.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 5.18 3.3) (end 5.18 0) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 32 smd roundrect (at -2.8 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 6 SCK)) + (pad 31 smd roundrect (at -2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 29 "Net-(U4-Pad31)")) + (pad 30 smd roundrect (at -1.2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 30 "Net-(U4-Pad30)")) + (pad 29 smd roundrect (at -0.4 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 11 DOUT)) + (pad 28 smd roundrect (at 0.4 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 31 "Net-(U4-Pad28)")) + (pad 27 smd roundrect (at 1.2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 10 BCLK)) + (pad 26 smd roundrect (at 2 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 12 LRCL_WS)) + (pad 25 smd roundrect (at 2.8 -4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 16 SWCLK)) + (pad 24 smd roundrect (at 4.175 -2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 15 SWDIO)) + (pad 23 smd roundrect (at 4.175 -2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 14 SDA)) + (pad 22 smd roundrect (at 4.175 -1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 13 SCL)) + (pad 21 smd roundrect (at 4.175 -0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 32 "Net-(U4-Pad21)")) + (pad 20 smd roundrect (at 4.175 0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 24 I²C-ADDRESS)) + (pad 19 smd roundrect (at 4.175 1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 33 "Net-(U4-Pad19)")) + (pad 18 smd roundrect (at 4.175 2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 34 "Net-(U4-Pad18)")) + (pad 17 smd roundrect (at 4.175 2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 35 "Net-(U4-Pad17)")) + (pad 16 smd roundrect (at 2.8 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 26 BATT_SENSE)) + (pad 15 smd roundrect (at 2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 7 DIO0)) + (pad 14 smd roundrect (at 1.2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 28 SPI_RESET)) + (pad 13 smd roundrect (at 0.4 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 4 LED1)) + (pad 12 smd roundrect (at -0.4 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 27 SPI_NSS)) + (pad 11 smd roundrect (at -1.2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 9 MOSI)) + (pad 10 smd roundrect (at -2 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 8 MISO)) + (pad 9 smd roundrect (at -2.8 4.175 270) (size 0.5 1.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 25 DEVICE_ID)) + (pad 8 smd roundrect (at -4.175 2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 17 RX)) + (pad 7 smd roundrect (at -4.175 2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 5 TX)) + (pad 6 smd roundrect (at -4.175 1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 36 "Net-(U4-Pad6)")) + (pad 5 smd roundrect (at -4.175 0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (pad 4 smd roundrect (at -4.175 -0.4 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 3 +3V3)) + (pad 3 smd roundrect (at -4.175 -1.2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 37 "Net-(U4-Pad3)")) + (pad 2 smd roundrect (at -4.175 -2 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 38 "Net-(U4-Pad2)")) + (pad 1 smd roundrect (at -4.175 -2.8 270) (size 1.5 0.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 39 "Net-(U4-Pad1)")) + (model ${KISYS3DMOD}/Package_QFP.3dshapes/LQFP-32_7x7mm_P0.8mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm (layer F.Cu) (tedit 5B391E66) (tstamp 6011B68E) + (at 239.868 53.244 180) + (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, open") + (tags "solder jumper open") + (path /5FF5D896) + (attr virtual) + (fp_text reference JP1 (at 0 2) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Jumper_2_Open (at 0 1.9) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.4 0.3) (end -1.4 -0.3) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.7 1) (end -0.7 1) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.4 -0.3) (end 1.4 0.3) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.7 -1) (end 0.7 -1) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.65 -1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.65 -1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.65 1.25) (end 1.65 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.65 1.25) (end -1.65 1.25) (layer F.CrtYd) (width 0.05)) + (fp_arc (start -0.7 -0.3) (end -0.7 -1) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start -0.7 0.3) (end -1.4 0.3) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start 0.7 0.3) (end 0.7 1) (angle -90) (layer F.SilkS) (width 0.12)) + (fp_arc (start 0.7 -0.3) (end 1.4 -0.3) (angle -90) (layer F.SilkS) (width 0.12)) + (pad 2 smd custom (at 0.65 0 180) (size 1 0.5) (layers F.Cu F.Mask) + (net 24 I²C-ADDRESS) (zone_connect 2) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0)) + (gr_poly (pts + (xy 0 -0.75) (xy -0.5 -0.75) (xy -0.5 0.75) (xy 0 0.75)) (width 0)) + )) + (pad 1 smd custom (at -0.65 0 180) (size 1 0.5) (layers F.Cu F.Mask) + (net 1 GND) (zone_connect 2) + (options (clearance outline) (anchor rect)) + (primitives + (gr_circle (center 0 0.25) (end 0.5 0.25) (width 0)) + (gr_circle (center 0 -0.25) (end 0.5 -0.25) (width 0)) + (gr_poly (pts + (xy 0 -0.75) (xy 0.5 -0.75) (xy 0.5 0.75) (xy 0 0.75)) (width 0)) + )) + ) + + (module Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A420) (tstamp 6011B6F8) + (at 223.647 52.578 90) + (descr "Through hole straight socket strip, 1x05, 2.54mm pitch, single row (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 1x05 2.54mm single row") + (path /600AF8B5) + (fp_text reference J4 (at 1.182 -2.779 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Microphone Connector" (at 0 12.93 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -0.635) (end 1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 11.43) (end -1.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 11.49) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 11.49) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 -1.8) (end 1.75 11.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.75 11.9) (end -1.8 11.9) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 11.9) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 0 5.08) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 12 LRCL_WS)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 11 DOUT)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 10 BCLK)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +3V3)) + ) + + (module Connector_JST:JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical (layer F.Cu) (tedit 5B78AD87) (tstamp 6011B535) + (at 248.332 85.709) + (descr "JST PH series connector, B4B-PH-SM4-TB (http://www.jst-mfg.com/product/pdf/eng/ePH.pdf), generated with kicad-footprint-generator") + (tags "connector JST PH side entry") + (path /5FFACF3F) + (attr smd) + (fp_text reference J3 (at 0 -3.2385) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "I²C IN" (at 0 4.45) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.975 0.75) (end 5.975 0.75) (layer F.Fab) (width 0.1)) + (fp_line (start -6.085 0.01) (end -6.085 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 0.86) (end -3.76 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.76 0.86) (end -3.76 3.25) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 0.01) (end 6.085 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 0.86) (end 3.76 0.86) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 -3.51) (end -6.085 -4.36) (layer F.SilkS) (width 0.12)) + (fp_line (start -6.085 -4.36) (end 6.085 -4.36) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.085 -4.36) (end 6.085 -3.51) (layer F.SilkS) (width 0.12)) + (fp_line (start -5.975 -4.25) (end 5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start -5.975 0.75) (end -5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start 5.975 0.75) (end 5.975 -4.25) (layer F.Fab) (width 0.1)) + (fp_line (start -3.25 -2.75) (end -3.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -3.25 -2.25) (end -2.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -2.75 -2.25) (end -2.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -2.75 -2.75) (end -3.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -1.25 -2.75) (end -1.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.25 -2.25) (end -0.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 -2.25) (end -0.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -0.75 -2.75) (end -1.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 0.75 -2.75) (end 0.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0.75 -2.25) (end 1.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.25 -2.25) (end 1.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 1.25 -2.75) (end 0.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 -2.75) (end 2.75 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 -2.25) (end 3.25 -2.25) (layer F.Fab) (width 0.1)) + (fp_line (start 3.25 -2.25) (end 3.25 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start 3.25 -2.75) (end 2.75 -2.75) (layer F.Fab) (width 0.1)) + (fp_line (start -6.7 -4.75) (end -6.7 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -6.7 3.75) (end 6.7 3.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.7 3.75) (end 6.7 -4.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.7 -4.75) (end -6.7 -4.75) (layer F.CrtYd) (width 0.05)) + (fp_line (start -3.5 0.75) (end -3 0.042893) (layer F.Fab) (width 0.1)) + (fp_line (start -3 0.042893) (end -2.5 0.75) (layer F.Fab) (width 0.1)) + (fp_text user %R (at 0 -1) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad MP smd roundrect (at 5.4 -1.75) (size 1.6 3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625)) + (pad MP smd roundrect (at -5.4 -1.75) (size 1.6 3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.15625)) + (pad 4 smd roundrect (at 3 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 13 SCL)) + (pad 3 smd roundrect (at 1 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 14 SDA)) + (pad 2 smd roundrect (at -1 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 23 +5V)) + (pad 1 smd roundrect (at -3 0.5) (size 1 5.5) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model ${KISYS3DMOD}/Connector_JST.3dshapes/JST_PH_S4B-PH-K_1x04_P2.00mm_Horizontal.wrl + (offset (xyz -3 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 90 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 6011B5DB) + (at 206.489 81.583) + (descr "Through hole straight pin header, 2x03, 2.54mm pitch, double rows") + (tags "Through hole pin header THT 2x03 2.54mm double row") + (path /5FF594B6) + (fp_text reference J1 (at 3.25 7.62) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Debug/USART (at 1.27 7.41) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 0 -1.27) (end 3.81 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 3.81 -1.27) (end 3.81 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 3.81 6.35) (end -1.27 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 6.35) (end -1.27 0) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 0) (end 0 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.33 6.41) (end 3.87 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.87 -1.33) (end 3.87 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.27 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 1.27) (end 1.27 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 -1.33) (end 3.87 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 4.35 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.35 6.85) (end 4.35 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.35 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 1.27 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 6 thru_hole oval (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 SWCLK)) + (pad 5 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 15 SWDIO)) + (pad 4 thru_hole oval (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 5 TX)) + (pad 3 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 17 RX)) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 +3V3)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x03_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED_THT:LED_D3.0mm (layer F.Cu) (tedit 587A3A7B) (tstamp 6011B4D3) + (at 218.075 86.095) + (descr "LED, diameter 3.0mm, 2 pins") + (tags "LED diameter 3.0mm 2 pins") + (path /5FF59892) + (fp_text reference D1 (at 1.287 3.126) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 1.27 2.96) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 1.27 0) (end 2.77 0) (layer F.Fab) (width 0.1)) + (fp_line (start -0.23 -1.16619) (end -0.23 1.16619) (layer F.Fab) (width 0.1)) + (fp_line (start -0.29 -1.236) (end -0.29 -1.08) (layer F.SilkS) (width 0.12)) + (fp_line (start -0.29 1.08) (end -0.29 1.236) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.15 -2.25) (end -1.15 2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 2.25) (end 3.7 2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 2.25) (end 3.7 -2.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.7 -2.25) (end -1.15 -2.25) (layer F.CrtYd) (width 0.05)) + (fp_arc (start 1.27 0) (end 0.229039 1.08) (angle -87.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end 0.229039 -1.08) (angle 87.9) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.29 1.235516) (angle -108.8) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.29 -1.235516) (angle 108.8) (layer F.SilkS) (width 0.12)) + (fp_arc (start 1.27 0) (end -0.23 -1.16619) (angle 284.3) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.54 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 2 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 0) (size 1.8 1.8) (drill 0.9) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/LED_THT.3dshapes/LED_D3.0mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (dimension 3.263 (width 0.15) (layer Dwgs.User) + (gr_text "3.263 mm" (at 196.708 54.0825 270) (layer Dwgs.User) + (effects (font (size 1 1) (thickness 0.15))) + ) + (feature1 (pts (xy 216.535 55.714) (xy 197.421579 55.714))) + (feature2 (pts (xy 216.535 52.451) (xy 197.421579 52.451))) + (crossbar (pts (xy 198.008 52.451) (xy 198.008 55.714))) + (arrow1a (pts (xy 198.008 55.714) (xy 197.421579 54.587496))) + (arrow1b (pts (xy 198.008 55.714) (xy 198.594421 54.587496))) + (arrow2a (pts (xy 198.008 52.451) (xy 197.421579 53.577504))) + (arrow2b (pts (xy 198.008 52.451) (xy 198.594421 53.577504))) + ) + (gr_line (start 202.668 49.094) (end 255.663 49.094) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD82)) + (gr_line (start 202.668 90.694) (end 255.663 90.594) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD85)) + (gr_line (start 199.668 52.094) (end 199.668 87.694) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD88)) + (gr_text TX (at 211.989 84.333) (layer F.SilkS) (tstamp 6011B81C) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text LRCL (at 233.822 55.841 270) (layer F.SilkS) (tstamp 6011B765) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text DOUT (at 231.409 55.968 270) (layer F.SilkS) (tstamp 6011B450) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text BCLK (at 228.615 55.968 270) (layer F.SilkS) (tstamp 6011B441) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text GND (at 225.948 55.587 270) (layer F.SilkS) (tstamp 6011B44A) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text RX (at 211.989 81.833) (layer F.SilkS) (tstamp 6011B81F) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text SWCLK (at 210.989 86.833) (layer F.SilkS) (tstamp 6011B819) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text SWDIO (at 204.716 86.838) (layer F.SilkS) (tstamp 6011B816) + (effects (font (size 1 1) (thickness 0.15)) (justify right)) + ) + (gr_text GND (at 202.938 84.298) (layer F.SilkS) (tstamp 6011B74A) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text 3V3 (at 203.192 81.833) (layer F.SilkS) (tstamp 6011B747) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_line (start 258.663 87.594) (end 258.663 52.094) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD8B)) + (gr_arc (start 202.668 52.094) (end 202.668 49.094) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD97)) + (gr_arc (start 202.668 87.694) (end 199.668 87.694) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD94)) + (gr_arc (start 255.663 87.594) (end 255.663 90.594) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD91)) + (gr_arc (start 255.663 52.094) (end 258.663 52.094) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 6011BD8E)) + (gr_text Batt+ (at 255.793 73.24) (layer F.SilkS) (tstamp 6011B73B) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text Batt- (at 255.666 67.906) (layer F.SilkS) (tstamp 6011B738) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "RFM95W\n868MHz" (at 201.668 76.094) (layer F.SilkS) (tstamp 6011BFFD) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "STM32G071\nKBT6" (at 226.868 74.244) (layer F.SilkS) (tstamp 6011B732) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "Device ID" (at 225.947 89.226) (layer F.SilkS) (tstamp 6011B72F) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "senseBox\nI²C" (at 256.568 87.644 90) (layer F.SilkS) (tstamp 6011B72C) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "I²C Address" (at 246.368 51.244) (layer F.SilkS) (tstamp 6011BA8F) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "0x78 Open\n0x79 Closed" (at 241.868 53.744) (layer F.SilkS) (tstamp 6011BA8C) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + (gr_text "Microphone In" (at 224.668 50.144) (layer F.SilkS) (tstamp 6011BA89) + (effects (font (size 1 1) (thickness 0.15)) (justify left)) + ) + + (via (at 243.601 55.968) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011BD2C)) + (via (at 251.348 53.301) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B933)) + (via (at 212.613 54.444) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B456)) + (via (at 219.598 53.809) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B480)) + (via (at 203.723 62.699) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B4A4)) + (via (at 233.06 58.381) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B447)) + (via (at 238.013 51.269) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B492)) + (via (at 241.823 65.874) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B453)) + (via (at 255.158 66.509) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B92D)) + (via (at 230.012 56.222) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B489)) + (via (at 249.57 68.541) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1) (tstamp 6011B750)) + (via (at 245.068 70.994) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 255.568 51.844) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 254.468 77.944) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 241.918 88.094) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 218.068 75.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 201.618 79.194) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 203.168 88.744) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 215.518 59.694) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 239.918 80.694) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 257.818 83.594) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 210.818 49.894) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 241.968 72.444) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 229.5548 81.0632) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 213.1972 79.5392) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (via (at 224.4748 89.5468) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 1)) + (segment (start 223.768 87.2868) (end 223.768 86.4016) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.4614 86.095) (end 220.615 86.095) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.768 86.4016) (end 223.4614 86.095) (width 0.25) (layer F.Cu) (net 2)) + (segment (start 223.647 52.578) (end 223.647 51.03) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BA86)) + (segment (start 223.647 51.03) (end 223.251 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B82B)) + (segment (start 230.52 63.258) (end 230.524 63.262) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B87C)) + (segment (start 230.52 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B879)) + (segment (start 229.123 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B876)) + (segment (start 223.647 52.578) (end 223.647 54.302) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B873)) + (segment (start 230.52 59.778) (end 230.52 63.258) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B7E0)) + (via (at 230.52 59.778) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3) (tstamp 6011B7DD)) + (segment (start 213.121 50.634) (end 212.928 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4B3)) + (segment (start 228.996 59.651) (end 229.123 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4FB)) + (segment (start 223.647 54.302) (end 228.996 59.651) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4F8)) + (segment (start 223.3195 59.778) (end 230.52 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BC60)) + (segment (start 223.3195 56.984) (end 223.3195 59.778) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B762)) + (segment (start 244.5285 59.73) (end 244.5285 62.826) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BCC0)) + (segment (start 244.5285 59.73) (end 244.538 59.73) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B756)) + (segment (start 244.625 59.817) (end 248.793 59.817) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B759)) + (segment (start 244.538 59.73) (end 244.625 59.817) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BA9E)) + (segment (start 244.363 62.9915) (end 244.5285 62.826) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B921)) + (segment (start 208.55 57.024) (end 208.55 55.012) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B891)) + (segment (start 208.55 55.012) (end 212.928 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B4FE)) + (segment (start 213.558 50.634) (end 213.121 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B918)) + (segment (start 212.928 50.634) (end 213.558 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B936)) + (segment (start 223.251 50.634) (end 213.558 50.634) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B89D)) + (segment (start 206.2625 51.269) (end 206.2625 53.809) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B939)) + (segment (start 207.347 53.809) (end 208.525 54.987) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011BCF6)) + (segment (start 206.2625 53.809) (end 207.347 53.809) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011B972)) + (segment (start 244.5285 62.826) (end 244.5285 67.1335) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 249.363 71.989) (end 249.363 74.087) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 244.5285 67.1545) (end 249.363 71.989) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 249.363 74.087) (end 251.903 74.087) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 208.525 54.987) (end 208.55 55.012) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011D1F2)) + (via (at 208.525 54.987) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 206.489 57.023) (end 208.525 54.987) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 206.489 81.583) (end 206.489 57.023) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 248.754 59.778) (end 248.793 59.817) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 230.52 59.778) (end 248.754 59.778) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 244.5285 67.1335) (end 244.5285 67.1545) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011DD2D)) + (via (at 244.5285 67.1335) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 233.318 86.544) (end 233.318 86.544) (width 0.25) (layer F.Cu) (net 3) (tstamp 6011DFF6)) + (via (at 233.318 86.544) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 3)) + (segment (start 233.318 78.344) (end 244.5285 67.1335) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 233.318 86.544) (end 233.318 78.344) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 232.5658 87.2962) (end 233.318 86.544) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 230.773 87.2962) (end 232.5658 87.2962) (width 0.25) (layer F.Cu) (net 3)) + (segment (start 214.725 67.837) (end 225.949 67.837) (width 0.4) (layer F.Cu) (net 4)) + (segment (start 211.568 70.994) (end 214.725 67.837) (width 0.4) (layer F.Cu) (net 4)) + (segment (start 211.568 74.394) (end 211.568 70.994) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.768 84.1868) (end 223.768 83.9036) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.768 83.9036) (end 223.7636 83.8992) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.7636 83.8992) (end 223.7636 83.1896) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 223.7636 83.1896) (end 222.942999 82.368999) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 222.942999 82.368999) (end 219.542999 82.368999) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 219.542999 82.368999) (end 211.568 74.394) (width 0.25) (layer F.Cu) (net 4)) + (segment (start 228.124 63.262) (end 228.107 60.54) (width 0.25) (layer F.Cu) (net 5) (tstamp 6011BC5D)) + (segment (start 228.107 60.54) (end 228.124 60.557) (width 0.25) (layer F.Cu) (net 5) (tstamp 6011BC57)) + (via (at 228.107 60.54) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 5) (tstamp 6011BC54)) + (segment (start 209.029 84.123) (end 210.347 84.123) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.123) (end 210.368 84.102) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.123) (end 210.347 84.115) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.347 84.115) (end 210.568 83.894) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 61.394) (end 211.422 60.54) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 83.894) (end 210.568 77.944) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 228.107 60.54) (end 211.422 60.54) (width 0.25) (layer B.Cu) (net 5)) + (segment (start 210.568 77.944) (end 210.568 61.394) (width 0.25) (layer B.Cu) (net 5) (tstamp 6011E7CA)) + (segment (start 208.55 72.262) (end 208.55 71.358) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD35)) + (segment (start 208.55 72.262) (end 208.55 70.701) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD32)) + (segment (start 208.55 70.701) (end 208.55 70.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011BD2F)) + (segment (start 235.5365 62.826) (end 235.4095 62.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011B5BE)) + (segment (start 235.4095 62.699) (end 235.4095 62.699) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011B507)) + (via (at 235.4095 62.699) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6) (tstamp 6011B501)) + (segment (start 235.358499 62.647999) (end 235.4095 62.699) (width 0.25) (layer B.Cu) (net 6) (tstamp 6011B462)) + (segment (start 234.299 64.637) (end 235.7575 64.637) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011BA3E)) + (segment (start 235.7575 64.637) (end 236.235 64.1595) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B92A)) + (segment (start 236.235 63.5245) (end 235.4095 62.699) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B825)) + (segment (start 236.235 64.1595) (end 236.235 63.5245) (width 0.4) (layer F.Cu) (net 6) (tstamp 6011B438)) + (segment (start 208.55 70.701) (end 208.561 70.701) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 208.561 70.701) (end 211.818 67.444) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 216.614001 62.647999) (end 217.014001 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 217.014001 62.647999) (end 235.358499 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 216.601001 62.647999) (end 217.014001 62.647999) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 211.818 67.444) (end 212.168 67.094) (width 0.25) (layer F.Cu) (net 6)) + (segment (start 212.168 67.094) (end 212.168 67.094) (width 0.25) (layer F.Cu) (net 6) (tstamp 6011D002)) + (via (at 212.168 67.094) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 6)) + (segment (start 216.601001 62.660999) (end 212.168 67.094) (width 0.25) (layer B.Cu) (net 6)) + (segment (start 216.601001 62.647999) (end 216.601001 62.660999) (width 0.25) (layer B.Cu) (net 6)) + (via (at 221.234 63.373) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 6011BC12)) + (segment (start 213.3 63.373) (end 221.234 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B74D)) + (segment (start 206.81 63.373) (end 213.3 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B4BC)) + (segment (start 206.55 63.113) (end 206.81 63.373) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B975)) + (segment (start 206.55 57.024) (end 206.55 63.113) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B4B9)) + (segment (start 225.949 69.437) (end 222.3355 69.437) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B504)) + (segment (start 222.3355 69.437) (end 221.4395 70.319) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B97B)) + (segment (start 221.4395 70.319) (end 221.4535 70.319) (width 0.25) (layer F.Cu) (net 7) (tstamp 6011B96F)) + (via (at 221.4395 70.319) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 7) (tstamp 6011B459)) + (segment (start 221.234 69.2545) (end 221.234 70.1135) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B75F)) + (segment (start 221.234 70.1135) (end 221.4395 70.319) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B47D)) + (segment (start 221.234 63.373) (end 221.234 69.2545) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011B915)) + (segment (start 221.234 69.2545) (end 221.234 69.405) (width 0.25) (layer B.Cu) (net 7) (tstamp 6011BA44)) + (segment (start 210.125 65.437) (end 225.949 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011BCBA)) + (segment (start 204.55 72.262) (end 204.55 70.762) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B91E)) + (segment (start 209.875 65.437) (end 210.125 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B924)) + (segment (start 204.55 70.762) (end 209.875 65.437) (width 0.25) (layer F.Cu) (net 8) (tstamp 6011B927)) + (segment (start 206.55 72.262) (end 206.55 70.606) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BCB7)) + (segment (start 210.919 66.237) (end 213.139 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA74)) + (segment (start 206.55 70.606) (end 210.919 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA71)) + (segment (start 213.139 66.237) (end 225.949 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA68)) + (segment (start 212.575 66.237) (end 213.139 66.237) (width 0.25) (layer F.Cu) (net 9) (tstamp 6011BA65)) + (segment (start 234.299 68.637) (end 234.885412 68.637) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011BCB4)) + (segment (start 232.631999 54.523999) (end 237.505 59.397) (width 0.45) (layer F.Cu) (net 10) (tstamp 6011B870)) + (segment (start 237.505 59.397) (end 237.505 66.636) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011BC6C)) + (segment (start 235.504 68.637) (end 235.377 68.637) (width 0.45) (layer F.Cu) (net 10) (tstamp 6011B822)) + (segment (start 234.299 68.637) (end 235.377 68.637) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B930)) + (segment (start 232.552 54.444) (end 232.631999 54.523999) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B43B)) + (segment (start 232.552 52.031) (end 232.552 54.444) (width 0.35) (layer F.Cu) (net 10) (tstamp 6011B8D3)) + (segment (start 231.805 51.284) (end 232.552 52.031) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B753)) + (segment (start 228.727 51.284) (end 231.805 51.284) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B435)) + (segment (start 228.727 52.578) (end 228.727 51.284) (width 0.25) (layer F.Cu) (net 10) (tstamp 6011B47A)) + (segment (start 235.504 68.637) (end 235.885 68.637) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B894)) + (segment (start 237.505 67.017) (end 237.505 66.636) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B4A7)) + (segment (start 235.885 68.637) (end 237.505 67.017) (width 0.4) (layer F.Cu) (net 10) (tstamp 6011B49E)) + (segment (start 234.299 67.037) (end 234.477 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011BAAA)) + (segment (start 235.049 67.037) (end 234.477 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011BAA7)) + (segment (start 235.961 67.037) (end 234.299 67.037) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BA56)) + (segment (start 236.088 67.037) (end 235.961 67.037) (width 0.25) (layer F.Cu) (net 11) (tstamp 6011B978)) + (segment (start 236.87 66.255) (end 236.088 67.037) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BBD6)) + (segment (start 236.87 59.651) (end 236.87 66.255) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BAB3)) + (segment (start 231.267 54.048) (end 236.87 59.651) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BCB1)) + (segment (start 231.267 52.578) (end 231.267 54.048) (width 0.4) (layer F.Cu) (net 11) (tstamp 6011BCAE)) + (segment (start 234.885412 69.437) (end 234.299 69.437) (width 0.25) (layer F.Cu) (net 12) (tstamp 6011BAB0)) + (segment (start 235.049 69.437) (end 234.299 69.437) (width 0.25) (layer F.Cu) (net 12) (tstamp 6011BAAD)) + (segment (start 234.299 69.437) (end 235.974 69.437) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAC5)) + (segment (start 233.807 52.578) (end 233.807 54.683) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAC2)) + (segment (start 233.807 54.683) (end 238.267 59.143) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BABF)) + (segment (start 238.267 67.144) (end 235.974 69.437) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BABC)) + (segment (start 238.267 59.143) (end 238.267 67.144) (width 0.4) (layer F.Cu) (net 12) (tstamp 6011BAB9)) + (segment (start 251.903 77.187) (end 251.903 81.559) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 251.332 82.13) (end 251.332 86.209) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 251.903 81.559) (end 251.332 82.13) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 231.324 71.612) (end 231.324 74.1) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 231.324 74.1) (end 236.268 79.044) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 236.268 79.044) (end 247.168 79.044) (width 0.25) (layer F.Cu) (net 13)) + (segment (start 247.168 79.044) (end 247.168 79.044) (width 0.25) (layer F.Cu) (net 13) (tstamp 6011DC97)) + (via (at 247.168 79.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) + (segment (start 247.168 79.044) (end 251.918 79.044) (width 0.25) (layer B.Cu) (net 13)) + (segment (start 251.918 79.044) (end 251.918 79.044) (width 0.25) (layer B.Cu) (net 13) (tstamp 6011DD25)) + (via (at 251.918 79.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 13)) + (segment (start 232.124 72.198412) (end 232.124 71.612) (width 0.25) (layer F.Cu) (net 14) (tstamp 6011BBD0)) + (segment (start 249.363 86.178) (end 249.332 86.209) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 249.363 77.187) (end 249.363 86.178) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 236.387998 77.187) (end 249.363 77.187) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 232.124 72.923002) (end 236.387998 77.187) (width 0.4) (layer F.Cu) (net 14)) + (segment (start 232.124 71.612) (end 232.124 72.923002) (width 0.25) (layer F.Cu) (net 14)) + (segment (start 206.489 86.663) (end 206.489 88.265) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 206.489 88.265) (end 206.818 88.594) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 206.818 88.594) (end 210.918 88.594) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 210.918 88.594) (end 219.568 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 232.924 71.612) (end 232.924 72.65) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 232.924 72.65) (end 232.924 72.7484) (width 0.25) (layer F.Cu) (net 15)) + (segment (start 232.924 72.7484) (end 234.6856 74.51) (width 0.35) (layer F.Cu) (net 15)) + (segment (start 234.6856 74.51) (end 235.5492 74.51) (width 0.35) (layer F.Cu) (net 15)) + (segment (start 235.5492 74.51) (end 235.5492 74.51) (width 0.25) (layer F.Cu) (net 15) (tstamp 60129C63)) + (via (at 235.5492 74.51) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 15)) + (segment (start 235.5492 74.51) (end 235.5492 74.5608) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 230.166 79.944) (end 228.8928 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 235.5492 74.5608) (end 230.166 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 228.8928 79.944) (end 229.268 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 219.568 79.944) (end 228.8928 79.944) (width 0.25) (layer B.Cu) (net 15)) + (segment (start 234.299 70.237) (end 234.309 70.237) (width 0.25) (layer F.Cu) (net 16) (tstamp 6011BA50)) + (segment (start 234.309 70.237) (end 234.303 70.231) (width 0.25) (layer F.Cu) (net 16) (tstamp 6011BA4D)) + (segment (start 209.029 86.663) (end 211.149 86.663) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 211.149 86.663) (end 219.118 78.694) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 234.299 70.237) (end 237.311 70.237) (width 0.35) (layer F.Cu) (net 16)) + (segment (start 219.118 78.694) (end 229.918 78.694) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 229.918 78.694) (end 237.868 70.794) (width 0.25) (layer B.Cu) (net 16)) + (segment (start 237.868 70.794) (end 237.818 70.794) (width 0.25) (layer B.Cu) (net 16) (tstamp 6011D701)) + (via (at 237.868 70.794) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 16)) + (segment (start 237.311 70.237) (end 237.868 70.794) (width 0.35) (layer F.Cu) (net 16)) + (segment (start 227.324 63.262) (end 227.324 62.424) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011BA7D)) + (segment (start 227.324 62.424) (end 226.837 61.937) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011BA7A)) + (segment (start 226.837 61.937) (end 209.275 61.937) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 209.275 61.937) (end 209.168 62.044) (width 0.25) (layer F.Cu) (net 17)) + (segment (start 209.168 62.044) (end 209.168 62.044) (width 0.25) (layer F.Cu) (net 17) (tstamp 6011CC20)) + (via (at 209.168 62.044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 17)) + (segment (start 209.029 62.183) (end 209.168 62.044) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 209.029 81.583) (end 209.029 62.183) (width 0.25) (layer B.Cu) (net 17)) + (segment (start 248.793 62.357) (end 251.895 62.357) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B474)) + (segment (start 252.285 62.747) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B43E)) + (segment (start 251.895 62.357) (end 252.285 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B828)) + (segment (start 253.9765 59.651) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B483)) + (segment (start 256.409 71.584) (end 254.401 71.584) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B4B6)) + (segment (start 254.401 71.584) (end 253.888 71.071) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B477)) + (segment (start 253.888 62.8355) (end 253.9765 62.747) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011B486)) + (segment (start 253.888 71.071) (end 253.888 62.8355) (width 0.25) (layer F.Cu) (net 23) (tstamp 6011BBD9)) + (segment (start 238.718 88.294) (end 238.718 87.294) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 240.268 89.844) (end 238.718 88.294) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.332 89.608) (end 247.096 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.332 86.209) (end 247.332 89.608) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 247.096 89.844) (end 246.868 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 246.868 89.844) (end 240.268 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 256.409 87.403) (end 256.409 71.584) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 253.968 89.844) (end 256.409 87.403) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 246.868 89.844) (end 253.968 89.844) (width 0.25) (layer F.Cu) (net 23)) + (segment (start 239.268 64.77) (end 239.268 64.77) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BAA4)) + (via (at 239.268 64.77) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 24) (tstamp 6011BAA1)) + (segment (start 239.268 53.294) (end 239.218 53.244) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA9B)) + (segment (start 239.268 64.77) (end 239.268 53.294) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA98)) + (segment (start 229.724 71.612) (end 229.758 73.621) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011BA95)) + (segment (start 229.758 73.621) (end 229.724 73.587) (width 0.25) (layer F.Cu) (net 24) (tstamp 6011B77A)) + (via (at 229.758 73.621) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 24) (tstamp 6011B777)) + (segment (start 229.758 73.621) (end 229.758 74.891) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B774)) + (segment (start 232.228002 74.891) (end 239.283 67.836002) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B771)) + (segment (start 229.758 74.891) (end 232.228002 74.891) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B76E)) + (segment (start 239.283 64.785) (end 239.268 64.77) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B89A)) + (segment (start 239.283 67.836002) (end 239.283 64.785) (width 0.25) (layer B.Cu) (net 24) (tstamp 6011B897)) + (segment (start 225.949 64.637) (end 224.461 64.637) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 224.461 64.637) (end 223.668 63.844) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 223.668 63.844) (end 223.668 63.844) (width 0.25) (layer F.Cu) (net 25) (tstamp 6011CAB8)) + (via (at 223.668 63.844) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 227.979 82.055) (end 223.662 77.812) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 230.773 84.1962) (end 227.979 84.1962) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 227.979 84.1962) (end 227.979 82.055) (width 0.25) (layer F.Cu) (net 25)) + (segment (start 223.662 77.812) (end 223.668 77.744) (width 0.25) (layer F.Cu) (net 25) (tstamp 6011BF68)) + (via (at 223.662 77.812) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 25)) + (segment (start 223.668 77.806) (end 223.662 77.812) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 223.668 63.844) (end 223.668 77.806) (width 0.25) (layer B.Cu) (net 25)) + (segment (start 235.902 84.194) (end 235.883 84.213) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 238.718 84.194) (end 235.902 84.194) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 225.949 72.625) (end 225.949 70.237) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 235.883 82.559) (end 225.949 72.625) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 235.883 84.213) (end 235.883 82.559) (width 0.25) (layer F.Cu) (net 26)) + (segment (start 214.525 67.037) (end 225.949 67.037) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B834)) + (segment (start 210.55 71.012) (end 214.525 67.037) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B831)) + (segment (start 210.55 72.262) (end 210.55 71.012) (width 0.4) (layer F.Cu) (net 27) (tstamp 6011B82E)) + (segment (start 214.925 68.637) (end 225.949 68.637) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B88B)) + (segment (start 212.55 71.012) (end 214.925 68.637) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B888)) + (segment (start 212.55 72.262) (end 212.55 71.012) (width 0.4) (layer F.Cu) (net 28) (tstamp 6011B885)) + (segment (start 216.535 56.247) (end 216.55 56.262) (width 0.25) (layer F.Cu) (net 40) (tstamp 6011B882)) + (segment (start 216.535 52.451) (end 216.535 56.247) (width 0.25) (layer F.Cu) (net 40) (tstamp 6011B87F)) + + (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 6011894F) (hatch edge 0.508) + (connect_pads (clearance 0.1)) + (min_thickness 0.1) + (fill yes (arc_segments 32) (thermal_gap 0.2) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 264.668 95.504) (xy 185.928 94.234) (xy 185.928 44.704) (xy 264.668 44.704) + ) + ) + (filled_polygon + (pts + (xy 256.211551 49.323626) (xy 256.739205 49.482934) (xy 257.225868 49.741697) (xy 257.653 50.090057) (xy 258.004335 50.514748) + (xy 258.266489 50.999594) (xy 258.429479 51.526127) (xy 258.487959 52.082527) (xy 258.488001 52.09461) (xy 258.488 87.585439) + (xy 258.433374 88.14255) (xy 258.274067 88.670202) (xy 258.015303 89.156868) (xy 257.666943 89.584) (xy 257.242252 89.935335) + (xy 256.757406 90.197489) (xy 256.230874 90.360479) (xy 255.674473 90.418959) (xy 255.66239 90.419001) (xy 255.662383 90.419002) + (xy 202.676401 90.518984) (xy 202.11945 90.464374) (xy 201.591798 90.305067) (xy 201.105132 90.046303) (xy 200.678 89.697943) + (xy 200.326665 89.273252) (xy 200.064511 88.788406) (xy 199.901521 88.261874) (xy 199.843041 87.705473) (xy 199.843 87.693677) + (xy 199.843 86.554659) (xy 205.389 86.554659) (xy 205.389 86.771341) (xy 205.431273 86.983858) (xy 205.514193 87.184045) + (xy 205.634575 87.364209) (xy 205.787791 87.517425) (xy 205.967955 87.637807) (xy 206.168142 87.720727) (xy 206.380659 87.763) + (xy 206.597341 87.763) (xy 206.809858 87.720727) (xy 207.010045 87.637807) (xy 207.190209 87.517425) (xy 207.343425 87.364209) + (xy 207.463807 87.184045) (xy 207.546727 86.983858) (xy 207.589 86.771341) (xy 207.589 86.554659) (xy 207.929 86.554659) + (xy 207.929 86.771341) (xy 207.971273 86.983858) (xy 208.054193 87.184045) (xy 208.174575 87.364209) (xy 208.327791 87.517425) + (xy 208.507955 87.637807) (xy 208.708142 87.720727) (xy 208.920659 87.763) (xy 209.137341 87.763) (xy 209.349858 87.720727) + (xy 209.550045 87.637807) (xy 209.730209 87.517425) (xy 209.883425 87.364209) (xy 210.003807 87.184045) (xy 210.082111 86.995) + (xy 216.92379 86.995) (xy 216.928617 87.044009) (xy 216.942912 87.091134) (xy 216.966127 87.134565) (xy 216.997368 87.172632) + (xy 217.035435 87.203873) (xy 217.078866 87.227088) (xy 217.125991 87.241383) (xy 217.175 87.24621) (xy 217.8085 87.245) + (xy 217.871 87.1825) (xy 217.871 86.299) (xy 218.279 86.299) (xy 218.279 87.1825) (xy 218.3415 87.245) + (xy 218.975 87.24621) (xy 219.024009 87.241383) (xy 219.071134 87.227088) (xy 219.114565 87.203873) (xy 219.152632 87.172632) + (xy 219.183873 87.134565) (xy 219.207088 87.091134) (xy 219.221383 87.044009) (xy 219.22621 86.995) (xy 219.225 86.3615) + (xy 219.1625 86.299) (xy 218.279 86.299) (xy 217.871 86.299) (xy 216.9875 86.299) (xy 216.925 86.3615) + (xy 216.92379 86.995) (xy 210.082111 86.995) (xy 210.086727 86.983858) (xy 210.129 86.771341) (xy 210.129 86.554659) + (xy 210.086727 86.342142) (xy 210.003807 86.141955) (xy 209.896752 85.981735) (xy 219.465 85.981735) (xy 219.465 86.208265) + (xy 219.509194 86.430443) (xy 219.595884 86.639729) (xy 219.721737 86.828082) (xy 219.881918 86.988263) (xy 220.070271 87.114116) + (xy 220.279557 87.200806) (xy 220.501735 87.245) (xy 220.728265 87.245) (xy 220.950443 87.200806) (xy 221.159729 87.114116) + (xy 221.348082 86.988263) (xy 221.508263 86.828082) (xy 221.634116 86.639729) (xy 221.704421 86.47) (xy 222.864655 86.47) + (xy 222.864543 86.47006) (xy 222.788591 86.532391) (xy 222.72626 86.608343) (xy 222.679943 86.694995) (xy 222.651422 86.789018) + (xy 222.641791 86.886799) (xy 222.641791 87.686801) (xy 222.651422 87.784582) (xy 222.679943 87.878605) (xy 222.72626 87.965257) + (xy 222.788591 88.041209) (xy 222.864543 88.10354) (xy 222.951195 88.149857) (xy 223.045218 88.178378) (xy 223.142999 88.188009) + (xy 224.393001 88.188009) (xy 224.490782 88.178378) (xy 224.584805 88.149857) (xy 224.671457 88.10354) (xy 224.747409 88.041209) + (xy 224.80974 87.965257) (xy 224.819926 87.9462) (xy 226.85279 87.9462) (xy 226.857617 87.995209) (xy 226.871912 88.042334) + (xy 226.895127 88.085765) (xy 226.926368 88.123832) (xy 226.964435 88.155073) (xy 227.007866 88.178288) (xy 227.054991 88.192583) + (xy 227.104 88.19741) (xy 227.7125 88.1962) (xy 227.775 88.1337) (xy 227.775 87.5002) (xy 228.183 87.5002) + (xy 228.183 88.1337) (xy 228.2455 88.1962) (xy 228.854 88.19741) (xy 228.903009 88.192583) (xy 228.950134 88.178288) + (xy 228.993565 88.155073) (xy 229.031632 88.123832) (xy 229.062873 88.085765) (xy 229.086088 88.042334) (xy 229.100383 87.995209) + (xy 229.10521 87.9462) (xy 229.104 87.5627) (xy 229.0415 87.5002) (xy 228.183 87.5002) (xy 227.775 87.5002) + (xy 226.9165 87.5002) (xy 226.854 87.5627) (xy 226.85279 87.9462) (xy 224.819926 87.9462) (xy 224.856057 87.878605) + (xy 224.884578 87.784582) (xy 224.894209 87.686801) (xy 224.894209 86.886799) (xy 224.884578 86.789018) (xy 224.856057 86.694995) + (xy 224.829976 86.6462) (xy 226.85279 86.6462) (xy 226.854 87.0297) (xy 226.9165 87.0922) (xy 227.775 87.0922) + (xy 227.775 86.4587) (xy 228.183 86.4587) (xy 228.183 87.0922) (xy 229.0415 87.0922) (xy 229.104 87.0297) + (xy 229.104421 86.896199) (xy 229.646791 86.896199) (xy 229.646791 87.696201) (xy 229.656422 87.793982) (xy 229.684943 87.888005) + (xy 229.73126 87.974657) (xy 229.793591 88.050609) (xy 229.869543 88.11294) (xy 229.956195 88.159257) (xy 230.050218 88.187778) + (xy 230.147999 88.197409) (xy 231.398001 88.197409) (xy 231.495782 88.187778) (xy 231.589805 88.159257) (xy 231.676457 88.11294) + (xy 231.752409 88.050609) (xy 231.81474 87.974657) (xy 231.82097 87.963) (xy 234.75679 87.963) (xy 234.761617 88.012009) + (xy 234.775912 88.059134) (xy 234.799127 88.102565) (xy 234.830368 88.140632) (xy 234.868435 88.171873) (xy 234.911866 88.195088) + (xy 234.958991 88.209383) (xy 235.008 88.21421) (xy 235.6165 88.213) (xy 235.679 88.1505) (xy 235.679 87.517) + (xy 236.087 87.517) (xy 236.087 88.1505) (xy 236.1495 88.213) (xy 236.758 88.21421) (xy 236.807009 88.209383) + (xy 236.854134 88.195088) (xy 236.897565 88.171873) (xy 236.935632 88.140632) (xy 236.966873 88.102565) (xy 236.990088 88.059134) + (xy 237.004383 88.012009) (xy 237.00921 87.963) (xy 237.008 87.5795) (xy 236.9455 87.517) (xy 236.087 87.517) + (xy 235.679 87.517) (xy 234.8205 87.517) (xy 234.758 87.5795) (xy 234.75679 87.963) (xy 231.82097 87.963) + (xy 231.861057 87.888005) (xy 231.889578 87.793982) (xy 231.899209 87.696201) (xy 231.899209 87.6712) (xy 232.547384 87.6712) + (xy 232.5658 87.673014) (xy 232.584216 87.6712) (xy 232.584219 87.6712) (xy 232.639313 87.665774) (xy 232.71 87.644331) + (xy 232.775147 87.609509) (xy 232.832248 87.562648) (xy 232.843995 87.548334) (xy 233.207563 87.184767) (xy 233.253981 87.194) + (xy 233.382019 87.194) (xy 233.507598 87.169021) (xy 233.62589 87.120022) (xy 233.732351 87.048888) (xy 233.822888 86.958351) + (xy 233.894022 86.85189) (xy 233.943021 86.733598) (xy 233.957063 86.663) (xy 234.75679 86.663) (xy 234.758 87.0465) + (xy 234.8205 87.109) (xy 235.679 87.109) (xy 235.679 86.4755) (xy 236.087 86.4755) (xy 236.087 87.109) + (xy 236.9455 87.109) (xy 237.008 87.0465) (xy 237.008481 86.893999) (xy 237.591791 86.893999) (xy 237.591791 87.694001) + (xy 237.601422 87.791782) (xy 237.629943 87.885805) (xy 237.67626 87.972457) (xy 237.738591 88.048409) (xy 237.814543 88.11074) + (xy 237.901195 88.157057) (xy 237.995218 88.185578) (xy 238.092999 88.195209) (xy 238.343 88.195209) (xy 238.343 88.275584) + (xy 238.341186 88.294) (xy 238.343 88.312416) (xy 238.343 88.312418) (xy 238.348426 88.367512) (xy 238.369869 88.438199) + (xy 238.404691 88.503346) (xy 238.451552 88.560448) (xy 238.465866 88.572195) (xy 239.989809 90.096139) (xy 240.001552 90.110448) + (xy 240.015859 90.122189) (xy 240.058653 90.157309) (xy 240.090763 90.174472) (xy 240.1238 90.192131) (xy 240.194487 90.213574) + (xy 240.249581 90.219) (xy 240.249583 90.219) (xy 240.267999 90.220814) (xy 240.286415 90.219) (xy 247.077584 90.219) + (xy 247.096 90.220814) (xy 247.114416 90.219) (xy 253.949584 90.219) (xy 253.968 90.220814) (xy 253.986416 90.219) + (xy 253.986419 90.219) (xy 254.041513 90.213574) (xy 254.1122 90.192131) (xy 254.177347 90.157309) (xy 254.234448 90.110448) + (xy 254.246195 90.096134) (xy 256.661146 87.681185) (xy 256.675448 87.669448) (xy 256.687186 87.655145) (xy 256.687189 87.655142) + (xy 256.722309 87.612347) (xy 256.75713 87.547202) (xy 256.757131 87.547199) (xy 256.778574 87.476513) (xy 256.784 87.421419) + (xy 256.784 87.421417) (xy 256.785814 87.403001) (xy 256.784 87.384585) (xy 256.784 72.335209) (xy 257.159 72.335209) + (xy 257.256781 72.325578) (xy 257.350804 72.297057) (xy 257.437457 72.25074) (xy 257.513408 72.188408) (xy 257.57574 72.112457) + (xy 257.622057 72.025804) (xy 257.650578 71.931781) (xy 257.660209 71.834) (xy 257.660209 71.334) (xy 257.650578 71.236219) + (xy 257.622057 71.142196) (xy 257.57574 71.055543) (xy 257.513408 70.979592) (xy 257.437457 70.91726) (xy 257.350804 70.870943) + (xy 257.256781 70.842422) (xy 257.159 70.832791) (xy 255.659 70.832791) (xy 255.561219 70.842422) (xy 255.467196 70.870943) + (xy 255.380543 70.91726) (xy 255.304592 70.979592) (xy 255.24226 71.055543) (xy 255.195943 71.142196) (xy 255.175679 71.209) + (xy 254.55633 71.209) (xy 254.263 70.915671) (xy 254.263 69.971) (xy 255.15779 69.971) (xy 255.162617 70.020009) + (xy 255.176912 70.067134) (xy 255.200127 70.110565) (xy 255.231368 70.148632) (xy 255.269435 70.179873) (xy 255.312866 70.203088) + (xy 255.359991 70.217383) (xy 255.409 70.22221) (xy 256.1425 70.221) (xy 256.205 70.1585) (xy 256.205 69.675) + (xy 256.613 69.675) (xy 256.613 70.1585) (xy 256.6755 70.221) (xy 257.409 70.22221) (xy 257.458009 70.217383) + (xy 257.505134 70.203088) (xy 257.548565 70.179873) (xy 257.586632 70.148632) (xy 257.617873 70.110565) (xy 257.641088 70.067134) + (xy 257.655383 70.020009) (xy 257.66021 69.971) (xy 257.659 69.7375) (xy 257.5965 69.675) (xy 256.613 69.675) + (xy 256.205 69.675) (xy 255.2215 69.675) (xy 255.159 69.7375) (xy 255.15779 69.971) (xy 254.263 69.971) + (xy 254.263 68.971) (xy 255.15779 68.971) (xy 255.159 69.2045) (xy 255.2215 69.267) (xy 256.205 69.267) + (xy 256.205 68.7835) (xy 256.613 68.7835) (xy 256.613 69.267) (xy 257.5965 69.267) (xy 257.659 69.2045) + (xy 257.66021 68.971) (xy 257.655383 68.921991) (xy 257.641088 68.874866) (xy 257.617873 68.831435) (xy 257.586632 68.793368) + (xy 257.548565 68.762127) (xy 257.505134 68.738912) (xy 257.458009 68.724617) (xy 257.409 68.71979) (xy 256.6755 68.721) + (xy 256.613 68.7835) (xy 256.205 68.7835) (xy 256.1425 68.721) (xy 255.409 68.71979) (xy 255.359991 68.724617) + (xy 255.312866 68.738912) (xy 255.269435 68.762127) (xy 255.231368 68.793368) (xy 255.200127 68.831435) (xy 255.176912 68.874866) + (xy 255.162617 68.921991) (xy 255.15779 68.971) (xy 254.263 68.971) (xy 254.263 63.898209) (xy 254.389003 63.898209) + (xy 254.486783 63.888578) (xy 254.580806 63.860057) (xy 254.667458 63.813741) (xy 254.743409 63.751409) (xy 254.805741 63.675458) + (xy 254.820951 63.647) (xy 256.18779 63.647) (xy 256.192617 63.696009) (xy 256.206912 63.743134) (xy 256.230127 63.786565) + (xy 256.261368 63.824632) (xy 256.299435 63.855873) (xy 256.342866 63.879088) (xy 256.389991 63.893383) (xy 256.439 63.89821) + (xy 256.835 63.897) (xy 256.8975 63.8345) (xy 256.8975 62.951) (xy 257.3055 62.951) (xy 257.3055 63.8345) + (xy 257.368 63.897) (xy 257.764 63.89821) (xy 257.813009 63.893383) (xy 257.860134 63.879088) (xy 257.903565 63.855873) + (xy 257.941632 63.824632) (xy 257.972873 63.786565) (xy 257.996088 63.743134) (xy 258.010383 63.696009) (xy 258.01521 63.647) + (xy 258.014 63.0135) (xy 257.9515 62.951) (xy 257.3055 62.951) (xy 256.8975 62.951) (xy 256.2515 62.951) + (xy 256.189 63.0135) (xy 256.18779 63.647) (xy 254.820951 63.647) (xy 254.852057 63.588806) (xy 254.880578 63.494783) + (xy 254.890209 63.397003) (xy 254.890209 62.096997) (xy 254.880578 61.999217) (xy 254.852057 61.905194) (xy 254.820952 61.847) + (xy 256.18779 61.847) (xy 256.189 62.4805) (xy 256.2515 62.543) (xy 256.8975 62.543) (xy 256.8975 61.6595) + (xy 257.3055 61.6595) (xy 257.3055 62.543) (xy 257.9515 62.543) (xy 258.014 62.4805) (xy 258.01521 61.847) + (xy 258.010383 61.797991) (xy 257.996088 61.750866) (xy 257.972873 61.707435) (xy 257.941632 61.669368) (xy 257.903565 61.638127) + (xy 257.860134 61.614912) (xy 257.813009 61.600617) (xy 257.764 61.59579) (xy 257.368 61.597) (xy 257.3055 61.6595) + (xy 256.8975 61.6595) (xy 256.835 61.597) (xy 256.439 61.59579) (xy 256.389991 61.600617) (xy 256.342866 61.614912) + (xy 256.299435 61.638127) (xy 256.261368 61.669368) (xy 256.230127 61.707435) (xy 256.206912 61.750866) (xy 256.192617 61.797991) + (xy 256.18779 61.847) (xy 254.820952 61.847) (xy 254.805741 61.818542) (xy 254.743409 61.742591) (xy 254.667458 61.680259) + (xy 254.580806 61.633943) (xy 254.486783 61.605422) (xy 254.389003 61.595791) (xy 254.3515 61.595791) (xy 254.3515 60.802209) + (xy 254.389003 60.802209) (xy 254.486783 60.792578) (xy 254.580806 60.764057) (xy 254.667458 60.717741) (xy 254.743409 60.655409) + (xy 254.805741 60.579458) (xy 254.820951 60.551) (xy 256.18779 60.551) (xy 256.192617 60.600009) (xy 256.206912 60.647134) + (xy 256.230127 60.690565) (xy 256.261368 60.728632) (xy 256.299435 60.759873) (xy 256.342866 60.783088) (xy 256.389991 60.797383) + (xy 256.439 60.80221) (xy 256.835 60.801) (xy 256.8975 60.7385) (xy 256.8975 59.855) (xy 257.3055 59.855) + (xy 257.3055 60.7385) (xy 257.368 60.801) (xy 257.764 60.80221) (xy 257.813009 60.797383) (xy 257.860134 60.783088) + (xy 257.903565 60.759873) (xy 257.941632 60.728632) (xy 257.972873 60.690565) (xy 257.996088 60.647134) (xy 258.010383 60.600009) + (xy 258.01521 60.551) (xy 258.014 59.9175) (xy 257.9515 59.855) (xy 257.3055 59.855) (xy 256.8975 59.855) + (xy 256.2515 59.855) (xy 256.189 59.9175) (xy 256.18779 60.551) (xy 254.820951 60.551) (xy 254.852057 60.492806) + (xy 254.880578 60.398783) (xy 254.890209 60.301003) (xy 254.890209 59.000997) (xy 254.880578 58.903217) (xy 254.852057 58.809194) + (xy 254.820952 58.751) (xy 256.18779 58.751) (xy 256.189 59.3845) (xy 256.2515 59.447) (xy 256.8975 59.447) + (xy 256.8975 58.5635) (xy 257.3055 58.5635) (xy 257.3055 59.447) (xy 257.9515 59.447) (xy 258.014 59.3845) + (xy 258.01521 58.751) (xy 258.010383 58.701991) (xy 257.996088 58.654866) (xy 257.972873 58.611435) (xy 257.941632 58.573368) + (xy 257.903565 58.542127) (xy 257.860134 58.518912) (xy 257.813009 58.504617) (xy 257.764 58.49979) (xy 257.368 58.501) + (xy 257.3055 58.5635) (xy 256.8975 58.5635) (xy 256.835 58.501) (xy 256.439 58.49979) (xy 256.389991 58.504617) + (xy 256.342866 58.518912) (xy 256.299435 58.542127) (xy 256.261368 58.573368) (xy 256.230127 58.611435) (xy 256.206912 58.654866) + (xy 256.192617 58.701991) (xy 256.18779 58.751) (xy 254.820952 58.751) (xy 254.805741 58.722542) (xy 254.743409 58.646591) + (xy 254.667458 58.584259) (xy 254.580806 58.537943) (xy 254.486783 58.509422) (xy 254.389003 58.499791) (xy 253.563997 58.499791) + (xy 253.466217 58.509422) (xy 253.372194 58.537943) (xy 253.285542 58.584259) (xy 253.209591 58.646591) (xy 253.147259 58.722542) + (xy 253.100943 58.809194) (xy 253.072422 58.903217) (xy 253.062791 59.000997) (xy 253.062791 60.301003) (xy 253.072422 60.398783) + (xy 253.100943 60.492806) (xy 253.147259 60.579458) (xy 253.209591 60.655409) (xy 253.285542 60.717741) (xy 253.372194 60.764057) + (xy 253.466217 60.792578) (xy 253.563997 60.802209) (xy 253.6015 60.802209) (xy 253.601501 61.595791) (xy 253.563997 61.595791) + (xy 253.466217 61.605422) (xy 253.372194 61.633943) (xy 253.285542 61.680259) (xy 253.209591 61.742591) (xy 253.147259 61.818542) + (xy 253.100943 61.905194) (xy 253.072422 61.999217) (xy 253.062791 62.096997) (xy 253.062791 62.372) (xy 252.44033 62.372) + (xy 252.173195 62.104866) (xy 252.161448 62.090552) (xy 252.104347 62.043691) (xy 252.0392 62.008869) (xy 251.968513 61.987426) + (xy 251.913419 61.982) (xy 251.913416 61.982) (xy 251.895 61.980186) (xy 251.876584 61.982) (xy 249.69632 61.982) + (xy 249.665506 61.92435) (xy 249.568659 61.806341) (xy 249.463686 61.720192) (xy 249.530522 61.67238) (xy 249.634876 61.561144) + (xy 249.715524 61.431687) (xy 249.724551 61.40545) (xy 249.700671 61.291) (xy 248.997 61.291) (xy 248.997 61.311) + (xy 248.589 61.311) (xy 248.589 61.291) (xy 247.885329 61.291) (xy 247.861449 61.40545) (xy 247.870476 61.431687) + (xy 247.951124 61.561144) (xy 248.055478 61.67238) (xy 248.122314 61.720192) (xy 248.017341 61.806341) (xy 247.920494 61.92435) + (xy 247.84853 62.058986) (xy 247.804214 62.205074) (xy 247.789251 62.357) (xy 247.804214 62.508926) (xy 247.84853 62.655014) + (xy 247.920494 62.78965) (xy 248.017341 62.907659) (xy 248.13535 63.004506) (xy 248.269986 63.07647) (xy 248.416074 63.120786) + (xy 248.529935 63.132) (xy 249.056065 63.132) (xy 249.169926 63.120786) (xy 249.316014 63.07647) (xy 249.45065 63.004506) + (xy 249.568659 62.907659) (xy 249.665506 62.78965) (xy 249.69632 62.732) (xy 251.73967 62.732) (xy 252.006813 62.999144) + (xy 252.018552 63.013448) (xy 252.032855 63.025186) (xy 252.032858 63.025189) (xy 252.075653 63.060309) (xy 252.135779 63.092447) + (xy 252.1408 63.095131) (xy 252.211487 63.116574) (xy 252.266581 63.122) (xy 252.266583 63.122) (xy 252.284999 63.123814) + (xy 252.303415 63.122) (xy 253.062791 63.122) (xy 253.062791 63.397003) (xy 253.072422 63.494783) (xy 253.100943 63.588806) + (xy 253.147259 63.675458) (xy 253.209591 63.751409) (xy 253.285542 63.813741) (xy 253.372194 63.860057) (xy 253.466217 63.888578) + (xy 253.513001 63.893186) (xy 253.513 71.052584) (xy 253.511186 71.071) (xy 253.513 71.089416) (xy 253.513 71.089418) + (xy 253.518426 71.144512) (xy 253.539869 71.215199) (xy 253.574691 71.280346) (xy 253.621552 71.337448) (xy 253.635866 71.349195) + (xy 254.122809 71.836139) (xy 254.134552 71.850448) (xy 254.148859 71.862189) (xy 254.191653 71.89731) (xy 254.225661 71.915487) + (xy 254.2568 71.932131) (xy 254.327487 71.953574) (xy 254.382581 71.959) (xy 254.382584 71.959) (xy 254.401 71.960814) + (xy 254.419416 71.959) (xy 255.175679 71.959) (xy 255.195943 72.025804) (xy 255.24226 72.112457) (xy 255.304592 72.188408) + (xy 255.380543 72.25074) (xy 255.467196 72.297057) (xy 255.561219 72.325578) (xy 255.659 72.335209) (xy 256.034001 72.335209) + (xy 256.034 87.247669) (xy 253.812671 89.469) (xy 247.707 89.469) (xy 247.707 89.192321) (xy 247.773804 89.172057) + (xy 247.860457 89.12574) (xy 247.936408 89.063408) (xy 247.99874 88.987457) (xy 248.045057 88.900804) (xy 248.073578 88.806781) + (xy 248.083209 88.709) (xy 248.083209 83.709) (xy 248.073578 83.611219) (xy 248.045057 83.517196) (xy 247.99874 83.430543) + (xy 247.936408 83.354592) (xy 247.860457 83.29226) (xy 247.773804 83.245943) (xy 247.679781 83.217422) (xy 247.582 83.207791) + (xy 247.082 83.207791) (xy 246.984219 83.217422) (xy 246.890196 83.245943) (xy 246.803543 83.29226) (xy 246.727592 83.354592) + (xy 246.66526 83.430543) (xy 246.618943 83.517196) (xy 246.590422 83.611219) (xy 246.580791 83.709) (xy 246.580791 88.709) + (xy 246.590422 88.806781) (xy 246.618943 88.900804) (xy 246.66526 88.987457) (xy 246.727592 89.063408) (xy 246.803543 89.12574) + (xy 246.890196 89.172057) (xy 246.957001 89.192322) (xy 246.957001 89.45267) (xy 246.940671 89.469) (xy 240.42333 89.469) + (xy 239.91333 88.959) (xy 244.58079 88.959) (xy 244.585617 89.008009) (xy 244.599912 89.055134) (xy 244.623127 89.098565) + (xy 244.654368 89.136632) (xy 244.692435 89.167873) (xy 244.735866 89.191088) (xy 244.782991 89.205383) (xy 244.832 89.21021) + (xy 245.0655 89.209) (xy 245.128 89.1465) (xy 245.128 86.413) (xy 245.536 86.413) (xy 245.536 89.1465) + (xy 245.5985 89.209) (xy 245.832 89.21021) (xy 245.881009 89.205383) (xy 245.928134 89.191088) (xy 245.971565 89.167873) + (xy 246.009632 89.136632) (xy 246.040873 89.098565) (xy 246.064088 89.055134) (xy 246.078383 89.008009) (xy 246.08321 88.959) + (xy 246.082 86.4755) (xy 246.0195 86.413) (xy 245.536 86.413) (xy 245.128 86.413) (xy 244.6445 86.413) + (xy 244.582 86.4755) (xy 244.58079 88.959) (xy 239.91333 88.959) (xy 239.149538 88.195209) (xy 239.343001 88.195209) + (xy 239.440782 88.185578) (xy 239.534805 88.157057) (xy 239.621457 88.11074) (xy 239.697409 88.048409) (xy 239.75974 87.972457) + (xy 239.806057 87.885805) (xy 239.834578 87.791782) (xy 239.844209 87.694001) (xy 239.844209 86.893999) (xy 239.834578 86.796218) + (xy 239.806057 86.702195) (xy 239.75974 86.615543) (xy 239.697409 86.539591) (xy 239.621457 86.47726) (xy 239.534805 86.430943) + (xy 239.440782 86.402422) (xy 239.343001 86.392791) (xy 238.092999 86.392791) (xy 237.995218 86.402422) (xy 237.901195 86.430943) + (xy 237.814543 86.47726) (xy 237.738591 86.539591) (xy 237.67626 86.615543) (xy 237.629943 86.702195) (xy 237.601422 86.796218) + (xy 237.591791 86.893999) (xy 237.008481 86.893999) (xy 237.00921 86.663) (xy 237.004383 86.613991) (xy 236.990088 86.566866) + (xy 236.966873 86.523435) (xy 236.935632 86.485368) (xy 236.897565 86.454127) (xy 236.854134 86.430912) (xy 236.807009 86.416617) + (xy 236.758 86.41179) (xy 236.1495 86.413) (xy 236.087 86.4755) (xy 235.679 86.4755) (xy 235.6165 86.413) + (xy 235.008 86.41179) (xy 234.958991 86.416617) (xy 234.911866 86.430912) (xy 234.868435 86.454127) (xy 234.830368 86.485368) + (xy 234.799127 86.523435) (xy 234.775912 86.566866) (xy 234.761617 86.613991) (xy 234.75679 86.663) (xy 233.957063 86.663) + (xy 233.968 86.608019) (xy 233.968 86.479981) (xy 233.943021 86.354402) (xy 233.894022 86.23611) (xy 233.822888 86.129649) + (xy 233.732351 86.039112) (xy 233.62589 85.967978) (xy 233.507598 85.918979) (xy 233.382019 85.894) (xy 233.253981 85.894) + (xy 233.128402 85.918979) (xy 233.01011 85.967978) (xy 232.903649 86.039112) (xy 232.813112 86.129649) (xy 232.741978 86.23611) + (xy 232.692979 86.354402) (xy 232.668 86.479981) (xy 232.668 86.608019) (xy 232.677233 86.654437) (xy 232.410471 86.9212) + (xy 231.899209 86.9212) (xy 231.899209 86.896199) (xy 231.889578 86.798418) (xy 231.861057 86.704395) (xy 231.81474 86.617743) + (xy 231.752409 86.541791) (xy 231.676457 86.47946) (xy 231.589805 86.433143) (xy 231.495782 86.404622) (xy 231.398001 86.394991) + (xy 230.147999 86.394991) (xy 230.050218 86.404622) (xy 229.956195 86.433143) (xy 229.869543 86.47946) (xy 229.793591 86.541791) + (xy 229.73126 86.617743) (xy 229.684943 86.704395) (xy 229.656422 86.798418) (xy 229.646791 86.896199) (xy 229.104421 86.896199) + (xy 229.10521 86.6462) (xy 229.100383 86.597191) (xy 229.086088 86.550066) (xy 229.062873 86.506635) (xy 229.031632 86.468568) + (xy 228.993565 86.437327) (xy 228.950134 86.414112) (xy 228.903009 86.399817) (xy 228.854 86.39499) (xy 228.2455 86.3962) + (xy 228.183 86.4587) (xy 227.775 86.4587) (xy 227.7125 86.3962) (xy 227.104 86.39499) (xy 227.054991 86.399817) + (xy 227.007866 86.414112) (xy 226.964435 86.437327) (xy 226.926368 86.468568) (xy 226.895127 86.506635) (xy 226.871912 86.550066) + (xy 226.857617 86.597191) (xy 226.85279 86.6462) (xy 224.829976 86.6462) (xy 224.80974 86.608343) (xy 224.747409 86.532391) + (xy 224.671457 86.47006) (xy 224.584805 86.423743) (xy 224.490782 86.395222) (xy 224.393001 86.385591) (xy 224.143237 86.385591) + (xy 224.143 86.383181) (xy 224.137574 86.328087) (xy 224.116131 86.2574) (xy 224.081309 86.192253) (xy 224.034448 86.135152) + (xy 224.020139 86.123409) (xy 223.739595 85.842866) (xy 223.727848 85.828552) (xy 223.670747 85.781691) (xy 223.6056 85.746869) + (xy 223.534913 85.725426) (xy 223.479819 85.72) (xy 223.479816 85.72) (xy 223.4614 85.718186) (xy 223.442984 85.72) + (xy 221.704421 85.72) (xy 221.634116 85.550271) (xy 221.508263 85.361918) (xy 221.348082 85.201737) (xy 221.159729 85.075884) + (xy 220.950443 84.989194) (xy 220.728265 84.945) (xy 220.501735 84.945) (xy 220.279557 84.989194) (xy 220.070271 85.075884) + (xy 219.881918 85.201737) (xy 219.721737 85.361918) (xy 219.595884 85.550271) (xy 219.509194 85.759557) (xy 219.465 85.981735) + (xy 209.896752 85.981735) (xy 209.883425 85.961791) (xy 209.730209 85.808575) (xy 209.550045 85.688193) (xy 209.349858 85.605273) + (xy 209.137341 85.563) (xy 208.920659 85.563) (xy 208.708142 85.605273) (xy 208.507955 85.688193) (xy 208.327791 85.808575) + (xy 208.174575 85.961791) (xy 208.054193 86.141955) (xy 207.971273 86.342142) (xy 207.929 86.554659) (xy 207.589 86.554659) + (xy 207.546727 86.342142) (xy 207.463807 86.141955) (xy 207.343425 85.961791) (xy 207.190209 85.808575) (xy 207.010045 85.688193) + (xy 206.809858 85.605273) (xy 206.597341 85.563) (xy 206.380659 85.563) (xy 206.168142 85.605273) (xy 205.967955 85.688193) + (xy 205.787791 85.808575) (xy 205.634575 85.961791) (xy 205.514193 86.141955) (xy 205.431273 86.342142) (xy 205.389 86.554659) + (xy 199.843 86.554659) (xy 199.843 84.493581) (xy 205.453303 84.493581) (xy 205.494602 84.593314) (xy 205.605463 84.778274) + (xy 205.750278 84.938053) (xy 205.923481 85.06651) (xy 206.118417 85.158708) (xy 206.285 85.141429) (xy 206.285 84.327) + (xy 206.693 84.327) (xy 206.693 85.141429) (xy 206.859583 85.158708) (xy 207.054519 85.06651) (xy 207.227722 84.938053) + (xy 207.372537 84.778274) (xy 207.483398 84.593314) (xy 207.524697 84.493581) (xy 207.506246 84.327) (xy 206.693 84.327) + (xy 206.285 84.327) (xy 205.471754 84.327) (xy 205.453303 84.493581) (xy 199.843 84.493581) (xy 199.843 84.014659) + (xy 207.929 84.014659) (xy 207.929 84.231341) (xy 207.971273 84.443858) (xy 208.054193 84.644045) (xy 208.174575 84.824209) + (xy 208.327791 84.977425) (xy 208.507955 85.097807) (xy 208.708142 85.180727) (xy 208.920659 85.223) (xy 209.137341 85.223) + (xy 209.278104 85.195) (xy 216.92379 85.195) (xy 216.925 85.8285) (xy 216.9875 85.891) (xy 217.871 85.891) + (xy 217.871 85.0075) (xy 218.279 85.0075) (xy 218.279 85.891) (xy 219.1625 85.891) (xy 219.225 85.8285) + (xy 219.22621 85.195) (xy 219.221383 85.145991) (xy 219.207088 85.098866) (xy 219.183873 85.055435) (xy 219.152632 85.017368) + (xy 219.114565 84.986127) (xy 219.071134 84.962912) (xy 219.024009 84.948617) (xy 218.975 84.94379) (xy 218.3415 84.945) + (xy 218.279 85.0075) (xy 217.871 85.0075) (xy 217.8085 84.945) (xy 217.175 84.94379) (xy 217.125991 84.948617) + (xy 217.078866 84.962912) (xy 217.035435 84.986127) (xy 216.997368 85.017368) (xy 216.966127 85.055435) (xy 216.942912 85.098866) + (xy 216.928617 85.145991) (xy 216.92379 85.195) (xy 209.278104 85.195) (xy 209.349858 85.180727) (xy 209.550045 85.097807) + (xy 209.730209 84.977425) (xy 209.883425 84.824209) (xy 210.003807 84.644045) (xy 210.086727 84.443858) (xy 210.129 84.231341) + (xy 210.129 84.014659) (xy 210.086727 83.802142) (xy 210.003807 83.601955) (xy 209.883425 83.421791) (xy 209.730209 83.268575) + (xy 209.550045 83.148193) (xy 209.349858 83.065273) (xy 209.137341 83.023) (xy 208.920659 83.023) (xy 208.708142 83.065273) + (xy 208.507955 83.148193) (xy 208.327791 83.268575) (xy 208.174575 83.421791) (xy 208.054193 83.601955) (xy 207.971273 83.802142) + (xy 207.929 84.014659) (xy 199.843 84.014659) (xy 199.843 83.752419) (xy 205.453303 83.752419) (xy 205.471754 83.919) + (xy 206.285 83.919) (xy 206.285 83.104571) (xy 206.693 83.104571) (xy 206.693 83.919) (xy 207.506246 83.919) + (xy 207.524697 83.752419) (xy 207.483398 83.652686) (xy 207.372537 83.467726) (xy 207.227722 83.307947) (xy 207.054519 83.17949) + (xy 206.859583 83.087292) (xy 206.693 83.104571) (xy 206.285 83.104571) (xy 206.118417 83.087292) (xy 205.923481 83.17949) + (xy 205.750278 83.307947) (xy 205.605463 83.467726) (xy 205.494602 83.652686) (xy 205.453303 83.752419) (xy 199.843 83.752419) + (xy 199.843 80.733) (xy 205.387791 80.733) (xy 205.387791 82.433) (xy 205.392618 82.482008) (xy 205.406913 82.529134) + (xy 205.430127 82.572564) (xy 205.461368 82.610632) (xy 205.499436 82.641873) (xy 205.542866 82.665087) (xy 205.589992 82.679382) + (xy 205.639 82.684209) (xy 207.339 82.684209) (xy 207.388008 82.679382) (xy 207.435134 82.665087) (xy 207.478564 82.641873) + (xy 207.516632 82.610632) (xy 207.547873 82.572564) (xy 207.571087 82.529134) (xy 207.585382 82.482008) (xy 207.590209 82.433) + (xy 207.590209 81.474659) (xy 207.929 81.474659) (xy 207.929 81.691341) (xy 207.971273 81.903858) (xy 208.054193 82.104045) + (xy 208.174575 82.284209) (xy 208.327791 82.437425) (xy 208.507955 82.557807) (xy 208.708142 82.640727) (xy 208.920659 82.683) + (xy 209.137341 82.683) (xy 209.349858 82.640727) (xy 209.550045 82.557807) (xy 209.730209 82.437425) (xy 209.883425 82.284209) + (xy 210.003807 82.104045) (xy 210.086727 81.903858) (xy 210.129 81.691341) (xy 210.129 81.474659) (xy 210.086727 81.262142) + (xy 210.003807 81.061955) (xy 209.883425 80.881791) (xy 209.730209 80.728575) (xy 209.550045 80.608193) (xy 209.349858 80.525273) + (xy 209.137341 80.483) (xy 208.920659 80.483) (xy 208.708142 80.525273) (xy 208.507955 80.608193) (xy 208.327791 80.728575) + (xy 208.174575 80.881791) (xy 208.054193 81.061955) (xy 207.971273 81.262142) (xy 207.929 81.474659) (xy 207.590209 81.474659) + (xy 207.590209 80.733) (xy 207.585382 80.683992) (xy 207.571087 80.636866) (xy 207.547873 80.593436) (xy 207.516632 80.555368) + (xy 207.478564 80.524127) (xy 207.435134 80.500913) (xy 207.388008 80.486618) (xy 207.339 80.481791) (xy 205.639 80.481791) + (xy 205.589992 80.486618) (xy 205.542866 80.500913) (xy 205.499436 80.524127) (xy 205.461368 80.555368) (xy 205.430127 80.593436) + (xy 205.406913 80.636866) (xy 205.392618 80.683992) (xy 205.387791 80.733) (xy 199.843 80.733) (xy 199.843 73.228) + (xy 201.8 73.228) (xy 201.8 73.728) (xy 201.854209 73.870398) (xy 201.935157 73.999484) (xy 202.039733 74.110298) + (xy 202.163919 74.198581) (xy 202.235609 74.204925) (xy 202.346 74.180537) (xy 202.346 73.228) (xy 202.754 73.228) + (xy 202.754 74.180537) (xy 202.864391 74.204925) (xy 202.936081 74.198581) (xy 203.060267 74.110298) (xy 203.164843 73.999484) + (xy 203.245791 73.870398) (xy 203.3 73.728) (xy 203.3 73.228) (xy 202.754 73.228) (xy 202.346 73.228) + (xy 201.8 73.228) (xy 199.843 73.228) (xy 199.843 72.32) (xy 201.8 72.32) (xy 201.8 72.82) + (xy 202.346 72.82) (xy 202.346 71.867463) (xy 202.754 71.867463) (xy 202.754 72.82) (xy 203.3 72.82) + (xy 203.3 72.487166) (xy 203.8 72.487166) (xy 203.800001 73.560835) (xy 203.810854 73.671026) (xy 203.85374 73.812401) + (xy 203.923382 73.942693) (xy 204.017106 74.056895) (xy 204.131308 74.150619) (xy 204.2616 74.220261) (xy 204.402975 74.263147) + (xy 204.55 74.277628) (xy 204.697026 74.263147) (xy 204.838401 74.220261) (xy 204.968693 74.150619) (xy 205.082895 74.056895) + (xy 205.176619 73.942693) (xy 205.246261 73.812401) (xy 205.289147 73.671026) (xy 205.3 73.560835) (xy 205.3 72.487165) + (xy 205.289147 72.376974) (xy 205.246261 72.235599) (xy 205.176619 72.105307) (xy 205.082895 71.991105) (xy 204.968692 71.897381) + (xy 204.925 71.874027) (xy 204.925 70.917329) (xy 210.03033 65.812) (xy 225.044833 65.812) (xy 225.05798 65.82802) + (xy 225.068922 65.837) (xy 225.05798 65.84598) (xy 225.044833 65.862) (xy 210.937415 65.862) (xy 210.918999 65.860186) + (xy 210.900583 65.862) (xy 210.900581 65.862) (xy 210.845487 65.867426) (xy 210.7748 65.888869) (xy 210.709653 65.923691) + (xy 210.652552 65.970552) (xy 210.640809 65.984861) (xy 206.297862 70.327809) (xy 206.283553 70.339552) (xy 206.271811 70.35386) + (xy 206.236691 70.396654) (xy 206.217503 70.432552) (xy 206.20187 70.4618) (xy 206.182434 70.525873) (xy 206.180427 70.532488) + (xy 206.173186 70.606) (xy 206.175001 70.624426) (xy 206.175 71.874027) (xy 206.131307 71.897381) (xy 206.017105 71.991105) + (xy 205.923381 72.105308) (xy 205.853739 72.2356) (xy 205.810853 72.376975) (xy 205.8 72.487166) (xy 205.800001 73.560835) + (xy 205.810854 73.671026) (xy 205.85374 73.812401) (xy 205.923382 73.942693) (xy 206.017106 74.056895) (xy 206.131308 74.150619) + (xy 206.2616 74.220261) (xy 206.402975 74.263147) (xy 206.55 74.277628) (xy 206.697026 74.263147) (xy 206.838401 74.220261) + (xy 206.968693 74.150619) (xy 207.082895 74.056895) (xy 207.176619 73.942693) (xy 207.246261 73.812401) (xy 207.289147 73.671026) + (xy 207.3 73.560835) (xy 207.3 72.487165) (xy 207.289147 72.376974) (xy 207.246261 72.235599) (xy 207.176619 72.105307) + (xy 207.082895 71.991105) (xy 206.968692 71.897381) (xy 206.925 71.874027) (xy 206.925 70.761329) (xy 211.07433 66.612) + (xy 211.730761 66.612) (xy 211.663112 66.679649) (xy 211.591978 66.78611) (xy 211.542979 66.904402) (xy 211.518 67.029981) + (xy 211.518 67.158019) (xy 211.527233 67.204437) (xy 208.352096 70.379575) (xy 208.340654 70.385691) (xy 208.283552 70.432552) + (xy 208.236691 70.489653) (xy 208.201869 70.5548) (xy 208.180426 70.625487) (xy 208.175 70.680581) (xy 208.175 70.682581) + (xy 208.173186 70.701) (xy 208.175001 70.719429) (xy 208.175 71.827739) (xy 208.175 71.874027) (xy 208.131307 71.897381) + (xy 208.017105 71.991105) (xy 207.923381 72.105308) (xy 207.853739 72.2356) (xy 207.810853 72.376975) (xy 207.8 72.487166) + (xy 207.800001 73.560835) (xy 207.810854 73.671026) (xy 207.85374 73.812401) (xy 207.923382 73.942693) (xy 208.017106 74.056895) + (xy 208.131308 74.150619) (xy 208.2616 74.220261) (xy 208.402975 74.263147) (xy 208.55 74.277628) (xy 208.697026 74.263147) + (xy 208.838401 74.220261) (xy 208.968693 74.150619) (xy 209.082895 74.056895) (xy 209.176619 73.942693) (xy 209.246261 73.812401) + (xy 209.289147 73.671026) (xy 209.3 73.560835) (xy 209.3 72.487165) (xy 209.289147 72.376974) (xy 209.246261 72.235599) + (xy 209.176619 72.105307) (xy 209.082895 71.991105) (xy 208.968692 71.897381) (xy 208.925 71.874027) (xy 208.925 70.867329) + (xy 212.057563 67.734767) (xy 212.103981 67.744) (xy 212.232019 67.744) (xy 212.357598 67.719021) (xy 212.47589 67.670022) + (xy 212.582351 67.598888) (xy 212.672888 67.508351) (xy 212.744022 67.40189) (xy 212.793021 67.283598) (xy 212.818 67.158019) + (xy 212.818 67.029981) (xy 212.793021 66.904402) (xy 212.744022 66.78611) (xy 212.672888 66.679649) (xy 212.605239 66.612) + (xy 214.375836 66.612) (xy 214.351959 66.619243) (xy 214.273783 66.661029) (xy 214.222432 66.703172) (xy 214.222428 66.703176) + (xy 214.205263 66.717263) (xy 214.191176 66.734428) (xy 210.247429 70.678176) (xy 210.230264 70.692263) (xy 210.216177 70.709428) + (xy 210.216172 70.709433) (xy 210.174029 70.760784) (xy 210.132243 70.83896) (xy 210.106512 70.923785) (xy 210.097824 71.012) + (xy 210.100001 71.034104) (xy 210.1 71.923074) (xy 210.017105 71.991105) (xy 209.923381 72.105308) (xy 209.853739 72.2356) + (xy 209.810853 72.376975) (xy 209.8 72.487166) (xy 209.800001 73.560835) (xy 209.810854 73.671026) (xy 209.85374 73.812401) + (xy 209.923382 73.942693) (xy 210.017106 74.056895) (xy 210.131308 74.150619) (xy 210.2616 74.220261) (xy 210.402975 74.263147) + (xy 210.55 74.277628) (xy 210.697026 74.263147) (xy 210.838401 74.220261) (xy 210.968693 74.150619) (xy 211.082895 74.056895) + (xy 211.176619 73.942693) (xy 211.193 73.912046) (xy 211.193 74.375584) (xy 211.191186 74.394) (xy 211.193 74.412416) + (xy 211.193 74.412418) (xy 211.198426 74.467512) (xy 211.219869 74.538199) (xy 211.254691 74.603346) (xy 211.301552 74.660448) + (xy 211.315866 74.672195) (xy 219.264808 82.621138) (xy 219.276551 82.635447) (xy 219.290858 82.647188) (xy 219.333652 82.682309) + (xy 219.37274 82.703201) (xy 219.398799 82.71713) (xy 219.469486 82.738573) (xy 219.52458 82.743999) (xy 219.524583 82.743999) + (xy 219.542999 82.745813) (xy 219.561415 82.743999) (xy 222.78767 82.743999) (xy 223.329261 83.285591) (xy 223.142999 83.285591) + (xy 223.045218 83.295222) (xy 222.951195 83.323743) (xy 222.864543 83.37006) (xy 222.788591 83.432391) (xy 222.72626 83.508343) + (xy 222.679943 83.594995) (xy 222.651422 83.689018) (xy 222.641791 83.786799) (xy 222.641791 84.586801) (xy 222.651422 84.684582) + (xy 222.679943 84.778605) (xy 222.72626 84.865257) (xy 222.788591 84.941209) (xy 222.864543 85.00354) (xy 222.951195 85.049857) + (xy 223.045218 85.078378) (xy 223.142999 85.088009) (xy 224.393001 85.088009) (xy 224.490782 85.078378) (xy 224.584805 85.049857) + (xy 224.671457 85.00354) (xy 224.747409 84.941209) (xy 224.80974 84.865257) (xy 224.856057 84.778605) (xy 224.884578 84.684582) + (xy 224.894209 84.586801) (xy 224.894209 83.786799) (xy 224.884578 83.689018) (xy 224.856057 83.594995) (xy 224.80974 83.508343) + (xy 224.747409 83.432391) (xy 224.671457 83.37006) (xy 224.584805 83.323743) (xy 224.490782 83.295222) (xy 224.393001 83.285591) + (xy 224.1386 83.285591) (xy 224.1386 83.208015) (xy 224.140414 83.189599) (xy 224.1386 83.171181) (xy 224.133174 83.116087) + (xy 224.111731 83.0454) (xy 224.076909 82.980253) (xy 224.030048 82.923152) (xy 224.015739 82.911409) (xy 223.221194 82.116865) + (xy 223.209447 82.102551) (xy 223.152346 82.05569) (xy 223.087199 82.020868) (xy 223.016512 81.999425) (xy 222.961418 81.993999) + (xy 222.961415 81.993999) (xy 222.942999 81.992185) (xy 222.924583 81.993999) (xy 219.698329 81.993999) (xy 215.452311 77.747981) + (xy 223.012 77.747981) (xy 223.012 77.876019) (xy 223.036979 78.001598) (xy 223.085978 78.11989) (xy 223.157112 78.226351) + (xy 223.247649 78.316888) (xy 223.35411 78.388022) (xy 223.472402 78.437021) (xy 223.597981 78.462) (xy 223.726019 78.462) + (xy 223.777869 78.451687) (xy 227.604001 82.212233) (xy 227.604 83.294991) (xy 227.353999 83.294991) (xy 227.256218 83.304622) + (xy 227.162195 83.333143) (xy 227.075543 83.37946) (xy 226.999591 83.441791) (xy 226.93726 83.517743) (xy 226.890943 83.604395) + (xy 226.862422 83.698418) (xy 226.852791 83.796199) (xy 226.852791 84.596201) (xy 226.862422 84.693982) (xy 226.890943 84.788005) + (xy 226.93726 84.874657) (xy 226.999591 84.950609) (xy 227.075543 85.01294) (xy 227.162195 85.059257) (xy 227.256218 85.087778) + (xy 227.353999 85.097409) (xy 228.604001 85.097409) (xy 228.701782 85.087778) (xy 228.795805 85.059257) (xy 228.882457 85.01294) + (xy 228.958409 84.950609) (xy 229.02074 84.874657) (xy 229.067057 84.788005) (xy 229.095578 84.693982) (xy 229.105209 84.596201) + (xy 229.105209 84.5712) (xy 229.646791 84.5712) (xy 229.646791 84.596201) (xy 229.656422 84.693982) (xy 229.684943 84.788005) + (xy 229.73126 84.874657) (xy 229.793591 84.950609) (xy 229.869543 85.01294) (xy 229.956195 85.059257) (xy 230.050218 85.087778) + (xy 230.147999 85.097409) (xy 231.398001 85.097409) (xy 231.495782 85.087778) (xy 231.589805 85.059257) (xy 231.676457 85.01294) + (xy 231.752409 84.950609) (xy 231.81474 84.874657) (xy 231.861057 84.788005) (xy 231.889578 84.693982) (xy 231.899209 84.596201) + (xy 231.899209 83.796199) (xy 231.889578 83.698418) (xy 231.861057 83.604395) (xy 231.81474 83.517743) (xy 231.752409 83.441791) + (xy 231.676457 83.37946) (xy 231.589805 83.333143) (xy 231.495782 83.304622) (xy 231.398001 83.294991) (xy 230.147999 83.294991) + (xy 230.050218 83.304622) (xy 229.956195 83.333143) (xy 229.869543 83.37946) (xy 229.793591 83.441791) (xy 229.73126 83.517743) + (xy 229.684943 83.604395) (xy 229.656422 83.698418) (xy 229.646791 83.796199) (xy 229.646791 83.8212) (xy 229.105209 83.8212) + (xy 229.105209 83.796199) (xy 229.095578 83.698418) (xy 229.067057 83.604395) (xy 229.02074 83.517743) (xy 228.958409 83.441791) + (xy 228.882457 83.37946) (xy 228.795805 83.333143) (xy 228.701782 83.304622) (xy 228.604001 83.294991) (xy 228.354 83.294991) + (xy 228.354 82.071792) (xy 228.3558 82.051742) (xy 228.352038 82.016664) (xy 228.348574 81.981487) (xy 228.348098 81.979918) + (xy 228.347924 81.978295) (xy 228.337406 81.944673) (xy 228.327131 81.9108) (xy 228.326358 81.909354) (xy 228.32587 81.907794) + (xy 228.30895 81.876787) (xy 228.292309 81.845653) (xy 228.291273 81.844391) (xy 228.290488 81.842952) (xy 228.267828 81.815822) + (xy 228.245448 81.788552) (xy 228.229888 81.775782) (xy 224.303841 77.917036) (xy 224.312 77.876019) (xy 224.312 77.747981) + (xy 224.287021 77.622402) (xy 224.238022 77.50411) (xy 224.166888 77.397649) (xy 224.076351 77.307112) (xy 223.96989 77.235978) + (xy 223.851598 77.186979) (xy 223.726019 77.162) (xy 223.597981 77.162) (xy 223.472402 77.186979) (xy 223.35411 77.235978) + (xy 223.247649 77.307112) (xy 223.157112 77.397649) (xy 223.085978 77.50411) (xy 223.036979 77.622402) (xy 223.012 77.747981) + (xy 215.452311 77.747981) (xy 211.943 74.238671) (xy 211.943 73.966597) (xy 212.017106 74.056895) (xy 212.131308 74.150619) + (xy 212.2616 74.220261) (xy 212.402975 74.263147) (xy 212.55 74.277628) (xy 212.697026 74.263147) (xy 212.838401 74.220261) + (xy 212.968693 74.150619) (xy 213.082895 74.056895) (xy 213.176619 73.942693) (xy 213.246261 73.812401) (xy 213.289147 73.671026) + (xy 213.3 73.560835) (xy 213.3 72.487166) (xy 213.8 72.487166) (xy 213.800001 73.560835) (xy 213.810854 73.671026) + (xy 213.85374 73.812401) (xy 213.923382 73.942693) (xy 214.017106 74.056895) (xy 214.131308 74.150619) (xy 214.2616 74.220261) + (xy 214.402975 74.263147) (xy 214.55 74.277628) (xy 214.697026 74.263147) (xy 214.838401 74.220261) (xy 214.968693 74.150619) + (xy 215.082895 74.056895) (xy 215.176619 73.942693) (xy 215.246261 73.812401) (xy 215.289147 73.671026) (xy 215.3 73.560835) + (xy 215.3 73.228) (xy 215.8 73.228) (xy 215.8 73.728) (xy 215.854209 73.870398) (xy 215.935157 73.999484) + (xy 216.039733 74.110298) (xy 216.163919 74.198581) (xy 216.235609 74.204925) (xy 216.346 74.180537) (xy 216.346 73.228) + (xy 216.754 73.228) (xy 216.754 74.180537) (xy 216.864391 74.204925) (xy 216.936081 74.198581) (xy 217.060267 74.110298) + (xy 217.164843 73.999484) (xy 217.245791 73.870398) (xy 217.3 73.728) (xy 217.3 73.228) (xy 216.754 73.228) + (xy 216.346 73.228) (xy 215.8 73.228) (xy 215.3 73.228) (xy 215.3 72.487165) (xy 215.289147 72.376974) + (xy 215.271864 72.32) (xy 215.8 72.32) (xy 215.8 72.82) (xy 216.346 72.82) (xy 216.346 71.867463) + (xy 216.754 71.867463) (xy 216.754 72.82) (xy 217.3 72.82) (xy 217.3 72.32) (xy 217.245791 72.177602) + (xy 217.164843 72.048516) (xy 217.060267 71.937702) (xy 216.936081 71.849419) (xy 216.864391 71.843075) (xy 216.754 71.867463) + (xy 216.346 71.867463) (xy 216.235609 71.843075) (xy 216.163919 71.849419) (xy 216.039733 71.937702) (xy 215.935157 72.048516) + (xy 215.854209 72.177602) (xy 215.8 72.32) (xy 215.271864 72.32) (xy 215.246261 72.235599) (xy 215.176619 72.105307) + (xy 215.082895 71.991105) (xy 214.968692 71.897381) (xy 214.8384 71.827739) (xy 214.697025 71.784853) (xy 214.55 71.770372) + (xy 214.402974 71.784853) (xy 214.261599 71.827739) (xy 214.131307 71.897381) (xy 214.017105 71.991105) (xy 213.923381 72.105308) + (xy 213.853739 72.2356) (xy 213.810853 72.376975) (xy 213.8 72.487166) (xy 213.3 72.487166) (xy 213.3 72.487165) + (xy 213.289147 72.376974) (xy 213.246261 72.235599) (xy 213.176619 72.105307) (xy 213.082895 71.991105) (xy 213 71.923075) + (xy 213 71.198395) (xy 215.111396 69.087) (xy 222.196571 69.087) (xy 222.194044 69.087745) (xy 222.192725 69.088437) + (xy 222.1913 69.088869) (xy 222.160068 69.105563) (xy 222.128626 69.122052) (xy 222.127465 69.12299) (xy 222.126153 69.123691) + (xy 222.098772 69.146162) (xy 222.085557 69.156834) (xy 222.084501 69.157873) (xy 222.069052 69.170552) (xy 222.05825 69.183714) + (xy 221.554883 69.679217) (xy 221.503519 69.669) (xy 221.375481 69.669) (xy 221.249902 69.693979) (xy 221.13161 69.742978) + (xy 221.025149 69.814112) (xy 220.934612 69.904649) (xy 220.863478 70.01111) (xy 220.814479 70.129402) (xy 220.7895 70.254981) + (xy 220.7895 70.383019) (xy 220.814479 70.508598) (xy 220.863478 70.62689) (xy 220.934612 70.733351) (xy 221.025149 70.823888) + (xy 221.13161 70.895022) (xy 221.249902 70.944021) (xy 221.375481 70.969) (xy 221.503519 70.969) (xy 221.629098 70.944021) + (xy 221.74739 70.895022) (xy 221.853851 70.823888) (xy 221.944388 70.733351) (xy 222.015522 70.62689) (xy 222.064521 70.508598) + (xy 222.0895 70.383019) (xy 222.0895 70.254981) (xy 222.081246 70.213484) (xy 222.489103 69.812) (xy 225.044833 69.812) + (xy 225.05798 69.82802) (xy 225.068922 69.837) (xy 225.05798 69.84598) (xy 225.011194 69.902989) (xy 224.976428 69.968031) + (xy 224.95502 70.038605) (xy 224.947791 70.112) (xy 224.947791 70.362) (xy 224.95502 70.435395) (xy 224.976428 70.505969) + (xy 225.011194 70.571011) (xy 225.05798 70.62802) (xy 225.114989 70.674806) (xy 225.180031 70.709572) (xy 225.250605 70.73098) + (xy 225.324 70.738209) (xy 225.574001 70.738209) (xy 225.574 72.606584) (xy 225.572186 72.625) (xy 225.574 72.643416) + (xy 225.574 72.643418) (xy 225.579426 72.698512) (xy 225.600869 72.769199) (xy 225.635691 72.834346) (xy 225.682552 72.891448) + (xy 225.696866 72.903195) (xy 235.508001 82.714331) (xy 235.508001 83.311791) (xy 235.257999 83.311791) (xy 235.160218 83.321422) + (xy 235.066195 83.349943) (xy 234.979543 83.39626) (xy 234.903591 83.458591) (xy 234.84126 83.534543) (xy 234.794943 83.621195) + (xy 234.766422 83.715218) (xy 234.756791 83.812999) (xy 234.756791 84.613001) (xy 234.766422 84.710782) (xy 234.794943 84.804805) + (xy 234.84126 84.891457) (xy 234.903591 84.967409) (xy 234.979543 85.02974) (xy 235.066195 85.076057) (xy 235.160218 85.104578) + (xy 235.257999 85.114209) (xy 236.508001 85.114209) (xy 236.605782 85.104578) (xy 236.699805 85.076057) (xy 236.786457 85.02974) + (xy 236.862409 84.967409) (xy 236.92474 84.891457) (xy 236.971057 84.804805) (xy 236.999578 84.710782) (xy 237.009209 84.613001) + (xy 237.009209 84.569) (xy 237.591791 84.569) (xy 237.591791 84.594001) (xy 237.601422 84.691782) (xy 237.629943 84.785805) + (xy 237.67626 84.872457) (xy 237.738591 84.948409) (xy 237.814543 85.01074) (xy 237.901195 85.057057) (xy 237.995218 85.085578) + (xy 238.092999 85.095209) (xy 239.343001 85.095209) (xy 239.440782 85.085578) (xy 239.534805 85.057057) (xy 239.621457 85.01074) + (xy 239.697409 84.948409) (xy 239.75974 84.872457) (xy 239.806057 84.785805) (xy 239.834578 84.691782) (xy 239.844209 84.594001) + (xy 239.844209 83.793999) (xy 239.834578 83.696218) (xy 239.806057 83.602195) (xy 239.75974 83.515543) (xy 239.697409 83.439591) + (xy 239.621457 83.37726) (xy 239.534805 83.330943) (xy 239.440782 83.302422) (xy 239.343001 83.292791) (xy 238.092999 83.292791) + (xy 237.995218 83.302422) (xy 237.901195 83.330943) (xy 237.814543 83.37726) (xy 237.738591 83.439591) (xy 237.67626 83.515543) + (xy 237.629943 83.602195) (xy 237.601422 83.696218) (xy 237.591791 83.793999) (xy 237.591791 83.819) (xy 237.009209 83.819) + (xy 237.009209 83.812999) (xy 236.999578 83.715218) (xy 236.971057 83.621195) (xy 236.92474 83.534543) (xy 236.862409 83.458591) + (xy 236.786457 83.39626) (xy 236.699805 83.349943) (xy 236.605782 83.321422) (xy 236.508001 83.311791) (xy 236.258 83.311791) + (xy 236.258 82.709) (xy 241.880791 82.709) (xy 241.880791 85.209) (xy 241.890422 85.306781) (xy 241.918943 85.400804) + (xy 241.96526 85.487457) (xy 242.027592 85.563408) (xy 242.103543 85.62574) (xy 242.190196 85.672057) (xy 242.284219 85.700578) + (xy 242.382 85.710209) (xy 243.482 85.710209) (xy 243.579781 85.700578) (xy 243.673804 85.672057) (xy 243.760457 85.62574) + (xy 243.836408 85.563408) (xy 243.89874 85.487457) (xy 243.945057 85.400804) (xy 243.973578 85.306781) (xy 243.983209 85.209) + (xy 243.983209 83.459) (xy 244.58079 83.459) (xy 244.582 85.9425) (xy 244.6445 86.005) (xy 245.128 86.005) + (xy 245.128 83.2715) (xy 245.536 83.2715) (xy 245.536 86.005) (xy 246.0195 86.005) (xy 246.082 85.9425) + (xy 246.08321 83.459) (xy 246.078383 83.409991) (xy 246.064088 83.362866) (xy 246.040873 83.319435) (xy 246.009632 83.281368) + (xy 245.971565 83.250127) (xy 245.928134 83.226912) (xy 245.881009 83.212617) (xy 245.832 83.20779) (xy 245.5985 83.209) + (xy 245.536 83.2715) (xy 245.128 83.2715) (xy 245.0655 83.209) (xy 244.832 83.20779) (xy 244.782991 83.212617) + (xy 244.735866 83.226912) (xy 244.692435 83.250127) (xy 244.654368 83.281368) (xy 244.623127 83.319435) (xy 244.599912 83.362866) + (xy 244.585617 83.409991) (xy 244.58079 83.459) (xy 243.983209 83.459) (xy 243.983209 82.709) (xy 243.973578 82.611219) + (xy 243.945057 82.517196) (xy 243.89874 82.430543) (xy 243.836408 82.354592) (xy 243.760457 82.29226) (xy 243.673804 82.245943) + (xy 243.579781 82.217422) (xy 243.482 82.207791) (xy 242.382 82.207791) (xy 242.284219 82.217422) (xy 242.190196 82.245943) + (xy 242.103543 82.29226) (xy 242.027592 82.354592) (xy 241.96526 82.430543) (xy 241.918943 82.517196) (xy 241.890422 82.611219) + (xy 241.880791 82.709) (xy 236.258 82.709) (xy 236.258 82.577416) (xy 236.259814 82.559) (xy 236.258 82.540581) + (xy 236.252574 82.485487) (xy 236.231131 82.4148) (xy 236.205308 82.366488) (xy 236.19631 82.349653) (xy 236.161189 82.306859) + (xy 236.149448 82.292552) (xy 236.135139 82.280809) (xy 226.324 72.469671) (xy 226.324 70.987) (xy 226.822791 70.987) + (xy 226.822791 72.237) (xy 226.83002 72.310395) (xy 226.851428 72.380969) (xy 226.886194 72.446011) (xy 226.93298 72.50302) + (xy 226.989989 72.549806) (xy 227.055031 72.584572) (xy 227.125605 72.60598) (xy 227.199 72.613209) (xy 227.449 72.613209) + (xy 227.522395 72.60598) (xy 227.592969 72.584572) (xy 227.658011 72.549806) (xy 227.71502 72.50302) (xy 227.724 72.492078) + (xy 227.73298 72.50302) (xy 227.789989 72.549806) (xy 227.855031 72.584572) (xy 227.925605 72.60598) (xy 227.999 72.613209) + (xy 228.249 72.613209) (xy 228.322395 72.60598) (xy 228.392969 72.584572) (xy 228.458011 72.549806) (xy 228.51502 72.50302) + (xy 228.524 72.492078) (xy 228.53298 72.50302) (xy 228.589989 72.549806) (xy 228.655031 72.584572) (xy 228.725605 72.60598) + (xy 228.799 72.613209) (xy 229.049 72.613209) (xy 229.122395 72.60598) (xy 229.192969 72.584572) (xy 229.258011 72.549806) + (xy 229.31502 72.50302) (xy 229.324 72.492078) (xy 229.33298 72.50302) (xy 229.364464 72.528858) (xy 229.374059 73.095793) + (xy 229.343649 73.116112) (xy 229.253112 73.206649) (xy 229.181978 73.31311) (xy 229.132979 73.431402) (xy 229.108 73.556981) + (xy 229.108 73.685019) (xy 229.132979 73.810598) (xy 229.181978 73.92889) (xy 229.253112 74.035351) (xy 229.343649 74.125888) + (xy 229.45011 74.197022) (xy 229.568402 74.246021) (xy 229.693981 74.271) (xy 229.822019 74.271) (xy 229.947598 74.246021) + (xy 230.06589 74.197022) (xy 230.172351 74.125888) (xy 230.262888 74.035351) (xy 230.334022 73.92889) (xy 230.383021 73.810598) + (xy 230.408 73.685019) (xy 230.408 73.556981) (xy 230.383021 73.431402) (xy 230.334022 73.31311) (xy 230.262888 73.206649) + (xy 230.172351 73.116112) (xy 230.123961 73.083779) (xy 230.114145 72.503738) (xy 230.11502 72.50302) (xy 230.124 72.492078) + (xy 230.13298 72.50302) (xy 230.189989 72.549806) (xy 230.255031 72.584572) (xy 230.325605 72.60598) (xy 230.399 72.613209) + (xy 230.649 72.613209) (xy 230.722395 72.60598) (xy 230.792969 72.584572) (xy 230.858011 72.549806) (xy 230.91502 72.50302) + (xy 230.924 72.492078) (xy 230.93298 72.50302) (xy 230.949 72.516168) (xy 230.949001 74.081574) (xy 230.947186 74.1) + (xy 230.950634 74.135) (xy 230.954427 74.173513) (xy 230.97587 74.2442) (xy 231.010692 74.309347) (xy 231.057553 74.366448) + (xy 231.071862 74.378191) (xy 235.989809 79.296139) (xy 236.001552 79.310448) (xy 236.058653 79.357309) (xy 236.1238 79.392131) + (xy 236.194487 79.413574) (xy 236.249581 79.419) (xy 236.249584 79.419) (xy 236.268 79.420814) (xy 236.286416 79.419) + (xy 246.636819 79.419) (xy 246.663112 79.458351) (xy 246.753649 79.548888) (xy 246.86011 79.620022) (xy 246.978402 79.669021) + (xy 247.103981 79.694) (xy 247.232019 79.694) (xy 247.357598 79.669021) (xy 247.47589 79.620022) (xy 247.582351 79.548888) + (xy 247.672888 79.458351) (xy 247.744022 79.35189) (xy 247.793021 79.233598) (xy 247.818 79.108019) (xy 247.818 78.979981) + (xy 247.793021 78.854402) (xy 247.744022 78.73611) (xy 247.672888 78.629649) (xy 247.582351 78.539112) (xy 247.47589 78.467978) + (xy 247.357598 78.418979) (xy 247.232019 78.394) (xy 247.103981 78.394) (xy 246.978402 78.418979) (xy 246.86011 78.467978) + (xy 246.753649 78.539112) (xy 246.663112 78.629649) (xy 246.636819 78.669) (xy 236.42333 78.669) (xy 231.699 73.944671) + (xy 231.699 73.072165) (xy 231.706243 73.096042) (xy 231.748029 73.174218) (xy 231.790172 73.225569) (xy 236.08543 77.520828) + (xy 236.136781 77.562971) (xy 236.214957 77.604757) (xy 236.299783 77.630488) (xy 236.387998 77.639176) (xy 236.476213 77.630488) + (xy 236.561038 77.604757) (xy 236.639214 77.562971) (xy 236.640397 77.562) (xy 248.236791 77.562) (xy 248.236791 77.587001) + (xy 248.246422 77.684782) (xy 248.274943 77.778805) (xy 248.32126 77.865457) (xy 248.383591 77.941409) (xy 248.459543 78.00374) + (xy 248.546195 78.050057) (xy 248.640218 78.078578) (xy 248.737999 78.088209) (xy 248.988 78.088209) (xy 248.988001 83.21705) + (xy 248.984219 83.217422) (xy 248.890196 83.245943) (xy 248.803543 83.29226) (xy 248.727592 83.354592) (xy 248.66526 83.430543) + (xy 248.618943 83.517196) (xy 248.590422 83.611219) (xy 248.580791 83.709) (xy 248.580791 88.709) (xy 248.590422 88.806781) + (xy 248.618943 88.900804) (xy 248.66526 88.987457) (xy 248.727592 89.063408) (xy 248.803543 89.12574) (xy 248.890196 89.172057) + (xy 248.984219 89.200578) (xy 249.082 89.210209) (xy 249.582 89.210209) (xy 249.679781 89.200578) (xy 249.773804 89.172057) + (xy 249.860457 89.12574) (xy 249.936408 89.063408) (xy 249.99874 88.987457) (xy 250.045057 88.900804) (xy 250.073578 88.806781) + (xy 250.083209 88.709) (xy 250.083209 83.709) (xy 250.580791 83.709) (xy 250.580791 88.709) (xy 250.590422 88.806781) + (xy 250.618943 88.900804) (xy 250.66526 88.987457) (xy 250.727592 89.063408) (xy 250.803543 89.12574) (xy 250.890196 89.172057) + (xy 250.984219 89.200578) (xy 251.082 89.210209) (xy 251.582 89.210209) (xy 251.679781 89.200578) (xy 251.773804 89.172057) + (xy 251.860457 89.12574) (xy 251.936408 89.063408) (xy 251.99874 88.987457) (xy 252.045057 88.900804) (xy 252.073578 88.806781) + (xy 252.083209 88.709) (xy 252.083209 83.709) (xy 252.073578 83.611219) (xy 252.045057 83.517196) (xy 251.99874 83.430543) + (xy 251.936408 83.354592) (xy 251.860457 83.29226) (xy 251.773804 83.245943) (xy 251.707 83.225679) (xy 251.707 82.709) + (xy 252.680791 82.709) (xy 252.680791 85.209) (xy 252.690422 85.306781) (xy 252.718943 85.400804) (xy 252.76526 85.487457) + (xy 252.827592 85.563408) (xy 252.903543 85.62574) (xy 252.990196 85.672057) (xy 253.084219 85.700578) (xy 253.182 85.710209) + (xy 254.282 85.710209) (xy 254.379781 85.700578) (xy 254.473804 85.672057) (xy 254.560457 85.62574) (xy 254.636408 85.563408) + (xy 254.69874 85.487457) (xy 254.745057 85.400804) (xy 254.773578 85.306781) (xy 254.783209 85.209) (xy 254.783209 82.709) + (xy 254.773578 82.611219) (xy 254.745057 82.517196) (xy 254.69874 82.430543) (xy 254.636408 82.354592) (xy 254.560457 82.29226) + (xy 254.473804 82.245943) (xy 254.379781 82.217422) (xy 254.282 82.207791) (xy 253.182 82.207791) (xy 253.084219 82.217422) + (xy 252.990196 82.245943) (xy 252.903543 82.29226) (xy 252.827592 82.354592) (xy 252.76526 82.430543) (xy 252.718943 82.517196) + (xy 252.690422 82.611219) (xy 252.680791 82.709) (xy 251.707 82.709) (xy 251.707 82.285329) (xy 252.155139 81.837191) + (xy 252.169448 81.825448) (xy 252.216309 81.768347) (xy 252.251131 81.7032) (xy 252.272574 81.632513) (xy 252.278 81.577419) + (xy 252.278 81.577416) (xy 252.279814 81.559) (xy 252.278 81.540584) (xy 252.278 79.585204) (xy 252.332351 79.548888) + (xy 252.422888 79.458351) (xy 252.494022 79.35189) (xy 252.543021 79.233598) (xy 252.568 79.108019) (xy 252.568 78.979981) + (xy 252.543021 78.854402) (xy 252.494022 78.73611) (xy 252.422888 78.629649) (xy 252.332351 78.539112) (xy 252.278 78.502796) + (xy 252.278 78.088209) (xy 252.528001 78.088209) (xy 252.625782 78.078578) (xy 252.719805 78.050057) (xy 252.806457 78.00374) + (xy 252.882409 77.941409) (xy 252.94474 77.865457) (xy 252.991057 77.778805) (xy 253.019578 77.684782) (xy 253.029209 77.587001) + (xy 253.029209 76.786999) (xy 253.019578 76.689218) (xy 252.991057 76.595195) (xy 252.94474 76.508543) (xy 252.882409 76.432591) + (xy 252.806457 76.37026) (xy 252.719805 76.323943) (xy 252.625782 76.295422) (xy 252.528001 76.285791) (xy 251.277999 76.285791) + (xy 251.180218 76.295422) (xy 251.086195 76.323943) (xy 250.999543 76.37026) (xy 250.923591 76.432591) (xy 250.86126 76.508543) + (xy 250.814943 76.595195) (xy 250.786422 76.689218) (xy 250.776791 76.786999) (xy 250.776791 77.587001) (xy 250.786422 77.684782) + (xy 250.814943 77.778805) (xy 250.86126 77.865457) (xy 250.923591 77.941409) (xy 250.999543 78.00374) (xy 251.086195 78.050057) + (xy 251.180218 78.078578) (xy 251.277999 78.088209) (xy 251.528 78.088209) (xy 251.528 78.522841) (xy 251.503649 78.539112) + (xy 251.413112 78.629649) (xy 251.341978 78.73611) (xy 251.292979 78.854402) (xy 251.268 78.979981) (xy 251.268 79.108019) + (xy 251.292979 79.233598) (xy 251.341978 79.35189) (xy 251.413112 79.458351) (xy 251.503649 79.548888) (xy 251.528001 79.565159) + (xy 251.528001 81.403669) (xy 251.079866 81.851805) (xy 251.065552 81.863552) (xy 251.018691 81.920654) (xy 250.983869 81.985801) + (xy 250.962426 82.056488) (xy 250.957 82.111581) (xy 250.955186 82.13) (xy 250.957 82.148416) (xy 250.957 83.225679) + (xy 250.890196 83.245943) (xy 250.803543 83.29226) (xy 250.727592 83.354592) (xy 250.66526 83.430543) (xy 250.618943 83.517196) + (xy 250.590422 83.611219) (xy 250.580791 83.709) (xy 250.083209 83.709) (xy 250.073578 83.611219) (xy 250.045057 83.517196) + (xy 249.99874 83.430543) (xy 249.936408 83.354592) (xy 249.860457 83.29226) (xy 249.773804 83.245943) (xy 249.738 83.235082) + (xy 249.738 78.088209) (xy 249.988001 78.088209) (xy 250.085782 78.078578) (xy 250.179805 78.050057) (xy 250.266457 78.00374) + (xy 250.342409 77.941409) (xy 250.40474 77.865457) (xy 250.451057 77.778805) (xy 250.479578 77.684782) (xy 250.489209 77.587001) + (xy 250.489209 76.786999) (xy 250.479578 76.689218) (xy 250.451057 76.595195) (xy 250.40474 76.508543) (xy 250.342409 76.432591) + (xy 250.266457 76.37026) (xy 250.179805 76.323943) (xy 250.085782 76.295422) (xy 249.988001 76.285791) (xy 248.737999 76.285791) + (xy 248.640218 76.295422) (xy 248.546195 76.323943) (xy 248.459543 76.37026) (xy 248.383591 76.432591) (xy 248.32126 76.508543) + (xy 248.274943 76.595195) (xy 248.246422 76.689218) (xy 248.236791 76.786999) (xy 248.236791 76.812) (xy 236.649394 76.812) + (xy 234.772394 74.935) (xy 235.054961 74.935) (xy 235.134849 75.014888) (xy 235.24131 75.086022) (xy 235.359602 75.135021) + (xy 235.485181 75.16) (xy 235.613219 75.16) (xy 235.738798 75.135021) (xy 235.85709 75.086022) (xy 235.963551 75.014888) + (xy 236.054088 74.924351) (xy 236.125222 74.81789) (xy 236.174221 74.699598) (xy 236.1992 74.574019) (xy 236.1992 74.445981) + (xy 236.174221 74.320402) (xy 236.125222 74.20211) (xy 236.054088 74.095649) (xy 235.963551 74.005112) (xy 235.85709 73.933978) + (xy 235.738798 73.884979) (xy 235.613219 73.86) (xy 235.485181 73.86) (xy 235.359602 73.884979) (xy 235.24131 73.933978) + (xy 235.134849 74.005112) (xy 235.054961 74.085) (xy 234.86164 74.085) (xy 233.299 72.52236) (xy 233.299 72.516167) + (xy 233.31502 72.50302) (xy 233.361806 72.446011) (xy 233.396572 72.380969) (xy 233.41798 72.310395) (xy 233.425209 72.237) + (xy 233.425209 70.987) (xy 233.41798 70.913605) (xy 233.396572 70.843031) (xy 233.361806 70.777989) (xy 233.31502 70.72098) + (xy 233.258011 70.674194) (xy 233.192969 70.639428) (xy 233.122395 70.61802) (xy 233.049 70.610791) (xy 232.799 70.610791) + (xy 232.725605 70.61802) (xy 232.655031 70.639428) (xy 232.589989 70.674194) (xy 232.53298 70.72098) (xy 232.524 70.731922) + (xy 232.51502 70.72098) (xy 232.458011 70.674194) (xy 232.392969 70.639428) (xy 232.322395 70.61802) (xy 232.249 70.610791) + (xy 231.999 70.610791) (xy 231.925605 70.61802) (xy 231.855031 70.639428) (xy 231.789989 70.674194) (xy 231.73298 70.72098) + (xy 231.724 70.731922) (xy 231.71502 70.72098) (xy 231.658011 70.674194) (xy 231.592969 70.639428) (xy 231.522395 70.61802) + (xy 231.449 70.610791) (xy 231.199 70.610791) (xy 231.125605 70.61802) (xy 231.055031 70.639428) (xy 230.989989 70.674194) + (xy 230.93298 70.72098) (xy 230.924 70.731922) (xy 230.91502 70.72098) (xy 230.858011 70.674194) (xy 230.792969 70.639428) + (xy 230.722395 70.61802) (xy 230.649 70.610791) (xy 230.399 70.610791) (xy 230.325605 70.61802) (xy 230.255031 70.639428) + (xy 230.189989 70.674194) (xy 230.13298 70.72098) (xy 230.124 70.731922) (xy 230.11502 70.72098) (xy 230.058011 70.674194) + (xy 229.992969 70.639428) (xy 229.922395 70.61802) (xy 229.849 70.610791) (xy 229.599 70.610791) (xy 229.525605 70.61802) + (xy 229.455031 70.639428) (xy 229.389989 70.674194) (xy 229.33298 70.72098) (xy 229.324 70.731922) (xy 229.31502 70.72098) + (xy 229.258011 70.674194) (xy 229.192969 70.639428) (xy 229.122395 70.61802) (xy 229.049 70.610791) (xy 228.799 70.610791) + (xy 228.725605 70.61802) (xy 228.655031 70.639428) (xy 228.589989 70.674194) (xy 228.53298 70.72098) (xy 228.524 70.731922) + (xy 228.51502 70.72098) (xy 228.458011 70.674194) (xy 228.392969 70.639428) (xy 228.322395 70.61802) (xy 228.249 70.610791) + (xy 227.999 70.610791) (xy 227.925605 70.61802) (xy 227.855031 70.639428) (xy 227.789989 70.674194) (xy 227.73298 70.72098) + (xy 227.724 70.731922) (xy 227.71502 70.72098) (xy 227.658011 70.674194) (xy 227.592969 70.639428) (xy 227.522395 70.61802) + (xy 227.449 70.610791) (xy 227.199 70.610791) (xy 227.125605 70.61802) (xy 227.055031 70.639428) (xy 226.989989 70.674194) + (xy 226.93298 70.72098) (xy 226.886194 70.777989) (xy 226.851428 70.843031) (xy 226.83002 70.913605) (xy 226.822791 70.987) + (xy 226.324 70.987) (xy 226.324 70.738209) (xy 226.574 70.738209) (xy 226.647395 70.73098) (xy 226.717969 70.709572) + (xy 226.783011 70.674806) (xy 226.84002 70.62802) (xy 226.886806 70.571011) (xy 226.921572 70.505969) (xy 226.94298 70.435395) + (xy 226.950209 70.362) (xy 226.950209 70.112) (xy 226.94298 70.038605) (xy 226.921572 69.968031) (xy 226.886806 69.902989) + (xy 226.84002 69.84598) (xy 226.829078 69.837) (xy 226.84002 69.82802) (xy 226.886806 69.771011) (xy 226.921572 69.705969) + (xy 226.94298 69.635395) (xy 226.950209 69.562) (xy 226.950209 69.312) (xy 226.94298 69.238605) (xy 226.921572 69.168031) + (xy 226.886806 69.102989) (xy 226.84002 69.04598) (xy 226.829078 69.037) (xy 226.84002 69.02802) (xy 226.886806 68.971011) + (xy 226.921572 68.905969) (xy 226.94298 68.835395) (xy 226.950209 68.762) (xy 226.950209 68.512) (xy 226.94298 68.438605) + (xy 226.921572 68.368031) (xy 226.886806 68.302989) (xy 226.84002 68.24598) (xy 226.829078 68.237) (xy 226.84002 68.22802) + (xy 226.886806 68.171011) (xy 226.921572 68.105969) (xy 226.94298 68.035395) (xy 226.950209 67.962) (xy 226.950209 67.712) + (xy 226.94298 67.638605) (xy 226.921572 67.568031) (xy 226.886806 67.502989) (xy 226.84002 67.44598) (xy 226.829078 67.437) + (xy 226.84002 67.42802) (xy 226.886806 67.371011) (xy 226.921572 67.305969) (xy 226.94298 67.235395) (xy 226.950209 67.162) + (xy 226.950209 66.912) (xy 226.94298 66.838605) (xy 226.921572 66.768031) (xy 226.886806 66.702989) (xy 226.84002 66.64598) + (xy 226.829078 66.637) (xy 226.84002 66.62802) (xy 226.886806 66.571011) (xy 226.921572 66.505969) (xy 226.94298 66.435395) + (xy 226.950209 66.362) (xy 226.950209 66.112) (xy 226.94298 66.038605) (xy 226.921572 65.968031) (xy 226.886806 65.902989) + (xy 226.84002 65.84598) (xy 226.829078 65.837) (xy 226.84002 65.82802) (xy 226.886806 65.771011) (xy 226.921572 65.705969) + (xy 226.94298 65.635395) (xy 226.950209 65.562) (xy 226.950209 65.312) (xy 226.94298 65.238605) (xy 226.921572 65.168031) + (xy 226.886806 65.102989) (xy 226.84002 65.04598) (xy 226.829078 65.037) (xy 226.84002 65.02802) (xy 226.886806 64.971011) + (xy 226.921572 64.905969) (xy 226.94298 64.835395) (xy 226.950209 64.762) (xy 226.950209 64.512) (xy 226.94298 64.438605) + (xy 226.921572 64.368031) (xy 226.886806 64.302989) (xy 226.84002 64.24598) (xy 226.783011 64.199194) (xy 226.717969 64.164428) + (xy 226.647395 64.14302) (xy 226.574 64.135791) (xy 225.324 64.135791) (xy 225.250605 64.14302) (xy 225.180031 64.164428) + (xy 225.114989 64.199194) (xy 225.05798 64.24598) (xy 225.044833 64.262) (xy 224.61633 64.262) (xy 224.308767 63.954437) + (xy 224.318 63.908019) (xy 224.318 63.779981) (xy 224.293021 63.654402) (xy 224.244022 63.53611) (xy 224.172888 63.429649) + (xy 224.082351 63.339112) (xy 223.97589 63.267978) (xy 223.857598 63.218979) (xy 223.732019 63.194) (xy 223.603981 63.194) + (xy 223.478402 63.218979) (xy 223.36011 63.267978) (xy 223.253649 63.339112) (xy 223.163112 63.429649) (xy 223.091978 63.53611) + (xy 223.042979 63.654402) (xy 223.018 63.779981) (xy 223.018 63.908019) (xy 223.042979 64.033598) (xy 223.091978 64.15189) + (xy 223.163112 64.258351) (xy 223.253649 64.348888) (xy 223.36011 64.420022) (xy 223.478402 64.469021) (xy 223.603981 64.494) + (xy 223.732019 64.494) (xy 223.778437 64.484767) (xy 224.182809 64.889139) (xy 224.194552 64.903448) (xy 224.251653 64.950309) + (xy 224.3168 64.985131) (xy 224.387487 65.006574) (xy 224.442581 65.012) (xy 224.442583 65.012) (xy 224.460999 65.013814) + (xy 224.479415 65.012) (xy 225.044833 65.012) (xy 225.05798 65.02802) (xy 225.068922 65.037) (xy 225.05798 65.04598) + (xy 225.044833 65.062) (xy 209.893415 65.062) (xy 209.874999 65.060186) (xy 209.856583 65.062) (xy 209.856581 65.062) + (xy 209.801487 65.067426) (xy 209.7308 65.088869) (xy 209.665653 65.123691) (xy 209.608552 65.170552) (xy 209.596809 65.184861) + (xy 204.297862 70.483809) (xy 204.283553 70.495552) (xy 204.271811 70.50986) (xy 204.236691 70.552654) (xy 204.211831 70.599165) + (xy 204.20187 70.6178) (xy 204.180427 70.688487) (xy 204.180363 70.68914) (xy 204.173186 70.762) (xy 204.175001 70.780426) + (xy 204.175 71.874027) (xy 204.131307 71.897381) (xy 204.017105 71.991105) (xy 203.923381 72.105308) (xy 203.853739 72.2356) + (xy 203.810853 72.376975) (xy 203.8 72.487166) (xy 203.3 72.487166) (xy 203.3 72.32) (xy 203.245791 72.177602) + (xy 203.164843 72.048516) (xy 203.060267 71.937702) (xy 202.936081 71.849419) (xy 202.864391 71.843075) (xy 202.754 71.867463) + (xy 202.346 71.867463) (xy 202.235609 71.843075) (xy 202.163919 71.849419) (xy 202.039733 71.937702) (xy 201.935157 72.048516) + (xy 201.854209 72.177602) (xy 201.8 72.32) (xy 199.843 72.32) (xy 199.843 56.487166) (xy 201.8 56.487166) + (xy 201.800001 57.560835) (xy 201.810854 57.671026) (xy 201.85374 57.812401) (xy 201.923382 57.942693) (xy 202.017106 58.056895) + (xy 202.131308 58.150619) (xy 202.2616 58.220261) (xy 202.402975 58.263147) (xy 202.55 58.277628) (xy 202.697026 58.263147) + (xy 202.838401 58.220261) (xy 202.968693 58.150619) (xy 203.082895 58.056895) (xy 203.176619 57.942693) (xy 203.246261 57.812401) + (xy 203.289147 57.671026) (xy 203.3 57.560835) (xy 203.3 56.487166) (xy 203.8 56.487166) (xy 203.800001 57.560835) + (xy 203.810854 57.671026) (xy 203.85374 57.812401) (xy 203.923382 57.942693) (xy 204.017106 58.056895) (xy 204.131308 58.150619) + (xy 204.2616 58.220261) (xy 204.402975 58.263147) (xy 204.55 58.277628) (xy 204.697026 58.263147) (xy 204.838401 58.220261) + (xy 204.968693 58.150619) (xy 205.082895 58.056895) (xy 205.176619 57.942693) (xy 205.246261 57.812401) (xy 205.289147 57.671026) + (xy 205.3 57.560835) (xy 205.3 56.487166) (xy 205.8 56.487166) (xy 205.800001 57.560835) (xy 205.810854 57.671026) + (xy 205.85374 57.812401) (xy 205.923382 57.942693) (xy 206.017106 58.056895) (xy 206.131308 58.150619) (xy 206.175 58.173973) + (xy 206.175001 63.094574) (xy 206.173186 63.113) (xy 206.179767 63.179813) (xy 206.180427 63.186513) (xy 206.193255 63.228799) + (xy 206.20187 63.2572) (xy 206.236691 63.322346) (xy 206.250876 63.33963) (xy 206.283553 63.379448) (xy 206.297861 63.39119) + (xy 206.531809 63.625139) (xy 206.543552 63.639448) (xy 206.557859 63.651189) (xy 206.600653 63.68631) (xy 206.639969 63.707324) + (xy 206.6658 63.721131) (xy 206.736487 63.742574) (xy 206.791581 63.748) (xy 206.791584 63.748) (xy 206.81 63.749814) + (xy 206.828416 63.748) (xy 220.702819 63.748) (xy 220.729112 63.787351) (xy 220.819649 63.877888) (xy 220.92611 63.949022) + (xy 221.044402 63.998021) (xy 221.169981 64.023) (xy 221.298019 64.023) (xy 221.423598 63.998021) (xy 221.54189 63.949022) + (xy 221.648351 63.877888) (xy 221.738888 63.787351) (xy 221.810022 63.68089) (xy 221.859021 63.562598) (xy 221.884 63.437019) + (xy 221.884 63.308981) (xy 221.859021 63.183402) (xy 221.810022 63.06511) (xy 221.738888 62.958649) (xy 221.648351 62.868112) + (xy 221.54189 62.796978) (xy 221.423598 62.747979) (xy 221.298019 62.723) (xy 221.169981 62.723) (xy 221.044402 62.747979) + (xy 220.92611 62.796978) (xy 220.819649 62.868112) (xy 220.729112 62.958649) (xy 220.702819 62.998) (xy 206.96533 62.998) + (xy 206.925 62.957671) (xy 206.925 60.678) (xy 219.28079 60.678) (xy 219.285617 60.727009) (xy 219.299912 60.774134) + (xy 219.323127 60.817565) (xy 219.354368 60.855632) (xy 219.392435 60.886873) (xy 219.435866 60.910088) (xy 219.482991 60.924383) + (xy 219.532 60.92921) (xy 219.928 60.928) (xy 219.9905 60.8655) (xy 219.9905 59.982) (xy 220.3985 59.982) + (xy 220.3985 60.8655) (xy 220.461 60.928) (xy 220.857 60.92921) (xy 220.906009 60.924383) (xy 220.953134 60.910088) + (xy 220.996565 60.886873) (xy 221.034632 60.855632) (xy 221.065873 60.817565) (xy 221.089088 60.774134) (xy 221.103383 60.727009) + (xy 221.10821 60.678) (xy 221.107 60.0445) (xy 221.0445 59.982) (xy 220.3985 59.982) (xy 219.9905 59.982) + (xy 219.3445 59.982) (xy 219.282 60.0445) (xy 219.28079 60.678) (xy 206.925 60.678) (xy 206.925 58.878) + (xy 219.28079 58.878) (xy 219.282 59.5115) (xy 219.3445 59.574) (xy 219.9905 59.574) (xy 219.9905 58.6905) + (xy 220.3985 58.6905) (xy 220.3985 59.574) (xy 221.0445 59.574) (xy 221.107 59.5115) (xy 221.10821 58.878) + (xy 221.103383 58.828991) (xy 221.089088 58.781866) (xy 221.065873 58.738435) (xy 221.034632 58.700368) (xy 220.996565 58.669127) + (xy 220.953134 58.645912) (xy 220.906009 58.631617) (xy 220.857 58.62679) (xy 220.461 58.628) (xy 220.3985 58.6905) + (xy 219.9905 58.6905) (xy 219.928 58.628) (xy 219.532 58.62679) (xy 219.482991 58.631617) (xy 219.435866 58.645912) + (xy 219.392435 58.669127) (xy 219.354368 58.700368) (xy 219.323127 58.738435) (xy 219.299912 58.781866) (xy 219.285617 58.828991) + (xy 219.28079 58.878) (xy 206.925 58.878) (xy 206.925 58.173973) (xy 206.968693 58.150619) (xy 207.082895 58.056895) + (xy 207.176619 57.942693) (xy 207.246261 57.812401) (xy 207.289147 57.671026) (xy 207.3 57.560835) (xy 207.3 56.487165) + (xy 207.289147 56.376974) (xy 207.246261 56.235599) (xy 207.176619 56.105307) (xy 207.082895 55.991105) (xy 206.968692 55.897381) + (xy 206.8384 55.827739) (xy 206.697025 55.784853) (xy 206.55 55.770372) (xy 206.402974 55.784853) (xy 206.261599 55.827739) + (xy 206.131307 55.897381) (xy 206.017105 55.991105) (xy 205.923381 56.105308) (xy 205.853739 56.2356) (xy 205.810853 56.376975) + (xy 205.8 56.487166) (xy 205.3 56.487166) (xy 205.3 56.487165) (xy 205.289147 56.376974) (xy 205.246261 56.235599) + (xy 205.176619 56.105307) (xy 205.082895 55.991105) (xy 204.968692 55.897381) (xy 204.8384 55.827739) (xy 204.697025 55.784853) + (xy 204.55 55.770372) (xy 204.402974 55.784853) (xy 204.261599 55.827739) (xy 204.131307 55.897381) (xy 204.017105 55.991105) + (xy 203.923381 56.105308) (xy 203.853739 56.2356) (xy 203.810853 56.376975) (xy 203.8 56.487166) (xy 203.3 56.487166) + (xy 203.3 56.487165) (xy 203.289147 56.376974) (xy 203.246261 56.235599) (xy 203.176619 56.105307) (xy 203.082895 55.991105) + (xy 202.968692 55.897381) (xy 202.8384 55.827739) (xy 202.697025 55.784853) (xy 202.55 55.770372) (xy 202.402974 55.784853) + (xy 202.261599 55.827739) (xy 202.131307 55.897381) (xy 202.017105 55.991105) (xy 201.923381 56.105308) (xy 201.853739 56.2356) + (xy 201.810853 56.376975) (xy 201.8 56.487166) (xy 199.843 56.487166) (xy 199.843 54.709) (xy 202.22379 54.709) + (xy 202.228617 54.758009) (xy 202.242912 54.805134) (xy 202.266127 54.848565) (xy 202.297368 54.886632) (xy 202.335435 54.917873) + (xy 202.378866 54.941088) (xy 202.425991 54.955383) (xy 202.475 54.96021) (xy 202.871 54.959) (xy 202.9335 54.8965) + (xy 202.9335 54.013) (xy 203.3415 54.013) (xy 203.3415 54.8965) (xy 203.404 54.959) (xy 203.8 54.96021) + (xy 203.849009 54.955383) (xy 203.896134 54.941088) (xy 203.939565 54.917873) (xy 203.977632 54.886632) (xy 204.008873 54.848565) + (xy 204.032088 54.805134) (xy 204.046383 54.758009) (xy 204.05121 54.709) (xy 204.05 54.0755) (xy 203.9875 54.013) + (xy 203.3415 54.013) (xy 202.9335 54.013) (xy 202.2875 54.013) (xy 202.225 54.0755) (xy 202.22379 54.709) + (xy 199.843 54.709) (xy 199.843 52.909) (xy 202.22379 52.909) (xy 202.225 53.5425) (xy 202.2875 53.605) + (xy 202.9335 53.605) (xy 202.9335 52.7215) (xy 203.3415 52.7215) (xy 203.3415 53.605) (xy 203.9875 53.605) + (xy 204.05 53.5425) (xy 204.05121 52.909) (xy 204.046383 52.859991) (xy 204.032088 52.812866) (xy 204.008873 52.769435) + (xy 203.977632 52.731368) (xy 203.939565 52.700127) (xy 203.896134 52.676912) (xy 203.849009 52.662617) (xy 203.8 52.65779) + (xy 203.404 52.659) (xy 203.3415 52.7215) (xy 202.9335 52.7215) (xy 202.871 52.659) (xy 202.475 52.65779) + (xy 202.425991 52.662617) (xy 202.378866 52.676912) (xy 202.335435 52.700127) (xy 202.297368 52.731368) (xy 202.266127 52.769435) + (xy 202.242912 52.812866) (xy 202.228617 52.859991) (xy 202.22379 52.909) (xy 199.843 52.909) (xy 199.843 52.169) + (xy 202.22379 52.169) (xy 202.228617 52.218009) (xy 202.242912 52.265134) (xy 202.266127 52.308565) (xy 202.297368 52.346632) + (xy 202.335435 52.377873) (xy 202.378866 52.401088) (xy 202.425991 52.415383) (xy 202.475 52.42021) (xy 202.871 52.419) + (xy 202.9335 52.3565) (xy 202.9335 51.473) (xy 203.3415 51.473) (xy 203.3415 52.3565) (xy 203.404 52.419) + (xy 203.8 52.42021) (xy 203.849009 52.415383) (xy 203.896134 52.401088) (xy 203.939565 52.377873) (xy 203.977632 52.346632) + (xy 204.008873 52.308565) (xy 204.032088 52.265134) (xy 204.046383 52.218009) (xy 204.05121 52.169) (xy 204.05 51.5355) + (xy 203.9875 51.473) (xy 203.3415 51.473) (xy 202.9335 51.473) (xy 202.2875 51.473) (xy 202.225 51.5355) + (xy 202.22379 52.169) (xy 199.843 52.169) (xy 199.843 52.102561) (xy 199.897626 51.545449) (xy 200.056934 51.017795) + (xy 200.315697 50.531132) (xy 200.447928 50.369) (xy 202.22379 50.369) (xy 202.225 51.0025) (xy 202.2875 51.065) + (xy 202.9335 51.065) (xy 202.9335 50.1815) (xy 203.3415 50.1815) (xy 203.3415 51.065) (xy 203.9875 51.065) + (xy 204.05 51.0025) (xy 204.050732 50.618997) (xy 205.348791 50.618997) (xy 205.348791 51.919003) (xy 205.358422 52.016783) + (xy 205.386943 52.110806) (xy 205.433259 52.197458) (xy 205.495591 52.273409) (xy 205.571542 52.335741) (xy 205.658194 52.382057) + (xy 205.752217 52.410578) (xy 205.849997 52.420209) (xy 205.8875 52.420209) (xy 205.887501 52.657791) (xy 205.849997 52.657791) + (xy 205.752217 52.667422) (xy 205.658194 52.695943) (xy 205.571542 52.742259) (xy 205.495591 52.804591) (xy 205.433259 52.880542) + (xy 205.386943 52.967194) (xy 205.358422 53.061217) (xy 205.348791 53.158997) (xy 205.348791 54.459003) (xy 205.358422 54.556783) + (xy 205.386943 54.650806) (xy 205.433259 54.737458) (xy 205.495591 54.813409) (xy 205.571542 54.875741) (xy 205.658194 54.922057) + (xy 205.752217 54.950578) (xy 205.849997 54.960209) (xy 206.675003 54.960209) (xy 206.772783 54.950578) (xy 206.866806 54.922057) + (xy 206.953458 54.875741) (xy 207.029409 54.813409) (xy 207.091741 54.737458) (xy 207.138057 54.650806) (xy 207.166578 54.556783) + (xy 207.176209 54.459003) (xy 207.176209 54.184) (xy 207.191671 54.184) (xy 207.884233 54.876563) (xy 207.875 54.922981) + (xy 207.875 55.051019) (xy 207.899979 55.176598) (xy 207.948978 55.29489) (xy 208.020112 55.401351) (xy 208.110649 55.491888) + (xy 208.175001 55.534886) (xy 208.175001 55.874026) (xy 208.131307 55.897381) (xy 208.017105 55.991105) (xy 207.923381 56.105308) + (xy 207.853739 56.2356) (xy 207.810853 56.376975) (xy 207.8 56.487166) (xy 207.800001 57.560835) (xy 207.810854 57.671026) + (xy 207.85374 57.812401) (xy 207.923382 57.942693) (xy 208.017106 58.056895) (xy 208.131308 58.150619) (xy 208.2616 58.220261) + (xy 208.402975 58.263147) (xy 208.55 58.277628) (xy 208.697026 58.263147) (xy 208.838401 58.220261) (xy 208.968693 58.150619) + (xy 209.082895 58.056895) (xy 209.176619 57.942693) (xy 209.246261 57.812401) (xy 209.289147 57.671026) (xy 209.3 57.560835) + (xy 209.3 56.487166) (xy 209.8 56.487166) (xy 209.800001 57.560835) (xy 209.810854 57.671026) (xy 209.85374 57.812401) + (xy 209.923382 57.942693) (xy 210.017106 58.056895) (xy 210.131308 58.150619) (xy 210.2616 58.220261) (xy 210.402975 58.263147) + (xy 210.55 58.277628) (xy 210.697026 58.263147) (xy 210.838401 58.220261) (xy 210.968693 58.150619) (xy 211.082895 58.056895) + (xy 211.176619 57.942693) (xy 211.246261 57.812401) (xy 211.289147 57.671026) (xy 211.3 57.560835) (xy 211.3 56.487166) + (xy 211.8 56.487166) (xy 211.800001 57.560835) (xy 211.810854 57.671026) (xy 211.85374 57.812401) (xy 211.923382 57.942693) + (xy 212.017106 58.056895) (xy 212.131308 58.150619) (xy 212.2616 58.220261) (xy 212.402975 58.263147) (xy 212.55 58.277628) + (xy 212.697026 58.263147) (xy 212.838401 58.220261) (xy 212.968693 58.150619) (xy 213.082895 58.056895) (xy 213.176619 57.942693) + (xy 213.246261 57.812401) (xy 213.289147 57.671026) (xy 213.3 57.560835) (xy 213.3 57.228) (xy 213.8 57.228) + (xy 213.8 57.728) (xy 213.854209 57.870398) (xy 213.935157 57.999484) (xy 214.039733 58.110298) (xy 214.163919 58.198581) + (xy 214.235609 58.204925) (xy 214.346 58.180537) (xy 214.346 57.228) (xy 214.754 57.228) (xy 214.754 58.180537) + (xy 214.864391 58.204925) (xy 214.936081 58.198581) (xy 215.060267 58.110298) (xy 215.164843 57.999484) (xy 215.245791 57.870398) + (xy 215.3 57.728) (xy 215.3 57.228) (xy 214.754 57.228) (xy 214.346 57.228) (xy 213.8 57.228) + (xy 213.3 57.228) (xy 213.3 56.487165) (xy 213.289147 56.376974) (xy 213.271864 56.32) (xy 213.8 56.32) + (xy 213.8 56.82) (xy 214.346 56.82) (xy 214.346 55.867463) (xy 214.754 55.867463) (xy 214.754 56.82) + (xy 215.3 56.82) (xy 215.3 56.32) (xy 215.245791 56.177602) (xy 215.164843 56.048516) (xy 215.060267 55.937702) + (xy 214.936081 55.849419) (xy 214.864391 55.843075) (xy 214.754 55.867463) (xy 214.346 55.867463) (xy 214.235609 55.843075) + (xy 214.163919 55.849419) (xy 214.039733 55.937702) (xy 213.935157 56.048516) (xy 213.854209 56.177602) (xy 213.8 56.32) + (xy 213.271864 56.32) (xy 213.246261 56.235599) (xy 213.176619 56.105307) (xy 213.082895 55.991105) (xy 212.968692 55.897381) + (xy 212.8384 55.827739) (xy 212.697025 55.784853) (xy 212.55 55.770372) (xy 212.402974 55.784853) (xy 212.261599 55.827739) + (xy 212.131307 55.897381) (xy 212.017105 55.991105) (xy 211.923381 56.105308) (xy 211.853739 56.2356) (xy 211.810853 56.376975) + (xy 211.8 56.487166) (xy 211.3 56.487166) (xy 211.3 56.487165) (xy 211.289147 56.376974) (xy 211.246261 56.235599) + (xy 211.176619 56.105307) (xy 211.082895 55.991105) (xy 210.968692 55.897381) (xy 210.8384 55.827739) (xy 210.697025 55.784853) + (xy 210.55 55.770372) (xy 210.402974 55.784853) (xy 210.261599 55.827739) (xy 210.131307 55.897381) (xy 210.017105 55.991105) + (xy 209.923381 56.105308) (xy 209.853739 56.2356) (xy 209.810853 56.376975) (xy 209.8 56.487166) (xy 209.3 56.487166) + (xy 209.3 56.487165) (xy 209.289147 56.376974) (xy 209.246261 56.235599) (xy 209.176619 56.105307) (xy 209.082895 55.991105) + (xy 208.968692 55.897381) (xy 208.925 55.874027) (xy 208.925 55.501477) (xy 208.939351 55.491888) (xy 209.029888 55.401351) + (xy 209.101022 55.29489) (xy 209.150021 55.176598) (xy 209.175 55.051019) (xy 209.175 54.922981) (xy 209.174062 54.918267) + (xy 212.491329 51.601) (xy 215.433791 51.601) (xy 215.433791 53.301) (xy 215.438618 53.350008) (xy 215.452913 53.397134) + (xy 215.476127 53.440564) (xy 215.507368 53.478632) (xy 215.545436 53.509873) (xy 215.588866 53.533087) (xy 215.635992 53.547382) + (xy 215.685 53.552209) (xy 216.16 53.552209) (xy 216.160001 55.882044) (xy 216.131307 55.897381) (xy 216.017105 55.991105) + (xy 215.923381 56.105308) (xy 215.853739 56.2356) (xy 215.810853 56.376975) (xy 215.8 56.487166) (xy 215.800001 57.560835) + (xy 215.810854 57.671026) (xy 215.85374 57.812401) (xy 215.923382 57.942693) (xy 216.017106 58.056895) (xy 216.131308 58.150619) + (xy 216.2616 58.220261) (xy 216.402975 58.263147) (xy 216.55 58.277628) (xy 216.697026 58.263147) (xy 216.838401 58.220261) + (xy 216.968693 58.150619) (xy 217.082895 58.056895) (xy 217.176619 57.942693) (xy 217.20799 57.884) (xy 219.28079 57.884) + (xy 219.285617 57.933009) (xy 219.299912 57.980134) (xy 219.323127 58.023565) (xy 219.354368 58.061632) (xy 219.392435 58.092873) + (xy 219.435866 58.116088) (xy 219.482991 58.130383) (xy 219.532 58.13521) (xy 219.928 58.134) (xy 219.9905 58.0715) + (xy 219.9905 57.188) (xy 220.3985 57.188) (xy 220.3985 58.0715) (xy 220.461 58.134) (xy 220.857 58.13521) + (xy 220.906009 58.130383) (xy 220.953134 58.116088) (xy 220.996565 58.092873) (xy 221.034632 58.061632) (xy 221.065873 58.023565) + (xy 221.089088 57.980134) (xy 221.103383 57.933009) (xy 221.10821 57.884) (xy 221.107 57.2505) (xy 221.0445 57.188) + (xy 220.3985 57.188) (xy 219.9905 57.188) (xy 219.3445 57.188) (xy 219.282 57.2505) (xy 219.28079 57.884) + (xy 217.20799 57.884) (xy 217.246261 57.812401) (xy 217.289147 57.671026) (xy 217.3 57.560835) (xy 217.3 56.487165) + (xy 217.289147 56.376974) (xy 217.246261 56.235599) (xy 217.176619 56.105307) (xy 217.159133 56.084) (xy 219.28079 56.084) + (xy 219.282 56.7175) (xy 219.3445 56.78) (xy 219.9905 56.78) (xy 219.9905 55.8965) (xy 220.3985 55.8965) + (xy 220.3985 56.78) (xy 221.0445 56.78) (xy 221.107 56.7175) (xy 221.10821 56.084) (xy 221.103383 56.034991) + (xy 221.089088 55.987866) (xy 221.065873 55.944435) (xy 221.034632 55.906368) (xy 220.996565 55.875127) (xy 220.953134 55.851912) + (xy 220.906009 55.837617) (xy 220.857 55.83279) (xy 220.461 55.834) (xy 220.3985 55.8965) (xy 219.9905 55.8965) + (xy 219.928 55.834) (xy 219.532 55.83279) (xy 219.482991 55.837617) (xy 219.435866 55.851912) (xy 219.392435 55.875127) + (xy 219.354368 55.906368) (xy 219.323127 55.944435) (xy 219.299912 55.987866) (xy 219.285617 56.034991) (xy 219.28079 56.084) + (xy 217.159133 56.084) (xy 217.082895 55.991105) (xy 216.968692 55.897381) (xy 216.91 55.86601) (xy 216.91 53.552209) + (xy 217.385 53.552209) (xy 217.434008 53.547382) (xy 217.481134 53.533087) (xy 217.524564 53.509873) (xy 217.562632 53.478632) + (xy 217.593873 53.440564) (xy 217.617087 53.397134) (xy 217.631382 53.350008) (xy 217.636209 53.301) (xy 217.636209 51.601) + (xy 217.631382 51.551992) (xy 217.617087 51.504866) (xy 217.593873 51.461436) (xy 217.562632 51.423368) (xy 217.524564 51.392127) + (xy 217.481134 51.368913) (xy 217.434008 51.354618) (xy 217.385 51.349791) (xy 215.685 51.349791) (xy 215.635992 51.354618) + (xy 215.588866 51.368913) (xy 215.545436 51.392127) (xy 215.507368 51.423368) (xy 215.476127 51.461436) (xy 215.452913 51.504866) + (xy 215.438618 51.551992) (xy 215.433791 51.601) (xy 212.491329 51.601) (xy 213.08333 51.009) (xy 223.095671 51.009) + (xy 223.272001 51.185331) (xy 223.272001 51.476791) (xy 222.797 51.476791) (xy 222.747992 51.481618) (xy 222.700866 51.495913) + (xy 222.657436 51.519127) (xy 222.619368 51.550368) (xy 222.588127 51.588436) (xy 222.564913 51.631866) (xy 222.550618 51.678992) + (xy 222.545791 51.728) (xy 222.545791 53.428) (xy 222.550618 53.477008) (xy 222.564913 53.524134) (xy 222.588127 53.567564) + (xy 222.619368 53.605632) (xy 222.657436 53.636873) (xy 222.700866 53.660087) (xy 222.747992 53.674382) (xy 222.797 53.679209) + (xy 223.272001 53.679209) (xy 223.272001 54.283574) (xy 223.270186 54.302) (xy 223.276661 54.367737) (xy 223.277427 54.375513) + (xy 223.292127 54.423971) (xy 223.29887 54.4462) (xy 223.332951 54.50996) (xy 223.333692 54.511347) (xy 223.380553 54.568448) + (xy 223.394862 54.580191) (xy 228.21767 59.403) (xy 224.233209 59.403) (xy 224.233209 59.127997) (xy 224.223578 59.030217) + (xy 224.195057 58.936194) (xy 224.148741 58.849542) (xy 224.086409 58.773591) (xy 224.010458 58.711259) (xy 223.923806 58.664943) + (xy 223.829783 58.636422) (xy 223.732003 58.626791) (xy 223.6945 58.626791) (xy 223.6945 58.135209) (xy 223.732003 58.135209) + (xy 223.829783 58.125578) (xy 223.923806 58.097057) (xy 224.010458 58.050741) (xy 224.086409 57.988409) (xy 224.148741 57.912458) + (xy 224.195057 57.825806) (xy 224.223578 57.731783) (xy 224.233209 57.634003) (xy 224.233209 56.333997) (xy 224.223578 56.236217) + (xy 224.195057 56.142194) (xy 224.148741 56.055542) (xy 224.086409 55.979591) (xy 224.010458 55.917259) (xy 223.923806 55.870943) + (xy 223.829783 55.842422) (xy 223.732003 55.832791) (xy 222.906997 55.832791) (xy 222.809217 55.842422) (xy 222.715194 55.870943) + (xy 222.628542 55.917259) (xy 222.552591 55.979591) (xy 222.490259 56.055542) (xy 222.443943 56.142194) (xy 222.415422 56.236217) + (xy 222.405791 56.333997) (xy 222.405791 57.634003) (xy 222.415422 57.731783) (xy 222.443943 57.825806) (xy 222.490259 57.912458) + (xy 222.552591 57.988409) (xy 222.628542 58.050741) (xy 222.715194 58.097057) (xy 222.809217 58.125578) (xy 222.906997 58.135209) + (xy 222.9445 58.135209) (xy 222.944501 58.626791) (xy 222.906997 58.626791) (xy 222.809217 58.636422) (xy 222.715194 58.664943) + (xy 222.628542 58.711259) (xy 222.552591 58.773591) (xy 222.490259 58.849542) (xy 222.443943 58.936194) (xy 222.415422 59.030217) + (xy 222.405791 59.127997) (xy 222.405791 60.428003) (xy 222.415422 60.525783) (xy 222.443943 60.619806) (xy 222.490259 60.706458) + (xy 222.552591 60.782409) (xy 222.628542 60.844741) (xy 222.715194 60.891057) (xy 222.809217 60.919578) (xy 222.906997 60.929209) + (xy 223.732003 60.929209) (xy 223.829783 60.919578) (xy 223.923806 60.891057) (xy 224.010458 60.844741) (xy 224.086409 60.782409) + (xy 224.148741 60.706458) (xy 224.195057 60.619806) (xy 224.223578 60.525783) (xy 224.233209 60.428003) (xy 224.233209 60.153) + (xy 227.583837 60.153) (xy 227.530978 60.23211) (xy 227.481979 60.350402) (xy 227.457 60.475981) (xy 227.457 60.604019) + (xy 227.481979 60.729598) (xy 227.530978 60.84789) (xy 227.602112 60.954351) (xy 227.692649 61.044888) (xy 227.735325 61.073403) + (xy 227.743375 62.362449) (xy 227.73298 62.37098) (xy 227.724 62.381922) (xy 227.71502 62.37098) (xy 227.693884 62.353634) + (xy 227.693574 62.350487) (xy 227.672131 62.2798) (xy 227.637309 62.214653) (xy 227.590448 62.157552) (xy 227.576139 62.145809) + (xy 227.115195 61.684866) (xy 227.103448 61.670552) (xy 227.046347 61.623691) (xy 226.9812 61.588869) (xy 226.910513 61.567426) + (xy 226.855419 61.562) (xy 226.855416 61.562) (xy 226.837 61.560186) (xy 226.818584 61.562) (xy 209.605239 61.562) + (xy 209.582351 61.539112) (xy 209.47589 61.467978) (xy 209.357598 61.418979) (xy 209.232019 61.394) (xy 209.103981 61.394) + (xy 208.978402 61.418979) (xy 208.86011 61.467978) (xy 208.753649 61.539112) (xy 208.663112 61.629649) (xy 208.591978 61.73611) + (xy 208.542979 61.854402) (xy 208.518 61.979981) (xy 208.518 62.108019) (xy 208.542979 62.233598) (xy 208.591978 62.35189) + (xy 208.663112 62.458351) (xy 208.753649 62.548888) (xy 208.86011 62.620022) (xy 208.978402 62.669021) (xy 209.103981 62.694) + (xy 209.232019 62.694) (xy 209.357598 62.669021) (xy 209.47589 62.620022) (xy 209.582351 62.548888) (xy 209.672888 62.458351) + (xy 209.744022 62.35189) (xy 209.760545 62.312) (xy 226.681671 62.312) (xy 226.855355 62.485684) (xy 226.851428 62.493031) + (xy 226.83002 62.563605) (xy 226.822791 62.637) (xy 226.822791 63.887) (xy 226.83002 63.960395) (xy 226.851428 64.030969) + (xy 226.886194 64.096011) (xy 226.93298 64.15302) (xy 226.989989 64.199806) (xy 227.055031 64.234572) (xy 227.125605 64.25598) + (xy 227.199 64.263209) (xy 227.449 64.263209) (xy 227.522395 64.25598) (xy 227.592969 64.234572) (xy 227.658011 64.199806) + (xy 227.71502 64.15302) (xy 227.724 64.142078) (xy 227.73298 64.15302) (xy 227.789989 64.199806) (xy 227.855031 64.234572) + (xy 227.925605 64.25598) (xy 227.999 64.263209) (xy 228.249 64.263209) (xy 228.322395 64.25598) (xy 228.392969 64.234572) + (xy 228.458011 64.199806) (xy 228.51502 64.15302) (xy 228.524 64.142078) (xy 228.53298 64.15302) (xy 228.589989 64.199806) + (xy 228.655031 64.234572) (xy 228.725605 64.25598) (xy 228.799 64.263209) (xy 229.049 64.263209) (xy 229.122395 64.25598) + (xy 229.192969 64.234572) (xy 229.258011 64.199806) (xy 229.28587 64.176943) (xy 229.295103 64.188359) (xy 229.332947 64.219871) + (xy 229.376211 64.243395) (xy 229.423233 64.258027) (xy 229.4615 64.262) (xy 229.524 64.1995) (xy 229.524 63.466) + (xy 229.5 63.466) (xy 229.5 63.058) (xy 229.524 63.058) (xy 229.524 62.3245) (xy 229.4615 62.262) + (xy 229.423233 62.265973) (xy 229.376211 62.280605) (xy 229.332947 62.304129) (xy 229.295103 62.335641) (xy 229.28587 62.347057) + (xy 229.258011 62.324194) (xy 229.192969 62.289428) (xy 229.122395 62.26802) (xy 229.049 62.260791) (xy 228.799 62.260791) + (xy 228.725605 62.26802) (xy 228.655031 62.289428) (xy 228.589989 62.324194) (xy 228.53298 62.37098) (xy 228.524 62.381922) + (xy 228.51502 62.37098) (xy 228.493331 62.35318) (xy 228.48531 61.068969) (xy 228.521351 61.044888) (xy 228.611888 60.954351) + (xy 228.683022 60.84789) (xy 228.732021 60.729598) (xy 228.757 60.604019) (xy 228.757 60.475981) (xy 228.732021 60.350402) + (xy 228.683022 60.23211) (xy 228.630163 60.153) (xy 229.104583 60.153) (xy 229.122999 60.154814) (xy 229.141415 60.153) + (xy 229.988819 60.153) (xy 230.015112 60.192351) (xy 230.105649 60.282888) (xy 230.145 60.309181) (xy 230.145001 62.329066) + (xy 230.115053 62.304129) (xy 230.071789 62.280605) (xy 230.024767 62.265973) (xy 229.9865 62.262) (xy 229.924 62.3245) + (xy 229.924 63.058) (xy 229.948 63.058) (xy 229.948 63.466) (xy 229.924 63.466) (xy 229.924 64.1995) + (xy 229.9865 64.262) (xy 230.024767 64.258027) (xy 230.071789 64.243395) (xy 230.115053 64.219871) (xy 230.152897 64.188359) + (xy 230.16213 64.176943) (xy 230.189989 64.199806) (xy 230.255031 64.234572) (xy 230.325605 64.25598) (xy 230.399 64.263209) + (xy 230.649 64.263209) (xy 230.722395 64.25598) (xy 230.792969 64.234572) (xy 230.858011 64.199806) (xy 230.91502 64.15302) + (xy 230.924 64.142078) (xy 230.93298 64.15302) (xy 230.989989 64.199806) (xy 231.055031 64.234572) (xy 231.125605 64.25598) + (xy 231.199 64.263209) (xy 231.449 64.263209) (xy 231.522395 64.25598) (xy 231.592969 64.234572) (xy 231.658011 64.199806) + (xy 231.71502 64.15302) (xy 231.724 64.142078) (xy 231.73298 64.15302) (xy 231.789989 64.199806) (xy 231.855031 64.234572) + (xy 231.925605 64.25598) (xy 231.999 64.263209) (xy 232.249 64.263209) (xy 232.322395 64.25598) (xy 232.392969 64.234572) + (xy 232.458011 64.199806) (xy 232.51502 64.15302) (xy 232.524 64.142078) (xy 232.53298 64.15302) (xy 232.589989 64.199806) + (xy 232.655031 64.234572) (xy 232.725605 64.25598) (xy 232.799 64.263209) (xy 233.049 64.263209) (xy 233.122395 64.25598) + (xy 233.192969 64.234572) (xy 233.258011 64.199806) (xy 233.31502 64.15302) (xy 233.361806 64.096011) (xy 233.396572 64.030969) + (xy 233.41798 63.960395) (xy 233.425209 63.887) (xy 233.425209 62.637) (xy 233.41798 62.563605) (xy 233.396572 62.493031) + (xy 233.361806 62.427989) (xy 233.31502 62.37098) (xy 233.258011 62.324194) (xy 233.192969 62.289428) (xy 233.122395 62.26802) + (xy 233.049 62.260791) (xy 232.799 62.260791) (xy 232.725605 62.26802) (xy 232.655031 62.289428) (xy 232.589989 62.324194) + (xy 232.53298 62.37098) (xy 232.524 62.381922) (xy 232.51502 62.37098) (xy 232.458011 62.324194) (xy 232.392969 62.289428) + (xy 232.322395 62.26802) (xy 232.249 62.260791) (xy 231.999 62.260791) (xy 231.925605 62.26802) (xy 231.855031 62.289428) + (xy 231.789989 62.324194) (xy 231.73298 62.37098) (xy 231.724 62.381922) (xy 231.71502 62.37098) (xy 231.658011 62.324194) + (xy 231.592969 62.289428) (xy 231.522395 62.26802) (xy 231.449 62.260791) (xy 231.199 62.260791) (xy 231.125605 62.26802) + (xy 231.055031 62.289428) (xy 230.989989 62.324194) (xy 230.93298 62.37098) (xy 230.924 62.381922) (xy 230.91502 62.37098) + (xy 230.895 62.35455) (xy 230.895 60.309181) (xy 230.934351 60.282888) (xy 231.024888 60.192351) (xy 231.096022 60.08589) + (xy 231.145021 59.967598) (xy 231.17 59.842019) (xy 231.17 59.713981) (xy 231.145021 59.588402) (xy 231.096022 59.47011) + (xy 231.024888 59.363649) (xy 230.934351 59.273112) (xy 230.82789 59.201978) (xy 230.709598 59.152979) (xy 230.584019 59.128) + (xy 230.455981 59.128) (xy 230.330402 59.152979) (xy 230.21211 59.201978) (xy 230.105649 59.273112) (xy 230.015112 59.363649) + (xy 229.988819 59.403) (xy 229.278329 59.403) (xy 229.274193 59.398864) (xy 229.274188 59.398858) (xy 224.022 54.146671) + (xy 224.022 53.679209) (xy 224.497 53.679209) (xy 224.546008 53.674382) (xy 224.593134 53.660087) (xy 224.636564 53.636873) + (xy 224.674632 53.605632) (xy 224.705873 53.567564) (xy 224.729087 53.524134) (xy 224.743382 53.477008) (xy 224.748209 53.428) + (xy 224.748209 52.948583) (xy 225.151292 52.948583) (xy 225.24349 53.143519) (xy 225.371947 53.316722) (xy 225.531726 53.461537) + (xy 225.716686 53.572398) (xy 225.816419 53.613697) (xy 225.983 53.595246) (xy 225.983 52.782) (xy 226.391 52.782) + (xy 226.391 53.595246) (xy 226.557581 53.613697) (xy 226.657314 53.572398) (xy 226.842274 53.461537) (xy 227.002053 53.316722) + (xy 227.13051 53.143519) (xy 227.222708 52.948583) (xy 227.205429 52.782) (xy 226.391 52.782) (xy 225.983 52.782) + (xy 225.168571 52.782) (xy 225.151292 52.948583) (xy 224.748209 52.948583) (xy 224.748209 52.469659) (xy 227.627 52.469659) + (xy 227.627 52.686341) (xy 227.669273 52.898858) (xy 227.752193 53.099045) (xy 227.872575 53.279209) (xy 228.025791 53.432425) + (xy 228.205955 53.552807) (xy 228.406142 53.635727) (xy 228.618659 53.678) (xy 228.835341 53.678) (xy 229.047858 53.635727) + (xy 229.248045 53.552807) (xy 229.428209 53.432425) (xy 229.581425 53.279209) (xy 229.701807 53.099045) (xy 229.784727 52.898858) + (xy 229.827 52.686341) (xy 229.827 52.469659) (xy 229.784727 52.257142) (xy 229.701807 52.056955) (xy 229.581425 51.876791) + (xy 229.428209 51.723575) (xy 229.331566 51.659) (xy 230.662434 51.659) (xy 230.565791 51.723575) (xy 230.412575 51.876791) + (xy 230.292193 52.056955) (xy 230.209273 52.257142) (xy 230.167 52.469659) (xy 230.167 52.686341) (xy 230.209273 52.898858) + (xy 230.292193 53.099045) (xy 230.412575 53.279209) (xy 230.565791 53.432425) (xy 230.745955 53.552807) (xy 230.817001 53.582235) + (xy 230.817001 54.025896) (xy 230.814824 54.048) (xy 230.823512 54.136215) (xy 230.849243 54.22104) (xy 230.891029 54.299216) + (xy 230.933172 54.350567) (xy 230.933177 54.350572) (xy 230.947264 54.367737) (xy 230.964429 54.381824) (xy 236.42 59.837396) + (xy 236.420001 63.073105) (xy 236.0595 62.712605) (xy 236.0595 62.634981) (xy 236.034521 62.509402) (xy 235.985522 62.39111) + (xy 235.914388 62.284649) (xy 235.823851 62.194112) (xy 235.71739 62.122978) (xy 235.599098 62.073979) (xy 235.473519 62.049) + (xy 235.345481 62.049) (xy 235.219902 62.073979) (xy 235.10161 62.122978) (xy 234.995149 62.194112) (xy 234.904612 62.284649) + (xy 234.833478 62.39111) (xy 234.784479 62.509402) (xy 234.7595 62.634981) (xy 234.7595 62.763019) (xy 234.784479 62.888598) + (xy 234.833478 63.00689) (xy 234.904612 63.113351) (xy 234.995149 63.203888) (xy 235.10161 63.275022) (xy 235.219902 63.324021) + (xy 235.345481 63.349) (xy 235.423105 63.349) (xy 235.785001 63.710897) (xy 235.785 63.973104) (xy 235.571105 64.187) + (xy 235.110198 64.187) (xy 235.067969 64.164428) (xy 234.997395 64.14302) (xy 234.924 64.135791) (xy 233.674 64.135791) + (xy 233.600605 64.14302) (xy 233.530031 64.164428) (xy 233.464989 64.199194) (xy 233.40798 64.24598) (xy 233.361194 64.302989) + (xy 233.326428 64.368031) (xy 233.30502 64.438605) (xy 233.297791 64.512) (xy 233.297791 64.762) (xy 233.30502 64.835395) + (xy 233.326428 64.905969) (xy 233.361194 64.971011) (xy 233.40798 65.02802) (xy 233.418922 65.037) (xy 233.40798 65.04598) + (xy 233.361194 65.102989) (xy 233.326428 65.168031) (xy 233.30502 65.238605) (xy 233.297791 65.312) (xy 233.297791 65.562) + (xy 233.30502 65.635395) (xy 233.326428 65.705969) (xy 233.361194 65.771011) (xy 233.40798 65.82802) (xy 233.418922 65.837) + (xy 233.40798 65.84598) (xy 233.361194 65.902989) (xy 233.326428 65.968031) (xy 233.30502 66.038605) (xy 233.297791 66.112) + (xy 233.297791 66.362) (xy 233.30502 66.435395) (xy 233.326428 66.505969) (xy 233.361194 66.571011) (xy 233.40798 66.62802) + (xy 233.418922 66.637) (xy 233.40798 66.64598) (xy 233.361194 66.702989) (xy 233.326428 66.768031) (xy 233.30502 66.838605) + (xy 233.297791 66.912) (xy 233.297791 67.162) (xy 233.30502 67.235395) (xy 233.326428 67.305969) (xy 233.361194 67.371011) + (xy 233.40798 67.42802) (xy 233.418922 67.437) (xy 233.40798 67.44598) (xy 233.361194 67.502989) (xy 233.326428 67.568031) + (xy 233.30502 67.638605) (xy 233.297791 67.712) (xy 233.297791 67.962) (xy 233.30502 68.035395) (xy 233.326428 68.105969) + (xy 233.361194 68.171011) (xy 233.40798 68.22802) (xy 233.418922 68.237) (xy 233.40798 68.24598) (xy 233.361194 68.302989) + (xy 233.326428 68.368031) (xy 233.30502 68.438605) (xy 233.297791 68.512) (xy 233.297791 68.762) (xy 233.30502 68.835395) + (xy 233.326428 68.905969) (xy 233.361194 68.971011) (xy 233.40798 69.02802) (xy 233.418922 69.037) (xy 233.40798 69.04598) + (xy 233.361194 69.102989) (xy 233.326428 69.168031) (xy 233.30502 69.238605) (xy 233.297791 69.312) (xy 233.297791 69.562) + (xy 233.30502 69.635395) (xy 233.326428 69.705969) (xy 233.361194 69.771011) (xy 233.40798 69.82802) (xy 233.418922 69.837) + (xy 233.40798 69.84598) (xy 233.361194 69.902989) (xy 233.326428 69.968031) (xy 233.30502 70.038605) (xy 233.297791 70.112) + (xy 233.297791 70.362) (xy 233.30502 70.435395) (xy 233.326428 70.505969) (xy 233.361194 70.571011) (xy 233.40798 70.62802) + (xy 233.464989 70.674806) (xy 233.530031 70.709572) (xy 233.600605 70.73098) (xy 233.674 70.738209) (xy 234.924 70.738209) + (xy 234.997395 70.73098) (xy 235.067969 70.709572) (xy 235.133011 70.674806) (xy 235.148615 70.662) (xy 237.13496 70.662) + (xy 237.218 70.74504) (xy 237.218 70.858019) (xy 237.242979 70.983598) (xy 237.291978 71.10189) (xy 237.363112 71.208351) + (xy 237.453649 71.298888) (xy 237.56011 71.370022) (xy 237.678402 71.419021) (xy 237.803981 71.444) (xy 237.932019 71.444) + (xy 238.057598 71.419021) (xy 238.17589 71.370022) (xy 238.282351 71.298888) (xy 238.372888 71.208351) (xy 238.444022 71.10189) + (xy 238.493021 70.983598) (xy 238.518 70.858019) (xy 238.518 70.729981) (xy 238.493021 70.604402) (xy 238.444022 70.48611) + (xy 238.372888 70.379649) (xy 238.282351 70.289112) (xy 238.17589 70.217978) (xy 238.057598 70.168979) (xy 237.932019 70.144) + (xy 237.81904 70.144) (xy 237.626283 69.951243) (xy 237.612974 69.935026) (xy 237.54826 69.881916) (xy 237.474427 69.842452) + (xy 237.394314 69.81815) (xy 237.331874 69.812) (xy 237.331867 69.812) (xy 237.311 69.809945) (xy 237.290133 69.812) + (xy 236.226399 69.812) (xy 236.293737 69.756737) (xy 236.307829 69.739566) (xy 238.569572 67.477824) (xy 238.586737 67.463737) + (xy 238.600824 67.446572) (xy 238.600828 67.446568) (xy 238.642971 67.395217) (xy 238.684757 67.317041) (xy 238.690321 67.298699) + (xy 238.710489 67.232215) (xy 238.717 67.166105) (xy 238.717 67.166094) (xy 238.719176 67.144) (xy 238.717 67.121906) + (xy 238.717 65.115339) (xy 238.763112 65.184351) (xy 238.853649 65.274888) (xy 238.96011 65.346022) (xy 239.078402 65.395021) + (xy 239.203981 65.42) (xy 239.332019 65.42) (xy 239.457598 65.395021) (xy 239.57589 65.346022) (xy 239.682351 65.274888) + (xy 239.772888 65.184351) (xy 239.844022 65.07789) (xy 239.893021 64.959598) (xy 239.918 64.834019) (xy 239.918 64.705981) + (xy 239.893021 64.580402) (xy 239.844022 64.46211) (xy 239.772888 64.355649) (xy 239.682351 64.265112) (xy 239.643 64.238819) + (xy 239.643 63.726) (xy 240.48979 63.726) (xy 240.494617 63.775009) (xy 240.508912 63.822134) (xy 240.532127 63.865565) + (xy 240.563368 63.903632) (xy 240.601435 63.934873) (xy 240.644866 63.958088) (xy 240.691991 63.972383) (xy 240.741 63.97721) + (xy 241.137 63.976) (xy 241.1995 63.9135) (xy 241.1995 63.03) (xy 241.6075 63.03) (xy 241.6075 63.9135) + (xy 241.67 63.976) (xy 242.066 63.97721) (xy 242.115009 63.972383) (xy 242.162134 63.958088) (xy 242.205565 63.934873) + (xy 242.243632 63.903632) (xy 242.274873 63.865565) (xy 242.298088 63.822134) (xy 242.312383 63.775009) (xy 242.31721 63.726) + (xy 242.316 63.0925) (xy 242.2535 63.03) (xy 241.6075 63.03) (xy 241.1995 63.03) (xy 240.5535 63.03) + (xy 240.491 63.0925) (xy 240.48979 63.726) (xy 239.643 63.726) (xy 239.643 61.926) (xy 240.48979 61.926) + (xy 240.491 62.5595) (xy 240.5535 62.622) (xy 241.1995 62.622) (xy 241.1995 61.7385) (xy 241.6075 61.7385) + (xy 241.6075 62.622) (xy 242.2535 62.622) (xy 242.316 62.5595) (xy 242.31721 61.926) (xy 242.312383 61.876991) + (xy 242.298088 61.829866) (xy 242.274873 61.786435) (xy 242.243632 61.748368) (xy 242.205565 61.717127) (xy 242.162134 61.693912) + (xy 242.115009 61.679617) (xy 242.066 61.67479) (xy 241.67 61.676) (xy 241.6075 61.7385) (xy 241.1995 61.7385) + (xy 241.137 61.676) (xy 240.741 61.67479) (xy 240.691991 61.679617) (xy 240.644866 61.693912) (xy 240.601435 61.717127) + (xy 240.563368 61.748368) (xy 240.532127 61.786435) (xy 240.508912 61.829866) (xy 240.494617 61.876991) (xy 240.48979 61.926) + (xy 239.643 61.926) (xy 239.643 60.63) (xy 240.48979 60.63) (xy 240.494617 60.679009) (xy 240.508912 60.726134) + (xy 240.532127 60.769565) (xy 240.563368 60.807632) (xy 240.601435 60.838873) (xy 240.644866 60.862088) (xy 240.691991 60.876383) + (xy 240.741 60.88121) (xy 241.137 60.88) (xy 241.1995 60.8175) (xy 241.1995 59.934) (xy 241.6075 59.934) + (xy 241.6075 60.8175) (xy 241.67 60.88) (xy 242.066 60.88121) (xy 242.115009 60.876383) (xy 242.162134 60.862088) + (xy 242.205565 60.838873) (xy 242.243632 60.807632) (xy 242.274873 60.769565) (xy 242.298088 60.726134) (xy 242.312383 60.679009) + (xy 242.31721 60.63) (xy 242.316 59.9965) (xy 242.2535 59.934) (xy 241.6075 59.934) (xy 241.1995 59.934) + (xy 240.5535 59.934) (xy 240.491 59.9965) (xy 240.48979 60.63) (xy 239.643 60.63) (xy 239.643 58.83) + (xy 240.48979 58.83) (xy 240.491 59.4635) (xy 240.5535 59.526) (xy 241.1995 59.526) (xy 241.1995 58.6425) + (xy 241.6075 58.6425) (xy 241.6075 59.526) (xy 242.2535 59.526) (xy 242.316 59.4635) (xy 242.316732 59.079997) + (xy 243.614791 59.079997) (xy 243.614791 60.380003) (xy 243.624422 60.477783) (xy 243.652943 60.571806) (xy 243.699259 60.658458) + (xy 243.761591 60.734409) (xy 243.837542 60.796741) (xy 243.924194 60.843057) (xy 244.018217 60.871578) (xy 244.115997 60.881209) + (xy 244.1535 60.881209) (xy 244.153501 61.674791) (xy 244.115997 61.674791) (xy 244.018217 61.684422) (xy 243.924194 61.712943) + (xy 243.837542 61.759259) (xy 243.761591 61.821591) (xy 243.699259 61.897542) (xy 243.652943 61.984194) (xy 243.624422 62.078217) + (xy 243.614791 62.175997) (xy 243.614791 63.476003) (xy 243.624422 63.573783) (xy 243.652943 63.667806) (xy 243.699259 63.754458) + (xy 243.761591 63.830409) (xy 243.837542 63.892741) (xy 243.924194 63.939057) (xy 244.018217 63.967578) (xy 244.115997 63.977209) + (xy 244.1535 63.977209) (xy 244.153501 66.602318) (xy 244.114149 66.628612) (xy 244.023612 66.719149) (xy 243.952478 66.82561) + (xy 243.903479 66.943902) (xy 243.8785 67.069481) (xy 243.8785 67.197519) (xy 243.903479 67.323098) (xy 243.952478 67.44139) + (xy 244.023612 67.547851) (xy 244.114149 67.638388) (xy 244.22061 67.709522) (xy 244.338902 67.758521) (xy 244.464481 67.7835) + (xy 244.592519 67.7835) (xy 244.621422 67.777751) (xy 248.988 72.14433) (xy 248.988001 73.185791) (xy 248.737999 73.185791) + (xy 248.640218 73.195422) (xy 248.546195 73.223943) (xy 248.459543 73.27026) (xy 248.383591 73.332591) (xy 248.32126 73.408543) + (xy 248.274943 73.495195) (xy 248.246422 73.589218) (xy 248.236791 73.686999) (xy 248.236791 74.487001) (xy 248.246422 74.584782) + (xy 248.274943 74.678805) (xy 248.32126 74.765457) (xy 248.383591 74.841409) (xy 248.459543 74.90374) (xy 248.546195 74.950057) + (xy 248.640218 74.978578) (xy 248.737999 74.988209) (xy 249.988001 74.988209) (xy 250.085782 74.978578) (xy 250.179805 74.950057) + (xy 250.266457 74.90374) (xy 250.342409 74.841409) (xy 250.40474 74.765457) (xy 250.451057 74.678805) (xy 250.479578 74.584782) + (xy 250.489209 74.487001) (xy 250.489209 74.462) (xy 250.776791 74.462) (xy 250.776791 74.487001) (xy 250.786422 74.584782) + (xy 250.814943 74.678805) (xy 250.86126 74.765457) (xy 250.923591 74.841409) (xy 250.999543 74.90374) (xy 251.086195 74.950057) + (xy 251.180218 74.978578) (xy 251.277999 74.988209) (xy 252.528001 74.988209) (xy 252.625782 74.978578) (xy 252.719805 74.950057) + (xy 252.806457 74.90374) (xy 252.882409 74.841409) (xy 252.94474 74.765457) (xy 252.991057 74.678805) (xy 253.019578 74.584782) + (xy 253.029209 74.487001) (xy 253.029209 73.686999) (xy 253.019578 73.589218) (xy 252.991057 73.495195) (xy 252.94474 73.408543) + (xy 252.882409 73.332591) (xy 252.806457 73.27026) (xy 252.719805 73.223943) (xy 252.625782 73.195422) (xy 252.528001 73.185791) + (xy 251.277999 73.185791) (xy 251.180218 73.195422) (xy 251.086195 73.223943) (xy 250.999543 73.27026) (xy 250.923591 73.332591) + (xy 250.86126 73.408543) (xy 250.814943 73.495195) (xy 250.786422 73.589218) (xy 250.776791 73.686999) (xy 250.776791 73.712) + (xy 250.489209 73.712) (xy 250.489209 73.686999) (xy 250.479578 73.589218) (xy 250.451057 73.495195) (xy 250.40474 73.408543) + (xy 250.342409 73.332591) (xy 250.266457 73.27026) (xy 250.179805 73.223943) (xy 250.085782 73.195422) (xy 249.988001 73.185791) + (xy 249.738 73.185791) (xy 249.738 72.007415) (xy 249.739814 71.988999) (xy 249.736325 71.953573) (xy 249.732574 71.915487) + (xy 249.711131 71.8448) (xy 249.683629 71.793347) (xy 249.676309 71.779652) (xy 249.641188 71.736858) (xy 249.629448 71.722552) + (xy 249.61514 71.71081) (xy 245.165783 67.261454) (xy 245.1785 67.197519) (xy 245.1785 67.069481) (xy 245.153521 66.943902) + (xy 245.104522 66.82561) (xy 245.033388 66.719149) (xy 244.942851 66.628612) (xy 244.9035 66.602319) (xy 244.9035 63.977209) + (xy 244.941003 63.977209) (xy 245.038783 63.967578) (xy 245.132806 63.939057) (xy 245.219458 63.892741) (xy 245.295409 63.830409) + (xy 245.357741 63.754458) (xy 245.404057 63.667806) (xy 245.432578 63.573783) (xy 245.442209 63.476003) (xy 245.442209 62.175997) + (xy 245.432578 62.078217) (xy 245.404057 61.984194) (xy 245.357741 61.897542) (xy 245.295409 61.821591) (xy 245.219458 61.759259) + (xy 245.132806 61.712943) (xy 245.038783 61.684422) (xy 244.941003 61.674791) (xy 244.9035 61.674791) (xy 244.9035 60.881209) + (xy 244.941003 60.881209) (xy 245.038783 60.871578) (xy 245.132806 60.843057) (xy 245.219458 60.796741) (xy 245.295409 60.734409) + (xy 245.357741 60.658458) (xy 245.404057 60.571806) (xy 245.432578 60.477783) (xy 245.442209 60.380003) (xy 245.442209 60.192) + (xy 247.791791 60.192) (xy 247.791791 60.342) (xy 247.796618 60.391008) (xy 247.810913 60.438134) (xy 247.834127 60.481564) + (xy 247.865368 60.519632) (xy 247.903436 60.550873) (xy 247.946866 60.574087) (xy 247.978494 60.583681) (xy 247.951124 60.612856) + (xy 247.870476 60.742313) (xy 247.861449 60.76855) (xy 247.885329 60.883) (xy 248.589 60.883) (xy 248.589 60.863) + (xy 248.997 60.863) (xy 248.997 60.883) (xy 249.700671 60.883) (xy 249.724551 60.76855) (xy 249.715524 60.742313) + (xy 249.634876 60.612856) (xy 249.607506 60.583681) (xy 249.639134 60.574087) (xy 249.682564 60.550873) (xy 249.720632 60.519632) + (xy 249.751873 60.481564) (xy 249.775087 60.438134) (xy 249.789382 60.391008) (xy 249.794209 60.342) (xy 249.794209 59.292) + (xy 249.789382 59.242992) (xy 249.775087 59.195866) (xy 249.751873 59.152436) (xy 249.720632 59.114368) (xy 249.682564 59.083127) + (xy 249.639134 59.059913) (xy 249.592008 59.045618) (xy 249.543 59.040791) (xy 248.043 59.040791) (xy 247.993992 59.045618) + (xy 247.946866 59.059913) (xy 247.903436 59.083127) (xy 247.865368 59.114368) (xy 247.834127 59.152436) (xy 247.810913 59.195866) + (xy 247.796618 59.242992) (xy 247.791791 59.292) (xy 247.791791 59.442) (xy 245.442209 59.442) (xy 245.442209 59.079997) + (xy 245.432578 58.982217) (xy 245.404057 58.888194) (xy 245.357741 58.801542) (xy 245.295409 58.725591) (xy 245.219458 58.663259) + (xy 245.132806 58.616943) (xy 245.038783 58.588422) (xy 244.941003 58.578791) (xy 244.115997 58.578791) (xy 244.018217 58.588422) + (xy 243.924194 58.616943) (xy 243.837542 58.663259) (xy 243.761591 58.725591) (xy 243.699259 58.801542) (xy 243.652943 58.888194) + (xy 243.624422 58.982217) (xy 243.614791 59.079997) (xy 242.316732 59.079997) (xy 242.31721 58.83) (xy 242.312383 58.780991) + (xy 242.298088 58.733866) (xy 242.274873 58.690435) (xy 242.243632 58.652368) (xy 242.205565 58.621127) (xy 242.162134 58.597912) + (xy 242.115009 58.583617) (xy 242.066 58.57879) (xy 241.67 58.58) (xy 241.6075 58.6425) (xy 241.1995 58.6425) + (xy 241.137 58.58) (xy 240.741 58.57879) (xy 240.691991 58.583617) (xy 240.644866 58.597912) (xy 240.601435 58.621127) + (xy 240.563368 58.652368) (xy 240.532127 58.690435) (xy 240.508912 58.733866) (xy 240.494617 58.780991) (xy 240.48979 58.83) + (xy 239.643 58.83) (xy 239.643 54.24521) (xy 239.718 54.24521) (xy 239.767009 54.240383) (xy 239.814134 54.226088) + (xy 239.857565 54.202873) (xy 239.895632 54.171632) (xy 239.926873 54.133565) (xy 239.950088 54.090134) (xy 239.964383 54.043009) + (xy 239.96921 53.994) (xy 239.96921 52.494) (xy 239.964383 52.444991) (xy 239.950088 52.397866) (xy 239.926873 52.354435) + (xy 239.895632 52.316368) (xy 239.857565 52.285127) (xy 239.814134 52.261912) (xy 239.767009 52.247617) (xy 239.718 52.24279) + (xy 239.218 52.24279) (xy 239.193551 52.245198) (xy 239.168991 52.245198) (xy 239.119982 52.250025) (xy 239.023849 52.269147) + (xy 238.976725 52.283442) (xy 238.886169 52.320951) (xy 238.842737 52.344166) (xy 238.761238 52.398622) (xy 238.723171 52.429863) + (xy 238.653863 52.499171) (xy 238.622622 52.537238) (xy 238.568166 52.618737) (xy 238.544951 52.662169) (xy 238.507442 52.752725) + (xy 238.493147 52.799849) (xy 238.474025 52.895982) (xy 238.469198 52.944991) (xy 238.469198 52.969551) (xy 238.46679 52.994) + (xy 238.46679 53.494) (xy 238.469198 53.518449) (xy 238.469198 53.543009) (xy 238.474025 53.592018) (xy 238.493147 53.688151) + (xy 238.507442 53.735275) (xy 238.544951 53.825831) (xy 238.568166 53.869263) (xy 238.622622 53.950762) (xy 238.653863 53.988829) + (xy 238.723171 54.058137) (xy 238.761238 54.089378) (xy 238.842737 54.143834) (xy 238.886169 54.167049) (xy 238.893001 54.169879) + (xy 238.893 64.238819) (xy 238.853649 64.265112) (xy 238.763112 64.355649) (xy 238.717 64.424661) (xy 238.717 59.165091) + (xy 238.719176 59.142999) (xy 238.717 59.120907) (xy 238.717 59.120895) (xy 238.710489 59.054785) (xy 238.684757 58.969959) + (xy 238.642972 58.891785) (xy 238.642971 58.891783) (xy 238.600828 58.840432) (xy 238.600824 58.840428) (xy 238.586737 58.823263) + (xy 238.569573 58.809177) (xy 234.257 54.496605) (xy 234.257 53.582235) (xy 234.328045 53.552807) (xy 234.508209 53.432425) + (xy 234.661425 53.279209) (xy 234.781807 53.099045) (xy 234.864727 52.898858) (xy 234.907 52.686341) (xy 234.907 52.469659) + (xy 234.864727 52.257142) (xy 234.781807 52.056955) (xy 234.661425 51.876791) (xy 234.508209 51.723575) (xy 234.328045 51.603193) + (xy 234.127858 51.520273) (xy 233.915341 51.478) (xy 233.698659 51.478) (xy 233.486142 51.520273) (xy 233.285955 51.603193) + (xy 233.105791 51.723575) (xy 232.952575 51.876791) (xy 232.950353 51.880116) (xy 232.946548 51.867573) (xy 232.907084 51.79374) + (xy 232.853974 51.729026) (xy 232.789259 51.675916) (xy 232.715426 51.636452) (xy 232.675745 51.624415) (xy 232.083195 51.031866) + (xy 232.071448 51.017552) (xy 232.014347 50.970691) (xy 231.9492 50.935869) (xy 231.878513 50.914426) (xy 231.823419 50.909) + (xy 231.823416 50.909) (xy 231.805 50.907186) (xy 231.786584 50.909) (xy 228.745419 50.909) (xy 228.727 50.907186) + (xy 228.708581 50.909) (xy 228.653487 50.914426) (xy 228.5828 50.935869) (xy 228.517653 50.970691) (xy 228.460552 51.017552) + (xy 228.413691 51.074653) (xy 228.378869 51.1398) (xy 228.357426 51.210487) (xy 228.350186 51.284) (xy 228.352001 51.302429) + (xy 228.352001 51.542699) (xy 228.205955 51.603193) (xy 228.025791 51.723575) (xy 227.872575 51.876791) (xy 227.752193 52.056955) + (xy 227.669273 52.257142) (xy 227.627 52.469659) (xy 224.748209 52.469659) (xy 224.748209 52.207417) (xy 225.151292 52.207417) + (xy 225.168571 52.374) (xy 225.983 52.374) (xy 225.983 51.560754) (xy 226.391 51.560754) (xy 226.391 52.374) + (xy 227.205429 52.374) (xy 227.222708 52.207417) (xy 227.13051 52.012481) (xy 227.002053 51.839278) (xy 226.842274 51.694463) + (xy 226.657314 51.583602) (xy 226.557581 51.542303) (xy 226.391 51.560754) (xy 225.983 51.560754) (xy 225.816419 51.542303) + (xy 225.716686 51.583602) (xy 225.531726 51.694463) (xy 225.371947 51.839278) (xy 225.24349 52.012481) (xy 225.151292 52.207417) + (xy 224.748209 52.207417) (xy 224.748209 51.728) (xy 224.743382 51.678992) (xy 224.729087 51.631866) (xy 224.705873 51.588436) + (xy 224.674632 51.550368) (xy 224.636564 51.519127) (xy 224.593134 51.495913) (xy 224.546008 51.481618) (xy 224.497 51.476791) + (xy 224.022 51.476791) (xy 224.022 51.048416) (xy 224.023814 51.03) (xy 224.022 51.011581) (xy 224.016574 50.956487) + (xy 223.995131 50.8858) (xy 223.98407 50.865107) (xy 223.96031 50.820653) (xy 223.925189 50.777859) (xy 223.913448 50.763552) + (xy 223.899139 50.751809) (xy 223.529195 50.381866) (xy 223.517448 50.367552) (xy 223.460347 50.320691) (xy 223.3952 50.285869) + (xy 223.324513 50.264426) (xy 223.269419 50.259) (xy 223.269416 50.259) (xy 223.251 50.257186) (xy 223.232584 50.259) + (xy 212.946416 50.259) (xy 212.928 50.257186) (xy 212.909584 50.259) (xy 212.909581 50.259) (xy 212.854487 50.264426) + (xy 212.7838 50.285869) (xy 212.718653 50.320691) (xy 212.661552 50.367552) (xy 212.649809 50.381861) (xy 208.677142 54.354529) + (xy 208.589019 54.337) (xy 208.460981 54.337) (xy 208.414563 54.346233) (xy 207.625195 53.556866) (xy 207.613448 53.542552) + (xy 207.556347 53.495691) (xy 207.4912 53.460869) (xy 207.420513 53.439426) (xy 207.365419 53.434) (xy 207.365416 53.434) + (xy 207.347 53.432186) (xy 207.328584 53.434) (xy 207.176209 53.434) (xy 207.176209 53.158997) (xy 207.166578 53.061217) + (xy 207.138057 52.967194) (xy 207.091741 52.880542) (xy 207.029409 52.804591) (xy 206.953458 52.742259) (xy 206.866806 52.695943) + (xy 206.772783 52.667422) (xy 206.675003 52.657791) (xy 206.6375 52.657791) (xy 206.6375 52.420209) (xy 206.675003 52.420209) + (xy 206.772783 52.410578) (xy 206.866806 52.382057) (xy 206.953458 52.335741) (xy 207.029409 52.273409) (xy 207.091741 52.197458) + (xy 207.138057 52.110806) (xy 207.166578 52.016783) (xy 207.176209 51.919003) (xy 207.176209 50.618997) (xy 207.166578 50.521217) + (xy 207.138057 50.427194) (xy 207.091741 50.340542) (xy 207.029409 50.264591) (xy 206.953458 50.202259) (xy 206.866806 50.155943) + (xy 206.772783 50.127422) (xy 206.675003 50.117791) (xy 205.849997 50.117791) (xy 205.752217 50.127422) (xy 205.658194 50.155943) + (xy 205.571542 50.202259) (xy 205.495591 50.264591) (xy 205.433259 50.340542) (xy 205.386943 50.427194) (xy 205.358422 50.521217) + (xy 205.348791 50.618997) (xy 204.050732 50.618997) (xy 204.05121 50.369) (xy 204.046383 50.319991) (xy 204.032088 50.272866) + (xy 204.008873 50.229435) (xy 203.977632 50.191368) (xy 203.939565 50.160127) (xy 203.896134 50.136912) (xy 203.849009 50.122617) + (xy 203.8 50.11779) (xy 203.404 50.119) (xy 203.3415 50.1815) (xy 202.9335 50.1815) (xy 202.871 50.119) + (xy 202.475 50.11779) (xy 202.425991 50.122617) (xy 202.378866 50.136912) (xy 202.335435 50.160127) (xy 202.297368 50.191368) + (xy 202.266127 50.229435) (xy 202.242912 50.272866) (xy 202.228617 50.319991) (xy 202.22379 50.369) (xy 200.447928 50.369) + (xy 200.664057 50.104) (xy 201.088748 49.752665) (xy 201.573594 49.490511) (xy 202.100127 49.327521) (xy 202.656527 49.269041) + (xy 202.668323 49.269) (xy 255.654439 49.269) + ) + ) + ) +) diff --git a/KiCad/noise_sensor.pro b/KiCad/noise_sensor.pro new file mode 100644 index 0000000..45ddfcf --- /dev/null +++ b/KiCad/noise_sensor.pro @@ -0,0 +1,248 @@ +update=Wed 24 Feb 2021 09:56:57 PM CET +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead=masterarbeit.net +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.2 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=0.25 +ViaDiameter1=0.8 +ViaDrill1=0.4 +dPairWidth1=0.2 +dPairGap1=0.25 +dPairViaGap1=0.25 +SilkLineWidth=0.12 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.05 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=1 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.2 +TrackWidth=0.25 +ViaDiameter=0.8 +ViaDrill=0.4 +uViaDiameter=0.3 +uViaDrill=0.1 +dPairWidth=0.2 +dPairGap=0.25 +dPairViaGap=0.25 +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName=Pcbnew +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_TestSimilarLabels=1 diff --git a/KiCad/noise_sensor.sch b/KiCad/noise_sensor.sch new file mode 100644 index 0000000..55ce545 --- /dev/null +++ b/KiCad/noise_sensor.sch @@ -0,0 +1,870 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L RF_Module:RFM95W-868S2 U2 +U 1 1 5FF4BB32 +P 9850 2050 +F 0 "U2" H 10250 2650 50 0000 C CNN +F 1 "RFM95W-868S2" H 10250 2550 50 0000 C CNN +F 2 "masterarbeit:HOPERF_RFM9XW_SMD_Castellated" H 6550 3700 50 0001 C CNN +F 3 "https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf" H 6550 3700 50 0001 C CNN + 1 9850 2050 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0102 +U 1 1 5FF4FCA4 +P 5700 4550 +F 0 "#PWR0102" H 5700 4300 50 0001 C CNN +F 1 "GND" H 5705 4377 50 0000 C CNN +F 2 "" H 5700 4550 50 0001 C CNN +F 3 "" H 5700 4550 50 0001 C CNN + 1 5700 4550 + 1 0 0 -1 +$EndComp +Text GLabel 5000 2750 0 50 Input ~ 0 +RX +Text GLabel 5000 2650 0 50 Input ~ 0 +TX +Text GLabel 5000 4050 0 50 Input ~ 0 +SWCLK +Text GLabel 5000 3950 0 50 Input ~ 0 +SWDIO +Text GLabel 5000 3850 0 50 Input ~ 0 +SDA +Text GLabel 5000 3750 0 50 Input ~ 0 +SCL +Text GLabel 5000 4150 0 50 Input ~ 0 +LRCL_WS +Text GLabel 6400 3150 2 50 Input ~ 0 +DOUT +Text GLabel 6400 2950 2 50 Input ~ 0 +BCLK +Text GLabel 5000 3050 0 50 Input ~ 0 +MOSI +Text GLabel 5000 3150 0 50 Input ~ 0 +SPI_NSS +Text GLabel 5000 2950 0 50 Input ~ 0 +MISO +Text GLabel 6400 2650 2 50 Input ~ 0 +DIO0 +Text GLabel 5000 3250 0 50 Input ~ 0 +LED1 +Text GLabel 6400 3450 2 50 Input ~ 0 +SCK +Text GLabel 5000 3350 0 50 Input ~ 0 +SPI_RESET +Text GLabel 9350 2250 0 50 Input ~ 0 +SPI_RESET +Text GLabel 9350 2050 0 50 Input ~ 0 +SPI_NSS +Text GLabel 9350 1950 0 50 Input ~ 0 +MISO +Text GLabel 9350 1850 0 50 Input ~ 0 +MOSI +Text GLabel 9350 1750 0 50 Input ~ 0 +SCK +Text GLabel 10350 2450 2 50 Input ~ 0 +DIO0 +$Comp +L power:+3V3 #PWR0103 +U 1 1 5FF567B1 +P 9850 800 +F 0 "#PWR0103" H 9850 650 50 0001 C CNN +F 1 "+3V3" H 9865 973 50 0000 C CNN +F 2 "" H 9850 800 50 0001 C CNN +F 3 "" H 9850 800 50 0001 C CNN + 1 9850 800 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR0104 +U 1 1 5FF56D78 +P 9850 2800 +F 0 "#PWR0104" H 9850 2550 50 0001 C CNN +F 1 "GND" H 9855 2627 50 0000 C CNN +F 2 "" H 9850 2800 50 0001 C CNN +F 3 "" H 9850 2800 50 0001 C CNN + 1 9850 2800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9750 2650 9750 2800 +Wire Wire Line + 9750 2800 9850 2800 +Wire Wire Line + 9950 2650 9950 2800 +Wire Wire Line + 9950 2800 9850 2800 +Connection ~ 9850 2800 +Wire Wire Line + 9850 2650 9850 2800 +$Comp +L Device:LED D1 +U 1 1 5FF59892 +P 2850 3700 +F 0 "D1" H 2843 3917 50 0000 C CNN +F 1 "LED" H 2843 3826 50 0000 C CNN +F 2 "LED_THT:LED_D3.0mm" H 2850 3700 50 0001 C CNN +F 3 "~" H 2850 3700 50 0001 C CNN + 1 2850 3700 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R3 +U 1 1 5FF5B2E5 +P 3150 3700 +F 0 "R3" V 2943 3700 50 0000 C CNN +F 1 "480R" V 3034 3700 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3080 3700 50 0001 C CNN +F 3 "~" H 3150 3700 50 0001 C CNN + 1 3150 3700 + 0 1 1 0 +$EndComp +$Comp +L power:GND #PWR0107 +U 1 1 5FF5DFEA +P 2400 3700 +F 0 "#PWR0107" H 2400 3450 50 0001 C CNN +F 1 "GND" H 2405 3527 50 0000 C CNN +F 2 "" H 2400 3700 50 0001 C CNN +F 3 "" H 2400 3700 50 0001 C CNN + 1 2400 3700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 2700 3700 2400 3700 +Text GLabel 3300 3700 2 50 Input ~ 0 +LED1 +$Comp +L Connector_Generic:Conn_02x03_Odd_Even J1 +U 1 1 5FF594B6 +P 10000 5350 +F 0 "J1" H 10050 5667 50 0000 C CNN +F 1 "Debug/USART" H 10050 5576 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical" H 10000 5350 50 0001 C CNN +F 3 "~" H 10000 5350 50 0001 C CNN + 1 10000 5350 + 1 0 0 -1 +$EndComp +$Comp +L Jumper:Jumper_2_Open JP1 +U 1 1 5FF5D896 +P 2950 3250 +F 0 "JP1" H 2950 3485 50 0000 C CNN +F 1 "Jumper_2_Open" H 2950 3394 50 0000 C CNN +F 2 "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" H 2950 3250 50 0001 C CNN +F 3 "~" H 2950 3250 50 0001 C CNN + 1 2950 3250 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR04 +U 1 1 5FF6967E +P 9350 5250 +F 0 "#PWR04" H 9350 5100 50 0001 C CNN +F 1 "+3V3" H 9365 5423 50 0000 C CNN +F 2 "" H 9350 5250 50 0001 C CNN +F 3 "" H 9350 5250 50 0001 C CNN + 1 9350 5250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR05 +U 1 1 5FF6AAAA +P 9350 5350 +F 0 "#PWR05" H 9350 5100 50 0001 C CNN +F 1 "GND" H 9355 5177 50 0000 C CNN +F 2 "" H 9350 5350 50 0001 C CNN +F 3 "" H 9350 5350 50 0001 C CNN + 1 9350 5350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 5250 9800 5250 +Wire Wire Line + 9350 5350 9800 5350 +Text GLabel 10300 5450 2 50 Input ~ 0 +SWCLK +Text GLabel 9800 5450 0 50 Input ~ 0 +SWDIO +Text GLabel 10300 5350 2 50 Input ~ 0 +TX +Text GLabel 10300 5250 2 50 Input ~ 0 +RX +Text GLabel 6400 3750 2 50 Input ~ 0 +I²C-ADDRESS +Text GLabel 3150 3250 2 50 Input ~ 0 +I²C-ADDRESS +Wire Wire Line + 2750 3250 2500 3250 +Wire Wire Line + 7000 5400 6750 5400 +Wire Wire Line + 7000 5250 6750 5250 +$Comp +L power:GND #PWR06 +U 1 1 5FFA14A5 +P 9050 4450 +F 0 "#PWR06" H 9050 4200 50 0001 C CNN +F 1 "GND" H 9055 4277 50 0000 C CNN +F 2 "" H 9050 4450 50 0001 C CNN +F 3 "" H 9050 4450 50 0001 C CNN + 1 9050 4450 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR07 +U 1 1 5FFA26C5 +P 10550 4150 +F 0 "#PWR07" H 10550 4000 50 0001 C CNN +F 1 "+3V3" H 10565 4323 50 0000 C CNN +F 2 "" H 10550 4150 50 0001 C CNN +F 3 "" H 10550 4150 50 0001 C CNN + 1 10550 4150 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x04 J3 +U 1 1 5FFACF3F +P 7800 3150 +F 0 "J3" H 7718 2725 50 0000 C CNN +F 1 "I²C IN" H 7718 2816 50 0000 C CNN +F 2 "Connector_JST:JST_PH_B4B-PH-SM4-TB_1x04-1MP_P2.00mm_Vertical" H 7800 3150 50 0001 C CNN +F 3 "~" H 7800 3150 50 0001 C CNN + 1 7800 3150 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR012 +U 1 1 5FFBDD82 +P 8300 3250 +F 0 "#PWR012" H 8300 3000 50 0001 C CNN +F 1 "GND" H 8305 3077 50 0000 C CNN +F 2 "" H 8300 3250 50 0001 C CNN +F 3 "" H 8300 3250 50 0001 C CNN + 1 8300 3250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8000 3250 8300 3250 +$Comp +L Device:R R1 +U 1 1 5FFC59E5 +P 8200 2750 +F 0 "R1" H 8270 2796 50 0000 L CNN +F 1 "4k7" H 8270 2705 50 0000 L CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 8130 2750 50 0001 C CNN +F 3 "~" H 8200 2750 50 0001 C CNN + 1 8200 2750 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR011 +U 1 1 5FFC76F6 +P 8200 2600 +F 0 "#PWR011" H 8200 2450 50 0001 C CNN +F 1 "+3V3" H 8215 2773 50 0000 C CNN +F 2 "" H 8200 2600 50 0001 C CNN +F 3 "" H 8200 2600 50 0001 C CNN + 1 8200 2600 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR013 +U 1 1 5FFC7E83 +P 8600 2750 +F 0 "#PWR013" H 8600 2600 50 0001 C CNN +F 1 "+3V3" H 8615 2923 50 0000 C CNN +F 2 "" H 8600 2750 50 0001 C CNN +F 3 "" H 8600 2750 50 0001 C CNN + 1 8600 2750 + 1 0 0 -1 +$EndComp +Text GLabel 8300 2950 2 50 Input ~ 0 +SCL +Wire Wire Line + 8000 2950 8200 2950 +Wire Wire Line + 8200 2950 8200 2900 +Wire Wire Line + 8000 3050 8600 3050 +Wire Wire Line + 8200 2950 8300 2950 +Connection ~ 8200 2950 +$Comp +L Device:R R2 +U 1 1 5FFDE894 +P 8600 2900 +F 0 "R2" H 8670 2946 50 0000 L CNN +F 1 "4k7" H 8670 2855 50 0000 L CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 8530 2900 50 0001 C CNN +F 3 "~" H 8600 2900 50 0001 C CNN + 1 8600 2900 + 1 0 0 -1 +$EndComp +Text GLabel 8750 3050 2 50 Input ~ 0 +SDA +Wire Wire Line + 8600 3050 8750 3050 +Connection ~ 8600 3050 +Wire Wire Line + 8000 3150 9050 3150 +$Comp +L power:+5V #PWR014 +U 1 1 5FFE92DB +P 9050 3150 +F 0 "#PWR014" H 9050 3000 50 0001 C CNN +F 1 "+5V" H 9065 3323 50 0000 C CNN +F 2 "" H 9050 3150 50 0001 C CNN +F 3 "" H 9050 3150 50 0001 C CNN + 1 9050 3150 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR017 +U 1 1 600498C3 +P 7000 5400 +F 0 "#PWR017" H 7000 5150 50 0001 C CNN +F 1 "GND" H 7005 5227 50 0000 C CNN +F 2 "" H 7000 5400 50 0001 C CNN +F 3 "" H 7000 5400 50 0001 C CNN + 1 7000 5400 + 1 0 0 -1 +$EndComp +$Comp +L power:+BATT #PWR016 +U 1 1 6004B1B0 +P 7000 5250 +F 0 "#PWR016" H 7000 5100 50 0001 C CNN +F 1 "+BATT" H 7015 5423 50 0000 C CNN +F 2 "" H 7000 5250 50 0001 C CNN +F 3 "" H 7000 5250 50 0001 C CNN + 1 7000 5250 + 1 0 0 -1 +$EndComp +$Comp +L masterarbeit-rescue:STM32G071KxT-STM32G0 U4 +U 1 1 6007BB38 +P 5700 3450 +F 0 "U4" H 6250 4650 50 0000 C CNN +F 1 "STM32G071KxT" H 6050 4550 50 0000 C CNN +F 2 "Package_QFP:LQFP-32_7x7mm_P0.8mm" H 5600 2400 50 0001 R CNN +F 3 "https://www.st.com/resource/en/datasheet/stm32g071kb.pdf" H 5700 3450 50 0001 C CNN + 1 5700 3450 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR02 +U 1 1 600941E8 +P 2050 1700 +F 0 "#PWR02" H 2050 1550 50 0001 C CNN +F 1 "+3V3" H 2065 1873 50 0000 C CNN +F 2 "" H 2050 1700 50 0001 C CNN +F 3 "" H 2050 1700 50 0001 C CNN + 1 2050 1700 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR08 +U 1 1 60094D04 +P 2050 2600 +F 0 "#PWR08" H 2050 2350 50 0001 C CNN +F 1 "GND" H 2055 2427 50 0000 C CNN +F 2 "" H 2050 2600 50 0001 C CNN +F 3 "" H 2050 2600 50 0001 C CNN + 1 2050 2600 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R4 +U 1 1 6009A5CC +P 2050 2000 +F 0 "R4" V 1843 2000 50 0000 C CNN +F 1 "?R" V 1934 2000 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 1980 2000 50 0001 C CNN +F 3 "~" H 2050 2000 50 0001 C CNN + 1 2050 2000 + -1 0 0 1 +$EndComp +$Comp +L Device:R R5 +U 1 1 600A5EBF +P 2050 2300 +F 0 "R5" V 1843 2300 50 0000 C CNN +F 1 "?R" V 1934 2300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 1980 2300 50 0001 C CNN +F 3 "~" H 2050 2300 50 0001 C CNN + 1 2050 2300 + -1 0 0 1 +$EndComp +Wire Wire Line + 2050 1700 2050 1850 +Wire Wire Line + 2050 2450 2050 2600 +Text GLabel 2350 2150 2 50 Input ~ 0 +DEVICE_ID +Wire Wire Line + 2350 2150 2050 2150 +Connection ~ 2050 2150 +$Comp +L Connector_Generic:Conn_01x05 J4 +U 1 1 600AF8B5 +P 7000 1450 +F 0 "J4" H 7080 1492 50 0000 L CNN +F 1 "Microphone Connector" H 7080 1401 50 0000 L CNN +F 2 "Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical" H 7000 1450 50 0001 C CNN +F 3 "~" H 7000 1450 50 0001 C CNN + 1 7000 1450 + 1 0 0 -1 +$EndComp +Text GLabel 6800 1550 0 50 Input ~ 0 +DOUT +$Comp +L power:+3V3 #PWR09 +U 1 1 600B8034 +P 6250 1250 +F 0 "#PWR09" H 6250 1100 50 0001 C CNN +F 1 "+3V3" H 6265 1423 50 0000 C CNN +F 2 "" H 6250 1250 50 0001 C CNN +F 3 "" H 6250 1250 50 0001 C CNN + 1 6250 1250 + 1 0 0 -1 +$EndComp +Text GLabel 6800 1650 0 50 Input ~ 0 +LRCL_WS +Text GLabel 6800 1450 0 50 Input ~ 0 +BCLK +$Comp +L power:GND #PWR015 +U 1 1 600BB656 +P 6250 1350 +F 0 "#PWR015" H 6250 1100 50 0001 C CNN +F 1 "GND" H 6255 1177 50 0000 C CNN +F 2 "" H 6250 1350 50 0001 C CNN +F 3 "" H 6250 1350 50 0001 C CNN + 1 6250 1350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6250 1250 6800 1250 +Wire Wire Line + 6250 1350 6800 1350 +$Comp +L power:GND #PWR01 +U 1 1 600F4120 +P 2500 3250 +F 0 "#PWR01" H 2500 3000 50 0001 C CNN +F 1 "GND" H 2505 3077 50 0000 C CNN +F 2 "" H 2500 3250 50 0001 C CNN +F 3 "" H 2500 3250 50 0001 C CNN + 1 2500 3250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR019 +U 1 1 601233C9 +P 3350 2600 +F 0 "#PWR019" H 3350 2350 50 0001 C CNN +F 1 "GND" H 3355 2427 50 0000 C CNN +F 2 "" H 3350 2600 50 0001 C CNN +F 3 "" H 3350 2600 50 0001 C CNN + 1 3350 2600 + 1 0 0 -1 +$EndComp +$Comp +L Device:R R6 +U 1 1 601233D3 +P 3350 2000 +F 0 "R6" V 3143 2000 50 0000 C CNN +F 1 "?R" V 3234 2000 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3280 2000 50 0001 C CNN +F 3 "~" H 3350 2000 50 0001 C CNN + 1 3350 2000 + -1 0 0 1 +$EndComp +$Comp +L Device:R R7 +U 1 1 601233DD +P 3350 2300 +F 0 "R7" V 3143 2300 50 0000 C CNN +F 1 "?R" V 3234 2300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 3280 2300 50 0001 C CNN +F 3 "~" H 3350 2300 50 0001 C CNN + 1 3350 2300 + -1 0 0 1 +$EndComp +Wire Wire Line + 3350 1700 3350 1850 +Wire Wire Line + 3350 2450 3350 2600 +Wire Wire Line + 3650 2150 3350 2150 +Connection ~ 3350 2150 +Text GLabel 3650 2150 2 50 Input ~ 0 +BATT_SENSE +$Comp +L power:+BATT #PWR018 +U 1 1 6012E3E3 +P 3350 1700 +F 0 "#PWR018" H 3350 1550 50 0001 C CNN +F 1 "+BATT" H 3365 1873 50 0000 C CNN +F 2 "" H 3350 1700 50 0001 C CNN +F 3 "" H 3350 1700 50 0001 C CNN + 1 3350 1700 + 1 0 0 -1 +$EndComp +Text GLabel 5000 2850 0 50 Input ~ 0 +DEVICE_ID +Text GLabel 6400 2750 2 50 Input ~ 0 +BATT_SENSE +$Comp +L Connector_Generic:Conn_01x01 J2 +U 1 1 601E388E +P 6550 5250 +F 0 "J2" H 6468 5025 50 0000 C CNN +F 1 "Conn_01x01" H 6468 5116 50 0000 C CNN +F 2 "Connector_Wire:SolderWirePad_1x01_SMD_1x2mm" H 6550 5250 50 0001 C CNN +F 3 "~" H 6550 5250 50 0001 C CNN + 1 6550 5250 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_01x01 J5 +U 1 1 601E3EB3 +P 6550 5400 +F 0 "J5" H 6550 5600 50 0000 C CNN +F 1 "Conn_01x01" H 6550 5500 50 0000 C CNN +F 2 "Connector_Wire:SolderWirePad_1x01_SMD_1x2mm" H 6550 5400 50 0001 C CNN +F 3 "~" H 6550 5400 50 0001 C CNN + 1 6550 5400 + -1 0 0 1 +$EndComp +$Comp +L Regulator_Linear:L78L33_TO92 U1 +U 1 1 600FF264 +P 9050 4150 +F 0 "U1" H 9050 4392 50 0000 C CNN +F 1 "L78L33_TO92" H 9050 4301 50 0000 C CNN +F 2 "Package_TO_SOT_THT:TO-92_Inline" H 9050 4375 50 0001 C CIN +F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/15/55/e5/aa/23/5b/43/fd/CD00000446.pdf/files/CD00000446.pdf/jcr:content/translations/en.CD00000446.pdf" H 9050 4100 50 0001 C CNN + 1 9050 4150 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x01 J6 +U 1 1 60111880 +P 10550 1750 +F 0 "J6" H 10630 1792 50 0000 L CNN +F 1 "Conn_01x01" H 10630 1701 50 0000 L CNN +F 2 "Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical" H 10550 1750 50 0001 C CNN +F 3 "~" H 10550 1750 50 0001 C CNN + 1 10550 1750 + 1 0 0 -1 +$EndComp +$Comp +L power:+3V3 #PWR010 +U 1 1 60190E33 +P 5700 1300 +F 0 "#PWR010" H 5700 1150 50 0001 C CNN +F 1 "+3V3" H 5715 1473 50 0000 C CNN +F 2 "" H 5700 1300 50 0001 C CNN +F 3 "" H 5700 1300 50 0001 C CNN + 1 5700 1300 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C4 +U 1 1 601CF5F2 +P 8450 4250 +F 0 "C4" H 8542 4296 50 0000 L CNN +F 1 "100nF" H 8542 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 8450 4250 50 0001 C CNN +F 3 "~" H 8450 4250 50 0001 C CNN + 1 8450 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C3 +U 1 1 601CF5F8 +P 8050 4250 +F 0 "C3" H 8142 4296 50 0000 L CNN +F 1 "4.7µF" H 8142 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 8050 4250 50 0001 C CNN +F 3 "~" H 8050 4250 50 0001 C CNN + 1 8050 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C6 +U 1 1 601E7ABB +P 9600 950 +F 0 "C6" V 9371 950 50 0000 C CNN +F 1 "4.7µF" V 9462 950 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9600 950 50 0001 C CNN +F 3 "~" H 9600 950 50 0001 C CNN + 1 9600 950 + 0 1 1 0 +$EndComp +$Comp +L Device:C_Small C7 +U 1 1 601EC4C2 +P 9600 1350 +F 0 "C7" V 9371 1350 50 0000 C CNN +F 1 "100nF" V 9462 1350 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9600 1350 50 0001 C CNN +F 3 "~" H 9600 1350 50 0001 C CNN + 1 9600 1350 + 0 1 1 0 +$EndComp +Wire Wire Line + 9350 1350 9500 1350 +Wire Wire Line + 9850 1350 9850 1550 +$Comp +L power:GND #PWR024 +U 1 1 601EF438 +P 9350 1450 +F 0 "#PWR024" H 9350 1200 50 0001 C CNN +F 1 "GND" H 9355 1277 50 0000 C CNN +F 2 "" H 9350 1450 50 0001 C CNN +F 3 "" H 9350 1450 50 0001 C CNN + 1 9350 1450 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 1350 9350 1450 +Connection ~ 9350 1350 +Wire Wire Line + 9500 950 9350 950 +Wire Wire Line + 9350 950 9350 1350 +Wire Wire Line + 9700 950 9850 950 +Wire Wire Line + 9850 950 9850 800 +Wire Wire Line + 9850 1350 9700 1350 +Wire Wire Line + 9850 1350 9850 950 +Connection ~ 9850 1350 +Connection ~ 9850 950 +$Comp +L Device:C_Small C8 +U 1 1 601D17B5 +P 10000 4250 +F 0 "C8" H 10092 4296 50 0000 L CNN +F 1 "4.7µF" H 10092 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 10000 4250 50 0001 C CNN +F 3 "~" H 10000 4250 50 0001 C CNN + 1 10000 4250 + 1 0 0 -1 +$EndComp +$Comp +L Device:C_Small C5 +U 1 1 601D17AF +P 9550 4250 +F 0 "C5" H 9642 4296 50 0000 L CNN +F 1 "100nF" H 9642 4205 50 0000 L CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 9550 4250 50 0001 C CNN +F 3 "~" H 9550 4250 50 0001 C CNN + 1 9550 4250 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9350 4150 9550 4150 +Connection ~ 9550 4150 +Wire Wire Line + 9550 4150 10000 4150 +Connection ~ 10000 4150 +Wire Wire Line + 10000 4150 10550 4150 +$Comp +L power:GND #PWR025 +U 1 1 602799D7 +P 9550 4350 +F 0 "#PWR025" H 9550 4100 50 0001 C CNN +F 1 "GND" H 9555 4177 50 0000 C CNN +F 2 "" H 9550 4350 50 0001 C CNN +F 3 "" H 9550 4350 50 0001 C CNN + 1 9550 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR026 +U 1 1 60279F5C +P 10000 4350 +F 0 "#PWR026" H 10000 4100 50 0001 C CNN +F 1 "GND" H 10005 4177 50 0000 C CNN +F 2 "" H 10000 4350 50 0001 C CNN +F 3 "" H 10000 4350 50 0001 C CNN + 1 10000 4350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8750 4150 8450 4150 +Connection ~ 8450 4150 +$Comp +L power:+BATT #PWR020 +U 1 1 60296798 +P 7650 4150 +F 0 "#PWR020" H 7650 4000 50 0001 C CNN +F 1 "+BATT" H 7665 4323 50 0000 C CNN +F 2 "" H 7650 4150 50 0001 C CNN +F 3 "" H 7650 4150 50 0001 C CNN + 1 7650 4150 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR021 +U 1 1 60297059 +P 7900 4150 +F 0 "#PWR021" H 7900 4000 50 0001 C CNN +F 1 "+5V" H 7915 4323 50 0000 C CNN +F 2 "" H 7900 4150 50 0001 C CNN +F 3 "" H 7900 4150 50 0001 C CNN + 1 7900 4150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8050 4150 8450 4150 +Wire Wire Line + 8050 4150 7900 4150 +Connection ~ 8050 4150 +Connection ~ 7900 4150 +Wire Wire Line + 7900 4150 7650 4150 +$Comp +L power:GND #PWR022 +U 1 1 6029A386 +P 8050 4350 +F 0 "#PWR022" H 8050 4100 50 0001 C CNN +F 1 "GND" H 8055 4177 50 0000 C CNN +F 2 "" H 8050 4350 50 0001 C CNN +F 3 "" H 8050 4350 50 0001 C CNN + 1 8050 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR023 +U 1 1 6029A978 +P 8450 4350 +F 0 "#PWR023" H 8450 4100 50 0001 C CNN +F 1 "GND" H 8455 4177 50 0000 C CNN +F 2 "" H 8450 4350 50 0001 C CNN +F 3 "" H 8450 4350 50 0001 C CNN + 1 8450 4350 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR03 +U 1 1 602CBD63 +P 5150 2000 +F 0 "#PWR03" H 5150 1750 50 0001 C CNN +F 1 "GND" H 5155 1827 50 0000 C CNN +F 2 "" H 5150 2000 50 0001 C CNN +F 3 "" H 5150 2000 50 0001 C CNN + 1 5150 2000 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5150 1550 5150 1900 +Wire Wire Line + 5700 1300 5700 1550 +$Comp +L Device:C_Small C1 +U 1 1 602D3A6D +P 5450 1550 +F 0 "C1" V 5221 1550 50 0000 C CNN +F 1 "4.7µF" V 5312 1550 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 5450 1550 50 0001 C CNN +F 3 "~" H 5450 1550 50 0001 C CNN + 1 5450 1550 + 0 1 1 0 +$EndComp +$Comp +L Device:C_Small C2 +U 1 1 602D6D94 +P 5450 1900 +F 0 "C2" V 5221 1900 50 0000 C CNN +F 1 "100nF" V 5312 1900 50 0000 C CNN +F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder" H 5450 1900 50 0001 C CNN +F 3 "~" H 5450 1900 50 0001 C CNN + 1 5450 1900 + 0 1 1 0 +$EndComp +Wire Wire Line + 5550 1550 5700 1550 +Connection ~ 5700 1550 +Wire Wire Line + 5700 1550 5700 1900 +Wire Wire Line + 5550 1900 5700 1900 +Connection ~ 5700 1900 +Wire Wire Line + 5700 1900 5700 2350 +Wire Wire Line + 5350 1550 5150 1550 +Wire Wire Line + 5350 1900 5150 1900 +Connection ~ 5150 1900 +Wire Wire Line + 5150 1900 5150 2000 +$Comp +L masterarbeit-rescue:B3U-1000P-dk_Tactile-Switches S1 +U 1 1 60128DFA +P 6600 4150 +F 0 "S1" H 6600 4447 60 0000 C CNN +F 1 "B3U-1000P" H 6600 4341 60 0000 C CNN +F 2 "digikey-footprints:Switch_Tactile_SMD_B3U-1000P" H 6800 4350 60 0001 L CNN +F 3 "https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3u.pdf" H 6800 4450 60 0001 L CNN +F 4 "SW1020CT-ND" H 6800 4550 60 0001 L CNN "Digi-Key_PN" +F 5 "B3U-1000P" H 6800 4650 60 0001 L CNN "MPN" +F 6 "Switches" H 6800 4750 60 0001 L CNN "Category" +F 7 "Tactile Switches" H 6800 4850 60 0001 L CNN "Family" +F 8 "https://omronfs.omron.com/en_US/ecb/products/pdf/en-b3u.pdf" H 6800 4950 60 0001 L CNN "DK_Datasheet_Link" +F 9 "/product-detail/en/omron-electronics-inc-emc-div/B3U-1000P/SW1020CT-ND/1534357" H 6800 5050 60 0001 L CNN "DK_Detail_Page" +F 10 "SWITCH TACTILE SPST-NO 0.05A 12V" H 6800 5150 60 0001 L CNN "Description" +F 11 "Omron Electronics Inc-EMC Div" H 6800 5250 60 0001 L CNN "Manufacturer" +F 12 "Active" H 6800 5350 60 0001 L CNN "Status" + 1 6600 4150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6800 4150 7200 4150 +$Comp +L Device:R R8 +U 1 1 6012EEB6 +P 7200 4300 +F 0 "R8" V 6993 4300 50 0000 C CNN +F 1 "1k" V 7084 4300 50 0000 C CNN +F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder" V 7130 4300 50 0001 C CNN +F 3 "~" H 7200 4300 50 0001 C CNN + 1 7200 4300 + -1 0 0 1 +$EndComp +$Comp +L power:GND #PWR027 +U 1 1 6012F7EF +P 7200 4450 +F 0 "#PWR027" H 7200 4200 50 0001 C CNN +F 1 "GND" H 7205 4277 50 0000 C CNN +F 2 "" H 7200 4450 50 0001 C CNN +F 3 "" H 7200 4450 50 0001 C CNN + 1 7200 4450 + 1 0 0 -1 +$EndComp +$EndSCHEMATC diff --git a/KiCad/pcb_3d.png b/KiCad/pcb_3d.png new file mode 100644 index 0000000..86edadd Binary files /dev/null and b/KiCad/pcb_3d.png differ diff --git a/STL/master_bottom.stl b/STL/master_bottom.stl new file mode 100644 index 0000000..9299867 Binary files /dev/null and b/STL/master_bottom.stl differ diff --git a/STL/master_complete.png b/STL/master_complete.png new file mode 100644 index 0000000..20f1553 Binary files /dev/null and b/STL/master_complete.png differ diff --git a/STL/master_top.stl b/STL/master_top.stl new file mode 100644 index 0000000..8cb0d1b Binary files /dev/null and b/STL/master_top.stl differ diff --git a/STL/slave_bottom_v2.stl b/STL/slave_bottom_v2.stl new file mode 100644 index 0000000..9299867 Binary files /dev/null and b/STL/slave_bottom_v2.stl differ diff --git a/STL/slave_top_v2.stl b/STL/slave_top_v2.stl new file mode 100644 index 0000000..37a4def Binary files /dev/null and b/STL/slave_top_v2.stl differ diff --git a/STM32/Core/Inc/SX1278.h b/STM32/Core/Inc/SX1278.h new file mode 100644 index 0000000..cb82f94 --- /dev/null +++ b/STM32/Core/Inc/SX1278.h @@ -0,0 +1,490 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * work based on DORJI.COM sample code and + * https://github.com/realspinner/SX1278_LoRa + */ + +#ifndef __SX1278_H__ +#define __SX1278_H__ + +#include +#include + +#include +#ifdef __cplusplus +extern "C" { +#endif + +#define SX1278_MAX_PACKET 256 +#define SX1278_DEFAULT_TIMEOUT 3000 + +/* RFM98 Internal registers Address */ +/********************LoRa mode***************************/ +#define LR_RegFifo 0x00 +/* Common settings */ +#define LR_RegOpMode 0x01 +#define LR_RegFrMsb 0x06 +#define LR_RegFrMid 0x07 +#define LR_RegFrLsb 0x08 +/* Tx settings */ +#define LR_RegPaConfig 0x09 +#define LR_RegPaRamp 0x0A +#define LR_RegOcp 0x0B +/* Rx settings */ +#define LR_RegLna 0x0C +/* LoRa registers */ +#define LR_RegFifoAddrPtr 0x0D +#define LR_RegFifoTxBaseAddr 0x0E +#define LR_RegFifoRxBaseAddr 0x0F +#define LR_RegFifoRxCurrentaddr 0x10 +#define LR_RegIrqFlagsMask 0x11 +#define LR_RegIrqFlags 0x12 +#define LR_RegRxNbBytes 0x13 +#define LR_RegRxHeaderCntValueMsb 0x14 +#define LR_RegRxHeaderCntValueLsb 0x15 +#define LR_RegRxPacketCntValueMsb 0x16 +#define LR_RegRxPacketCntValueLsb 0x17 +#define LR_RegModemStat 0x18 +#define LR_RegPktSnrValue 0x19 +#define LR_RegPktRssiValue 0x1A +#define LR_RegRssiValue 0x1B +#define LR_RegHopChannel 0x1C +#define LR_RegModemConfig1 0x1D +#define LR_RegModemConfig2 0x1E +#define LR_RegSymbTimeoutLsb 0x1F +#define LR_RegPreambleMsb 0x20 +#define LR_RegPreambleLsb 0x21 +#define LR_RegPayloadLength 0x22 +#define LR_RegMaxPayloadLength 0x23 +#define LR_RegHopPeriod 0x24 +#define LR_RegFifoRxByteAddr 0x25 +#define LR_RegModemConfig3 0x26 +/* I/O settings */ +#define REG_LR_DIOMAPPING1 0x40 +#define REG_LR_DIOMAPPING2 0x41 +/* Version */ +#define REG_LR_VERSION 0x42 +/* Additional settings */ +#define REG_LR_PLLHOP 0x44 +#define REG_LR_TCXO 0x4B +#define REG_LR_PADAC 0x4D +#define REG_LR_FORMERTEMP 0x5B +#define REG_LR_AGCREF 0x61 +#define REG_LR_AGCTHRESH1 0x62 +#define REG_LR_AGCTHRESH2 0x63 +#define REG_LR_AGCTHRESH3 0x64 + +/********************FSK/ook mode***************************/ +#define RegFIFO 0x00 +#define RegOpMode 0x01 +#define RegBitRateMsb 0x02 +#define RegBitRateLsb 0x03 +#define RegFdevMsb 0x04 +#define RegFdevLsb 0x05 +#define RegFreqMsb 0x06 +#define RegFreqMid 0x07 +#define RegFreqLsb 0x08 +#define RegPaConfig 0x09 +#define RegPaRamp 0x0a +#define RegOcp 0x0b +#define RegLna 0x0c +#define RegRxConfig 0x0d +#define RegRssiConfig 0x0e +#define RegRssiCollision 0x0f +#define RegRssiThresh 0x10 +#define RegRssiValue 0x11 +#define RegRxBw 0x12 +#define RegAfcBw 0x13 +#define RegOokPeak 0x14 +#define RegOokFix 0x15 +#define RegOokAvg 0x16 +#define RegAfcFei 0x1a +#define RegAfcMsb 0x1b +#define RegAfcLsb 0x1c +#define RegFeiMsb 0x1d +#define RegFeiLsb 0x1e +#define RegPreambleDetect 0x1f +#define RegRxTimeout1 0x20 +#define RegRxTimeout2 0x21 +#define RegRxTimeout3 0x22 +#define RegRxDelay 0x23 +#define RegOsc 0x24 +#define RegPreambleMsb 0x25 +#define RegPreambleLsb 0x26 +#define RegSyncConfig 0x27 +#define RegSyncValue1 0x28 +#define RegSyncValue2 0x29 +#define RegSyncValue3 0x2a +#define RegSyncValue4 0x2b +#define RegSyncValue5 0x2c +#define RegSyncValue6 0x2d +#define RegSyncValue7 0x2e +#define RegSyncValue8 0x2f +#define RegPacketConfig1 0x30 +#define RegPacketConfig2 0x31 +#define RegPayloadLength 0x32 +#define RegNodeAdrs 0x33 +#define RegBroadcastAdrs 0x34 +#define RegFifoThresh 0x35 +#define RegSeqConfig1 0x36 +#define RegSeqConfig2 0x37 +#define RegTimerResol 0x38 +#define RegTimer1Coef 0x39 +#define RegSyncWord 0x39 +#define RegTimer2Coef 0x3a +#define RegImageCal 0x3b +#define RegTemp 0x3c +#define RegLowBat 0x3d +#define RegIrqFlags1 0x3e +#define RegIrqFlags2 0x3f +#define RegDioMapping1 0x40 +#define RegDioMapping2 0x41 +#define RegVersion 0x42 +#define RegPllHop 0x44 +#define RegPaDac 0x4d +#define RegBitRateFrac 0x5d + +/********************************************************** + **Parameter table define + **********************************************************/ + +#define SX1278_POWER_20DBM 0 +#define SX1278_POWER_17DBM 1 +#define SX1278_POWER_14DBM 2 +#define SX1278_POWER_11DBM 3 + +static const uint8_t SX1278_Power[4] = { 0xFF, /* 20dbm */ + 0xFC, /* 17dbm */ + 0xF9, /* 14dbm */ + 0xF6, /* 11dbm */ + }; + +#define SX1278_LORA_SF_6 0 +#define SX1278_LORA_SF_7 1 +#define SX1278_LORA_SF_8 2 +#define SX1278_LORA_SF_9 3 +#define SX1278_LORA_SF_10 4 +#define SX1278_LORA_SF_11 5 +#define SX1278_LORA_SF_12 6 + +static const uint8_t SX1278_SpreadFactor[7] = { 6, 7, 8, 9, 10, 11, 12 }; + +#define SX1278_LORA_BW_7_8KHZ 0 +#define SX1278_LORA_BW_10_4KHZ 1 +#define SX1278_LORA_BW_15_6KHZ 2 +#define SX1278_LORA_BW_20_8KHZ 3 +#define SX1278_LORA_BW_31_2KHZ 4 +#define SX1278_LORA_BW_41_7KHZ 5 +#define SX1278_LORA_BW_62_5KHZ 6 +#define SX1278_LORA_BW_125KHZ 7 +#define SX1278_LORA_BW_250KHZ 8 +#define SX1278_LORA_BW_500KHZ 9 + +static const uint8_t SX1278_LoRaBandwidth[10] = { 0, /* 7.8KHz, */ + 1, /* 10.4KHz, */ + 2, /* 15.6KHz, */ + 3, /* 20.8KHz, */ + 4, /* 31.2KHz, */ + 5, /* 41.7KHz, */ + 6, /* 62.5KHz, */ + 7, /* 125.0KHz, */ + 8, /* 250.0KHz, */ + 9 /* 500.0KHz */ + }; + +/* Coding rate */ +#define SX1278_LORA_CR_4_5 0 +#define SX1278_LORA_CR_4_6 1 +#define SX1278_LORA_CR_4_7 2 +#define SX1278_LORA_CR_4_8 3 + +static const uint8_t SX1278_CodingRate[4] = { 0x01, 0x02, 0x03, 0x04 }; + +/* CRC Enable */ +#define SX1278_LORA_CRC_EN 0 +#define SX1278_LORA_CRC_DIS 1 + +static const uint8_t SX1278_CRC_Sum[2] = { 0x01, 0x00 }; + +typedef enum _SX1278_STATUS { + SLEEP, STANDBY, TX, RX +} SX1278_Status_t; + +typedef struct { + SX1278_hw_t *hw; + + uint64_t frequency; + uint8_t power; + uint8_t LoRa_SF; + uint8_t LoRa_BW; + uint8_t LoRa_CR; + uint8_t LoRa_CRC_sum; + uint8_t packetLength; + + SX1278_Status_t status; + + uint8_t rxBuffer[SX1278_MAX_PACKET]; + uint8_t readBytes; +} SX1278_t; + +/** + * \brief Read byte from LoRa module + * + * Reads data from LoRa module from given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address from which data will be read + * + * \return Read data + */ +uint8_t SX1278_SPIRead(SX1278_t *module, uint8_t addr); + +/** + * \brief Write byte to LoRa module + * + * Writes data to LoRa module under given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address under which data will be written + * \param[in] cmd Data to write + */ +void SX1278_SPIWrite(SX1278_t *module, uint8_t addr, uint8_t cmd); + +/** + * \brief Read data from LoRa module + * + * Reads data from LoRa module from given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address from which data will be read + * \param[out] rxBuf Pointer to store read data + * \param[in] length Number of bytes to read + */ +void SX1278_SPIBurstRead(SX1278_t *module, uint8_t addr, uint8_t *rxBuf, + uint8_t length); + +/** + * \brief Write data to LoRa module + * + * Writes data to LoRa module under given address. + * + * \param[in] module Pointer to LoRa structure + * \param[in] addr Address under which data will be written + * \param[in] txBuf Pointer to data + * \param[in] length Number of bytes to write + */ +void SX1278_SPIBurstWrite(SX1278_t *module, uint8_t addr, uint8_t *txBuf, + uint8_t length); + +/** + * \brief Configure LoRa module + * + * Configure LoRa module according to parameters stored in + * module structure. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_config(SX1278_t *module); + +/** + * \brief Entry LoRa mode + * + * Module supports different operation mode. + * To use LoRa operation mode one has to enter this + * particular mode to transmit and receive data + * using LoRa. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_entryLoRa(SX1278_t *module); + +/** + * \brief Clear IRQ + * + * Clears interrupt flags. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_clearLoRaIrq(SX1278_t *module); + +/** + * \brief Entry reception mode + * + * Entry reception mode + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be received + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaEntryRx(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Read data + * + * Read data and store it in module's RX buffer + * + * \param[in] module Pointer to LoRa structure + * + * \return returns number of read bytes + */ +uint8_t SX1278_LoRaRxPacket(SX1278_t *module); + +/** + * \brief Entry transmitter mode + * + * Entry transmitter mode + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaEntryTx(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Send data + * + * Transmit data + * + * \param[in] module Pointer to LoRa structure + * \param[in] txBuf Data buffer with data to be sent + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_LoRaTxPacket(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout); + +/** + * \brief Initialize LoRa module + * + * Initialize LoRa module and initialize LoRa structure. + * + * \param[in] module Pointer to LoRa structure + * \param[in] frequency Frequency in [Hz] + * \param[in] power Power level, accepts SX1278_POWER_* + * \param[in] LoRa_SF LoRa spread rate, accepts SX1278_LORA_SF_* + * \param[in] LoRa_BW LoRa bandwidth, accepts SX1278_LORA_BW_* + * \param[in] LoRa_CR LoRa coding rate, accepts SX1278_LORA_CR_* + * \param[in] LoRa_CRC_sum Hardware CRC check, SX1278_LORA_CRC_EN or + * SX1278_LORA_CRC_DIS + * \param[in] packetLength Package length, no more than 256 bytes + */ +void SX1278_init(SX1278_t *module, uint64_t frequency, uint8_t power, + uint8_t LoRa_SF, uint8_t LoRa_BW, uint8_t LoRa_CR, + uint8_t LoRa_CRC_sum, uint8_t packetLength); + +/** + * \brief Entry transmitter mode and send data + * + * Entry transmitter mode and send data. + * Combination of SX1278_LoRaEntryTx() and SX1278_LoRaTxPacket(). + * + * \param[in] module Pointer to LoRa structure + * \param[in] txBuf Data buffer with data to be sent + * \param[in] length Length of message to be sent + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entered TX mode and sent data + * 0 if timeout was exceeded + */ +int SX1278_transmit(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout); + +/** + * \brief Entry reception mode + * + * Same as SX1278_LoRaEntryRx() + * + * \param[in] module Pointer to LoRa structure + * \param[in] length Length of message to be received + * \param[in] timeout Timeout in [ms] + * + * \return 1 if entering reception mode + * 0 if timeout was exceeded + */ +int SX1278_receive(SX1278_t *module, uint8_t length, uint32_t timeout); + +/** + * \brief Returns number of received data + * + * Returns the number of received data which are + * held in internal buffer. + * Same as SX1278_LoRaRxPacket(). + * + * \param[in] module Pointer to LoRa structure + * + * \return returns number of read bytes + */ +uint8_t SX1278_available(SX1278_t *module); + +/** + * \brief Read received data to buffer + * + * Reads data from internal buffer to external + * buffer. Reads exactly number of bytes which are stored in + * internal buffer. + * + * \param[in] module Pointer to LoRa structure + * \param[out] rxBuf External buffer to store data. + * External buffer is terminated with '\0' + * character + * \param[in] length Length of message to be received + * + * \return returns number of read bytes + */ +uint8_t SX1278_read(SX1278_t *module, uint8_t *rxBuf, uint8_t length); + +/** + * \brief Returns RSSI (LoRa) + * + * Returns RSSI in LoRa mode. + * + * \param[in] module Pointer to LoRa structure + * + * \return RSSI value + */ +uint8_t SX1278_RSSI_LoRa(SX1278_t *module); + +/** + * \brief Returns RSSI + * + * Returns RSSI (general mode). + * + * \param[in] module Pointer to LoRa structure + * + * \return RSSI value + */ +uint8_t SX1278_RSSI(SX1278_t *module); + +/** + * \brief Enter standby mode + * + * Enters standby mode. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_standby(SX1278_t *module); + +/** + * \brief Enter sleep mode + * + * Enters sleep mode. + * + * \param[in] module Pointer to LoRa structure + */ +void SX1278_sleep(SX1278_t *module); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/STM32/Core/Inc/SX1278_hw.h b/STM32/Core/Inc/SX1278_hw.h new file mode 100644 index 0000000..16142ca --- /dev/null +++ b/STM32/Core/Inc/SX1278_hw.h @@ -0,0 +1,95 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * Hardware layer for SX1278 LoRa module + */ + +#ifndef __SX1278_HW_HEADER +#define __SX1278_HW_HEADER + +#include + +typedef struct { + int pin; + void *port; +} SX1278_hw_dio_t; + +typedef struct { + SX1278_hw_dio_t reset; + SX1278_hw_dio_t dio0; + SX1278_hw_dio_t nss; + void *spi; +} SX1278_hw_t; + +/** + * \brief Initialize hardware layer + * + * Clears NSS and resets LoRa module. + * + * \param[in] hw Pointer to hardware structure + */ +void SX1278_hw_init(SX1278_hw_t *hw); + +/** + * \brief Control NSS + * + * Clears and sets NSS according to passed value. + * + * \param[in] hw Pointer to hardware structure. + * \param[in] value 1 sets NSS high, other value sets NSS low. + */ +void SX1278_hw_SetNSS(SX1278_hw_t *hw, int value); + +/** + * \brief Resets LoRa module + * + * Resets LoRa module. + * + * \param[in] hw Pointer to hardware structure + */ +void SX1278_hw_Reset(SX1278_hw_t *hw); + +/** + * \brief Send command via SPI. + * + * Send single byte via SPI interface. + * + * \param[in] hw Pointer to hardware structure + * \param[in] cmd Command + */ +void SX1278_hw_SPICommand(SX1278_hw_t *hw, uint8_t cmd); + +/** + * \brief Reads data via SPI + * + * Reads data via SPI interface. + * + * \param[in] hw Pointer to hardware structure + * + * \return Read value + */ +uint8_t SX1278_hw_SPIReadByte(SX1278_hw_t *hw); + +/** + * \brief ms delay + * + * Milisecond delay. + * + * \param[in] msec Number of milliseconds to wait + */ +void SX1278_hw_DelayMs(uint32_t msec); + +/** + * \brief Reads DIO0 state + * + * Reads LoRa DIO0 state using GPIO. + * + * \param[in] hw Pointer to hardware structure + * + * \return 0 if DIO0 low, 1 if DIO high + */ +int SX1278_hw_GetDIO0(SX1278_hw_t *hw); + +#endif + diff --git a/STM32/Core/Inc/arduinoFFT.h b/STM32/Core/Inc/arduinoFFT.h new file mode 100644 index 0000000..f67c82a --- /dev/null +++ b/STM32/Core/Inc/arduinoFFT.h @@ -0,0 +1,102 @@ +/* + + FFT libray + Copyright (C) 2010 Didier Longueville + Copyright (C) 2014 Enrique Condes + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#ifndef arduinoFFT_h /* Prevent loading library twice */ +#define arduinoFFT_h + +#include +#include +#include +#include +#include + +#define FFT_LIB_REV 0x14 +/* Custom constants */ +#define FFT_FORWARD 0x01 +#define FFT_REVERSE 0x00 + +/* Windowing type */ +#define FFT_WIN_TYP_RECTANGLE 0x00 /* rectangle (Box car) */ +#define FFT_WIN_TYP_HAMMING 0x01 /* hamming */ +#define FFT_WIN_TYP_HANN 0x02 /* hann */ +#define FFT_WIN_TYP_TRIANGLE 0x03 /* triangle (Bartlett) */ +#define FFT_WIN_TYP_NUTTALL 0x04 /* nuttall */ +#define FFT_WIN_TYP_BLACKMAN 0x05 /* blackman */ +#define FFT_WIN_TYP_BLACKMAN_NUTTALL 0x06 /* blackman nuttall */ +#define FFT_WIN_TYP_BLACKMAN_HARRIS 0x07 /* blackman harris*/ +#define FFT_WIN_TYP_FLT_TOP 0x08 /* flat top */ +#define FFT_WIN_TYP_WELCH 0x09 /* welch */ +/*Mathematial constants*/ +#define twoPi 6.28318531 +#define fourPi 12.56637061 +#define sixPi 18.84955593 + +#ifdef __AVR__ + static const double _c1[]PROGMEM = {0.0000000000, 0.7071067812, 0.9238795325, 0.9807852804, + 0.9951847267, 0.9987954562, 0.9996988187, 0.9999247018, + 0.9999811753, 0.9999952938, 0.9999988235, 0.9999997059, + 0.9999999265, 0.9999999816, 0.9999999954, 0.9999999989, + 0.9999999997}; + static const double _c2[]PROGMEM = {1.0000000000, 0.7071067812, 0.3826834324, 0.1950903220, + 0.0980171403, 0.0490676743, 0.0245412285, 0.0122715383, + 0.0061358846, 0.0030679568, 0.0015339802, 0.0007669903, + 0.0003834952, 0.0001917476, 0.0000958738, 0.0000479369, + 0.0000239684}; +#endif +class arduinoFFT { +public: + /* Constructor */ + arduinoFFT(void); + arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency); + /* Destructor */ + ~arduinoFFT(void); + /* Functions */ + uint8_t Revision(void); + uint8_t Exponent(uint16_t value); + + void ComplexToMagnitude(double *vReal, double *vImag, uint16_t samples); + void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir); + void Compute(double *vReal, double *vImag, uint16_t samples, uint8_t power, uint8_t dir); + void DCRemoval(double *vData, uint16_t samples); + double MajorPeak(double *vD, uint16_t samples, double samplingFrequency); + void MajorPeak(double *vD, uint16_t samples, double samplingFrequency, double *f, double *v); + void Windowing(double *vData, uint16_t samples, uint8_t windowType, uint8_t dir); + + void ComplexToMagnitude(); + void Compute(uint8_t dir); + void DCRemoval(); + void MajorPeakAndMagnitude(double *freq_interpolated, double *mag_interpolated); // Added by me + double MajorPeak(); + void MajorPeak(double *f, double *v); + void Windowing(uint8_t windowType, uint8_t dir); + +private: + /* Variables */ + uint16_t _samples; + double _samplingFrequency; + double *_vReal; + double *_vImag; + uint8_t _power; + /* Functions */ + void Swap(double *x, double *y); +}; + +#endif diff --git a/STM32/Core/Inc/correction_values.h b/STM32/Core/Inc/correction_values.h new file mode 100644 index 0000000..f462a92 --- /dev/null +++ b/STM32/Core/Inc/correction_values.h @@ -0,0 +1,70 @@ +/* + * correction_values.h + * + * Created on: Feb 9, 2021 + * Author: lukas + */ + +#ifndef INC_CORRECTION_VALUES_H_ +#define INC_CORRECTION_VALUES_H_ + + +// 512 +const float CORRECTION_VALUES[] = { + 0.0,7.172883405795546e-05,0.001059260037457216,0.004035324283915964,0.009791360415459789,0.018498869351727586,0.030546600767073013,0.04524773389537198,0.06312054701195031,0.0818440680984944, + 0.10352075045215836,0.12794679745582618,0.15361517704862274,0.18018801058837586,0.20776632685999466,0.2361873442322523,0.2662140944595638,0.29695041847073594,0.3277827886445909,0.3580006456478009, + 0.38819916054721165,0.41863074980816084,0.4497257525325588,0.48058178703131293,0.5111063487591285,0.540273642354577,0.5688382594591064,0.5966645337998011,0.6238340240825409,0.650461303550153, + 0.6760130904406626,0.7005557204194303,0.7243886261300616,0.7475183358403319,0.7702629396190269,0.7934428767121573,0.8159057164363238,0.83765511467948,0.8586975316368711,0.8790418017204933, + 0.8986987470894034,0.9176808323845598,0.9360018579822185,0.9536766889327459,0.9707210167012957,0.9871511508509416,1.002983837888662,1.0182361046144601,1.0329251234610313,1.0470680974755222, + 1.0602946965518625,1.0724771806307554,1.084112679028229,1.0954249967970877,1.1062127253016834,1.1164601096616837,1.1262787299321142,1.1356828651092872,1.1446880245538988,1.1534899388049804, + 1.1618281005985902,1.1697256639380633,1.1772808683020228,1.1853230604969849,1.1930901650986656,1.200548562786553,1.2077092521697683,1.2145828226528632,1.2211794644283986,1.2275089791593923, + 1.233580791171737,1.239403959003114,1.2449871871781069,1.2503388380993885,1.2554669439624755,1.2603792186167753,1.2650830693089457,1.2695856082560306,1.2738936640057226,1.2780137925496329, + 1.281952288162757,1.2857151939485687,1.2893083120745448,1.2927372136874369,1.2960072485014562,1.299123554055786,1.302091064640536,1.3049145198925178,1.3075984730641015,1.310147298969909, + 1.312565201617383,1.3148562215282158,1.3170242427584278,1.3190729996254622,1.3210060831510961,1.3228269472292884,1.3245389145282596,1.3261451821362016,1.3275735193179066,1.328161505203354, + 1.3285398211716795,1.3287473180657905,1.328876681296295,1.3289243905292003,1.3288923767080048,1.3287901131795625,1.3286800462793598,1.3286206632764501,1.3283542876698091,1.3279692139632036, + 1.3275238780381797,1.3270914179034223,1.3267004615342253,1.3267742840600314,1.3269720219576617,1.3271058942040632,1.3271774931790798,1.3271883585907676,1.3271399796126981,1.3270337969259807, + 1.326871204670443,1.3266535523092335,1.3263821464108725,1.3260582523526088,1.325683095948776,1.3252578650076263,1.324783710819993,1.3242617495829616,1.3236930637615634,1.3230787033913824, + 1.3224196873248222,1.3215309348732716,1.3201781465447535,1.3185602835081423,1.3163904842879137,1.3141893621392133,1.3119670779440011,1.3096840698031207,1.3072689997800968,1.3048394979963558, + 1.3025223698494062,1.3001736478759265,1.297812936334551,1.2954224586250285,1.292906161704599,1.2903412289884622,1.2878459557081685,1.2853801395396072,1.2828950815618145,1.2803948353940793, + 1.27777957135956,1.2746077621705787,1.2714147493381687,1.2675862401083555,1.2636317991342418,1.259681618525803,1.2557347984475775,1.2517793495297105,1.2478413582417982,1.2438900981136651, + 1.2400406226929348,1.2362165300229944,1.232354706654204,1.2284250662791136,1.22448436484387,1.2205615750396235,1.216634218026872,1.2127424750817724,1.208938199345932,1.2051240799926874, + 1.2012427190574988,1.1973350238874958,1.193766945882658,1.1918536415473437,1.1899231600400093,1.1880319977373104,1.186171811026769,1.1842950731404265,1.1824020894198684,1.1804931596695738, + 1.1785685783139235,1.176628634548578,1.1746736124864576,1.1727037912985276,1.1707194453495953,1.1687208443293127,1.1667082533785722,1.1646819332114742,1.162642140233034,1.1605891266527948, + 1.1585231405945051,1.1564444262020073,1.1543532237414862,1.152249769700208,1.1501342968818975,1.1474145580599013,1.1446559746057992,1.141888721417447,1.1383561989203028,1.1348039410645114, + 1.1312480180104145,1.1277901215883568,1.1243324312370409,1.1208711116653496,1.1173492415138613,1.1138180334445404,1.1102842515562992,1.1067636375534724,1.1032449775042512,1.099724242527613, + 1.0962631335953248,1.0928363396942997,1.089407443005215,1.0859517683562654,1.0824603596773055,1.078967789595708,1.075489552291985,1.0720881299386718,1.0686854859892996,1.065281793892197, + 1.0618290706808384,1.0583680033848966,1.054906755249069,1.0514542211699252,1.0480104341003997,1.0445668330653837,1.041131592378115,1.0377747729878009,1.0344180356505863,1.0310615288945382, + 1.0276725904710695,1.0242653926527339,1.020859198973952,1.0174560644651591,1.0140683195464366,1.0106818841727532,1.007296891850679,1.0039573374229547,1.0006546969914412,0.9973533593246692, + 0.9940534505011709,0.9907106437180979,0.9873664712382778,0.9840244150151416,0.9806883405331283,0.9773656430518435,0.9740453115792655,0.9707274595859758,0.9674501559810466,0.9642103774628765, + 0.9609729138627312,0.9577378726892607,0.9545564840044283,0.9513964276555934,0.948238637378326,0.9450832151686782,0.9419407183887651,0.9388021546127084,0.9356661769737245,0.9325328819103722, + 0.9294135961284578,0.9262974399922136,0.9231841700256103,0.9200739143089076,0.916977930551638,0.9138850266969418,0.9107952902167624,0.9077088073388642,0.9046363093514975,0.9015674367782348, + 0.8985019950572375,0.8954400657137611,0.8923911122002267,0.8893469886097733,0.8863065426299345,0.8832698513238463,0.8802445319215023,0.8772258250367256,0.874211026676025,0.8712002096626809, + 0.8681985991470822,0.8652059148496944,0.8622173550516091,0.8592329885421919,0.8562657641464899,0.8533448443389925,0.850427939355407,0.8475151148168408,0.8446064353885903,0.8417876394416499, + 0.8389834032676171,0.8361828473707709,0.8333860340955348,0.8305762098807065,0.8277517492352842,0.8249314524510548,0.822115377874059,0.8193035829935283,0.8165036662847402,0.8137081440239708, + 0.8109170169074323,0.8081303392044807,0.8053514344607194,0.8025811546506798,0.7998154314964251,0.7970543161834435,0.7942978591151272,0.7915520023789957,0.7888121145484682,0.786076982113828, + 0.7833466525539204,0.7806271655659783,0.777951087501187,0.7752796419982264,0.7726128744290972,0.7699508294586495,0.7672414237348727,0.7644496291093685,0.7616636780322027,0.7588836094529752, + 0.7561094616166246,0.7532506657758349,0.7503208967572872,0.7473984288821756,0.744483293146494,0.7415755198454969,0.73870316728899,0.7358545058279665,0.7330129481929062,0.7301785232708123, + 0.7273512592898264,0.7245161159298864,0.7216800334451033,0.7188513743019934,0.7160301634466695,0.713216425195918,0.7104158820999209,0.7076268517510362,0.7048452867996134,0.7020712094194204, + 0.6993046411878778,0.6965635326785661,0.6938519786386481,0.6911476810253259,0.6884506603779014,0.6857609366740617,0.6830736909915721,0.6803776743686955,0.6776891762880255,0.6750082138487741, + 0.6723348036147564,0.6696689616199956,0.6670188652997536,0.6643768832722908,0.661742445367839,0.6591155658552638,0.6564962585017369,0.6538892323652762,0.6512935055358983,0.648705322270668, + 0.6461246946770429,0.6435516343875753,0.6409971344595664,0.6385534046263793,0.6361163822449369,0.6336860809419324,0.6312625139023003,0.6288456938737227,0.626453252376109,0.6240816837909854, + 0.6217166555265382,0.6193581796459204,0.6170062677993668,0.6146609312284136,0.6123046285177839,0.6099536101425693,0.607609343101918,0.6052718364211899,0.6029410987366184,0.6006183582768324, + 0.598306997444908,0.5960023843516674,0.5937045263154322,0.5914134302859362,0.5891291028482787,0.5868631609716286,0.5846207941704108,0.5823849947162417,0.5801557687503681,0.5779331220697975, + 0.5757170601310062,0.5734988242308056,0.5712790410252068,0.5690659875651222,0.5668596673882982,0.564660083709719,0.5624672394252177,0.5602839171567512,0.5581097346242566,0.5559422579961837, + 0.5537814891149292,0.5516274295214653,0.5494800804587907,0.5473511723382107,0.5452425513179093,0.5431404463056002,0.5410448583090187,0.5389557880548492,0.5368732359919627,0.5348681346367996, + 0.5330380540201975,0.5312127430431234,0.5293922086719108,0.5275764576164956,0.5257654963329431,0.5239613159108583,0.5222175631853987,0.5204782279743697,0.5187433172719041,0.5170128378333307, + 0.5152867961774786,0.5135651985889782,0.5118480511205437,0.5101353595952403,0.5084271296087454,0.5067233665315937,0.5050240755114073,0.5033292614751171,0.5016389291311685,0.49995308297171603, + 0.49827172727480323,0.49659486610653314,0.49492250332322274,0.4932546425735472,0.49159128730066814,0.4899324407443539,0.4882781059430834,0.4866282857361377,0.48498298276568175,0.48334219947883056, + 0.4817059381297021,0.4800742007814626,0.47844698930835344,0.4768243053977078,0.47520615055195664,0.47359252609061886,0.4719834331522799,0.47037887269656137,0.46877884550607196,0.46718335218834955, + 0.4655923931777925,0.464005968737574,0.4624240789615473,0.4608467237761388,0.45927390294222453,0.4577056160570006,0.4561418625558357,0.4545826417141148,0.45302795264906914,0.4514777943215931, + 0.4499321655380505,0.44839106495206904,0.4468737749345353,0.4453851733641605,0.4439008009704048,0.44242065709570616,0.4409447409379821,0.43947305155228067,0.4380055878524199,0.4365837314106429, + 0.43523560843876913,0.43389099318539354,0.43254988696998853,0.4312122909785673,0.4298782062650867,0.4285476337528458,0.4272175283220949,0.4258782697200807,0.42454262333177084,0.4232105891769857, + 0.42188216715172827,0.42055735702955016,0.4192361584629108,0.4179185709845266,0.4166145251963689,0.41531506916996963,0.4140191536360333,0.41272677794409274,0.41143794133045397,0.410152642919478, + 0.4088708817248545,0.40758529052778536,0.4062960742923718,0.4050104831515799,0.40372851530466675,0.40245016884669893,0.4011754417697965,0.399904331964362,0.39863683722030263,0.39738302448490076, + 0.39613284633852,0.3948862121360839,0.3936431195515306,0.39240356616402244,0.3911675494591046,0.38993506682985646,0.3887012156015032,0.38746234792929096,0.3862270912837194,0.38499544232782434, + 0.38376739763825213,0.3825429537063741 +}; + + + +#endif /* INC_CORRECTION_VALUES_H_ */ diff --git a/STM32/Core/Inc/defs.h b/STM32/Core/Inc/defs.h new file mode 100644 index 0000000..40fcc75 --- /dev/null +++ b/STM32/Core/Inc/defs.h @@ -0,0 +1,79 @@ +/*! \file avrlibdefs.h \brief AVRlib global defines and macros. */ +//***************************************************************************** +// +// File Name : 'avrlibdefs.h' +// Title : AVRlib global defines and macros include file +// Author : Pascal Stang +// Created : 7/12/2001 +// Revised : 9/30/2002 +// Version : 1.1 +// Target MCU : Atmel AVR series +// Editor Tabs : 4 +// +// Description : This include file is designed to contain items useful to all +// code files and projects, regardless of specific implementation. +// +// This code is distributed under the GNU Public License +// which can be found at http://www.gnu.org/licenses/gpl.txt +// +//***************************************************************************** + + +#ifndef AVRLIBDEFS_H +#define AVRLIBDEFS_H + +//#define F_CPU 4000000 +#define MEM_TYPE 1 + +// Code compatibility to new AVR-libc +// outb(), inb(), inw(), outw(), BV(), sbi(), cbi(), sei(), cli() +#ifndef outb + #define outb(addr, data) addr = (data) +#endif +#ifndef inb + #define inb(addr) (addr) +#endif +#ifndef outw + #define outw(addr, data) addr = (data) +#endif +#ifndef inw + #define inw(addr) (addr) +#endif +#ifndef BV + #define BV(bit) (1<<(bit)) +#endif +//#ifndef cbi +// #define cbi(reg,bit) reg &= ~(BV(bit)) +//#endif +//#ifndef sbi +// #define sbi(reg,bit) reg |= (BV(bit)) +//#endif +#ifndef cli + #define cli() __asm__ __volatile__ ("cli" ::) +#endif +#ifndef sei + #define sei() __asm__ __volatile__ ("sei" ::) +#endif + +// use this for packed structures +// (this is seldom necessary on an 8-bit architecture like AVR, +// but can assist in code portability to AVR) +#define GNUC_PACKED __attribute__((packed)) + +// port address helpers +#define DDR(x) ((x)-1) // address of data direction register of port x +#define PIN(x) ((x)-2) // address of input register of port x + +// MIN/MAX/ABS macros +#define MIN(a,b) ((ab)?(a):(b)) +#define ABS(x) ((x>0)?(x):(-x)) + +// constants +#define PI 3.14159265359 + +//Math +#define sq(x) ((x)*(x)) +#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) + +#endif diff --git a/STM32/Core/Inc/main.h b/STM32/Core/Inc/main.h new file mode 100644 index 0000000..238f938 --- /dev/null +++ b/STM32/Core/Inc/main.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32g0xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define Device_ID_Pin GPIO_PIN_2 +#define Device_ID_GPIO_Port GPIOA +#define NSS_Pin GPIO_PIN_5 +#define NSS_GPIO_Port GPIOA +#define LED_Pin GPIO_PIN_6 +#define LED_GPIO_Port GPIOA +#define RESET_Pin GPIO_PIN_7 +#define RESET_GPIO_Port GPIOA +#define BAT_Monitor_Pin GPIO_PIN_1 +#define BAT_Monitor_GPIO_Port GPIOB +#define I2C_Address_Pin GPIO_PIN_6 +#define I2C_Address_GPIO_Port GPIOC +/* USER CODE BEGIN Private defines */ + + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/stm32g0xx_hal_conf.h b/STM32/Core/Inc/stm32g0xx_hal_conf.h new file mode 100644 index 0000000..eae1fd7 --- /dev/null +++ b/STM32/Core/Inc/stm32g0xx_hal_conf.h @@ -0,0 +1,352 @@ +/** + ****************************************************************************** + * @file stm32g0xx_hal_conf.h + * @author MCD Application Team + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2018 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32G0xx_HAL_CONF_H +#define STM32G0xx_HAL_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED +#define HAL_ADC_MODULE_ENABLED +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +/* #define HAL_FDCAN_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +#define HAL_I2C_MODULE_ENABLED +#define HAL_I2S_MODULE_ENABLED +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +#define HAL_TIM_MODULE_ENABLED +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## Register Callbacks selection ############################## */ +/** + * @brief This is the list of modules where register callback can be used + */ +#define USE_HAL_ADC_REGISTER_CALLBACKS 1u +#define USE_HAL_CEC_REGISTER_CALLBACKS 0u +#define USE_HAL_COMP_REGISTER_CALLBACKS 0u +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u +#define USE_HAL_DAC_REGISTER_CALLBACKS 0u +#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u +#define USE_HAL_HCD_REGISTER_CALLBACKS 0u +#define USE_HAL_I2C_REGISTER_CALLBACKS 1u +#define USE_HAL_I2S_REGISTER_CALLBACKS 1u +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u +#define USE_HAL_PCD_REGISTER_CALLBACKS 0u +#define USE_HAL_RNG_REGISTER_CALLBACKS 0u +#define USE_HAL_RTC_REGISTER_CALLBACKS 0u +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u +#define USE_HAL_SPI_REGISTER_CALLBACKS 0u +#define USE_HAL_TIM_REGISTER_CALLBACKS 0u +#define USE_HAL_UART_REGISTER_CALLBACKS 0u +#define USE_HAL_USART_REGISTER_CALLBACKS 0u +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u + +/* ########################## Oscillator Values adaptation ####################*/ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) +#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) +#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. + * This internal oscillator is mainly dedicated to provide a high precision clock to + * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. + * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency + * which is subject to manufacturing process variations. + */ +#if !defined (HSI48_VALUE) + #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. + The real value my vary depending on manufacturing process variations.*/ +#endif /* HSI48_VALUE */ +#endif + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) +#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz +The real value may vary depending on the variations +in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + * This value is used by the UART, RTC HAL module to compute the system frequency + */ +#if !defined (LSE_VALUE) +#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) +#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S1 peripheral + * This value is used by the RCC HAL module to compute the I2S1 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) +#define EXTERNAL_I2S1_CLOCK_VALUE (48000UL) /*!< Value of the I2S1 External clock source in Hz*/ +#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ + +#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) +/** + * @brief External clock source for I2S2 peripheral + * This value is used by the RCC HAL module to compute the I2S2 clock source + * frequency. + */ +#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) + #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ +#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ +#endif + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* ################## CRYP peripheral configuration ########################## */ + +#define USE_HAL_CRYP_SUSPEND_RESUME 1U + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include modules header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32g0xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32g0xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32g0xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32g0xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32g0xx_hal_adc.h" +#include "stm32g0xx_hal_adc_ex.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32g0xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED +#include "stm32g0xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32g0xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +#include "stm32g0xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32g0xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32g0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32g0xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED +#include "stm32g0xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32g0xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32g0xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32g0xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32g0xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32g0xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32g0xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32g0xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32g0xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED +#include "stm32g0xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32g0xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32g0xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED +#include "stm32g0xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32g0xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32g0xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32g0xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32g0xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32g0xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for functions parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t *file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32G0xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/stm32g0xx_it.h b/STM32/Core/Inc/stm32g0xx_it.h new file mode 100644 index 0000000..35487f1 --- /dev/null +++ b/STM32/Core/Inc/stm32g0xx_it.h @@ -0,0 +1,69 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32G0xx_IT_H +#define __STM32G0xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void DMA1_Channel1_IRQHandler(void); +void DMA1_Channel2_3_IRQHandler(void); +void ADC1_COMP_IRQHandler(void); +void I2C2_IRQHandler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32G0xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Inc/types.h b/STM32/Core/Inc/types.h new file mode 100644 index 0000000..6cd7d85 --- /dev/null +++ b/STM32/Core/Inc/types.h @@ -0,0 +1,69 @@ +//useful things to include in code + +#ifndef TYPES_H +#define TYPES_H + +#ifndef WIN32 + // true/false defines + #define FALSE 0 + #define TRUE -1 +#endif + +// datatype definitions macros +typedef unsigned char u08; +typedef signed char s08; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned long u32; +typedef signed long s32; +typedef unsigned long long u64; +typedef signed long long s64; + +// #ifndef __AVR__ +#ifdef __MBED__ + // use inttypes.h instead + // C99 standard integer type definitions + typedef unsigned char uint8_t; + typedef signed char int8_t; + typedef unsigned short uint16_t; + typedef signed short int16_t; + /*typedef unsigned long uint32_t; + typedef signed long int32_t; + typedef unsigned long uint64_t; + typedef signed long int64_t; + */ +#endif + +// maximum value that can be held +// by unsigned data types (8,16,32bits) +#define MAX_U08 255 +#define MAX_U16 65535 +#define MAX_U32 4294967295 + +// maximum values that can be held +// by signed data types (8,16,32bits) +#define MIN_S08 -128 +#define MAX_S08 127 +#define MIN_S16 -32768 +#define MAX_S16 32767 +#define MIN_S32 -2147483648 +#define MAX_S32 2147483647 + +#ifndef WIN32 + // more type redefinitions + typedef unsigned char BOOL; + typedef unsigned char BYTE; + typedef unsigned int WORD; + typedef unsigned long DWORD; + + typedef unsigned char UCHAR; + typedef unsigned int UINT; + typedef unsigned short USHORT; + typedef unsigned long ULONG; + + typedef char CHAR; + typedef int INT; + typedef long LONG; +#endif + +#endif diff --git a/STM32/Core/Src/SX1278.c b/STM32/Core/Src/SX1278.c new file mode 100644 index 0000000..ebb2a54 --- /dev/null +++ b/STM32/Core/Src/SX1278.c @@ -0,0 +1,293 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * work based on DORJI.COM sample code and + * https://github.com/realspinner/SX1278_LoRa + */ + +#include +#include + +uint8_t SX1278_SPIRead(SX1278_t *module, uint8_t addr) { + uint8_t tmp; + SX1278_hw_SPICommand(module->hw, addr); + tmp = SX1278_hw_SPIReadByte(module->hw); + SX1278_hw_SetNSS(module->hw, 1); + return tmp; +} + +void SX1278_SPIWrite(SX1278_t *module, uint8_t addr, uint8_t cmd) { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr | 0x80); + SX1278_hw_SPICommand(module->hw, cmd); + SX1278_hw_SetNSS(module->hw, 1); +} + +void SX1278_SPIBurstRead(SX1278_t *module, uint8_t addr, uint8_t *rxBuf, + uint8_t length) { + uint8_t i; + if (length <= 1) { + return; + } else { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr); + for (i = 0; i < length; i++) { + *(rxBuf + i) = SX1278_hw_SPIReadByte(module->hw); + } + SX1278_hw_SetNSS(module->hw, 1); + } +} + +void SX1278_SPIBurstWrite(SX1278_t *module, uint8_t addr, uint8_t *txBuf, + uint8_t length) { + unsigned char i; + if (length <= 1) { + return; + } else { + SX1278_hw_SetNSS(module->hw, 0); + SX1278_hw_SPICommand(module->hw, addr | 0x80); + for (i = 0; i < length; i++) { + SX1278_hw_SPICommand(module->hw, *(txBuf + i)); + } + SX1278_hw_SetNSS(module->hw, 1); + } +} + +void SX1278_config(SX1278_t *module) { + SX1278_sleep(module); //Change modem mode Must in Sleep mode + SX1278_hw_DelayMs(15); + + SX1278_entryLoRa(module); + //SX1278_SPIWrite(module, 0x5904); //?? Change digital regulator form 1.6V to 1.47V: see errata note + + uint64_t freq = ((uint64_t) module->frequency << 19) / 32000000; + uint8_t freq_reg[3]; + freq_reg[0] = (uint8_t) (freq >> 16); + freq_reg[1] = (uint8_t) (freq >> 8); + freq_reg[2] = (uint8_t) (freq >> 0); + SX1278_SPIBurstWrite(module, LR_RegFrMsb, (uint8_t*) freq_reg, 3); //setting frequency parameter + + /* According to Semtech syncWord doesn't really work all that well. I'll set it anyway; for completeness' sake */ + SX1278_SPIWrite(module, RegSyncWord, 0xff); + + //setting base parameter + SX1278_SPIWrite(module, LR_RegPaConfig, SX1278_Power[module->power]); //Setting output power parameter + + SX1278_SPIWrite(module, LR_RegOcp, 0x0B); //RegOcp,Close Ocp + SX1278_SPIWrite(module, LR_RegLna, 0x23); //RegLNA,High & LNA Enable + if (SX1278_SpreadFactor[module->LoRa_SF] == 6) { //SFactor=6 + uint8_t tmp; + SX1278_SPIWrite(module, + LR_RegModemConfig1, + ((SX1278_LoRaBandwidth[module->LoRa_BW] << 4) + + (SX1278_CodingRate[module->LoRa_CR] << 1) + 0x01)); //Implicit Enable CRC Enable(0x02) & Error Coding rate 4/5(0x01), 4/6(0x02), 4/7(0x03), 4/8(0x04) + + SX1278_SPIWrite(module, + LR_RegModemConfig2, + ((SX1278_SpreadFactor[module->LoRa_SF] << 4) + + (SX1278_CRC_Sum[module->LoRa_CRC_sum] << 2) + 0x03)); + + tmp = SX1278_SPIRead(module, 0x31); + tmp &= 0xF8; + tmp |= 0x05; + SX1278_SPIWrite(module, 0x31, tmp); + SX1278_SPIWrite(module, 0x37, 0x0C); + } else { + SX1278_SPIWrite(module, + LR_RegModemConfig1, + ((SX1278_LoRaBandwidth[module->LoRa_BW] << 4) + + (SX1278_CodingRate[module->LoRa_CR] << 1) + 0x00)); //Explicit Enable CRC Enable(0x02) & Error Coding rate 4/5(0x01), 4/6(0x02), 4/7(0x03), 4/8(0x04) + + SX1278_SPIWrite(module, + LR_RegModemConfig2, + ((SX1278_SpreadFactor[module->LoRa_SF] << 4) + + (SX1278_CRC_Sum[module->LoRa_CRC_sum] << 2) + 0x00)); //SFactor & LNA gain set by the internal AGC loop + } + + SX1278_SPIWrite(module, LR_RegModemConfig3, 0x04); + SX1278_SPIWrite(module, LR_RegSymbTimeoutLsb, 0x08); //RegSymbTimeoutLsb Timeout = 0x3FF(Max) + SX1278_SPIWrite(module, LR_RegPreambleMsb, 0x00); //RegPreambleMsb + SX1278_SPIWrite(module, LR_RegPreambleLsb, 8); //RegPreambleLsb 8+4=12byte Preamble + SX1278_SPIWrite(module, REG_LR_DIOMAPPING2, 0x01); //RegDioMapping2 DIO5=00, DIO4=01 + module->readBytes = 0; + SX1278_standby(module); //Entry standby mode +} + +void SX1278_standby(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x09); + module->status = STANDBY; +} + +void SX1278_sleep(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x08); + module->status = SLEEP; +} + +void SX1278_entryLoRa(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegOpMode, 0x88); +} + +void SX1278_clearLoRaIrq(SX1278_t *module) { + SX1278_SPIWrite(module, LR_RegIrqFlags, 0xFF); +} + +int SX1278_LoRaEntryRx(SX1278_t *module, uint8_t length, uint32_t timeout) { + uint8_t addr; + + module->packetLength = length; + + SX1278_config(module); //Setting base parameter + SX1278_SPIWrite(module, REG_LR_PADAC, 0x84); //Normal and RX + SX1278_SPIWrite(module, LR_RegHopPeriod, 0xFF); //No FHSS + SX1278_SPIWrite(module, REG_LR_DIOMAPPING1, 0x01);//DIO=00,DIO1=00,DIO2=00, DIO3=01 + SX1278_SPIWrite(module, LR_RegIrqFlagsMask, 0x3F);//Open RxDone interrupt & Timeout + SX1278_clearLoRaIrq(module); + SX1278_SPIWrite(module, LR_RegPayloadLength, length);//Payload Length 21byte(this register must difine when the data long of one byte in SF is 6) + addr = SX1278_SPIRead(module, LR_RegFifoRxBaseAddr); //Read RxBaseAddr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RxBaseAddr->FiFoAddrPtr + SX1278_SPIWrite(module, LR_RegOpMode, 0x8d); //Mode//Low Frequency Mode + //SX1278_SPIWrite(module, LR_RegOpMode,0x05); //Continuous Rx Mode //High Frequency Mode + module->readBytes = 0; + + while (1) { + if ((SX1278_SPIRead(module, LR_RegModemStat) & 0x04) == 0x04) { //Rx-on going RegModemStat + module->status = RX; + return 1; + } + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + SX1278_hw_DelayMs(1); + } +} + +uint8_t SX1278_LoRaRxPacket(SX1278_t *module) { + unsigned char addr; + unsigned char packet_size; + + if (SX1278_hw_GetDIO0(module->hw)) { + memset(module->rxBuffer, 0x00, SX1278_MAX_PACKET); + + addr = SX1278_SPIRead(module, LR_RegFifoRxCurrentaddr); //last packet addr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RxBaseAddr -> FiFoAddrPtr + + if (module->LoRa_SF == SX1278_LORA_SF_6) { //When SpreadFactor is six,will used Implicit Header mode(Excluding internal packet length) + packet_size = module->packetLength; + } else { + packet_size = SX1278_SPIRead(module, LR_RegRxNbBytes); //Number for received bytes + } + + SX1278_SPIBurstRead(module, 0x00, module->rxBuffer, packet_size); + module->readBytes = packet_size; + SX1278_clearLoRaIrq(module); + } + return module->readBytes; +} + +int SX1278_LoRaEntryTx(SX1278_t *module, uint8_t length, uint32_t timeout) { + uint8_t addr; + uint8_t temp; + + module->packetLength = length; + + SX1278_config(module); //setting base parameter + SX1278_SPIWrite(module, REG_LR_PADAC, 0x87); //Tx for 20dBm + SX1278_SPIWrite(module, LR_RegHopPeriod, 0x00); //RegHopPeriod NO FHSS + SX1278_SPIWrite(module, REG_LR_DIOMAPPING1, 0x41); //DIO0=01, DIO1=00,DIO2=00, DIO3=01 + SX1278_clearLoRaIrq(module); + SX1278_SPIWrite(module, LR_RegIrqFlagsMask, 0xF7); //Open TxDone interrupt + SX1278_SPIWrite(module, LR_RegPayloadLength, length); //RegPayloadLength 21byte + addr = SX1278_SPIRead(module, LR_RegFifoTxBaseAddr); //RegFiFoTxBaseAddr + SX1278_SPIWrite(module, LR_RegFifoAddrPtr, addr); //RegFifoAddrPtr + + while (1) { + temp = SX1278_SPIRead(module, LR_RegPayloadLength); + if (temp == length) { + module->status = TX; + return 1; + } + + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + } +} + +int SX1278_LoRaTxPacket(SX1278_t *module, uint8_t *txBuffer, uint8_t length, + uint32_t timeout) { + SX1278_SPIBurstWrite(module, 0x00, txBuffer, length); + SX1278_SPIWrite(module, LR_RegOpMode, 0x8b); //Tx Mode + while (1) { + if (SX1278_hw_GetDIO0(module->hw)) { //if(Get_NIRQ()) //Packet send over + SX1278_SPIRead(module, LR_RegIrqFlags); + SX1278_clearLoRaIrq(module); //Clear irq + SX1278_standby(module); //Entry Standby mode + return 1; + } + + if (--timeout == 0) { + SX1278_hw_Reset(module->hw); + SX1278_config(module); + return 0; + } + SX1278_hw_DelayMs(1); + } +} + +void SX1278_init(SX1278_t *module, uint64_t frequency, uint8_t power, + uint8_t LoRa_SF, uint8_t LoRa_BW, uint8_t LoRa_CR, + uint8_t LoRa_CRC_sum, uint8_t packetLength) { + SX1278_hw_init(module->hw); + module->frequency = frequency; + module->power = power; + module->LoRa_SF = LoRa_SF; + module->LoRa_BW = LoRa_BW; + module->LoRa_CR = LoRa_CR; + module->LoRa_CRC_sum = LoRa_CRC_sum; + module->packetLength = packetLength; + SX1278_config(module); +} + +int SX1278_transmit(SX1278_t *module, uint8_t *txBuf, uint8_t length, + uint32_t timeout) { + if (SX1278_LoRaEntryTx(module, length, timeout)) { + return SX1278_LoRaTxPacket(module, txBuf, length, timeout); + } + return 0; +} + +int SX1278_receive(SX1278_t *module, uint8_t length, uint32_t timeout) { + return SX1278_LoRaEntryRx(module, length, timeout); +} + +uint8_t SX1278_available(SX1278_t *module) { + return SX1278_LoRaRxPacket(module); +} + +uint8_t SX1278_read(SX1278_t *module, uint8_t *rxBuf, uint8_t length) { + if (length != module->readBytes) + length = module->readBytes; + memcpy(rxBuf, module->rxBuffer, length); + rxBuf[length] = '\0'; + module->readBytes = 0; + return length; +} + +uint8_t SX1278_RSSI_LoRa(SX1278_t *module) { + uint32_t temp = 10; + temp = SX1278_SPIRead(module, LR_RegRssiValue); //Read RegRssiValue, Rssi value + temp = temp + 127 - 137; //127:Max RSSI, 137:RSSI offset + return (uint8_t) temp; +} + +uint8_t SX1278_RSSI(SX1278_t *module) { + uint8_t temp = 0xff; + temp = SX1278_SPIRead(module, RegRssiValue); + temp = 127 - (temp >> 1); //127:Max RSSI + return temp; +} diff --git a/STM32/Core/Src/SX1278_hw.c b/STM32/Core/Src/SX1278_hw.c new file mode 100644 index 0000000..738079b --- /dev/null +++ b/STM32/Core/Src/SX1278_hw.c @@ -0,0 +1,60 @@ +/** + * Author Wojciech Domski + * www: www.Domski.pl + * + * Hardware layer for SX1278 LoRa module + */ + +#include +#include +#include "main.h" +//#include "gpio.h" +//#include "spi.h" + +__weak void SX1278_hw_init(SX1278_hw_t *hw) { + SX1278_hw_SetNSS(hw, 1); + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_SET); +} + +__weak void SX1278_hw_SetNSS(SX1278_hw_t *hw, int value) { + HAL_GPIO_WritePin(hw->nss.port, hw->nss.pin, + (value == 1) ? GPIO_PIN_SET : GPIO_PIN_RESET); +} + +__weak void SX1278_hw_Reset(SX1278_hw_t *hw) { + SX1278_hw_SetNSS(hw, 1); + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_RESET); + + SX1278_hw_DelayMs(1); + + HAL_GPIO_WritePin(hw->reset.port, hw->reset.pin, GPIO_PIN_SET); + + SX1278_hw_DelayMs(100); +} + +__weak void SX1278_hw_SPICommand(SX1278_hw_t *hw, uint8_t cmd) { + SX1278_hw_SetNSS(hw, 0); + HAL_SPI_Transmit(hw->spi, &cmd, 1, 1000); + while (HAL_SPI_GetState(hw->spi) != HAL_SPI_STATE_READY) + ; +} + +__weak uint8_t SX1278_hw_SPIReadByte(SX1278_hw_t *hw) { + uint8_t txByte = 0x00; + uint8_t rxByte = 0x00; + + SX1278_hw_SetNSS(hw, 0); + HAL_SPI_TransmitReceive(hw->spi, &txByte, &rxByte, 1, 1000); + while (HAL_SPI_GetState(hw->spi) != HAL_SPI_STATE_READY) + ; + return rxByte; +} + +__weak void SX1278_hw_DelayMs(uint32_t msec) { + HAL_Delay(msec); +} + +__weak int SX1278_hw_GetDIO0(SX1278_hw_t *hw) { + return (HAL_GPIO_ReadPin(hw->dio0.port, hw->dio0.pin) == GPIO_PIN_SET); +} + diff --git a/STM32/Core/Src/arduinoFFT.cpp b/STM32/Core/Src/arduinoFFT.cpp new file mode 100644 index 0000000..69fa840 --- /dev/null +++ b/STM32/Core/Src/arduinoFFT.cpp @@ -0,0 +1,280 @@ +/* + + FFT libray + Copyright (C) 2010 Didier Longueville + Copyright (C) 2014 Enrique Condes + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#include + +arduinoFFT::arduinoFFT(double *vReal, double *vImag, uint16_t samples, double samplingFrequency) +{// Constructor + this->_vReal = vReal; + this->_vImag = vImag; + this->_samples = samples; + this->_samplingFrequency = samplingFrequency; + this->_power = Exponent(samples); +} + +arduinoFFT::~arduinoFFT(void) +{ +// Destructor +} + +uint8_t arduinoFFT::Revision(void) +{ + return(FFT_LIB_REV); +} + +void arduinoFFT::Compute(uint8_t dir) +{// Computes in-place complex-to-complex FFT / + // Reverse bits / + uint16_t j = 0; + for (uint16_t i = 0; i < (this->_samples - 1); i++) { + if (i < j) { + Swap(&this->_vReal[i], &this->_vReal[j]); + if(dir==FFT_REVERSE) + Swap(&this->_vImag[i], &this->_vImag[j]); + } + uint16_t k = (this->_samples >> 1); + while (k <= j) { + j -= k; + k >>= 1; + } + j += k; + } + // Compute the FFT / +#ifdef __AVR__ + uint8_t index = 0; +#endif + double c1 = -1.0; + double c2 = 0.0; + uint16_t l2 = 1; + for (uint8_t l = 0; (l < this->_power); l++) { + uint16_t l1 = l2; + l2 <<= 1; + double u1 = 1.0; + double u2 = 0.0; + for (j = 0; j < l1; j++) { + for (uint16_t i = j; i < this->_samples; i += l2) { + uint16_t i1 = i + l1; + double t1 = u1 * this->_vReal[i1] - u2 * this->_vImag[i1]; + double t2 = u1 * this->_vImag[i1] + u2 * this->_vReal[i1]; + this->_vReal[i1] = this->_vReal[i] - t1; + this->_vImag[i1] = this->_vImag[i] - t2; + this->_vReal[i] += t1; + this->_vImag[i] += t2; + } + double z = ((u1 * c1) - (u2 * c2)); + u2 = ((u1 * c2) + (u2 * c1)); + u1 = z; + } +#ifdef __AVR__ + c2 = pgm_read_float_near(&(_c2[index])); + c1 = pgm_read_float_near(&(_c1[index])); + index++; +#else + c2 = sqrt((1.0 - c1) / 2.0); + c1 = sqrt((1.0 + c1) / 2.0); +#endif + if (dir == FFT_FORWARD) { + c2 = -c2; + } + } + // Scaling for reverse transform / + if (dir != FFT_FORWARD) { + for (uint16_t i = 0; i < this->_samples; i++) { + this->_vReal[i] /= this->_samples; + this->_vImag[i] /= this->_samples; + } + } +} + +void arduinoFFT::ComplexToMagnitude() +{ // vM is half the size of vReal and vImag + for (uint16_t i = 0; i < this->_samples; i++) { + this->_vReal[i] = sqrt(sq(this->_vReal[i]) + sq(this->_vImag[i])); + } +} + +void arduinoFFT::DCRemoval() +{ + // calculate the mean of vData + double mean = 0; + for (uint16_t i = 0; i < this->_samples; i++) + { + mean += this->_vReal[i]; + } + mean /= this->_samples; + // Subtract the mean from vData + for (uint16_t i = 0; i < this->_samples; i++) + { + this->_vReal[i] -= mean; + } +} + +void arduinoFFT::Windowing(uint8_t windowType, uint8_t dir) +{// Weighing factors are computed once before multiple use of FFT +// The weighing function is symetric; half the weighs are recorded + double samplesMinusOne = (double(this->_samples) - 1.0); + for (uint16_t i = 0; i < (this->_samples >> 1); i++) { + double indexMinusOne = double(i); + double ratio = (indexMinusOne / samplesMinusOne); + double weighingFactor = 1.0; + // TODO Make this only calculate once + // Compute and record weighting factor + switch (windowType) { + case FFT_WIN_TYP_RECTANGLE: // rectangle (box car) + weighingFactor = 1.0; + break; + case FFT_WIN_TYP_HAMMING: // hamming + weighingFactor = 0.54 - (0.46 * cos(twoPi * ratio)); + //weighingFactor = 0.080000000000000016; + break; + case FFT_WIN_TYP_HANN: // hann + weighingFactor = 0.54 * (1.0 - cos(twoPi * ratio)); + break; + case FFT_WIN_TYP_TRIANGLE: // triangle (Bartlett) + #if defined(ESP8266) || defined(ESP32) + weighingFactor = 1.0 - ((2.0 * fabs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne); + #else + weighingFactor = 1.0 - ((2.0 * abs(indexMinusOne - (samplesMinusOne / 2.0))) / samplesMinusOne); + #endif + break; + case FFT_WIN_TYP_NUTTALL: // nuttall + weighingFactor = 0.355768 - (0.487396 * (cos(twoPi * ratio))) + (0.144232 * (cos(fourPi * ratio))) - (0.012604 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN: // blackman + weighingFactor = 0.42323 - (0.49755 * (cos(twoPi * ratio))) + (0.07922 * (cos(fourPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN_NUTTALL: // blackman nuttall + weighingFactor = 0.3635819 - (0.4891775 * (cos(twoPi * ratio))) + (0.1365995 * (cos(fourPi * ratio))) - (0.0106411 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_BLACKMAN_HARRIS: // blackman harris + weighingFactor = 0.35875 - (0.48829 * (cos(twoPi * ratio))) + (0.14128 * (cos(fourPi * ratio))) - (0.01168 * (cos(sixPi * ratio))); + break; + case FFT_WIN_TYP_FLT_TOP: // flat top + weighingFactor = 0.2810639 - (0.5208972 * cos(twoPi * ratio)) + (0.1980399 * cos(fourPi * ratio)); + break; + case FFT_WIN_TYP_WELCH: // welch + weighingFactor = 1.0 - sq((indexMinusOne - samplesMinusOne / 2.0) / (samplesMinusOne / 2.0)); + break; + } + if (dir == FFT_FORWARD) { + this->_vReal[i] *= weighingFactor; + this->_vReal[this->_samples - (i + 1)] *= weighingFactor; + } + else { + this->_vReal[i] /= weighingFactor; + this->_vReal[this->_samples - (i + 1)] /= weighingFactor; + } + } +} + +double arduinoFFT::MajorPeak() +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i-1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i+1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY-1] - this->_vReal[IndexOfMaxY+1]) / (this->_vReal[IndexOfMaxY-1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY+1])); + double interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples-1); + if(IndexOfMaxY==(this->_samples >> 1)) //To improve calculation on edge values + interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + // returned value: interpolated frequency peak apex + return(interpolatedX); +} + +void arduinoFFT::MajorPeakAndMagnitude(double *freq_interpolated, double *mag_interpolated) +// Added by me +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i-1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i+1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY-1] - this->_vReal[IndexOfMaxY+1]) / (this->_vReal[IndexOfMaxY-1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY+1])); + *freq_interpolated = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples-1); + if(IndexOfMaxY==(this->_samples >> 1)) //To improve calculation on edge values + *freq_interpolated = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + + if (delta <= 0) { // We can add the equals check here as well as a delta of zero has no effect. + *mag_interpolated = ( this->_vReal[IndexOfMaxY] + (delta * (this->_vReal[IndexOfMaxY] - this->_vReal[IndexOfMaxY-1])) ); + } else if (delta > 0) { + *mag_interpolated = ( this->_vReal[IndexOfMaxY] - (delta * (this->_vReal[IndexOfMaxY] - this->_vReal[IndexOfMaxY+1])) ); + } +} + +void arduinoFFT::MajorPeak(double *f, double *v) +{ + double maxY = 0; + uint16_t IndexOfMaxY = 0; + //If sampling_frequency = 2 * max_frequency in signal, + //value would be stored at position samples/2 + for (uint16_t i = 1; i < ((this->_samples >> 1) + 1); i++) { + if ((this->_vReal[i - 1] < this->_vReal[i]) && (this->_vReal[i] > this->_vReal[i + 1])) { + if (this->_vReal[i] > maxY) { + maxY = this->_vReal[i]; + IndexOfMaxY = i; + } + } + } + double delta = 0.5 * ((this->_vReal[IndexOfMaxY - 1] - this->_vReal[IndexOfMaxY + 1]) / (this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1])); + double interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples - 1); + if (IndexOfMaxY == (this->_samples >> 1)) //To improve calculation on edge values + interpolatedX = ((IndexOfMaxY + delta) * this->_samplingFrequency) / (this->_samples); + // returned value: interpolated frequency peak apex + *f = interpolatedX; + #if defined(ESP8266) || defined(ESP32) + *v = fabs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]); + #else + *v = abs(this->_vReal[IndexOfMaxY - 1] - (2.0 * this->_vReal[IndexOfMaxY]) + this->_vReal[IndexOfMaxY + 1]); + #endif +} + +uint8_t arduinoFFT::Exponent(uint16_t value) +{ + #warning("This method may not be accessible on future revisions.") + // Calculates the base 2 logarithm of a value + uint8_t result = 0; + while (((value >> result) & 1) != 1) result++; + return(result); +} + +// Private functions + +void arduinoFFT::Swap(double *x, double *y) +{ + double temp = *x; + *x = *y; + *y = temp; +} diff --git a/STM32/Core/Src/main.cpp b/STM32/Core/Src/main.cpp new file mode 100644 index 0000000..8abe85d --- /dev/null +++ b/STM32/Core/Src/main.cpp @@ -0,0 +1,1135 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include +#include +#include +#include + +#include +#include +#include + + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +#define VERBOSE // print debug messages via USART +#define VERY_VERBOSE +#define I2C_RX 0 +#define I2C_TX 1 +#define DEVICE_COUNT 5 + +// FFT things +#define START_BIN 3 +#define FFT_BINS 512 // Actually usable bins after FFT +#define SAMPLE_SIZE (FFT_BINS * 2) +#define BUFSIZE (SAMPLE_SIZE * 4) + +// Audio stuff +#define MIC_OFFSET_DB 2 +#define MIC_REF_DB 94.0 +#define MIC_SENSITIVITY -26 +#define MIC_SNR 65 +#define MIC_BITS 16 +#define MIC_OVERLOAD 120 +#define MIC_NOISE_FLOOR (MIC_REF_DB - MIC_SNR) + +// Power stuff +#define DROPOUT_VOLTAGE (3.3 + 0.25) // For a load of approx. 50 mA and LP2950ACZ-3.3G +#define BAT_VOLTAGE_CHECK_INTERVAL 60000 // ms +#define BAT_VOLTAGE_CHECK_TOLERANCE 500 // ms +#define BAT_FIELD_SIZE 1 +#define BAT_LOW_THRESHOLD DROPOUT_VOLTAGE - 0.4 // This seems odd but below the drop out voltage, MCU and LoRa will still work +#define BAT_MEASUREMENT_CYCLES 10 // Measure over 10 iterations to avoid one-offs. + +// LoRa stuff +#define LORA_SYNC_WORD 0x2AF69A00 +#define LORA_TIMEOUT 200 +#define LORA_HEADER_LENGTH sizeof(LORA_SYNC_WORD) / 2 // divide by two because we use a uint16_t (2 byte) buffer + // just fine (min. 1.8V) so we can go a bit lower for longer battery life. +#define LORA_BEACON_SIZE 10 + + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +ADC_HandleTypeDef hadc1; +DMA_HandleTypeDef hdma_adc1; + +I2C_HandleTypeDef hi2c2; + +I2S_HandleTypeDef hi2s1; +DMA_HandleTypeDef hdma_spi1_rx; + +SPI_HandleTypeDef hspi2; + +TIM_HandleTypeDef htim2; + +UART_HandleTypeDef huart4; + +/* USER CODE BEGIN PV */ +// TODO CHECK +constexpr double MIC_REF_AMPL = pow(10, double(MIC_SENSITIVITY)/20) * (pow(2, (MIC_BITS - 1)) - 1); + +char msg[64]; +uint8_t ret; +uint16_t i2s_dma_buf[BUFSIZE]; +uint32_t adc_buf[3]; +double vReal[SAMPLE_SIZE]; +double vImag[SAMPLE_SIZE]; + +volatile bool adc_ready; + +volatile uint32_t adc_avg; +volatile float bat_voltage_avg; + +bool got_i2c_setup_message; +volatile bool got_beacon; +volatile bool flip_buffer; +volatile bool tx_due; +volatile uint8_t adc_counter; +volatile uint8_t tick_count = LORA_HEADER_LENGTH; +uint8_t verbosity; + +uint8_t i2c_tx_counter; +uint16_t lora_beacon_rx_buffer[5]; +uint16_t i2c_tx_buffer[1024]; +uint16_t first_sync_message[5]; + +// Capitalized means "const" but we cannot make them real const as that doesn't work with the protcol. +uint8_t PACKET_LENGTH; +uint8_t LORA_PACKET_SIZE; +uint16_t TX_OFFSET; +uint16_t TICK_COUNT; +uint16_t measured_values1[63]; // TODO +uint16_t measured_values2[63]; +uint32_t TICK_DURATION_US; + + +volatile uint8_t device_id; +char i2c_rx_buffer[4]; + + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_DMA_Init(void); +static void MX_ADC1_Init(void); +static void MX_I2S1_Init(void); +static void MX_SPI2_Init(void); +static void MX_I2C2_Init(void); +static void MX_USART4_UART_Init(void); +static void MX_TIM2_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ +SX1278_hw_t SX1278_hw; +SX1278_t SX1278; + + +void PrintVector(double *vData, uint16_t bufferSize, uint8_t scaleType) { + for (uint16_t i = 0; i < bufferSize; i++) // First two bins are not meaningful. + { + char buf[10]; + char buf2[bufferSize]; + double abscissa; + /* Print abscissa value */ + switch (scaleType) + { + case 0: + abscissa = (i * 1.0); + break; + case 1: + abscissa = ((i * 1.0) / hi2s1.Init.AudioFreq); + break; + case 2: + abscissa = ((i * 1.0 * hi2s1.Init.AudioFreq) / SAMPLE_SIZE); + break; + + default: + break; + } + + sprintf(buf, "%.4f", abscissa); + HAL_UART_Transmit(&huart4, (uint8_t *) buf, strlen(buf), 100); + + if(scaleType==2) { + HAL_UART_Transmit(&huart4, (uint8_t *) " Hz", 3, 100); + } + + HAL_UART_Transmit(&huart4, (uint8_t *) " ", 1, 100); + + sprintf(buf2, "%.4f, %.4f dB\n", vData[i], (20 * log10(vData[i]))); + HAL_UART_Transmit(&huart4, (uint8_t *) buf2, strlen(buf2), 100); + } + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); +} + + +/** + * Helper function to split the LoRa sync word from the device ID in a LoRa message. + */ + +_Bool IsOwnLoraPacket(uint16_t *buf) { + if (buf[0] == (LORA_SYNC_WORD >> 16) && (buf[1] & 0xff00) == (uint16_t) (LORA_SYNC_WORD) ) { + return 1; + } + + return 0; +} + +uint8_t GetDeviceId(uint16_t *buf) { + return (buf[1] & 0x00ff); +} + + +/* + * Do FFT on the filled arrays, calculate RMS and return the A-weighted dB value. + */ +uint16_t GetDBA(double *vReal, double *vImag) { + arduinoFFT fft = arduinoFFT(vReal, vImag, SAMPLE_SIZE, hi2s1.Init.AudioFreq); + fft.Windowing(FFT_WIN_TYP_HANN, FFT_FORWARD); + fft.Compute(FFT_FORWARD); + fft.ComplexToMagnitude(); + + double squared_sum = 0; + for (uint16_t i = START_BIN; i < FFT_BINS; i++) { + squared_sum += (pow(vReal[i], 2) * CORRECTION_VALUES[i]); // Parseval's Theorem + } + + double rms = 1.63 * sqrt(2.0 * squared_sum / (SAMPLE_SIZE * SAMPLE_SIZE)); // https://de.mathworks.com/matlabcentral/answers/372516-calculate-windowing-correction-factor + double dbA = MIC_OFFSET_DB + MIC_REF_DB + 20 * log10(rms / MIC_REF_AMPL); + + // We can't measure below that as the noise from the microphone is louder than the ambient sound itself. + if (dbA <= MIC_NOISE_FLOOR) { + dbA = MIC_NOISE_FLOOR; + } else if (dbA >= MIC_OVERLOAD) { + dbA = MIC_OVERLOAD; + } + + return (dbA * 10); // Make a fixed point from the double. Give us one decimal point of precision which is plenty. +} + + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_DMA_Init(); + MX_ADC1_Init(); + MX_I2S1_Init(); + MX_SPI2_Init(); + MX_I2C2_Init(); + MX_USART4_UART_Init(); + MX_TIM2_Init(); + /* USER CODE BEGIN 2 */ + +#ifdef VERBOSE + verbosity = 1; +#endif + +#ifdef VERY_VERBOSE + verbosity = 2; +#endif + + //SX1278_hw.dio0.port = DIO0_GPIO_Port; + //SX1278_hw.dio0.pin = DIO0_; + SX1278_hw.dio0.port = GPIOB; + SX1278_hw.dio0.pin = GPIO_PIN_0; + SX1278_hw.nss.port = NSS_GPIO_Port; + SX1278_hw.nss.pin = NSS_Pin; + SX1278_hw.reset.port = RESET_GPIO_Port; + SX1278_hw.reset.pin = RESET_Pin; + SX1278_hw.spi = &hspi2; + SX1278.hw = &SX1278_hw; + + SX1278_init(&SX1278, 866000000, SX1278_POWER_14DBM, SX1278_LORA_SF_8, SX1278_LORA_BW_250KHZ, SX1278_LORA_CR_4_5, SX1278_LORA_CRC_EN, 60); + + HAL_I2S_Receive_DMA(&hi2s1, (uint16_t *) i2s_dma_buf, BUFSIZE/2); + + // This would work just fine without DMA but multiple channels don't work in polling mode. + HAL_TIM_Base_Start(&htim2); + HAL_ADC_Start_DMA(&hadc1, adc_buf, hadc1.Init.NbrOfConversion); + while (!adc_ready); + adc_ready = 0; + HAL_ADC_Stop_DMA(&hadc1); + uint32_t adc_value = adc_buf[0]; + + if (verbosity >= 2) { + sprintf(msg, "%lu %lu\n", adc_buf[0], adc_buf[1]); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + if (adc_value <= 400) { // LOW + device_id = 4; + } else if (adc_value >= 600 && adc_value <= 1400) { // 3V3 -- 10k -- 3k3 -- GND + device_id = 1; + } else if (adc_value >= 1600 && adc_value <= 2400) { // 3V3 -- 10k -- 10k -- GND + device_id = 2; + } else if (adc_value >= 2600 && adc_value <= 3400) { // 3V3 -- 10k -- 33k -- GND + device_id = 3; + } else if (adc_value >= 3600) { // HIGH + device_id = 0; // Master + HAL_I2C_EnableListen_IT(&hi2c2); + } + + if (device_id == 0) { + while (!got_i2c_setup_message) { HAL_UART_Transmit(&huart4, (uint8_t *) "wait for i2c\n", 13, 100); } + got_i2c_setup_message = 0; + + TICK_COUNT = i2c_rx_buffer[1]; + TICK_DURATION_US = i2c_rx_buffer[2] * 1000000; // Seconds to µs. + TX_OFFSET = i2c_rx_buffer[3]; // In ticks + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + + first_sync_message[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + first_sync_message[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + first_sync_message[2] = TICK_COUNT; // Tick count + first_sync_message[3] = i2c_rx_buffer[2]; // Tick duration + first_sync_message[4] = TX_OFFSET; // Tx offset + + if (verbosity >= 1) { + sprintf(msg, "tc: %u, td: %u, tx_offs: %u\n", first_sync_message[2], i2c_rx_buffer[2], first_sync_message[4]); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + } + + uint16_t lora_rx_buffer[PACKET_LENGTH]; + if (verbosity >= 1) { + sprintf(msg, "My device ID is %u\n", device_id); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + + // Master + if (device_id == 0) { + + __HAL_TIM_SET_COUNTER(&htim2, 0); + + + // Send a sync beacon at the start of every "period". + if (tick_count == 2) { + SX1278_LoRaEntryTx(&SX1278, LORA_BEACON_SIZE, LORA_TIMEOUT); + + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &first_sync_message, LORA_BEACON_SIZE, LORA_TIMEOUT); + //SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values1, 4, LORA_TIMEOUT); + HAL_UART_Transmit(&huart4, (uint8_t *) first_sync_message, LORA_BEACON_SIZE, 100); + + if (verbosity >= 1) { + HAL_UART_Transmit(&huart4, (uint8_t *) "\nsent beacon\n", 13, 100); + } else if (verbosity >= 2) { + HAL_UART_Transmit(&huart4, (uint8_t *) first_sync_message, 10, 100); + } + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + + // Change back to Rx again. + SX1278_LoRaEntryRx(&SX1278, LORA_PACKET_SIZE, LORA_TIMEOUT); + } + + for (volatile uint16_t i = 0; i < BUFSIZE; i += 4) { + vReal[i/4] = abs(65535 - i2s_dma_buf[i]); + vImag[i/4] = 0; + } + + // For the master, one buffer is enough. No need to flip. + measured_values1[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + //sprintf(msg, "array[%u]: %u\n", tick_count, i2c_tx_buffer[tick_count]); + //HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + + tick_count++; + + if (tick_count == PACKET_LENGTH - BAT_FIELD_SIZE) { // Last measurement, now wait for I²C + bool debug_sent = 0; + while (!got_i2c_setup_message) { + if (verbosity >= 1 && !debug_sent) { + HAL_UART_Transmit(&huart4, (uint8_t *) "Waiting for I2C\n", 16, 100); + debug_sent = 1; + } + } + + if (verbosity >= 1) { + HAL_UART_Transmit(&huart4, (uint8_t *) "Got I2C sync\n", 13, 100); + } + + memcpy(&i2c_tx_buffer[0], &measured_values1, LORA_PACKET_SIZE); + + TICK_COUNT = i2c_rx_buffer[1]; + TICK_DURATION_US = i2c_rx_buffer[2] * 1000000; // Seconds to µs. + TX_OFFSET = i2c_rx_buffer[3]; // In ticks + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + first_sync_message[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + first_sync_message[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + first_sync_message[2] = TICK_COUNT; // Tick count + first_sync_message[3] = i2c_rx_buffer[2]; // Tick duration + first_sync_message[4] = TX_OFFSET; // Tx offset + + got_i2c_setup_message = 0; + tick_count = LORA_HEADER_LENGTH; + sprintf(msg, "tickcountreset %u, gotmsg %u\n", tick_count, got_i2c_setup_message); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + + } else { + while (__HAL_TIM_GET_COUNTER(&htim2) < TICK_DURATION_US) { + ret = SX1278_LoRaRxPacket(&SX1278); + + // Only accept packages within our expected length to avoid buffer overflows. + if (ret > 0 && ret <= LORA_PACKET_SIZE) { + memset(lora_rx_buffer, 0, sizeof lora_rx_buffer); + SX1278_read(&SX1278, (uint8_t*) lora_rx_buffer, LORA_PACKET_SIZE); + + if (IsOwnLoraPacket(lora_rx_buffer)) { + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + + uint8_t devid = GetDeviceId(lora_rx_buffer); + memcpy(&i2c_tx_buffer[devid * PACKET_LENGTH], &lora_rx_buffer, LORA_PACKET_SIZE); + + if (verbosity >= 1) { + sprintf(msg, "Rx %u bytes: ", sizeof(lora_rx_buffer)); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + HAL_UART_Transmit(&huart4, (uint8_t *) lora_rx_buffer, LORA_PACKET_SIZE, 100); + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + } + + HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + break; // No need to check again as no two Rx can happen within one tick. + } + } + } + } + + while (__HAL_TIM_GET_COUNTER(&htim2) < TICK_DURATION_US) { + // Just wait. + } + + } else { + if (!got_beacon) { + SX1278_LoRaEntryRx(&SX1278, 4, LORA_TIMEOUT); + } + + while (!got_beacon) { + ret = SX1278_LoRaRxPacket(&SX1278); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "awaiting beacon\n", 16, 100); } + + if (ret > 0 && ret <= LORA_BEACON_SIZE) { + HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, LORA_BEACON_SIZE, 100); + SX1278_read(&SX1278, (uint8_t*) lora_beacon_rx_buffer, LORA_BEACON_SIZE); + + // Beacons only come from the master (device_id == 0) + if (IsOwnLoraPacket(lora_beacon_rx_buffer) && GetDeviceId(lora_beacon_rx_buffer) == 0) { + TICK_COUNT = lora_beacon_rx_buffer[2]; + TICK_DURATION_US = lora_beacon_rx_buffer[3] * 1000000; + TX_OFFSET = lora_beacon_rx_buffer[4]; + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + got_beacon = 1; + + if (verbosity >= 2) { + sprintf(msg, "tc: %u, td: %lu, offs: %u\n", TICK_COUNT, TICK_DURATION_US, TX_OFFSET); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, LORA_BEACON_SIZE, 100); + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + + } + break; + } + } + HAL_Delay(150); // Going at full throttle just pisses away power. + } + + sprintf(msg, "tc: %u, td: %lu, offs: %u\n", TICK_COUNT, TICK_DURATION_US, TX_OFFSET); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + // Use the first 4 bytes as LoRa sync word and device ID. + measured_values1[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + measured_values2[0] = (uint16_t) (LORA_SYNC_WORD >> 16); + measured_values1[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + measured_values2[1] = (uint16_t) (LORA_SYNC_WORD | device_id); + + // Battery state. + measured_values1[PACKET_LENGTH - 1] = 0x0000; + measured_values2[PACKET_LENGTH - 1] = 0x0000; + + + __HAL_TIM_SET_COUNTER(&htim2, 0); + + // TICK_COUNT / 2 avoids measurement during Tx which drops the voltage a fair bit. + if (device_id != 0 && tick_count == (TICK_COUNT / 2)) { + HAL_ADC_Start_DMA(&hadc1, adc_buf, hadc1.Init.NbrOfConversion); + while (!adc_ready); + adc_ready = 0; + HAL_ADC_Stop_DMA(&hadc1); + adc_avg += adc_buf[1]; + adc_counter++; + + if (adc_counter == BAT_MEASUREMENT_CYCLES) { + HAL_ADCEx_Calibration_Start(&hadc1); // As per data sheet this needs to happen while the ADC is not running. + uint32_t cal = HAL_ADCEx_Calibration_GetValue(&hadc1) / 2; // Returns an offset we add to the measurement later on. + + adc_avg /= adc_counter; + bat_voltage_avg = ((adc_avg + cal) * 1.212 / adc_buf[2]) * 2; // 1.212 is the VREFINT voltage as per data sheet. + + if (verbosity >= 2) { + sprintf(msg, "V_BAT: %.4f, ADC: %lu\n", bat_voltage_avg, adc_avg); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + if (bat_voltage_avg <= DROPOUT_VOLTAGE) { + measured_values1[PACKET_LENGTH - BAT_FIELD_SIZE] = 0xffff; + measured_values2[PACKET_LENGTH - BAT_FIELD_SIZE] = 0xffff; + if (verbosity >= 1) { + sprintf(msg, "V_BAT: %.3f V below %.3f V, flipped battery bits\n", bat_voltage_avg, BAT_LOW_THRESHOLD); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } + + bat_voltage_avg = 0; + adc_avg = 0; + adc_counter = 0; + } + } + + if (verbosity >= 2) { + sprintf(msg, "tc: %u, tx_due: %u\n", tick_count, tx_due); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + + // Wait for device ID times offset with sending to avoid overlapping transmissions at the master node. + if ( tx_due && tick_count == (LORA_HEADER_LENGTH - 1 + (device_id * TX_OFFSET)) ) { + //HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + if (flip_buffer) { + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values1, LORA_PACKET_SIZE, LORA_TIMEOUT); + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "sent arr. 1\n", 12, 100); } + } else { + SX1278_LoRaTxPacket(&SX1278, (uint8_t *) &measured_values2, LORA_PACKET_SIZE, LORA_TIMEOUT); + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "sent arr. 2\n", 12, 100); } + } + + //HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + tx_due = 0; + } + + for (volatile uint16_t i = 0; i < BUFSIZE; i += 4) { + vReal[i/4] = abs(65535 - i2s_dma_buf[i]); + vImag[i/4] = 0; + } + + // Alternate between two buffers to allow sending while another buffer is being written to. + if (flip_buffer) { + measured_values2[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array 1: %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } else { + measured_values1[tick_count] = GetDBA(vReal, vImag); + if (verbosity >= 2) { + sprintf(msg, "fill array 1: %u\n", tick_count); + HAL_UART_Transmit(&huart4, (uint8_t *) msg, strlen(msg), 100); + } + } + + // One tick before expecting the sync beacon we switch to Rx. We could've done this earlier + // but keeping the LoRa module in Rx mode uses up a lot of power. + if (tick_count == ( PACKET_LENGTH - BAT_FIELD_SIZE - 2 ) ) { + SX1278_LoRaEntryRx(&SX1278, 4, LORA_TIMEOUT); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "switch to rx\n", 13, 100); } + } + + tick_count++; + + // TODO This could probably be done in the while !beacon loop. + // TODO Update setup values should they change. + // All measurements are done and we're waiting for the sync beacon to start the cycle again. + while ( __HAL_TIM_GET_COUNTER(&htim2) < (TICK_DURATION_US) || tick_count == (PACKET_LENGTH - BAT_FIELD_SIZE ) ) { + ret = SX1278_LoRaRxPacket(&SX1278); + + if (ret > 0 && ret <= LORA_BEACON_SIZE) { + memset(lora_beacon_rx_buffer, 0, sizeof lora_beacon_rx_buffer); + SX1278_read(&SX1278, (uint8_t*) lora_beacon_rx_buffer, LORA_BEACON_SIZE); + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) lora_beacon_rx_buffer, sizeof(lora_beacon_rx_buffer), 100); } + + // Beacons only come from the master (device_id == 0) + if (IsOwnLoraPacket(lora_beacon_rx_buffer) && GetDeviceId(lora_beacon_rx_buffer) == 0) { + if (verbosity >= 1) { HAL_UART_Transmit(&huart4, (uint8_t *) "rx beacon\n", 10, 100); } + + flip_buffer ^= 1; // Flip the flip_buffer bit. + tick_count = LORA_HEADER_LENGTH; + + uint8_t new_tick_count = lora_beacon_rx_buffer[2]; + uint32_t new_tick_duration = lora_beacon_rx_buffer[3] * 1000000; + uint8_t new_tx_offset = lora_beacon_rx_buffer[4]; + + // If one of these values changes, don't send the last packet as it's not adhering to the new parameters anymore. + if (new_tick_count != TICK_COUNT || new_tick_duration != TICK_DURATION_US || new_tx_offset != TX_OFFSET) { + tx_due = 0; + HAL_UART_Transmit(&huart4, (uint8_t *) "values changed, don't send\n", 27, 100); + } else { + tx_due = 1; + } + + if (verbosity >= 2) { HAL_UART_Transmit(&huart4, (uint8_t *) "flip\n", 6, 100); } + + TICK_COUNT = new_tick_count; + TICK_DURATION_US = new_tick_duration; + TX_OFFSET = new_tx_offset; + PACKET_LENGTH = (TICK_COUNT + LORA_HEADER_LENGTH + BAT_FIELD_SIZE); + LORA_PACKET_SIZE = PACKET_LENGTH * 2; + + HAL_UART_Transmit(&huart4, (uint8_t *) "\n", 1, 100); + while (__HAL_TIM_GET_COUNTER(&htim2) < (TICK_DURATION_US)); // Some µs might be left. + + // Switch back to Tx right here as it saves power. + SX1278_entryLoRa(&SX1278); + SX1278_LoRaEntryTx(&SX1278, LORA_PACKET_SIZE, LORA_TIMEOUT); + break; + } + } + } + + } + /* + } + + */ + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Configure the main internal regulator output voltage + */ + HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + /** Initializes the peripherals clocks + */ + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2S1|RCC_PERIPHCLK_ADC; + PeriphClkInit.I2s1ClockSelection = RCC_I2S1CLKSOURCE_SYSCLK; + PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ADC1 Initialization Function + * @param None + * @retval None + */ +static void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) + */ + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + hadc1.Init.LowPowerAutoWait = DISABLE; + hadc1.Init.LowPowerAutoPowerOff = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.NbrOfConversion = 3; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.DMAContinuousRequests = ENABLE; + hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; + hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_1CYCLE_5; + hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_1CYCLE_5; + hadc1.Init.OversamplingMode = DISABLE; + hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_2; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_9; + sConfig.Rank = ADC_REGULAR_RANK_2; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_VREFINT; + sConfig.Rank = ADC_REGULAR_RANK_3; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} + +/** + * @brief I2C2 Initialization Function + * @param None + * @retval None + */ +static void MX_I2C2_Init(void) +{ + + /* USER CODE BEGIN I2C2_Init 0 */ + + /* USER CODE END I2C2_Init 0 */ + + /* USER CODE BEGIN I2C2_Init 1 */ + + /* USER CODE END I2C2_Init 1 */ + hi2c2.Instance = I2C2; + hi2c2.Init.Timing = 0x0010061A; + hi2c2.Init.OwnAddress1 = 120; + hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; + hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; + hi2c2.Init.OwnAddress2 = 0; + hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK; + hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; + hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; + if (HAL_I2C_Init(&hi2c2) != HAL_OK) + { + Error_Handler(); + } + /** Configure Analogue filter + */ + if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK) + { + Error_Handler(); + } + /** Configure Digital filter + */ + if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2C2_Init 2 */ + if (HAL_GPIO_ReadPin(I2C_Address_GPIO_Port, I2C_Address_Pin) == GPIO_PIN_SET) { // Jumper open, internal pull up + hi2c2.Init.OwnAddress1 = 120; + } else { // Jumper closed, pulled to GND + hi2c2.Init.OwnAddress1 = 122; + } + + if (HAL_I2C_Init(&hi2c2) != HAL_OK) + { + Error_Handler(); + } + + /* USER CODE END I2C2_Init 2 */ + +} + +/** + * @brief I2S1 Initialization Function + * @param None + * @retval None + */ +static void MX_I2S1_Init(void) +{ + + /* USER CODE BEGIN I2S1_Init 0 */ + + /* USER CODE END I2S1_Init 0 */ + + /* USER CODE BEGIN I2S1_Init 1 */ + + /* USER CODE END I2S1_Init 1 */ + hi2s1.Instance = SPI1; + hi2s1.Init.Mode = I2S_MODE_MASTER_RX; + hi2s1.Init.Standard = I2S_STANDARD_PHILIPS; + hi2s1.Init.DataFormat = I2S_DATAFORMAT_24B; + hi2s1.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; + hi2s1.Init.AudioFreq = I2S_AUDIOFREQ_22K; + hi2s1.Init.CPOL = I2S_CPOL_LOW; + if (HAL_I2S_Init(&hi2s1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN I2S1_Init 2 */ + + /* USER CODE END I2S1_Init 2 */ + +} + +/** + * @brief SPI2 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI2_Init(void) +{ + + /* USER CODE BEGIN SPI2_Init 0 */ + + /* USER CODE END SPI2_Init 0 */ + + /* USER CODE BEGIN SPI2_Init 1 */ + + /* USER CODE END SPI2_Init 1 */ + /* SPI2 parameter configuration*/ + hspi2.Instance = SPI2; + hspi2.Init.Mode = SPI_MODE_MASTER; + hspi2.Init.Direction = SPI_DIRECTION_2LINES; + hspi2.Init.DataSize = SPI_DATASIZE_8BIT; + hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi2.Init.NSS = SPI_NSS_SOFT; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi2.Init.TIMode = SPI_TIMODE_DISABLE; + hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi2.Init.CRCPolynomial = 7; + hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + if (HAL_SPI_Init(&hspi2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI2_Init 2 */ + + /* USER CODE END SPI2_Init 2 */ + +} + +/** + * @brief TIM2 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM2_Init(void) +{ + + /* USER CODE BEGIN TIM2_Init 0 */ + + /* USER CODE END TIM2_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM2_Init 1 */ + + /* USER CODE END TIM2_Init 1 */ + htim2.Instance = TIM2; + htim2.Init.Prescaler = 16-1; + htim2.Init.CounterMode = TIM_COUNTERMODE_UP; + htim2.Init.Period = 4294967295; + htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim2) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + +} + +/** + * @brief USART4 Initialization Function + * @param None + * @retval None + */ +static void MX_USART4_UART_Init(void) +{ + + /* USER CODE BEGIN USART4_Init 0 */ + + /* USER CODE END USART4_Init 0 */ + + /* USER CODE BEGIN USART4_Init 1 */ + + /* USER CODE END USART4_Init 1 */ + huart4.Instance = USART4; + huart4.Init.BaudRate = 115200; + huart4.Init.WordLength = UART_WORDLENGTH_8B; + huart4.Init.StopBits = UART_STOPBITS_1; + huart4.Init.Parity = UART_PARITY_NONE; + huart4.Init.Mode = UART_MODE_TX; + huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart4.Init.OverSampling = UART_OVERSAMPLING_16; + huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1; + huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART4_Init 2 */ + + /* USER CODE END USART4_Init 2 */ + +} + +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Channel1_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); + /* DMA1_Channel2_3_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOA, LED_Pin|RESET_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pins : NSS_Pin LED_Pin RESET_Pin */ + GPIO_InitStruct.Pin = NSS_Pin|LED_Pin|RESET_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pin : PB0 */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pin : I2C_Address_Pin */ + GPIO_InitStruct.Pin = I2C_Address_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(I2C_Address_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ +void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) { + + HAL_I2C_DisableListen_IT(hi2c); + if (TransferDirection == I2C_TX) { + HAL_I2C_Slave_Transmit_IT(hi2c, (uint8_t *) &i2c_tx_buffer[i2c_tx_counter * PACKET_LENGTH], LORA_PACKET_SIZE); + i2c_tx_counter++; + } else if (TransferDirection == I2C_RX) { + HAL_I2C_Slave_Receive_IT(hi2c, (uint8_t *) i2c_rx_buffer, sizeof(i2c_rx_buffer)); // The Arduino lib sends an extra byte in the beginning. + } + +} + +void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) { + if (i2c_tx_counter == DEVICE_COUNT) { + i2c_tx_counter = 0; + memset(i2c_tx_buffer, 0, sizeof i2c_tx_buffer); + } + HAL_I2C_EnableListen_IT(hi2c); +} + +void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) { + got_i2c_setup_message = 1; + HAL_I2C_EnableListen_IT(hi2c); +} + +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { + adc_ready = 1; +} + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/stm32g0xx_hal_msp.c b/STM32/Core/Src/stm32g0xx_hal_msp.c new file mode 100644 index 0000000..4468ac7 --- /dev/null +++ b/STM32/Core/Src/stm32g0xx_hal_msp.c @@ -0,0 +1,550 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32g0xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_adc1; + +extern DMA_HandleTypeDef hdma_spi1_rx; + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + /* System interrupt init*/ + + /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral + */ + HAL_SYSCFG_StrobeDBattpinsConfig(SYSCFG_CFGR1_UCPD1_STROBE); + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief ADC MSP Initialization +* This function configures the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ADC_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PA2 ------> ADC1_IN2 + PB1 ------> ADC1_IN9 + */ + GPIO_InitStruct.Pin = Device_ID_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(Device_ID_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = BAT_Monitor_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(BAT_Monitor_GPIO_Port, &GPIO_InitStruct); + + /* ADC1 DMA Init */ + /* ADC1 Init */ + hdma_adc1.Instance = DMA1_Channel2; + hdma_adc1.Init.Request = DMA_REQUEST_ADC1; + hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; + hdma_adc1.Init.Mode = DMA_CIRCULAR; + hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC1_COMP_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(ADC1_COMP_IRQn); + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } + +} + +/** +* @brief ADC MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hadc: ADC handle pointer +* @retval None +*/ +void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) +{ + if(hadc->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PA2 ------> ADC1_IN2 + PB1 ------> ADC1_IN9 + */ + HAL_GPIO_DeInit(Device_ID_GPIO_Port, Device_ID_Pin); + + HAL_GPIO_DeInit(BAT_Monitor_GPIO_Port, BAT_Monitor_Pin); + + /* ADC1 DMA DeInit */ + HAL_DMA_DeInit(hadc->DMA_Handle); + + /* ADC1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(ADC1_COMP_IRQn); + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } + +} + +/** +* @brief I2C MSP Initialization +* This function configures the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspInit 0 */ + + /* USER CODE END I2C2_MspInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**I2C2 GPIO Configuration + PA11 [PA9] ------> I2C2_SCL + PA12 [PA10] ------> I2C2_SDA + */ + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF6_I2C2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_I2C2_CLK_ENABLE(); + /* I2C2 interrupt Init */ + HAL_NVIC_SetPriority(I2C2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(I2C2_IRQn); + /* USER CODE BEGIN I2C2_MspInit 1 */ + + /* USER CODE END I2C2_MspInit 1 */ + } + +} + +/** +* @brief I2C MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hi2c: I2C handle pointer +* @retval None +*/ +void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) +{ + if(hi2c->Instance==I2C2) + { + /* USER CODE BEGIN I2C2_MspDeInit 0 */ + + /* USER CODE END I2C2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_I2C2_CLK_DISABLE(); + + /**I2C2 GPIO Configuration + PA11 [PA9] ------> I2C2_SCL + PA12 [PA10] ------> I2C2_SDA + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_12); + + /* I2C2 interrupt DeInit */ + HAL_NVIC_DisableIRQ(I2C2_IRQn); + /* USER CODE BEGIN I2C2_MspDeInit 1 */ + + /* USER CODE END I2C2_MspDeInit 1 */ + } + +} + +/** +* @brief I2S MSP Initialization +* This function configures the hardware resources used in this example +* @param hi2s: I2S handle pointer +* @retval None +*/ +void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hi2s->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspInit 0 */ + + /* USER CODE END SPI1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**I2S1 GPIO Configuration + PA15 ------> I2S1_WS + PB3 ------> I2S1_CK + PB5 ------> I2S1_SD + */ + GPIO_InitStruct.Pin = GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_5; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* I2S1 DMA Init */ + /* SPI1_RX Init */ + hdma_spi1_rx.Instance = DMA1_Channel1; + hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX; + hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_spi1_rx.Init.Mode = DMA_CIRCULAR; + hdma_spi1_rx.Init.Priority = DMA_PRIORITY_LOW; + if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hi2s,hdmarx,hdma_spi1_rx); + + /* USER CODE BEGIN SPI1_MspInit 1 */ + + /* USER CODE END SPI1_MspInit 1 */ + } + +} + +/** +* @brief I2S MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hi2s: I2S handle pointer +* @retval None +*/ +void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s) +{ + if(hi2s->Instance==SPI1) + { + /* USER CODE BEGIN SPI1_MspDeInit 0 */ + + /* USER CODE END SPI1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI1_CLK_DISABLE(); + + /**I2S1 GPIO Configuration + PA15 ------> I2S1_WS + PB3 ------> I2S1_CK + PB5 ------> I2S1_SD + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_15); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_3|GPIO_PIN_5); + + /* I2S1 DMA DeInit */ + HAL_DMA_DeInit(hi2s->hdmarx); + /* USER CODE BEGIN SPI1_MspDeInit 1 */ + + /* USER CODE END SPI1_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspInit 0 */ + + /* USER CODE END SPI2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**SPI2 GPIO Configuration + PA3 ------> SPI2_MISO + PA4 ------> SPI2_MOSI + PB8 ------> SPI2_SCK + */ + GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF0_SPI2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI2_MspInit 1 */ + + /* USER CODE END SPI2_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspDeInit 0 */ + + /* USER CODE END SPI2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI2_CLK_DISABLE(); + + /**SPI2 GPIO Configuration + PA3 ------> SPI2_MISO + PA4 ------> SPI2_MOSI + PB8 ------> SPI2_SCK + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_4); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8); + + /* USER CODE BEGIN SPI2_MspDeInit 1 */ + + /* USER CODE END SPI2_MspDeInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART4) + { + /* USER CODE BEGIN USART4_MspInit 0 */ + + /* USER CODE END USART4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART4_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART4 GPIO Configuration + PA0 ------> USART4_TX + PA1 ------> USART4_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF4_USART4; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART4_MspInit 1 */ + + /* USER CODE END USART4_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART4) + { + /* USER CODE BEGIN USART4_MspDeInit 0 */ + + /* USER CODE END USART4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART4_CLK_DISABLE(); + + /**USART4 GPIO Configuration + PA0 ------> USART4_TX + PA1 ------> USART4_RX + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1); + + /* USER CODE BEGIN USART4_MspDeInit 1 */ + + /* USER CODE END USART4_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/stm32g0xx_it.c b/STM32/Core/Src/stm32g0xx_it.c new file mode 100644 index 0000000..ef7d585 --- /dev/null +++ b/STM32/Core/Src/stm32g0xx_it.c @@ -0,0 +1,208 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32g0xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32g0xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern DMA_HandleTypeDef hdma_adc1; +extern ADC_HandleTypeDef hadc1; +extern I2C_HandleTypeDef hi2c2; +extern DMA_HandleTypeDef hdma_spi1_rx; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M0+ Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32G0xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32g0xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles DMA1 channel 1 interrupt. + */ +void DMA1_Channel1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */ + + /* USER CODE END DMA1_Channel1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_spi1_rx); + /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ + + /* USER CODE END DMA1_Channel1_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 channel 2 and channel 3 interrupts. + */ +void DMA1_Channel2_3_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */ + + /* USER CODE END DMA1_Channel2_3_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc1); + /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */ + + /* USER CODE END DMA1_Channel2_3_IRQn 1 */ +} + +/** + * @brief This function handles ADC1, COMP1 and COMP2 interrupts (COMP interrupts through EXTI lines 17 and 18). + */ +void ADC1_COMP_IRQHandler(void) +{ + /* USER CODE BEGIN ADC1_COMP_IRQn 0 */ + + /* USER CODE END ADC1_COMP_IRQn 0 */ + HAL_ADC_IRQHandler(&hadc1); + /* USER CODE BEGIN ADC1_COMP_IRQn 1 */ + + /* USER CODE END ADC1_COMP_IRQn 1 */ +} + +/** + * @brief This function handles I2C2 global interrupt. + */ +void I2C2_IRQHandler(void) +{ + /* USER CODE BEGIN I2C2_IRQn 0 */ + + /* USER CODE END I2C2_IRQn 0 */ + if (hi2c2.Instance->ISR & (I2C_FLAG_BERR | I2C_FLAG_ARLO | I2C_FLAG_OVR)) { + HAL_I2C_ER_IRQHandler(&hi2c2); + } else { + HAL_I2C_EV_IRQHandler(&hi2c2); + } + /* USER CODE BEGIN I2C2_IRQn 1 */ + + /* USER CODE END I2C2_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/Core/Src/syscalls.c b/STM32/Core/Src/syscalls.c new file mode 100644 index 0000000..4ec9584 --- /dev/null +++ b/STM32/Core/Src/syscalls.c @@ -0,0 +1,159 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +//#undef errno +extern int errno; +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + +register char * stack_ptr asm("sp"); + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + +return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + return 0; +} + +int _open(char *path, int flags, ...) +{ + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + return -1; +} + +int _stat(char *file, struct stat *st) +{ + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + errno = ENOMEM; + return -1; +} diff --git a/STM32/Core/Src/sysmem.c b/STM32/Core/Src/sysmem.c new file mode 100644 index 0000000..23180b6 --- /dev/null +++ b/STM32/Core/Src/sysmem.c @@ -0,0 +1,80 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initalize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/STM32/Core/Src/system_stm32g0xx.c b/STM32/Core/Src/system_stm32g0xx.c new file mode 100644 index 0000000..5e28c2a --- /dev/null +++ b/STM32/Core/Src/system_stm32g0xx.c @@ -0,0 +1,290 @@ +/** + ****************************************************************************** + * @file system_stm32g0xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M0+ Device Peripheral Access Layer System Source File + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32g0xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * After each device reset the HSI (8 MHz then 16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32g0xx.s" file, to + * configure the system clock before to branch to main program. + * + * This file configures the system clock as follows: + *============================================================================= + *----------------------------------------------------------------------------- + * System Clock source | HSI + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 16000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB Prescaler | 1 + *----------------------------------------------------------------------------- + * HSI Division factor | 1 + *----------------------------------------------------------------------------- + * PLL_M | 1 + *----------------------------------------------------------------------------- + * PLL_N | 8 + *----------------------------------------------------------------------------- + * PLL_P | 7 + *----------------------------------------------------------------------------- + * PLL_Q | 2 + *----------------------------------------------------------------------------- + * PLL_R | 2 + *----------------------------------------------------------------------------- + * Require 48MHz for RNG | Disabled + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2018 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32g0xx_system + * @{ + */ + +/** @addtogroup STM32G0xx_System_Private_Includes + * @{ + */ + +#include "stm32g0xx.h" + +#if !defined (HSE_VALUE) +#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +#if !defined (LSI_VALUE) + #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/ +#endif /* LSI_VALUE */ + +#if !defined (LSE_VALUE) + #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/ +#endif /* LSE_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0U /*!< Vector Table base offset field. + This value must be a multiple of 0x100. */ +/******************************************************************************/ +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Variables + * @{ + */ + /* The SystemCoreClock variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 16000000UL; + + const uint32_t AHBPrescTable[16UL] = {0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL, 6UL, 7UL, 8UL, 9UL}; + const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL}; + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32G0xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**) / HSI division factor + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***) + * + * - If SYSCLK source is LSI, SystemCoreClock will contain the LSI_VALUE + * + * - If SYSCLK source is LSE, SystemCoreClock will contain the LSE_VALUE + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (**) HSI_VALUE is a constant defined in stm32g0xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (***) HSE_VALUE is a constant defined in stm32g0xx_hal_conf.h file (default value + * 8 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +//void SystemCoreClockUpdate(void) +//{ +// uint32_t tmp; +// uint32_t pllvco; +// uint32_t pllr; +// uint32_t pllsource; +// uint32_t pllm; +// uint32_t hsidiv; +// +// /* Get SYSCLK source -------------------------------------------------------*/ +// switch (RCC->CFGR & RCC_CFGR_SWS) +// { +// case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ RCC_ +// SystemCoreClock = HSE_VALUE; +// break; +// +// case RCC_CFGR_SWS_LSI: /* LSI used as system clock */ +// SystemCoreClock = LSI_VALUE; +// break; +// +// case RCC_CFGR_SWS_LSE: /* LSE used as system clock */ +// SystemCoreClock = LSE_VALUE; +// break; +// +// case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ +// /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN +// SYSCLK = PLL_VCO / PLLR +// */ +// pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); +// pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL; +// +// if(pllsource == 0x03UL) /* HSE used as PLL clock source */ +// { +// pllvco = (HSE_VALUE / pllm); +// } +// else /* HSI used as PLL clock source */ +// { +// pllvco = (HSI_VALUE / pllm); +// } +// pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); +// pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL); +// +// SystemCoreClock = pllvco/pllr; +// break; +// +// case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ +// default: /* HSI used as system clock */ +// hsidiv = (1UL << ((READ_BIT(RCC->CR, RCC_CR_HSIDIV))>> RCC_CR_HSIDIV_Pos)); +// SystemCoreClock = (HSI_VALUE/hsidiv); +// break; +// } +// /* Compute HCLK clock frequency --------------------------------------------*/ +// /* Get HCLK prescaler */ +// tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)]; +// /* HCLK clock frequency */ +// SystemCoreClock >>= tmp; +//} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/STM32/noise_sensor.ioc b/STM32/noise_sensor.ioc new file mode 100644 index 0000000..88f26dd --- /dev/null +++ b/STM32/noise_sensor.ioc @@ -0,0 +1,271 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_2 +ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_9 +ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_VREFINT +ADC1.ChannelVREF=ADC_CHANNEL_VREFINT +ADC1.DMAContinuousRequests=ENABLE +ADC1.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversionFlag,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,NbrOfConversion,DMAContinuousRequests,master,SelectedChannel,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,ChannelVREF +ADC1.NbrOfConversion=3 +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-1\#ChannelRegularConversion=1 +ADC1.Rank-2\#ChannelRegularConversion=2 +ADC1.Rank-4\#ChannelRegularConversion=3 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1 +ADC1.SelectedChannel=ADC_CHANNEL_2|ADC_CHANNEL_9|ADC_CHANNEL_VREFINT +ADC1.master=1 +Dma.ADC1.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.1.EventEnable=DISABLE +Dma.ADC1.1.Instance=DMA1_Channel2 +Dma.ADC1.1.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.ADC1.1.MemInc=DMA_MINC_ENABLE +Dma.ADC1.1.Mode=DMA_CIRCULAR +Dma.ADC1.1.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.ADC1.1.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC1.1.Priority=DMA_PRIORITY_LOW +Dma.ADC1.1.RequestNumber=1 +Dma.ADC1.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC1.1.SignalID=NONE +Dma.ADC1.1.SyncEnable=DISABLE +Dma.ADC1.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC1.1.SyncRequestNumber=1 +Dma.ADC1.1.SyncSignalID=NONE +Dma.Request0=SPI1_RX +Dma.Request1=ADC1 +Dma.RequestsNb=2 +Dma.SPI1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.SPI1_RX.0.EventEnable=DISABLE +Dma.SPI1_RX.0.Instance=DMA1_Channel1 +Dma.SPI1_RX.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.SPI1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.SPI1_RX.0.Mode=DMA_CIRCULAR +Dma.SPI1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.SPI1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.SPI1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.SPI1_RX.0.Priority=DMA_PRIORITY_LOW +Dma.SPI1_RX.0.RequestNumber=1 +Dma.SPI1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.SPI1_RX.0.SignalID=NONE +Dma.SPI1_RX.0.SyncEnable=DISABLE +Dma.SPI1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.SPI1_RX.0.SyncRequestNumber=1 +Dma.SPI1_RX.0.SyncSignalID=NONE +File.Version=6 +GPIO.groupedBy=Group By Peripherals +I2C2.I2C_Speed_Mode=I2C_Fast +I2C2.IPParameters=I2C_Speed_Mode,OwnAddress,Timing +I2C2.OwnAddress=0x3C +I2C2.Timing=0x0010061A +I2S1.AudioFreq=I2S_AUDIOFREQ_22K +I2S1.DataFormat=I2S_DATAFORMAT_24B +I2S1.ErrorAudioFreq=3.3 % +I2S1.FullDuplexMode=I2S_FULLDUPLEXMODE_DISABLE +I2S1.IPParameters=Instance,VirtualMode,FullDuplexMode,RealAudioFreq,ErrorAudioFreq,Mode,DataFormat,AudioFreq +I2S1.Instance=SPI$Index +I2S1.Mode=I2S_MODE_MASTER_RX +I2S1.RealAudioFreq=22.727 KHz +I2S1.VirtualMode=I2S_MODE_MASTER +KeepUserPlacement=false +Mcu.Family=STM32G0 +Mcu.IP0=ADC1 +Mcu.IP1=DMA +Mcu.IP2=I2C2 +Mcu.IP3=I2S1 +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=SPI2 +Mcu.IP7=SYS +Mcu.IP8=TIM2 +Mcu.IP9=USART4 +Mcu.IPNb=10 +Mcu.Name=STM32G071K(6-8-B)Tx +Mcu.Package=LQFP32 +Mcu.Pin0=PA0 +Mcu.Pin1=PA1 +Mcu.Pin10=PC6 +Mcu.Pin11=PA11 [PA9] +Mcu.Pin12=PA12 [PA10] +Mcu.Pin13=PA13 +Mcu.Pin14=PA14-BOOT0 +Mcu.Pin15=PA15 +Mcu.Pin16=PB3 +Mcu.Pin17=PB5 +Mcu.Pin18=PB8 +Mcu.Pin19=VP_ADC1_Vref_Input +Mcu.Pin2=PA2 +Mcu.Pin20=VP_SYS_VS_Systick +Mcu.Pin21=VP_SYS_VS_DBSignals +Mcu.Pin22=VP_TIM2_VS_ClockSourceINT +Mcu.Pin3=PA3 +Mcu.Pin4=PA4 +Mcu.Pin5=PA5 +Mcu.Pin6=PA6 +Mcu.Pin7=PA7 +Mcu.Pin8=PB0 +Mcu.Pin9=PB1 +Mcu.PinsNb=23 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32G071KBTx +MxCube.Version=6.1.1 +MxDb.Version=DB.6.0.10 +NVIC.ADC1_COMP_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.I2C2_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +PA0.Locked=true +PA0.Mode=Asynchronous +PA0.Signal=USART4_TX +PA1.Locked=true +PA1.Mode=Asynchronous +PA1.Signal=USART4_RX +PA11\ [PA9].Mode=I2C +PA11\ [PA9].Signal=I2C2_SCL +PA12\ [PA10].Locked=true +PA12\ [PA10].Mode=I2C +PA12\ [PA10].Signal=I2C2_SDA +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14-BOOT0.Mode=Serial_Wire +PA14-BOOT0.Signal=SYS_SWCLK +PA15.Locked=true +PA15.Mode=Half_Duplex_Master +PA15.Signal=I2S1_WS +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=Device_ID +PA2.Locked=true +PA2.Mode=IN2 +PA2.Signal=ADC1_IN2 +PA3.Locked=true +PA3.Mode=Full_Duplex_Master +PA3.Signal=SPI2_MISO +PA4.Mode=Full_Duplex_Master +PA4.Signal=SPI2_MOSI +PA5.GPIOParameters=PinState,GPIO_Label +PA5.GPIO_Label=NSS +PA5.Locked=true +PA5.PinState=GPIO_PIN_SET +PA5.Signal=GPIO_Output +PA6.GPIOParameters=GPIO_Label +PA6.GPIO_Label=LED +PA6.Locked=true +PA6.Signal=GPIO_Output +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=RESET +PA7.Locked=true +PA7.Signal=GPIO_Output +PB0.GPIOParameters=GPIO_PuPd +PB0.GPIO_PuPd=GPIO_NOPULL +PB0.Locked=true +PB0.Signal=GPIO_Input +PB1.GPIOParameters=GPIO_Label +PB1.GPIO_Label=BAT_Monitor +PB1.Locked=true +PB1.Mode=IN9 +PB1.Signal=ADC1_IN9 +PB3.Locked=true +PB3.Mode=Half_Duplex_Master +PB3.Signal=I2S1_CK +PB5.Locked=true +PB5.Mode=Half_Duplex_Master +PB5.Signal=I2S1_SD +PB8.Mode=Full_Duplex_Master +PB8.Signal=SPI2_SCK +PC6.GPIOParameters=GPIO_PuPd,GPIO_Label +PC6.GPIO_Label=I2C_Address +PC6.GPIO_PuPd=GPIO_PULLUP +PC6.Locked=true +PC6.Signal=GPIO_Input +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32G071KBTx +ProjectManager.FirmwarePackage=STM32Cube FW_G0 V1.4.0 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=noise_sensor.ioc +ProjectManager.ProjectName=noise_sensor +ProjectManager.RegisterCallBack=ADC,I2C,I2S +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_I2S1_Init-I2S1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_I2C2_Init-I2C2-false-HAL-true,8-MX_USART4_UART_Init-USART4-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true +RCC.ADCFreq_Value=16000000 +RCC.AHBFreq_Value=16000000 +RCC.APBFreq_Value=16000000 +RCC.APBTimFreq_Value=16000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=16000000 +RCC.EXTERNAL_CLOCK_VALUE=48000 +RCC.FCLKCortexFreq_Value=16000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=16000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=16000000 +RCC.I2S1Freq_Value=16000000 +RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APBFreq_Value,APBTimFreq_Value,CECFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2S1Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLR,PLLRCLKFreq_Value,PWRFreq_Value,SYSCLKFreq_VALUE,TIM15Freq_Value,TIM1Freq_Value,USART1Freq_Value,USART2Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value +RCC.LPTIM1Freq_Value=16000000 +RCC.LPTIM2Freq_Value=16000000 +RCC.LPUART1Freq_Value=16000000 +RCC.LSCOPinFreq_Value=32000 +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=16000000 +RCC.PLLPoutputFreq_Value=64000000 +RCC.PLLQoutputFreq_Value=64000000 +RCC.PLLR=RCC_PLLR_DIV4 +RCC.PLLRCLKFreq_Value=32000000 +RCC.PWRFreq_Value=16000000 +RCC.SYSCLKFreq_VALUE=16000000 +RCC.TIM15Freq_Value=16000000 +RCC.TIM1Freq_Value=16000000 +RCC.USART1Freq_Value=16000000 +RCC.USART2Freq_Value=16000000 +RCC.VCOInputFreq_Value=16000000 +RCC.VCOOutputFreq_Value=128000000 +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2 +SPI2.CalculateBaudRate=8.0 MBits/s +SPI2.DataSize=SPI_DATASIZE_8BIT +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +TIM2.IPParameters=Prescaler +TIM2.Prescaler=16-1 +USART4.IPParameters=VirtualMode-Asynchronous,Mode +USART4.Mode=MODE_TX +USART4.VirtualMode-Asynchronous=VM_ASYNC +VP_ADC1_Vref_Input.Mode=IN-Vrefint +VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input +VP_SYS_VS_DBSignals.Mode=DisableDeadBatterySignals +VP_SYS_VS_DBSignals.Signal=SYS_VS_DBSignals +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM2_VS_ClockSourceINT.Mode=Internal +VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT +board=custom +isbadioc=false