Browse Source

Added more OS files to be tracked. Port them now to the STM32.

master
Maximilian Stiefel 7 years ago
parent
commit
39e9ce967c
  1. 28
      pcbs/adapter_board/adapter_board.kicad_pcb
  2. 2
      pcbs/adapter_board/output/gerber/adapter_board-B.Cu.gbr
  3. 2
      pcbs/adapter_board/output/gerber/adapter_board-B.Mask.gbr
  4. 2
      pcbs/adapter_board/output/gerber/adapter_board-B.SilkS.gbr
  5. 2
      pcbs/adapter_board/output/gerber/adapter_board-Edge.Cuts.gbr
  6. 2
      pcbs/adapter_board/output/gerber/adapter_board-F.Cu.gbr
  7. 2
      pcbs/adapter_board/output/gerber/adapter_board-F.Mask.gbr
  8. 2
      pcbs/adapter_board/output/gerber/adapter_board-F.SilkS.gbr
  9. 2
      pcbs/adapter_board/output/gerber/adapter_board.drl
  10. BIN
      pcbs/adapter_board/output/gerber/adapter_board.zip
  11. 646
      pcbs/extension_board/2Stages1.sch
  12. 14
      pcbs/extension_board/LEDDriver.sch
  13. 32
      pcbs/extension_board/UI.sch
  14. 30
      pcbs/extension_board/extension_board.kicad_pcb
  15. 2
      pcbs/extension_board/output/gerber/extension_board-B.Mask.gbr
  16. 2
      pcbs/extension_board/output/gerber/extension_board-B.SilkS.gbr
  17. 2
      pcbs/extension_board/output/gerber/extension_board-Edge.Cuts.gbr
  18. 8
      pcbs/extension_board/output/gerber/extension_board-F.Mask.gbr
  19. 201
      pcbs/extension_board/output/gerber/extension_board-F.SilkS.gbr
  20. 2
      pcbs/extension_board/output/gerber/extension_board-GND(L4).Cu.gbr
  21. 10971
      pcbs/extension_board/output/gerber/extension_board-S1(L1).Cu.gbr
  22. 2
      pcbs/extension_board/output/gerber/extension_board-S2(L2).Cu.gbr
  23. 2
      pcbs/extension_board/output/gerber/extension_board-V18(L3).Cu.gbr
  24. 2
      pcbs/extension_board/output/gerber/extension_board.drl
  25. BIN
      pcbs/extension_board/output/gerber/extension_board.zip
  26. 36
      pcbs/extension_board/power.sch
  27. 63
      software/os/error.c
  28. 17
      software/os/error.h
  29. 163
      software/os/heap.c
  30. 38
      software/os/heap.h
  31. 1
      software/os/helpers.c
  32. 13
      software/os/helpers.h
  33. 134
      software/os/mainyyy.c
  34. 58
      software/os/ostypes.h
  35. 106
      software/os/printf.c
  36. 159
      software/os/scheduler.c
  37. 31
      software/os/scheduler.h
  38. 22
      software/os/settings.h

28
pcbs/adapter_board/adapter_board.kicad_pcb

@ -3,9 +3,9 @@
(general
(links 73)
(no_connects 0)
(area 95.924999 69.924999 196.075001 115.075001)
(area 82.733287 69.924999 206.953715 123.905001)
(thickness 1.6)
(drawings 21)
(drawings 23)
(tracks 329)
(zones 0)
(modules 71)
@ -3882,6 +3882,30 @@
(xy 4.1656 -6.6548) (xy 4.174893 -6.675708) (xy 4.182533 -6.671734)) (layer F.SilkS) (width 0.01))
)
(dimension 45 (width 0.3) (layer Dwgs.User)
(gr_text "45,000 mm" (at 82.65 92.5 270) (layer Dwgs.User)
(effects (font (size 1.5 1.5) (thickness 0.3)))
)
(feature1 (pts (xy 96 115) (xy 81.3 115)))
(feature2 (pts (xy 96 70) (xy 81.3 70)))
(crossbar (pts (xy 84 70) (xy 84 115)))
(arrow1a (pts (xy 84 115) (xy 83.413579 113.873496)))
(arrow1b (pts (xy 84 115) (xy 84.586421 113.873496)))
(arrow2a (pts (xy 84 70) (xy 83.413579 71.126504)))
(arrow2b (pts (xy 84 70) (xy 84.586421 71.126504)))
)
(dimension 100 (width 0.3) (layer Dwgs.User)
(gr_text "100,000 mm" (at 146 65.65) (layer Dwgs.User)
(effects (font (size 1.5 1.5) (thickness 0.3)))
)
(feature1 (pts (xy 196 70) (xy 196 64.3)))
(feature2 (pts (xy 96 70) (xy 96 64.3)))
(crossbar (pts (xy 96 67) (xy 196 67)))
(arrow1a (pts (xy 196 67) (xy 194.873496 67.586421)))
(arrow1b (pts (xy 196 67) (xy 194.873496 66.413579)))
(arrow2a (pts (xy 96 67) (xy 97.126504 67.586421)))
(arrow2b (pts (xy 96 67) (xy 97.126504 66.413579)))
)
(gr_text M3 (at 187.071 111.252) (layer F.SilkS)
(effects (font (size 1.5 1.5) (thickness 0.3)))
)

2
pcbs/adapter_board/output/gerber/adapter_board-B.Cu.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Copper,L2,Bot,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-B.Mask.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Soldermask,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-B.SilkS.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Legend,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-Edge.Cuts.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-F.Cu.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Copper,L1,Top,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-F.Mask.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Soldermask,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board-F.SilkS.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Legend,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Tue Dec 5 16:05:34 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:45:46 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/adapter_board/output/gerber/adapter_board.drl

@ -1,5 +1,5 @@
M48
;DRILL file {KiCad 4.0.7-e2-6376~58~ubuntu17.04.1} date Tue Dec 5 16:05:36 2017
;DRILL file {KiCad 4.0.7-e2-6376~58~ubuntu17.04.1} date Mon Dec 11 10:45:50 2017
;FORMAT={-:-/ absolute / metric / decimal}
FMAT,2
METRIC,TZ

BIN
pcbs/adapter_board/output/gerber/adapter_board.zip

Binary file not shown.

646
pcbs/extension_board/2Stages1.sch

@ -38,7 +38,7 @@ EELAYER 25 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 26 37
Sheet 3 37
Title "UV LED Driver Two Stages"
Date "2017-11-13"
Rev ""
@ -84,11 +84,11 @@ AR Path="/5A0916C5/5A09BEE0/5946B2F2" Ref="C116" Part="1"
AR Path="/5A0916C5/5A09BEE4/5946B2F2" Ref="C120" Part="1"
AR Path="/5A0916C5/5A09BEE8/5946B2F2" Ref="C124" Part="1"
AR Path="/5A0916C5/5A09BEEC/5946B2F2" Ref="C128" Part="1"
F 0 "C128" H 5905 2065 50 0000 L CNN
F 0 "C4" H 5905 2065 50 0000 L CNN
F 1 "1u" H 5905 1865 50 0000 L CNN
F 2 "Resistors_SMD:R_0603" H 5918 1815 50 0001 C CNN
F 3 "" H 5880 1965 50 0000 C CNN
F 4 "445-5146-1-ND" H 5880 1965 60 0001 C CNN "Digikey"
F 4 "399-3118-1-ND" H 5880 1965 60 0001 C CNN "Digikey"
1 5880 1965
1 0 0 -1
$EndComp
@ -136,7 +136,7 @@ AR Path="/5A0916C5/5A09BEE0/5A08DFEB" Ref="R176" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08DFEB" Ref="R182" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08DFEB" Ref="R188" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08DFEB" Ref="R194" Part="1"
F 0 "R194" V 6530 4725 50 0000 C CNN
F 0 "R8" V 6530 4725 50 0000 C CNN
F 1 "10R" V 6450 4725 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 6380 4725 50 0001 C CNN
F 3 "" H 6450 4725 50 0001 C CNN
@ -182,7 +182,7 @@ AR Path="/5A0916C5/5A09BEE0/5A08DFF3" Ref="R178" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08DFF3" Ref="R184" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08DFF3" Ref="R190" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08DFF3" Ref="R196" Part="1"
F 0 "R196" V 7530 5050 50 0000 C CNN
F 0 "R10" V 7530 5050 50 0000 C CNN
F 1 "180k" V 7450 5050 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 7380 5050 50 0001 C CNN
F 3 "" H 7450 5050 50 0001 C CNN
@ -226,7 +226,7 @@ AR Path="/5A0916C5/5A09BEE0/5A08DFFA" Ref="R177" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08DFFA" Ref="R183" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08DFFA" Ref="R189" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08DFFA" Ref="R195" Part="1"
F 0 "R195" V 7030 4575 50 0000 C CNN
F 0 "R9" V 7030 4575 50 0000 C CNN
F 1 "20k" V 6950 4575 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 6880 4575 50 0001 C CNN
F 3 "" H 6950 4575 50 0001 C CNN
@ -270,7 +270,7 @@ AR Path="/5A0916C5/5A09BEE0/5A08E007" Ref="U20" Part="3"
AR Path="/5A0916C5/5A09BEE4/5A08E007" Ref="U19" Part="3"
AR Path="/5A0916C5/5A09BEE8/5A08E007" Ref="U18" Part="3"
AR Path="/5A0916C5/5A09BEEC/5A08E007" Ref="U17" Part="3"
F 0 "U17" H 7350 3650 50 0000 L CNN
F 0 "U1" H 7350 3650 50 0000 L CNN
F 1 "LM324QT" H 7350 3250 50 0000 L CNN
F 2 "QFN:QFN-16-1EP_3x3mm_Pitch0.5mm" H 7300 3550 50 0001 C CNN
F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/bd/fc/46/43/26/8f/40/7f/CD00001046.pdf/files/CD00001046.pdf/jcr:content/translations/en.CD00001046.pdf" H 7400 3650 50 0001 C CNN
@ -314,7 +314,7 @@ AR Path="/5A0916C5/5A09BEE0/5A08E00E" Ref="U20" Part="4"
AR Path="/5A0916C5/5A09BEE4/5A08E00E" Ref="U19" Part="4"
AR Path="/5A0916C5/5A09BEE8/5A08E00E" Ref="U18" Part="4"
AR Path="/5A0916C5/5A09BEEC/5A08E00E" Ref="U17" Part="4"
F 0 "U17" H 7550 4675 50 0000 L CNN
F 0 "U1" H 7550 4675 50 0000 L CNN
F 1 "LM324QT" H 7550 4275 50 0000 L CNN
F 2 "QFN:QFN-16-1EP_3x3mm_Pitch0.5mm" H 7500 4575 50 0001 C CNN
F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/bd/fc/46/43/26/8f/40/7f/CD00001046.pdf/files/CD00001046.pdf/jcr:content/translations/en.CD00001046.pdf" H 7600 4675 50 0001 C CNN
@ -325,42 +325,42 @@ $EndComp
Text GLabel 7450 4175 1 60 Input ~ 0
V18
$Comp
L GND #PWR11
L GND #PWR04
U 1 1 5A08E015
P 7450 3750
AR Path="/5A0916C5/5A0A220F/5A08E015" Ref="#PWR11" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E015" Ref="#PWR20" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E015" Ref="#PWR29" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E015" Ref="#PWR38" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E015" Ref="#PWR47" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E015" Ref="#PWR56" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E015" Ref="#PWR65" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E015" Ref="#PWR74" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E015" Ref="#PWR83" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E015" Ref="#PWR92" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E015" Ref="#PWR101" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E015" Ref="#PWR110" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E015" Ref="#PWR119" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E015" Ref="#PWR128" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E015" Ref="#PWR137" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E015" Ref="#PWR146" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E015" Ref="#PWR155" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E015" Ref="#PWR164" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E015" Ref="#PWR173" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E015" Ref="#PWR182" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E015" Ref="#PWR191" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E015" Ref="#PWR200" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E015" Ref="#PWR209" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E015" Ref="#PWR218" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E015" Ref="#PWR227" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E015" Ref="#PWR236" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E015" Ref="#PWR245" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E015" Ref="#PWR254" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E015" Ref="#PWR263" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E015" Ref="#PWR272" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E015" Ref="#PWR281" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E015" Ref="#PWR290" Part="1"
F 0 "#PWR290" H 7450 3500 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A08E015" Ref="#PWR04" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E015" Ref="#PWR013" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E015" Ref="#PWR022" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E015" Ref="#PWR031" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E015" Ref="#PWR040" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E015" Ref="#PWR049" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E015" Ref="#PWR058" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E015" Ref="#PWR067" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E015" Ref="#PWR076" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E015" Ref="#PWR085" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E015" Ref="#PWR094" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E015" Ref="#PWR0103" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E015" Ref="#PWR0112" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E015" Ref="#PWR0121" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E015" Ref="#PWR0130" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E015" Ref="#PWR0139" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E015" Ref="#PWR0148" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E015" Ref="#PWR0157" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E015" Ref="#PWR0166" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E015" Ref="#PWR0175" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E015" Ref="#PWR0184" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E015" Ref="#PWR0193" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E015" Ref="#PWR0202" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E015" Ref="#PWR0211" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E015" Ref="#PWR0220" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E015" Ref="#PWR0229" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E015" Ref="#PWR0238" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E015" Ref="#PWR0247" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E015" Ref="#PWR0256" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E015" Ref="#PWR0265" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E015" Ref="#PWR0274" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E015" Ref="#PWR0283" Part="1"
F 0 "#PWR04" H 7450 3500 50 0001 C CNN
F 1 "GND" H 7450 3600 50 0000 C CNN
F 2 "" H 7450 3750 50 0001 C CNN
F 3 "" H 7450 3750 50 0001 C CNN
@ -368,42 +368,42 @@ F 3 "" H 7450 3750 50 0001 C CNN
-1 0 0 -1
$EndComp
$Comp
L GND #PWR12
L GND #PWR05
U 1 1 5A08E01B
P 7450 4775
AR Path="/5A0916C5/5A0A220F/5A08E01B" Ref="#PWR12" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E01B" Ref="#PWR21" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E01B" Ref="#PWR30" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E01B" Ref="#PWR39" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E01B" Ref="#PWR48" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E01B" Ref="#PWR57" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E01B" Ref="#PWR66" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E01B" Ref="#PWR75" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E01B" Ref="#PWR84" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E01B" Ref="#PWR93" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E01B" Ref="#PWR102" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E01B" Ref="#PWR111" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E01B" Ref="#PWR120" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E01B" Ref="#PWR129" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E01B" Ref="#PWR138" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E01B" Ref="#PWR147" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E01B" Ref="#PWR156" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E01B" Ref="#PWR165" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E01B" Ref="#PWR174" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E01B" Ref="#PWR183" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E01B" Ref="#PWR192" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E01B" Ref="#PWR201" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E01B" Ref="#PWR210" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E01B" Ref="#PWR219" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E01B" Ref="#PWR228" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E01B" Ref="#PWR237" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E01B" Ref="#PWR246" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E01B" Ref="#PWR255" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E01B" Ref="#PWR264" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E01B" Ref="#PWR273" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E01B" Ref="#PWR282" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E01B" Ref="#PWR291" Part="1"
F 0 "#PWR291" H 7450 4525 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A08E01B" Ref="#PWR05" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E01B" Ref="#PWR014" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E01B" Ref="#PWR023" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E01B" Ref="#PWR032" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E01B" Ref="#PWR041" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E01B" Ref="#PWR050" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E01B" Ref="#PWR059" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E01B" Ref="#PWR068" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E01B" Ref="#PWR077" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E01B" Ref="#PWR086" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E01B" Ref="#PWR095" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E01B" Ref="#PWR0104" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E01B" Ref="#PWR0113" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E01B" Ref="#PWR0122" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E01B" Ref="#PWR0131" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E01B" Ref="#PWR0140" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E01B" Ref="#PWR0149" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E01B" Ref="#PWR0158" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E01B" Ref="#PWR0167" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E01B" Ref="#PWR0176" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E01B" Ref="#PWR0185" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E01B" Ref="#PWR0194" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E01B" Ref="#PWR0203" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E01B" Ref="#PWR0212" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E01B" Ref="#PWR0221" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E01B" Ref="#PWR0230" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E01B" Ref="#PWR0239" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E01B" Ref="#PWR0248" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E01B" Ref="#PWR0257" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E01B" Ref="#PWR0266" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E01B" Ref="#PWR0275" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E01B" Ref="#PWR0284" Part="1"
F 0 "#PWR05" H 7450 4525 50 0001 C CNN
F 1 "GND" H 7450 4625 50 0000 C CNN
F 2 "" H 7450 4775 50 0001 C CNN
F 3 "" H 7450 4775 50 0001 C CNN
@ -427,42 +427,42 @@ Wire Wire Line
Connection ~ 7150 4575
Connection ~ 7900 4475
$Comp
L GND #PWR10
L GND #PWR06
U 1 1 5A08E02C
P 6750 4975
AR Path="/5A0916C5/5A0A220F/5A08E02C" Ref="#PWR10" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E02C" Ref="#PWR19" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E02C" Ref="#PWR28" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E02C" Ref="#PWR37" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E02C" Ref="#PWR46" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E02C" Ref="#PWR55" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E02C" Ref="#PWR64" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E02C" Ref="#PWR73" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E02C" Ref="#PWR82" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E02C" Ref="#PWR91" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E02C" Ref="#PWR100" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E02C" Ref="#PWR109" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E02C" Ref="#PWR118" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E02C" Ref="#PWR127" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E02C" Ref="#PWR136" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E02C" Ref="#PWR145" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E02C" Ref="#PWR154" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E02C" Ref="#PWR163" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E02C" Ref="#PWR172" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E02C" Ref="#PWR181" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E02C" Ref="#PWR190" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E02C" Ref="#PWR199" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E02C" Ref="#PWR208" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E02C" Ref="#PWR217" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E02C" Ref="#PWR226" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E02C" Ref="#PWR235" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E02C" Ref="#PWR244" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E02C" Ref="#PWR253" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E02C" Ref="#PWR262" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E02C" Ref="#PWR271" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E02C" Ref="#PWR280" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E02C" Ref="#PWR289" Part="1"
F 0 "#PWR289" H 6750 4725 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A08E02C" Ref="#PWR06" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E02C" Ref="#PWR015" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E02C" Ref="#PWR024" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E02C" Ref="#PWR033" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E02C" Ref="#PWR042" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E02C" Ref="#PWR051" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E02C" Ref="#PWR060" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E02C" Ref="#PWR069" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E02C" Ref="#PWR078" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E02C" Ref="#PWR087" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E02C" Ref="#PWR096" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E02C" Ref="#PWR0105" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E02C" Ref="#PWR0114" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E02C" Ref="#PWR0123" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E02C" Ref="#PWR0132" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E02C" Ref="#PWR0141" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E02C" Ref="#PWR0150" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E02C" Ref="#PWR0159" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E02C" Ref="#PWR0168" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E02C" Ref="#PWR0177" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E02C" Ref="#PWR0186" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E02C" Ref="#PWR0195" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E02C" Ref="#PWR0204" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E02C" Ref="#PWR0213" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E02C" Ref="#PWR0222" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E02C" Ref="#PWR0231" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E02C" Ref="#PWR0240" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E02C" Ref="#PWR0249" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E02C" Ref="#PWR0258" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E02C" Ref="#PWR0267" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E02C" Ref="#PWR0276" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E02C" Ref="#PWR0285" Part="1"
F 0 "#PWR06" H 6750 4725 50 0001 C CNN
F 1 "GND" H 6750 4825 50 0000 C CNN
F 2 "" H 6750 4975 50 0001 C CNN
F 3 "" H 6750 4975 50 0001 C CNN
@ -479,42 +479,42 @@ Wire Wire Line
6450 3650 6450 4575
Connection ~ 6450 4375
$Comp
L GND #PWR9
L GND #PWR07
U 1 1 5A08E038
P 6450 4975
AR Path="/5A0916C5/5A0A220F/5A08E038" Ref="#PWR9" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E038" Ref="#PWR18" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E038" Ref="#PWR27" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E038" Ref="#PWR36" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E038" Ref="#PWR45" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E038" Ref="#PWR54" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E038" Ref="#PWR63" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E038" Ref="#PWR72" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E038" Ref="#PWR81" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E038" Ref="#PWR90" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E038" Ref="#PWR99" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E038" Ref="#PWR108" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E038" Ref="#PWR117" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E038" Ref="#PWR126" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E038" Ref="#PWR135" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E038" Ref="#PWR144" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E038" Ref="#PWR153" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E038" Ref="#PWR162" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E038" Ref="#PWR171" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E038" Ref="#PWR180" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E038" Ref="#PWR189" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E038" Ref="#PWR198" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E038" Ref="#PWR207" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E038" Ref="#PWR216" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E038" Ref="#PWR225" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E038" Ref="#PWR234" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E038" Ref="#PWR243" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E038" Ref="#PWR252" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E038" Ref="#PWR261" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E038" Ref="#PWR270" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E038" Ref="#PWR279" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E038" Ref="#PWR288" Part="1"
F 0 "#PWR288" H 6450 4725 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A08E038" Ref="#PWR07" Part="1"
AR Path="/5A0916C5/5A096F49/5A08E038" Ref="#PWR016" Part="1"
AR Path="/5A0916C5/5A0972CC/5A08E038" Ref="#PWR025" Part="1"
AR Path="/5A0916C5/5A0972D0/5A08E038" Ref="#PWR034" Part="1"
AR Path="/5A0916C5/5A097A65/5A08E038" Ref="#PWR043" Part="1"
AR Path="/5A0916C5/5A097A69/5A08E038" Ref="#PWR052" Part="1"
AR Path="/5A0916C5/5A097A6D/5A08E038" Ref="#PWR061" Part="1"
AR Path="/5A0916C5/5A097A71/5A08E038" Ref="#PWR070" Part="1"
AR Path="/5A0916C5/5A0988AE/5A08E038" Ref="#PWR079" Part="1"
AR Path="/5A0916C5/5A0988B2/5A08E038" Ref="#PWR088" Part="1"
AR Path="/5A0916C5/5A0988B6/5A08E038" Ref="#PWR097" Part="1"
AR Path="/5A0916C5/5A0988BA/5A08E038" Ref="#PWR0106" Part="1"
AR Path="/5A0916C5/5A0988BE/5A08E038" Ref="#PWR0115" Part="1"
AR Path="/5A0916C5/5A0988C2/5A08E038" Ref="#PWR0124" Part="1"
AR Path="/5A0916C5/5A0988C6/5A08E038" Ref="#PWR0133" Part="1"
AR Path="/5A0916C5/5A0988CA/5A08E038" Ref="#PWR0142" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A08E038" Ref="#PWR0151" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A08E038" Ref="#PWR0160" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A08E038" Ref="#PWR0169" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A08E038" Ref="#PWR0178" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A08E038" Ref="#PWR0187" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A08E038" Ref="#PWR0196" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A08E038" Ref="#PWR0205" Part="1"
AR Path="/5A0916C5/5A09BECC/5A08E038" Ref="#PWR0214" Part="1"
AR Path="/5A0916C5/5A09BED0/5A08E038" Ref="#PWR0223" Part="1"
AR Path="/5A0916C5/5A09BED4/5A08E038" Ref="#PWR0232" Part="1"
AR Path="/5A0916C5/5A09BED8/5A08E038" Ref="#PWR0241" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A08E038" Ref="#PWR0250" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A08E038" Ref="#PWR0259" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A08E038" Ref="#PWR0268" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A08E038" Ref="#PWR0277" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A08E038" Ref="#PWR0286" Part="1"
F 0 "#PWR07" H 6450 4725 50 0001 C CNN
F 1 "GND" H 6450 4825 50 0000 C CNN
F 2 "" H 6450 4975 50 0001 C CNN
F 3 "" H 6450 4975 50 0001 C CNN
@ -569,7 +569,7 @@ AR Path="/5A0916C5/5A09BEE0/5A15979F" Ref="R175" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A15979F" Ref="R181" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A15979F" Ref="R187" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A15979F" Ref="R193" Part="1"
F 0 "R193" V 5430 4725 50 0000 C CNN
F 0 "R7" V 5430 4725 50 0000 C CNN
F 1 "10R" V 5350 4725 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 5280 4725 50 0001 C CNN
F 3 "" H 5350 4725 50 0001 C CNN
@ -615,7 +615,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1597A7" Ref="R173" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597A7" Ref="R179" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597A7" Ref="R185" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597A7" Ref="R191" Part="1"
F 0 "R191" V 4430 5050 50 0000 C CNN
F 0 "R5" V 4430 5050 50 0000 C CNN
F 1 "180k" V 4350 5050 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 4280 5050 50 0001 C CNN
F 3 "" H 4350 5050 50 0001 C CNN
@ -659,7 +659,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1597AE" Ref="R174" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597AE" Ref="R180" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597AE" Ref="R186" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597AE" Ref="R192" Part="1"
F 0 "R192" V 4930 4575 50 0000 C CNN
F 0 "R6" V 4930 4575 50 0000 C CNN
F 1 "20k" V 4850 4575 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 4780 4575 50 0001 C CNN
F 3 "" H 4850 4575 50 0001 C CNN
@ -703,7 +703,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1597B5" Ref="U20" Part="2"
AR Path="/5A0916C5/5A09BEE4/5A1597B5" Ref="U19" Part="2"
AR Path="/5A0916C5/5A09BEE8/5A1597B5" Ref="U18" Part="2"
AR Path="/5A0916C5/5A09BEEC/5A1597B5" Ref="U17" Part="2"
F 0 "U17" H 4450 3650 50 0000 L CNN
F 0 "U1" H 4450 3650 50 0000 L CNN
F 1 "LM324QT" H 4450 3250 50 0000 L CNN
F 2 "QFN:QFN-16-1EP_3x3mm_Pitch0.5mm" H 4400 3550 50 0001 C CNN
F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/bd/fc/46/43/26/8f/40/7f/CD00001046.pdf/files/CD00001046.pdf/jcr:content/translations/en.CD00001046.pdf" H 4500 3650 50 0001 C CNN
@ -747,7 +747,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1597BC" Ref="U20" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597BC" Ref="U19" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597BC" Ref="U18" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597BC" Ref="U17" Part="1"
F 0 "U17" H 4250 4675 50 0000 L CNN
F 0 "U1" H 4250 4675 50 0000 L CNN
F 1 "LM324QT" H 4250 4275 50 0000 L CNN
F 2 "QFN:QFN-16-1EP_3x3mm_Pitch0.5mm" H 4200 4575 50 0001 C CNN
F 3 "http://www.st.com/content/ccc/resource/technical/document/datasheet/bd/fc/46/43/26/8f/40/7f/CD00001046.pdf/files/CD00001046.pdf/jcr:content/translations/en.CD00001046.pdf" H 4300 4675 50 0001 C CNN
@ -758,42 +758,42 @@ $EndComp
Text GLabel 4350 4175 1 60 Input ~ 0
V18
$Comp
L GND #PWR4
L GND #PWR08
U 1 1 5A1597C3
P 4350 3750
AR Path="/5A0916C5/5A0A220F/5A1597C3" Ref="#PWR4" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597C3" Ref="#PWR13" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597C3" Ref="#PWR22" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597C3" Ref="#PWR31" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597C3" Ref="#PWR40" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597C3" Ref="#PWR49" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597C3" Ref="#PWR58" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597C3" Ref="#PWR67" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597C3" Ref="#PWR76" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597C3" Ref="#PWR85" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597C3" Ref="#PWR94" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597C3" Ref="#PWR103" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597C3" Ref="#PWR112" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597C3" Ref="#PWR121" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597C3" Ref="#PWR130" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597C3" Ref="#PWR139" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597C3" Ref="#PWR148" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597C3" Ref="#PWR157" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597C3" Ref="#PWR166" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597C3" Ref="#PWR175" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597C3" Ref="#PWR184" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597C3" Ref="#PWR193" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597C3" Ref="#PWR202" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597C3" Ref="#PWR211" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597C3" Ref="#PWR220" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597C3" Ref="#PWR229" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597C3" Ref="#PWR238" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597C3" Ref="#PWR247" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597C3" Ref="#PWR256" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597C3" Ref="#PWR265" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597C3" Ref="#PWR274" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597C3" Ref="#PWR283" Part="1"
F 0 "#PWR283" H 4350 3500 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A1597C3" Ref="#PWR08" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597C3" Ref="#PWR017" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597C3" Ref="#PWR026" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597C3" Ref="#PWR035" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597C3" Ref="#PWR044" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597C3" Ref="#PWR053" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597C3" Ref="#PWR062" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597C3" Ref="#PWR071" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597C3" Ref="#PWR080" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597C3" Ref="#PWR089" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597C3" Ref="#PWR098" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597C3" Ref="#PWR0107" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597C3" Ref="#PWR0116" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597C3" Ref="#PWR0125" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597C3" Ref="#PWR0134" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597C3" Ref="#PWR0143" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597C3" Ref="#PWR0152" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597C3" Ref="#PWR0161" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597C3" Ref="#PWR0170" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597C3" Ref="#PWR0179" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597C3" Ref="#PWR0188" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597C3" Ref="#PWR0197" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597C3" Ref="#PWR0206" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597C3" Ref="#PWR0215" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597C3" Ref="#PWR0224" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597C3" Ref="#PWR0233" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597C3" Ref="#PWR0242" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597C3" Ref="#PWR0251" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597C3" Ref="#PWR0260" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597C3" Ref="#PWR0269" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597C3" Ref="#PWR0278" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597C3" Ref="#PWR0287" Part="1"
F 0 "#PWR08" H 4350 3500 50 0001 C CNN
F 1 "GND" H 4350 3600 50 0000 C CNN
F 2 "" H 4350 3750 50 0001 C CNN
F 3 "" H 4350 3750 50 0001 C CNN
@ -801,42 +801,42 @@ F 3 "" H 4350 3750 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR5
L GND #PWR09
U 1 1 5A1597C9
P 4350 4775
AR Path="/5A0916C5/5A0A220F/5A1597C9" Ref="#PWR5" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597C9" Ref="#PWR14" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597C9" Ref="#PWR23" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597C9" Ref="#PWR32" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597C9" Ref="#PWR41" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597C9" Ref="#PWR50" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597C9" Ref="#PWR59" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597C9" Ref="#PWR68" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597C9" Ref="#PWR77" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597C9" Ref="#PWR86" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597C9" Ref="#PWR95" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597C9" Ref="#PWR104" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597C9" Ref="#PWR113" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597C9" Ref="#PWR122" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597C9" Ref="#PWR131" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597C9" Ref="#PWR140" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597C9" Ref="#PWR149" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597C9" Ref="#PWR158" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597C9" Ref="#PWR167" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597C9" Ref="#PWR176" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597C9" Ref="#PWR185" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597C9" Ref="#PWR194" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597C9" Ref="#PWR203" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597C9" Ref="#PWR212" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597C9" Ref="#PWR221" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597C9" Ref="#PWR230" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597C9" Ref="#PWR239" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597C9" Ref="#PWR248" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597C9" Ref="#PWR257" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597C9" Ref="#PWR266" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597C9" Ref="#PWR275" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597C9" Ref="#PWR284" Part="1"
F 0 "#PWR284" H 4350 4525 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A1597C9" Ref="#PWR09" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597C9" Ref="#PWR018" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597C9" Ref="#PWR027" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597C9" Ref="#PWR036" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597C9" Ref="#PWR045" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597C9" Ref="#PWR054" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597C9" Ref="#PWR063" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597C9" Ref="#PWR072" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597C9" Ref="#PWR081" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597C9" Ref="#PWR090" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597C9" Ref="#PWR099" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597C9" Ref="#PWR0108" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597C9" Ref="#PWR0117" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597C9" Ref="#PWR0126" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597C9" Ref="#PWR0135" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597C9" Ref="#PWR0144" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597C9" Ref="#PWR0153" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597C9" Ref="#PWR0162" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597C9" Ref="#PWR0171" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597C9" Ref="#PWR0180" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597C9" Ref="#PWR0189" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597C9" Ref="#PWR0198" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597C9" Ref="#PWR0207" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597C9" Ref="#PWR0216" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597C9" Ref="#PWR0225" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597C9" Ref="#PWR0234" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597C9" Ref="#PWR0243" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597C9" Ref="#PWR0252" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597C9" Ref="#PWR0261" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597C9" Ref="#PWR0270" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597C9" Ref="#PWR0279" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597C9" Ref="#PWR0288" Part="1"
F 0 "#PWR09" H 4350 4525 50 0001 C CNN
F 1 "GND" H 4350 4625 50 0000 C CNN
F 2 "" H 4350 4775 50 0001 C CNN
F 3 "" H 4350 4775 50 0001 C CNN
@ -860,42 +860,42 @@ Wire Wire Line
Connection ~ 4650 4575
Connection ~ 3900 4475
$Comp
L GND #PWR6
L GND #PWR010
U 1 1 5A1597DA
P 5050 4975
AR Path="/5A0916C5/5A0A220F/5A1597DA" Ref="#PWR6" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597DA" Ref="#PWR15" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597DA" Ref="#PWR24" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597DA" Ref="#PWR33" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597DA" Ref="#PWR42" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597DA" Ref="#PWR51" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597DA" Ref="#PWR60" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597DA" Ref="#PWR69" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597DA" Ref="#PWR78" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597DA" Ref="#PWR87" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597DA" Ref="#PWR96" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597DA" Ref="#PWR105" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597DA" Ref="#PWR114" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597DA" Ref="#PWR123" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597DA" Ref="#PWR132" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597DA" Ref="#PWR141" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597DA" Ref="#PWR150" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597DA" Ref="#PWR159" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597DA" Ref="#PWR168" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597DA" Ref="#PWR177" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597DA" Ref="#PWR186" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597DA" Ref="#PWR195" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597DA" Ref="#PWR204" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597DA" Ref="#PWR213" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597DA" Ref="#PWR222" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597DA" Ref="#PWR231" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597DA" Ref="#PWR240" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597DA" Ref="#PWR249" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597DA" Ref="#PWR258" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597DA" Ref="#PWR267" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597DA" Ref="#PWR276" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597DA" Ref="#PWR285" Part="1"
F 0 "#PWR285" H 5050 4725 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A1597DA" Ref="#PWR010" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597DA" Ref="#PWR019" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597DA" Ref="#PWR028" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597DA" Ref="#PWR037" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597DA" Ref="#PWR046" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597DA" Ref="#PWR055" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597DA" Ref="#PWR064" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597DA" Ref="#PWR073" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597DA" Ref="#PWR082" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597DA" Ref="#PWR091" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597DA" Ref="#PWR0100" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597DA" Ref="#PWR0109" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597DA" Ref="#PWR0118" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597DA" Ref="#PWR0127" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597DA" Ref="#PWR0136" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597DA" Ref="#PWR0145" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597DA" Ref="#PWR0154" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597DA" Ref="#PWR0163" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597DA" Ref="#PWR0172" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597DA" Ref="#PWR0181" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597DA" Ref="#PWR0190" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597DA" Ref="#PWR0199" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597DA" Ref="#PWR0208" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597DA" Ref="#PWR0217" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597DA" Ref="#PWR0226" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597DA" Ref="#PWR0235" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597DA" Ref="#PWR0244" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597DA" Ref="#PWR0253" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597DA" Ref="#PWR0262" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597DA" Ref="#PWR0271" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597DA" Ref="#PWR0280" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597DA" Ref="#PWR0289" Part="1"
F 0 "#PWR010" H 5050 4725 50 0001 C CNN
F 1 "GND" H 5050 4825 50 0000 C CNN
F 2 "" H 5050 4975 50 0001 C CNN
F 3 "" H 5050 4975 50 0001 C CNN
@ -912,42 +912,42 @@ Wire Wire Line
5350 3650 5350 4575
Connection ~ 5350 4375
$Comp
L GND #PWR7
L GND #PWR011
U 1 1 5A1597E6
P 5350 4975
AR Path="/5A0916C5/5A0A220F/5A1597E6" Ref="#PWR7" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597E6" Ref="#PWR16" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597E6" Ref="#PWR25" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597E6" Ref="#PWR34" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597E6" Ref="#PWR43" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597E6" Ref="#PWR52" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597E6" Ref="#PWR61" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597E6" Ref="#PWR70" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597E6" Ref="#PWR79" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597E6" Ref="#PWR88" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597E6" Ref="#PWR97" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597E6" Ref="#PWR106" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597E6" Ref="#PWR115" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597E6" Ref="#PWR124" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597E6" Ref="#PWR133" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597E6" Ref="#PWR142" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597E6" Ref="#PWR151" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597E6" Ref="#PWR160" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597E6" Ref="#PWR169" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597E6" Ref="#PWR178" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597E6" Ref="#PWR187" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597E6" Ref="#PWR196" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597E6" Ref="#PWR205" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597E6" Ref="#PWR214" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597E6" Ref="#PWR223" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597E6" Ref="#PWR232" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597E6" Ref="#PWR241" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597E6" Ref="#PWR250" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597E6" Ref="#PWR259" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597E6" Ref="#PWR268" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597E6" Ref="#PWR277" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597E6" Ref="#PWR286" Part="1"
F 0 "#PWR286" H 5350 4725 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5A1597E6" Ref="#PWR011" Part="1"
AR Path="/5A0916C5/5A096F49/5A1597E6" Ref="#PWR020" Part="1"
AR Path="/5A0916C5/5A0972CC/5A1597E6" Ref="#PWR029" Part="1"
AR Path="/5A0916C5/5A0972D0/5A1597E6" Ref="#PWR038" Part="1"
AR Path="/5A0916C5/5A097A65/5A1597E6" Ref="#PWR047" Part="1"
AR Path="/5A0916C5/5A097A69/5A1597E6" Ref="#PWR056" Part="1"
AR Path="/5A0916C5/5A097A6D/5A1597E6" Ref="#PWR065" Part="1"
AR Path="/5A0916C5/5A097A71/5A1597E6" Ref="#PWR074" Part="1"
AR Path="/5A0916C5/5A0988AE/5A1597E6" Ref="#PWR083" Part="1"
AR Path="/5A0916C5/5A0988B2/5A1597E6" Ref="#PWR092" Part="1"
AR Path="/5A0916C5/5A0988B6/5A1597E6" Ref="#PWR0101" Part="1"
AR Path="/5A0916C5/5A0988BA/5A1597E6" Ref="#PWR0110" Part="1"
AR Path="/5A0916C5/5A0988BE/5A1597E6" Ref="#PWR0119" Part="1"
AR Path="/5A0916C5/5A0988C2/5A1597E6" Ref="#PWR0128" Part="1"
AR Path="/5A0916C5/5A0988C6/5A1597E6" Ref="#PWR0137" Part="1"
AR Path="/5A0916C5/5A0988CA/5A1597E6" Ref="#PWR0146" Part="1"
AR Path="/5A0916C5/5A09BEB0/5A1597E6" Ref="#PWR0155" Part="1"
AR Path="/5A0916C5/5A09BEB4/5A1597E6" Ref="#PWR0164" Part="1"
AR Path="/5A0916C5/5A09BEB8/5A1597E6" Ref="#PWR0173" Part="1"
AR Path="/5A0916C5/5A09BEBC/5A1597E6" Ref="#PWR0182" Part="1"
AR Path="/5A0916C5/5A09BEC0/5A1597E6" Ref="#PWR0191" Part="1"
AR Path="/5A0916C5/5A09BEC4/5A1597E6" Ref="#PWR0200" Part="1"
AR Path="/5A0916C5/5A09BEC8/5A1597E6" Ref="#PWR0209" Part="1"
AR Path="/5A0916C5/5A09BECC/5A1597E6" Ref="#PWR0218" Part="1"
AR Path="/5A0916C5/5A09BED0/5A1597E6" Ref="#PWR0227" Part="1"
AR Path="/5A0916C5/5A09BED4/5A1597E6" Ref="#PWR0236" Part="1"
AR Path="/5A0916C5/5A09BED8/5A1597E6" Ref="#PWR0245" Part="1"
AR Path="/5A0916C5/5A09BEDC/5A1597E6" Ref="#PWR0254" Part="1"
AR Path="/5A0916C5/5A09BEE0/5A1597E6" Ref="#PWR0263" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1597E6" Ref="#PWR0272" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1597E6" Ref="#PWR0281" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1597E6" Ref="#PWR0290" Part="1"
F 0 "#PWR011" H 5350 4725 50 0001 C CNN
F 1 "GND" H 5350 4825 50 0000 C CNN
F 2 "" H 5350 4975 50 0001 C CNN
F 3 "" H 5350 4975 50 0001 C CNN
@ -965,42 +965,42 @@ Wire Wire Line
Text Notes 3850 5950 0 60 ~ 0
Max. Expected Shunt Resistor Dissipation\n--------------------------------\nP = (I^2)*R = (0.033 A)^2 * 10 R = 10.891 mW\nNo problem!\nHigher resistor means more stability (less prone to noise).\n-> approx. 0.7 W overall dissipation.
$Comp
L GND #PWR8
L GND #PWR012
U 1 1 5946B480
P 5880 2115
AR Path="/5A0916C5/5A0A220F/5946B480" Ref="#PWR8" Part="1"
AR Path="/5A0916C5/5A096F49/5946B480" Ref="#PWR17" Part="1"
AR Path="/5A0916C5/5A0972CC/5946B480" Ref="#PWR26" Part="1"
AR Path="/5A0916C5/5A0972D0/5946B480" Ref="#PWR35" Part="1"
AR Path="/5A0916C5/5A097A65/5946B480" Ref="#PWR44" Part="1"
AR Path="/5A0916C5/5A097A69/5946B480" Ref="#PWR53" Part="1"
AR Path="/5A0916C5/5A097A6D/5946B480" Ref="#PWR62" Part="1"
AR Path="/5A0916C5/5A097A71/5946B480" Ref="#PWR71" Part="1"
AR Path="/5A0916C5/5A0988AE/5946B480" Ref="#PWR80" Part="1"
AR Path="/5A0916C5/5A0988B2/5946B480" Ref="#PWR89" Part="1"
AR Path="/5A0916C5/5A0988B6/5946B480" Ref="#PWR98" Part="1"
AR Path="/5A0916C5/5A0988BA/5946B480" Ref="#PWR107" Part="1"
AR Path="/5A0916C5/5A0988BE/5946B480" Ref="#PWR116" Part="1"
AR Path="/5A0916C5/5A0988C2/5946B480" Ref="#PWR125" Part="1"
AR Path="/5A0916C5/5A0988C6/5946B480" Ref="#PWR134" Part="1"
AR Path="/5A0916C5/5A0988CA/5946B480" Ref="#PWR143" Part="1"
AR Path="/5A0916C5/5A09BEB0/5946B480" Ref="#PWR152" Part="1"
AR Path="/5A0916C5/5A09BEB4/5946B480" Ref="#PWR161" Part="1"
AR Path="/5A0916C5/5A09BEB8/5946B480" Ref="#PWR170" Part="1"
AR Path="/5A0916C5/5A09BEBC/5946B480" Ref="#PWR179" Part="1"
AR Path="/5A0916C5/5A09BEC0/5946B480" Ref="#PWR188" Part="1"
AR Path="/5A0916C5/5A09BEC4/5946B480" Ref="#PWR197" Part="1"
AR Path="/5A0916C5/5A09BEC8/5946B480" Ref="#PWR206" Part="1"
AR Path="/5A0916C5/5A09BECC/5946B480" Ref="#PWR215" Part="1"
AR Path="/5A0916C5/5A09BED0/5946B480" Ref="#PWR224" Part="1"
AR Path="/5A0916C5/5A09BED4/5946B480" Ref="#PWR233" Part="1"
AR Path="/5A0916C5/5A09BED8/5946B480" Ref="#PWR242" Part="1"
AR Path="/5A0916C5/5A09BEDC/5946B480" Ref="#PWR251" Part="1"
AR Path="/5A0916C5/5A09BEE0/5946B480" Ref="#PWR260" Part="1"
AR Path="/5A0916C5/5A09BEE4/5946B480" Ref="#PWR269" Part="1"
AR Path="/5A0916C5/5A09BEE8/5946B480" Ref="#PWR278" Part="1"
AR Path="/5A0916C5/5A09BEEC/5946B480" Ref="#PWR287" Part="1"
F 0 "#PWR287" H 5880 1865 50 0001 C CNN
AR Path="/5A0916C5/5A0A220F/5946B480" Ref="#PWR012" Part="1"
AR Path="/5A0916C5/5A096F49/5946B480" Ref="#PWR021" Part="1"
AR Path="/5A0916C5/5A0972CC/5946B480" Ref="#PWR030" Part="1"
AR Path="/5A0916C5/5A0972D0/5946B480" Ref="#PWR039" Part="1"
AR Path="/5A0916C5/5A097A65/5946B480" Ref="#PWR048" Part="1"
AR Path="/5A0916C5/5A097A69/5946B480" Ref="#PWR057" Part="1"
AR Path="/5A0916C5/5A097A6D/5946B480" Ref="#PWR066" Part="1"
AR Path="/5A0916C5/5A097A71/5946B480" Ref="#PWR075" Part="1"
AR Path="/5A0916C5/5A0988AE/5946B480" Ref="#PWR084" Part="1"
AR Path="/5A0916C5/5A0988B2/5946B480" Ref="#PWR093" Part="1"
AR Path="/5A0916C5/5A0988B6/5946B480" Ref="#PWR0102" Part="1"
AR Path="/5A0916C5/5A0988BA/5946B480" Ref="#PWR0111" Part="1"
AR Path="/5A0916C5/5A0988BE/5946B480" Ref="#PWR0120" Part="1"
AR Path="/5A0916C5/5A0988C2/5946B480" Ref="#PWR0129" Part="1"
AR Path="/5A0916C5/5A0988C6/5946B480" Ref="#PWR0138" Part="1"
AR Path="/5A0916C5/5A0988CA/5946B480" Ref="#PWR0147" Part="1"
AR Path="/5A0916C5/5A09BEB0/5946B480" Ref="#PWR0156" Part="1"
AR Path="/5A0916C5/5A09BEB4/5946B480" Ref="#PWR0165" Part="1"
AR Path="/5A0916C5/5A09BEB8/5946B480" Ref="#PWR0174" Part="1"
AR Path="/5A0916C5/5A09BEBC/5946B480" Ref="#PWR0183" Part="1"
AR Path="/5A0916C5/5A09BEC0/5946B480" Ref="#PWR0192" Part="1"
AR Path="/5A0916C5/5A09BEC4/5946B480" Ref="#PWR0201" Part="1"
AR Path="/5A0916C5/5A09BEC8/5946B480" Ref="#PWR0210" Part="1"
AR Path="/5A0916C5/5A09BECC/5946B480" Ref="#PWR0219" Part="1"
AR Path="/5A0916C5/5A09BED0/5946B480" Ref="#PWR0228" Part="1"
AR Path="/5A0916C5/5A09BED4/5946B480" Ref="#PWR0237" Part="1"
AR Path="/5A0916C5/5A09BED8/5946B480" Ref="#PWR0246" Part="1"
AR Path="/5A0916C5/5A09BEDC/5946B480" Ref="#PWR0255" Part="1"
AR Path="/5A0916C5/5A09BEE0/5946B480" Ref="#PWR0264" Part="1"
AR Path="/5A0916C5/5A09BEE4/5946B480" Ref="#PWR0273" Part="1"
AR Path="/5A0916C5/5A09BEE8/5946B480" Ref="#PWR0282" Part="1"
AR Path="/5A0916C5/5A09BEEC/5946B480" Ref="#PWR0291" Part="1"
F 0 "#PWR012" H 5880 1865 50 0001 C CNN
F 1 "GND" H 5880 1965 50 0000 C CNN
F 2 "" H 5880 2115 50 0000 C CNN
F 3 "" H 5880 2115 50 0000 C CNN
@ -1051,7 +1051,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1FEC0D" Ref="Q39" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1FEC0D" Ref="Q37" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1FEC0D" Ref="Q35" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1FEC0D" Ref="Q33" Part="1"
F 0 "Q33" H 5450 3525 50 0000 L CNN
F 0 "Q1" H 5450 3525 50 0000 L CNN
F 1 "MMBT3904" H 5450 3450 50 0000 L CNN
F 2 "TO_SOT_Packages_SMD:SOT-23" H 5450 3375 50 0001 L CIN
F 3 "http://www.mccsemi.com/up_pdf/MMBT3904(SOT-23).pdf" H 5250 3450 50 0001 L CNN
@ -1095,7 +1095,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1FEFA7" Ref="Q40" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1FEFA7" Ref="Q38" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1FEFA7" Ref="Q36" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1FEFA7" Ref="Q34" Part="1"
F 0 "Q34" H 6750 3525 50 0000 L CNN
F 0 "Q2" H 6750 3525 50 0000 L CNN
F 1 "MMBT3904" H 6750 3450 50 0000 L CNN
F 2 "TO_SOT_Packages_SMD:SOT-23" H 6750 3375 50 0001 L CIN
F 3 "http://www.mccsemi.com/up_pdf/MMBT3904(SOT-23).pdf" H 6550 3450 50 0001 L CNN
@ -1139,7 +1139,7 @@ AR Path="/5A0916C5/5A09BEE0/5A1FF296" Ref="R269" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A1FF296" Ref="R271" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A1FF296" Ref="R273" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A1FF296" Ref="R275" Part="1"
F 0 "R275" V 4980 3450 50 0000 C CNN
F 0 "R213" V 4980 3450 50 0000 C CNN
F 1 "10k" V 4900 3450 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 4830 3450 50 0001 C CNN
F 3 "" H 4900 3450 50 0001 C CNN
@ -1183,7 +1183,7 @@ AR Path="/5A0916C5/5A09BEE0/5A20118E" Ref="R270" Part="1"
AR Path="/5A0916C5/5A09BEE4/5A20118E" Ref="R272" Part="1"
AR Path="/5A0916C5/5A09BEE8/5A20118E" Ref="R274" Part="1"
AR Path="/5A0916C5/5A09BEEC/5A20118E" Ref="R276" Part="1"
F 0 "R276" V 6980 3450 50 0000 C CNN
F 0 "R214" V 6980 3450 50 0000 C CNN
F 1 "10k" V 6900 3450 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 6830 3450 50 0001 C CNN
F 3 "" H 6900 3450 50 0001 C CNN

14
pcbs/extension_board/LEDDriver.sch

@ -587,10 +587,10 @@ $EndComp
Text GLabel 8935 2345 2 60 Output ~ 0
VDAC
$Comp
L GND #PWR3
L GND #PWR01
U 1 1 5A10F0A9
P 9100 2845
F 0 "#PWR3" H 9100 2595 50 0001 C CNN
F 0 "#PWR01" H 9100 2595 50 0001 C CNN
F 1 "GND" H 9100 2695 50 0000 C CNN
F 2 "" H 9100 2845 50 0000 C CNN
F 3 "" H 9100 2845 50 0000 C CNN
@ -676,10 +676,10 @@ F 4 " 3362R-103LF-ND" V 7900 3450 60 0001 C CNN "Digikey"
0 1 1 0
$EndComp
$Comp
L GND #PWR1
L GND #PWR02
U 1 1 5A142088
P 7570 4080
F 0 "#PWR1" H 7570 3830 50 0001 C CNN
F 0 "#PWR02" H 7570 3830 50 0001 C CNN
F 1 "GND" H 7570 3930 50 0000 C CNN
F 2 "" H 7570 4080 50 0000 C CNN
F 3 "" H 7570 4080 50 0000 C CNN
@ -698,7 +698,7 @@ F 0 "J2" H 8260 4030 50 0000 C CNN
F 1 "Conn_02x03_Odd_Even" H 8260 3630 50 0000 C CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm" H 8210 3830 50 0001 C CNN
F 3 "" H 8210 3830 50 0001 C CNN
F 4 "TSW-103-07-G-D" H 8210 3830 60 0001 C CNN "Digikey"
F 4 "TSW-103-07-G-D" H 8210 3830 60 0001 C CNN "Samtec"
1 8210 3830
1 0 0 -1
$EndComp
@ -715,10 +715,10 @@ F 4 "311-10KGRCT-ND" V 8840 3930 60 0001 C CNN "Digikey"
-1 0 0 -1
$EndComp
$Comp
L GND #PWR2
L GND #PWR03
U 1 1 5A15B686
P 8840 4080
F 0 "#PWR2" H 8840 3830 50 0001 C CNN
F 0 "#PWR03" H 8840 3830 50 0001 C CNN
F 1 "GND" H 8840 3930 50 0000 C CNN
F 2 "" H 8840 4080 50 0000 C CNN
F 3 "" H 8840 4080 50 0000 C CNN

32
pcbs/extension_board/UI.sch

@ -80,10 +80,10 @@ Wire Wire Line
2775 4550 3125 4550
Connection ~ 3125 4550
$Comp
L GND #PWR299
L GND #PWR0300
U 1 1 5A0B85D7
P 3875 4575
F 0 "#PWR299" H 3875 4325 50 0001 C CNN
F 0 "#PWR0300" H 3875 4325 50 0001 C CNN
F 1 "GND" H 3875 4425 50 0000 C CNN
F 2 "" H 3875 4575 50 0001 C CNN
F 3 "" H 3875 4575 50 0001 C CNN
@ -99,10 +99,10 @@ Text GLabel 2775 4550 0 60 UnSpc ~ 0
UI_BUTTON
Connection ~ 2950 4550
$Comp
L GND #PWR303
L GND #PWR0301
U 1 1 5A0B9013
P 8075 4125
F 0 "#PWR303" H 8075 3875 50 0001 C CNN
F 0 "#PWR0301" H 8075 3875 50 0001 C CNN
F 1 "GND" H 8075 3975 50 0000 C CNN
F 2 "" H 8075 4125 50 0001 C CNN
F 3 "" H 8075 4125 50 0001 C CNN
@ -138,10 +138,10 @@ F 4 "311-1085-1-ND" H 8825 4700 60 0001 C CNN "Digikey"
-1 0 0 -1
$EndComp
$Comp
L GND #PWR305
L GND #PWR0302
U 1 1 5A0BA939
P 8825 4850
F 0 "#PWR305" H 8825 4600 50 0001 C CNN
F 0 "#PWR0302" H 8825 4600 50 0001 C CNN
F 1 "GND" H 8825 4700 50 0000 C CNN
F 2 "" H 8825 4850 50 0001 C CNN
F 3 "" H 8825 4850 50 0001 C CNN
@ -207,10 +207,10 @@ F 4 "311-1085-1-ND" H 6975 4700 60 0001 C CNN "Digikey"
1 0 0 -1
$EndComp
$Comp
L GND #PWR301
L GND #PWR0303
U 1 1 5A0BE4A9
P 6975 4850
F 0 "#PWR301" H 6975 4600 50 0001 C CNN
F 0 "#PWR0303" H 6975 4600 50 0001 C CNN
F 1 "GND" H 6975 4700 50 0000 C CNN
F 2 "" H 6975 4850 50 0001 C CNN
F 3 "" H 6975 4850 50 0001 C CNN
@ -296,10 +296,10 @@ F 4 "987-1399-ND" H 7845 3255 60 0001 C CNN "Digikey"
0 1 1 0
$EndComp
$Comp
L GND #PWR302
L GND #PWR0304
U 1 1 5A0E5835
P 8020 2555
F 0 "#PWR302" H 8020 2305 50 0001 C CNN
F 0 "#PWR0304" H 8020 2305 50 0001 C CNN
F 1 "GND" H 8020 2405 50 0000 C CNN
F 2 "" H 8020 2555 50 0001 C CNN
F 3 "" H 8020 2555 50 0001 C CNN
@ -335,10 +335,10 @@ F 4 "311-1085-1-ND" H 8770 3130 60 0001 C CNN "Digikey"
-1 0 0 -1
$EndComp
$Comp
L GND #PWR304
L GND #PWR0305
U 1 1 5A0E584B
P 8770 3280
F 0 "#PWR304" H 8770 3030 50 0001 C CNN
F 0 "#PWR0305" H 8770 3030 50 0001 C CNN
F 1 "GND" H 8770 3130 50 0000 C CNN
F 2 "" H 8770 3280 50 0001 C CNN
F 3 "" H 8770 3280 50 0001 C CNN
@ -404,10 +404,10 @@ F 4 "311-1085-1-ND" H 6920 3130 60 0001 C CNN "Digikey"
1 0 0 -1
$EndComp
$Comp
L GND #PWR300
L GND #PWR0306
U 1 1 5A0E5872
P 6920 3280
F 0 "#PWR300" H 6920 3030 50 0001 C CNN
F 0 "#PWR0306" H 6920 3030 50 0001 C CNN
F 1 "GND" H 6920 3130 50 0000 C CNN
F 2 "" H 6920 3280 50 0001 C CNN
F 3 "" H 6920 3280 50 0001 C CNN
@ -523,10 +523,10 @@ F 4 "1276-6153-1-ND" V 2800 6275 60 0001 C CNN "Digikey"
-1 0 0 -1
$EndComp
$Comp
L GND #PWR298
L GND #PWR0307
U 1 1 5A2A7AA7
P 2800 6485
F 0 "#PWR298" H 2800 6235 50 0001 C CNN
F 0 "#PWR0307" H 2800 6235 50 0001 C CNN
F 1 "GND" H 2800 6335 50 0000 C CNN
F 2 "" H 2800 6485 50 0001 C CNN
F 3 "" H 2800 6485 50 0001 C CNN

30
pcbs/extension_board/extension_board.kicad_pcb

@ -3,9 +3,9 @@
(general
(links 1330)
(no_connects 0)
(area 97.949999 46.949999 198.050001 129.550001)
(area 87.650001 39.040665 210.35 141.394001)
(thickness 1.6)
(drawings 54)
(drawings 53)
(tracks 4247)
(zones 0)
(modules 611)
@ -31,7 +31,7 @@
(37 F.SilkS user)
(38 B.Mask user)
(39 F.Mask user)
(40 Dwgs.User user hide)
(40 Dwgs.User user)
(41 Cmts.User user)
(42 Eco1.User user)
(43 Eco2.User user)
@ -23566,18 +23566,6 @@
(gr_text "SPI >" (at 144.2212 88.9) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.25)) (justify left))
)
(dimension 82.5 (width 0.3) (layer Dwgs.User) (tstamp 5A267804)
(gr_text "82,500 mm" (at 203.85 91.298 90) (layer Dwgs.User) (tstamp 5A267805)
(effects (font (size 1.5 1.5) (thickness 0.3)))
)
(feature1 (pts (xy 183 50.048) (xy 205.2 50.048)))
(feature2 (pts (xy 183 132.548) (xy 205.2 132.548)))
(crossbar (pts (xy 202.5 132.548) (xy 202.5 50.048)))
(arrow1a (pts (xy 202.5 50.048) (xy 203.086421 51.174504)))
(arrow1b (pts (xy 202.5 50.048) (xy 201.913579 51.174504)))
(arrow2a (pts (xy 202.5 132.548) (xy 203.086421 131.421496)))
(arrow2b (pts (xy 202.5 132.548) (xy 201.913579 131.421496)))
)
(gr_text "max. \n200 mA /\ntransistor" (at 174.9552 88.9) (layer B.SilkS)
(effects (font (size 1.5 1.5) (thickness 0.25)) (justify left mirror))
)
@ -23737,7 +23725,7 @@
(gr_arc (start 195 50) (end 195 47) (angle 90) (layer Edge.Cuts) (width 0.1))
(gr_arc (start 101 50) (end 98 50) (angle 90) (layer Edge.Cuts) (width 0.1))
(dimension 82.5 (width 0.3) (layer Dwgs.User)
(gr_text "82,500 mm" (at 203.85 88.25 90) (layer Dwgs.User)
(gr_text "82,500 mm" (at 204 91 90) (layer Dwgs.User)
(effects (font (size 1.5 1.5) (thickness 0.3)))
)
(feature1 (pts (xy 183 47) (xy 205.2 47)))
@ -28024,11 +28012,11 @@
(segment (start 164.2384 83.5132) (end 164.3316 83.5132) (width 0.2) (layer S1.Cu) (net 419) (tstamp 5A202EC6))
(segment (start 162.8668 84.2752) (end 162.8856 84.2752) (width 0.2) (layer S1.Cu) (net 419) (tstamp 5A13FC97))
(segment (start 162.8856 84.2726) (end 162.8856 84.2752) (width 0.2) (layer S1.Cu) (net 419) (tstamp 5A13FC89))
(segment (start 177.21 109.22) (end 177.111 109.22) (width 0.2) (layer S1.Cu) (net 420) (status C00000))
(segment (start 177.111 109.22) (end 175.343 107.452) (width 0.2) (layer S1.Cu) (net 420) (tstamp 5A2A8436) (status 400000))
(segment (start 175.343 107.452) (end 174.365 107.452) (width 0.2) (layer S1.Cu) (net 420) (tstamp 5A2A8437) (status 800000))
(segment (start 172.815 108.976) (end 172.815 107.502) (width 0.2) (layer S1.Cu) (net 421) (status C00000))
(segment (start 172.815 107.502) (end 172.765 107.452) (width 0.2) (layer S1.Cu) (net 421) (tstamp 5A2A843B) (status C00000))
(segment (start 177.21 109.22) (end 177.111 109.22) (width 0.2) (layer S1.Cu) (net 420))
(segment (start 177.111 109.22) (end 175.343 107.452) (width 0.2) (layer S1.Cu) (net 420) (tstamp 5A2A8436))
(segment (start 175.343 107.452) (end 174.365 107.452) (width 0.2) (layer S1.Cu) (net 420) (tstamp 5A2A8437))
(segment (start 172.815 108.976) (end 172.815 107.502) (width 0.2) (layer S1.Cu) (net 421))
(segment (start 172.815 107.502) (end 172.765 107.452) (width 0.2) (layer S1.Cu) (net 421) (tstamp 5A2A843B))
(zone (net 2) (net_name GND) (layer S2.Cu) (tstamp 5A14094B) (hatch edge 0.508)
(connect_pads yes (clearance 0.381))

2
pcbs/extension_board/output/gerber/extension_board-B.Mask.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Soldermask,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/extension_board/output/gerber/extension_board-B.SilkS.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Legend,Bot*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/extension_board/output/gerber/extension_board-Edge.Cuts.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

8
pcbs/extension_board/output/gerber/extension_board-F.Mask.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Soldermask,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*
@ -1757,4 +1757,10 @@ X66957000Y-31740000D03*
D29*
X27730000Y-66485000D03*
X27730000Y-69385000D03*
D15*
X76365000Y-60452000D03*
X74765000Y-60452000D03*
D16*
X74815000Y-61976000D03*
X76315000Y-61976000D03*
M02*

201
pcbs/extension_board/output/gerber/extension_board-F.SilkS.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Legend,Top*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*
@ -25138,6 +25138,16 @@ X26660000Y-68935000D02*
X26660000Y-66935000D01*
X28800000Y-66935000D02*
X28800000Y-68935000D01*
X74265000Y-59952000D02*
X74265000Y-60952000D01*
X74265000Y-60952000D02*
X76365000Y-60952000D01*
X74265000Y-59952000D02*
X76365000Y-59952000D01*
X76065000Y-62656000D02*
X75065000Y-62656000D01*
X75065000Y-61296000D02*
X76065000Y-61296000D01*
D15*
X44841667Y-59947762D02*
X44984524Y-59995381D01*
@ -26237,26 +26247,26 @@ X63575667Y-53576095D01*
X63528048Y-53718952D01*
X62956619Y-54290381D01*
X63575667Y-54290381D01*
X40426867Y-39828381D02*
X40426867Y-40542667D01*
X40379247Y-40685524D01*
X40284009Y-40780762D01*
X40141152Y-40828381D01*
X40045914Y-40828381D01*
X40807819Y-39828381D02*
X41426867Y-39828381D01*
X41093533Y-40209333D01*
X41236391Y-40209333D01*
X41331629Y-40256952D01*
X41379248Y-40304571D01*
X41426867Y-40399810D01*
X41426867Y-40637905D01*
X41379248Y-40733143D01*
X41331629Y-40780762D01*
X41236391Y-40828381D01*
X40950676Y-40828381D01*
X40855438Y-40780762D01*
X40807819Y-40733143D01*
X41703667Y-41362381D02*
X41703667Y-42076667D01*
X41656047Y-42219524D01*
X41560809Y-42314762D01*
X41417952Y-42362381D01*
X41322714Y-42362381D01*
X42084619Y-41362381D02*
X42703667Y-41362381D01*
X42370333Y-41743333D01*
X42513191Y-41743333D01*
X42608429Y-41790952D01*
X42656048Y-41838571D01*
X42703667Y-41933810D01*
X42703667Y-42171905D01*
X42656048Y-42267143D01*
X42608429Y-42314762D01*
X42513191Y-42362381D01*
X42227476Y-42362381D01*
X42132238Y-42314762D01*
X42084619Y-42267143D01*
X421867Y-7316381D02*
X421867Y-8030667D01*
X374247Y-8173524D01*
@ -35192,51 +35202,51 @@ X63793952Y-15805476D01*
X63770143Y-15829286D01*
X63746333Y-15876905D01*
D15*
X65812953Y-72487381D02*
X65479619Y-72011190D01*
X65241524Y-72487381D02*
X65241524Y-71487381D01*
X65622477Y-71487381D01*
X65717715Y-71535000D01*
X65765334Y-71582619D01*
X65812953Y-71677857D01*
X65812953Y-71820714D01*
X65765334Y-71915952D01*
X65717715Y-71963571D01*
X65622477Y-72011190D01*
X65241524Y-72011190D01*
X66765334Y-72487381D02*
X66193905Y-72487381D01*
X66479619Y-72487381D02*
X66479619Y-71487381D01*
X66384381Y-71630238D01*
X66289143Y-71725476D01*
X66193905Y-71773095D01*
X67241524Y-72487381D02*
X67432000Y-72487381D01*
X67527239Y-72439762D01*
X67574858Y-72392143D01*
X67670096Y-72249286D01*
X67717715Y-72058810D01*
X67717715Y-71677857D01*
X67670096Y-71582619D01*
X67622477Y-71535000D01*
X67527239Y-71487381D01*
X67336762Y-71487381D01*
X67241524Y-71535000D01*
X67193905Y-71582619D01*
X67146286Y-71677857D01*
X67146286Y-71915952D01*
X67193905Y-72011190D01*
X67241524Y-72058810D01*
X67336762Y-72106429D01*
X67527239Y-72106429D01*
X67622477Y-72058810D01*
X67670096Y-72011190D01*
X67717715Y-71915952D01*
X68051048Y-71487381D02*
X68717715Y-71487381D01*
X68289143Y-72487381D01*
X65047953Y-73477381D02*
X64714619Y-73001190D01*
X64476524Y-73477381D02*
X64476524Y-72477381D01*
X64857477Y-72477381D01*
X64952715Y-72525000D01*
X65000334Y-72572619D01*
X65047953Y-72667857D01*
X65047953Y-72810714D01*
X65000334Y-72905952D01*
X64952715Y-72953571D01*
X64857477Y-73001190D01*
X64476524Y-73001190D01*
X66000334Y-73477381D02*
X65428905Y-73477381D01*
X65714619Y-73477381D02*
X65714619Y-72477381D01*
X65619381Y-72620238D01*
X65524143Y-72715476D01*
X65428905Y-72763095D01*
X66476524Y-73477381D02*
X66667000Y-73477381D01*
X66762239Y-73429762D01*
X66809858Y-73382143D01*
X66905096Y-73239286D01*
X66952715Y-73048810D01*
X66952715Y-72667857D01*
X66905096Y-72572619D01*
X66857477Y-72525000D01*
X66762239Y-72477381D01*
X66571762Y-72477381D01*
X66476524Y-72525000D01*
X66428905Y-72572619D01*
X66381286Y-72667857D01*
X66381286Y-72905952D01*
X66428905Y-73001190D01*
X66476524Y-73048810D01*
X66571762Y-73096429D01*
X66762239Y-73096429D01*
X66857477Y-73048810D01*
X66905096Y-73001190D01*
X66952715Y-72905952D01*
X67286048Y-72477381D02*
X67952715Y-72477381D01*
X67524143Y-73477381D01*
X30039953Y-70165381D02*
X29706619Y-69689190D01*
X29468524Y-70165381D02*
@ -40424,4 +40434,63 @@ X25893496Y-68092629D01*
X25845877Y-67997390D01*
X25798258Y-67949771D01*
X25703020Y-67902152D01*
X72286905Y-60904381D02*
X72286905Y-59904381D01*
X72525000Y-59904381D01*
X72667858Y-59952000D01*
X72763096Y-60047238D01*
X72810715Y-60142476D01*
X72858334Y-60332952D01*
X72858334Y-60475810D01*
X72810715Y-60666286D01*
X72763096Y-60761524D01*
X72667858Y-60856762D01*
X72525000Y-60904381D01*
X72286905Y-60904381D01*
X73763096Y-59904381D02*
X73286905Y-59904381D01*
X73239286Y-60380571D01*
X73286905Y-60332952D01*
X73382143Y-60285333D01*
X73620239Y-60285333D01*
X73715477Y-60332952D01*
X73763096Y-60380571D01*
X73810715Y-60475810D01*
X73810715Y-60713905D01*
X73763096Y-60809143D01*
X73715477Y-60856762D01*
X73620239Y-60904381D01*
X73382143Y-60904381D01*
X73286905Y-60856762D01*
X73239286Y-60809143D01*
X71016953Y-62428381D02*
X70683619Y-61952190D01*
X70445524Y-62428381D02*
X70445524Y-61428381D01*
X70826477Y-61428381D01*
X70921715Y-61476000D01*
X70969334Y-61523619D01*
X71016953Y-61618857D01*
X71016953Y-61761714D01*
X70969334Y-61856952D01*
X70921715Y-61904571D01*
X70826477Y-61952190D01*
X70445524Y-61952190D01*
X71397905Y-61523619D02*
X71445524Y-61476000D01*
X71540762Y-61428381D01*
X71778858Y-61428381D01*
X71874096Y-61476000D01*
X71921715Y-61523619D01*
X71969334Y-61618857D01*
X71969334Y-61714095D01*
X71921715Y-61856952D01*
X71350286Y-62428381D01*
X71969334Y-62428381D01*
X72302667Y-61428381D02*
X72969334Y-61428381D01*
X72540762Y-62428381D01*
X73255048Y-61428381D02*
X73921715Y-61428381D01*
X73493143Y-62428381D01*
M02*

2
pcbs/extension_board/output/gerber/extension_board-GND.Cu.gbr → pcbs/extension_board/output/gerber/extension_board-GND(L4).Cu.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Copper,L4,Bot,Mixed*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

10971
pcbs/extension_board/output/gerber/extension_board-S1.Cu.gbr → pcbs/extension_board/output/gerber/extension_board-S1(L1).Cu.gbr

File diff suppressed because it is too large

2
pcbs/extension_board/output/gerber/extension_board-S2.Cu.gbr → pcbs/extension_board/output/gerber/extension_board-S2(L2).Cu.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Copper,L2,Inr,Signal*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/extension_board/output/gerber/extension_board-V18.Cu.gbr → pcbs/extension_board/output/gerber/extension_board-V18(L3).Cu.gbr

@ -1,7 +1,7 @@
G04 #@! TF.FileFunction,Copper,L3,Inr,Mixed*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Wed Dec 6 15:02:30 2017*
G04 Created by KiCad (PCBNEW 4.0.7-e2-6376~58~ubuntu17.04.1) date Mon Dec 11 10:41:26 2017*
%MOMM*%
%LPD*%
G01*

2
pcbs/extension_board/output/gerber/extension_board.drl

@ -1,5 +1,5 @@
M48
;DRILL file {KiCad 4.0.7-e2-6376~58~ubuntu17.04.1} date Wed Dec 6 15:02:33 2017
;DRILL file {KiCad 4.0.7-e2-6376~58~ubuntu17.04.1} date Mon Dec 11 10:41:34 2017
;FORMAT={-:-/ absolute / metric / decimal}
FMAT,2
METRIC,TZ

BIN
pcbs/extension_board/output/gerber/extension_board.zip

Binary file not shown.

36
pcbs/extension_board/power.sch

@ -86,10 +86,10 @@ F 4 "311-3.0KGRCT-ND" V 5090 2970 60 0001 C CNN "Digikey"
-1 0 0 -1
$EndComp
$Comp
L GND #PWR294
L GND #PWR0292
U 1 1 5A0AD8CE
P 5090 3180
F 0 "#PWR294" H 5090 2930 50 0001 C CNN
F 0 "#PWR0292" H 5090 2930 50 0001 C CNN
F 1 "GND" H 5090 3030 50 0000 C CNN
F 2 "" H 5090 3180 50 0001 C CNN
F 3 "" H 5090 3180 50 0001 C CNN
@ -173,10 +173,10 @@ $EndComp
Text GLabel 1830 5145 0 60 Input ~ 0
V18
$Comp
L GND #PWR295
L GND #PWR0293
U 1 1 5A0B8173
P 5115 5940
F 0 "#PWR295" H 5115 5690 50 0001 C CNN
F 0 "#PWR0293" H 5115 5690 50 0001 C CNN
F 1 "GND" H 5115 5790 50 0000 C CNN
F 2 "" H 5115 5940 50 0001 C CNN
F 3 "" H 5115 5940 50 0001 C CNN
@ -188,10 +188,10 @@ FB
Text GLabel 2965 5545 0 60 UnSpc ~ 0
FB
$Comp
L GND #PWR293
L GND #PWR0294
U 1 1 5A0B8CE5
P 4690 5160
F 0 "#PWR293" H 4690 4910 50 0001 C CNN
F 0 "#PWR0294" H 4690 4910 50 0001 C CNN
F 1 "GND" H 4690 5010 50 0000 C CNN
F 2 "" H 4690 5160 50 0001 C CNN
F 3 "" H 4690 5160 50 0001 C CNN
@ -199,10 +199,10 @@ F 3 "" H 4690 5160 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
L GND #PWR292
L GND #PWR0295
U 1 1 5A0BC4D5
P 1985 5940
F 0 "#PWR292" H 1985 5690 50 0001 C CNN
F 0 "#PWR0295" H 1985 5690 50 0001 C CNN
F 1 "GND" H 1985 5790 50 0000 C CNN
F 2 "" H 1985 5940 50 0001 C CNN
F 3 "" H 1985 5940 50 0001 C CNN
@ -283,15 +283,15 @@ F 0 "R201" V 8850 4560 50 0000 C CNN
F 1 "360R" V 8770 4560 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 8700 4560 50 0001 C CNN
F 3 "" H 8770 4560 50 0001 C CNN
F 4 "311-360GRCT-ND" V 8770 4560 60 0001 C CNN "Digikey"
F 4 "311-20GRCT-ND " V 8770 4560 60 0001 C CNN "Digikey"
1 8770 4560
-1 0 0 -1
$EndComp
$Comp
L GND #PWR297
L GND #PWR0296
U 1 1 5A0C1EE8
P 8770 4770
F 0 "#PWR297" H 8770 4520 50 0001 C CNN
F 0 "#PWR0296" H 8770 4520 50 0001 C CNN
F 1 "GND" H 8770 4620 50 0000 C CNN
F 2 "" H 8770 4770 50 0001 C CNN
F 3 "" H 8770 4770 50 0001 C CNN
@ -521,15 +521,15 @@ F 0 "R200" V 8820 2690 50 0000 C CNN
F 1 "20R" V 8740 2690 50 0000 C CNN
F 2 "Resistors_SMD:R_0603" V 8670 2690 50 0001 C CNN
F 3 "" H 8740 2690 50 0001 C CNN
F 4 "1276-6153-1-ND" V 8740 2690 60 0001 C CNN "Digikey"
F 4 "311-20GRCT-ND " V 8740 2690 60 0001 C CNN "Digikey"
1 8740 2690
-1 0 0 -1
$EndComp
$Comp
L GND #PWR296
L GND #PWR0297
U 1 1 5A0EF3E8
P 8740 2900
F 0 "#PWR296" H 8740 2650 50 0001 C CNN
F 0 "#PWR0297" H 8740 2650 50 0001 C CNN
F 1 "GND" H 8740 2750 50 0000 C CNN
F 2 "" H 8740 2900 50 0001 C CNN
F 3 "" H 8740 2900 50 0001 C CNN
@ -565,10 +565,10 @@ Connection ~ 8740 2110
Text GLabel 5025 3960 3 60 UnSpc ~ 0
3V3
$Comp
L PWR_FLAG #FLG1
L PWR_FLAG #FLG0298
U 1 1 5A107991
P 5025 3960
F 0 "#FLG1" H 5025 4035 50 0001 C CNN
F 0 "#FLG0298" H 5025 4035 50 0001 C CNN
F 1 "PWR_FLAG" H 5025 4110 50 0000 C CNN
F 2 "" H 5025 3960 50 0001 C CNN
F 3 "" H 5025 3960 50 0001 C CNN
@ -578,10 +578,10 @@ $EndComp
Text GLabel 5475 3960 3 60 UnSpc ~ 0
V18
$Comp
L PWR_FLAG #FLG2
L PWR_FLAG #FLG0299
U 1 1 5A107A22
P 5475 3960
F 0 "#FLG2" H 5475 4035 50 0001 C CNN
F 0 "#FLG0299" H 5475 4035 50 0001 C CNN
F 1 "PWR_FLAG" H 5475 4110 50 0000 C CNN
F 2 "" H 5475 3960 50 0001 C CNN
F 3 "" H 5475 3960 50 0001 C CNN

63
software/os/error.c

@ -0,0 +1,63 @@
#include<stdio.h>
#include<string.h>
#include<stdint.h>
#include"error.h"
#include"settings.h"
uint8_t osItoa(int iint, char* iochar, size_t ibuffsize)
{
int i = 0;
int j = 0;
char z[10];
size_t buff_size_1 = ibuffsize;
size_t buff_size_2 = sizeof(z);
while(iint > 0)
{
z[i] = (char)('0' + iint % 10);
iint /= 10;
i++;
if( ((buff_size_1 - 1) < i) || ((buff_size_2 - 1) < i))
return 0;
}
j = i-1;
while(j >= 0)
{
iochar[j] = z[i-j-1];
j--;
}
iochar[i] = '\0';
return 1;
}
uint8_t osExplainError(const char* ifile, const int iline, const osError_t ierror, char* iomessage)
{
char z[10];
if(!osItoa(iline, z, sizeof(z)))
return 0;
strcat(iomessage, ifile);
strcat(iomessage, ":");
strcat(iomessage, z);
strcat(iomessage, ": error: ");
switch(ierror)
{
case E_MAX_NUMBER_OF_TASKS:
strcat(iomessage, "Maximum number of tasks (N = ");
if(!osItoa(MAX_NUMBER_OF_TASKS, z, sizeof(z)))
return 0;
strcat(iomessage, z);
strcat(iomessage, ") is reached.\n");
break;
default:
strcat(iomessage, "Unknown error.\n");
}
return 1;
}
void osPrintError(const char* ifile, const int iline, const osError_t ierror)
{
char iomessage[MAX_MESSAGE_SIZE] = {'\0'};
osExplainError(ifile, iline, ierror, iomessage);
#ifdef X86_TEST_ENVIRONMENT
printf("%s", iomessage);
#endif
}

17
software/os/error.h

@ -0,0 +1,17 @@
#ifndef OS_ERROR_H
#define OS_ERROR_H
//--------------Includes-----------------
#include<ostypes.h>
//--------------Preprocessor Hacks-------
#define THROW_ERROR(ERROR_TYPE)\
osPrintError(__FILE__, __LINE__, ERROR_TYPE)
//--------------Funtions-----------------
uint8_t osExplainError(const char* ifile, const int iline, const osError_t ierror, char* message);
void osPrintError(const char* ifile, const int iline, const osError_t ierror);
#endif

163
software/os/heap.c

@ -0,0 +1,163 @@
//--------------Includes-----------------
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include"heap.h"
#include"error.h"
#include"ostypes.h"
//--------------Functions----------------
static inline uint8_t osHeapChildL(uint8_t iind)
{
return (2*iind + 1);
}
static inline uint8_t osHeapChildR(uint8_t iind)
{
return (2*iind + 2);
}
static inline uint8_t osHeapParent(uint8_t iind)
{
return (iind-1)/2;
}
static inline uint8_t osHeapSize(osHeapNode_t* ioarray)
{
int i;
for(i=0; i<HEAP_SIZE; i++)
{
if(ioarray[i] == NULL)
return i;
}
return i;
}
static inline void osHeapDelete(osHeapNode_t* ioarray, uint8_t ii)
{
ioarray[ii] = NULL;
}
void osHeapInit(osHeapNode_t* ioarray)
{
for(int i=0; i<HEAP_SIZE; i++)
{
osHeapDelete(ioarray, i);
}
}
static inline void osHeapSwap(osHeapNode_t* ioarray, uint8_t ia, uint8_t ib)
{
osHeapNode_t z;
z = ioarray[ia];
ioarray[ia] = ioarray[ib];
ioarray[ib] = z;
}
void osHeapHeapify(osHeapNode_t* ioarray, uint8_t iind)
{
uint8_t left = osHeapChildL(iind);
uint8_t right = osHeapChildR(iind);
uint8_t largest = 0;
if( ioarray[left] != NULL )
{
if( ioarray[left]->priority > ioarray[iind]->priority )
largest = left;
}
else
largest = iind;
if( ioarray[right] != NULL )
{
if( ioarray[right]->priority > ioarray[largest]->priority )
largest = right;
}
if( largest != iind)
{
osHeapSwap(ioarray, iind, largest);
osHeapHeapify(ioarray, largest);
}
}
void osHeapBuild(osHeapNode_t* ioarray)
{
for(int i = (osHeapSize(ioarray)/2); i >= 0; i--)
{
osHeapHeapify(ioarray, i);
}
}
uint8_t osHeapMaximum(osHeapNode_t* ioarray, osHeapNode_t* iomax)
{
if(osHeapSize(ioarray) > 0)
{
if(iomax != NULL)
(*iomax) = ioarray[0];
return 1;
}
else
/* Heap is empty. */
return 0;
}
uint8_t osHeapExtractMaximum(osHeapNode_t* ioarray, osHeapNode_t* iomax)
{
if(osHeapSize(ioarray) > 0)
{
if(iomax == NULL)
{
THROW_ERROR(E_NULL_FORBIDDEN);
return 0;
}
(*iomax) = ioarray[0];
osHeapSwap(ioarray, 0, osHeapSize(ioarray)-1);
osHeapDelete(ioarray, osHeapSize(ioarray)-1);
osHeapHeapify(ioarray,0);
return 1;
}
else
/* Heap is empty. */
return 0;
}
uint8_t osHeapInsert(osHeapNode_t* ioarray, osHeapNode_t x)
{
uint8_t i = 0;
if( osHeapSize(ioarray) < HEAP_SIZE)
{
ioarray[osHeapSize(ioarray)] = x;
i = osHeapSize(ioarray)-1;
while( (i>0) && (ioarray[osHeapParent(i)]->priority < ioarray[i]->priority) )
{
osHeapSwap(ioarray, i, osHeapParent(i));
i = osHeapParent(i);
}
return 1;
}
else
{
THROW_ERROR(E_HEAP_OVERLFOW);
return 0;
}
}
void osHeapPrintS(osHeapNode_t* ioarray)
{
if( osHeapIsEmpty(ioarray) )
return;
for(int i=0; i<HEAP_SIZE; i++)
{
if(ioarray[i] == 0)
continue;
printf("%d ", ioarray[i]->priority);
}
printf("\n");
}
uint8_t osHeapIsEmpty(osHeapNode_t* ioarray)
{
if(osHeapSize(ioarray) > 0)
return 0;
else
return 1;
}

38
software/os/heap.h

@ -0,0 +1,38 @@
#ifndef H_HEAP
#define H_HEAP
//--------------Includes-----------------
#include"ostypes.h"
//--------------Functions----------------
static inline uint8_t osHeapChildL(uint8_t iind);
static inline uint8_t osHeapChildR(uint8_t iind);
static inline uint8_t osHeapParent(uint8_t iind);
static inline uint8_t osHeapSize(osHeapNode_t* ioarray);
static inline void osHeapDelete(osHeapNode_t* ioarray, uint8_t ii);
void osHeapInit(osHeapNode_t* ioarray);
static inline void osHeapSwap(osHeapNode_t* ioarray, uint8_t ia, uint8_t ib);
void osHeapHeapify(osHeapNode_t* ioarray, uint8_t iind);
void osHeapBuild(osHeapNode_t* ioarray);
uint8_t osHeapMaximum(osHeapNode_t* ioarray, osHeapNode_t* iomax);
uint8_t osHeapExtractMaximum(osHeapNode_t* ioarray, osHeapNode_t* iomax);
uint8_t osHeapInsert(osHeapNode_t* ioarray, osHeapNode_t x);
void osHeapPrintS(osHeapNode_t* ioarray);
uint8_t osHeapIsEmpty(osHeapNode_t* ioarray);
#endif

1
software/os/helpers.c

@ -6,6 +6,7 @@
*/
#include "stm32f10x.h"
#include "helpers.h"
#include <stdlib.h>
uint8_t osItoa(int iint, char* iochar, size_t ibuffsize, size_t* obuffsize)

13
software/os/helpers.h

@ -8,6 +8,19 @@
#ifndef OS_HELPERS_H_
#define OS_HELPERS_H_
#include "stm32f10x.h"
#include <stdlib.h>
inline int osPowInt(int ibase, int iexponent)
{
int result =1;
for(int i=0; i < iexponent; i++)
{
result *= ibase;
}
return result;
}
uint8_t osItoa(int iint, char* iochar, size_t ibuffsize, size_t* obuffsize);
#endif /* OS_HELPERS_H_ */

134
software/os/mainyyy.c

@ -0,0 +1,134 @@
#define _GNU_SOURCE
#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
#include<pthread.h>
#include<signal.h>
#include<sys/time.h>
#include<string.h>
#include<sched.h>
#include<unistd.h>
#include<errno.h>
#include"heap.h"
#include"ostypes.h"
#include"settings.h"
#include"scheduler.h"
#include"error.h"
// core_id = 0, 1, ... n-1, where n is the system's number of cores
int stick_this_thread_to_core(int core_id) {
int num_cores = sysconf(_SC_NPROCESSORS_ONLN);
if (core_id < 0 || core_id >= num_cores)
return EINVAL;
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core_id, &cpuset);
pthread_t current_thread = pthread_self();
return pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);
}
void myTask1(void *params)
{
char *str = (char*)params;
volatile int i;
static int counter = 0;
printf("%s. Executed task %d times.\n", str, ++counter);
for (i = 0; i < 100000; ++i);
osTaskDelay(10);
}
void myTask2(void *params)
{
char *str = (char*)params;
volatile int i;
static int counter = 0;
printf("%s. Executed task %d times.\n", str, ++counter);
for (i = 0; i < 100000; ++i);
osTaskDelay(20);
}
void myTask3(void *params)
{
char *str = (char*)params;
volatile int i;
static int counter = 0;
printf("%s. Executed task %d times.\n", str, ++counter);
for (i = 0; i < 100000; ++i);
osTaskDelay(5);
}
#ifdef X86_TEST_ENVIRONMENT
void* simulatedTimer(void* iarg)
{
uint8_t id = *( (uint8_t*) iarg );
volatile int j=0;
stick_this_thread_to_core(1);
printf("Thread %d starts.\n", id);
for (j = 0; j < 10e6; ++j);
printf("Thread %d finishs.\n", id);
//osRunScheduler();
}
void timerCallback(int signum)
{
static uint8_t cnt = 0;
static uint8_t ids[MAX_LEVEL_INT_NESTING];
static struct sched_param scheduling_params[MAX_LEVEL_INT_NESTING];
static struct sched_param probe1;
static int probe2 = 0;
int reture = 0;
static pthread_t threads[MAX_LEVEL_INT_NESTING];
if(cnt > (MAX_LEVEL_INT_NESTING-1))
{
//THROW_ERROR(E_MAX_LEVEL_INT_NESTING);
//exit(EXIT_FAILURE);
}
else
{
ids[cnt] = cnt;
scheduling_params[cnt].sched_priority = sched_get_priority_min(SCHED_FIFO) + cnt*2;
printf("Thread %d has priority %d.\n", cnt, scheduling_params[cnt].sched_priority);
pthread_create(&threads[cnt], NULL, &simulatedTimer, &ids[cnt]);
reture = pthread_setschedparam(threads[cnt], SCHED_FIFO, &scheduling_params[cnt]);
if(reture!=0)
printf("Error setting the priority: %d.\n", reture);
cnt++;
}
}
#endif
int main(void)
{
#ifdef X86_TEST_ENVIRONMENT
struct sigaction sa;
struct itimerval timer;
/* Install timer_handler as the signal handler for SIGVTALRM. */
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &timerCallback;
sigaction (SIGVTALRM, &sa, NULL);
/* Configure the timer to expire after 250 msec... */
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = CLOCK_TICK_RATE_MS * 1000;
/* ... and every 250 msec after that. */
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = CLOCK_TICK_RATE_MS;
/* Start a virtual timer. It counts down whenever this process is executing. */
setitimer (ITIMER_VIRTUAL, &timer, NULL);
#endif
/* Add some tasks. */
osTaskCreate(&myTask1, "Task1", "This is Task1.", 1, NULL);
osTaskCreate(&myTask2, "Task2", "This is Task2.", 2, NULL);
osTaskCreate(&myTask3, "Task3", "This is Task3.", 3, NULL);
osPrintAllTasks();
#ifdef X86_TEST_ENVIRONMENT
/* Do busy work. */
while (1);
#endif
return 0;
}

58
software/os/ostypes.h

@ -0,0 +1,58 @@
#ifndef H_OS_TYPES
#define H_OS_TYPES
//--------------Includes-----------------
#include<stdint.h>
#include<settings.h>
//--------------Scheduler----------------
/** Enum for scheduler state.
*/
typedef enum
{
S_INIT,
S_EXECUTING_TASK,
S_EXECUTING_NO_TASK,
S_IDELING
} osSchedulerState_t;
/** Enum for task states.
*/
typedef enum
{
READY, RUNNING, SUSPENDED, BLOCKED
} osTaskState_t;
/** Struct representing the task control block.
*/
typedef struct
{
void (*fnc_ptr)(void*);
char name[MAX_SIZE_TASK_NAME];
void* arguments;
uint8_t priority;
osTaskState_t state;
uint32_t wake_up;
} osTCB_t;
//--------------Errors-------------------
/** Enum to hold all possible error codes.
*/
typedef enum
{
E_MAX_NUMBER_OF_TASKS,
E_HEAP_OVERLFOW,
E_NULL_FORBIDDEN,
E_MAX_LEVEL_INT_NESTING
} osError_t;
//--------------Heaps--------------------
/** Data type to hold a pointer to a TCB.
*/
typedef osTCB_t* osHeapNode_t;
#endif

106
software/os/printf.c

@ -13,9 +13,11 @@
#include "printf.h"
#include "../platform/usart.h"
/** Increment index for a char buffer savely, preventing overflows.
*
*/
static inline uint8_t osPreventBuffOv(uint* ioindex, size_t ibuffsize)
{
int i = 0;
if(*ioindex < ibuffsize)
(*ioindex)++;
else
@ -23,11 +25,71 @@ static inline uint8_t osPreventBuffOv(uint* ioindex, size_t ibuffsize)
return 1;
}
/** Parsing for floats within printf.
*
*/
static void osParseFloat(char* iobuffer, size_t ibuffsize, const char** iformat, uint* i, double ifloat, uint8_t flag)
{
int temp_int;
size_t temp_buffsize;
char temp_string[16];
int float_decimals;
/* Get the pre-decimal positions through implicit casting. */
temp_int = ifloat;
if(!osItoa(temp_int, temp_string, sizeof(temp_string)/sizeof(char), &temp_buffsize))
{
// TODO: Throw error.
}
/* Concatenate. */
for(uint j=0; j < temp_buffsize; j++)
{
iobuffer[*i] = temp_string[j];
osPreventBuffOv(i, ibuffsize);
}
if(!flag)
float_decimals = 4;
else
{
/* Determine how many decimals shall be printed. */
(*iformat)++;
float_decimals = **iformat;
/* Go from ASCII to int. */
float_decimals -= 48;
}
/* Print a comma. */
iobuffer[*i] = ',';
osPreventBuffOv(i, ibuffsize);
/* Amplify to prepare for int. data conv. */
ifloat *= (float)osPowInt(10, float_decimals);
temp_int = ifloat;
/* Get rid of everything before the comma. */
temp_int %= osPowInt(10, float_decimals);
if(!osItoa(temp_int, temp_string, sizeof(temp_string)/sizeof(char), &temp_buffsize))
{
// TODO: Throw error.
}
/* Concatenate. */
for(uint j=0; j < temp_buffsize; j++)
{
iobuffer[*i] = temp_string[j];
osPreventBuffOv(i, ibuffsize);
}
/* Get rid of the f. */
if(flag)
(*iformat)++;
}
/** printf implementation where the magic happens.
*
*/
int osVPrintf(va_list iarguments, char* iobuffer, size_t ibuffsize, const char* iformat)
{
uint i = 0;
int temp_int = 0;
size_t temp_buffsize = 0;
int temp_int;
char temp_char;
char* temp_charptr;
size_t temp_buffsize;
char temp_string[16];
/* Keep processing until the end of the C string. */
@ -53,10 +115,37 @@ int osVPrintf(va_list iarguments, char* iobuffer, size_t ibuffsize, const char*
osPreventBuffOv(&i, ibuffsize);
}
break;
case 's':
temp_charptr = va_arg(iarguments, char*);
while(*temp_charptr != '\0')
{
iobuffer[i] = *temp_charptr;
temp_charptr++;
osPreventBuffOv(&i, ibuffsize);
}
break;
case 'c':
/* Get char and convert it.*/
temp_char = va_arg(iarguments, int);
iobuffer[i] = temp_char;
osPreventBuffOv(&i, ibuffsize);
break;
case '%':
/* Enable possibility to write %% to write a single %.*/
iobuffer[i] = '%';
osPreventBuffOv(&i, ibuffsize);
break;
case '.':
osParseFloat(iobuffer, ibuffsize, &iformat, &i, va_arg(iarguments, double), 1);
break;
case 'f':
osParseFloat(iobuffer, ibuffsize, &iformat, &i, va_arg(iarguments, double), 0);
break;
default:
// TODO: Throw error in case a wrong formatting cmd is used.
return 0;
}
/* Skip control specifier. */
iformat++;
}
else
@ -72,6 +161,17 @@ int osVPrintf(va_list iarguments, char* iobuffer, size_t ibuffsize, const char*
return (i+1);
}
/** printf to be used by the OS user. Can be ported to another platform easily
* by just using another function to transmit one string with the USART.
*
* @param iformat Currently supported are
%d integers
%c single characters
%s C strings
%f Floats with 4 decimals
%.xf Floats with x decimals
* @retval Returns the number of characters printed (SUCCESS) or -1 (FAILURE).
*/
int osPrintf(const char* iformat, ...)
{
va_list arguments;

159
software/os/scheduler.c

@ -0,0 +1,159 @@
#include<stdlib.h>
#include<stdio.h>
#include<stdint.h>
#include<string.h>
#include"scheduler.h"
#include"error.h"
#include"settings.h"
#include"heap.h"
/* TCBs */
static osTCB_t tasks[MAX_NUMBER_OF_TASKS];
static uint8_t task_cnt = 0;
/* Scheduler */
static uint8_t scheduler_initialized = 0;
static osSchedulerState_t state = S_INIT;
static osHeapNode_t current = NULL;
/* Timing */
static uint32_t sys_clk = 0;
/* Queues */
static osHeapNode_t ready_q[HEAP_SIZE];
static inline osTCB_t* osSchedulerGetRunningT(void)
{
for(int i=0; i<MAX_NUMBER_OF_TASKS; i++)
{
if(tasks[i].state == RUNNING)
return &tasks[i];
}
}
static void osSchedulerInit(void)
{
/* A slot is defined empty when the fnc. pointer
points to the NULL pointer. */
for(int i=0; i<MAX_NUMBER_OF_TASKS;i++)
{
tasks[i].fnc_ptr = NULL;
}
scheduler_initialized = 1;
}
uint8_t osTaskCreate(void (*ifnc_ptr)(void*), char* itask_name, void* iarguments, uint8_t ipriority, const osTCB_t* oTaskHandle)
{
uint8_t i=0;
/* If not done so far initialize scheduler. */
if(!scheduler_initialized)
osSchedulerInit();
/* Is enough memory available to create task?*/
if(task_cnt < MAX_NUMBER_OF_TASKS)
{
/* Check fo an empty slot. */
while(tasks[i].fnc_ptr != NULL)
i++;
tasks[i].fnc_ptr = ifnc_ptr;
strcpy(tasks[i].name, itask_name);
tasks[i].arguments = iarguments;
tasks[i].priority = ipriority;
tasks[i].state = READY;
tasks[i].wake_up = 0;
if(oTaskHandle != NULL)
oTaskHandle = &(tasks[task_cnt]);
/* Increase number of tasks. */
task_cnt++;
osHeapInsert(ready_q, &tasks[i]);
return 1;
}
else
THROW_ERROR(E_MAX_NUMBER_OF_TASKS);
return 0;
}
void osTaskDelete(osTCB_t* iotask)
{
iotask->fnc_ptr = NULL;
}
void osTaskDelay(uint8_t idelay)
{
osTCB_t* task_running = osSchedulerGetRunningT();
task_running->state = BLOCKED;
task_running->wake_up = sys_clk + idelay;
}
void osTaskDelayUntil(uint32_t iwakeup_time, uint8_t idelay)
{
osTCB_t* task_running = osSchedulerGetRunningT();
task_running->state = BLOCKED;
task_running->wake_up = iwakeup_time + idelay;
}
uint8_t osRunScheduler(void)
{
printf("System clock: %d\n", ++sys_clk);
/* Are any tasks becomming ready? */
for(int i=0; i<MAX_NUMBER_OF_TASKS; i++)
{
if( tasks[i].state == BLOCKED)
{
if(tasks[i].wake_up <= sys_clk)
{
/* Wake up task and put
it into ready queue. */
tasks[i].state = READY;
osHeapInsert(ready_q, &tasks[i]);
}
}
}
switch(state)
{
case S_INIT:
printf("S_INIT\n");
state = S_EXECUTING_NO_TASK;
break;
case S_EXECUTING_TASK:
printf("S_EXECUTING_TASK\n");
break;
case S_EXECUTING_NO_TASK:
printf("S_EXECUTING_NO_TASK\n");
/* Check if queue is empty. */
if(osHeapIsEmpty(ready_q))
{
state = S_IDELING;
break;
}
osHeapExtractMaximum(ready_q, &current);
current->state = RUNNING;
state = S_EXECUTING_TASK;
(*(current->fnc_ptr))(current->arguments);
state = S_EXECUTING_NO_TASK;
break;
case S_IDELING:
printf("S_IDELING\n");
if(!osHeapIsEmpty(ready_q))
state = S_EXECUTING_NO_TASK;
break;
}
}
void osPrintTask(uint8_t index)
{
printf("Function Pointer:\t%p\n", tasks[index].fnc_ptr);
printf("Name:\t\t\t%s\n", tasks[index].name);
printf("Arguments Pointer:\t%p\n", tasks[index].fnc_ptr);
printf("Priority:\t\t%d\n", tasks[index].priority);
printf("State:\t\t\t%d\n", tasks[index].state);
printf("Wake up:\t\t%d\n", tasks[index].wake_up);
}
void osPrintAllTasks(void)
{
for(int i=0; i<MAX_NUMBER_OF_TASKS; i++)
{
osPrintTask(i);
printf("\n");
}
}

31
software/os/scheduler.h

@ -0,0 +1,31 @@
#ifndef OS_SCHEDULER_H
#define OS_SCHEDULER_H
//--------------Include------------------
#include<stdlib.h>
#include<stdint.h>
#include"settings.h"
#include"ostypes.h"
//--------------Functions----------------
static inline osTCB_t* osSchedulerGetRunningT(void);
static void osSchedulerInit(void);
uint8_t osTaskCreate(void (*ifnc_ptr)(void*), char* itask_name, void* iarguments, uint8_t ipriority, const osTCB_t* oTaskHandle);
void osTaskDelete(osTCB_t* iotask);
void osTaskDelay(uint8_t idelay);
void osTaskDelayUntil(uint32_t iwakeup_time, uint8_t idelay);
uint8_t osRunScheduler(void);
void osPrintTask(uint8_t index);
void osPrintAllTasks(void);
#endif

22
software/os/settings.h

@ -0,0 +1,22 @@
#ifndef OS_SETTINGS_H
#define OS_SETTINGS_H
/* Error */
#define MAX_MESSAGE_SIZE 255
/* Porting */
#define X86_TEST_ENVIRONMENT
/* Only needed for X86 simulation. */
#define MAX_LEVEL_INT_NESTING 3
/* Scheduler */
#define MAX_SIZE_TASK_NAME 20
#define MAX_NUMBER_OF_TASKS 4
#define CLOCK_TICK_RATE_MS 10
#define HEAP_SIZE 6
#if (MAX_NUMBER_OF_TASKS > HEAP_SIZE)
#warning "HEAP_SIZE < MAX_NUMER_OF_TASKS: This might lead to problems."
#endif
#endif
Loading…
Cancel
Save