Compare commits

...

19 Commits

Author SHA1 Message Date
b446d0fa98 Commented out all logging lines as it was using too much RAM 2020-02-02 12:32:18 +01:00
b9f5394d53 Implemented overcurrent detection
Implemented manual and overcurrent screens
Basically it's ready for a real world test!
2020-02-02 12:19:24 +01:00
c8ccd519fc Implemented menu and presets configuration 2020-02-01 20:54:05 +01:00
9ab3da2782 Persist calibration settings
Clarified height vs measurement values
2020-02-01 19:11:09 +01:00
7ec4fa3394 Changed measurements to be async to keep handling button presses
Implemented calibration screen
Implemented pre-move stabilization
Had to remove the nice font to save on program space :-(
2020-02-01 16:55:33 +01:00
1ca611e504 Much refactoring, wow.
Mostly the state/control situation
2020-01-31 16:50:19 +01:00
8b5e23cecb Cleanup of the code
Got rid of the last bits of shouting defines
2020-01-31 12:22:06 +01:00
0124b89fef Added "moving" screen
Implemented motor driver control
Added placeholders for other screens
2020-01-31 10:36:36 +01:00
61a4072738 Cleaned up the interface 2020-01-30 20:06:13 +01:00
df61b1f24d Implemented screen timeout and button detection 2020-01-30 16:01:26 +01:00
b1600ab1d6 Migrated to Polulu VL53L0X library
Saves around 7.5kb of precious program space
2020-01-30 15:16:52 +01:00
5d013b4273 Implemented basic home screen
Refactored settings and global state to reduce overhead
Consolidated configuration into class constants
(I really didn't like all the shouting in the code :-))
2020-01-30 10:28:01 +01:00
72fd1af579 Finished v1 of the PCB layout
Completed initialisation sequence
Implemented screen system
2020-01-28 16:52:26 +01:00
344e0bd3b0 Added error message for VL53L0X initialization
Slightly updated the schematics
2020-01-27 19:34:08 +01:00
73ba3b2750 Added initialization sequence
Added EEPROM persistence
2020-01-26 16:20:44 +01:00
be0b4a4872 Error handling and timing budget in VL53L0X class 2020-01-26 14:14:58 +01:00
271c7de255 Framework code 2020-01-26 14:14:47 +01:00
23f432712b Added Fusion 360 exports for mount design (WIP) 2020-01-26 14:14:38 +01:00
2ff37d5991 Basic project setup 2020-01-26 14:14:24 +01:00
82 changed files with 107374 additions and 1570 deletions

3
.gitignore vendored
View File

@ -1 +1,4 @@
.pio
*.kicad_pcb-bak
*.sublime-workspace
pcb/plot

View File

@ -0,0 +1,10 @@
{
"folders":
[
{
"path": ".",
"file_exclude_patterns": ["*.sublime-project"],
"folder_exclude_patterns": [".pioenvs"]
}
]
}

20
README.md Normal file
View File

@ -0,0 +1,20 @@
# DeskControl
This project is for motorizing a (very specific) manually controlled standing desk. I wanted to call it AutoDesk, but I don't like getting sued :-)
Contained in this repository are the hardware designs and software source code. I doubt it's useful to anyone but me, but it may contain some interesting bits of code.
All contents are released under the [Unlicense](https://unlicense.org/). Help yourself!
## Building and uploading
This project uses [PlatformIO](https://platformio.org/). For reference, here are some of the common commands:
_Building_
```pio run```
_Building and uploading_
```pio run -t upload```
_Installing the libraries (without building)_
```pio lib install```

24
UNLICENSE Normal file
View File

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>

Binary file not shown.

45
doc/pinout.md Normal file
View File

@ -0,0 +1,45 @@
## ST7789 LCD
https://learn.adafruit.com/adafruit-1-3-and-1-54-240-x-240-wide-angle-tft-lcd-displays/pinouts
| Identifier | Description | Arduino pin | ATMega328p pin |
|------------|----------------------------|-------------|----------------|
| MOSI | SPI master out - slave in | 11 | 15 - PB3 |
| SCLK | SPI clock | 13 | 17 - PB5 |
| CS | Chip select | N/C | N/C |
| RST | Reset | 9 | 13 - PB1 |
| DC | SPI data / command select | 8 | 12 - PB0 |
| BL | Backlight PWM | 7 | 11 - PD7 |
## Polulu G2 motor driver
https://www.pololu.com/product/2995
| Identifier | Description | Arduino pin | ATMega328p pin |
|------------|----------------------------|-------------|----------------|
| PWM | Motor PWM | 14 / A0 | 23 - PC0 |
| DIR | Direction | 15 / A1 | 24 - PC1 |
| SLP | Sleep (active low) | 16 | 25 - PC2 |
| CS | Current sensing | 17 / A3 | 26 - PC3 |
CS has a voltage of 50mV + 20mV per A.
## VL53L0X time-of-flight sensor
https://learn.adafruit.com/adafruit-vl53l0x-micro-lidar-distance-sensor-breakout/pinouts
| Identifier | Description | Arduino pin | ATMega328p pin |
|------------|----------------------------|-------------|----------------|
| SCL | I²C clock | 18 / A4 | 28 - PC5 |
| SDA | I²C data | 19 / A5 | 27 - PC4 |
## Buttons
| Description | Arduino pin | ATMega328p pin |
|-------------|-------------|----------------|
| Up | 3 | 1 - PD3 |
| Menu | 5 | 9 - PD5 |
| Down | 6 | 10 - PD6 |

21
doc/testscript.md Normal file
View File

@ -0,0 +1,21 @@
# Testscript
As I really do not want to explain to my employer how I broke my desk, this document describes the intended behaviour of the software in various scenarios, focusing on the safety guards.
## Startup
1. Height sensor must report at least 3 values within 10mm of each other to be considered stable.
1. If the EEPROM has not been initialized yet, the height offset setup screen must be displayed.
1. Otherwise, the home screen must be displayed.
## Home
## Moving
1. If the height sensor does not report a valid value for 100ms the move must be aborted and the move error screen shown.
### Move error screen
1. This screen can only be closed if the height sensor is considered stable, as described in the startup sequence.
1. Pressing any button will close this screen and return to the Home screen.

Binary file not shown.

BIN
mount/Motor.f3d Normal file

Binary file not shown.

BIN
mount/Mount.f3z Normal file

Binary file not shown.

BIN
mount/Mount.factory Normal file

Binary file not shown.

View File

@ -1,494 +0,0 @@
EESchema Schematic File Version 4
EELAYER 26 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L MCU_Microchip_ATmega:ATmega328-AU U1
U 1 1 5D753A97
P 5100 3400
F 0 "U1" H 4200 2050 50 0000 C CNN
F 1 "ATmega328-AU" H 4200 2150 50 0000 C CNN
F 2 "Package_QFP:TQFP-32_7x7mm_P0.8mm" H 5100 3400 50 0001 C CIN
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf" H 5100 3400 50 0001 C CNN
1 5100 3400
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x04 J2
U 1 1 5D753B7C
P 9400 2250
F 0 "J2" H 9479 2242 50 0000 L CNN
F 1 "SSD1306" H 9479 2151 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 9400 2250 50 0001 C CNN
F 3 "~" H 9400 2250 50 0001 C CNN
1 9400 2250
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_02x03_Odd_Even J1
U 1 1 5D753DE7
P 9350 3100
F 0 "J1" H 9400 3417 50 0000 C CNN
F 1 "PROG" H 9400 3326 50 0000 C CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm" H 9350 3100 50 0001 C CNN
F 3 "~" H 9350 3100 50 0001 C CNN
1 9350 3100
1 0 0 -1
$EndComp
Text GLabel 9150 3000 0 50 Input ~ 0
MISO
Text GLabel 9150 3100 0 50 Input ~ 0
SCK
Text GLabel 9150 3200 0 50 Input ~ 0
RST
Text GLabel 9650 3100 2 50 Input ~ 0
MOSI
$Comp
L power:+5V #PWR08
U 1 1 5D753EAE
P 9750 3000
F 0 "#PWR08" H 9750 2850 50 0001 C CNN
F 1 "+5V" H 9765 3173 50 0000 C CNN
F 2 "" H 9750 3000 50 0001 C CNN
F 3 "" H 9750 3000 50 0001 C CNN
1 9750 3000
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR09
U 1 1 5D753EEB
P 9750 3200
F 0 "#PWR09" H 9750 2950 50 0001 C CNN
F 1 "GND" H 9755 3027 50 0000 C CNN
F 2 "" H 9750 3200 50 0001 C CNN
F 3 "" H 9750 3200 50 0001 C CNN
1 9750 3200
1 0 0 -1
$EndComp
Wire Wire Line
9650 3000 9750 3000
Wire Wire Line
9650 3200 9750 3200
$Comp
L power:+5V #PWR04
U 1 1 5D753F2B
P 8900 2350
F 0 "#PWR04" H 8900 2200 50 0001 C CNN
F 1 "+5V" H 8915 2523 50 0000 C CNN
F 2 "" H 8900 2350 50 0001 C CNN
F 3 "" H 8900 2350 50 0001 C CNN
1 8900 2350
-1 0 0 1
$EndComp
$Comp
L power:GND #PWR06
U 1 1 5D753F42
P 9100 2450
F 0 "#PWR06" H 9100 2200 50 0001 C CNN
F 1 "GND" H 9105 2277 50 0000 C CNN
F 2 "" H 9100 2450 50 0001 C CNN
F 3 "" H 9100 2450 50 0001 C CNN
1 9100 2450
1 0 0 -1
$EndComp
Wire Wire Line
9100 2450 9200 2450
Wire Wire Line
9200 2350 8900 2350
Text GLabel 9200 2150 0 50 Input ~ 0
SDA
Text GLabel 9200 2250 0 50 Input ~ 0
SCL
$Comp
L power:+5V #PWR01
U 1 1 5D7540FC
P 900 900
F 0 "#PWR01" H 900 750 50 0001 C CNN
F 1 "+5V" H 915 1073 50 0000 C CNN
F 2 "" H 900 900 50 0001 C CNN
F 3 "" H 900 900 50 0001 C CNN
1 900 900
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR03
U 1 1 5D754134
P 900 1450
F 0 "#PWR03" H 900 1200 50 0001 C CNN
F 1 "GND" H 905 1277 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG02
U 1 1 5D754186
P 900 1450
F 0 "#FLG02" H 900 1525 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1624 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "~" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG01
U 1 1 5D7541A4
P 900 900
F 0 "#FLG01" H 900 975 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1073 50 0000 C CNN
F 2 "" H 900 900 50 0001 C CNN
F 3 "~" H 900 900 50 0001 C CNN
1 900 900
-1 0 0 1
$EndComp
$Comp
L Device:C C3
U 1 1 5D754323
P 3900 2350
F 0 "C3" H 3785 2304 50 0000 R CNN
F 1 "100nF" H 3785 2395 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 3938 2200 50 0001 C CNN
F 3 "~" H 3900 2350 50 0001 C CNN
1 3900 2350
-1 0 0 1
$EndComp
$Comp
L power:GND #PWR07
U 1 1 5D75441A
P 3350 2750
F 0 "#PWR07" H 3350 2500 50 0001 C CNN
F 1 "GND" H 3355 2577 50 0000 C CNN
F 2 "" H 3350 2750 50 0001 C CNN
F 3 "" H 3350 2750 50 0001 C CNN
1 3350 2750
1 0 0 -1
$EndComp
$Comp
L Device:C C2
U 1 1 5D7545D2
P 3350 2350
F 0 "C2" H 3235 2304 50 0000 R CNN
F 1 "100nF" H 3235 2395 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 3388 2200 50 0001 C CNN
F 3 "~" H 3350 2350 50 0001 C CNN
1 3350 2350
-1 0 0 1
$EndComp
$Comp
L Device:C C1
U 1 1 5D75463E
P 2800 2350
F 0 "C1" H 2685 2304 50 0000 R CNN
F 1 "10uF" H 2685 2395 50 0000 R CNN
F 2 "Capacitors_Tantalum_SMD:CP_Tantalum_Case-D_EIA-7343-31_Reflow" H 2838 2200 50 0001 C CNN
F 3 "~" H 2800 2350 50 0001 C CNN
1 2800 2350
-1 0 0 1
$EndComp
Wire Wire Line
2800 2200 3100 2200
Wire Wire Line
3900 2200 4500 2200
$Comp
L power:+5V #PWR02
U 1 1 5D754E27
P 3100 1400
F 0 "#PWR02" H 3100 1250 50 0001 C CNN
F 1 "+5V" H 3115 1573 50 0000 C CNN
F 2 "" H 3100 1400 50 0001 C CNN
F 3 "" H 3100 1400 50 0001 C CNN
1 3100 1400
1 0 0 -1
$EndComp
Connection ~ 3100 2200
Wire Wire Line
3100 2200 3350 2200
Wire Wire Line
5200 1900 5200 1750
Wire Wire Line
5200 1750 5100 1750
Wire Wire Line
5100 1750 5100 1900
Wire Wire Line
5100 1750 3100 1750
Connection ~ 5100 1750
Wire Wire Line
3900 2500 3900 2650
Wire Wire Line
3900 2650 3350 2650
Wire Wire Line
3350 2650 3350 2750
Wire Wire Line
3350 2500 3350 2650
Connection ~ 3350 2650
Wire Wire Line
2800 2500 2800 2650
Wire Wire Line
2800 2650 3350 2650
NoConn ~ 4500 2400
NoConn ~ 4500 2500
Wire Wire Line
3100 1400 3100 1750
Connection ~ 3100 1750
Wire Wire Line
3100 1750 3100 2200
$Comp
L Device:C C4
U 1 1 5D75696A
P 6800 2700
F 0 "C4" V 7052 2700 50 0000 C CNN
F 1 "33pF" V 6961 2700 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 6838 2550 50 0001 C CNN
F 3 "~" H 6800 2700 50 0001 C CNN
1 6800 2700
0 -1 -1 0
$EndComp
$Comp
L Device:C C5
U 1 1 5D756A0E
P 6800 3150
F 0 "C5" V 7052 3150 50 0000 C CNN
F 1 "33pF" V 6961 3150 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 6838 3000 50 0001 C CNN
F 3 "~" H 6800 3150 50 0001 C CNN
1 6800 3150
0 -1 -1 0
$EndComp
$Comp
L power:GND #PWR010
U 1 1 5D756A8A
P 7100 3300
F 0 "#PWR010" H 7100 3050 50 0001 C CNN
F 1 "GND" H 7105 3127 50 0000 C CNN
F 2 "" H 7100 3300 50 0001 C CNN
F 3 "" H 7100 3300 50 0001 C CNN
1 7100 3300
1 0 0 -1
$EndComp
Wire Wire Line
6950 3150 7100 3150
Wire Wire Line
7100 3150 7100 3300
Wire Wire Line
6950 2700 7100 2700
Wire Wire Line
7100 2700 7100 3150
Connection ~ 7100 3150
$Comp
L Device:Crystal XTAL1
U 1 1 5D756FAB
P 6500 2950
F 0 "XTAL1" V 6550 3300 50 0000 R CNN
F 1 "16 Mhz" V 6450 3350 50 0000 R CNN
F 2 "Crystals:Crystal_HC49-U_Vertical" H 6500 2950 50 0001 C CNN
F 3 "~" H 6500 2950 50 0001 C CNN
1 6500 2950
0 -1 -1 0
$EndComp
Wire Wire Line
6500 2800 6500 2700
Wire Wire Line
6500 2700 6650 2700
Wire Wire Line
6500 3100 6500 3150
Wire Wire Line
6500 3150 6650 3150
Wire Wire Line
5700 2800 6050 2800
Wire Wire Line
6050 2800 6050 2700
Wire Wire Line
6050 2700 6500 2700
Connection ~ 6500 2700
Wire Wire Line
5700 2900 6050 2900
Wire Wire Line
6050 2900 6050 3150
Wire Wire Line
6050 3150 6500 3150
Connection ~ 6500 3150
Text GLabel 5700 3500 2 50 Input ~ 0
SDA
Text GLabel 5700 3600 2 50 Input ~ 0
SCL
Text GLabel 5700 2500 2 50 Input ~ 0
MOSI
Text GLabel 5700 2600 2 50 Input ~ 0
MISO
Text GLabel 5700 2700 2 50 Input ~ 0
SCK
$Comp
L Device:R R1
U 1 1 5D758534
P 6250 3550
F 0 "R1" H 6320 3596 50 0000 L CNN
F 1 "10k" H 6320 3505 50 0000 L CNN
F 2 "Resistors_SMD:R_0603" V 6180 3550 50 0001 C CNN
F 3 "~" H 6250 3550 50 0001 C CNN
1 6250 3550
1 0 0 -1
$EndComp
$Comp
L power:+5V #PWR011
U 1 1 5D7585CC
P 6250 3400
F 0 "#PWR011" H 6250 3250 50 0001 C CNN
F 1 "+5V" H 6265 3573 50 0000 C CNN
F 2 "" H 6250 3400 50 0001 C CNN
F 3 "" H 6250 3400 50 0001 C CNN
1 6250 3400
1 0 0 -1
$EndComp
Wire Wire Line
5700 3700 6250 3700
Text GLabel 6450 3700 2 50 Input ~ 0
RST
Wire Wire Line
6250 3700 6450 3700
Connection ~ 6250 3700
$Comp
L power:GND #PWR012
U 1 1 5D75920D
P 5100 4900
F 0 "#PWR012" H 5100 4650 50 0001 C CNN
F 1 "GND" H 5105 4727 50 0000 C CNN
F 2 "" H 5100 4900 50 0001 C CNN
F 3 "" H 5100 4900 50 0001 C CNN
1 5100 4900
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW1
U 1 1 5D759C24
P 6250 1600
F 0 "SW1" H 6250 1885 50 0000 C CNN
F 1 "SW_Push" H 6250 1794 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 1800 50 0001 C CNN
F 3 "" H 6250 1800 50 0001 C CNN
1 6250 1600
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW2
U 1 1 5D759CB0
P 6250 2000
F 0 "SW2" H 6250 2285 50 0000 C CNN
F 1 "SW_Push" H 6250 2194 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 2200 50 0001 C CNN
F 3 "" H 6250 2200 50 0001 C CNN
1 6250 2000
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW3
U 1 1 5D759CF0
P 6250 2400
F 0 "SW3" H 6250 2685 50 0000 C CNN
F 1 "SW_Push" H 6250 2594 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 2600 50 0001 C CNN
F 3 "" H 6250 2600 50 0001 C CNN
1 6250 2400
1 0 0 -1
$EndComp
Wire Wire Line
5700 2200 5800 2200
Wire Wire Line
5800 2200 5800 1600
Wire Wire Line
5800 1600 6050 1600
Wire Wire Line
5700 2300 5850 2300
Wire Wire Line
5850 2300 5850 2000
Wire Wire Line
5850 2000 6050 2000
Wire Wire Line
5700 2400 6050 2400
$Comp
L power:GND #PWR05
U 1 1 5D75B49B
P 6550 2400
F 0 "#PWR05" H 6550 2150 50 0001 C CNN
F 1 "GND" H 6555 2227 50 0000 C CNN
F 2 "" H 6550 2400 50 0001 C CNN
F 3 "" H 6550 2400 50 0001 C CNN
1 6550 2400
1 0 0 -1
$EndComp
Wire Wire Line
6450 2400 6550 2400
Wire Wire Line
6450 2000 6550 2000
Wire Wire Line
6550 2000 6550 2400
Connection ~ 6550 2400
Wire Wire Line
6450 1600 6550 1600
Wire Wire Line
6550 1600 6550 2000
Connection ~ 6550 2000
NoConn ~ 5700 3100
NoConn ~ 5700 3200
NoConn ~ 5700 3300
NoConn ~ 5700 3400
NoConn ~ 5700 4100
NoConn ~ 5700 4200
NoConn ~ 5700 4300
NoConn ~ 5700 4400
NoConn ~ 5700 4500
NoConn ~ 5700 4600
$Comp
L Connector_Generic:Conn_01x04 J?
U 1 1 5D7651C5
P 6500 4000
F 0 "J?" H 6650 4050 50 0000 L CNN
F 1 "L298" H 6580 3951 50 0000 L CNN
F 2 "" H 6500 4000 50 0001 C CNN
F 3 "~" H 6500 4000 50 0001 C CNN
1 6500 4000
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR?
U 1 1 5D765563
P 6150 4200
F 0 "#PWR?" H 6150 3950 50 0001 C CNN
F 1 "GND" H 6155 4027 50 0000 C CNN
F 2 "" H 6150 4200 50 0001 C CNN
F 3 "" H 6150 4200 50 0001 C CNN
1 6150 4200
1 0 0 -1
$EndComp
Wire Wire Line
5700 3900 6300 3900
Wire Wire Line
5700 4000 6300 4000
$Comp
L power:+5V #PWR?
U 1 1 5D767927
P 6000 4100
F 0 "#PWR?" H 6000 3950 50 0001 C CNN
F 1 "+5V" H 6015 4273 50 0000 C CNN
F 2 "" H 6000 4100 50 0001 C CNN
F 3 "" H 6000 4100 50 0001 C CNN
1 6000 4100
-1 0 0 1
$EndComp
Wire Wire Line
6000 4100 6300 4100
Wire Wire Line
6150 4200 6300 4200
$EndSCHEMATC

View File

@ -1,734 +0,0 @@
(kicad_pcb (version 20171130) (host pcbnew "(5.0.1)-3")
(general
(thickness 1.6)
(drawings 0)
(tracks 0)
(zones 0)
(modules 14)
(nets 17)
)
(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)
)
(setup
(last_trace_width 0.25)
(trace_clearance 0.2)
(zone_clearance 0.508)
(zone_45_only no)
(trace_min 0.2)
(segment_width 0.2)
(edge_width 0.15)
(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)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.15)
(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.051)
(solder_mask_min_width 0.25)
(aux_axis_origin 0 0)
(visible_elements FFFFFF7F)
(pcbplotparams
(layerselection 0x010fc_ffffffff)
(usegerberextensions false)
(usegerberattributes false)
(usegerberadvancedattributes false)
(creategerberjobfile false)
(excludeedgelayer true)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(scaleselection 1)
(outputdirectory ""))
)
(net 0 "")
(net 1 +5V)
(net 2 GND)
(net 3 "Net-(C3-Pad2)")
(net 4 "Net-(C4-Pad1)")
(net 5 "Net-(C5-Pad1)")
(net 6 RST)
(net 7 MOSI)
(net 8 SCK)
(net 9 MISO)
(net 10 SCL)
(net 11 SDA)
(net 12 "Net-(J3-Pad1)")
(net 13 "Net-(J3-Pad2)")
(net 14 "Net-(SW1-Pad1)")
(net 15 "Net-(SW2-Pad1)")
(net 16 "Net-(SW3-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 +5V)
(add_net GND)
(add_net MISO)
(add_net MOSI)
(add_net "Net-(C3-Pad2)")
(add_net "Net-(C4-Pad1)")
(add_net "Net-(C5-Pad1)")
(add_net "Net-(J3-Pad1)")
(add_net "Net-(J3-Pad2)")
(add_net "Net-(SW1-Pad1)")
(add_net "Net-(SW2-Pad1)")
(add_net "Net-(SW3-Pad1)")
(add_net RST)
(add_net SCK)
(add_net SCL)
(add_net SDA)
)
(module Capacitors_Tantalum_SMD:CP_Tantalum_Case-D_EIA-7343-31_Reflow (layer F.Cu) (tedit 58CC8C08) (tstamp 5D755080)
(at 108.458 80.01 270)
(descr "Tantalum capacitor, Case D, EIA 7343-31, 7.3x4.3x2.8mm, Reflow soldering footprint")
(tags "capacitor tantalum smd")
(path /5D75463E)
(attr smd)
(fp_text reference C1 (at 0 -3.9 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 10uF (at 0 3.9 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -4.75 -2.4) (end -4.75 2.4) (layer F.SilkS) (width 0.12))
(fp_line (start -4.75 2.4) (end 3.65 2.4) (layer F.SilkS) (width 0.12))
(fp_line (start -4.75 -2.4) (end 3.65 -2.4) (layer F.SilkS) (width 0.12))
(fp_line (start -2.555 -2.15) (end -2.555 2.15) (layer F.Fab) (width 0.1))
(fp_line (start -2.92 -2.15) (end -2.92 2.15) (layer F.Fab) (width 0.1))
(fp_line (start 3.65 -2.15) (end -3.65 -2.15) (layer F.Fab) (width 0.1))
(fp_line (start 3.65 2.15) (end 3.65 -2.15) (layer F.Fab) (width 0.1))
(fp_line (start -3.65 2.15) (end 3.65 2.15) (layer F.Fab) (width 0.1))
(fp_line (start -3.65 -2.15) (end -3.65 2.15) (layer F.Fab) (width 0.1))
(fp_line (start 4.85 -2.5) (end -4.85 -2.5) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.85 2.5) (end 4.85 -2.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.85 2.5) (end 4.85 2.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.85 -2.5) (end -4.85 2.5) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 smd rect (at 3.175 0 270) (size 2.55 2.7) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(pad 1 smd rect (at -3.175 0 270) (size 2.55 2.7) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_Tantalum_SMD.3dshapes/CP_Tantalum_Case-D_EIA-7343-31.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 58AA84B8) (tstamp 5D755091)
(at 117.094 85.09)
(descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 1206")
(path /5D7545D2)
(attr smd)
(fp_text reference C2 (at 0 -1.75) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 100nF (at 0 2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 -1.75) (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 1 -1.02) (end -1 -1.02) (layer F.SilkS) (width 0.12))
(fp_line (start -1 1.02) (end 1 1.02) (layer F.SilkS) (width 0.12))
(fp_line (start -2.25 -1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(pad 1 smd rect (at -1.5 0) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 2 smd rect (at 1.5 0) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(model Capacitors_SMD.3dshapes/C_1206.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 58AA84B8) (tstamp 5D7550A2)
(at 125.984 82.55)
(descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 1206")
(path /5D754323)
(attr smd)
(fp_text reference C3 (at 0 -1.75) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 100nF (at 0 2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 2.25 1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 1.02) (end 1 1.02) (layer F.SilkS) (width 0.12))
(fp_line (start 1 -1.02) (end -1 -1.02) (layer F.SilkS) (width 0.12))
(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_text user %R (at 0 -1.75) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 smd rect (at 1.5 0) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(C3-Pad2)"))
(pad 1 smd rect (at -1.5 0) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD.3dshapes/C_1206.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 58AA84B8) (tstamp 5D7550B3)
(at 114.554 88.646 90)
(descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 1206")
(path /5D75696A)
(attr smd)
(fp_text reference C4 (at 0 -1.75 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 33pF (at 0 2 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 2.25 1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 1.02) (end 1 1.02) (layer F.SilkS) (width 0.12))
(fp_line (start 1 -1.02) (end -1 -1.02) (layer F.SilkS) (width 0.12))
(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_text user %R (at 0 -1.75 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 smd rect (at 1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 1 smd rect (at -1.5 0 90) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 4 "Net-(C4-Pad1)"))
(model Capacitors_SMD.3dshapes/C_1206.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Capacitors_SMD:C_1206 (layer F.Cu) (tedit 58AA84B8) (tstamp 5D7550C4)
(at 114.554 96.52 270)
(descr "Capacitor SMD 1206, reflow soldering, AVX (see smccp.pdf)")
(tags "capacitor 1206")
(path /5D756A0E)
(attr smd)
(fp_text reference C5 (at 0 -1.75 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 33pF (at 0 2 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 -1.75 270) (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 1 -1.02) (end -1 -1.02) (layer F.SilkS) (width 0.12))
(fp_line (start -1 1.02) (end 1 1.02) (layer F.SilkS) (width 0.12))
(fp_line (start -2.25 -1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 -1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end 2.25 -1.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.25 1.05) (end -2.25 1.05) (layer F.CrtYd) (width 0.05))
(pad 1 smd rect (at -1.5 0 270) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 5 "Net-(C5-Pad1)"))
(pad 2 smd rect (at 1.5 0 270) (size 1 1.6) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(model Capacitors_SMD.3dshapes/C_1206.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm (layer F.Cu) (tedit 59650532) (tstamp 5D7550E0)
(at 141.224 69.85)
(descr "Through hole straight pin header, 2x03, 2.54mm pitch, double rows")
(tags "Through hole pin header THT 2x03 2.54mm double row")
(path /5D753DE7)
(fp_text reference J1 (at 1.27 -2.33) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value PROG (at 1.27 7.41) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 1.27 2.54 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 4.35 -1.8) (end -1.8 -1.8) (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 -1.8 6.85) (end 4.35 6.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.33 -1.33) (end 0 -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.27 -1.33) (end 3.87 -1.33) (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.33 1.27) (end 1.27 1.27) (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.33 6.41) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 6.41) (end 3.87 6.41) (layer F.SilkS) (width 0.12))
(fp_line (start -1.27 0) (end 0 -1.27) (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 3.81 6.35) (end -1.27 6.35) (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 0 -1.27) (end 3.81 -1.27) (layer F.Fab) (width 0.1))
(pad 6 thru_hole oval (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 2 GND))
(pad 5 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 6 RST))
(pad 4 thru_hole oval (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 7 MOSI))
(pad 3 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 8 SCK))
(pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 1 +5V))
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 9 MISO))
(model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_2x03_Pitch2.54mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm (layer F.Cu) (tedit 59650532) (tstamp 5D7550F8)
(at 145.034 96.266 180)
(descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x04 2.54mm single row")
(path /5D753B7C)
(fp_text reference J2 (at 0 -2.33 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SSD1306 (at 0 9.95 180) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 3.81 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.33 -1.33) (end 0 -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.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1))
(fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
(pad 4 thru_hole oval (at 0 7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 2 GND))
(pad 3 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 1 +5V))
(pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 10 SCL))
(pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 11 SDA))
(model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_1x04_Pitch2.54mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm (layer F.Cu) (tedit 59650532) (tstamp 5D755110)
(at 128.27 75.946 270)
(descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x04 2.54mm single row")
(path /5D7651C5)
(fp_text reference J3 (at 0 -2.33 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value L298 (at 0 9.95 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 -1.27) (end 1.27 8.89) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 8.89) (end -1.27 8.89) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 8.89) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end 1.33 1.27) (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 9.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 9.4) (end 1.8 9.4) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 9.4) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 3.81) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 12 "Net-(J3-Pad1)"))
(pad 2 thru_hole oval (at 0 2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 13 "Net-(J3-Pad2)"))
(pad 3 thru_hole oval (at 0 5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 1 +5V))
(pad 4 thru_hole oval (at 0 7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 2 GND))
(model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_1x04_Pitch2.54mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Resistors_SMD:R_0603 (layer F.Cu) (tedit 58E0A804) (tstamp 5D755121)
(at 122.936 85.852)
(descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)")
(tags "resistor 0603")
(path /5D758534)
(attr smd)
(fp_text reference R1 (at 0 -1.45) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value 10k (at 0 1.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.25 0.7) (end -1.25 0.7) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.25 0.7) (end 1.25 -0.7) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -0.7) (end -1.25 0.7) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -0.7) (end 1.25 -0.7) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 -0.68) (end 0.5 -0.68) (layer F.SilkS) (width 0.12))
(fp_line (start 0.5 0.68) (end -0.5 0.68) (layer F.SilkS) (width 0.12))
(fp_line (start -0.8 -0.4) (end 0.8 -0.4) (layer F.Fab) (width 0.1))
(fp_line (start 0.8 -0.4) (end 0.8 0.4) (layer F.Fab) (width 0.1))
(fp_line (start 0.8 0.4) (end -0.8 0.4) (layer F.Fab) (width 0.1))
(fp_line (start -0.8 0.4) (end -0.8 -0.4) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.4 0.4) (thickness 0.075)))
)
(pad 2 smd rect (at 0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
(net 6 RST))
(pad 1 smd rect (at -0.75 0) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(model ${KISYS3DMOD}/Resistors_SMD.3dshapes/R_0603.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D755136)
(at 118.618 106.68)
(path /5D759C24)
(attr smd)
(fp_text reference SW1 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(pad 1 smd rect (at -3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 14 "Net-(SW1-Pad1)"))
(pad 3 smd rect (at 3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D75514B)
(at 132.08 106.68)
(path /5D759CB0)
(attr smd)
(fp_text reference SW2 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(pad 4 smd rect (at 3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 3 smd rect (at 3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 15 "Net-(SW2-Pad1)"))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D755160)
(at 144.78 106.68)
(path /5D759CF0)
(attr smd)
(fp_text reference SW3 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(pad 1 smd rect (at -3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 16 "Net-(SW3-Pad1)"))
(pad 3 smd rect (at 3 -1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 3 1.85) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Crystals:Crystal_HC49-U_Vertical (layer F.Cu) (tedit 58CD2E9C) (tstamp 5D755177)
(at 108.966 94.996 90)
(descr "Crystal THT HC-49/U http://5hertz.com/pdfs/04404_D.pdf")
(tags "THT crystalHC-49/U")
(path /5D756FAB)
(fp_text reference XTAL1 (at 2.44 -3.525 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value "16 Mhz" (at 2.44 3.525 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_arc (start 5.565 0) (end 5.565 -2.525) (angle 180) (layer F.SilkS) (width 0.12))
(fp_arc (start -0.685 0) (end -0.685 -2.525) (angle -180) (layer F.SilkS) (width 0.12))
(fp_arc (start 5.44 0) (end 5.44 -2) (angle 180) (layer F.Fab) (width 0.1))
(fp_arc (start -0.56 0) (end -0.56 -2) (angle -180) (layer F.Fab) (width 0.1))
(fp_arc (start 5.565 0) (end 5.565 -2.325) (angle 180) (layer F.Fab) (width 0.1))
(fp_arc (start -0.685 0) (end -0.685 -2.325) (angle -180) (layer F.Fab) (width 0.1))
(fp_line (start 8.4 -2.8) (end -3.5 -2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 8.4 2.8) (end 8.4 -2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.5 2.8) (end 8.4 2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.5 -2.8) (end -3.5 2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.685 2.525) (end 5.565 2.525) (layer F.SilkS) (width 0.12))
(fp_line (start -0.685 -2.525) (end 5.565 -2.525) (layer F.SilkS) (width 0.12))
(fp_line (start -0.56 2) (end 5.44 2) (layer F.Fab) (width 0.1))
(fp_line (start -0.56 -2) (end 5.44 -2) (layer F.Fab) (width 0.1))
(fp_line (start -0.685 2.325) (end 5.565 2.325) (layer F.Fab) (width 0.1))
(fp_line (start -0.685 -2.325) (end 5.565 -2.325) (layer F.Fab) (width 0.1))
(fp_text user %R (at 2.44 0 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 thru_hole circle (at 4.88 0 90) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask)
(net 4 "Net-(C4-Pad1)"))
(pad 1 thru_hole circle (at 0 0 90) (size 1.5 1.5) (drill 0.8) (layers *.Cu *.Mask)
(net 5 "Net-(C5-Pad1)"))
(model ${KISYS3DMOD}/Crystals.3dshapes/Crystal_HC49-U_Vertical.wrl
(at (xyz 0 0 0))
(scale (xyz 0.393701 0.393701 0.393701))
(rotate (xyz 0 0 0))
)
)
(module Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm (layer F.Cu) (tedit 58CC9A48) (tstamp 5D7558F7)
(at 124.206 92.456)
(descr "32-Lead Plastic Thin Quad Flatpack (PT) - 7x7x1.0 mm Body, 2.00 mm [TQFP] (see Microchip Packaging Specification 00000049BS.pdf)")
(tags "QFP 0.8")
(path /5D753A97)
(attr smd)
(fp_text reference U1 (at 0 -6.05) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value ATmega328-AU (at 0 6.05) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -3.625 -3.4) (end -5.05 -3.4) (layer F.SilkS) (width 0.15))
(fp_line (start 3.625 -3.625) (end 3.3 -3.625) (layer F.SilkS) (width 0.15))
(fp_line (start 3.625 3.625) (end 3.3 3.625) (layer F.SilkS) (width 0.15))
(fp_line (start -3.625 3.625) (end -3.3 3.625) (layer F.SilkS) (width 0.15))
(fp_line (start -3.625 -3.625) (end -3.3 -3.625) (layer F.SilkS) (width 0.15))
(fp_line (start -3.625 3.625) (end -3.625 3.3) (layer F.SilkS) (width 0.15))
(fp_line (start 3.625 3.625) (end 3.625 3.3) (layer F.SilkS) (width 0.15))
(fp_line (start 3.625 -3.625) (end 3.625 -3.3) (layer F.SilkS) (width 0.15))
(fp_line (start -3.625 -3.625) (end -3.625 -3.4) (layer F.SilkS) (width 0.15))
(fp_line (start -5.3 5.3) (end 5.3 5.3) (layer F.CrtYd) (width 0.05))
(fp_line (start -5.3 -5.3) (end 5.3 -5.3) (layer F.CrtYd) (width 0.05))
(fp_line (start 5.3 -5.3) (end 5.3 5.3) (layer F.CrtYd) (width 0.05))
(fp_line (start -5.3 -5.3) (end -5.3 5.3) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.5 -2.5) (end -2.5 -3.5) (layer F.Fab) (width 0.15))
(fp_line (start -3.5 3.5) (end -3.5 -2.5) (layer F.Fab) (width 0.15))
(fp_line (start 3.5 3.5) (end -3.5 3.5) (layer F.Fab) (width 0.15))
(fp_line (start 3.5 -3.5) (end 3.5 3.5) (layer F.Fab) (width 0.15))
(fp_line (start -2.5 -3.5) (end 3.5 -3.5) (layer F.Fab) (width 0.15))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 32 smd rect (at -2.8 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 31 smd rect (at -2 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 13 "Net-(J3-Pad2)"))
(pad 30 smd rect (at -1.2 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 12 "Net-(J3-Pad1)"))
(pad 29 smd rect (at -0.4 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 6 RST))
(pad 28 smd rect (at 0.4 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 10 SCL))
(pad 27 smd rect (at 1.2 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 11 SDA))
(pad 26 smd rect (at 2 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 25 smd rect (at 2.8 -4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 24 smd rect (at 4.25 -2.8) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 23 smd rect (at 4.25 -2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 22 smd rect (at 4.25 -1.2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 21 smd rect (at 4.25 -0.4) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 20 smd rect (at 4.25 0.4) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(C3-Pad2)"))
(pad 19 smd rect (at 4.25 1.2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 4.25 2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(pad 17 smd rect (at 4.25 2.8) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 8 SCK))
(pad 16 smd rect (at 2.8 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 9 MISO))
(pad 15 smd rect (at 2 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 7 MOSI))
(pad 14 smd rect (at 1.2 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 16 "Net-(SW3-Pad1)"))
(pad 13 smd rect (at 0.4 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 15 "Net-(SW2-Pad1)"))
(pad 12 smd rect (at -0.4 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 14 "Net-(SW1-Pad1)"))
(pad 11 smd rect (at -1.2 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at -2 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at -2.8 4.25 90) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at -4.25 2.8) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 5 "Net-(C5-Pad1)"))
(pad 7 smd rect (at -4.25 2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 4 "Net-(C4-Pad1)"))
(pad 6 smd rect (at -4.25 1.2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(pad 5 smd rect (at -4.25 0.4) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at -4.25 -0.4) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
(pad 3 smd rect (at -4.25 -1.2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 2 smd rect (at -4.25 -2) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -4.25 -2.8) (size 1.6 0.55) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Housings_QFP.3dshapes/TQFP-32_7x7mm_Pitch0.8mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
)

View File

@ -1,33 +0,0 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]

View File

@ -0,0 +1,91 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Conn_01x07_Female
#
DEF Connector_Conn_01x07_Female J 0 40 Y N 1 F N
F0 "J" 0 400 50 H V C CNN
F1 "Connector_Conn_01x07_Female" 0 -400 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320
A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220
A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120
A 0 0 20 901 -901 1 1 6 N 0 20 0 -20
A 0 100 20 901 -901 1 1 6 N 0 120 0 80
A 0 200 20 901 -901 1 1 6 N 0 220 0 180
A 0 300 20 901 -901 1 1 6 N 0 320 0 280
P 2 1 1 6 -50 -300 -20 -300 N
P 2 1 1 6 -50 -200 -20 -200 N
P 2 1 1 6 -50 -100 -20 -100 N
P 2 1 1 6 -50 0 -20 0 N
P 2 1 1 6 -50 100 -20 100 N
P 2 1 1 6 -50 200 -20 200 N
P 2 1 1 6 -50 300 -20 300 N
X Pin_1 1 -200 300 150 R 50 50 1 1 P
X Pin_2 2 -200 200 150 R 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 -200 0 150 R 50 50 1 1 P
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
X Pin_6 6 -200 -200 150 R 50 50 1 1 P
X Pin_7 7 -200 -300 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x05_Counter_Clockwise
#
DEF Connector_Generic_Conn_02x05_Counter_Clockwise J 0 40 Y N 1 F N
F0 "J" 50 300 50 H V C CNN
F1 "Connector_Generic_Conn_02x05_Counter_Clockwise" 50 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 250 150 -250 1 1 10 f
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_10 10 300 200 150 L 50 50 1 1 P
X Pin_2 2 -200 100 150 R 50 50 1 1 P
X Pin_3 3 -200 0 150 R 50 50 1 1 P
X Pin_4 4 -200 -100 150 R 50 50 1 1 P
X Pin_5 5 -200 -200 150 R 50 50 1 1 P
X Pin_6 6 300 -200 150 L 50 50 1 1 P
X Pin_7 7 300 -100 150 L 50 50 1 1 P
X Pin_8 8 300 0 150 L 50 50 1 1 P
X Pin_9 9 300 100 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Switch_SW_Push
#
DEF Switch_SW_Push SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "Switch_SW_Push" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
#End Library

View File

@ -0,0 +1,735 @@
(kicad_pcb (version 20171130) (host pcbnew "(5.1.5)-3")
(general
(thickness 1.6)
(drawings 4)
(tracks 33)
(zones 0)
(modules 9)
(nets 11)
)
(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)
)
(setup
(last_trace_width 0.25)
(user_trace_width 0.5)
(trace_clearance 0.2)
(zone_clearance 0.508)
(zone_45_only yes)
(trace_min 0)
(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.15)
(segment_width 0.2)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.15)
(mod_text_size 1 1)
(mod_text_width 0.15)
(pad_size 6 6)
(pad_drill 3)
(pad_to_mask_clearance 0.051)
(solder_mask_min_width 0.25)
(aux_axis_origin 0 0)
(visible_elements 7FFFFFFF)
(pcbplotparams
(layerselection 0x010f0_ffffffff)
(usegerberextensions false)
(usegerberattributes false)
(usegerberadvancedattributes false)
(creategerberjobfile false)
(excludeedgelayer true)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 0)
(scaleselection 1)
(outputdirectory "../plot/"))
)
(net 0 "")
(net 1 "Net-(J6-Pad1)")
(net 2 "Net-(J6-Pad2)")
(net 3 "Net-(J6-Pad3)")
(net 4 DM_LCD-BL)
(net 5 DM_LCD-DC)
(net 6 DM_LCD-RST)
(net 7 DM_MOSI)
(net 8 DM_GND)
(net 9 DM_3v3)
(net 10 DM_SCK)
(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 DM_3v3)
(add_net DM_GND)
(add_net DM_LCD-BL)
(add_net DM_LCD-DC)
(add_net DM_LCD-RST)
(add_net DM_MOSI)
(add_net DM_SCK)
(add_net "Net-(J6-Pad1)")
(add_net "Net-(J6-Pad2)")
(add_net "Net-(J6-Pad3)")
)
(module Mounting_Holes:MountingHole_3mm_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5E3023ED)
(at 30.226 46.736)
(descr "Mounting Hole 3mm")
(tags "mounting hole 3mm")
(attr virtual)
(fp_text reference REF** (at 0 -4) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value - (at 0 4) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 3 0) (layer Cmts.User) (width 0.15))
(fp_circle (center 0 0) (end 3.25 0) (layer F.CrtYd) (width 0.05))
(pad 1 thru_hole circle (at 0 0) (size 6 6) (drill 3) (layers *.Cu *.Mask))
)
(module Mounting_Holes:MountingHole_3mm_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5E3023DF)
(at 30.226 34.544)
(descr "Mounting Hole 3mm")
(tags "mounting hole 3mm")
(attr virtual)
(fp_text reference REF** (at 0 -4) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value - (at 0.254 4) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 3.25 0) (layer F.CrtYd) (width 0.05))
(fp_circle (center 0 0) (end 3 0) (layer Cmts.User) (width 0.15))
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole circle (at 0 0) (size 6 6) (drill 3) (layers *.Cu *.Mask))
)
(module Mounting_Holes:MountingHole_3mm_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5E3022E1)
(at 45.212 46.736)
(descr "Mounting Hole 3mm")
(tags "mounting hole 3mm")
(attr virtual)
(fp_text reference REF** (at 0 -4) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value - (at 0 4) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 3.25 0) (layer F.CrtYd) (width 0.05))
(fp_circle (center 0 0) (end 3 0) (layer Cmts.User) (width 0.15))
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole circle (at 0 0) (size 6 6) (drill 3) (layers *.Cu *.Mask))
)
(module Mounting_Holes:MountingHole_3mm_Pad (layer F.Cu) (tedit 56D1B4CB) (tstamp 5E3022DA)
(at 45.212 34.544)
(descr "Mounting Hole 3mm")
(tags "mounting hole 3mm")
(attr virtual)
(fp_text reference REF** (at 0 -4) (layer F.SilkS) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value - (at 0 4) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 3 0) (layer Cmts.User) (width 0.15))
(fp_circle (center 0 0) (end 3.25 0) (layer F.CrtYd) (width 0.05))
(pad 1 thru_hole circle (at 0 0) (size 6 6) (drill 3) (layers *.Cu *.Mask))
)
(module Pin_Headers:Pin_Header_Straight_1x07_Pitch2.54mm (layer F.Cu) (tedit 59650532) (tstamp 5E300FEC)
(at 55.372 23.114 90)
(descr "Through hole straight pin header, 1x07, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x07 2.54mm single row")
(path /5E37279C)
(fp_text reference J7 (at 0 -2.33 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value ST7789 (at 0 17.57 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 -1.27) (end 1.27 16.51) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 16.51) (end -1.27 16.51) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 16.51) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start -1.33 16.57) (end 1.33 16.57) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 16.57) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 16.57) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end 1.33 1.27) (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 17.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.8 17.05) (end 1.8 17.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 17.05) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 7.62) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 8 DM_GND))
(pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 9 DM_3v3))
(pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 10 DM_SCK))
(pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 7 DM_MOSI))
(pad 5 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 6 DM_LCD-RST))
(pad 6 thru_hole oval (at 0 12.7 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 5 DM_LCD-DC))
(pad 7 thru_hole oval (at 0 15.24 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 4 DM_LCD-BL))
(model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_1x07_Pitch2.54mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm (layer B.Cu) (tedit 59650532) (tstamp 5E300FE9)
(at 55.372 54.61)
(descr "Through hole straight pin header, 2x05, 2.54mm pitch, double rows")
(tags "Through hole pin header THT 2x05 2.54mm double row")
(path /5E3531D6)
(fp_text reference J6 (at 1.27 2.33) (layer B.SilkS)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_text value DM-Slave (at 1.27 -12.49) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_line (start 0 1.27) (end 3.81 1.27) (layer B.Fab) (width 0.1))
(fp_line (start 3.81 1.27) (end 3.81 -11.43) (layer B.Fab) (width 0.1))
(fp_line (start 3.81 -11.43) (end -1.27 -11.43) (layer B.Fab) (width 0.1))
(fp_line (start -1.27 -11.43) (end -1.27 0) (layer B.Fab) (width 0.1))
(fp_line (start -1.27 0) (end 0 1.27) (layer B.Fab) (width 0.1))
(fp_line (start -1.33 -11.49) (end 3.87 -11.49) (layer B.SilkS) (width 0.12))
(fp_line (start -1.33 -1.27) (end -1.33 -11.49) (layer B.SilkS) (width 0.12))
(fp_line (start 3.87 1.33) (end 3.87 -11.49) (layer B.SilkS) (width 0.12))
(fp_line (start -1.33 -1.27) (end 1.27 -1.27) (layer B.SilkS) (width 0.12))
(fp_line (start 1.27 -1.27) (end 1.27 1.33) (layer B.SilkS) (width 0.12))
(fp_line (start 1.27 1.33) (end 3.87 1.33) (layer B.SilkS) (width 0.12))
(fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12))
(fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12))
(fp_line (start -1.8 1.8) (end -1.8 -11.95) (layer B.CrtYd) (width 0.05))
(fp_line (start -1.8 -11.95) (end 4.35 -11.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 4.35 -11.95) (end 4.35 1.8) (layer B.CrtYd) (width 0.05))
(fp_line (start 4.35 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 1.27 -5.08 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 1 "Net-(J6-Pad1)"))
(pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 2 "Net-(J6-Pad2)"))
(pad 3 thru_hole oval (at 0 -2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 3 "Net-(J6-Pad3)"))
(pad 4 thru_hole oval (at 2.54 -2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 4 DM_LCD-BL))
(pad 5 thru_hole oval (at 0 -5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 5 DM_LCD-DC))
(pad 6 thru_hole oval (at 2.54 -5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 6 DM_LCD-RST))
(pad 7 thru_hole oval (at 0 -7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 7 DM_MOSI))
(pad 8 thru_hole oval (at 2.54 -7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 10 DM_SCK))
(pad 9 thru_hole oval (at 0 -10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 9 DM_3v3))
(pad 10 thru_hole oval (at 2.54 -10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
(net 8 DM_GND))
(model ${KISYS3DMOD}/Pin_Headers.3dshapes/Pin_Header_Straight_2x05_Pitch2.54mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D755136)
(at 37.592 52.324 180)
(path /5D759C24)
(attr smd)
(fp_text reference SW1 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Down (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(pad 4 smd rect (at 3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 8 DM_GND))
(pad 3 smd rect (at 3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 1 "Net-(J6-Pad1)"))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D75514B)
(at 37.592 40.513 180)
(path /5D759CB0)
(attr smd)
(fp_text reference SW2 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Menu (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(pad 1 smd rect (at -3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 2 "Net-(J6-Pad2)"))
(pad 3 smd rect (at 3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 8 DM_GND))
(pad 4 smd rect (at 3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM (layer F.Cu) (tedit 5C236DB7) (tstamp 5D755160)
(at 37.592 28.321 180)
(path /5D759CF0)
(attr smd)
(fp_text reference SW3 (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Up (at -0.112861 -0.218191) (layer F.SilkS) hide
(effects (font (size 0.501589 0.501589) (thickness 0.05)))
)
(fp_line (start -1.5 2.6) (end -2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.45982 2.6) (end -1.5 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end 2.4 1.7) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 -2.6) (end 2.4 -1.7) (layer F.SilkS) (width 0.127))
(fp_line (start -1.4 -2.6) (end -2.4 -1.6) (layer F.SilkS) (width 0.127))
(fp_poly (pts (xy -2.50464 -2.6) (xy 2.6 -2.6) (xy 2.6 2.60484) (xy -2.50464 2.60484)) (layer Eco1.User) (width 0))
(fp_line (start 1.43381 -2.6) (end 2.6 -1.43381) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.4 -2.6) (end 1.5 -2.6) (layer F.SilkS) (width 0.127))
(fp_line (start -2.6 -1.39584) (end -1.39584 -2.6) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.45982 2.6) (end -2.6 1.45982) (layer Dwgs.User) (width 0.127))
(fp_line (start -1.1 2.6) (end -1.45982 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 1.5 2.6) (end -1.1 2.6) (layer F.SilkS) (width 0.127))
(fp_line (start 2.6 1.46863) (end 1.46863 2.6) (layer Dwgs.User) (width 0.127))
(pad 4 smd rect (at 3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -3 1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 8 DM_GND))
(pad 3 smd rect (at 3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -3 -1.85 180) (size 1 0.7) (layers F.Cu F.Paste F.Mask)
(net 3 "Net-(J6-Pad3)"))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_TL3342.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(gr_line (start 24.384 61.082) (end 24.384 21.082) (layer Edge.Cuts) (width 0.15))
(gr_line (start 74.384 61.082) (end 24.384 61.082) (layer Edge.Cuts) (width 0.15))
(gr_line (start 74.384 21.082) (end 74.384 61.082) (layer Edge.Cuts) (width 0.15))
(gr_line (start 24.384 21.082) (end 74.384 21.082) (layer Edge.Cuts) (width 0.15))
(segment (start 54.936 54.174) (end 55.372 54.61) (width 0.25) (layer F.Cu) (net 1))
(segment (start 40.592 54.174) (end 54.936 54.174) (width 0.25) (layer F.Cu) (net 1))
(segment (start 51.054 49.491002) (end 51.054 47.11841) (width 0.25) (layer F.Cu) (net 2))
(segment (start 57.912 54.61) (end 56.736999 53.434999) (width 0.25) (layer F.Cu) (net 2))
(segment (start 54.997997 53.434999) (end 51.054 49.491002) (width 0.25) (layer F.Cu) (net 2))
(segment (start 56.736999 53.434999) (end 54.997997 53.434999) (width 0.25) (layer F.Cu) (net 2))
(segment (start 46.42559 42.49) (end 40.592 42.49) (width 0.25) (layer F.Cu) (net 2))
(segment (start 51.054 47.11841) (end 46.42559 42.49) (width 0.25) (layer F.Cu) (net 2))
(segment (start 51.562 46.99) (end 51.562 48.26) (width 0.25) (layer F.Cu) (net 3))
(segment (start 51.562 48.26) (end 55.372 52.07) (width 0.25) (layer F.Cu) (net 3))
(segment (start 40.592 30.171) (end 40.592 36.02) (width 0.25) (layer F.Cu) (net 3))
(segment (start 40.592 36.02) (end 51.562 46.99) (width 0.25) (layer F.Cu) (net 3))
(segment (start 70.612 39.37) (end 70.612 23.114) (width 0.25) (layer F.Cu) (net 4))
(segment (start 57.912 52.07) (end 70.612 39.37) (width 0.25) (layer F.Cu) (net 4))
(segment (start 68.072 24.316081) (end 68.072 23.114) (width 0.25) (layer B.Cu) (net 5))
(segment (start 68.072 38.569002) (end 68.072 24.316081) (width 0.25) (layer B.Cu) (net 5))
(segment (start 56.736999 48.165001) (end 58.476001 48.165001) (width 0.25) (layer B.Cu) (net 5))
(segment (start 58.476001 48.165001) (end 68.072 38.569002) (width 0.25) (layer B.Cu) (net 5))
(segment (start 55.372 49.53) (end 56.736999 48.165001) (width 0.25) (layer B.Cu) (net 5))
(segment (start 65.532 41.91) (end 65.532 23.114) (width 0.25) (layer F.Cu) (net 6))
(segment (start 57.912 49.53) (end 65.532 41.91) (width 0.25) (layer F.Cu) (net 6))
(segment (start 62.992 24.316081) (end 62.992 23.114) (width 0.25) (layer B.Cu) (net 7))
(segment (start 58.286003 45.814999) (end 62.992 41.109002) (width 0.25) (layer B.Cu) (net 7))
(segment (start 56.547001 45.814999) (end 58.286003 45.814999) (width 0.25) (layer B.Cu) (net 7))
(segment (start 62.992 41.109002) (end 62.992 24.316081) (width 0.25) (layer B.Cu) (net 7))
(segment (start 55.372 46.99) (end 56.547001 45.814999) (width 0.25) (layer B.Cu) (net 7))
(via (at 37.719 24.638) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8))
(via (at 37.719 36.576) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8))
(via (at 37.719 48.514) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 8))
(segment (start 55.372 25.654) (end 57.912 23.114) (width 0.25) (layer F.Cu) (net 9))
(segment (start 55.372 44.45) (end 55.372 25.654) (width 0.25) (layer F.Cu) (net 9))
(segment (start 60.452 44.45) (end 60.452 23.114) (width 0.25) (layer F.Cu) (net 10))
(segment (start 57.912 46.99) (end 60.452 44.45) (width 0.25) (layer F.Cu) (net 10))
(zone (net 8) (net_name DM_GND) (layer F.Cu) (tstamp 5E302F70) (hatch edge 0.508)
(connect_pads (clearance 0.508))
(min_thickness 0.254)
(fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508))
(polygon
(pts
(xy 74.295 61.087) (xy 24.384 61.087) (xy 24.384 21.082) (xy 74.295 21.082)
)
)
(filled_polygon
(pts
(xy 54.070815 21.812815) (xy 53.991463 21.909506) (xy 53.932498 22.01982) (xy 53.896188 22.139518) (xy 53.883928 22.264)
(xy 53.887 22.82825) (xy 54.04575 22.987) (xy 55.245 22.987) (xy 55.245 22.967) (xy 55.499 22.967)
(xy 55.499 22.987) (xy 55.519 22.987) (xy 55.519 23.241) (xy 55.499 23.241) (xy 55.499 23.261)
(xy 55.245 23.261) (xy 55.245 23.241) (xy 54.04575 23.241) (xy 53.887 23.39975) (xy 53.883928 23.964)
(xy 53.896188 24.088482) (xy 53.932498 24.20818) (xy 53.991463 24.318494) (xy 54.070815 24.415185) (xy 54.167506 24.494537)
(xy 54.27782 24.553502) (xy 54.397518 24.589812) (xy 54.522 24.602072) (xy 55.08625 24.599) (xy 55.244998 24.440252)
(xy 55.244998 24.599) (xy 55.352198 24.599) (xy 54.860998 25.090201) (xy 54.832 25.113999) (xy 54.808202 25.142997)
(xy 54.808201 25.142998) (xy 54.737026 25.229724) (xy 54.666454 25.361754) (xy 54.622998 25.505015) (xy 54.608324 25.654)
(xy 54.612001 25.691333) (xy 54.612 43.171821) (xy 54.425368 43.296525) (xy 54.218525 43.503368) (xy 54.05601 43.746589)
(xy 53.944068 44.016842) (xy 53.887 44.30374) (xy 53.887 44.59626) (xy 53.944068 44.883158) (xy 54.05601 45.153411)
(xy 54.218525 45.396632) (xy 54.425368 45.603475) (xy 54.59976 45.72) (xy 54.425368 45.836525) (xy 54.218525 46.043368)
(xy 54.05601 46.286589) (xy 53.944068 46.556842) (xy 53.887 46.84374) (xy 53.887 47.13626) (xy 53.944068 47.423158)
(xy 54.05601 47.693411) (xy 54.218525 47.936632) (xy 54.425368 48.143475) (xy 54.59976 48.26) (xy 54.425368 48.376525)
(xy 54.218525 48.583368) (xy 54.05601 48.826589) (xy 53.944068 49.096842) (xy 53.887 49.38374) (xy 53.887 49.510199)
(xy 52.322 47.945199) (xy 52.322 47.027325) (xy 52.325676 46.99) (xy 52.322 46.952675) (xy 52.322 46.952667)
(xy 52.311003 46.841014) (xy 52.267546 46.697753) (xy 52.196974 46.565724) (xy 52.102001 46.449999) (xy 52.073004 46.426202)
(xy 43.254857 37.608056) (xy 43.490182 37.765295) (xy 44.15171 38.039309) (xy 44.853984 38.179) (xy 45.570016 38.179)
(xy 46.27229 38.039309) (xy 46.933818 37.765295) (xy 47.529177 37.367489) (xy 48.035489 36.861177) (xy 48.433295 36.265818)
(xy 48.707309 35.60429) (xy 48.847 34.902016) (xy 48.847 34.185984) (xy 48.707309 33.48371) (xy 48.433295 32.822182)
(xy 48.035489 32.226823) (xy 47.529177 31.720511) (xy 46.933818 31.322705) (xy 46.27229 31.048691) (xy 45.570016 30.909)
(xy 44.853984 30.909) (xy 44.15171 31.048691) (xy 43.490182 31.322705) (xy 42.894823 31.720511) (xy 42.388511 32.226823)
(xy 41.990705 32.822182) (xy 41.716691 33.48371) (xy 41.577 34.185984) (xy 41.577 34.902016) (xy 41.716691 35.60429)
(xy 41.990705 36.265818) (xy 42.147944 36.501143) (xy 41.352 35.705199) (xy 41.352 31.102046) (xy 41.446494 31.051537)
(xy 41.543185 30.972185) (xy 41.622537 30.875494) (xy 41.681502 30.76518) (xy 41.717812 30.645482) (xy 41.730072 30.521)
(xy 41.730072 29.821) (xy 41.717812 29.696518) (xy 41.681502 29.57682) (xy 41.622537 29.466506) (xy 41.543185 29.369815)
(xy 41.446494 29.290463) (xy 41.33618 29.231498) (xy 41.216482 29.195188) (xy 41.092 29.182928) (xy 40.092 29.182928)
(xy 39.967518 29.195188) (xy 39.84782 29.231498) (xy 39.737506 29.290463) (xy 39.640815 29.369815) (xy 39.561463 29.466506)
(xy 39.502498 29.57682) (xy 39.466188 29.696518) (xy 39.453928 29.821) (xy 39.453928 30.521) (xy 39.466188 30.645482)
(xy 39.502498 30.76518) (xy 39.561463 30.875494) (xy 39.640815 30.972185) (xy 39.737506 31.051537) (xy 39.832 31.102046)
(xy 39.832001 35.982668) (xy 39.828324 36.02) (xy 39.842998 36.168985) (xy 39.886454 36.312246) (xy 39.957026 36.444276)
(xy 40.028201 36.531002) (xy 40.052 36.560001) (xy 40.080998 36.583799) (xy 41.180881 37.683682) (xy 41.092 37.674928)
(xy 40.87775 37.678) (xy 40.719 37.83675) (xy 40.719 38.536) (xy 41.56825 38.536) (xy 41.727 38.37725)
(xy 41.730072 38.313) (xy 41.721318 38.224119) (xy 45.227199 41.73) (xy 41.660752 41.73) (xy 41.622537 41.658506)
(xy 41.543185 41.561815) (xy 41.446494 41.482463) (xy 41.33618 41.423498) (xy 41.216482 41.387188) (xy 41.092 41.374928)
(xy 40.092 41.374928) (xy 39.967518 41.387188) (xy 39.84782 41.423498) (xy 39.737506 41.482463) (xy 39.640815 41.561815)
(xy 39.561463 41.658506) (xy 39.502498 41.76882) (xy 39.466188 41.888518) (xy 39.453928 42.013) (xy 39.453928 42.713)
(xy 39.466188 42.837482) (xy 39.502498 42.95718) (xy 39.561463 43.067494) (xy 39.640815 43.164185) (xy 39.737506 43.243537)
(xy 39.84782 43.302502) (xy 39.967518 43.338812) (xy 40.092 43.351072) (xy 41.092 43.351072) (xy 41.216482 43.338812)
(xy 41.33618 43.302502) (xy 41.434403 43.25) (xy 44.129236 43.25) (xy 43.490182 43.514705) (xy 42.894823 43.912511)
(xy 42.388511 44.418823) (xy 41.990705 45.014182) (xy 41.716691 45.67571) (xy 41.577 46.377984) (xy 41.577 47.094016)
(xy 41.716691 47.79629) (xy 41.990705 48.457818) (xy 42.388511 49.053177) (xy 42.894823 49.559489) (xy 43.490182 49.957295)
(xy 44.15171 50.231309) (xy 44.853984 50.371) (xy 45.570016 50.371) (xy 46.27229 50.231309) (xy 46.933818 49.957295)
(xy 47.529177 49.559489) (xy 48.035489 49.053177) (xy 48.433295 48.457818) (xy 48.707309 47.79629) (xy 48.847 47.094016)
(xy 48.847 46.377984) (xy 48.749722 45.888933) (xy 50.294001 47.433213) (xy 50.294 49.453679) (xy 50.290324 49.491002)
(xy 50.294 49.528324) (xy 50.294 49.528334) (xy 50.304997 49.639987) (xy 50.348454 49.783248) (xy 50.419026 49.915278)
(xy 50.451031 49.954276) (xy 50.513999 50.031003) (xy 50.543003 50.054806) (xy 53.902196 53.414) (xy 41.576985 53.414)
(xy 41.543185 53.372815) (xy 41.446494 53.293463) (xy 41.33618 53.234498) (xy 41.216482 53.198188) (xy 41.092 53.185928)
(xy 40.092 53.185928) (xy 39.967518 53.198188) (xy 39.84782 53.234498) (xy 39.737506 53.293463) (xy 39.640815 53.372815)
(xy 39.561463 53.469506) (xy 39.502498 53.57982) (xy 39.466188 53.699518) (xy 39.453928 53.824) (xy 39.453928 54.524)
(xy 39.466188 54.648482) (xy 39.502498 54.76818) (xy 39.561463 54.878494) (xy 39.640815 54.975185) (xy 39.737506 55.054537)
(xy 39.84782 55.113502) (xy 39.967518 55.149812) (xy 40.092 55.162072) (xy 41.092 55.162072) (xy 41.216482 55.149812)
(xy 41.33618 55.113502) (xy 41.446494 55.054537) (xy 41.543185 54.975185) (xy 41.576985 54.934) (xy 53.883928 54.934)
(xy 53.883928 55.46) (xy 53.896188 55.584482) (xy 53.932498 55.70418) (xy 53.991463 55.814494) (xy 54.070815 55.911185)
(xy 54.167506 55.990537) (xy 54.27782 56.049502) (xy 54.397518 56.085812) (xy 54.522 56.098072) (xy 56.222 56.098072)
(xy 56.346482 56.085812) (xy 56.46618 56.049502) (xy 56.576494 55.990537) (xy 56.673185 55.911185) (xy 56.752537 55.814494)
(xy 56.811502 55.70418) (xy 56.833513 55.63162) (xy 56.965368 55.763475) (xy 57.208589 55.92599) (xy 57.478842 56.037932)
(xy 57.76574 56.095) (xy 58.05826 56.095) (xy 58.345158 56.037932) (xy 58.615411 55.92599) (xy 58.858632 55.763475)
(xy 59.065475 55.556632) (xy 59.22799 55.313411) (xy 59.339932 55.043158) (xy 59.397 54.75626) (xy 59.397 54.46374)
(xy 59.339932 54.176842) (xy 59.22799 53.906589) (xy 59.065475 53.663368) (xy 58.858632 53.456525) (xy 58.68424 53.34)
(xy 58.858632 53.223475) (xy 59.065475 53.016632) (xy 59.22799 52.773411) (xy 59.339932 52.503158) (xy 59.397 52.21626)
(xy 59.397 51.92374) (xy 59.353209 51.703592) (xy 71.123004 39.933798) (xy 71.152001 39.910001) (xy 71.246974 39.794276)
(xy 71.317546 39.662247) (xy 71.361003 39.518986) (xy 71.372 39.407333) (xy 71.372 39.407324) (xy 71.375676 39.370001)
(xy 71.372 39.332678) (xy 71.372 24.392178) (xy 71.558632 24.267475) (xy 71.765475 24.060632) (xy 71.92799 23.817411)
(xy 72.039932 23.547158) (xy 72.097 23.26026) (xy 72.097 22.96774) (xy 72.039932 22.680842) (xy 71.92799 22.410589)
(xy 71.765475 22.167368) (xy 71.558632 21.960525) (xy 71.315411 21.79801) (xy 71.300902 21.792) (xy 73.674 21.792)
(xy 73.674001 60.372) (xy 25.094 60.372) (xy 25.094 53.824) (xy 33.453928 53.824) (xy 33.453928 54.524)
(xy 33.466188 54.648482) (xy 33.502498 54.76818) (xy 33.561463 54.878494) (xy 33.640815 54.975185) (xy 33.737506 55.054537)
(xy 33.84782 55.113502) (xy 33.967518 55.149812) (xy 34.092 55.162072) (xy 35.092 55.162072) (xy 35.216482 55.149812)
(xy 35.33618 55.113502) (xy 35.446494 55.054537) (xy 35.543185 54.975185) (xy 35.622537 54.878494) (xy 35.681502 54.76818)
(xy 35.717812 54.648482) (xy 35.730072 54.524) (xy 35.730072 53.824) (xy 35.717812 53.699518) (xy 35.681502 53.57982)
(xy 35.622537 53.469506) (xy 35.543185 53.372815) (xy 35.446494 53.293463) (xy 35.33618 53.234498) (xy 35.216482 53.198188)
(xy 35.092 53.185928) (xy 34.092 53.185928) (xy 33.967518 53.198188) (xy 33.84782 53.234498) (xy 33.737506 53.293463)
(xy 33.640815 53.372815) (xy 33.561463 53.469506) (xy 33.502498 53.57982) (xy 33.466188 53.699518) (xy 33.453928 53.824)
(xy 25.094 53.824) (xy 25.094 46.377984) (xy 26.591 46.377984) (xy 26.591 47.094016) (xy 26.730691 47.79629)
(xy 27.004705 48.457818) (xy 27.402511 49.053177) (xy 27.908823 49.559489) (xy 28.504182 49.957295) (xy 29.16571 50.231309)
(xy 29.867984 50.371) (xy 30.584016 50.371) (xy 31.28629 50.231309) (xy 31.545356 50.124) (xy 33.453928 50.124)
(xy 33.453928 50.824) (xy 33.466188 50.948482) (xy 33.502498 51.06818) (xy 33.561463 51.178494) (xy 33.640815 51.275185)
(xy 33.737506 51.354537) (xy 33.84782 51.413502) (xy 33.967518 51.449812) (xy 34.092 51.462072) (xy 35.092 51.462072)
(xy 35.216482 51.449812) (xy 35.33618 51.413502) (xy 35.446494 51.354537) (xy 35.543185 51.275185) (xy 35.622537 51.178494)
(xy 35.681502 51.06818) (xy 35.717812 50.948482) (xy 35.730072 50.824) (xy 39.453928 50.824) (xy 39.466188 50.948482)
(xy 39.502498 51.06818) (xy 39.561463 51.178494) (xy 39.640815 51.275185) (xy 39.737506 51.354537) (xy 39.84782 51.413502)
(xy 39.967518 51.449812) (xy 40.092 51.462072) (xy 40.30625 51.459) (xy 40.465 51.30025) (xy 40.465 50.601)
(xy 40.719 50.601) (xy 40.719 51.30025) (xy 40.87775 51.459) (xy 41.092 51.462072) (xy 41.216482 51.449812)
(xy 41.33618 51.413502) (xy 41.446494 51.354537) (xy 41.543185 51.275185) (xy 41.622537 51.178494) (xy 41.681502 51.06818)
(xy 41.717812 50.948482) (xy 41.730072 50.824) (xy 41.727 50.75975) (xy 41.56825 50.601) (xy 40.719 50.601)
(xy 40.465 50.601) (xy 39.61575 50.601) (xy 39.457 50.75975) (xy 39.453928 50.824) (xy 35.730072 50.824)
(xy 35.730072 50.124) (xy 39.453928 50.124) (xy 39.457 50.18825) (xy 39.61575 50.347) (xy 40.465 50.347)
(xy 40.465 49.64775) (xy 40.719 49.64775) (xy 40.719 50.347) (xy 41.56825 50.347) (xy 41.727 50.18825)
(xy 41.730072 50.124) (xy 41.717812 49.999518) (xy 41.681502 49.87982) (xy 41.622537 49.769506) (xy 41.543185 49.672815)
(xy 41.446494 49.593463) (xy 41.33618 49.534498) (xy 41.216482 49.498188) (xy 41.092 49.485928) (xy 40.87775 49.489)
(xy 40.719 49.64775) (xy 40.465 49.64775) (xy 40.30625 49.489) (xy 40.092 49.485928) (xy 39.967518 49.498188)
(xy 39.84782 49.534498) (xy 39.737506 49.593463) (xy 39.640815 49.672815) (xy 39.561463 49.769506) (xy 39.502498 49.87982)
(xy 39.466188 49.999518) (xy 39.453928 50.124) (xy 35.730072 50.124) (xy 35.717812 49.999518) (xy 35.681502 49.87982)
(xy 35.622537 49.769506) (xy 35.543185 49.672815) (xy 35.446494 49.593463) (xy 35.33618 49.534498) (xy 35.216482 49.498188)
(xy 35.092 49.485928) (xy 34.092 49.485928) (xy 33.967518 49.498188) (xy 33.84782 49.534498) (xy 33.737506 49.593463)
(xy 33.640815 49.672815) (xy 33.561463 49.769506) (xy 33.502498 49.87982) (xy 33.466188 49.999518) (xy 33.453928 50.124)
(xy 31.545356 50.124) (xy 31.947818 49.957295) (xy 32.543177 49.559489) (xy 33.049489 49.053177) (xy 33.447295 48.457818)
(xy 33.721309 47.79629) (xy 33.861 47.094016) (xy 33.861 46.377984) (xy 33.721309 45.67571) (xy 33.447295 45.014182)
(xy 33.049489 44.418823) (xy 32.543177 43.912511) (xy 31.947818 43.514705) (xy 31.28629 43.240691) (xy 30.584016 43.101)
(xy 29.867984 43.101) (xy 29.16571 43.240691) (xy 28.504182 43.514705) (xy 27.908823 43.912511) (xy 27.402511 44.418823)
(xy 27.004705 45.014182) (xy 26.730691 45.67571) (xy 26.591 46.377984) (xy 25.094 46.377984) (xy 25.094 42.013)
(xy 33.453928 42.013) (xy 33.453928 42.713) (xy 33.466188 42.837482) (xy 33.502498 42.95718) (xy 33.561463 43.067494)
(xy 33.640815 43.164185) (xy 33.737506 43.243537) (xy 33.84782 43.302502) (xy 33.967518 43.338812) (xy 34.092 43.351072)
(xy 35.092 43.351072) (xy 35.216482 43.338812) (xy 35.33618 43.302502) (xy 35.446494 43.243537) (xy 35.543185 43.164185)
(xy 35.622537 43.067494) (xy 35.681502 42.95718) (xy 35.717812 42.837482) (xy 35.730072 42.713) (xy 35.730072 42.013)
(xy 35.717812 41.888518) (xy 35.681502 41.76882) (xy 35.622537 41.658506) (xy 35.543185 41.561815) (xy 35.446494 41.482463)
(xy 35.33618 41.423498) (xy 35.216482 41.387188) (xy 35.092 41.374928) (xy 34.092 41.374928) (xy 33.967518 41.387188)
(xy 33.84782 41.423498) (xy 33.737506 41.482463) (xy 33.640815 41.561815) (xy 33.561463 41.658506) (xy 33.502498 41.76882)
(xy 33.466188 41.888518) (xy 33.453928 42.013) (xy 25.094 42.013) (xy 25.094 38.313) (xy 33.453928 38.313)
(xy 33.453928 39.013) (xy 33.466188 39.137482) (xy 33.502498 39.25718) (xy 33.561463 39.367494) (xy 33.640815 39.464185)
(xy 33.737506 39.543537) (xy 33.84782 39.602502) (xy 33.967518 39.638812) (xy 34.092 39.651072) (xy 35.092 39.651072)
(xy 35.216482 39.638812) (xy 35.33618 39.602502) (xy 35.446494 39.543537) (xy 35.543185 39.464185) (xy 35.622537 39.367494)
(xy 35.681502 39.25718) (xy 35.717812 39.137482) (xy 35.730072 39.013) (xy 39.453928 39.013) (xy 39.466188 39.137482)
(xy 39.502498 39.25718) (xy 39.561463 39.367494) (xy 39.640815 39.464185) (xy 39.737506 39.543537) (xy 39.84782 39.602502)
(xy 39.967518 39.638812) (xy 40.092 39.651072) (xy 40.30625 39.648) (xy 40.465 39.48925) (xy 40.465 38.79)
(xy 40.719 38.79) (xy 40.719 39.48925) (xy 40.87775 39.648) (xy 41.092 39.651072) (xy 41.216482 39.638812)
(xy 41.33618 39.602502) (xy 41.446494 39.543537) (xy 41.543185 39.464185) (xy 41.622537 39.367494) (xy 41.681502 39.25718)
(xy 41.717812 39.137482) (xy 41.730072 39.013) (xy 41.727 38.94875) (xy 41.56825 38.79) (xy 40.719 38.79)
(xy 40.465 38.79) (xy 39.61575 38.79) (xy 39.457 38.94875) (xy 39.453928 39.013) (xy 35.730072 39.013)
(xy 35.730072 38.313) (xy 39.453928 38.313) (xy 39.457 38.37725) (xy 39.61575 38.536) (xy 40.465 38.536)
(xy 40.465 37.83675) (xy 40.30625 37.678) (xy 40.092 37.674928) (xy 39.967518 37.687188) (xy 39.84782 37.723498)
(xy 39.737506 37.782463) (xy 39.640815 37.861815) (xy 39.561463 37.958506) (xy 39.502498 38.06882) (xy 39.466188 38.188518)
(xy 39.453928 38.313) (xy 35.730072 38.313) (xy 35.717812 38.188518) (xy 35.681502 38.06882) (xy 35.622537 37.958506)
(xy 35.543185 37.861815) (xy 35.446494 37.782463) (xy 35.33618 37.723498) (xy 35.216482 37.687188) (xy 35.092 37.674928)
(xy 34.092 37.674928) (xy 33.967518 37.687188) (xy 33.84782 37.723498) (xy 33.737506 37.782463) (xy 33.640815 37.861815)
(xy 33.561463 37.958506) (xy 33.502498 38.06882) (xy 33.466188 38.188518) (xy 33.453928 38.313) (xy 25.094 38.313)
(xy 25.094 34.185984) (xy 26.591 34.185984) (xy 26.591 34.902016) (xy 26.730691 35.60429) (xy 27.004705 36.265818)
(xy 27.402511 36.861177) (xy 27.908823 37.367489) (xy 28.504182 37.765295) (xy 29.16571 38.039309) (xy 29.867984 38.179)
(xy 30.584016 38.179) (xy 31.28629 38.039309) (xy 31.947818 37.765295) (xy 32.543177 37.367489) (xy 33.049489 36.861177)
(xy 33.447295 36.265818) (xy 33.721309 35.60429) (xy 33.861 34.902016) (xy 33.861 34.185984) (xy 33.721309 33.48371)
(xy 33.447295 32.822182) (xy 33.049489 32.226823) (xy 32.543177 31.720511) (xy 31.947818 31.322705) (xy 31.28629 31.048691)
(xy 30.584016 30.909) (xy 29.867984 30.909) (xy 29.16571 31.048691) (xy 28.504182 31.322705) (xy 27.908823 31.720511)
(xy 27.402511 32.226823) (xy 27.004705 32.822182) (xy 26.730691 33.48371) (xy 26.591 34.185984) (xy 25.094 34.185984)
(xy 25.094 29.821) (xy 33.453928 29.821) (xy 33.453928 30.521) (xy 33.466188 30.645482) (xy 33.502498 30.76518)
(xy 33.561463 30.875494) (xy 33.640815 30.972185) (xy 33.737506 31.051537) (xy 33.84782 31.110502) (xy 33.967518 31.146812)
(xy 34.092 31.159072) (xy 35.092 31.159072) (xy 35.216482 31.146812) (xy 35.33618 31.110502) (xy 35.446494 31.051537)
(xy 35.543185 30.972185) (xy 35.622537 30.875494) (xy 35.681502 30.76518) (xy 35.717812 30.645482) (xy 35.730072 30.521)
(xy 35.730072 29.821) (xy 35.717812 29.696518) (xy 35.681502 29.57682) (xy 35.622537 29.466506) (xy 35.543185 29.369815)
(xy 35.446494 29.290463) (xy 35.33618 29.231498) (xy 35.216482 29.195188) (xy 35.092 29.182928) (xy 34.092 29.182928)
(xy 33.967518 29.195188) (xy 33.84782 29.231498) (xy 33.737506 29.290463) (xy 33.640815 29.369815) (xy 33.561463 29.466506)
(xy 33.502498 29.57682) (xy 33.466188 29.696518) (xy 33.453928 29.821) (xy 25.094 29.821) (xy 25.094 26.121)
(xy 33.453928 26.121) (xy 33.453928 26.821) (xy 33.466188 26.945482) (xy 33.502498 27.06518) (xy 33.561463 27.175494)
(xy 33.640815 27.272185) (xy 33.737506 27.351537) (xy 33.84782 27.410502) (xy 33.967518 27.446812) (xy 34.092 27.459072)
(xy 35.092 27.459072) (xy 35.216482 27.446812) (xy 35.33618 27.410502) (xy 35.446494 27.351537) (xy 35.543185 27.272185)
(xy 35.622537 27.175494) (xy 35.681502 27.06518) (xy 35.717812 26.945482) (xy 35.730072 26.821) (xy 39.453928 26.821)
(xy 39.466188 26.945482) (xy 39.502498 27.06518) (xy 39.561463 27.175494) (xy 39.640815 27.272185) (xy 39.737506 27.351537)
(xy 39.84782 27.410502) (xy 39.967518 27.446812) (xy 40.092 27.459072) (xy 40.30625 27.456) (xy 40.465 27.29725)
(xy 40.465 26.598) (xy 40.719 26.598) (xy 40.719 27.29725) (xy 40.87775 27.456) (xy 41.092 27.459072)
(xy 41.216482 27.446812) (xy 41.33618 27.410502) (xy 41.446494 27.351537) (xy 41.543185 27.272185) (xy 41.622537 27.175494)
(xy 41.681502 27.06518) (xy 41.717812 26.945482) (xy 41.730072 26.821) (xy 41.727 26.75675) (xy 41.56825 26.598)
(xy 40.719 26.598) (xy 40.465 26.598) (xy 39.61575 26.598) (xy 39.457 26.75675) (xy 39.453928 26.821)
(xy 35.730072 26.821) (xy 35.730072 26.121) (xy 39.453928 26.121) (xy 39.457 26.18525) (xy 39.61575 26.344)
(xy 40.465 26.344) (xy 40.465 25.64475) (xy 40.719 25.64475) (xy 40.719 26.344) (xy 41.56825 26.344)
(xy 41.727 26.18525) (xy 41.730072 26.121) (xy 41.717812 25.996518) (xy 41.681502 25.87682) (xy 41.622537 25.766506)
(xy 41.543185 25.669815) (xy 41.446494 25.590463) (xy 41.33618 25.531498) (xy 41.216482 25.495188) (xy 41.092 25.482928)
(xy 40.87775 25.486) (xy 40.719 25.64475) (xy 40.465 25.64475) (xy 40.30625 25.486) (xy 40.092 25.482928)
(xy 39.967518 25.495188) (xy 39.84782 25.531498) (xy 39.737506 25.590463) (xy 39.640815 25.669815) (xy 39.561463 25.766506)
(xy 39.502498 25.87682) (xy 39.466188 25.996518) (xy 39.453928 26.121) (xy 35.730072 26.121) (xy 35.717812 25.996518)
(xy 35.681502 25.87682) (xy 35.622537 25.766506) (xy 35.543185 25.669815) (xy 35.446494 25.590463) (xy 35.33618 25.531498)
(xy 35.216482 25.495188) (xy 35.092 25.482928) (xy 34.092 25.482928) (xy 33.967518 25.495188) (xy 33.84782 25.531498)
(xy 33.737506 25.590463) (xy 33.640815 25.669815) (xy 33.561463 25.766506) (xy 33.502498 25.87682) (xy 33.466188 25.996518)
(xy 33.453928 26.121) (xy 25.094 26.121) (xy 25.094 21.792) (xy 54.096178 21.792)
)
)
(filled_polygon
(pts
(xy 59.298525 24.060632) (xy 59.505368 24.267475) (xy 59.692001 24.392179) (xy 59.692 44.135197) (xy 59.397 44.430198)
(xy 59.397 44.322998) (xy 59.232156 44.322998) (xy 59.353476 44.09311) (xy 59.308825 43.945901) (xy 59.183641 43.68308)
(xy 59.009588 43.449731) (xy 58.793355 43.254822) (xy 58.543252 43.105843) (xy 58.268891 43.008519) (xy 58.039 43.129186)
(xy 58.039 44.323) (xy 58.059 44.323) (xy 58.059 44.577) (xy 58.039 44.577) (xy 58.039 44.597)
(xy 57.785 44.597) (xy 57.785 44.577) (xy 57.765 44.577) (xy 57.765 44.323) (xy 57.785 44.323)
(xy 57.785 43.129186) (xy 57.555109 43.008519) (xy 57.280748 43.105843) (xy 57.030645 43.254822) (xy 56.814412 43.449731)
(xy 56.6431 43.679406) (xy 56.525475 43.503368) (xy 56.318632 43.296525) (xy 56.132 43.171822) (xy 56.132 25.968801)
(xy 57.545593 24.55521) (xy 57.76574 24.599) (xy 58.05826 24.599) (xy 58.345158 24.541932) (xy 58.615411 24.42999)
(xy 58.858632 24.267475) (xy 59.065475 24.060632) (xy 59.182 23.88624)
)
)
)
(zone (net 8) (net_name DM_GND) (layer B.Cu) (tstamp 5E302F6D) (hatch edge 0.508)
(connect_pads (clearance 0.508))
(min_thickness 0.254)
(fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508))
(polygon
(pts
(xy 74.422 60.96) (xy 24.384 60.96) (xy 24.384 21.082) (xy 74.422 21.082)
)
)
(filled_polygon
(pts
(xy 54.070815 21.812815) (xy 53.991463 21.909506) (xy 53.932498 22.01982) (xy 53.896188 22.139518) (xy 53.883928 22.264)
(xy 53.887 22.82825) (xy 54.04575 22.987) (xy 55.245 22.987) (xy 55.245 22.967) (xy 55.499 22.967)
(xy 55.499 22.987) (xy 55.519 22.987) (xy 55.519 23.241) (xy 55.499 23.241) (xy 55.499 24.44025)
(xy 55.65775 24.599) (xy 56.222 24.602072) (xy 56.346482 24.589812) (xy 56.46618 24.553502) (xy 56.576494 24.494537)
(xy 56.673185 24.415185) (xy 56.752537 24.318494) (xy 56.811502 24.20818) (xy 56.833513 24.13562) (xy 56.965368 24.267475)
(xy 57.208589 24.42999) (xy 57.478842 24.541932) (xy 57.76574 24.599) (xy 58.05826 24.599) (xy 58.345158 24.541932)
(xy 58.615411 24.42999) (xy 58.858632 24.267475) (xy 59.065475 24.060632) (xy 59.182 23.88624) (xy 59.298525 24.060632)
(xy 59.505368 24.267475) (xy 59.748589 24.42999) (xy 60.018842 24.541932) (xy 60.30574 24.599) (xy 60.59826 24.599)
(xy 60.885158 24.541932) (xy 61.155411 24.42999) (xy 61.398632 24.267475) (xy 61.605475 24.060632) (xy 61.722 23.88624)
(xy 61.838525 24.060632) (xy 62.045368 24.267475) (xy 62.232001 24.392179) (xy 62.232 40.7942) (xy 59.235095 43.791106)
(xy 59.183641 43.68308) (xy 59.009588 43.449731) (xy 58.793355 43.254822) (xy 58.543252 43.105843) (xy 58.268891 43.008519)
(xy 58.039 43.129186) (xy 58.039 44.323) (xy 58.059 44.323) (xy 58.059 44.577) (xy 58.039 44.577)
(xy 58.039 44.597) (xy 57.785 44.597) (xy 57.785 44.577) (xy 57.765 44.577) (xy 57.765 44.323)
(xy 57.785 44.323) (xy 57.785 43.129186) (xy 57.555109 43.008519) (xy 57.280748 43.105843) (xy 57.030645 43.254822)
(xy 56.814412 43.449731) (xy 56.6431 43.679406) (xy 56.525475 43.503368) (xy 56.318632 43.296525) (xy 56.075411 43.13401)
(xy 55.805158 43.022068) (xy 55.51826 42.965) (xy 55.22574 42.965) (xy 54.938842 43.022068) (xy 54.668589 43.13401)
(xy 54.425368 43.296525) (xy 54.218525 43.503368) (xy 54.05601 43.746589) (xy 53.944068 44.016842) (xy 53.887 44.30374)
(xy 53.887 44.59626) (xy 53.944068 44.883158) (xy 54.05601 45.153411) (xy 54.218525 45.396632) (xy 54.425368 45.603475)
(xy 54.59976 45.72) (xy 54.425368 45.836525) (xy 54.218525 46.043368) (xy 54.05601 46.286589) (xy 53.944068 46.556842)
(xy 53.887 46.84374) (xy 53.887 47.13626) (xy 53.944068 47.423158) (xy 54.05601 47.693411) (xy 54.218525 47.936632)
(xy 54.425368 48.143475) (xy 54.59976 48.26) (xy 54.425368 48.376525) (xy 54.218525 48.583368) (xy 54.05601 48.826589)
(xy 53.944068 49.096842) (xy 53.887 49.38374) (xy 53.887 49.67626) (xy 53.944068 49.963158) (xy 54.05601 50.233411)
(xy 54.218525 50.476632) (xy 54.425368 50.683475) (xy 54.59976 50.8) (xy 54.425368 50.916525) (xy 54.218525 51.123368)
(xy 54.05601 51.366589) (xy 53.944068 51.636842) (xy 53.887 51.92374) (xy 53.887 52.21626) (xy 53.944068 52.503158)
(xy 54.05601 52.773411) (xy 54.218525 53.016632) (xy 54.35038 53.148487) (xy 54.27782 53.170498) (xy 54.167506 53.229463)
(xy 54.070815 53.308815) (xy 53.991463 53.405506) (xy 53.932498 53.51582) (xy 53.896188 53.635518) (xy 53.883928 53.76)
(xy 53.883928 55.46) (xy 53.896188 55.584482) (xy 53.932498 55.70418) (xy 53.991463 55.814494) (xy 54.070815 55.911185)
(xy 54.167506 55.990537) (xy 54.27782 56.049502) (xy 54.397518 56.085812) (xy 54.522 56.098072) (xy 56.222 56.098072)
(xy 56.346482 56.085812) (xy 56.46618 56.049502) (xy 56.576494 55.990537) (xy 56.673185 55.911185) (xy 56.752537 55.814494)
(xy 56.811502 55.70418) (xy 56.833513 55.63162) (xy 56.965368 55.763475) (xy 57.208589 55.92599) (xy 57.478842 56.037932)
(xy 57.76574 56.095) (xy 58.05826 56.095) (xy 58.345158 56.037932) (xy 58.615411 55.92599) (xy 58.858632 55.763475)
(xy 59.065475 55.556632) (xy 59.22799 55.313411) (xy 59.339932 55.043158) (xy 59.397 54.75626) (xy 59.397 54.46374)
(xy 59.339932 54.176842) (xy 59.22799 53.906589) (xy 59.065475 53.663368) (xy 58.858632 53.456525) (xy 58.68424 53.34)
(xy 58.858632 53.223475) (xy 59.065475 53.016632) (xy 59.22799 52.773411) (xy 59.339932 52.503158) (xy 59.397 52.21626)
(xy 59.397 51.92374) (xy 59.339932 51.636842) (xy 59.22799 51.366589) (xy 59.065475 51.123368) (xy 58.858632 50.916525)
(xy 58.68424 50.8) (xy 58.858632 50.683475) (xy 59.065475 50.476632) (xy 59.22799 50.233411) (xy 59.339932 49.963158)
(xy 59.397 49.67626) (xy 59.397 49.38374) (xy 59.339932 49.096842) (xy 59.22799 48.826589) (xy 59.092295 48.623508)
(xy 68.583004 39.1328) (xy 68.612001 39.109003) (xy 68.638332 39.076919) (xy 68.706974 38.993279) (xy 68.777546 38.861249)
(xy 68.777546 38.861248) (xy 68.821003 38.717988) (xy 68.832 38.606335) (xy 68.832 38.606325) (xy 68.835676 38.569002)
(xy 68.832 38.531679) (xy 68.832 24.392178) (xy 69.018632 24.267475) (xy 69.225475 24.060632) (xy 69.342 23.88624)
(xy 69.458525 24.060632) (xy 69.665368 24.267475) (xy 69.908589 24.42999) (xy 70.178842 24.541932) (xy 70.46574 24.599)
(xy 70.75826 24.599) (xy 71.045158 24.541932) (xy 71.315411 24.42999) (xy 71.558632 24.267475) (xy 71.765475 24.060632)
(xy 71.92799 23.817411) (xy 72.039932 23.547158) (xy 72.097 23.26026) (xy 72.097 22.96774) (xy 72.039932 22.680842)
(xy 71.92799 22.410589) (xy 71.765475 22.167368) (xy 71.558632 21.960525) (xy 71.315411 21.79801) (xy 71.300902 21.792)
(xy 73.674 21.792) (xy 73.674001 60.372) (xy 25.094 60.372) (xy 25.094 46.377984) (xy 26.591 46.377984)
(xy 26.591 47.094016) (xy 26.730691 47.79629) (xy 27.004705 48.457818) (xy 27.402511 49.053177) (xy 27.908823 49.559489)
(xy 28.504182 49.957295) (xy 29.16571 50.231309) (xy 29.867984 50.371) (xy 30.584016 50.371) (xy 31.28629 50.231309)
(xy 31.947818 49.957295) (xy 32.543177 49.559489) (xy 33.049489 49.053177) (xy 33.447295 48.457818) (xy 33.721309 47.79629)
(xy 33.861 47.094016) (xy 33.861 46.377984) (xy 41.577 46.377984) (xy 41.577 47.094016) (xy 41.716691 47.79629)
(xy 41.990705 48.457818) (xy 42.388511 49.053177) (xy 42.894823 49.559489) (xy 43.490182 49.957295) (xy 44.15171 50.231309)
(xy 44.853984 50.371) (xy 45.570016 50.371) (xy 46.27229 50.231309) (xy 46.933818 49.957295) (xy 47.529177 49.559489)
(xy 48.035489 49.053177) (xy 48.433295 48.457818) (xy 48.707309 47.79629) (xy 48.847 47.094016) (xy 48.847 46.377984)
(xy 48.707309 45.67571) (xy 48.433295 45.014182) (xy 48.035489 44.418823) (xy 47.529177 43.912511) (xy 46.933818 43.514705)
(xy 46.27229 43.240691) (xy 45.570016 43.101) (xy 44.853984 43.101) (xy 44.15171 43.240691) (xy 43.490182 43.514705)
(xy 42.894823 43.912511) (xy 42.388511 44.418823) (xy 41.990705 45.014182) (xy 41.716691 45.67571) (xy 41.577 46.377984)
(xy 33.861 46.377984) (xy 33.721309 45.67571) (xy 33.447295 45.014182) (xy 33.049489 44.418823) (xy 32.543177 43.912511)
(xy 31.947818 43.514705) (xy 31.28629 43.240691) (xy 30.584016 43.101) (xy 29.867984 43.101) (xy 29.16571 43.240691)
(xy 28.504182 43.514705) (xy 27.908823 43.912511) (xy 27.402511 44.418823) (xy 27.004705 45.014182) (xy 26.730691 45.67571)
(xy 26.591 46.377984) (xy 25.094 46.377984) (xy 25.094 34.185984) (xy 26.591 34.185984) (xy 26.591 34.902016)
(xy 26.730691 35.60429) (xy 27.004705 36.265818) (xy 27.402511 36.861177) (xy 27.908823 37.367489) (xy 28.504182 37.765295)
(xy 29.16571 38.039309) (xy 29.867984 38.179) (xy 30.584016 38.179) (xy 31.28629 38.039309) (xy 31.947818 37.765295)
(xy 32.543177 37.367489) (xy 33.049489 36.861177) (xy 33.447295 36.265818) (xy 33.721309 35.60429) (xy 33.861 34.902016)
(xy 33.861 34.185984) (xy 41.577 34.185984) (xy 41.577 34.902016) (xy 41.716691 35.60429) (xy 41.990705 36.265818)
(xy 42.388511 36.861177) (xy 42.894823 37.367489) (xy 43.490182 37.765295) (xy 44.15171 38.039309) (xy 44.853984 38.179)
(xy 45.570016 38.179) (xy 46.27229 38.039309) (xy 46.933818 37.765295) (xy 47.529177 37.367489) (xy 48.035489 36.861177)
(xy 48.433295 36.265818) (xy 48.707309 35.60429) (xy 48.847 34.902016) (xy 48.847 34.185984) (xy 48.707309 33.48371)
(xy 48.433295 32.822182) (xy 48.035489 32.226823) (xy 47.529177 31.720511) (xy 46.933818 31.322705) (xy 46.27229 31.048691)
(xy 45.570016 30.909) (xy 44.853984 30.909) (xy 44.15171 31.048691) (xy 43.490182 31.322705) (xy 42.894823 31.720511)
(xy 42.388511 32.226823) (xy 41.990705 32.822182) (xy 41.716691 33.48371) (xy 41.577 34.185984) (xy 33.861 34.185984)
(xy 33.721309 33.48371) (xy 33.447295 32.822182) (xy 33.049489 32.226823) (xy 32.543177 31.720511) (xy 31.947818 31.322705)
(xy 31.28629 31.048691) (xy 30.584016 30.909) (xy 29.867984 30.909) (xy 29.16571 31.048691) (xy 28.504182 31.322705)
(xy 27.908823 31.720511) (xy 27.402511 32.226823) (xy 27.004705 32.822182) (xy 26.730691 33.48371) (xy 26.591 34.185984)
(xy 25.094 34.185984) (xy 25.094 23.964) (xy 53.883928 23.964) (xy 53.896188 24.088482) (xy 53.932498 24.20818)
(xy 53.991463 24.318494) (xy 54.070815 24.415185) (xy 54.167506 24.494537) (xy 54.27782 24.553502) (xy 54.397518 24.589812)
(xy 54.522 24.602072) (xy 55.08625 24.599) (xy 55.245 24.44025) (xy 55.245 23.241) (xy 54.04575 23.241)
(xy 53.887 23.39975) (xy 53.883928 23.964) (xy 25.094 23.964) (xy 25.094 21.792) (xy 54.096178 21.792)
)
)
)
)

View File

@ -0,0 +1,135 @@
(export (version D)
(design
(source P:\Electronics\DeskControl\pcb\display\DeskControlDisplay.sch)
(date "28-1-2020 11:58:28")
(tool "Eeschema (5.1.5)-3")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title)
(company)
(rev)
(date)
(source DeskControlDisplay.sch)
(comment (number 1) (value ""))
(comment (number 2) (value ""))
(comment (number 3) (value ""))
(comment (number 4) (value "")))))
(components
(comp (ref SW3)
(value Up)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759CF0))
(comp (ref SW2)
(value Menu)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759CB0))
(comp (ref SW1)
(value Down)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759C24))
(comp (ref J6)
(value DM-Slave)
(footprint Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_02x05_Counter_Clockwise) (description "Generic connector, double row, 02x05, counter clockwise pin numbering scheme (similar to DIP packge numbering), script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5E3531D6))
(comp (ref J7)
(value ST7789)
(footprint Pin_Headers:Pin_Header_Straight_1x07_Pitch2.54mm)
(datasheet ~)
(libsource (lib Connector) (part Conn_01x07_Female) (description "Generic connector, single row, 01x07, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5E37279C)))
(libparts
(libpart (lib Connector) (part Conn_01x07_Female)
(description "Generic connector, single row, 01x07, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x07_Female))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))))
(libpart (lib Connector_Generic) (part Conn_02x05_Counter_Clockwise)
(description "Generic connector, double row, 02x05, counter clockwise pin numbering scheme (similar to DIP packge numbering), script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_2x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_02x05_Counter_Clockwise))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))
(pin (num 9) (name Pin_9) (type passive))
(pin (num 10) (name Pin_10) (type passive))))
(libpart (lib Switch) (part SW_Push)
(description "Push button switch, generic, two pins")
(docs ~)
(fields
(field (name Reference) SW)
(field (name Value) SW_Push))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive)))))
(libraries
(library (logical Connector)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Connector.lib"))
(library (logical Connector_Generic)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Connector_Generic.lib"))
(library (logical Switch)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Switch.lib")))
(nets
(net (code 1) (name DM_LCD-DC)
(node (ref J7) (pin 6))
(node (ref J6) (pin 5)))
(net (code 2) (name "Net-(J6-Pad1)")
(node (ref SW1) (pin 1))
(node (ref J6) (pin 1)))
(net (code 3) (name "Net-(J6-Pad2)")
(node (ref SW2) (pin 1))
(node (ref J6) (pin 2)))
(net (code 4) (name "Net-(J6-Pad3)")
(node (ref J6) (pin 3))
(node (ref SW3) (pin 1)))
(net (code 5) (name DM_SCK)
(node (ref J6) (pin 8))
(node (ref J7) (pin 3)))
(net (code 6) (name DM_MOSI)
(node (ref J6) (pin 7))
(node (ref J7) (pin 4)))
(net (code 7) (name DM_LCD-RST)
(node (ref J7) (pin 5))
(node (ref J6) (pin 6)))
(net (code 8) (name DM_3v3)
(node (ref J6) (pin 9))
(node (ref J7) (pin 2)))
(net (code 9) (name DM_LCD-BL)
(node (ref J6) (pin 4))
(node (ref J7) (pin 7)))
(net (code 10) (name DM_GND)
(node (ref J6) (pin 10))
(node (ref J7) (pin 1))
(node (ref SW1) (pin 2))
(node (ref SW2) (pin 2))
(node (ref SW3) (pin 2)))))

View File

@ -0,0 +1,249 @@
update=28-1-2020 10:51:46
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=
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
TrackWidth2=0.5
ViaDiameter1=0.8
ViaDrill1=0.4
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.15
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.15
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0.051
SolderMaskMinWidth=0.25
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=0
[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

View File

@ -0,0 +1,131 @@
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
Wire Wire Line
6650 2750 6750 2750
Wire Wire Line
6750 2750 6750 3150
Wire Wire Line
6750 3150 6750 3550
Connection ~ 6750 3150
Wire Wire Line
6650 3150 6750 3150
Wire Wire Line
6650 3550 6750 3550
$Comp
L Switch:SW_Push SW3
U 1 1 5D759CF0
P 6450 3550
F 0 "SW3" H 6450 3835 50 0000 C CNN
F 1 "Up" H 6450 3744 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 3750 50 0001 C CNN
F 3 "" H 6450 3750 50 0001 C CNN
1 6450 3550
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW2
U 1 1 5D759CB0
P 6450 3150
F 0 "SW2" H 6450 3435 50 0000 C CNN
F 1 "Menu" H 6450 3344 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 3350 50 0001 C CNN
F 3 "" H 6450 3350 50 0001 C CNN
1 6450 3150
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW1
U 1 1 5D759C24
P 6450 2750
F 0 "SW1" H 6450 3035 50 0000 C CNN
F 1 "Down" H 6450 2944 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 2950 50 0001 C CNN
F 3 "" H 6450 2950 50 0001 C CNN
1 6450 2750
1 0 0 -1
$EndComp
Text GLabel 4950 2950 0 50 Input ~ 0
DM_SCK
Text GLabel 4950 3050 0 50 Input ~ 0
DM_MOSI
Text GLabel 4950 3150 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 5450 3150 2 50 Input ~ 0
DM_LCD-DC
Text GLabel 5450 3050 2 50 Input ~ 0
DM_LCD-BL
$Comp
L Connector_Generic:Conn_02x05_Counter_Clockwise J6
U 1 1 5E3531D6
P 5250 2950
F 0 "J6" H 5250 3300 50 0000 L CNN
F 1 "DM-Slave" H 5100 2600 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm" H 5250 2950 50 0001 C CNN
F 3 "~" H 5250 2950 50 0001 C CNN
1 5250 2950
-1 0 0 -1
$EndComp
Wire Wire Line
5450 2750 6250 2750
Wire Wire Line
5450 2850 6200 2850
Wire Wire Line
6200 2850 6200 3150
Wire Wire Line
6200 3150 6250 3150
Wire Wire Line
5450 2950 6100 2950
Wire Wire Line
6100 2950 6100 3550
Wire Wire Line
6100 3550 6250 3550
Connection ~ 6750 3550
$Comp
L Connector:Conn_01x07_Female J7
U 1 1 5E37279C
P 5800 3850
F 0 "J7" H 5828 3876 50 0000 L CNN
F 1 "ST7789" H 5828 3785 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x07_Pitch2.54mm" H 5800 3850 50 0001 C CNN
F 3 "~" H 5800 3850 50 0001 C CNN
1 5800 3850
1 0 0 -1
$EndComp
Wire Wire Line
6750 3700 6750 3550
Text GLabel 4950 2850 0 50 Input ~ 0
DM_3v3
Text Notes 4950 2300 0 50 ~ 0
Display / Buttons Module (DM)
Text GLabel 4950 2750 0 50 Input ~ 0
DM_GND
Text GLabel 6750 3700 2 50 Input ~ 0
DM_GND
Text GLabel 5600 3550 0 50 Input ~ 0
DM_GND
Text GLabel 5600 3650 0 50 Input ~ 0
DM_3v3
Text GLabel 5600 3750 0 50 Input ~ 0
DM_SCK
Text GLabel 5600 3850 0 50 Input ~ 0
DM_MOSI
Text GLabel 5600 3950 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 5600 4050 0 50 Input ~ 0
DM_LCD-DC
Text GLabel 5600 4150 0 50 Input ~ 0
DM_LCD-BL
$EndSCHEMATC

View File

@ -0,0 +1,131 @@
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
Wire Wire Line
6650 2750 6750 2750
Wire Wire Line
6750 2750 6750 3150
Wire Wire Line
6750 3150 6750 3550
Connection ~ 6750 3150
Wire Wire Line
6650 3150 6750 3150
Wire Wire Line
6650 3550 6750 3550
$Comp
L Switch:SW_Push SW3
U 1 1 5D759CF0
P 6450 3550
F 0 "SW3" H 6450 3835 50 0000 C CNN
F 1 "Up" H 6450 3744 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 3750 50 0001 C CNN
F 3 "" H 6450 3750 50 0001 C CNN
1 6450 3550
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW2
U 1 1 5D759CB0
P 6450 3150
F 0 "SW2" H 6450 3435 50 0000 C CNN
F 1 "Menu" H 6450 3344 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 3350 50 0001 C CNN
F 3 "" H 6450 3350 50 0001 C CNN
1 6450 3150
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW1
U 1 1 5D759C24
P 6450 2750
F 0 "SW1" H 6450 3035 50 0000 C CNN
F 1 "Down" H 6450 2944 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6450 2950 50 0001 C CNN
F 3 "" H 6450 2950 50 0001 C CNN
1 6450 2750
1 0 0 -1
$EndComp
Text GLabel 4950 2950 0 50 Input ~ 0
DM_SCK
Text GLabel 4950 3050 0 50 Input ~ 0
DM_MOSI
Text GLabel 4950 3150 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 5450 3150 2 50 Input ~ 0
DM_LCD-DC
Text GLabel 5450 3050 2 50 Input ~ 0
DM_LCD-BL
$Comp
L Connector_Generic:Conn_02x05_Counter_Clockwise J6
U 1 1 5E3531D6
P 5250 2950
F 0 "J6" H 5250 3300 50 0000 L CNN
F 1 "DM-Slave" H 5100 2600 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm" H 5250 2950 50 0001 C CNN
F 3 "~" H 5250 2950 50 0001 C CNN
1 5250 2950
-1 0 0 -1
$EndComp
Wire Wire Line
5450 2750 6250 2750
Wire Wire Line
5450 2850 6200 2850
Wire Wire Line
6200 2850 6200 3150
Wire Wire Line
6200 3150 6250 3150
Wire Wire Line
5450 2950 6100 2950
Wire Wire Line
6100 2950 6100 3550
Wire Wire Line
6100 3550 6250 3550
Connection ~ 6750 3550
$Comp
L Connector:Conn_01x07_Female J7
U 1 1 5E37279C
P 5800 3850
F 0 "J7" H 5828 3876 50 0000 L CNN
F 1 "ST7789" H 5828 3785 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Angled_1x07_Pitch2.54mm" H 5800 3850 50 0001 C CNN
F 3 "~" H 5800 3850 50 0001 C CNN
1 5800 3850
1 0 0 -1
$EndComp
Wire Wire Line
6750 3700 6750 3550
Text GLabel 4950 2850 0 50 Input ~ 0
DM_3v3
Text Notes 4950 2300 0 50 ~ 0
Display / Buttons Module (DM)
Text GLabel 4950 2750 0 50 Input ~ 0
DM_GND
Text GLabel 6750 3700 2 50 Input ~ 0
DM_GND
Text GLabel 5600 3550 0 50 Input ~ 0
DM_GND
Text GLabel 5600 3650 0 50 Input ~ 0
DM_3v3
Text GLabel 5600 3750 0 50 Input ~ 0
DM_SCK
Text GLabel 5600 3850 0 50 Input ~ 0
DM_MOSI
Text GLabel 5600 3950 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 5600 4050 0 50 Input ~ 0
DM_LCD-DC
Text GLabel 5600 4150 0 50 Input ~ 0
DM_LCD-BL
$EndSCHEMATC

48602
pcb/display/fp-info-cache Normal file

File diff suppressed because it is too large Load Diff

3
pcb/display/fp-lib-table Normal file
View File

@ -0,0 +1,3 @@
(fp_lib_table
(lib (name SMD-BUTTON)(type KiCad)(uri ${KIPRJMOD}/../lib/SMD-BUTTON.pretty)(options "")(descr ""))
)

View File

@ -0,0 +1,3 @@
(sym_lib_table
(lib (name SMD-BUTTON_4P-5.2X5.2X1.5MM-SKQGAKE010_)(type Legacy)(uri ${KIPRJMOD}/../lib/SMD-BUTTON_4P-5.2X5.2X1.5MM-SKQGAKE010_.lib)(options "")(descr ""))
)

View File

@ -1,3 +0,0 @@
(fp_lib_table
(lib (name SMD-BUTTON)(type KiCad)(uri ${KIPRJMOD}/lib/SMD-BUTTON.pretty)(options "")(descr ""))
)

3
pcb/lib/AMS1117-5.0.dcm Normal file
View File

@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

24
pcb/lib/AMS1117-5.0.lib Normal file
View File

@ -0,0 +1,24 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# AMS1117-5.0
#
DEF AMS1117-5.0 U 0 40 Y Y 1 L N
F0 "U" -400 220 50 H V L BNN
F1 "AMS1117-5.0" -401 -321 50 H V L BNN
F2 "SOT229P700X180-4N" 0 0 50 H I L BNN
F3 "Sot223/Pkg 1-Amp 5-Volt Low Drop Out Voltage Regulatator" 0 0 50 H I L BNN
F4 "Unavailable" 0 0 50 H I L BNN
F5 "Advanced Monolithic Systems" 0 0 50 H I L BNN
F6 "None" 0 0 50 H I L BNN
F7 "None" 0 0 50 H I L BNN
F8 "AMS1117-5.0" 0 0 50 H I L BNN
DRAW
S -400 200 400 -200 0 1 0 f
X ADJ/GND 1 600 -100 200 L 40 40 0 0 W
X VOUT 2 600 100 200 L 40 40 0 0 O
X VIN 3 -600 100 200 R 40 40 0 0 I
ENDDRAW
ENDDEF
#
#End Library

73
pcb/lib/AMS1117-5.0.mod Normal file
View File

@ -0,0 +1,73 @@
PCBNEW-LibModule-V1
# encoding utf-8
Units mm
$INDEX
SOT229P700X180-4N
$EndINDEX
$MODULE SOT229P700X180-4N
Po 0 0 0 15 00000000 00000000 ~~
Li SOT229P700X180-4N
Cd
Sc 00000000
At SMD
Op 0 0 0
.SolderMask 0
.SolderPaste 0
T0 -1.15242 -5.14581 1.00211 1.00211 0 0.05 N V 21 "SOT229P700X180-4N"
T1 -0.516467 5.54073 1.00285 1.00285 0 0.05 N V 21 "VAL**"
DS -3.36 1.86 -3.36 -1.86 0.127 24
DS -3.36 -1.86 3.36 -1.86 0.127 24
DS 3.36 -1.86 3.36 1.86 0.127 24
DS 3.36 1.86 -3.36 1.86 0.127 24
DS -3.36 1.86 -3.36 -1.86 0.127 21
DS 3.36 1.86 3.36 -1.86 0.127 21
DS -3.36 1.86 -3.1 1.86 0.127 21
DS 3.11 1.86 3.36 1.86 0.127 21
DS 3.36 -1.86 1.87 -1.86 0.127 21
DS -1.76 -1.86 -3.36 -1.86 0.127 21
DC -2.29 4.373 -2.19 4.373 0.2 21
DS -3.61 -2.11 -3.61 2.11 0.05 26
DS -3.61 2.11 -3.01 2.11 0.05 26
DS -3.01 2.11 -3.01 4.25 0.05 26
DS -3.01 4.25 3.01 4.25 0.05 26
DS 3.01 4.25 3.01 2.11 0.05 26
DS 3.01 2.11 3.61 2.11 0.05 26
DS 3.61 2.11 3.61 -2.11 0.05 26
DS 3.61 -2.11 1.87 -2.11 0.05 26
DS 1.87 -2.11 1.87 -4.25 0.05 26
DS 1.87 -4.25 -1.87 -4.25 0.05 26
DS -1.87 -4.25 -1.87 -2.11 0.05 26
DS -1.87 -2.11 -3.61 -2.11 0.05 26
$PAD
Sh "1" R 0.93 1.31 0 0 0
At SMD N 00888000
.SolderMask 0
.SolderPaste 0
Ne 0 ""
Po -2.29 3.345
$EndPAD
$PAD
Sh "2" R 0.93 1.31 0 0 0
At SMD N 00888000
.SolderMask 0
.SolderPaste 0
Ne 0 ""
Po 0 3.345
$EndPAD
$PAD
Sh "3" R 0.93 1.31 0 0 0
At SMD N 00888000
.SolderMask 0
.SolderPaste 0
Ne 0 ""
Po 2.29 3.345
$EndPAD
$PAD
Sh "4" R 3.24 1.31 0 0 0
At SMD N 00888000
.SolderMask 0
.SolderPaste 0
Ne 0 ""
Po 0 -3.345
$EndPAD
$EndMODULE SOT229P700X180-4N

View File

@ -0,0 +1,14 @@
(module YT2099_2P_straight (layer F.Cu) (tedit 5E2FFBC8)
(fp_text reference REF** (at 0 6) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value YT2099_2P_straight (at 0 -5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -5.25 -3.5) (end 5.25 -3.5) (layer F.SilkS) (width 0.15))
(fp_line (start 5.25 -3.5) (end 5.25 4.5) (layer F.SilkS) (width 0.15))
(fp_line (start 5.25 4.5) (end -5.25 4.5) (layer F.SilkS) (width 0.15))
(fp_line (start -5.25 4.5) (end -5.25 -3.5) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole circle (at -2.5 0) (size 3.5 3.5) (drill 1) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at 2.5 0) (size 3.5 3.5) (drill 1) (layers *.Cu *.Mask))
)

View File

@ -1,6 +1,25 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Generic_Conn_01x02
#
DEF Connector_Generic_Conn_01x02 J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "Connector_Generic_Conn_01x02" 0 -200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 50 50 -150 1 1 10 f
X Pin_1 1 -200 0 150 R 50 50 1 1 P
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x04
#
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
@ -24,6 +43,37 @@ X Pin_4 4 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x08
#
DEF Connector_Generic_Conn_01x08 J 0 40 Y N 1 F N
F0 "J" 0 400 50 H V C CNN
F1 "Connector_Generic_Conn_01x08" 0 -500 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 350 50 -450 1 1 10 f
X Pin_1 1 -200 300 150 R 50 50 1 1 P
X Pin_2 2 -200 200 150 R 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 -200 0 150 R 50 50 1 1 P
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
X Pin_6 6 -200 -200 150 R 50 50 1 1 P
X Pin_7 7 -200 -300 150 R 50 50 1 1 P
X Pin_8 8 -200 -400 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x03_Odd_Even
#
DEF Connector_Generic_Conn_02x03_Odd_Even J 0 40 Y N 1 F N
@ -51,6 +101,88 @@ X Pin_6 6 300 -100 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x05_Counter_Clockwise
#
DEF Connector_Generic_Conn_02x05_Counter_Clockwise J 0 40 Y N 1 F N
F0 "J" 50 300 50 H V C CNN
F1 "Connector_Generic_Conn_02x05_Counter_Clockwise" 50 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 250 150 -250 1 1 10 f
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_10 10 300 200 150 L 50 50 1 1 P
X Pin_2 2 -200 100 150 R 50 50 1 1 P
X Pin_3 3 -200 0 150 R 50 50 1 1 P
X Pin_4 4 -200 -100 150 R 50 50 1 1 P
X Pin_5 5 -200 -200 150 R 50 50 1 1 P
X Pin_6 6 300 -200 150 L 50 50 1 1 P
X Pin_7 7 300 -100 150 L 50 50 1 1 P
X Pin_8 8 300 0 150 L 50 50 1 1 P
X Pin_9 9 300 100 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# DeskControl-rescue_ATmega328-AU-MCU_Microchip_ATmega
#
DEF DeskControl-rescue_ATmega328-AU-MCU_Microchip_ATmega U 0 20 Y Y 1 F N
F0 "U" -500 1450 50 H V L BNN
F1 "DeskControl-rescue_ATmega328-AU-MCU_Microchip_ATmega" 100 -1450 50 H V L TNN
F2 "Package_QFP:TQFP-32_7x7mm_P0.8mm" 0 0 50 H I C CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
TQFP*7x7mm*P0.8mm*
$ENDFPLIST
DRAW
S -500 -1400 500 1400 0 1 10 f
X PD3 1 600 -800 100 L 50 50 1 1 T
X PD6 10 600 -1100 100 L 50 50 1 1 T
X PD7 11 600 -1200 100 L 50 50 1 1 T
X PB0 12 600 1200 100 L 50 50 1 1 T
X PB1 13 600 1100 100 L 50 50 1 1 T
X PB2 14 600 1000 100 L 50 50 1 1 T
X PB3 15 600 900 100 L 50 50 1 1 T
X PB4 16 600 800 100 L 50 50 1 1 T
X PB5 17 600 700 100 L 50 50 1 1 T
X AVCC 18 100 1500 100 D 50 50 1 1 W
X ADC6 19 -600 1000 100 R 50 50 1 1 I
X PD4 2 600 -900 100 L 50 50 1 1 T
X AREF 20 -600 1200 100 R 50 50 1 1 P
X GND 21 0 -1500 100 U 50 50 1 1 P N
X ADC7 22 -600 900 100 R 50 50 1 1 I
X PC0 23 600 300 100 L 50 50 1 1 T
X PC1 24 600 200 100 L 50 50 1 1 T
X PC2 25 600 100 100 L 50 50 1 1 T
X PC3 26 600 0 100 L 50 50 1 1 T
X PC4 27 600 -100 100 L 50 50 1 1 T
X PC5 28 600 -200 100 L 50 50 1 1 T
X ~RESET~/PC6 29 600 -300 100 L 50 50 1 1 T
X GND 3 0 -1500 100 U 50 50 1 1 W
X PD0 30 600 -500 100 L 50 50 1 1 T
X PD1 31 600 -600 100 L 50 50 1 1 T
X PD2 32 600 -700 100 L 50 50 1 1 T
X VCC 4 0 1500 100 D 50 50 1 1 W
X GND 5 0 -1500 100 U 50 50 1 1 P N
X VCC 6 0 1500 100 D 50 50 1 1 P N
X XTAL1/PB6 7 600 600 100 L 50 50 1 1 T
X XTAL2/PB7 8 600 500 100 L 50 50 1 1 T
X PD5 9 600 -1000 100 L 50 50 1 1 T
ENDDRAW
ENDDEF
#
# Device_C
#
DEF Device_C C 0 10 N Y 1 F N
@ -107,83 +239,53 @@ X ~ 2 0 -150 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# MCU_Microchip_ATmega_ATmega328-AU
# Regulator_Linear_AMS1117-3.3
#
DEF MCU_Microchip_ATmega_ATmega328-AU U 0 20 Y Y 1 F N
F0 "U" -500 1450 50 H V L BNN
F1 "MCU_Microchip_ATmega_ATmega328-AU" 100 -1450 50 H V L TNN
F2 "Package_QFP:TQFP-32_7x7mm_P0.8mm" 0 0 50 H I C CIN
F3 "" 0 0 50 H I C CNN
ALIAS ATmega48PA-AU ATmega88A-AU ATmega88PA-AU ATmega168A-AU ATmega168PA-AU ATmega328-AU ATmega328P-AU
DEF Regulator_Linear_AMS1117-3.3 U 0 10 Y Y 1 F N
F0 "U" -150 125 50 H V C CNN
F1 "Regulator_Linear_AMS1117-3.3" 0 125 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 0 200 50 H I C CNN
F3 "" 100 -250 50 H I C CNN
ALIAS AP1117-18 AP1117-25 AP1117-33 AP1117-50 LD1117S33TR_SOT223 LD1117S12TR_SOT223 LD1117S18TR_SOT223 LD1117S25TR_SOT223 LD1117S50TR_SOT223 NCP1117-12_SOT223 NCP1117-1.5_SOT223 NCP1117-1.8_SOT223 NCP1117-2.0_SOT223 NCP1117-2.5_SOT223 NCP1117-2.85_SOT223 NCP1117-3.3_SOT223 NCP1117-5.0_SOT223 AMS1117-1.5 AMS1117-1.8 AMS1117-2.5 AMS1117-2.85 AMS1117-3.3 AMS1117-5.0
$FPLIST
TQFP*7x7mm*P0.8mm*
SOT?223*TabPin2*
$ENDFPLIST
DRAW
S -500 -1400 500 1400 0 1 10 f
X PD3 1 600 -800 100 L 50 50 1 1 T
X PD6 10 600 -1100 100 L 50 50 1 1 T
X PD7 11 600 -1200 100 L 50 50 1 1 T
X PB0 12 600 1200 100 L 50 50 1 1 T
X PB1 13 600 1100 100 L 50 50 1 1 T
X PB2 14 600 1000 100 L 50 50 1 1 T
X PB3 15 600 900 100 L 50 50 1 1 T
X PB4 16 600 800 100 L 50 50 1 1 T
X PB5 17 600 700 100 L 50 50 1 1 T
X AVCC 18 100 1500 100 D 50 50 1 1 W
X ADC6 19 -600 1000 100 R 50 50 1 1 I
X PD4 2 600 -900 100 L 50 50 1 1 T
X AREF 20 -600 1200 100 R 50 50 1 1 P
X GND 21 0 -1500 100 U 50 50 1 1 P N
X ADC7 22 -600 900 100 R 50 50 1 1 I
X PC0 23 600 300 100 L 50 50 1 1 T
X PC1 24 600 200 100 L 50 50 1 1 T
X PC2 25 600 100 100 L 50 50 1 1 T
X PC3 26 600 0 100 L 50 50 1 1 T
X PC4 27 600 -100 100 L 50 50 1 1 T
X PC5 28 600 -200 100 L 50 50 1 1 T
X ~RESET~/PC6 29 600 -300 100 L 50 50 1 1 T
X GND 3 0 -1500 100 U 50 50 1 1 W
X PD0 30 600 -500 100 L 50 50 1 1 T
X PD1 31 600 -600 100 L 50 50 1 1 T
X PD2 32 600 -700 100 L 50 50 1 1 T
X VCC 4 0 1500 100 D 50 50 1 1 W
X GND 5 0 -1500 100 U 50 50 1 1 P N
X VCC 6 0 1500 100 D 50 50 1 1 P N
X XTAL1/PB6 7 600 600 100 L 50 50 1 1 T
X XTAL2/PB7 8 600 500 100 L 50 50 1 1 T
X PD5 9 600 -1000 100 L 50 50 1 1 T
S -200 -200 200 75 0 1 10 f
X GND 1 0 -300 100 U 50 50 1 1 W
X VO 2 300 0 100 L 50 50 1 1 w
X VI 3 -300 0 100 R 50 50 1 1 W
ENDDRAW
ENDDEF
#
# Switch_SW_Push
# power_+12V
#
DEF Switch_SW_Push SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "Switch_SW_Push" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
# power_+5V
#
DEF power_+5V #PWR 0 0 Y Y 1 F P
DEF power_+12V #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+5V" 0 140 50 H V C CNN
F1 "power_+12V" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +5V 1 0 0 0 U 50 50 1 1 W N
X +12V 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_+3.3V
#
DEF power_+3.3V #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+3.3V" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS +3.3V
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +3V3 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#

View File

@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@ -0,0 +1,51 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# ATmega328-AU-MCU_Microchip_ATmega
#
DEF ATmega328-AU-MCU_Microchip_ATmega U 0 20 Y Y 1 F N
F0 "U" -500 1450 50 H V L BNN
F1 "ATmega328-AU-MCU_Microchip_ATmega" 100 -1450 50 H V L TNN
F2 "Package_QFP:TQFP-32_7x7mm_P0.8mm" 0 0 50 H I C CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
TQFP*7x7mm*P0.8mm*
$ENDFPLIST
DRAW
S -500 -1400 500 1400 0 1 10 f
X PD3 1 600 -800 100 L 50 50 1 1 T
X PD6 10 600 -1100 100 L 50 50 1 1 T
X PD7 11 600 -1200 100 L 50 50 1 1 T
X PB0 12 600 1200 100 L 50 50 1 1 T
X PB1 13 600 1100 100 L 50 50 1 1 T
X PB2 14 600 1000 100 L 50 50 1 1 T
X PB3 15 600 900 100 L 50 50 1 1 T
X PB4 16 600 800 100 L 50 50 1 1 T
X PB5 17 600 700 100 L 50 50 1 1 T
X AVCC 18 100 1500 100 D 50 50 1 1 W
X ADC6 19 -600 1000 100 R 50 50 1 1 I
X PD4 2 600 -900 100 L 50 50 1 1 T
X AREF 20 -600 1200 100 R 50 50 1 1 P
X GND 21 0 -1500 100 U 50 50 1 1 P N
X ADC7 22 -600 900 100 R 50 50 1 1 I
X PC0 23 600 300 100 L 50 50 1 1 T
X PC1 24 600 200 100 L 50 50 1 1 T
X PC2 25 600 100 100 L 50 50 1 1 T
X PC3 26 600 0 100 L 50 50 1 1 T
X PC4 27 600 -100 100 L 50 50 1 1 T
X PC5 28 600 -200 100 L 50 50 1 1 T
X ~RESET~/PC6 29 600 -300 100 L 50 50 1 1 T
X GND 3 0 -1500 100 U 50 50 1 1 W
X PD0 30 600 -500 100 L 50 50 1 1 T
X PD1 31 600 -600 100 L 50 50 1 1 T
X PD2 32 600 -700 100 L 50 50 1 1 T
X VCC 4 0 1500 100 D 50 50 1 1 W
X GND 5 0 -1500 100 U 50 50 1 1 P N
X VCC 6 0 1500 100 D 50 50 1 1 P N
X XTAL1/PB6 7 600 600 100 L 50 50 1 1 T
X XTAL2/PB7 8 600 500 100 L 50 50 1 1 T
X PD5 9 600 -1000 100 L 50 50 1 1 T
ENDDRAW
ENDDEF
#
#End Library

View File

@ -1,4 +1,5 @@
EESchema Schematic File Version 4
LIBS:DeskControl-cache
EELAYER 26 0
EELAYER END
$Descr A4 11693 8268
@ -29,7 +30,7 @@ L Connector_Generic:Conn_01x04 J2
U 1 1 5D753B7C
P 9400 2250
F 0 "J2" H 9479 2242 50 0000 L CNN
F 1 "SSD1306" H 9479 2151 50 0000 L CNN
F 1 "VL54L0X" H 9479 2151 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 9400 2250 50 0001 C CNN
F 3 "~" H 9400 2250 50 0001 C CNN
1 9400 2250
@ -373,122 +374,241 @@ $EndComp
$Comp
L Switch:SW_Push SW1
U 1 1 5D759C24
P 6250 1600
F 0 "SW1" H 6250 1885 50 0000 C CNN
F 1 "SW_Push" H 6250 1794 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 1800 50 0001 C CNN
F 3 "" H 6250 1800 50 0001 C CNN
1 6250 1600
P 9300 4900
F 0 "SW1" H 9300 5185 50 0000 C CNN
F 1 "SW_Push" H 9300 5094 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9300 5100 50 0001 C CNN
F 3 "" H 9300 5100 50 0001 C CNN
1 9300 4900
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW2
U 1 1 5D759CB0
P 6250 2000
F 0 "SW2" H 6250 2285 50 0000 C CNN
F 1 "SW_Push" H 6250 2194 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 2200 50 0001 C CNN
F 3 "" H 6250 2200 50 0001 C CNN
1 6250 2000
P 9300 5300
F 0 "SW2" H 9300 5585 50 0000 C CNN
F 1 "SW_Push" H 9300 5494 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9300 5500 50 0001 C CNN
F 3 "" H 9300 5500 50 0001 C CNN
1 9300 5300
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW3
U 1 1 5D759CF0
P 6250 2400
F 0 "SW3" H 6250 2685 50 0000 C CNN
F 1 "SW_Push" H 6250 2594 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 6250 2600 50 0001 C CNN
F 3 "" H 6250 2600 50 0001 C CNN
1 6250 2400
P 9300 5700
F 0 "SW3" H 9300 5985 50 0000 C CNN
F 1 "SW_Push" H 9300 5894 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9300 5900 50 0001 C CNN
F 3 "" H 9300 5900 50 0001 C CNN
1 9300 5700
1 0 0 -1
$EndComp
Wire Wire Line
5700 2200 5800 2200
Wire Wire Line
5800 2200 5800 1600
Wire Wire Line
5800 1600 6050 1600
Wire Wire Line
5700 2300 5850 2300
Wire Wire Line
5850 2300 5850 2000
Wire Wire Line
5850 2000 6050 2000
Wire Wire Line
5700 2400 6050 2400
$Comp
L power:GND #PWR05
U 1 1 5D75B49B
P 6550 2400
F 0 "#PWR05" H 6550 2150 50 0001 C CNN
F 1 "GND" H 6555 2227 50 0000 C CNN
F 2 "" H 6550 2400 50 0001 C CNN
F 3 "" H 6550 2400 50 0001 C CNN
1 6550 2400
P 9600 5700
F 0 "#PWR05" H 9600 5450 50 0001 C CNN
F 1 "GND" H 9605 5527 50 0000 C CNN
F 2 "" H 9600 5700 50 0001 C CNN
F 3 "" H 9600 5700 50 0001 C CNN
1 9600 5700
1 0 0 -1
$EndComp
Wire Wire Line
6450 2400 6550 2400
9500 5700 9600 5700
Wire Wire Line
6450 2000 6550 2000
9500 5300 9600 5300
Wire Wire Line
6550 2000 6550 2400
Connection ~ 6550 2400
9600 5300 9600 5700
Connection ~ 9600 5700
Wire Wire Line
6450 1600 6550 1600
9500 4900 9600 4900
Wire Wire Line
6550 1600 6550 2000
Connection ~ 6550 2000
NoConn ~ 5700 3100
NoConn ~ 5700 3200
NoConn ~ 5700 3300
NoConn ~ 5700 3400
9600 4900 9600 5300
Connection ~ 9600 5300
NoConn ~ 5700 4100
NoConn ~ 5700 4200
NoConn ~ 5700 4300
NoConn ~ 5700 4400
NoConn ~ 5700 4500
NoConn ~ 5700 4600
$Comp
L Connector_Generic:Conn_01x04 J3
L Connector_Generic:Conn_01x08 J3
U 1 1 5D7651C5
P 6500 4000
F 0 "J3" H 6650 4050 50 0000 L CNN
F 1 "L298" H 6580 3951 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 6500 4000 50 0001 C CNN
F 3 "~" H 6500 4000 50 0001 C CNN
1 6500 4000
P 9650 3850
F 0 "J3" H 9800 3900 50 0000 L CNN
F 1 "PoluluG2" H 9730 3801 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 9650 3850 50 0001 C CNN
F 3 "~" H 9650 3850 50 0001 C CNN
1 9650 3850
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR014
U 1 1 5D765563
P 6150 4200
F 0 "#PWR014" H 6150 3950 50 0001 C CNN
F 1 "GND" H 6155 4027 50 0000 C CNN
F 2 "" H 6150 4200 50 0001 C CNN
F 3 "" H 6150 4200 50 0001 C CNN
1 6150 4200
P 9000 3550
F 0 "#PWR014" H 9000 3300 50 0001 C CNN
F 1 "GND" H 9005 3377 50 0000 C CNN
F 2 "" H 9000 3550 50 0001 C CNN
F 3 "" H 9000 3550 50 0001 C CNN
1 9000 3550
1 0 0 -1
$EndComp
Wire Wire Line
5700 3900 6300 3900
Wire Wire Line
5700 4000 6300 4000
9000 3550 9450 3550
Text GLabel 5700 2200 2 50 Input ~ 0
LCD-DC
Text GLabel 5700 2300 2 50 Input ~ 0
LCD-RST
Text GLabel 5700 4600 2 50 Input ~ 0
LCD-BL
Text GLabel 5700 3100 2 50 Input ~ 0
M-PWM
Text GLabel 5700 3200 2 50 Input ~ 0
M-DIR
Text GLabel 5700 3300 2 50 Input ~ 0
M-SLP
Text GLabel 5700 3400 2 50 Input ~ 0
M-CS
Text GLabel 5700 4200 2 50 Input ~ 0
BTN-UP
Text GLabel 5700 4400 2 50 Input ~ 0
BTN-MENU
Text GLabel 5700 4500 2 50 Input ~ 0
BTN-DOWN
Text GLabel 9100 4900 0 50 Input ~ 0
BTN-UP
Text GLabel 9100 5300 0 50 Input ~ 0
BTN-MENU
Text GLabel 9100 5700 0 50 Input ~ 0
BTN-DOWN
Text GLabel 9450 4050 0 50 Input ~ 0
M-CS
Text GLabel 9450 3850 0 50 Input ~ 0
M-SLP
Text GLabel 9450 3650 0 50 Input ~ 0
M-DIR
Text GLabel 9450 3750 0 50 Input ~ 0
M-PWM
NoConn ~ 9450 3950
NoConn ~ 9450 4150
$Comp
L power:+5V #PWR013
U 1 1 5D767927
P 6000 4100
F 0 "#PWR013" H 6000 3950 50 0001 C CNN
F 1 "+5V" H 6015 4273 50 0000 C CNN
F 2 "" H 6000 4100 50 0001 C CNN
F 3 "" H 6000 4100 50 0001 C CNN
1 6000 4100
L power:+5V #PWR0101
U 1 1 5E2FA39D
P 9150 4250
F 0 "#PWR0101" H 9150 4100 50 0001 C CNN
F 1 "+5V" H 9165 4423 50 0000 C CNN
F 2 "" H 9150 4250 50 0001 C CNN
F 3 "" H 9150 4250 50 0001 C CNN
1 9150 4250
-1 0 0 1
$EndComp
Wire Wire Line
6000 4100 6300 4100
9450 4250 9150 4250
$Comp
L Connector_Generic:Conn_01x02 J4
U 1 1 5E2FAE20
P 9400 1600
F 0 "J4" H 9479 1592 50 0000 L CNN
F 1 "PWR" H 9479 1501 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 9400 1600 50 0001 C CNN
F 3 "~" H 9400 1600 50 0001 C CNN
1 9400 1600
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0102
U 1 1 5E2FAFB3
P 9100 1700
F 0 "#PWR0102" H 9100 1450 50 0001 C CNN
F 1 "GND" H 9105 1527 50 0000 C CNN
F 2 "" H 9100 1700 50 0001 C CNN
F 3 "" H 9100 1700 50 0001 C CNN
1 9100 1700
1 0 0 -1
$EndComp
Wire Wire Line
6150 4200 6300 4200
9100 1700 9200 1700
Wire Wire Line
9200 1600 8900 1600
$Comp
L power:+12V #PWR0103
U 1 1 5E2FB825
P 8900 1600
F 0 "#PWR0103" H 8900 1450 50 0001 C CNN
F 1 "+12V" H 8915 1773 50 0000 C CNN
F 2 "" H 8900 1600 50 0001 C CNN
F 3 "" H 8900 1600 50 0001 C CNN
1 8900 1600
-1 0 0 1
$EndComp
$Comp
L power:+12V #PWR0104
U 1 1 5E2FBA44
P 1400 900
F 0 "#PWR0104" H 1400 750 50 0001 C CNN
F 1 "+12V" H 1415 1073 50 0000 C CNN
F 2 "" H 1400 900 50 0001 C CNN
F 3 "" H 1400 900 50 0001 C CNN
1 1400 900
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG0101
U 1 1 5E2FBA8B
P 1400 900
F 0 "#FLG0101" H 1400 975 50 0001 C CNN
F 1 "PWR_FLAG" H 1400 1073 50 0000 C CNN
F 2 "" H 1400 900 50 0001 C CNN
F 3 "~" H 1400 900 50 0001 C CNN
1 1400 900
-1 0 0 1
$EndComp
NoConn ~ 5700 3900
NoConn ~ 5700 4000
NoConn ~ 5700 2400
$Comp
L Connector_Generic:Conn_01x07 J5
U 1 1 5E2FE0A5
P 7300 5400
F 0 "J5" H 7379 5392 50 0000 L CNN
F 1 "ST7789" H 7379 5301 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm" H 7300 5400 50 0001 C CNN
F 3 "~" H 7300 5400 50 0001 C CNN
1 7300 5400
1 0 0 -1
$EndComp
Text GLabel 7100 5300 0 50 Input ~ 0
SCK
Text GLabel 7100 5400 0 50 Input ~ 0
MOSI
Text GLabel 7100 5500 0 50 Input ~ 0
LCD-RST
Text GLabel 7100 5600 0 50 Input ~ 0
LCD-DC
$Comp
L power:GND #PWR013
U 1 1 5E2FE81E
P 6450 5100
F 0 "#PWR013" H 6450 4850 50 0001 C CNN
F 1 "GND" H 6455 4927 50 0000 C CNN
F 2 "" H 6450 5100 50 0001 C CNN
F 3 "" H 6450 5100 50 0001 C CNN
1 6450 5100
1 0 0 -1
$EndComp
$Comp
L power:+5V #PWR015
U 1 1 5E2FEBC9
P 6650 5200
F 0 "#PWR015" H 6650 5050 50 0001 C CNN
F 1 "+5V" H 6665 5373 50 0000 C CNN
F 2 "" H 6650 5200 50 0001 C CNN
F 3 "" H 6650 5200 50 0001 C CNN
1 6650 5200
-1 0 0 1
$EndComp
Wire Wire Line
6650 5200 7100 5200
Wire Wire Line
7100 5100 6450 5100
Text GLabel 7100 5700 0 50 Input ~ 0
LCD-BL
$EndSCHEMATC

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
(export (version D)
(design
(source P:\Electronics\DeskControl\pcb\DeskControl.sch)
(date "8-9-2019 20:52:00")
(tool "Eeschema (5.0.1)-3")
(source P:\Electronics\DeskControl\pcb\main\DeskControl.sch)
(date "28-1-2020 11:47:35")
(tool "Eeschema (5.1.5)-3")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title)
@ -19,12 +19,12 @@
(value ATmega328-AU)
(footprint Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm)
(datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf)
(libsource (lib MCU_Microchip_ATmega) (part ATmega328-AU) (description "20MHz, 32kB Flash, 2kB SRAM, 1kB EEPROM, TQFP-32"))
(libsource (lib DeskControl-rescue) (part ATmega328-AU-MCU_Microchip_ATmega) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5D753A97))
(comp (ref J2)
(value SSD1306)
(footprint Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm)
(value VL54L0X)
(footprint Connectors_JST:JST_XH_B04B-XH-A_04x2.50mm_Straight)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
@ -85,32 +85,46 @@
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5D758534))
(comp (ref SW1)
(value SW_Push)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759C24))
(comp (ref SW2)
(value SW_Push)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759CB0))
(comp (ref SW3)
(value SW_Push)
(footprint SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5D759CF0))
(comp (ref J3)
(value L298)
(footprint Pin_Headers:Pin_Header_Straight_1x04_Pitch2.54mm)
(comp (ref J4)
(value PWR)
(footprint DeskControl:YT2099_2P_straight)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(libsource (lib Connector_Generic) (part Conn_01x02) (description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5D7651C5)))
(tstamp 5E2FAE20))
(comp (ref J5)
(value DM-Master)
(footprint Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_02x05_Counter_Clockwise) (description "Generic connector, double row, 02x05, counter clockwise pin numbering scheme (similar to DIP packge numbering), script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5E2FE0A5))
(comp (ref J3)
(value PoluluG2)
(footprint Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x08) (description "Generic connector, single row, 01x08, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5D7651C5))
(comp (ref U2)
(value AMS1117-3.3)
(footprint TO_SOT_Packages_SMD:SOT-223-3_TabPin2)
(datasheet http://www.advanced-monolithic.com/pdf/ds1117.pdf)
(libsource (lib Regulator_Linear) (part AMS1117-3.3) (description "1A Low Dropout regulator, positive, 3.3V fixed output, SOT-223"))
(sheetpath (names /) (tstamps /))
(tstamp 5E364C51)))
(libparts
(libpart (lib Connector_Generic) (part Conn_01x02)
(description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x02))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))))
(libpart (lib Connector_Generic) (part Conn_01x04)
(description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
@ -124,6 +138,23 @@
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))))
(libpart (lib Connector_Generic) (part Conn_01x08)
(description "Generic connector, single row, 01x08, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x08))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))))
(libpart (lib Connector_Generic) (part Conn_02x03_Odd_Even)
(description "Generic connector, double row, 02x03, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
@ -139,55 +170,31 @@
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))))
(libpart (lib Device) (part C)
(description "Unpolarized capacitor")
(libpart (lib Connector_Generic) (part Conn_02x05_Counter_Clockwise)
(description "Generic connector, double row, 02x05, counter clockwise pin numbering scheme (similar to DIP packge numbering), script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp C_*))
(fp Connector*:*_2x??_*))
(fields
(field (name Reference) C)
(field (name Value) C))
(field (name Reference) J)
(field (name Value) Conn_02x05_Counter_Clockwise))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Device) (part Crystal)
(description "Two pin crystal")
(docs ~)
(footprints
(fp Crystal*))
(fields
(field (name Reference) Y)
(field (name Value) Crystal))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))))
(libpart (lib Device) (part R)
(description Resistor)
(docs ~)
(footprints
(fp R_*))
(fields
(field (name Reference) R)
(field (name Value) R))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib MCU_Microchip_ATmega) (part ATmega48A-AU)
(aliases
(alias ATmega48PA-AU)
(alias ATmega88A-AU)
(alias ATmega88PA-AU)
(alias ATmega168A-AU)
(alias ATmega168PA-AU)
(alias ATmega328-AU)
(alias ATmega328P-AU))
(description "20MHz, 4kB Flash, 512B SRAM, 256B EEPROM, TQFP-32")
(docs http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A_88A_168A-Data-Sheet-40002007A.pdf)
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))
(pin (num 9) (name Pin_9) (type passive))
(pin (num 10) (name Pin_10) (type passive))))
(libpart (lib DeskControl-rescue) (part ATmega328-AU-MCU_Microchip_ATmega)
(footprints
(fp TQFP*7x7mm*P0.8mm*))
(fields
(field (name Reference) U)
(field (name Value) ATmega48A-AU)
(field (name Value) ATmega328-AU-MCU_Microchip_ATmega)
(field (name Footprint) Package_QFP:TQFP-32_7x7mm_P0.8mm))
(pins
(pin (num 1) (name PD3) (type 3state))
@ -222,115 +229,193 @@
(pin (num 30) (name PD0) (type 3state))
(pin (num 31) (name PD1) (type 3state))
(pin (num 32) (name PD2) (type 3state))))
(libpart (lib Switch) (part SW_Push)
(description "Push button switch, generic, two pins")
(libpart (lib Device) (part C)
(description "Unpolarized capacitor")
(docs ~)
(footprints
(fp C_*))
(fields
(field (name Reference) SW)
(field (name Value) SW_Push))
(field (name Reference) C)
(field (name Value) C))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Device) (part Crystal)
(description "Two pin crystal")
(docs ~)
(footprints
(fp Crystal*))
(fields
(field (name Reference) Y)
(field (name Value) Crystal))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive)))))
(pin (num 2) (name 2) (type passive))))
(libpart (lib Device) (part R)
(description Resistor)
(docs ~)
(footprints
(fp R_*))
(fields
(field (name Reference) R)
(field (name Value) R))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Regulator_Linear) (part AP1117-15)
(aliases
(alias AP1117-18)
(alias AP1117-25)
(alias AP1117-33)
(alias AP1117-50)
(alias LD1117S33TR_SOT223)
(alias LD1117S12TR_SOT223)
(alias LD1117S18TR_SOT223)
(alias LD1117S25TR_SOT223)
(alias LD1117S50TR_SOT223)
(alias NCP1117-12_SOT223)
(alias NCP1117-1.5_SOT223)
(alias NCP1117-1.8_SOT223)
(alias NCP1117-2.0_SOT223)
(alias NCP1117-2.5_SOT223)
(alias NCP1117-2.85_SOT223)
(alias NCP1117-3.3_SOT223)
(alias NCP1117-5.0_SOT223)
(alias AMS1117-1.5)
(alias AMS1117-1.8)
(alias AMS1117-2.5)
(alias AMS1117-2.85)
(alias AMS1117-3.3)
(alias AMS1117-5.0))
(description "1A Low Dropout regulator, positive, 1.5V fixed output, SOT-223")
(docs http://www.diodes.com/datasheets/AP1117.pdf)
(footprints
(fp SOT?223*TabPin2*))
(fields
(field (name Reference) U)
(field (name Value) AP1117-15)
(field (name Footprint) Package_TO_SOT_SMD:SOT-223-3_TabPin2))
(pins
(pin (num 1) (name GND) (type power_in))
(pin (num 2) (name VO) (type power_out))
(pin (num 3) (name VI) (type power_in)))))
(libraries
(library (logical Connector_Generic)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Connector_Generic.lib"))
(library (logical DeskControl-rescue)
(uri P:\Electronics\DeskControl\pcb\main/DeskControl-rescue.lib))
(library (logical Device)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Device.lib"))
(library (logical MCU_Microchip_ATmega)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/MCU_Microchip_ATmega.lib"))
(library (logical Switch)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Switch.lib")))
(library (logical Regulator_Linear)
(uri "C:\\Program Files\\KiCad\\share\\kicad\\library/Regulator_Linear.lib")))
(nets
(net (code 1) (name +5V)
(node (ref U1) (pin 6))
(node (ref C1) (pin 2))
(node (ref C2) (pin 2))
(node (ref J1) (pin 2))
(node (ref U1) (pin 18))
(node (ref J3) (pin 3))
(node (ref U1) (pin 4))
(node (ref R1) (pin 1))
(node (ref J2) (pin 3)))
(net (code 2) (name RST)
(node (ref U1) (pin 29))
(node (ref R1) (pin 2))
(node (ref J1) (pin 5)))
(net (code 3) (name "Net-(U1-Pad19)")
(node (ref U1) (pin 19)))
(net (code 4) (name "Net-(U1-Pad22)")
(node (ref U1) (pin 22)))
(net (code 5) (name GND)
(node (ref J2) (pin 4))
(node (ref J1) (pin 6))
(node (ref U1) (pin 3))
(node (ref U1) (pin 5))
(node (ref C3) (pin 1))
(net (code 1) (name "Net-(J3-Pad5)")
(node (ref J3) (pin 5)))
(net (code 2) (name "Net-(J3-Pad7)")
(node (ref J3) (pin 7)))
(net (code 3) (name +12V)
(node (ref J4) (pin 1))
(node (ref U2) (pin 3)))
(net (code 4) (name GND)
(node (ref U1) (pin 21))
(node (ref C1) (pin 1))
(node (ref C2) (pin 1))
(node (ref J3) (pin 4))
(node (ref J1) (pin 6))
(node (ref J5) (pin 1))
(node (ref J3) (pin 1))
(node (ref U2) (pin 1))
(node (ref J2) (pin 2))
(node (ref U1) (pin 5))
(node (ref J4) (pin 2))
(node (ref C5) (pin 2))
(node (ref C4) (pin 2))
(node (ref SW3) (pin 2))
(node (ref SW1) (pin 2))
(node (ref SW2) (pin 2)))
(net (code 6) (name "Net-(C5-Pad1)")
(node (ref C5) (pin 1))
(node (ref U1) (pin 8))
(node (ref XTAL1) (pin 1)))
(net (code 7) (name "Net-(C4-Pad1)")
(node (ref XTAL1) (pin 2))
(node (ref U1) (pin 7))
(node (ref C4) (pin 1)))
(net (code 8) (name "Net-(J3-Pad2)")
(node (ref U1) (pin 31))
(node (ref J3) (pin 2)))
(net (code 9) (name "Net-(U1-Pad23)")
(node (ref U1) (pin 23)))
(net (code 10) (name "Net-(U1-Pad24)")
(node (ref U1) (pin 24)))
(net (code 11) (name "Net-(U1-Pad25)")
(node (ref U1) (pin 25)))
(net (code 12) (name "Net-(U1-Pad26)")
(node (ref U1) (pin 26)))
(net (code 13) (name "Net-(U1-Pad32)")
(node (ref C3) (pin 1))
(node (ref C2) (pin 1))
(node (ref C1) (pin 1))
(node (ref U1) (pin 3)))
(net (code 5) (name RST)
(node (ref U1) (pin 29))
(node (ref J1) (pin 5))
(node (ref R1) (pin 2)))
(net (code 6) (name "Net-(U1-Pad32)")
(node (ref U1) (pin 32)))
(net (code 14) (name "Net-(U1-Pad1)")
(node (ref U1) (pin 1)))
(net (code 15) (name "Net-(U1-Pad2)")
(net (code 7) (name "Net-(U1-Pad2)")
(node (ref U1) (pin 2)))
(net (code 16) (name "Net-(U1-Pad9)")
(node (ref U1) (pin 9)))
(net (code 17) (name "Net-(U1-Pad10)")
(node (ref U1) (pin 10)))
(net (code 18) (name "Net-(U1-Pad11)")
(node (ref U1) (pin 11)))
(net (code 19) (name "Net-(J3-Pad1)")
(node (ref U1) (pin 30))
(node (ref J3) (pin 1)))
(net (code 20) (name "Net-(SW2-Pad1)")
(node (ref SW2) (pin 1))
(node (ref U1) (pin 13)))
(net (code 21) (name "Net-(SW3-Pad1)")
(node (ref SW3) (pin 1))
(net (code 8) (name M-PWM)
(node (ref U1) (pin 23))
(node (ref J3) (pin 3)))
(net (code 9) (name "Net-(U1-Pad30)")
(node (ref U1) (pin 30)))
(net (code 10) (name "Net-(U1-Pad31)")
(node (ref U1) (pin 31)))
(net (code 11) (name "Net-(U1-Pad14)")
(node (ref U1) (pin 14)))
(net (code 22) (name "Net-(SW1-Pad1)")
(net (code 12) (name BTN-MENU)
(node (ref J5) (pin 9))
(node (ref U1) (pin 9)))
(net (code 13) (name +3V3)
(node (ref U1) (pin 18))
(node (ref U1) (pin 4))
(node (ref R1) (pin 1))
(node (ref C1) (pin 2))
(node (ref C2) (pin 2))
(node (ref J3) (pin 8))
(node (ref U1) (pin 6))
(node (ref J5) (pin 2))
(node (ref J2) (pin 1))
(node (ref U2) (pin 2))
(node (ref J1) (pin 2)))
(net (code 14) (name BTN-DOWN)
(node (ref J5) (pin 10))
(node (ref U1) (pin 10)))
(net (code 15) (name LCD-BL)
(node (ref J5) (pin 7))
(node (ref U1) (pin 11)))
(net (code 16) (name LCD-DC)
(node (ref U1) (pin 12))
(node (ref SW1) (pin 1)))
(net (code 23) (name MOSI)
(node (ref J5) (pin 6)))
(net (code 17) (name LCD-RST)
(node (ref U1) (pin 13))
(node (ref J5) (pin 5)))
(net (code 18) (name MOSI)
(node (ref J1) (pin 4))
(node (ref U1) (pin 15)))
(net (code 24) (name MISO)
(node (ref J1) (pin 1))
(node (ref U1) (pin 16)))
(net (code 25) (name SCK)
(node (ref U1) (pin 15))
(node (ref J5) (pin 4)))
(net (code 19) (name MISO)
(node (ref U1) (pin 16))
(node (ref J1) (pin 1)))
(net (code 20) (name SCK)
(node (ref U1) (pin 17))
(node (ref J5) (pin 3))
(node (ref J1) (pin 3)))
(net (code 26) (name "Net-(C3-Pad2)")
(node (ref C3) (pin 2))
(node (ref U1) (pin 20)))
(net (code 27) (name SDA)
(net (code 21) (name "Net-(U1-Pad19)")
(node (ref U1) (pin 19)))
(net (code 22) (name "Net-(U1-Pad22)")
(node (ref U1) (pin 22)))
(net (code 23) (name M-DIR)
(node (ref U1) (pin 24))
(node (ref J3) (pin 2)))
(net (code 24) (name M-SLP)
(node (ref J3) (pin 4))
(node (ref U1) (pin 25)))
(net (code 25) (name M-CS)
(node (ref J3) (pin 6))
(node (ref U1) (pin 26)))
(net (code 26) (name SDA)
(node (ref U1) (pin 27))
(node (ref J2) (pin 1)))
(net (code 28) (name SCL)
(node (ref J2) (pin 4)))
(net (code 27) (name SCL)
(node (ref U1) (pin 28))
(node (ref J2) (pin 2)))))
(node (ref J2) (pin 3)))
(net (code 28) (name "Net-(C5-Pad1)")
(node (ref U1) (pin 8))
(node (ref XTAL1) (pin 1))
(node (ref C5) (pin 1)))
(net (code 29) (name "Net-(C4-Pad1)")
(node (ref U1) (pin 7))
(node (ref XTAL1) (pin 2))
(node (ref C4) (pin 1)))
(net (code 30) (name "Net-(C3-Pad2)")
(node (ref U1) (pin 20))
(node (ref C3) (pin 2)))
(net (code 31) (name BTN-UP)
(node (ref U1) (pin 1))
(node (ref J5) (pin 8)))))

249
pcb/main/DeskControl.pro Normal file
View File

@ -0,0 +1,249 @@
update=28-1-2020 10:51:46
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=
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
TrackWidth2=0.5
ViaDiameter1=0.8
ViaDrill1=0.4
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.15
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.15
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0.051
SolderMaskMinWidth=0.25
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=0
[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

579
pcb/main/DeskControl.sch Normal file
View File

@ -0,0 +1,579 @@
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 DeskControl-rescue:ATmega328-AU-MCU_Microchip_ATmega U1
U 1 1 5D753A97
P 3500 3650
F 0 "U1" H 2600 2300 50 0000 C CNN
F 1 "ATmega328-AU" H 2600 2400 50 0000 C CNN
F 2 "Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm" H 3500 3650 50 0001 C CIN
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf" H 3500 3650 50 0001 C CNN
1 3500 3650
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x04 J2
U 1 1 5D753B7C
P 6600 2850
F 0 "J2" H 6679 2842 50 0000 L CNN
F 1 "VL54L0X" H 6679 2751 50 0000 L CNN
F 2 "Connectors_JST:JST_XH_B04B-XH-A_04x2.50mm_Straight" H 6600 2850 50 0001 C CNN
F 3 "~" H 6600 2850 50 0001 C CNN
1 6600 2850
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_02x03_Odd_Even J1
U 1 1 5D753DE7
P 6500 3650
F 0 "J1" H 6550 3967 50 0000 C CNN
F 1 "PROG" H 6550 3876 50 0000 C CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm" H 6500 3650 50 0001 C CNN
F 3 "~" H 6500 3650 50 0001 C CNN
1 6500 3650
1 0 0 -1
$EndComp
Text GLabel 6300 3550 0 50 Input ~ 0
MISO
Text GLabel 6300 3650 0 50 Input ~ 0
SCK
Text GLabel 6300 3750 0 50 Input ~ 0
RST
Text GLabel 6800 3650 2 50 Input ~ 0
MOSI
$Comp
L power:GND #PWR09
U 1 1 5D753EEB
P 6900 3750
F 0 "#PWR09" H 6900 3500 50 0001 C CNN
F 1 "GND" H 6905 3577 50 0000 C CNN
F 2 "" H 6900 3750 50 0001 C CNN
F 3 "" H 6900 3750 50 0001 C CNN
1 6900 3750
1 0 0 -1
$EndComp
Wire Wire Line
6800 3550 6900 3550
Wire Wire Line
6800 3750 6900 3750
$Comp
L power:GND #PWR06
U 1 1 5D753F42
P 6000 2850
F 0 "#PWR06" H 6000 2600 50 0001 C CNN
F 1 "GND" H 6005 2677 50 0000 C CNN
F 2 "" H 6000 2850 50 0001 C CNN
F 3 "" H 6000 2850 50 0001 C CNN
1 6000 2850
1 0 0 -1
$EndComp
Wire Wire Line
6000 2850 6400 2850
Wire Wire Line
6400 2750 6000 2750
Text GLabel 6400 3050 0 50 Input ~ 0
SDA
Text GLabel 6400 2950 0 50 Input ~ 0
SCL
$Comp
L power:GND #PWR03
U 1 1 5D754134
P 900 1450
F 0 "#PWR03" H 900 1200 50 0001 C CNN
F 1 "GND" H 905 1277 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG02
U 1 1 5D754186
P 900 1450
F 0 "#FLG02" H 900 1525 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1624 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "~" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L Device:C C3
U 1 1 5D754323
P 2300 2600
F 0 "C3" H 2185 2554 50 0000 R CNN
F 1 "100nF" H 2185 2645 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 2338 2450 50 0001 C CNN
F 3 "~" H 2300 2600 50 0001 C CNN
1 2300 2600
-1 0 0 1
$EndComp
$Comp
L power:GND #PWR07
U 1 1 5D75441A
P 1750 3000
F 0 "#PWR07" H 1750 2750 50 0001 C CNN
F 1 "GND" H 1755 2827 50 0000 C CNN
F 2 "" H 1750 3000 50 0001 C CNN
F 3 "" H 1750 3000 50 0001 C CNN
1 1750 3000
1 0 0 -1
$EndComp
$Comp
L Device:C C2
U 1 1 5D7545D2
P 1750 2600
F 0 "C2" H 1635 2554 50 0000 R CNN
F 1 "100nF" H 1635 2645 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 1788 2450 50 0001 C CNN
F 3 "~" H 1750 2600 50 0001 C CNN
1 1750 2600
-1 0 0 1
$EndComp
$Comp
L Device:C C1
U 1 1 5D75463E
P 1200 2600
F 0 "C1" H 1085 2554 50 0000 R CNN
F 1 "10uF" H 1085 2645 50 0000 R CNN
F 2 "Capacitors_Tantalum_SMD:CP_Tantalum_Case-D_EIA-7343-31_Reflow" H 1238 2450 50 0001 C CNN
F 3 "~" H 1200 2600 50 0001 C CNN
1 1200 2600
-1 0 0 1
$EndComp
Wire Wire Line
1200 2450 1500 2450
Wire Wire Line
2300 2450 2900 2450
Connection ~ 1500 2450
Wire Wire Line
1500 2450 1750 2450
Wire Wire Line
3600 2150 3600 2000
Wire Wire Line
3600 2000 3500 2000
Wire Wire Line
3500 2000 3500 2150
Wire Wire Line
3500 2000 1500 2000
Connection ~ 3500 2000
Wire Wire Line
2300 2750 2300 2900
Wire Wire Line
2300 2900 1750 2900
Wire Wire Line
1750 2900 1750 3000
Wire Wire Line
1750 2750 1750 2900
Connection ~ 1750 2900
Wire Wire Line
1200 2750 1200 2900
Wire Wire Line
1200 2900 1750 2900
NoConn ~ 2900 2650
NoConn ~ 2900 2750
Wire Wire Line
1500 1650 1500 2000
Connection ~ 1500 2000
Wire Wire Line
1500 2000 1500 2450
$Comp
L Device:C C4
U 1 1 5D75696A
P 5200 2950
F 0 "C4" V 5452 2950 50 0000 C CNN
F 1 "33pF" V 5361 2950 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 5238 2800 50 0001 C CNN
F 3 "~" H 5200 2950 50 0001 C CNN
1 5200 2950
0 -1 -1 0
$EndComp
$Comp
L Device:C C5
U 1 1 5D756A0E
P 5200 3400
F 0 "C5" V 5452 3400 50 0000 C CNN
F 1 "33pF" V 5361 3400 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 5238 3250 50 0001 C CNN
F 3 "~" H 5200 3400 50 0001 C CNN
1 5200 3400
0 -1 -1 0
$EndComp
$Comp
L power:GND #PWR010
U 1 1 5D756A8A
P 5500 3550
F 0 "#PWR010" H 5500 3300 50 0001 C CNN
F 1 "GND" H 5505 3377 50 0000 C CNN
F 2 "" H 5500 3550 50 0001 C CNN
F 3 "" H 5500 3550 50 0001 C CNN
1 5500 3550
1 0 0 -1
$EndComp
Wire Wire Line
5350 3400 5500 3400
Wire Wire Line
5500 3400 5500 3550
Wire Wire Line
5350 2950 5500 2950
Wire Wire Line
5500 2950 5500 3400
Connection ~ 5500 3400
$Comp
L Device:Crystal XTAL1
U 1 1 5D756FAB
P 4900 3200
F 0 "XTAL1" V 4950 3550 50 0000 R CNN
F 1 "16 Mhz" V 4850 3600 50 0000 R CNN
F 2 "Crystals:Crystal_HC49-U_Vertical" H 4900 3200 50 0001 C CNN
F 3 "~" H 4900 3200 50 0001 C CNN
1 4900 3200
0 -1 -1 0
$EndComp
Wire Wire Line
4900 3050 4900 2950
Wire Wire Line
4900 2950 5050 2950
Wire Wire Line
4900 3350 4900 3400
Wire Wire Line
4900 3400 5050 3400
Wire Wire Line
4100 3050 4450 3050
Wire Wire Line
4450 3050 4450 2950
Wire Wire Line
4450 2950 4900 2950
Connection ~ 4900 2950
Wire Wire Line
4100 3150 4450 3150
Wire Wire Line
4450 3150 4450 3400
Wire Wire Line
4450 3400 4900 3400
Connection ~ 4900 3400
Text GLabel 4100 3750 2 50 Input ~ 0
SDA
Text GLabel 4100 3850 2 50 Input ~ 0
SCL
Text GLabel 4100 2750 2 50 Input ~ 0
MOSI
Text GLabel 4100 2850 2 50 Input ~ 0
MISO
Text GLabel 4100 2950 2 50 Input ~ 0
SCK
$Comp
L Device:R R1
U 1 1 5D758534
P 4650 3800
F 0 "R1" H 4720 3846 50 0000 L CNN
F 1 "10k" H 4720 3755 50 0000 L CNN
F 2 "Resistors_SMD:R_0603" V 4580 3800 50 0001 C CNN
F 3 "~" H 4650 3800 50 0001 C CNN
1 4650 3800
1 0 0 -1
$EndComp
Wire Wire Line
4100 3950 4650 3950
Text GLabel 4850 3950 2 50 Input ~ 0
RST
Wire Wire Line
4650 3950 4850 3950
Connection ~ 4650 3950
$Comp
L power:GND #PWR012
U 1 1 5D75920D
P 3500 5150
F 0 "#PWR012" H 3500 4900 50 0001 C CNN
F 1 "GND" H 3505 4977 50 0000 C CNN
F 2 "" H 3500 5150 50 0001 C CNN
F 3 "" H 3500 5150 50 0001 C CNN
1 3500 5150
1 0 0 -1
$EndComp
NoConn ~ 4100 4350
NoConn ~ 4100 4550
$Comp
L power:GND #PWR014
U 1 1 5D765563
P 5950 4250
F 0 "#PWR014" H 5950 4000 50 0001 C CNN
F 1 "GND" H 5955 4077 50 0000 C CNN
F 2 "" H 5950 4250 50 0001 C CNN
F 3 "" H 5950 4250 50 0001 C CNN
1 5950 4250
1 0 0 -1
$EndComp
Wire Wire Line
5950 4250 6400 4250
Text GLabel 4100 2450 2 50 Input ~ 0
LCD-DC
Text GLabel 4100 2550 2 50 Input ~ 0
LCD-RST
Text GLabel 4100 4850 2 50 Input ~ 0
LCD-BL
Text GLabel 4100 3350 2 50 Input ~ 0
M-PWM
Text GLabel 4100 3450 2 50 Input ~ 0
M-DIR
Text GLabel 4100 3550 2 50 Input ~ 0
M-SLP
Text GLabel 4100 3650 2 50 Input ~ 0
M-CS
Text GLabel 4100 4450 2 50 Input ~ 0
BTN-UP
Text GLabel 4100 4650 2 50 Input ~ 0
BTN-MENU
Text GLabel 4100 4750 2 50 Input ~ 0
BTN-DOWN
Text GLabel 6800 1550 2 50 Input ~ 0
BTN-UP
Text GLabel 6800 1450 2 50 Input ~ 0
BTN-MENU
Text GLabel 6800 1350 2 50 Input ~ 0
BTN-DOWN
Text GLabel 6400 4750 0 50 Input ~ 0
M-CS
Text GLabel 6400 4550 0 50 Input ~ 0
M-SLP
Text GLabel 6400 4350 0 50 Input ~ 0
M-DIR
Text GLabel 6400 4450 0 50 Input ~ 0
M-PWM
NoConn ~ 6400 4650
NoConn ~ 6400 4850
Wire Wire Line
6400 4950 5950 4950
$Comp
L Connector_Generic:Conn_01x02 J4
U 1 1 5E2FAE20
P 6600 2200
F 0 "J4" H 6679 2192 50 0000 L CNN
F 1 "PWR" H 6679 2101 50 0000 L CNN
F 2 "DeskControl:YT2099_2P_straight" H 6600 2200 50 0001 C CNN
F 3 "~" H 6600 2200 50 0001 C CNN
1 6600 2200
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0102
U 1 1 5E2FAFB3
P 6300 2300
F 0 "#PWR0102" H 6300 2050 50 0001 C CNN
F 1 "GND" H 6305 2127 50 0000 C CNN
F 2 "" H 6300 2300 50 0001 C CNN
F 3 "" H 6300 2300 50 0001 C CNN
1 6300 2300
1 0 0 -1
$EndComp
Wire Wire Line
6300 2300 6400 2300
Wire Wire Line
6400 2200 6300 2200
$Comp
L power:+12V #PWR0103
U 1 1 5E2FB825
P 6300 2200
F 0 "#PWR0103" H 6300 2050 50 0001 C CNN
F 1 "+12V" H 6315 2373 50 0000 C CNN
F 2 "" H 6300 2200 50 0001 C CNN
F 3 "" H 6300 2200 50 0001 C CNN
1 6300 2200
1 0 0 -1
$EndComp
$Comp
L power:+12V #PWR0104
U 1 1 5E2FBA44
P 900 850
F 0 "#PWR0104" H 900 700 50 0001 C CNN
F 1 "+12V" H 915 1023 50 0000 C CNN
F 2 "" H 900 850 50 0001 C CNN
F 3 "" H 900 850 50 0001 C CNN
1 900 850
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG0101
U 1 1 5E2FBA8B
P 900 850
F 0 "#FLG0101" H 900 925 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1023 50 0000 C CNN
F 2 "" H 900 850 50 0001 C CNN
F 3 "~" H 900 850 50 0001 C CNN
1 900 850
-1 0 0 1
$EndComp
NoConn ~ 4100 4150
NoConn ~ 4100 4250
NoConn ~ 4100 2650
$Comp
L Connector_Generic:Conn_02x05_Counter_Clockwise J5
U 1 1 5E2FE0A5
P 6500 1550
F 0 "J5" H 6500 1900 50 0000 L CNN
F 1 "DM-Master" H 6350 1200 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm" H 6500 1550 50 0001 C CNN
F 3 "~" H 6500 1550 50 0001 C CNN
1 6500 1550
1 0 0 -1
$EndComp
Text GLabel 6300 1550 0 50 Input ~ 0
SCK
Text GLabel 6300 1650 0 50 Input ~ 0
MOSI
Text GLabel 6300 1750 0 50 Input ~ 0
LCD-RST
Text GLabel 6800 1750 2 50 Input ~ 0
LCD-DC
$Comp
L power:GND #PWR013
U 1 1 5E2FE81E
P 5650 1350
F 0 "#PWR013" H 5650 1100 50 0001 C CNN
F 1 "GND" H 5655 1177 50 0000 C CNN
F 2 "" H 5650 1350 50 0001 C CNN
F 3 "" H 5650 1350 50 0001 C CNN
1 5650 1350
1 0 0 -1
$EndComp
Wire Wire Line
5850 1450 6300 1450
Wire Wire Line
6300 1350 5650 1350
Text GLabel 6800 1650 2 50 Input ~ 0
LCD-BL
$Comp
L power:+3.3V #PWR0105
U 1 1 5E300371
P 1500 1650
F 0 "#PWR0105" H 1500 1500 50 0001 C CNN
F 1 "+3.3V" H 1515 1823 50 0000 C CNN
F 2 "" H 1500 1650 50 0001 C CNN
F 3 "" H 1500 1650 50 0001 C CNN
1 1500 1650
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0106
U 1 1 5E30051D
P 6000 2750
F 0 "#PWR0106" H 6000 2600 50 0001 C CNN
F 1 "+3.3V" H 6015 2923 50 0000 C CNN
F 2 "" H 6000 2750 50 0001 C CNN
F 3 "" H 6000 2750 50 0001 C CNN
1 6000 2750
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0107
U 1 1 5E3005E9
P 6900 3550
F 0 "#PWR0107" H 6900 3400 50 0001 C CNN
F 1 "+3.3V" H 6915 3723 50 0000 C CNN
F 2 "" H 6900 3550 50 0001 C CNN
F 3 "" H 6900 3550 50 0001 C CNN
1 6900 3550
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0108
U 1 1 5E300625
P 5950 4950
F 0 "#PWR0108" H 5950 4800 50 0001 C CNN
F 1 "+3.3V" H 5965 5123 50 0000 C CNN
F 2 "" H 5950 4950 50 0001 C CNN
F 3 "" H 5950 4950 50 0001 C CNN
1 5950 4950
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0109
U 1 1 5E301977
P 5850 1450
F 0 "#PWR0109" H 5850 1300 50 0001 C CNN
F 1 "+3.3V" H 5865 1623 50 0000 C CNN
F 2 "" H 5850 1450 50 0001 C CNN
F 3 "" H 5850 1450 50 0001 C CNN
1 5850 1450
-1 0 0 1
$EndComp
$Comp
L power:+3.3V #PWR0110
U 1 1 5E302F90
P 4650 3650
F 0 "#PWR0110" H 4650 3500 50 0001 C CNN
F 1 "+3.3V" H 4665 3823 50 0000 C CNN
F 2 "" H 4650 3650 50 0001 C CNN
F 3 "" H 4650 3650 50 0001 C CNN
1 4650 3650
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x08 J3
U 1 1 5D7651C5
P 6600 4550
F 0 "J3" H 6750 4600 50 0000 L CNN
F 1 "PoluluG2" H 6680 4501 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm" H 6600 4550 50 0001 C CNN
F 3 "~" H 6600 4550 50 0001 C CNN
1 6600 4550
1 0 0 -1
$EndComp
$Comp
L Regulator_Linear:AMS1117-3.3 U2
U 1 1 5E364C51
P 3500 900
F 0 "U2" H 3500 1142 50 0000 C CNN
F 1 "AMS1117-3.3" H 3500 1051 50 0000 C CNN
F 2 "TO_SOT_Packages_SMD:SOT-223-3_TabPin2" H 3500 1100 50 0001 C CNN
F 3 "http://www.advanced-monolithic.com/pdf/ds1117.pdf" H 3600 650 50 0001 C CNN
1 3500 900
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR04
U 1 1 5E36C536
P 3500 1200
F 0 "#PWR04" H 3500 950 50 0001 C CNN
F 1 "GND" H 3505 1027 50 0000 C CNN
F 2 "" H 3500 1200 50 0001 C CNN
F 3 "" H 3500 1200 50 0001 C CNN
1 3500 1200
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR02
U 1 1 5E36CA78
P 3800 900
F 0 "#PWR02" H 3800 750 50 0001 C CNN
F 1 "+3.3V" H 3815 1073 50 0000 C CNN
F 2 "" H 3800 900 50 0001 C CNN
F 3 "" H 3800 900 50 0001 C CNN
1 3800 900
0 1 1 0
$EndComp
$Comp
L power:+12V #PWR01
U 1 1 5E36CE40
P 3200 900
F 0 "#PWR01" H 3200 750 50 0001 C CNN
F 1 "+12V" H 3215 1073 50 0000 C CNN
F 2 "" H 3200 900 50 0001 C CNN
F 3 "" H 3200 900 50 0001 C CNN
1 3200 900
0 -1 -1 0
$EndComp
$EndSCHEMATC

View File

@ -0,0 +1,694 @@
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 DeskControl-rescue:ATmega328-AU-MCU_Microchip_ATmega U1
U 1 1 5D753A97
P 3500 3650
F 0 "U1" H 2600 2300 50 0000 C CNN
F 1 "ATmega328-AU" H 2600 2400 50 0000 C CNN
F 2 "Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm" H 3500 3650 50 0001 C CIN
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf" H 3500 3650 50 0001 C CNN
1 3500 3650
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x04 J2
U 1 1 5D753B7C
P 6600 2850
F 0 "J2" H 6679 2842 50 0000 L CNN
F 1 "VL54L0X" H 6679 2751 50 0000 L CNN
F 2 "Connectors_JST:JST_XH_B04B-XH-A_04x2.50mm_Straight" H 6600 2850 50 0001 C CNN
F 3 "~" H 6600 2850 50 0001 C CNN
1 6600 2850
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_02x03_Odd_Even J1
U 1 1 5D753DE7
P 6500 3650
F 0 "J1" H 6550 3967 50 0000 C CNN
F 1 "PROG" H 6550 3876 50 0000 C CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm" H 6500 3650 50 0001 C CNN
F 3 "~" H 6500 3650 50 0001 C CNN
1 6500 3650
1 0 0 -1
$EndComp
Text GLabel 6300 3550 0 50 Input ~ 0
MISO
Text GLabel 6300 3650 0 50 Input ~ 0
SCK
Text GLabel 6300 3750 0 50 Input ~ 0
RST
Text GLabel 6800 3650 2 50 Input ~ 0
MOSI
$Comp
L power:GND #PWR09
U 1 1 5D753EEB
P 6900 3750
F 0 "#PWR09" H 6900 3500 50 0001 C CNN
F 1 "GND" H 6905 3577 50 0000 C CNN
F 2 "" H 6900 3750 50 0001 C CNN
F 3 "" H 6900 3750 50 0001 C CNN
1 6900 3750
1 0 0 -1
$EndComp
Wire Wire Line
6800 3550 6900 3550
Wire Wire Line
6800 3750 6900 3750
$Comp
L power:GND #PWR06
U 1 1 5D753F42
P 6000 2850
F 0 "#PWR06" H 6000 2600 50 0001 C CNN
F 1 "GND" H 6005 2677 50 0000 C CNN
F 2 "" H 6000 2850 50 0001 C CNN
F 3 "" H 6000 2850 50 0001 C CNN
1 6000 2850
1 0 0 -1
$EndComp
Wire Wire Line
6000 2850 6400 2850
Wire Wire Line
6400 2750 6000 2750
Text GLabel 6400 3050 0 50 Input ~ 0
SDA
Text GLabel 6400 2950 0 50 Input ~ 0
SCL
$Comp
L power:GND #PWR03
U 1 1 5D754134
P 900 1450
F 0 "#PWR03" H 900 1200 50 0001 C CNN
F 1 "GND" H 905 1277 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG02
U 1 1 5D754186
P 900 1450
F 0 "#FLG02" H 900 1525 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1624 50 0000 C CNN
F 2 "" H 900 1450 50 0001 C CNN
F 3 "~" H 900 1450 50 0001 C CNN
1 900 1450
1 0 0 -1
$EndComp
$Comp
L Device:C C3
U 1 1 5D754323
P 2300 2600
F 0 "C3" H 2185 2554 50 0000 R CNN
F 1 "100nF" H 2185 2645 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 2338 2450 50 0001 C CNN
F 3 "~" H 2300 2600 50 0001 C CNN
1 2300 2600
-1 0 0 1
$EndComp
$Comp
L power:GND #PWR07
U 1 1 5D75441A
P 1750 3000
F 0 "#PWR07" H 1750 2750 50 0001 C CNN
F 1 "GND" H 1755 2827 50 0000 C CNN
F 2 "" H 1750 3000 50 0001 C CNN
F 3 "" H 1750 3000 50 0001 C CNN
1 1750 3000
1 0 0 -1
$EndComp
$Comp
L Device:C C2
U 1 1 5D7545D2
P 1750 2600
F 0 "C2" H 1635 2554 50 0000 R CNN
F 1 "100nF" H 1635 2645 50 0000 R CNN
F 2 "Capacitors_SMD:C_1206" H 1788 2450 50 0001 C CNN
F 3 "~" H 1750 2600 50 0001 C CNN
1 1750 2600
-1 0 0 1
$EndComp
$Comp
L Device:C C1
U 1 1 5D75463E
P 1200 2600
F 0 "C1" H 1085 2554 50 0000 R CNN
F 1 "10uF" H 1085 2645 50 0000 R CNN
F 2 "Capacitors_Tantalum_SMD:CP_Tantalum_Case-D_EIA-7343-31_Reflow" H 1238 2450 50 0001 C CNN
F 3 "~" H 1200 2600 50 0001 C CNN
1 1200 2600
-1 0 0 1
$EndComp
Wire Wire Line
1200 2450 1500 2450
Wire Wire Line
2300 2450 2900 2450
Connection ~ 1500 2450
Wire Wire Line
1500 2450 1750 2450
Wire Wire Line
3600 2150 3600 2000
Wire Wire Line
3600 2000 3500 2000
Wire Wire Line
3500 2000 3500 2150
Wire Wire Line
3500 2000 1500 2000
Connection ~ 3500 2000
Wire Wire Line
2300 2750 2300 2900
Wire Wire Line
2300 2900 1750 2900
Wire Wire Line
1750 2900 1750 3000
Wire Wire Line
1750 2750 1750 2900
Connection ~ 1750 2900
Wire Wire Line
1200 2750 1200 2900
Wire Wire Line
1200 2900 1750 2900
NoConn ~ 2900 2650
NoConn ~ 2900 2750
Wire Wire Line
1500 1650 1500 2000
Connection ~ 1500 2000
Wire Wire Line
1500 2000 1500 2450
$Comp
L Device:C C4
U 1 1 5D75696A
P 5200 2950
F 0 "C4" V 5452 2950 50 0000 C CNN
F 1 "33pF" V 5361 2950 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 5238 2800 50 0001 C CNN
F 3 "~" H 5200 2950 50 0001 C CNN
1 5200 2950
0 -1 -1 0
$EndComp
$Comp
L Device:C C5
U 1 1 5D756A0E
P 5200 3400
F 0 "C5" V 5452 3400 50 0000 C CNN
F 1 "33pF" V 5361 3400 50 0000 C CNN
F 2 "Capacitors_SMD:C_1206" H 5238 3250 50 0001 C CNN
F 3 "~" H 5200 3400 50 0001 C CNN
1 5200 3400
0 -1 -1 0
$EndComp
$Comp
L power:GND #PWR010
U 1 1 5D756A8A
P 5500 3550
F 0 "#PWR010" H 5500 3300 50 0001 C CNN
F 1 "GND" H 5505 3377 50 0000 C CNN
F 2 "" H 5500 3550 50 0001 C CNN
F 3 "" H 5500 3550 50 0001 C CNN
1 5500 3550
1 0 0 -1
$EndComp
Wire Wire Line
5350 3400 5500 3400
Wire Wire Line
5500 3400 5500 3550
Wire Wire Line
5350 2950 5500 2950
Wire Wire Line
5500 2950 5500 3400
Connection ~ 5500 3400
$Comp
L Device:Crystal XTAL1
U 1 1 5D756FAB
P 4900 3200
F 0 "XTAL1" V 4950 3550 50 0000 R CNN
F 1 "16 Mhz" V 4850 3600 50 0000 R CNN
F 2 "Crystals:Crystal_HC49-U_Vertical" H 4900 3200 50 0001 C CNN
F 3 "~" H 4900 3200 50 0001 C CNN
1 4900 3200
0 -1 -1 0
$EndComp
Wire Wire Line
4900 3050 4900 2950
Wire Wire Line
4900 2950 5050 2950
Wire Wire Line
4900 3350 4900 3400
Wire Wire Line
4900 3400 5050 3400
Wire Wire Line
4100 3050 4450 3050
Wire Wire Line
4450 3050 4450 2950
Wire Wire Line
4450 2950 4900 2950
Connection ~ 4900 2950
Wire Wire Line
4100 3150 4450 3150
Wire Wire Line
4450 3150 4450 3400
Wire Wire Line
4450 3400 4900 3400
Connection ~ 4900 3400
Text GLabel 4100 3750 2 50 Input ~ 0
SDA
Text GLabel 4100 3850 2 50 Input ~ 0
SCL
Text GLabel 4100 2750 2 50 Input ~ 0
MOSI
Text GLabel 4100 2850 2 50 Input ~ 0
MISO
Text GLabel 4100 2950 2 50 Input ~ 0
SCK
$Comp
L Device:R R1
U 1 1 5D758534
P 4650 3800
F 0 "R1" H 4720 3846 50 0000 L CNN
F 1 "10k" H 4720 3755 50 0000 L CNN
F 2 "Resistors_SMD:R_0603" V 4580 3800 50 0001 C CNN
F 3 "~" H 4650 3800 50 0001 C CNN
1 4650 3800
1 0 0 -1
$EndComp
Wire Wire Line
4100 3950 4650 3950
Text GLabel 4850 3950 2 50 Input ~ 0
RST
Wire Wire Line
4650 3950 4850 3950
Connection ~ 4650 3950
$Comp
L power:GND #PWR012
U 1 1 5D75920D
P 3500 5150
F 0 "#PWR012" H 3500 4900 50 0001 C CNN
F 1 "GND" H 3505 4977 50 0000 C CNN
F 2 "" H 3500 5150 50 0001 C CNN
F 3 "" H 3500 5150 50 0001 C CNN
1 3500 5150
1 0 0 -1
$EndComp
NoConn ~ 4100 4350
NoConn ~ 4100 4550
$Comp
L power:GND #PWR014
U 1 1 5D765563
P 5950 4250
F 0 "#PWR014" H 5950 4000 50 0001 C CNN
F 1 "GND" H 5955 4077 50 0000 C CNN
F 2 "" H 5950 4250 50 0001 C CNN
F 3 "" H 5950 4250 50 0001 C CNN
1 5950 4250
1 0 0 -1
$EndComp
Wire Wire Line
5950 4250 6400 4250
Text GLabel 4100 2450 2 50 Input ~ 0
LCD-DC
Text GLabel 4100 2550 2 50 Input ~ 0
LCD-RST
Text GLabel 4100 4850 2 50 Input ~ 0
LCD-BL
Text GLabel 4100 3350 2 50 Input ~ 0
M-PWM
Text GLabel 4100 3450 2 50 Input ~ 0
M-DIR
Text GLabel 4100 3550 2 50 Input ~ 0
M-SLP
Text GLabel 4100 3650 2 50 Input ~ 0
M-CS
Text GLabel 4100 4450 2 50 Input ~ 0
BTN-UP
Text GLabel 4100 4650 2 50 Input ~ 0
BTN-MENU
Text GLabel 4100 4750 2 50 Input ~ 0
BTN-DOWN
Text GLabel 6800 1550 2 50 Input ~ 0
BTN-UP
Text GLabel 6800 1450 2 50 Input ~ 0
BTN-MENU
Text GLabel 6800 1350 2 50 Input ~ 0
BTN-DOWN
Text GLabel 6400 4750 0 50 Input ~ 0
M-CS
Text GLabel 6400 4550 0 50 Input ~ 0
M-SLP
Text GLabel 6400 4350 0 50 Input ~ 0
M-DIR
Text GLabel 6400 4450 0 50 Input ~ 0
M-PWM
NoConn ~ 6400 4650
NoConn ~ 6400 4850
Wire Wire Line
6400 4950 5950 4950
$Comp
L Connector_Generic:Conn_01x02 J4
U 1 1 5E2FAE20
P 6600 2200
F 0 "J4" H 6679 2192 50 0000 L CNN
F 1 "PWR" H 6679 2101 50 0000 L CNN
F 2 "DeskControl:YT2099_2P_straight" H 6600 2200 50 0001 C CNN
F 3 "~" H 6600 2200 50 0001 C CNN
1 6600 2200
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR0102
U 1 1 5E2FAFB3
P 6300 2300
F 0 "#PWR0102" H 6300 2050 50 0001 C CNN
F 1 "GND" H 6305 2127 50 0000 C CNN
F 2 "" H 6300 2300 50 0001 C CNN
F 3 "" H 6300 2300 50 0001 C CNN
1 6300 2300
1 0 0 -1
$EndComp
Wire Wire Line
6300 2300 6400 2300
Wire Wire Line
6400 2200 6300 2200
$Comp
L power:+12V #PWR0103
U 1 1 5E2FB825
P 6300 2200
F 0 "#PWR0103" H 6300 2050 50 0001 C CNN
F 1 "+12V" H 6315 2373 50 0000 C CNN
F 2 "" H 6300 2200 50 0001 C CNN
F 3 "" H 6300 2200 50 0001 C CNN
1 6300 2200
1 0 0 -1
$EndComp
$Comp
L power:+12V #PWR0104
U 1 1 5E2FBA44
P 900 850
F 0 "#PWR0104" H 900 700 50 0001 C CNN
F 1 "+12V" H 915 1023 50 0000 C CNN
F 2 "" H 900 850 50 0001 C CNN
F 3 "" H 900 850 50 0001 C CNN
1 900 850
1 0 0 -1
$EndComp
$Comp
L power:PWR_FLAG #FLG0101
U 1 1 5E2FBA8B
P 900 850
F 0 "#FLG0101" H 900 925 50 0001 C CNN
F 1 "PWR_FLAG" H 900 1023 50 0000 C CNN
F 2 "" H 900 850 50 0001 C CNN
F 3 "~" H 900 850 50 0001 C CNN
1 900 850
-1 0 0 1
$EndComp
NoConn ~ 4100 4150
NoConn ~ 4100 4250
NoConn ~ 4100 2650
$Comp
L Connector_Generic:Conn_02x05_Counter_Clockwise J5
U 1 1 5E2FE0A5
P 6500 1550
F 0 "J5" H 6500 1900 50 0000 L CNN
F 1 "DM-Master" H 6350 1200 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm" H 6500 1550 50 0001 C CNN
F 3 "~" H 6500 1550 50 0001 C CNN
1 6500 1550
1 0 0 -1
$EndComp
Text GLabel 6300 1550 0 50 Input ~ 0
SCK
Text GLabel 6300 1650 0 50 Input ~ 0
MOSI
Text GLabel 6300 1750 0 50 Input ~ 0
LCD-RST
Text GLabel 6800 1750 2 50 Input ~ 0
LCD-DC
$Comp
L power:GND #PWR013
U 1 1 5E2FE81E
P 5650 1350
F 0 "#PWR013" H 5650 1100 50 0001 C CNN
F 1 "GND" H 5655 1177 50 0000 C CNN
F 2 "" H 5650 1350 50 0001 C CNN
F 3 "" H 5650 1350 50 0001 C CNN
1 5650 1350
1 0 0 -1
$EndComp
Wire Wire Line
5850 1450 6300 1450
Wire Wire Line
6300 1350 5650 1350
Text GLabel 6800 1650 2 50 Input ~ 0
LCD-BL
$Comp
L power:+3.3V #PWR0105
U 1 1 5E300371
P 1500 1650
F 0 "#PWR0105" H 1500 1500 50 0001 C CNN
F 1 "+3.3V" H 1515 1823 50 0000 C CNN
F 2 "" H 1500 1650 50 0001 C CNN
F 3 "" H 1500 1650 50 0001 C CNN
1 1500 1650
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0106
U 1 1 5E30051D
P 6000 2750
F 0 "#PWR0106" H 6000 2600 50 0001 C CNN
F 1 "+3.3V" H 6015 2923 50 0000 C CNN
F 2 "" H 6000 2750 50 0001 C CNN
F 3 "" H 6000 2750 50 0001 C CNN
1 6000 2750
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0107
U 1 1 5E3005E9
P 6900 3550
F 0 "#PWR0107" H 6900 3400 50 0001 C CNN
F 1 "+3.3V" H 6915 3723 50 0000 C CNN
F 2 "" H 6900 3550 50 0001 C CNN
F 3 "" H 6900 3550 50 0001 C CNN
1 6900 3550
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0108
U 1 1 5E300625
P 5950 4950
F 0 "#PWR0108" H 5950 4800 50 0001 C CNN
F 1 "+3.3V" H 5965 5123 50 0000 C CNN
F 2 "" H 5950 4950 50 0001 C CNN
F 3 "" H 5950 4950 50 0001 C CNN
1 5950 4950
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR0109
U 1 1 5E301977
P 5850 1450
F 0 "#PWR0109" H 5850 1300 50 0001 C CNN
F 1 "+3.3V" H 5865 1623 50 0000 C CNN
F 2 "" H 5850 1450 50 0001 C CNN
F 3 "" H 5850 1450 50 0001 C CNN
1 5850 1450
-1 0 0 1
$EndComp
$Comp
L power:+3.3V #PWR0110
U 1 1 5E302F90
P 4650 3650
F 0 "#PWR0110" H 4650 3500 50 0001 C CNN
F 1 "+3.3V" H 4665 3823 50 0000 C CNN
F 2 "" H 4650 3650 50 0001 C CNN
F 3 "" H 4650 3650 50 0001 C CNN
1 4650 3650
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x08 J3
U 1 1 5D7651C5
P 6600 4550
F 0 "J3" H 6750 4600 50 0000 L CNN
F 1 "PoluluG2" H 6680 4501 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_1x08_Pitch2.54mm" H 6600 4550 50 0001 C CNN
F 3 "~" H 6600 4550 50 0001 C CNN
1 6600 4550
1 0 0 -1
$EndComp
Wire Wire Line
10100 1350 10200 1350
Wire Wire Line
10200 1350 10200 1750
Wire Wire Line
10200 1750 10200 2150
Connection ~ 10200 1750
Wire Wire Line
10100 1750 10200 1750
Wire Wire Line
10100 2150 10200 2150
$Comp
L Switch:SW_Push SW3
U 1 1 5D759CF0
P 9900 2150
F 0 "SW3" H 9900 2435 50 0000 C CNN
F 1 "Up" H 9900 2344 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9900 2350 50 0001 C CNN
F 3 "" H 9900 2350 50 0001 C CNN
1 9900 2150
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW2
U 1 1 5D759CB0
P 9900 1750
F 0 "SW2" H 9900 2035 50 0000 C CNN
F 1 "Menu" H 9900 1944 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9900 1950 50 0001 C CNN
F 3 "" H 9900 1950 50 0001 C CNN
1 9900 1750
1 0 0 -1
$EndComp
$Comp
L Switch:SW_Push SW1
U 1 1 5D759C24
P 9900 1350
F 0 "SW1" H 9900 1635 50 0000 C CNN
F 1 "Down" H 9900 1544 50 0000 C CNN
F 2 "SMD-BUTTON:SW4-SMD-5.2X5.2X1.5MM" H 9900 1550 50 0001 C CNN
F 3 "" H 9900 1550 50 0001 C CNN
1 9900 1350
1 0 0 -1
$EndComp
Text GLabel 8400 1550 0 50 Input ~ 0
DM_SCK
Text GLabel 8400 1650 0 50 Input ~ 0
DM_MOSI
Text GLabel 8400 1750 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 8900 1750 2 50 Input ~ 0
DM_LCD-DC
Text GLabel 8900 1650 2 50 Input ~ 0
DM_LCD-BL
$Comp
L Connector_Generic:Conn_02x05_Counter_Clockwise J6
U 1 1 5E3531D6
P 8700 1550
F 0 "J6" H 8700 1900 50 0000 L CNN
F 1 "DM-Slave" H 8550 1200 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Straight_2x05_Pitch2.54mm" H 8700 1550 50 0001 C CNN
F 3 "~" H 8700 1550 50 0001 C CNN
1 8700 1550
-1 0 0 -1
$EndComp
Wire Wire Line
8900 1350 9700 1350
Wire Wire Line
8900 1450 9650 1450
Wire Wire Line
9650 1450 9650 1750
Wire Wire Line
9650 1750 9700 1750
Wire Wire Line
8900 1550 9550 1550
Wire Wire Line
9550 1550 9550 2150
Wire Wire Line
9550 2150 9700 2150
Connection ~ 10200 2150
$Comp
L Regulator_Linear:AMS1117-3.3 U2
U 1 1 5E364C51
P 3500 900
F 0 "U2" H 3500 1142 50 0000 C CNN
F 1 "AMS1117-3.3" H 3500 1051 50 0000 C CNN
F 2 "TO_SOT_Packages_SMD:SOT-223-3_TabPin2" H 3500 1100 50 0001 C CNN
F 3 "http://www.advanced-monolithic.com/pdf/ds1117.pdf" H 3600 650 50 0001 C CNN
1 3500 900
1 0 0 -1
$EndComp
$Comp
L power:GND #PWR04
U 1 1 5E36C536
P 3500 1200
F 0 "#PWR04" H 3500 950 50 0001 C CNN
F 1 "GND" H 3505 1027 50 0000 C CNN
F 2 "" H 3500 1200 50 0001 C CNN
F 3 "" H 3500 1200 50 0001 C CNN
1 3500 1200
1 0 0 -1
$EndComp
$Comp
L power:+3.3V #PWR02
U 1 1 5E36CA78
P 3800 900
F 0 "#PWR02" H 3800 750 50 0001 C CNN
F 1 "+3.3V" H 3815 1073 50 0000 C CNN
F 2 "" H 3800 900 50 0001 C CNN
F 3 "" H 3800 900 50 0001 C CNN
1 3800 900
0 1 1 0
$EndComp
$Comp
L power:+12V #PWR01
U 1 1 5E36CE40
P 3200 900
F 0 "#PWR01" H 3200 750 50 0001 C CNN
F 1 "+12V" H 3215 1073 50 0000 C CNN
F 2 "" H 3200 900 50 0001 C CNN
F 3 "" H 3200 900 50 0001 C CNN
1 3200 900
0 -1 -1 0
$EndComp
$Comp
L Connector:Conn_01x07_Female J7
U 1 1 5E37279C
P 9250 2450
F 0 "J7" H 9278 2476 50 0000 L CNN
F 1 "ST7789" H 9278 2385 50 0000 L CNN
F 2 "Pin_Headers:Pin_Header_Angled_1x07_Pitch2.54mm" H 9250 2450 50 0001 C CNN
F 3 "~" H 9250 2450 50 0001 C CNN
1 9250 2450
1 0 0 -1
$EndComp
Wire Wire Line
10200 2300 10200 2150
Text GLabel 8400 1450 0 50 Input ~ 0
DM_3v3
Text Notes 8400 900 0 50 ~ 0
Display / Buttons Module (DM)
Text GLabel 8400 1350 0 50 Input ~ 0
DM_GND
Text GLabel 10200 2300 2 50 Input ~ 0
DM_GND
Text GLabel 9050 2150 0 50 Input ~ 0
DM_GND
Text GLabel 9050 2250 0 50 Input ~ 0
DM_3v3
Text GLabel 9050 2350 0 50 Input ~ 0
DM_SCK
Text GLabel 9050 2450 0 50 Input ~ 0
DM_MOSI
Text GLabel 9050 2550 0 50 Input ~ 0
DM_LCD-RST
Text GLabel 9050 2650 0 50 Input ~ 0
DM_LCD-DC
Text GLabel 9050 2750 0 50 Input ~ 0
DM_LCD-BL
$EndSCHEMATC

48602
pcb/main/fp-info-cache Normal file

File diff suppressed because it is too large Load Diff

4
pcb/main/fp-lib-table Normal file
View File

@ -0,0 +1,4 @@
(fp_lib_table
(lib (name SMD-BUTTON)(type KiCad)(uri ${KIPRJMOD}/../lib/SMD-BUTTON.pretty)(options "")(descr ""))
(lib (name DeskControl)(type KiCad)(uri ${KIPRJMOD}/../lib/DeskControl.pretty)(options "")(descr ""))
)

4
pcb/main/sym-lib-table Normal file
View File

@ -0,0 +1,4 @@
(sym_lib_table
(lib (name DeskControl-rescue)(type Legacy)(uri ${KIPRJMOD}/DeskControl-rescue.lib)(options "")(descr ""))
(lib (name AMS1117-5.0)(type Legacy)(uri ${KIPRJMOD}/../lib/AMS1117-5.0.lib)(options "")(descr ""))
)

View File

@ -1,3 +0,0 @@
(sym_lib_table
(lib (name SMD-BUTTON_4P-5.2X5.2X1.5MM-SKQGAKE010_)(type Legacy)(uri ${KIPRJMOD}/lib/SMD-BUTTON_4P-5.2X5.2X1.5MM-SKQGAKE010_.lib)(options "")(descr ""))
)

48
platformio.ini Normal file
View File

@ -0,0 +1,48 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; http://docs.platformio.org/page/projectconf.html
[platformio]
default_envs = uno
[env]
lib_deps =
Bounce2
Adafruit GFX Library
Adafruit ST7735 and ST7789 Library
[env:uno]
platform = atmelavr
board = uno
framework = arduino
upload_port = COM3
[env:atmega328]
platform = atmelavr
board = pro8MHzatmega328
board_build.f_cpu = 8000000L
framework = arduino
upload_protocol = usbtiny
upload_flags = -e
upload_speed = 19200
; This environment is not actually one I use for the hardware, but
; PlatformIO's Home includes a very useful Inspect feature that
; requires a debug build. These builds are significantly larger and
; will cause the build to fail on the "checkprogsize" step.
; Targetting a microprocessor with more space allows the build to succeed.
[env:platformio-home-debug]
platform = atmelavr
board = atmega2560
framework = arduino

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,480 @@
const uint8_t FreeSansBold18pt7bBitmaps[] PROGMEM = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE7, 0x39, 0xCE, 0x73, 0x80,
0x0F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xC7, 0xFE, 0x3F, 0xF1, 0xFF, 0x8F,
0xFC, 0x7D, 0xC1, 0xCE, 0x0E, 0x70, 0x70, 0x03, 0xC3, 0x80, 0x3C, 0x78,
0x03, 0xC7, 0x80, 0x38, 0x78, 0x07, 0x87, 0x07, 0xFF, 0xFF, 0x7F, 0xFF,
0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xF0, 0xF0, 0xE0, 0x0F, 0x0E, 0x00, 0xF1,
0xE0, 0x0F, 0x1E, 0x00, 0xE1, 0xE0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF,
0xFF, 0xCF, 0xFF, 0xFC, 0x1C, 0x3C, 0x03, 0xC3, 0x80, 0x3C, 0x78, 0x03,
0xC7, 0x80, 0x38, 0x78, 0x03, 0x87, 0x80, 0x00, 0x60, 0x00, 0x7F, 0x80,
0x3F, 0xFC, 0x0F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0xDF, 0x9F, 0x19, 0xFB,
0xC3, 0x1F, 0x78, 0x63, 0xEF, 0x8C, 0x01, 0xFD, 0x80, 0x1F, 0xF0, 0x01,
0xFF, 0xC0, 0x1F, 0xFE, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x67, 0xE0,
0x0C, 0x7F, 0xE1, 0x8F, 0xFC, 0x31, 0xFF, 0xC6, 0x3E, 0xFC, 0xDF, 0x9F,
0xFF, 0xF1, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0x7F, 0x80, 0x01, 0x80, 0x00,
0x30, 0x00, 0x06, 0x00, 0x0F, 0x00, 0x1C, 0x01, 0xFE, 0x00, 0xE0, 0x1F,
0xF8, 0x0E, 0x00, 0xFF, 0xC0, 0x70, 0x0F, 0x0F, 0x07, 0x00, 0x70, 0x38,
0x38, 0x03, 0x81, 0xC3, 0x80, 0x1C, 0x0E, 0x3C, 0x00, 0xF0, 0xF1, 0xC0,
0x03, 0xFF, 0x1C, 0x00, 0x1F, 0xF8, 0xE0, 0x00, 0x7F, 0x8E, 0x00, 0x00,
0xF0, 0x70, 0xF8, 0x00, 0x07, 0x1F, 0xF0, 0x00, 0x39, 0xFF, 0xC0, 0x03,
0x8F, 0xFE, 0x00, 0x1C, 0xF0, 0x78, 0x01, 0xC7, 0x01, 0xC0, 0x0C, 0x38,
0x0E, 0x00, 0xE1, 0xC0, 0x70, 0x06, 0x0F, 0x07, 0x80, 0x70, 0x3F, 0xF8,
0x07, 0x01, 0xFF, 0xC0, 0x38, 0x07, 0xFC, 0x03, 0x80, 0x0F, 0x80, 0x01,
0xF0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x1F, 0x1E,
0x00, 0x7C, 0x78, 0x01, 0xF1, 0xE0, 0x07, 0xE7, 0x80, 0x0F, 0xBC, 0x00,
0x1F, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xF0, 0xF0, 0xFF,
0xE3, 0xC7, 0xE7, 0xCF, 0x3F, 0x0F, 0xF8, 0xF8, 0x3F, 0xE3, 0xE0, 0x7F,
0x8F, 0x80, 0xFC, 0x3F, 0x03, 0xF0, 0x7E, 0x3F, 0xE1, 0xFF, 0xFF, 0x83,
0xFF, 0xFF, 0x07, 0xFE, 0x7E, 0x07, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFD,
0xCE, 0x70, 0x07, 0x87, 0x83, 0xC3, 0xC1, 0xE1, 0xE0, 0xF0, 0x78, 0x78,
0x3C, 0x1E, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
0x0F, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x1E, 0x0F, 0x03, 0x81, 0xE0, 0x70,
0x3C, 0x0E, 0x07, 0x80, 0xF0, 0x38, 0x1E, 0x07, 0x83, 0xC0, 0xF0, 0x78,
0x3C, 0x0F, 0x07, 0x83, 0xC0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
0xC1, 0xE0, 0xF0, 0x78, 0x78, 0x3C, 0x1E, 0x0F, 0x0F, 0x07, 0x87, 0x83,
0xC1, 0xC1, 0xE0, 0xE0, 0xF0, 0x00, 0x06, 0x00, 0x60, 0x06, 0x07, 0x6E,
0x7F, 0xE3, 0xFC, 0x0F, 0x01, 0xF8, 0x1F, 0x83, 0x9C, 0x10, 0x80, 0x03,
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x03,
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x8C, 0x63,
0x37, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x80, 0x01,
0x81, 0xC0, 0xC0, 0x60, 0x70, 0x38, 0x18, 0x0C, 0x0E, 0x06, 0x03, 0x01,
0x81, 0xC0, 0xC0, 0x60, 0x30, 0x38, 0x18, 0x0C, 0x0E, 0x07, 0x03, 0x01,
0x81, 0xC0, 0xC0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0xFF,
0xC7, 0xE3, 0xF3, 0xE0, 0xF9, 0xF0, 0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC,
0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F,
0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3,
0xF1, 0xFF, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x01, 0xC0,
0xF0, 0x3C, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xF0, 0x7C,
0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07,
0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC0, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF,
0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8,
0x0F, 0x80, 0x07, 0xC0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xF0, 0x03, 0xF0,
0x07, 0xF0, 0x07, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0,
0x03, 0xE0, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF, 0x80,
0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xCF, 0xC3, 0xF7, 0xC0,
0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x80,
0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F,
0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, 0xC3, 0xF3, 0xFF, 0xF8, 0xFF,
0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC,
0x01, 0xFC, 0x03, 0xFC, 0x07, 0x7C, 0x07, 0x7C, 0x0E, 0x7C, 0x0E, 0x7C,
0x1C, 0x7C, 0x18, 0x7C, 0x38, 0x7C, 0x70, 0x7C, 0x60, 0x7C, 0xE0, 0x7C,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x7C,
0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x1F, 0xFF, 0x0F, 0xFF,
0x8F, 0xFF, 0xC7, 0xFF, 0xE3, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70,
0x00, 0x79, 0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0xFF, 0xE7, 0xC3, 0xF0,
0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xFE, 0x03,
0xFF, 0x03, 0xFF, 0xC3, 0xF3, 0xFF, 0xF1, 0xFF, 0xF8, 0x3F, 0xF0, 0x07,
0xE0, 0x00, 0x03, 0xF8, 0x03, 0xFF, 0x81, 0xFF, 0xF0, 0xFF, 0xFE, 0x3E,
0x1F, 0x9F, 0x03, 0xE7, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0xF8, 0x3E, 0xFF,
0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFE, 0x1F, 0xBF, 0x03, 0xFF, 0x80, 0x7F,
0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, 0x80, 0x7D, 0xF0, 0x3E, 0x7E,
0x1F, 0x8F, 0xFF, 0xC1, 0xFF, 0xF0, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0xF8,
0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1E,
0x00, 0x1F, 0x00, 0x0F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x03,
0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3E, 0x00,
0x1F, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xE0, 0x07, 0xFC, 0x0F, 0xFF, 0x07,
0xFF, 0xC7, 0xC3, 0xF3, 0xC0, 0xF9, 0xE0, 0x3C, 0xF0, 0x1E, 0x78, 0x1F,
0x1E, 0x1F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xF1, 0xF9, 0xF0,
0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7,
0xC3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07,
0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xC7, 0xE3, 0xF7, 0xE0, 0xFB,
0xE0, 0x3D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83,
0xF7, 0xE3, 0xFB, 0xFF, 0xFC, 0xFF, 0xFE, 0x3F, 0xDF, 0x07, 0xCF, 0x80,
0x07, 0x80, 0x03, 0xDF, 0x03, 0xE7, 0xC3, 0xE3, 0xFF, 0xF0, 0xFF, 0xF0,
0x3F, 0xF0, 0x07, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0xC6, 0x33, 0x9B, 0xD8, 0x00, 0x00, 0xC0, 0x00,
0xF0, 0x01, 0xFC, 0x03, 0xFF, 0x03, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x03,
0xF8, 0x00, 0xF0, 0x00, 0x3F, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x07,
0xFF, 0x00, 0x3F, 0xF0, 0x01, 0xFC, 0x00, 0x1F, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF0, 0xC0, 0x00, 0x3C, 0x00, 0x0F, 0xE0, 0x03, 0xFF, 0x00, 0x3F, 0xF0,
0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0x00, 0x03, 0xC0, 0x07, 0xF0,
0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF8, 0x3F, 0xF0, 0x0F, 0xE0, 0x03, 0xC0,
0x00, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xFF, 0xF1, 0xFF,
0xFC, 0x7E, 0x3F, 0xBF, 0x03, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07,
0xC0, 0x03, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80,
0x1F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0,
0x00, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00,
0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x07, 0xF0, 0x03, 0xE0, 0x01, 0xF8, 0x07,
0x80, 0x00, 0x7C, 0x0F, 0x00, 0x00, 0x3C, 0x1E, 0x03, 0xE3, 0x9E, 0x3C,
0x0F, 0xF7, 0x8E, 0x38, 0x1F, 0xFF, 0x0E, 0x78, 0x3E, 0x1F, 0x07, 0x70,
0x38, 0x0F, 0x07, 0x70, 0x78, 0x0F, 0x07, 0xE0, 0x70, 0x0E, 0x07, 0xE0,
0x70, 0x0E, 0x07, 0xE0, 0xE0, 0x0E, 0x07, 0xE0, 0xE0, 0x1E, 0x0F, 0xE0,
0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x3C, 0x1E, 0xE0, 0xF0, 0x3C, 0x3C, 0xF0,
0xF0, 0xFC, 0x7C, 0x70, 0x7F, 0xFF, 0xF8, 0x78, 0x3F, 0xCF, 0xF0, 0x3C,
0x1F, 0x07, 0xC0, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0F,
0xC0, 0x01, 0x00, 0x07, 0xF0, 0x0F, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F,
0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x01, 0xFF,
0x80, 0x01, 0xFF, 0x80, 0x01, 0xF7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7,
0xC0, 0x03, 0xE3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC1,
0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF,
0xF8, 0x1F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x3E, 0x00, 0x7C, 0x3E, 0x00,
0x7E, 0x3E, 0x00, 0x3E, 0x7C, 0x00, 0x3E, 0x7C, 0x00, 0x3F, 0x7C, 0x00,
0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xF8,
0x07, 0xEF, 0x80, 0x3E, 0xF8, 0x03, 0xEF, 0x80, 0x3E, 0xF8, 0x03, 0xEF,
0x80, 0x3E, 0xF8, 0x07, 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8,
0xFF, 0xFF, 0xCF, 0x80, 0x7E, 0xF8, 0x01, 0xEF, 0x80, 0x1F, 0xF8, 0x01,
0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xEF, 0xFF,
0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x80,
0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0xC3, 0xF8, 0x1F, 0x87, 0xE0, 0x1F, 0x9F,
0x80, 0x1F, 0x3E, 0x00, 0x1F, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xE0,
0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00,
0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x7D, 0xF0, 0x00,
0xFB, 0xF0, 0x03, 0xF3, 0xF0, 0x0F, 0xC7, 0xF0, 0x3F, 0x87, 0xFF, 0xFE,
0x07, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x01, 0xFE, 0x00, 0xFF, 0xFC, 0x07,
0xFF, 0xF8, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x8F, 0x80, 0xFE, 0x7C, 0x01,
0xF3, 0xE0, 0x07, 0xDF, 0x00, 0x3E, 0xF8, 0x01, 0xF7, 0xC0, 0x07, 0xFE,
0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x7F, 0xE0, 0x03,
0xFF, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7D, 0xF0,
0x03, 0xEF, 0x80, 0x3E, 0x7C, 0x07, 0xF3, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0,
0xFF, 0xFF, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF,
0xFF, 0x7F, 0xFF, 0xEF, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0,
0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7F, 0xFF, 0xCF, 0xFF,
0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00,
0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0,
0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0xFF, 0xEF, 0xFF, 0xF7,
0xFF, 0xFB, 0xFF, 0xFD, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00,
0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8,
0x00, 0x7C, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xE0, 0x07, 0xFF,
0xF8, 0x0F, 0xFF, 0xFC, 0x1F, 0xC0, 0xFE, 0x3F, 0x00, 0x7E, 0x7E, 0x00,
0x3F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00,
0x00, 0xF8, 0x00, 0x00, 0xF8, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, 0x03,
0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0x7C, 0x00, 0x1F, 0x7C, 0x00,
0x1F, 0x7E, 0x00, 0x3F, 0x3F, 0x00, 0x7F, 0x1F, 0xC1, 0xFF, 0x0F, 0xFF,
0xFF, 0x07, 0xFF, 0xE7, 0x03, 0xFF, 0xC7, 0x00, 0xFF, 0x07, 0xF8, 0x01,
0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80,
0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xFF,
0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F,
0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01,
0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0x00, 0x1F,
0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F,
0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F,
0x00, 0x1F, 0x00, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F,
0xF8, 0x1F, 0xFC, 0x3F, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0,
0xF8, 0x01, 0xFB, 0xE0, 0x0F, 0xCF, 0x80, 0x7E, 0x3E, 0x03, 0xF0, 0xF8,
0x1F, 0x83, 0xE0, 0xFC, 0x0F, 0x87, 0xE0, 0x3E, 0x3F, 0x00, 0xF8, 0xF8,
0x03, 0xE7, 0xE0, 0x0F, 0xBF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xF0, 0x03,
0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0xBF, 0x00, 0xFC, 0x7E, 0x03, 0xE0,
0xFC, 0x0F, 0x81, 0xF8, 0x3E, 0x07, 0xE0, 0xF8, 0x0F, 0xC3, 0xE0, 0x1F,
0x8F, 0x80, 0x7F, 0x3E, 0x00, 0xFC, 0xF8, 0x01, 0xFB, 0xE0, 0x03, 0xF0,
0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0,
0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F,
0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00,
0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0xFF, 0xFF,
0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x81, 0xFF, 0xFF,
0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFB, 0xC3, 0xDF, 0xFB,
0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xF9, 0xC7, 0xDF, 0xF9,
0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF8,
0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8,
0x7F, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8,
0x3E, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x1F, 0xFE, 0x01, 0xFF, 0xE0, 0x1F,
0xFF, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x81, 0xFF, 0xF8, 0x1F, 0xFF, 0xC1,
0xFF, 0xBC, 0x1F, 0xFB, 0xE1, 0xFF, 0x9F, 0x1F, 0xF9, 0xF1, 0xFF, 0x8F,
0x9F, 0xF8, 0x79, 0xFF, 0x87, 0xDF, 0xF8, 0x3D, 0xFF, 0x83, 0xFF, 0xF8,
0x1F, 0xFF, 0x81, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x07, 0xFF,
0x80, 0x3F, 0xF8, 0x03, 0xFF, 0x80, 0x1F, 0x00, 0x7F, 0x00, 0x01, 0xFF,
0xF0, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFC, 0x1F, 0xC1, 0xF8,
0x03, 0xF1, 0xF8, 0x00, 0xFC, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x7C,
0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF,
0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F,
0xBE, 0x00, 0x0F, 0x9F, 0x00, 0x07, 0xCF, 0xC0, 0x07, 0xE3, 0xF0, 0x07,
0xE0, 0xFE, 0x0F, 0xE0, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x03, 0xFF,
0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE,
0x7F, 0xFF, 0xEF, 0x80, 0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x1F,
0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x1F, 0xFC, 0x07, 0xEF, 0xFF, 0xFD,
0xFF, 0xFF, 0x3F, 0xFF, 0xC7, 0xFF, 0xE0, 0xF8, 0x00, 0x1F, 0x00, 0x03,
0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07,
0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFF,
0xF0, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFC, 0x1F, 0xC1, 0xF8,
0x03, 0xF1, 0xF8, 0x00, 0xFC, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x7C,
0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF,
0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x01, 0x0F,
0xBE, 0x01, 0xCF, 0x9F, 0x01, 0xFF, 0xCF, 0xC0, 0x7F, 0xE3, 0xF0, 0x1F,
0xE0, 0xFE, 0x0F, 0xF0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0x03, 0xFF,
0xEF, 0x80, 0x3F, 0xC3, 0x80, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0xFF,
0xFE, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xCF, 0x80, 0x3F, 0x7C, 0x00, 0xFB,
0xE0, 0x07, 0xDF, 0x00, 0x3E, 0xF8, 0x01, 0xF7, 0xC0, 0x0F, 0x3E, 0x00,
0xF9, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF, 0x1F,
0x00, 0xFC, 0xF8, 0x03, 0xE7, 0xC0, 0x1F, 0x3E, 0x00, 0xF9, 0xF0, 0x07,
0xCF, 0x80, 0x3E, 0x7C, 0x01, 0xF3, 0xE0, 0x0F, 0x9F, 0x00, 0x7C, 0xF8,
0x03, 0xF7, 0xC0, 0x0F, 0xC0, 0x07, 0xF8, 0x01, 0xFF, 0xF0, 0x3F, 0xFF,
0x87, 0xFF, 0xFC, 0x7E, 0x0F, 0xCF, 0xC0, 0x7E, 0xF8, 0x03, 0xEF, 0x80,
0x3E, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x3F,
0xFF, 0x81, 0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0x00, 0x03, 0xF0,
0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x03, 0xFF, 0xE0, 0x7E,
0x7F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x00, 0x3F, 0xC0, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x03, 0xE0,
0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0,
0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80,
0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00,
0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00,
0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01,
0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80,
0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8,
0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF,
0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC,
0x0F, 0xFF, 0x00, 0x3F, 0xC0, 0xF8, 0x00, 0xFB, 0xE0, 0x03, 0xE7, 0xC0,
0x1F, 0x9F, 0x00, 0x7C, 0x7C, 0x01, 0xF0, 0xF8, 0x07, 0xC3, 0xE0, 0x3E,
0x0F, 0x80, 0xF8, 0x1E, 0x03, 0xE0, 0x7C, 0x1F, 0x01, 0xF0, 0x7C, 0x03,
0xC1, 0xF0, 0x0F, 0x87, 0x80, 0x3E, 0x3E, 0x00, 0xF8, 0xF8, 0x01, 0xE3,
0xC0, 0x07, 0xCF, 0x00, 0x1F, 0x7C, 0x00, 0x3D, 0xE0, 0x00, 0xFF, 0x80,
0x03, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00,
0xF8, 0x00, 0x03, 0xE0, 0x00, 0xF8, 0x07, 0xC0, 0x3F, 0xF8, 0x07, 0xE0,
0x3E, 0xFC, 0x07, 0xE0, 0x3E, 0x7C, 0x0F, 0xE0, 0x3E, 0x7C, 0x0F, 0xE0,
0x7E, 0x7C, 0x0F, 0xE0, 0x7C, 0x7C, 0x0F, 0xF0, 0x7C, 0x3E, 0x0F, 0xF0,
0x7C, 0x3E, 0x1E, 0xF0, 0x78, 0x3E, 0x1E, 0x70, 0xF8, 0x1E, 0x1E, 0x70,
0xF8, 0x1E, 0x1E, 0x78, 0xF8, 0x1F, 0x1E, 0x78, 0xF0, 0x1F, 0x3C, 0x78,
0xF0, 0x0F, 0x3C, 0x39, 0xF0, 0x0F, 0x3C, 0x3D, 0xF0, 0x0F, 0x3C, 0x3D,
0xE0, 0x0F, 0xBC, 0x3D, 0xE0, 0x07, 0xF8, 0x3D, 0xE0, 0x07, 0xF8, 0x1F,
0xE0, 0x07, 0xF8, 0x1F, 0xC0, 0x03, 0xF8, 0x1F, 0xC0, 0x03, 0xF8, 0x1F,
0xC0, 0x03, 0xF0, 0x0F, 0x80, 0x03, 0xF0, 0x0F, 0x80, 0x01, 0xF0, 0x0F,
0x80, 0xFE, 0x01, 0xF9, 0xF8, 0x07, 0xE3, 0xF0, 0x3F, 0x0F, 0xC0, 0xF8,
0x1F, 0x87, 0xE0, 0x7E, 0x3F, 0x00, 0xFC, 0xFC, 0x01, 0xF7, 0xE0, 0x07,
0xFF, 0x00, 0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0xFC,
0x00, 0x07, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0x00,
0x1F, 0x7E, 0x00, 0xFC, 0xF8, 0x03, 0xE3, 0xF0, 0x1F, 0x87, 0xC0, 0x7C,
0x1F, 0x83, 0xF0, 0x3F, 0x1F, 0x80, 0xFC, 0x7E, 0x01, 0xFB, 0xF0, 0x07,
0xF0, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0x9F, 0x00, 0xFC, 0xFC, 0x07, 0xC3,
0xE0, 0x7E, 0x1F, 0x83, 0xE0, 0x7C, 0x1F, 0x03, 0xF1, 0xF0, 0x0F, 0x8F,
0x80, 0x7E, 0xF8, 0x01, 0xF7, 0xC0, 0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00,
0xFE, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0,
0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03,
0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7E, 0x00, 0x1F,
0x80, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF8,
0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00,
0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01,
0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38, 0x06,
0x01, 0x80, 0x70, 0x0C, 0x03, 0x00, 0xE0, 0x18, 0x06, 0x01, 0xC0, 0x30,
0x0C, 0x03, 0x00, 0xE0, 0x18, 0x06, 0x01, 0xC0, 0x30, 0x0C, 0x03, 0x80,
0x60, 0x18, 0x07, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0,
0x0F, 0x78, 0x1E, 0x78, 0x1E, 0x78, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x1E,
0x78, 0x1E, 0x78, 0x1E, 0x70, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0, 0xF0, 0xE0, 0xE0, 0x07, 0xF8, 0x07,
0xFF, 0x83, 0xFF, 0xF1, 0xFF, 0xFE, 0x7C, 0x1F, 0xBE, 0x03, 0xE0, 0x00,
0xF8, 0x01, 0xFE, 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xF8, 0xFB, 0xF0, 0x3E,
0xF8, 0x0F, 0xBE, 0x07, 0xEF, 0xC3, 0xFB, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F,
0xFB, 0xF1, 0xF8, 0xFC, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0,
0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE7, 0xE0, 0xFB, 0xFC,
0x3F, 0xFF, 0xCF, 0xFF, 0xF3, 0xF8, 0x7E, 0xFC, 0x0F, 0xBF, 0x03, 0xFF,
0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xF0,
0x3F, 0xFC, 0x0F, 0xBF, 0x87, 0xEF, 0xFF, 0xF3, 0xFF, 0xFC, 0xFB, 0xFC,
0x3E, 0x7E, 0x00, 0x03, 0xF0, 0x07, 0xFE, 0x0F, 0xFF, 0x87, 0xFF, 0xE7,
0xE1, 0xFB, 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00,
0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0xFB, 0xE0, 0x7D, 0xF8, 0x7E, 0x7F,
0xFE, 0x3F, 0xFE, 0x0F, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00,
0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00,
0xF8, 0x1F, 0x1F, 0x0F, 0xFB, 0xE3, 0xFF, 0xFC, 0xFF, 0xFF, 0xBF, 0x8F,
0xF7, 0xC0, 0x7F, 0xF8, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03,
0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFE, 0x03, 0xF7, 0xC0, 0x7E, 0xFC, 0x3F,
0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFB, 0xE0, 0xFC, 0x7C, 0x07, 0xE0,
0x07, 0xFE, 0x03, 0xFF, 0xE0, 0xFF, 0xF8, 0x7E, 0x1F, 0x1F, 0x03, 0xCF,
0x80, 0xFB, 0xE0, 0x1E, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0xE0,
0x00, 0xF8, 0x00, 0x3F, 0x03, 0xE7, 0xE1, 0xF9, 0xFF, 0xFC, 0x3F, 0xFE,
0x07, 0xFF, 0x00, 0x7F, 0x00, 0x0F, 0xC7, 0xF3, 0xFC, 0xFF, 0x3E, 0x0F,
0x83, 0xE3, 0xFE, 0xFF, 0xBF, 0xE3, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0,
0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E,
0x0F, 0x80, 0x07, 0xC7, 0xC3, 0xFD, 0xF3, 0xFF, 0xFC, 0xFF, 0xFF, 0x7E,
0x1F, 0xDF, 0x03, 0xFF, 0xC0, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01,
0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, 0x0F, 0xDF, 0x03, 0xF7, 0xE1, 0xFD,
0xFF, 0xFF, 0x3F, 0xFF, 0xC7, 0xFD, 0xF0, 0x7C, 0x7C, 0x00, 0x1F, 0x00,
0x07, 0xFF, 0x03, 0xF7, 0xE1, 0xF9, 0xFF, 0xFC, 0x3F, 0xFE, 0x01, 0xFE,
0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07,
0xC0, 0x03, 0xE0, 0x01, 0xF1, 0xF0, 0xFB, 0xFE, 0x7F, 0xFF, 0xBF, 0xFF,
0xDF, 0xC3, 0xFF, 0xC0, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8,
0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F,
0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xC0, 0xFF, 0xFF, 0xF0,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xC0, 0x3E, 0x7C, 0xF9, 0xF0, 0x00, 0x00, 0x1F, 0x3E, 0x7C, 0xF9,
0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E,
0x7C, 0xF9, 0xF3, 0xFF, 0xFF, 0xFE, 0xF8, 0xF8, 0x00, 0x7C, 0x00, 0x3E,
0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x3E,
0xF8, 0x3E, 0x7C, 0x3F, 0x3E, 0x3F, 0x1F, 0x3F, 0x0F, 0x9F, 0x07, 0xDF,
0x03, 0xFF, 0x81, 0xFF, 0xC0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0x7E, 0x1F,
0x1F, 0x0F, 0x87, 0xC7, 0xC3, 0xF3, 0xE0, 0xF9, 0xF0, 0x7E, 0xF8, 0x1F,
0x7C, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0xF8, 0x3F, 0x1F,
0x7F, 0x9F, 0xF3, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xC3, 0xF8,
0x7F, 0xF8, 0x3F, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0, 0xF8, 0x1F, 0xF8,
0x1F, 0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, 0xFC, 0x0F, 0x81,
0xFF, 0x81, 0xF0, 0x3F, 0xF0, 0x3E, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0,
0xF8, 0x1F, 0xF8, 0x1F, 0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F,
0x80, 0xF8, 0xF8, 0x7D, 0xFF, 0x3F, 0xFF, 0xDF, 0xFF, 0xEF, 0xE1, 0xFF,
0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03,
0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8,
0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xE0, 0x03, 0xF8, 0x01, 0xFF, 0xC0, 0x7F,
0xFC, 0x1F, 0xFF, 0xC7, 0xF0, 0xFC, 0xF8, 0x0F, 0xBF, 0x01, 0xFF, 0xC0,
0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0xC0,
0x7E, 0xF8, 0x0F, 0x9F, 0x87, 0xF1, 0xFF, 0xFC, 0x1F, 0xFF, 0x01, 0xFF,
0xC0, 0x0F, 0xE0, 0x00, 0xF8, 0xF8, 0x3E, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF,
0xFC, 0xFE, 0x1F, 0xBF, 0x03, 0xEF, 0xC0, 0xFF, 0xE0, 0x1F, 0xF8, 0x07,
0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, 0x0F, 0xFF, 0x03, 0xEF,
0xE1, 0xFB, 0xFF, 0xFC, 0xFF, 0xFF, 0x3E, 0xFF, 0x0F, 0x8F, 0x83, 0xE0,
0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00,
0x3E, 0x00, 0x00, 0x07, 0xE3, 0xE1, 0xFF, 0x7C, 0x7F, 0xFF, 0x9F, 0xFF,
0xF7, 0xF1, 0xFE, 0xF8, 0x0F, 0xFF, 0x01, 0xFF, 0xC0, 0x1F, 0xF8, 0x03,
0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0xC0, 0x7E, 0xF8, 0x0F,
0xDF, 0x83, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE1, 0xFF, 0x7C, 0x1F, 0x8F,
0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F,
0x00, 0x03, 0xE0, 0x00, 0x7C, 0xF8, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xE1,
0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0,
0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x00, 0x07, 0xF0, 0x0F, 0xFE,
0x0F, 0xFF, 0x87, 0xFF, 0xE7, 0xE1, 0xF3, 0xE0, 0x79, 0xF8, 0x00, 0xFF,
0x80, 0x3F, 0xFC, 0x1F, 0xFF, 0x83, 0xFF, 0xC0, 0x3F, 0xF0, 0x01, 0xFF,
0xC0, 0x7D, 0xF0, 0x7E, 0xFF, 0xFE, 0x3F, 0xFF, 0x0F, 0xFF, 0x01, 0xFE,
0x00, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0x3E, 0x1F,
0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xF3,
0xF8, 0xFC, 0x3E, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF,
0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07,
0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0xFF, 0xF0, 0xFF, 0xFF,
0xFF, 0x7F, 0xFF, 0x9F, 0xF7, 0xC7, 0xE3, 0xE0, 0x7C, 0x07, 0xCF, 0x80,
0xF9, 0xF0, 0x1F, 0x1F, 0x07, 0xC3, 0xE0, 0xF8, 0x7C, 0x1F, 0x07, 0x83,
0xC0, 0xF8, 0xF8, 0x1F, 0x1F, 0x01, 0xE3, 0xC0, 0x3E, 0x78, 0x07, 0xDF,
0x00, 0x7B, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x1F, 0xC0, 0x03, 0xF8,
0x00, 0x7F, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x1F, 0x03, 0xEF, 0x83, 0xE0,
0x7D, 0xF0, 0x7E, 0x1F, 0x3E, 0x0F, 0xC3, 0xE3, 0xC3, 0xF8, 0x7C, 0x7C,
0x7F, 0x0F, 0x0F, 0x8F, 0xF3, 0xE1, 0xF1, 0xDE, 0x7C, 0x1E, 0x7B, 0xCF,
0x83, 0xEF, 0x39, 0xE0, 0x7D, 0xE7, 0x3C, 0x07, 0xB8, 0xFF, 0x80, 0xF7,
0x1F, 0xE0, 0x1F, 0xE3, 0xFC, 0x03, 0xFC, 0x3F, 0x80, 0x3F, 0x07, 0xF0,
0x07, 0xE0, 0xFC, 0x00, 0xFC, 0x1F, 0x80, 0x0F, 0x83, 0xF0, 0x00, 0xFC,
0x1F, 0x9F, 0x07, 0xE7, 0xE3, 0xF0, 0xF8, 0xF8, 0x1F, 0x7E, 0x07, 0xDF,
0x00, 0xFF, 0x80, 0x1F, 0xE0, 0x07, 0xF0, 0x00, 0xF8, 0x00, 0x7F, 0x00,
0x3F, 0xE0, 0x0F, 0xF8, 0x07, 0xDF, 0x03, 0xF7, 0xE0, 0xF8, 0xF8, 0x7E,
0x3F, 0x1F, 0x07, 0xEF, 0xC0, 0xF8, 0x7C, 0x03, 0xEF, 0x80, 0xF9, 0xF8,
0x1F, 0x1F, 0x03, 0xE3, 0xE0, 0xF8, 0x7C, 0x1F, 0x07, 0xC3, 0xE0, 0xF8,
0x78, 0x0F, 0x1F, 0x01, 0xF3, 0xC0, 0x3E, 0x78, 0x03, 0xDF, 0x00, 0x7F,
0xC0, 0x0F, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F,
0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x07, 0xF8,
0x00, 0xFE, 0x00, 0x1F, 0x80, 0x03, 0xE0, 0x00, 0x7F, 0xFE, 0x7F, 0xFE,
0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0,
0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00,
0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x87,
0xC7, 0xE3, 0xF1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1,
0xE0, 0xF0, 0xF9, 0xF8, 0xF0, 0x7E, 0x0F, 0x83, 0xC1, 0xE0, 0xF0, 0x78,
0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xFC, 0x7E, 0x1F, 0x07, 0x80,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE0, 0xF0, 0x7C, 0x3E, 0x1F, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x1F, 0x83, 0xC7, 0xE7, 0xC3,
0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC7, 0xE3, 0xE1,
0xF0, 0xF0, 0x00, 0x3C, 0x00, 0xFE, 0x0F, 0xFE, 0x1E, 0x1F, 0xFC, 0x0F,
0xC0, 0x0F, 0x00};
const GFXglyph FreeSansBold18pt7bGlyphs[] PROGMEM = {
{0, 0, 0, 10, 0, 1}, // 0x20 ' '
{0, 5, 25, 12, 4, -24}, // 0x21 '!'
{16, 13, 9, 17, 2, -25}, // 0x22 '"'
{31, 20, 24, 19, 0, -23}, // 0x23 '#'
{91, 19, 29, 19, 0, -25}, // 0x24 '$'
{160, 29, 25, 31, 1, -24}, // 0x25 '%'
{251, 22, 25, 25, 2, -24}, // 0x26 '&'
{320, 5, 9, 9, 2, -25}, // 0x27 '''
{326, 9, 33, 12, 1, -25}, // 0x28 '('
{364, 9, 33, 12, 1, -25}, // 0x29 ')'
{402, 12, 11, 14, 0, -25}, // 0x2A '*'
{419, 16, 16, 20, 2, -15}, // 0x2B '+'
{451, 5, 11, 9, 2, -4}, // 0x2C ','
{458, 9, 4, 12, 1, -10}, // 0x2D '-'
{463, 5, 5, 9, 2, -4}, // 0x2E '.'
{467, 9, 25, 10, 0, -24}, // 0x2F '/'
{496, 17, 25, 19, 1, -24}, // 0x30 '0'
{550, 10, 25, 19, 3, -24}, // 0x31 '1'
{582, 17, 25, 19, 1, -24}, // 0x32 '2'
{636, 17, 25, 19, 1, -24}, // 0x33 '3'
{690, 16, 25, 19, 2, -24}, // 0x34 '4'
{740, 17, 25, 19, 1, -24}, // 0x35 '5'
{794, 18, 25, 19, 1, -24}, // 0x36 '6'
{851, 17, 25, 19, 1, -24}, // 0x37 '7'
{905, 17, 25, 19, 1, -24}, // 0x38 '8'
{959, 17, 25, 19, 1, -24}, // 0x39 '9'
{1013, 5, 18, 9, 2, -17}, // 0x3A ':'
{1025, 5, 24, 9, 2, -17}, // 0x3B ';'
{1040, 18, 17, 20, 1, -16}, // 0x3C '<'
{1079, 17, 12, 20, 2, -13}, // 0x3D '='
{1105, 18, 17, 20, 1, -16}, // 0x3E '>'
{1144, 18, 26, 21, 2, -25}, // 0x3F '?'
{1203, 32, 31, 34, 1, -25}, // 0x40 '@'
{1327, 24, 26, 24, 0, -25}, // 0x41 'A'
{1405, 20, 26, 25, 3, -25}, // 0x42 'B'
{1470, 23, 26, 25, 1, -25}, // 0x43 'C'
{1545, 21, 26, 25, 3, -25}, // 0x44 'D'
{1614, 19, 26, 23, 3, -25}, // 0x45 'E'
{1676, 17, 26, 22, 3, -25}, // 0x46 'F'
{1732, 24, 26, 27, 1, -25}, // 0x47 'G'
{1810, 20, 26, 26, 3, -25}, // 0x48 'H'
{1875, 5, 26, 11, 3, -25}, // 0x49 'I'
{1892, 16, 26, 20, 1, -25}, // 0x4A 'J'
{1944, 22, 26, 25, 3, -25}, // 0x4B 'K'
{2016, 17, 26, 22, 3, -25}, // 0x4C 'L'
{2072, 24, 26, 30, 3, -25}, // 0x4D 'M'
{2150, 20, 26, 26, 3, -25}, // 0x4E 'N'
{2215, 25, 26, 27, 1, -25}, // 0x4F 'O'
{2297, 19, 26, 24, 3, -25}, // 0x50 'P'
{2359, 25, 27, 27, 1, -25}, // 0x51 'Q'
{2444, 21, 26, 25, 3, -25}, // 0x52 'R'
{2513, 20, 26, 24, 2, -25}, // 0x53 'S'
{2578, 19, 26, 23, 2, -25}, // 0x54 'T'
{2640, 20, 26, 26, 3, -25}, // 0x55 'U'
{2705, 22, 26, 23, 1, -25}, // 0x56 'V'
{2777, 32, 26, 34, 1, -25}, // 0x57 'W'
{2881, 22, 26, 24, 1, -25}, // 0x58 'X'
{2953, 21, 26, 22, 1, -25}, // 0x59 'Y'
{3022, 19, 26, 21, 1, -25}, // 0x5A 'Z'
{3084, 8, 33, 12, 2, -25}, // 0x5B '['
{3117, 10, 25, 10, 0, -24}, // 0x5C '\'
{3149, 8, 33, 12, 1, -25}, // 0x5D ']'
{3182, 16, 15, 20, 2, -23}, // 0x5E '^'
{3212, 21, 3, 19, -1, 5}, // 0x5F '_'
{3220, 7, 5, 9, 1, -25}, // 0x60 '`'
{3225, 18, 19, 20, 1, -18}, // 0x61 'a'
{3268, 18, 26, 22, 2, -25}, // 0x62 'b'
{3327, 17, 19, 20, 1, -18}, // 0x63 'c'
{3368, 19, 26, 22, 1, -25}, // 0x64 'd'
{3430, 18, 19, 20, 1, -18}, // 0x65 'e'
{3473, 10, 26, 12, 1, -25}, // 0x66 'f'
{3506, 18, 26, 21, 1, -18}, // 0x67 'g'
{3565, 17, 26, 21, 2, -25}, // 0x68 'h'
{3621, 5, 26, 10, 2, -25}, // 0x69 'i'
{3638, 7, 33, 10, 0, -25}, // 0x6A 'j'
{3667, 17, 26, 20, 2, -25}, // 0x6B 'k'
{3723, 5, 26, 9, 2, -25}, // 0x6C 'l'
{3740, 27, 19, 31, 2, -18}, // 0x6D 'm'
{3805, 17, 19, 21, 2, -18}, // 0x6E 'n'
{3846, 19, 19, 21, 1, -18}, // 0x6F 'o'
{3892, 18, 26, 22, 2, -18}, // 0x70 'p'
{3951, 19, 26, 22, 1, -18}, // 0x71 'q'
{4013, 11, 19, 14, 2, -18}, // 0x72 'r'
{4040, 17, 19, 19, 1, -18}, // 0x73 's'
{4081, 9, 23, 12, 1, -22}, // 0x74 't'
{4107, 17, 19, 21, 2, -18}, // 0x75 'u'
{4148, 19, 19, 19, 0, -18}, // 0x76 'v'
{4194, 27, 19, 27, 0, -18}, // 0x77 'w'
{4259, 18, 19, 19, 1, -18}, // 0x78 'x'
{4302, 19, 26, 19, 0, -18}, // 0x79 'y'
{4364, 16, 19, 18, 1, -18}, // 0x7A 'z'
{4402, 9, 33, 14, 1, -25}, // 0x7B '{'
{4440, 3, 33, 10, 4, -25}, // 0x7C '|'
{4453, 9, 33, 14, 3, -25}, // 0x7D '}'
{4491, 15, 6, 18, 1, -10}}; // 0x7E '~'
const GFXfont FreeSansBold18pt7b PROGMEM = {
(uint8_t *)FreeSansBold18pt7bBitmaps, (GFXglyph *)FreeSansBold18pt7bGlyphs,
0x20, 0x7E, 42};
// Approx. 5175 bytes

View File

@ -0,0 +1,228 @@
/*
Generated by AdafruitGFXFontToBitmap
https: //github.com/MvRens/AdafruitGFXFontTools
Source: FreeSansBold18pt7b.h
Filter: [ 0-9\.mSTOPMenuERCalibrt]
*/
const uint8_t FreeSansBold18pt7bTrimmedBitmaps[] PROGMEM = {
0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0xFF,
0xC7, 0xE3, 0xF3, 0xE0, 0xF9, 0xF0, 0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC,
0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F,
0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3,
0xF1, 0xFF, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x01, 0xC0,
0xF0, 0x3C, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xF0, 0x7C,
0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07,
0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC0, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF,
0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8,
0x0F, 0x80, 0x07, 0xC0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xF0, 0x03, 0xF0,
0x07, 0xF0, 0x07, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0,
0x03, 0xE0, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF, 0x80,
0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xCF, 0xC3, 0xF7, 0xC0,
0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x0F, 0x80,
0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F,
0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, 0xC3, 0xF3, 0xFF, 0xF8, 0xFF,
0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC,
0x01, 0xFC, 0x03, 0xFC, 0x07, 0x7C, 0x07, 0x7C, 0x0E, 0x7C, 0x0E, 0x7C,
0x1C, 0x7C, 0x18, 0x7C, 0x38, 0x7C, 0x70, 0x7C, 0x60, 0x7C, 0xE0, 0x7C,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x7C,
0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x1F, 0xFF, 0x0F, 0xFF,
0x8F, 0xFF, 0xC7, 0xFF, 0xE3, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70,
0x00, 0x79, 0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0xFF, 0xE7, 0xC3, 0xF0,
0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xFE, 0x03,
0xFF, 0x03, 0xFF, 0xC3, 0xF3, 0xFF, 0xF1, 0xFF, 0xF8, 0x3F, 0xF0, 0x07,
0xE0, 0x00, 0x03, 0xF8, 0x03, 0xFF, 0x81, 0xFF, 0xF0, 0xFF, 0xFE, 0x3E,
0x1F, 0x9F, 0x03, 0xE7, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0xF8, 0x3E, 0xFF,
0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFE, 0x1F, 0xBF, 0x03, 0xFF, 0x80, 0x7F,
0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, 0x80, 0x7D, 0xF0, 0x3E, 0x7E,
0x1F, 0x8F, 0xFF, 0xC1, 0xFF, 0xF0, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0xF8,
0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1E,
0x00, 0x1F, 0x00, 0x0F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x03,
0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3E, 0x00,
0x1F, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xE0, 0x07, 0xFC, 0x0F, 0xFF, 0x07,
0xFF, 0xC7, 0xC3, 0xF3, 0xC0, 0xF9, 0xE0, 0x3C, 0xF0, 0x1E, 0x78, 0x1F,
0x1E, 0x1F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xF1, 0xF9, 0xF0,
0x7D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7,
0xC3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07,
0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0xFF, 0xC7, 0xE3, 0xF7, 0xE0, 0xFB,
0xE0, 0x3D, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83,
0xF7, 0xE3, 0xFB, 0xFF, 0xFC, 0xFF, 0xFE, 0x3F, 0xDF, 0x07, 0xCF, 0x80,
0x07, 0x80, 0x03, 0xDF, 0x03, 0xE7, 0xC3, 0xE3, 0xFF, 0xF0, 0xFF, 0xF0,
0x3F, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x3F,
0xFF, 0xC0, 0xFF, 0xFF, 0xC3, 0xF8, 0x1F, 0x87, 0xE0, 0x1F, 0x9F, 0x80,
0x1F, 0x3E, 0x00, 0x1F, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xE0, 0x00,
0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00,
0x7C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x7D, 0xF0, 0x00, 0xFB,
0xF0, 0x03, 0xF3, 0xF0, 0x0F, 0xC7, 0xF0, 0x3F, 0x87, 0xFF, 0xFE, 0x07,
0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0xDF, 0xFF,
0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00,
0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7F, 0xFF,
0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xC0, 0x00, 0xF8, 0x00,
0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00,
0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x00,
0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x81,
0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFB, 0xC3,
0xDF, 0xFB, 0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xFB, 0xC3, 0xDF, 0xF9, 0xC7,
0xDF, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7, 0x9F, 0xF9, 0xE7,
0x9F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF, 0x1F, 0xF8, 0xFF,
0x1F, 0xF8, 0x7F, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E, 0x1F, 0xF8, 0x7E,
0x1F, 0xF8, 0x3E, 0x1F, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, 0x01, 0xFF,
0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFC, 0x1F, 0xC1, 0xF8, 0x03, 0xF1, 0xF8,
0x00, 0xFC, 0xF8, 0x00, 0x3E, 0x7C, 0x00, 0x1F, 0x7C, 0x00, 0x07, 0xFE,
0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F,
0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xBE, 0x00, 0x0F,
0x9F, 0x00, 0x07, 0xCF, 0xC0, 0x07, 0xE3, 0xF0, 0x07, 0xE0, 0xFE, 0x0F,
0xE0, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x00, 0x3F,
0x80, 0x00, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE, 0x7F, 0xFF, 0xEF,
0x80, 0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF,
0x00, 0x7F, 0xE0, 0x1F, 0xFC, 0x07, 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x3F,
0xFF, 0xC7, 0xFF, 0xE0, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C,
0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8,
0x00, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x3F, 0xFF, 0xF9,
0xFF, 0xFF, 0xCF, 0x80, 0x3F, 0x7C, 0x00, 0xFB, 0xE0, 0x07, 0xDF, 0x00,
0x3E, 0xF8, 0x01, 0xF7, 0xC0, 0x0F, 0x3E, 0x00, 0xF9, 0xFF, 0xFF, 0x8F,
0xFF, 0xF8, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF, 0x1F, 0x00, 0xFC, 0xF8, 0x03,
0xE7, 0xC0, 0x1F, 0x3E, 0x00, 0xF9, 0xF0, 0x07, 0xCF, 0x80, 0x3E, 0x7C,
0x01, 0xF3, 0xE0, 0x0F, 0x9F, 0x00, 0x7C, 0xF8, 0x03, 0xF7, 0xC0, 0x0F,
0xC0, 0x07, 0xF8, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, 0x87, 0xFF, 0xFC, 0x7E,
0x0F, 0xCF, 0xC0, 0x7E, 0xF8, 0x03, 0xEF, 0x80, 0x3E, 0xF8, 0x00, 0x0F,
0xC0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x3F, 0xFF, 0x81, 0xFF, 0xFC,
0x03, 0xFF, 0xE0, 0x01, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xF8, 0x01,
0xFF, 0x80, 0x1F, 0xFC, 0x03, 0xFF, 0xE0, 0x7E, 0x7F, 0xFF, 0xE3, 0xFF,
0xFC, 0x1F, 0xFF, 0x00, 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F,
0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F,
0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E,
0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C,
0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xF8, 0x07, 0xFF,
0x83, 0xFF, 0xF1, 0xFF, 0xFE, 0x7C, 0x1F, 0xBE, 0x03, 0xE0, 0x00, 0xF8,
0x01, 0xFE, 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xF8, 0xFB, 0xF0, 0x3E, 0xF8,
0x0F, 0xBE, 0x07, 0xEF, 0xC3, 0xFB, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F, 0xFB,
0xF1, 0xF8, 0xFC, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00,
0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE7, 0xE0, 0xFB, 0xFC, 0x3F,
0xFF, 0xCF, 0xFF, 0xF3, 0xF8, 0x7E, 0xFC, 0x0F, 0xBF, 0x03, 0xFF, 0x80,
0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xF0, 0x3F,
0xFC, 0x0F, 0xBF, 0x87, 0xEF, 0xFF, 0xF3, 0xFF, 0xFC, 0xFB, 0xFC, 0x3E,
0x7E, 0x00, 0x07, 0xE0, 0x07, 0xFE, 0x03, 0xFF, 0xE0, 0xFF, 0xF8, 0x7E,
0x1F, 0x1F, 0x03, 0xCF, 0x80, 0xFB, 0xE0, 0x1E, 0xFF, 0xFF, 0xBF, 0xFF,
0xEF, 0xFF, 0xFB, 0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x03, 0xE7, 0xE1, 0xF9,
0xFF, 0xFC, 0x3F, 0xFE, 0x07, 0xFF, 0x00, 0x7F, 0x00, 0xFF, 0xFF, 0xF0,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0xF8, 0x3F, 0x1F, 0x7F,
0x9F, 0xF3, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xC3, 0xF8, 0x7F,
0xF8, 0x3F, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0, 0xF8, 0x1F, 0xF8, 0x1F,
0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, 0xFC, 0x0F, 0x81, 0xFF,
0x81, 0xF0, 0x3F, 0xF0, 0x3E, 0x07, 0xFE, 0x07, 0xC0, 0xFF, 0xC0, 0xF8,
0x1F, 0xF8, 0x1F, 0x03, 0xFF, 0x03, 0xE0, 0x7F, 0xE0, 0x7C, 0x0F, 0x80,
0xF8, 0xF8, 0x7D, 0xFF, 0x3F, 0xFF, 0xDF, 0xFF, 0xEF, 0xE1, 0xFF, 0xE0,
0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF,
0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F,
0xFC, 0x07, 0xFE, 0x03, 0xE0, 0xF8, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xE1,
0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0,
0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x00, 0x3E, 0x1F, 0x0F, 0x87,
0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0,
0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xF3, 0xF8, 0xFC, 0x3E, 0xF8, 0x0F,
0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0,
0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF,
0x80, 0xFF, 0xC0, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x9F, 0xF7,
0xC7, 0xE3, 0xE0 };
const GFXglyph FreeSansBold18pt7bTrimmedGlyphs[] PROGMEM = {
{ 0, 0, 0, 10, 0, 1 }, // 0x20 ' '
{ 0, 0, 0, 0, 0, 0 }, // 0x21 '!'
{ 0, 0, 0, 0, 0, 0 }, // 0x22 '"'
{ 0, 0, 0, 0, 0, 0 }, // 0x23 '#'
{ 0, 0, 0, 0, 0, 0 }, // 0x24 '$'
{ 0, 0, 0, 0, 0, 0 }, // 0x25 '%'
{ 0, 0, 0, 0, 0, 0 }, // 0x26 '&'
{ 0, 0, 0, 0, 0, 0 }, // 0x27 '''
{ 0, 0, 0, 0, 0, 0 }, // 0x28 '('
{ 0, 0, 0, 0, 0, 0 }, // 0x29 ')'
{ 0, 0, 0, 0, 0, 0 }, // 0x2A '*'
{ 0, 0, 0, 0, 0, 0 }, // 0x2B '+'
{ 0, 0, 0, 0, 0, 0 }, // 0x2C ','
{ 0, 0, 0, 0, 0, 0 }, // 0x2D '-'
{ 0, 5, 5, 9, 2, -4 }, // 0x2E '.'
{ 0, 0, 0, 0, 0, 0 }, // 0x2F '/'
{ 4, 17, 25, 19, 1, -24 }, // 0x30 '0'
{ 58, 10, 25, 19, 3, -24 }, // 0x31 '1'
{ 90, 17, 25, 19, 1, -24 }, // 0x32 '2'
{ 144, 17, 25, 19, 1, -24 }, // 0x33 '3'
{ 198, 16, 25, 19, 2, -24 }, // 0x34 '4'
{ 248, 17, 25, 19, 1, -24 }, // 0x35 '5'
{ 302, 18, 25, 19, 1, -24 }, // 0x36 '6'
{ 359, 17, 25, 19, 1, -24 }, // 0x37 '7'
{ 413, 17, 25, 19, 1, -24 }, // 0x38 '8'
{ 467, 17, 25, 19, 1, -24 }, // 0x39 '9'
{ 0, 0, 0, 0, 0, 0 }, // 0x3A ':'
{ 0, 0, 0, 0, 0, 0 }, // 0x3B ';'
{ 0, 0, 0, 0, 0, 0 }, // 0x3C '<'
{ 0, 0, 0, 0, 0, 0 }, // 0x3D '='
{ 0, 0, 0, 0, 0, 0 }, // 0x3E '>'
{ 0, 0, 0, 0, 0, 0 }, // 0x3F '?'
{ 0, 0, 0, 0, 0, 0 }, // 0x40 '@'
{ 0, 0, 0, 0, 0, 0 }, // 0x41 'A'
{ 0, 0, 0, 0, 0, 0 }, // 0x42 'B'
{ 521, 23, 26, 25, 1, -25 }, // 0x43 'C'
{ 0, 0, 0, 0, 0, 0 }, // 0x44 'D'
{ 596, 19, 26, 23, 3, -25 }, // 0x45 'E'
{ 0, 0, 0, 0, 0, 0 }, // 0x46 'F'
{ 0, 0, 0, 0, 0, 0 }, // 0x47 'G'
{ 0, 0, 0, 0, 0, 0 }, // 0x48 'H'
{ 0, 0, 0, 0, 0, 0 }, // 0x49 'I'
{ 0, 0, 0, 0, 0, 0 }, // 0x4A 'J'
{ 0, 0, 0, 0, 0, 0 }, // 0x4B 'K'
{ 0, 0, 0, 0, 0, 0 }, // 0x4C 'L'
{ 658, 24, 26, 30, 3, -25 }, // 0x4D 'M'
{ 0, 0, 0, 0, 0, 0 }, // 0x4E 'N'
{ 736, 25, 26, 27, 1, -25 }, // 0x4F 'O'
{ 818, 19, 26, 24, 3, -25 }, // 0x50 'P'
{ 0, 0, 0, 0, 0, 0 }, // 0x51 'Q'
{ 880, 21, 26, 25, 3, -25 }, // 0x52 'R'
{ 949, 20, 26, 24, 2, -25 }, // 0x53 'S'
{ 1014, 19, 26, 23, 2, -25 }, // 0x54 'T'
{ 0, 0, 0, 0, 0, 0 }, // 0x55 'U'
{ 0, 0, 0, 0, 0, 0 }, // 0x56 'V'
{ 0, 0, 0, 0, 0, 0 }, // 0x57 'W'
{ 0, 0, 0, 0, 0, 0 }, // 0x58 'X'
{ 0, 0, 0, 0, 0, 0 }, // 0x59 'Y'
{ 0, 0, 0, 0, 0, 0 }, // 0x5A 'Z'
{ 0, 0, 0, 0, 0, 0 }, // 0x5B '['
{ 0, 0, 0, 0, 0, 0 }, // 0x5C '\'
{ 0, 0, 0, 0, 0, 0 }, // 0x5D ']'
{ 0, 0, 0, 0, 0, 0 }, // 0x5E '^'
{ 0, 0, 0, 0, 0, 0 }, // 0x5F '_'
{ 0, 0, 0, 0, 0, 0 }, // 0x60 '`'
{ 1076, 18, 19, 20, 1, -18 }, // 0x61 'a'
{ 1119, 18, 26, 22, 2, -25 }, // 0x62 'b'
{ 0, 0, 0, 0, 0, 0 }, // 0x63 'c'
{ 0, 0, 0, 0, 0, 0 }, // 0x64 'd'
{ 1178, 18, 19, 20, 1, -18 }, // 0x65 'e'
{ 0, 0, 0, 0, 0, 0 }, // 0x66 'f'
{ 0, 0, 0, 0, 0, 0 }, // 0x67 'g'
{ 0, 0, 0, 0, 0, 0 }, // 0x68 'h'
{ 1221, 5, 26, 10, 2, -25 }, // 0x69 'i'
{ 0, 0, 0, 0, 0, 0 }, // 0x6A 'j'
{ 0, 0, 0, 0, 0, 0 }, // 0x6B 'k'
{ 1238, 5, 26, 9, 2, -25 }, // 0x6C 'l'
{ 1255, 27, 19, 31, 2, -18 }, // 0x6D 'm'
{ 1320, 17, 19, 21, 2, -18 }, // 0x6E 'n'
{ 0, 0, 0, 0, 0, 0 }, // 0x6F 'o'
{ 0, 0, 0, 0, 0, 0 }, // 0x70 'p'
{ 0, 0, 0, 0, 0, 0 }, // 0x71 'q'
{ 1361, 11, 19, 14, 2, -18 }, // 0x72 'r'
{ 0, 0, 0, 0, 0, 0 }, // 0x73 's'
{ 1388, 9, 23, 12, 1, -22 }, // 0x74 't'
{ 1414, 17, 19, 21, 2, -18 } }; // 0x75 'u'
const GFXfont FreeSansBold18pt7bTrimmed PROGMEM = {
(uint8_t *)FreeSansBold18pt7bTrimmedBitmaps,
(GFXglyph *)FreeSansBold18pt7bTrimmedGlyphs,
0x20, 0x75, 42 };
// Approx. 2064 bytes

7
src/fonts/trim.bat Normal file
View File

@ -0,0 +1,7 @@
@Echo Off
REM It is a nuisance to keep the filter up-to-date with whatever is printed
REM in the actual source, but the space savings are worth it.
AdafruitGFXFontTrim "[ 0-9\.mSTOPMenuERCalibrt]" FreeSansBold18pt7b.h
pause

191
src/include/config.h Normal file
View File

@ -0,0 +1,191 @@
#ifndef __config
#define __config
#include <stdint.h>
/*
Determines if logging over the serial port is enabled.
Uses a baud rate of 115200.
Verbose logging outputs even more, including logging
every loop. Only turn on when required.
Due to RAM/flash constraints, most logging lines have
been commented out as it would take up around 1.5k of RAM
and 4k of flash otherwise, which we don't have.
Uncomment those lines as required.
*/
//#define DebugLog
//#define VerboseLog
class Config
{
public:
/*
Buttons
*/
static const uint8_t ButtonPinTop = 3;
static const uint8_t ButtonPinMiddle = 5;
static const uint8_t ButtonPinBottom = 6;
/*
Display
Settings for an ST7789 based 240x240 pixel LCD.
Note that all screen class implementations are only tested against
this resolution, changing it may have unexpected results.
*/
static const uint8_t DisplayWidth = 240;
static const uint8_t DisplayHeight = 240;
static const uint8_t DisplayRotation = 2;
// Control pins. Data is sent over the hardware SPI pins.
static const uint8_t DisplayPinCS = 10;
static const uint8_t DisplayPinRST = 9;
static const uint8_t DisplayPinDC = 8;
static const uint8_t DisplayPinBL = 7;
static const uint16_t DisplayIdleTime = 10000;
static const uint16_t DisplayRefreshRate = 1000;
/*
Height sensor
Settings for a VL53L0X time-of-flight sensor.
*/
// Note that this must correspond to the default address of the module,
// the initialisation code skips reassigning the address to save calls.
static const uint8_t HeightSensorI2CAddress = 0x29;
static const uint32_t HeightSensorBudget = 200000;
// Values above this will be disregarded as invalid
static const uint16_t HeightMeasurementMax = 1500;
// How much the measurements can change to still be considered "stable"
static const uint8_t HeightMeasurementDeltaStable = 10;
static const uint8_t HeightMeasurementDeltaStableCount = 3;
static const uint16_t HeightMeasurementDeltaStableMoveTimeout = 2000;
// How far in advance to stop the motor
static const uint8_t HeightMeasurementDeltaStop = 0;
// How far off we can be from the target height to still be considered on target
static const uint8_t HeightMeasurementDeltaOnTarget = 15;
// How long we allow invalid measurements until the move operation is aborted
static const uint16_t HeightMeasurementAbortTimeout = 500;
/*
Motor driver
Settings for a Polulu G2 driver board.
*/
static const uint8_t MotorPinPWM = 14;
static const uint8_t MotorPinDirection = 15;
static const uint8_t MotorPinSleep = 16;
static const uint8_t MotorPinCurrentSensing = 17;
static const constexpr float MotorCurrentLimit = 6.0;
static const uint16_t MotorCurrentCheckInterval = 100;
/*
Colors
*/
// A useful RGB565 calculator: http://www.rinkydinkelectronics.com/calc_rgb565.php
#define ColorBlack 0x0000
#define ColorWhite 0xFFFF
#define ColorYellow 0xFFE0
#define ColorRed 0xF800
#define ColorGreen 0x07E0
#define ColorLightGray 0x9492
#define ColorDarkGray 0x528A
#define ColorDarkerGray 0x2965
#define ColorStopRed 0xF9A6
#define ColorDarkRed 0x4861
#define ColorSoftGreen 0x2BE7
#define ColorSoftBlue 0x3376
#define ColorDarkBlue 0x0907
#define ColorOrange 0xF443
// Init sequence
static const uint16_t ColorInitSeqBackground = ColorBlack;
static const uint16_t ColorInitSeqTitle = ColorYellow;
static const uint16_t ColorInitSeqItems = ColorWhite;
static const uint16_t ColorInitSeqSuccess = ColorGreen;
static const uint16_t ColorInitSeqError = ColorRed;
// Home
static const uint16_t ColorHomeBackground = ColorBlack;
static const uint16_t ColorHomeMenuText = ColorWhite;
static const uint16_t ColorHomeMenuArrow = ColorDarkGray;
static const uint16_t ColorNonPresetText = ColorLightGray;
static const uint16_t ColorNonPresetBackground = ColorBlack;
static const uint16_t ColorPresetText = ColorLightGray;
static const uint16_t ColorPresetBackground = ColorDarkerGray;
static const uint16_t ColorPresetArrow = ColorDarkGray;
static const uint16_t ColorPresetSelectedText = ColorWhite;
static const uint16_t ColorPresetSelectedBackground = ColorSoftGreen;
// Move
static const uint16_t ColorMoveBackground = ColorBlack;
static const uint16_t ColorMoveArrow = ColorDarkGray;
static const uint16_t ColorMoveTarget = ColorWhite;
static const uint16_t ColorMoveCurrent = ColorWhite;
static const uint16_t ColorMoveStop = ColorStopRed;
// Move error / overcurrent
static const uint16_t ColorErrorBackground = ColorDarkRed;
static const uint16_t ColorErrorText = ColorStopRed;
// Menu
static const uint16_t ColorMenuHeaderText = ColorWhite;
static const uint16_t ColorMenuHeaderBackground = ColorSoftBlue;
static const uint16_t ColorMenuText = ColorWhite;
static const uint16_t ColorMenuBackground = ColorBlack;
static const uint16_t ColorMenuSelectedText = ColorWhite;
static const uint16_t ColorMenuSelectedBackground = ColorDarkBlue;
static const uint16_t ColorCalibrateBackground = ColorBlack;
static const uint16_t ColorCalibrateIndicators = ColorWhite;
static const uint16_t ColorCalibrateValue = ColorWhite;
static const uint16_t ColorCalibrateInvalidValue = ColorOrange;
static const uint16_t ColorCalibrateDigitMarker = ColorWhite;
};
#endif

86
src/include/metrics.h Normal file
View File

@ -0,0 +1,86 @@
#ifndef __metrics
#define __metrics
#include <stdint.h>
//#include "fonts/FreeSansBold18pt7b.trimmed.h"
class Metrics
{
public:
/*
Small font
Uses the built-in Adafruit GFX 5x8 font.
*/
static constexpr const GFXfont* SmallFont = nullptr;
static const uint8_t SmallFontTextSize = 1;
static const uint16_t SmallFontBaseline = 0;
static const uint16_t SmallFontHeight = 8;
static const uint16_t SmallFontMaxHeight = Metrics::SmallFontHeight;
/*
Large font
Originally used a trimmed version of the FreeSansBold 18pt font.
Unfortunately due to program size constraints (I already ordered
PCBs based on the ATMega328P) I'll use a scaled version of the
built-in font for now.
*/
static constexpr const GFXfont* LargeFont = nullptr;//&FreeSansBold18pt7bTrimmed;
static const uint8_t LargeFontTextSize = 3;
//static const uint16_t LargeFontBaseline = 25;
//static const uint16_t LargeFontHeight = Metrics::LargeFontBaseline;
//static const uint16_t LargeFontMaxHeight = 42;
static const uint16_t LargeFontBaseline = 0;
static const uint16_t LargeFontHeight = 24;
static const uint16_t LargeFontMaxHeight = 24;
/*
Text line
Defines the height of a standard line of text including margins.
Suitable for applying a background color.
*/
static const uint16_t LargeTextLineMargin = 7;
static const uint16_t LargeTextLineYOffset = Metrics::LargeFontBaseline + Metrics::LargeTextLineMargin;
static const uint16_t LargeTextLineHeight = (Metrics::LargeFontHeight + (2 * Metrics::LargeTextLineMargin));
static const uint16_t SmallTextLineMargin = 7;
static const uint16_t SmallTextLineHeight = (Metrics::SmallFontHeight + (2 * Metrics::SmallTextLineMargin));
/*
Arrows
*/
static const uint16_t HArrowWidth = 10;
static const uint16_t HArrowHeight = 20;
static const uint16_t VArrowWidth = Metrics::HArrowHeight;
static const uint16_t VArrowHeight = Metrics::HArrowWidth;
static const uint16_t ArrowMargin = 8;
static const uint16_t LargeTextLineHArrowYOffset = (Metrics::LargeTextLineHeight - Metrics::HArrowHeight) / 2;
static const uint16_t LargeTextLineVArrowYOffset = (Metrics::LargeTextLineHeight - Metrics::VArrowHeight) / 2;
/*
Screen layout
Shared amongst screens for a consistent layout
*/
static const uint16_t MiddleLargeTextLineY = 100;
};
#endif

16
src/include/screenids.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef __screenids
#define __screenids
enum class ScreenId
{
Home = 1,
Calibrate,
Move,
MoveOvercurrent,
MoveSensorError,
Menu,
Manual,
Presets
};
#endif

302
src/lib/control.cpp Normal file
View File

@ -0,0 +1,302 @@
#include "./control.h"
#include <Wire.h>
#include "./debug.h"
#include "./motor.h"
#include "./state.h"
#include "./settings.h"
#include "include/config.h"
ControlManager Control = ControlManager();
VL53L0XInitResult ControlManager::init()
{
//dln("[ CONTROL ] Initializing");
Wire.begin();
this->heightSensor.setTimeout(500);
auto result = this->heightSensor.init();
if (result != VL53L0XInitResult::Success)
return result;
this->heightSensor.setMeasurementTimingBudget(Config::HeightSensorBudget);
return result;
}
ControlUpdateResult ControlManager::update()
{
// Always read the range if in async reading mode, even if we're not supposed to
// be moving anymore, so it clears the status.
bool asyncReading = heightSensor.asyncReading();
uint16_t measurement = asyncReading
? heightSensor.asyncReadRangeSingleMillimeters()
: VL53L0XRangeNotReady;
//vl("[ CONTROL ] Update: asyncReading = "); vl(asyncReading); vl(", measurement = "); vl(measurement);
//vl(", moveDirection = "); vl((uint8_t)this->moveDirection); vl(", stabilizationStart = "); vln(this->stabilizationStart);
bool moving = this->moveDirection != MoveDirection::None && this->stabilizationStart == 0;
if (!moving && this->stabilizationStart == 0)
{
//vl("[ CONTROL ] Idle");
return ControlUpdateResult::Idle;
}
// Check for over-current
if (moving && CurrentTime - lastCurrentCheck >= Config::MotorCurrentCheckInterval)
{
lastCurrentCheck = CurrentTime;
if (motorIsOvercurrent())
{
//dln("[ CONTROL ] Overcurrent detected!");
this->moveStop();
return ControlUpdateResult::Overcurrent;
}
}
// Read sensor
if (!asyncReading)
{
//vln("[ CONTROL ] Starting async read");
heightSensor.asyncStartReadRangeSingleMillimeters();
}
if (measurement != VL53L0XRangeNotReady)
{
if (measurement > Config::HeightMeasurementMax)
// Treat invalid results as a timeout, so the checks further on are more readable
measurement = VL53L0XRangeTimeout;
//dl("[ CONTROL ] Measurement: "); dln(measurement);
this->lastMeasurement = measurement != VL53L0XRangeTimeout ? measurement : 0;
}
if (measurement != VL53L0XRangeNotReady && measurement != VL53L0XRangeTimeout)
{
this->currentMeasurement = measurement;
this->lastValidMeasurement = CurrentTime;
// TODO: PWM the motor when we're getting close, if overshoot turns out to be an issue in testing
// Check if target has been reached
if (moving && this->targetReached())
{
this->moveStop();
return ControlUpdateResult::TargetReached;
}
}
if (measurement == VL53L0XRangeTimeout && moving)
{
// While moving, allow incidental invalid results
if (CurrentTime - lastValidMeasurement >= Config::HeightMeasurementAbortTimeout)
{
//dln("[ CONTROL ] Timeout while moving!");
this->moveStop();
return ControlUpdateResult::SensorError;
}
}
if (measurement == VL53L0XRangeTimeout && this->moveDirection == MoveDirection::None)
{
// In pure stabilization (not pre-move), immediately return the sensor error
return ControlUpdateResult::SensorError;
}
if (this->stabilizationStart && this->moveDirection != MoveDirection::None)
{
// Pre-move stabilization
if (this->stabilized())
{
//dln("[ CONTROL ] Pre-move stabilization successful");
// Sensor looks good, let's go!
motorStart(this->moveDirection == MoveDirection::Up ? MotorDirection::Up : MotorDirection::Down);
return ControlUpdateResult::Moving;
}
else if (CurrentTime - this->stabilizationStart >= Config::HeightMeasurementDeltaStableMoveTimeout)
{
//dln("[ CONTROL ] Timeout in pre-move stabilization!");
// Timeout expired, abort the move
this->stabilizationStart = 0;
this->moveDirection = MoveDirection::None;
return ControlUpdateResult::SensorError;
}
}
return moving ? ControlUpdateResult::Moving : ControlUpdateResult::Stabilizing;
}
void ControlManager::stabilizeStart()
{
//dln("[ CONTROL ] Starting stabilization");
this->stabilizationStart = CurrentTime;
this->stabilizeTargetMeasurement = 0;
}
bool ControlManager::stabilized()
{
if (this->stabilizeTargetMeasurement == 0)
{
this->stabilizeTargetMeasurement = this->currentMeasurement;
this->stabilizationLastCheck = this->lastValidMeasurement;
return false;
}
// Only count if we have a new measurement
if (this->stabilizationLastCheck == this->lastValidMeasurement)
return false;
this->stabilizationLastCheck = this->lastValidMeasurement;
int16_t delta = this->currentMeasurement - this->stabilizeTargetMeasurement;
if (abs(delta) <= Config::HeightMeasurementDeltaStable)
{
this->stabilizeCount++;
if (this->stabilizeCount >= Config::HeightMeasurementDeltaStableCount)
{
//dln("[ CONTROL ] Stable");
this->stabilizationStart = 0;
return true;
}
}
else
{
// If it's this much off, chances are the actual value is somewhere in the middle
this->stabilizeTargetMeasurement += (delta / 2);
this->stabilizeCount = 0;
}
return false;
}
void ControlManager::moveStart(uint16_t height)
{
//dl("[ CONTROL ] Starting move to: "); dln(height);
if (height < Settings.Height.Minimum)
{
//dl("[ CONTROL ] Target is below minimum, changing to: "); dln(Settings.Height.Minimum);
height = Settings.Height.Minimum;
}
else if (height > Settings.Height.Maximum)
{
//dl("[ CONTROL ] Target is above maximum, changing to: "); dln(Settings.Height.Maximum);
height = Settings.Height.Maximum;
}
this->moveTargetHeight = height;
this->moveDirection = height > this->getCurrentHeight() ? MoveDirection::Up : MoveDirection::Down;
// Wait for a stable result
this->stabilizeStart();
}
void ControlManager::moveStop()
{
//dln("[ CONTROL ] Stopping move");
motorStop();
this->moveDirection = MoveDirection::None;
}
void ControlManager::snapToPreset()
{
for (uint8_t i = 0; i < 2; i++)
{
if (abs(this->getCurrentHeight() - Settings.Height.Preset[i]) <= Config::HeightMeasurementDeltaOnTarget)
{
this->currentMeasurement = Settings.Height.Preset[i] - Settings.Height.Offset;
break;
}
}
}
bool ControlManager::targetReached()
{
auto currentHeight = this->getCurrentHeight();
// Checks depend on the direction, so it returns true immediately if we've overshot the target
switch (this->moveDirection)
{
case MoveDirection::Up:
if (currentHeight >= this->moveTargetHeight - Config::HeightMeasurementDeltaStop)
{
// Snap to the target
if (currentHeight - this->moveTargetHeight <= Config::HeightMeasurementDeltaOnTarget)
this->currentMeasurement = this->moveTargetHeight - Settings.Height.Offset;
//dln("[ CONTROL ] Target reached");
return true;
}
break;
case MoveDirection::Down:
if (currentHeight <= this->moveTargetHeight + Config::HeightMeasurementDeltaStop)
{
// Snap to the target
if (this->moveTargetHeight - currentHeight <= Config::HeightMeasurementDeltaOnTarget)
this->currentMeasurement = this->moveTargetHeight - Settings.Height.Offset;
//dln("[ CONTROL ] Target reached");
return true;
}
break;
default:
break;
}
return false;
}
void ControlManager::getDisplayHeight(char* buffer, uint16_t value)
{
if (value == 0)
{
buffer[0] = '-';
buffer[1] = 0;
return;
}
uint8_t displayValue = value / 10;
if (displayValue > 99)
buffer[0] = '0' + ((displayValue / 100) % 10);
else
buffer[0] = '0';
buffer[1] = '.';
buffer[2] = '0' + ((displayValue / 10) % 10);
buffer[3] = '0' + (displayValue % 10);
buffer[4] = 'm';
buffer[5] = 0;
}

82
src/lib/control.h Normal file
View File

@ -0,0 +1,82 @@
#ifndef __control
#define __control
#include <stdint.h>
#include "./vl53l0x.h"
#include "./settings.h"
enum class ControlUpdateResult
{
Idle,
Stabilizing,
Moving,
TargetReached,
SensorError,
Overcurrent
};
enum class MoveDirection
{
None,
Up,
Down
};
class ControlManager
{
public:
VL53L0XInitResult init();
ControlUpdateResult update();
void stabilizeStart();
bool stabilized();
void moveStart(uint16_t height);
void moveStop();
void snapToPreset();
// Formats a height value as "0.00m" (always exactly 5 characters long).
// Buffer must be at least 6 bytes long, a null character is added.
// The value is the raw height sensor value, the offset is added by this function.
void getDisplayHeight(char* buffer, uint16_t value);
uint16_t getCurrentHeight() { return this->currentMeasurement + Settings.Height.Offset; }
uint16_t getCurrentMeasurement() { return this->currentMeasurement; }
uint16_t getLastMeasurement() { return this->lastMeasurement; }
MoveDirection getMoveDirection() { return this->moveDirection; }
uint16_t getMoveTargetHeight() { return this->moveTargetHeight; }
bool getIsStabilizing() { return this->stabilizationStart != 0; }
private:
bool targetReached();
VL53L0X heightSensor = VL53L0X();
uint16_t currentMeasurement;
uint16_t lastMeasurement = 0;
uint32_t lastValidMeasurement = 0;
uint32_t lastCurrentCheck = 0;
MoveDirection moveDirection;
uint16_t moveTargetHeight;
uint32_t stabilizationStart = 0;
uint8_t stabilizeCount = 0;
uint16_t stabilizeTargetMeasurement = 0;
uint32_t stabilizationLastCheck = 0;
};
extern ControlManager Control;
#endif

28
src/lib/debug.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef __debug
#define __debug
#include <Arduino.h>
#include "include/config.h"
#ifdef DebugLog
#define DebugInit() Serial.begin(115200)
#define dl(value) Serial.print(value)
#define dln(value) Serial.println(value)
#else
#define DebugInit()
#define dl(value)
#define dln(value)
#endif
#ifdef VerboseLog
#define vl(value) Serial.print(value)
#define vln(value) Serial.println(value)
#else
#define vl(value)
#define vln(value)
#endif
#endif

57
src/lib/motor.cpp Normal file
View File

@ -0,0 +1,57 @@
#include "./motor.h"
#include "include/config.h"
#include "./debug.h"
#include <Arduino.h>
void motorInit()
{
pinMode(Config::MotorPinSleep, OUTPUT);
digitalWrite(Config::MotorPinSleep, LOW);
pinMode(Config::MotorPinPWM, OUTPUT);
digitalWrite(Config::MotorPinPWM, LOW);
pinMode(Config::MotorPinDirection, OUTPUT);
pinMode(Config::MotorPinCurrentSensing, INPUT);
// See motorIsOvercurrent
analogReference(INTERNAL);
delay(10);
}
void motorStart(MotorDirection direction)
{
//dl("[ MOTOR ] Starting in direction: "); dln((uint8_t)direction);
digitalWrite(Config::MotorPinDirection, direction == MotorDirection::Up ? HIGH : LOW);
digitalWrite(Config::MotorPinSleep, HIGH);
digitalWrite(Config::MotorPinPWM, HIGH);
}
void motorStop()
{
//dln("[ MOTOR ] Stopping");
digitalWrite(Config::MotorPinPWM, LOW);
digitalWrite(Config::MotorPinSleep, LOW);
digitalWrite(Config::MotorPinDirection, LOW);
}
bool motorIsOvercurrent()
{
// The Polugu G2 module outputs 20 mV/A plus a 50 mV offset
// The analog reference has been set to internal, which is 1.1v for the ATMega328P,
// divided by 1024 units is 1.074mV per unit. This means we can measure up to 52.5A.
// I sure hope we never reach that value :-)
auto value = analogRead(Config::MotorPinCurrentSensing);
float voltage = (float)value * (1100.0 / 1024.0);
float current = (voltage - 50) / 20;
dl("[ MOTOR ] Measured current: value = "); dl(value); dl(", V = "); dl(voltage); dl(", A = "); dln(current);
return current >= Config::MotorCurrentLimit;
}

18
src/lib/motor.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef __motor
#define __motor
// Low-level functions to control the motor
enum class MotorDirection
{
Up,
Down
};
extern void motorInit();
extern void motorStart(MotorDirection direction);
extern void motorStop();
extern bool motorIsOvercurrent();
#endif

88
src/lib/screen.cpp Normal file
View File

@ -0,0 +1,88 @@
#include "./screen.h"
#include "include/config.h"
#include "include/metrics.h"
uint16_t BaseScreen::printCentered(const char* text, int16_t y)
{
int16_t textX;
int16_t textY;
uint16_t textW;
uint16_t textH;
this->display->getTextBounds(text, 0, 0, &textX, &textY, &textW, &textH);
textX = (Config::DisplayWidth - textW) / 2;
this->display->setCursor(textX, y);
this->display->print(text);
return textW;
}
void BaseScreen::drawLargeTextLineCentered(const char* text, int16_t y, uint16_t textColor, uint16_t backgroundColor)
{
this->display->fillRect(0, y, Config::DisplayWidth, Metrics::LargeTextLineHeight, backgroundColor);
this->display->setTextColor(textColor);
this->printCentered(text, y + Metrics::LargeTextLineYOffset);
}
void BaseScreen::drawArrowLeft(int16_t x, int16_t y, uint16_t color)
{
this->display->fillTriangle(
x + Metrics::HArrowWidth, y, // Top right
x, y + (Metrics::HArrowHeight / 2), // Middle left
x + Metrics::HArrowWidth, y + Metrics::HArrowHeight, // Bottom right
color);
}
void BaseScreen::drawArrowRight(int16_t x, int16_t y, uint16_t color)
{
this->display->fillTriangle(
x, y, // Top left
x + + Metrics::HArrowWidth, y + (Metrics::HArrowHeight / 2), // Middle right
x, y + Metrics::HArrowHeight, // Bottom left
color);
}
void BaseScreen::drawArrowUp(int16_t x, int16_t y, uint16_t color)
{
this->display->fillTriangle(
x + (Metrics::VArrowWidth / 2), y, // Top middle
x, y + Metrics::VArrowHeight, // Bottom left
x + Metrics::VArrowWidth, y + Metrics::VArrowHeight, // Bottom right
color);
}
void BaseScreen::drawArrowDown(int16_t x, int16_t y, uint16_t color)
{
this->display->fillTriangle(
x, y, // Top left
x + Metrics::VArrowWidth, y, // Top right
x + (Metrics::VArrowWidth / 2), y + Metrics::VArrowHeight, // Bottom middle
color);
}
void ScreenManager::init()
{
pinMode(Config::DisplayPinBL, OUTPUT);
digitalWrite(Config::DisplayPinBL, HIGH);
}
void ScreenManager::displayOff()
{
digitalWrite(Config::DisplayPinBL, LOW);
this->display->sendCommand(ST77XX_SLPIN);
}
void ScreenManager::displayOn()
{
this->display->sendCommand(ST77XX_SLPOUT);
digitalWrite(Config::DisplayPinBL, HIGH);
}

96
src/lib/screen.h Normal file
View File

@ -0,0 +1,96 @@
#ifndef __screen
#define __screen
#include <Adafruit_ST7789.h>
#include "include/config.h"
#include "include/screenids.h"
class ScreenManager;
enum class Button
{
Top,
Middle,
Bottom
};
class BaseScreen
{
public:
BaseScreen(ScreenManager* screenManager, Adafruit_GFX* display)
{
this->screenManager = screenManager;
this->display = display;
}
virtual ~BaseScreen() {}
virtual void onShow() = 0;
virtual void onButton(Button button) = 0;
virtual void onTick() = 0;
virtual ScreenId screenId() = 0;
protected:
uint16_t printCentered(const char* text, int16_t y);
void drawLargeTextLineCentered(const char* text, int16_t y, uint16_t textColor, uint16_t backgroundColor);
void drawArrowLeft(int16_t x, int16_t y, uint16_t color);
void drawArrowRight(int16_t x, int16_t y, uint16_t color);
void drawArrowUp(int16_t x, int16_t y, uint16_t color);
void drawArrowDown(int16_t x, int16_t y, uint16_t color);
ScreenManager* screenManager;
Adafruit_GFX* display;
};
class ScreenManager
{
public:
ScreenManager(Adafruit_ST7789* display)
{
this->display = display;
}
void init();
inline void button(Button button) { this->getCurrentScreen()->onButton(button); }
inline void tick() { this->getCurrentScreen()->onTick(); }
inline BaseScreen* getCurrentScreen() { return this->currentScreen; }
template<class T> void show()
{
if (this->currentScreen != nullptr)
{
//currentScreen->onHide();
delete this->currentScreen;
}
this->currentScreen = new T(this, this->display);
this->currentScreen->onShow();
}
template<class T> void show(ScreenId onlyIfNotOn)
{
if (this->currentScreen == nullptr || this->currentScreen->screenId() != onlyIfNotOn)
this->show<T>();
}
void displayOff();
void displayOn();
private:
Adafruit_ST7789* display;
BaseScreen* currentScreen = nullptr;
};
#endif

View File

@ -0,0 +1,162 @@
#include "./calibrate.h"
#include "./home.h"
#include "include/metrics.h"
#include "lib/settings.h"
void BaseHeightEntryScreen::onShow()
{
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->display->fillScreen(Config::ColorHomeBackground);
this->drawTitle();
this->initHeights();
this->drawArrowUp(Metrics::ArrowMargin, Metrics::LargeTextLineHeight + Metrics::LargeTextLineVArrowYOffset, Config::ColorCalibrateIndicators);
this->drawArrowRight(Metrics::ArrowMargin, Metrics::MiddleLargeTextLineY + Metrics::LargeTextLineHArrowYOffset, Config::ColorCalibrateIndicators);
this->display->setTextColor(Config::ColorCalibrateIndicators);
this->display->setCursor(Metrics::ArrowMargin, Config::DisplayHeight - Metrics::LargeTextLineHeight + Metrics::LargeTextLineYOffset);
this->display->print("OK");
this->drawSetHeight();
}
// Credit: https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int
uint16_t ipow(uint16_t base, uint8_t exp)
{
int result = 1;
for (;;)
{
if (exp & 1)
result *= base;
exp >>= 1;
if (!exp)
break;
base *= base;
}
return result;
}
void BaseHeightEntryScreen::onButton(Button button)
{
switch (button)
{
case Button::Top:
{
uint16_t height = this->getHeight();
uint16_t increment = ipow(10, 3 - this->editingDigit);
uint16_t modulus = increment * 10;
uint16_t remainder = height % modulus;
uint16_t offset = height - remainder;
height = offset + ((remainder + increment) % modulus);
if (height > 1999)
height %= 2000;
this->setHeight(height);
this->drawSetHeight();
break;
}
case Button::Middle:
{
this->editingDigit++;
if (this->editingDigit > 3)
this->editingDigit = 0;
this->drawSetHeight();
break;
}
case Button::Bottom:
{
if (!this->isValidHeight())
return;
if (this->nextPage())
{
this->editingDigit = 0;
this->drawTitle();
this->drawSetHeight();
}
break;
}
}
}
void BaseHeightEntryScreen::onTick()
{
}
void BaseHeightEntryScreen::drawTitle()
{
this->drawLargeTextLineCentered(this->getTitle(), 0, Config::ColorMenuHeaderText, Config::ColorMenuHeaderBackground);
}
void BaseHeightEntryScreen::drawSetHeight()
{
char heightText[7];
uint16_t height = this->getHeight();
if (height > 999)
heightText[0] = '0' + ((height / 1000) % 10);
else
heightText[0] = '0';
heightText[1] = '.';
heightText[2] = '0' + ((height / 100) % 10);
heightText[3] = '0' + ((height / 10) % 10);
heightText[4] = '0' + (height % 10);
heightText[5] = 'm';
heightText[6] = 0;
int16_t textX;
int16_t textY;
uint16_t textW;
uint16_t textH;
this->display->getTextBounds(&heightText[0], 0, 0, &textX, &textY, &textW, &textH);
textX = (Config::DisplayWidth - textW) / 2;
uint8_t editingChar = this->editingDigit;
// Skip the dot
if (editingChar > 0)
editingChar++;
if (this->lastTextWidth > 0)
this->display->fillRect((Config::DisplayWidth - this->lastTextWidth) / 2, Metrics::MiddleLargeTextLineY, this->lastTextWidth, Metrics::LargeTextLineHeight, Config::ColorCalibrateBackground);
this->lastTextWidth = textW;
this->display->setTextColor(this->isValidHeight() ? Config::ColorCalibrateValue : Config::ColorCalibrateInvalidValue);
this->display->setCursor(textX, Metrics::MiddleLargeTextLineY + Metrics::LargeTextLineYOffset);
// Draw each character ourselves so we can keep track of where the line should be drawn
for (uint8_t i = 0; i < sizeof(heightText); i++)
{
int16_t cursorStart = this->display->getCursorX();
this->display->print(heightText[i]);
if (i == editingChar)
this->display->drawFastHLine(cursorStart, Metrics::MiddleLargeTextLineY + Metrics::LargeTextLineHeight - 1, this->display->getCursorX() - cursorStart, Config::ColorCalibrateDigitMarker);
}
}

View File

@ -0,0 +1,34 @@
#ifndef __screen_baseheightentry
#define __screen_baseheightentry
#include "../screen.h"
#include "../control.h"
class BaseHeightEntryScreen : public BaseScreen
{
public:
BaseHeightEntryScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
protected:
virtual void initHeights() = 0;
virtual uint16_t getHeight() = 0;
virtual void setHeight(uint16_t value) = 0;
virtual bool nextPage() = 0;
virtual bool isValidHeight() = 0;
virtual const char* getTitle() = 0;
private:
void drawTitle();
void drawSetHeight();
uint16_t lastTextWidth = 0;
uint8_t editingDigit = 0;
};
#endif

View File

@ -0,0 +1,69 @@
#include "./calibrate.h"
#include "./home.h"
#include "include/metrics.h"
#include "lib/settings.h"
void CalibrateScreen::initHeights()
{
this->height[CalibrateStepCurrent] = Control.getCurrentHeight();
this->height[CalibrateStepMax] = Settings.Height.Maximum;
this->height[CalibrateStepMin] = Settings.Height.Minimum;
}
bool CalibrateScreen::nextPage()
{
this->step = (CalibrateStep)(this->step + 1);
if (this->step < __CalibrateStepCount)
return true;
Settings.Height.Offset = this->height[CalibrateStepCurrent] - Control.getCurrentMeasurement();
Settings.Height.Maximum = this->height[CalibrateStepMax];
Settings.Height.Minimum = this->height[CalibrateStepMin];
writeSettingsHeights();
this->screenManager->show<HomeScreen>();
return false;
}
bool CalibrateScreen::isValidHeight()
{
switch (this->step)
{
case CalibrateStepCurrent:
return this->height[CalibrateStepCurrent] >= Control.getCurrentMeasurement();
case CalibrateStepMin:
return this->height[CalibrateStepMin] <= this->height[CalibrateStepCurrent];
case CalibrateStepMax:
return
this->height[CalibrateStepMax] > this->height[CalibrateStepMin] &&
this->height[CalibrateStepMax] >= this->height[CalibrateStepCurrent];
default:
return true;
}
}
const char* CalibrateScreen::getTitle()
{
switch (this->step)
{
case CalibrateStepCurrent:
return "Calibrate";
case CalibrateStepMin:
return "Minimum";
case CalibrateStepMax:
return "Maximum";
default:
return nullptr;
}
}

View File

@ -0,0 +1,47 @@
#ifndef __screen_calibrate
#define __screen_calibrate
#include "include/screenids.h"
#include "./baseheightentry.h"
#include "../screen.h"
#include "../control.h"
enum CalibrateStep
{
CalibrateStepCurrent = 0,
CalibrateStepMax,
CalibrateStepMin,
__CalibrateStepCount
};
/*
* Calibrate screen
* Configures the absolute height (calculates the offset) and
* the allowed minimum and maximum absolute height.
*/
class CalibrateScreen : public BaseHeightEntryScreen
{
public:
CalibrateScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseHeightEntryScreen(screenManager, display) { }
ScreenId screenId() { return ScreenId::Calibrate; };
protected:
void initHeights();
uint16_t getHeight() { return this->height[this->step]; }
void setHeight(uint16_t value) { this->height[this->step] = value; };
bool nextPage();
bool isValidHeight();
const char* getTitle();
private:
CalibrateStep step = CalibrateStepCurrent;
uint16_t height[__CalibrateStepCount];
};
#endif

152
src/lib/screen/home.cpp Normal file
View File

@ -0,0 +1,152 @@
#include "./home.h"
#include "./move.h"
#include "./move-sensorerror.h"
#include "include/config.h"
#include "include/metrics.h"
#include "lib/settings.h"
#include "lib/control.h"
#include "lib/state.h"
#include "./menu.h"
void HomeScreen::onShow()
{
this->showTime = CurrentTime;
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->display->fillScreen(Config::ColorHomeBackground);
this->drawPreset1();
this->drawMenu();
this->drawPreset2();
this->drawNonPresetHeight();
}
void HomeScreen::onButton(Button button)
{
this->showTime = CurrentTime;
if (this->idle)
{
this->screenManager->displayOn();
this->idle = false;
// Preset buttons activate immediately
if (button == Button::Middle)
return;
}
uint16_t targetHeight;
switch (button)
{
case Button::Top:
targetHeight = Settings.Height.Preset[0];
break;
case Button::Bottom:
targetHeight = Settings.Height.Preset[1];
break;
case Button::Middle:
this->screenManager->show<MenuScreen>();
return;
}
if (targetHeight > 0)
{
MoveReturnScreen = this->screenId();
Control.moveStart(targetHeight);
this->screenManager->show<MoveScreen>();
}
}
void HomeScreen::onTick()
{
if (!this->idle && CurrentTime - this->showTime >= Config::DisplayIdleTime)
{
this->screenManager->displayOff();
this->idle = true;
}
}
void HomeScreen::drawPreset1()
{
this->drawPreset(0, Settings.Height.Preset[0]);
}
void HomeScreen::drawPreset2()
{
this->drawPreset(Config::DisplayHeight - Metrics::LargeTextLineHeight, Settings.Height.Preset[1]);
}
void HomeScreen::drawNonPresetHeight()
{
auto y = Metrics::LargeTextLineHeight;
if (Control.getCurrentHeight() != Settings.Height.Preset[0] &&
Control.getCurrentHeight() != Settings.Height.Preset[1])
{
this->display->setTextColor(Config::ColorNonPresetText);
this->drawHeight(y, Control.getCurrentHeight());
}
}
void HomeScreen::drawPreset(int16_t y, uint16_t value)
{
uint16_t textColor;
uint16_t backgroundColor;
uint16_t arrowColor;
// An exact comparison is enough here, the movement code takes care of that if it's "close enough"
if (value == Control.getCurrentHeight())
{
textColor = Config::ColorPresetSelectedText;
backgroundColor = Config::ColorPresetSelectedBackground;
arrowColor = 0;
}
else
{
textColor = Config::ColorPresetText;
backgroundColor = Config::ColorPresetBackground;
arrowColor = Config::ColorPresetArrow;
}
this->display->fillRect(0, y, Config::DisplayWidth, Metrics::LargeTextLineHeight, backgroundColor);
if (arrowColor)
this->drawArrowLeft(Metrics::ArrowMargin, y + Metrics::LargeTextLineHArrowYOffset, arrowColor);
this->display->setTextColor(textColor);
this->drawHeight(y, value);
}
void HomeScreen::drawHeight(int16_t y, uint16_t value)
{
char textValue[6];
Control.getDisplayHeight(&textValue[0], value);
this->printCentered(&textValue[0], y + Metrics::LargeTextLineYOffset);
}
void HomeScreen::drawMenu()
{
this->drawArrowLeft(Metrics::ArrowMargin, Metrics::MiddleLargeTextLineY + Metrics::LargeTextLineHArrowYOffset, Config::ColorHomeMenuArrow);
this->display->setTextColor(Config::ColorHomeMenuText);
this->printCentered("Menu", Metrics::MiddleLargeTextLineY + Metrics::LargeTextLineYOffset);
}

37
src/lib/screen/home.h Normal file
View File

@ -0,0 +1,37 @@
#ifndef __screen_home
#define __screen_home
#include "include/screenids.h"
#include "../screen.h"
#include "../Control.h"
/*
* Home screen
* Shows the current presets and an option to go to the menu.
*/
class HomeScreen : public BaseScreen
{
public:
HomeScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
ScreenId screenId() { return ScreenId::Home; };
private:
uint32_t showTime = 0;
bool idle = false;
void drawPreset1();
void drawPreset2();
void drawNonPresetHeight();
void drawPreset(int16_t y, uint16_t value);
void drawHeight(int16_t y, uint16_t value);
void drawMenu();
};
#endif

41
src/lib/screen/manual.cpp Normal file
View File

@ -0,0 +1,41 @@
#include "./manual.h"
#include "./home.h"
#include "./move.h"
#include "include/metrics.h"
#include "lib/settings.h"
#include "../state.h"
void ManualScreen::initHeights()
{
this->height = Control.getCurrentHeight();
}
bool ManualScreen::nextPage()
{
if (this->height == Control.getCurrentHeight())
{
this->screenManager->show<HomeScreen>();
return false;
}
MoveReturnScreen = this->screenId();
Control.moveStart(this->height);
this->screenManager->show<MoveScreen>();
return false;
}
void ManualScreen::setHeight(uint16_t value)
{
if (value < Settings.Height.Minimum)
this->height = Settings.Height.Minimum;
else if (value > Settings.Height.Maximum)
this->height = Settings.Height.Maximum;
else
this->height = value;
}

34
src/lib/screen/manual.h Normal file
View File

@ -0,0 +1,34 @@
#ifndef __screen_manual
#define __screen_manual
#include "include/screenids.h"
#include "./baseheightentry.h"
#include "../screen.h"
#include "../Control.h"
/*
* Manual screen
* Allows manual entry of the preferred height.
*/
class ManualScreen : public BaseHeightEntryScreen
{
public:
ManualScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseHeightEntryScreen(screenManager, display) { }
ScreenId screenId() { return ScreenId::Manual; };
protected:
void initHeights();
uint16_t getHeight() { return this->height; }
void setHeight(uint16_t value);
bool nextPage();
bool isValidHeight() { return true; }
const char* getTitle() { return "Manual"; }
private:
uint16_t height;
};
#endif

115
src/lib/screen/menu.cpp Normal file
View File

@ -0,0 +1,115 @@
#include "./menu.h"
#include "./home.h"
#include "./calibrate.h"
#include "./manual.h"
#include "./presets.h"
#include "include/config.h"
#include "include/metrics.h"
void MenuScreen::onShow()
{
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->display->fillScreen(Config::ColorHomeBackground);
this->drawLargeTextLineCentered("Menu", 0, Config::ColorMenuHeaderText, Config::ColorMenuHeaderBackground);
for (uint8_t i = 0; i < (uint8_t)MenuItem::__Count; i++)
this->drawMenuItem(i);
}
void MenuScreen::onButton(Button button)
{
uint8_t previousIndex = this->itemIndex;
switch (button)
{
case Button::Middle:
this->activateMenuItem((MenuItem)this->itemIndex);
return;
case Button::Top:
if (this->itemIndex == 0)
this->itemIndex = (uint8_t)MenuItem::__Count;
this->itemIndex--;
break;
case Button::Bottom:
this->itemIndex++;
if (this->itemIndex == (uint8_t)MenuItem::__Count)
this->itemIndex = 0;
break;
}
this->drawMenuItem(previousIndex);
this->drawMenuItem(this->itemIndex);
}
void MenuScreen::onTick()
{
}
void MenuScreen::drawMenuItem(uint8_t index)
{
uint16_t y = (index + 2) * Metrics::LargeTextLineHeight;
bool isSelected = index == this->itemIndex;
this->drawLargeTextLineCentered(
this->getMenuItemTitle((MenuItem)index), y,
isSelected ? Config::ColorMenuSelectedText : Config::ColorMenuText,
isSelected ? Config::ColorMenuSelectedBackground : Config::ColorMenuBackground);
}
const char* MenuScreen::getMenuItemTitle(MenuItem item)
{
switch (item)
{
case MenuItem::Manual:
return "Manual";
case MenuItem::Presets:
return "Presets";
case MenuItem::Calibrate:
return "Calibrate";
case MenuItem::Exit:
return "Exit";
default:
return nullptr;
}
}
void MenuScreen::activateMenuItem(MenuItem item)
{
switch (item)
{
case MenuItem::Manual:
this->screenManager->show<ManualScreen>();
break;
case MenuItem::Presets:
this->screenManager->show<PresetsScreen>();
break;
case MenuItem::Calibrate:
this->screenManager->show<CalibrateScreen>();
break;
case MenuItem::Exit:
this->screenManager->show<HomeScreen>();
break;
default:
break;
}
}

45
src/lib/screen/menu.h Normal file
View File

@ -0,0 +1,45 @@
#ifndef __screen_menu
#define __screen_menu
#include "include/screenids.h"
#include "../screen.h"
#include "../Control.h"
enum class MenuItem
{
Manual = 0,
Presets,
Calibrate,
Exit,
__Count
};
/*
* Menu screen
* Shows the menu which allows access to the calibration and
* manual adjustment screens.
*/
class MenuScreen : public BaseScreen
{
public:
MenuScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
ScreenId screenId() { return ScreenId::Menu; };
private:
void drawMenuItem(uint8_t index);
const char* getMenuItemTitle(MenuItem item);
void activateMenuItem(MenuItem item);
uint8_t itemIndex = 0;
};
#endif

View File

@ -0,0 +1,42 @@
#include "./move-overcurrent.h"
#include "./home.h"
#include "include/config.h"
#include "include/metrics.h"
#include "lib/control.h"
#include "lib/state.h"
void MoveOvercurrentScreen::onShow()
{
auto y = Metrics::LargeTextLineHeight + Metrics::LargeTextLineYOffset;
this->display->fillScreen(Config::ColorErrorBackground);
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->display->setTextColor(Config::ColorErrorText);
this->printCentered("ERROR", y);
y += Metrics::LargeTextLineHeight;
this->display->setFont(Metrics::SmallFont);
this->display->setTextSize(Metrics::SmallFontTextSize);
this->printCentered("motor overcurrent", y);
y += Metrics::SmallTextLineHeight;
this->printCentered("press any button", y);
y += Metrics::SmallTextLineHeight + Metrics::LargeTextLineHeight;
}
void MoveOvercurrentScreen::onButton(Button button)
{
this->screenManager->show<HomeScreen>();
}
void MoveOvercurrentScreen::onTick()
{
}

View File

@ -0,0 +1,27 @@
#ifndef __screen_move_overcurrent
#define __screen_move_overcurrent
#include "include/screenids.h"
#include "../screen.h"
#include "../Control.h"
/*
* Move overcurrent screen
* Displays a warning that the motor driver has reached the set maximum current.
*/
class MoveOvercurrentScreen : public BaseScreen
{
public:
MoveOvercurrentScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
ScreenId screenId() { return ScreenId::MoveOvercurrent; };
private:
};
#endif

View File

@ -0,0 +1,76 @@
#include "./move-sensorerror.h"
#include "./home.h"
#include "include/config.h"
#include "include/metrics.h"
#include "lib/control.h"
#include "lib/state.h"
void MoveSensorErrorScreen::onShow()
{
auto y = Metrics::LargeTextLineHeight + Metrics::LargeTextLineYOffset;
this->display->fillScreen(Config::ColorErrorBackground);
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->display->setTextColor(Config::ColorErrorText);
this->printCentered("ERROR", y);
y += Metrics::LargeTextLineHeight;
this->display->setFont(Metrics::SmallFont);
this->display->setTextSize(Metrics::SmallFontTextSize);
this->printCentered("height sensor failed", y);
y += Metrics::SmallTextLineHeight;
this->printCentered("waiting for stable value", y);
y += Metrics::SmallTextLineHeight + Metrics::LargeTextLineHeight;
this->currentHeightY = y;
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->lastRefresh = CurrentTime;
this->drawLastMeasurement();
Control.stabilizeStart();
}
void MoveSensorErrorScreen::onButton(Button button)
{
}
void MoveSensorErrorScreen::onTick()
{
if (Control.stabilized())
{
this->screenManager->show<HomeScreen>();
return;
}
if (CurrentTime - this->lastRefresh >= Config::DisplayRefreshRate)
{
this->drawLastMeasurement();
this->lastRefresh = CurrentTime;
}
}
void MoveSensorErrorScreen::drawLastMeasurement()
{
char currentHeightText[6];
Control.getDisplayHeight(&currentHeightText[0], Control.getLastMeasurement());
if (this->lastTextWidth > 0)
this->display->fillRect((Config::DisplayWidth - this->lastTextWidth) / 2, this->currentHeightY, this->lastTextWidth, Metrics::LargeTextLineHeight, Config::ColorErrorBackground);
this->display->setTextColor(Config::ColorMoveTarget);
this->lastTextWidth = this->printCentered(&currentHeightText[0], this->currentHeightY + Metrics::LargeFontBaseline);
}

View File

@ -0,0 +1,33 @@
#ifndef __screen_move_sensorerror
#define __screen_move_sensorerror
#include "include/screenids.h"
#include "../screen.h"
#include "../Control.h"
/*
* Move sensor error screen
* Shows a warning that the height sensor is not providing valid values.
* Can only be dismissed after the sensor is stable again.
*/
class MoveSensorErrorScreen : public BaseScreen
{
public:
MoveSensorErrorScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
ScreenId screenId() { return ScreenId::MoveSensorError; };
private:
uint32_t lastRefresh;
uint8_t currentHeightY;
uint16_t lastTextWidth = 0;
void drawLastMeasurement();
};
#endif

92
src/lib/screen/move.cpp Normal file
View File

@ -0,0 +1,92 @@
#include "./move.h"
#include "./home.h"
#include "include/config.h"
#include "include/metrics.h"
#include "lib/settings.h"
#include "lib/control.h"
#include "lib/state.h"
void MoveScreen::onShow()
{
auto startY = Metrics::LargeTextLineHeight;
auto arrowY = startY + Metrics::LargeTextLineHeight + Metrics::LargeTextLineVArrowYOffset;
auto arrowX = (Config::DisplayWidth - Metrics::VArrowWidth) / 2;
auto stopY = Config::DisplayHeight - Metrics::LargeTextLineHeight;
this->display->fillScreen(Config::ColorMoveBackground);
// Stop
this->display->setFont(Metrics::SmallFont);
this->display->setTextSize(Metrics::SmallFontTextSize);
this->display->setTextColor(Config::ColorMoveStop);
this->printCentered("Press any button to", stopY - Metrics::SmallTextLineHeight);
this->display->setFont(Metrics::LargeFont);
this->display->setTextSize(Metrics::LargeFontTextSize);
this->printCentered("STOP", stopY + Metrics::LargeTextLineYOffset);
char targetHeightText[6];
Control.getDisplayHeight(&targetHeightText[0], Control.getMoveTargetHeight());
this->display->setTextColor(Config::ColorMoveCurrent);
// Target and arrow
if (Control.getMoveDirection() == MoveDirection::Up)
{
this->currentHeightY = startY + (Metrics::LargeTextLineHeight * 2);
this->printCentered(&targetHeightText[0], startY + Metrics::LargeTextLineYOffset);
this->drawArrowUp(arrowX, arrowY, Config::ColorMoveArrow);
}
else
{
this->currentHeightY = startY;
this->printCentered(&targetHeightText[0], startY + (Metrics::LargeTextLineHeight * 2) + Metrics::LargeTextLineYOffset);
this->drawArrowDown(arrowX, arrowY, Config::ColorMoveArrow);
}
this->lastRefresh = CurrentTime;
this->drawCurrentHeight();
}
void MoveScreen::onButton(Button button)
{
Control.moveStop();
this->screenManager->show<HomeScreen>();
}
void MoveScreen::onTick()
{
bool isStabilizing = Control.getIsStabilizing();
// Don't update every tick, monitoring the current height is more
// important and the flicker would be unpleasant as well.
if (this->lastIsStabilizing != isStabilizing || CurrentTime - this->lastRefresh >= Config::DisplayRefreshRate)
{
this->drawCurrentHeight();
this->lastRefresh = CurrentTime;
this->lastIsStabilizing = isStabilizing;
}
}
void MoveScreen::drawCurrentHeight()
{
char currentHeightText[6];
if (Control.getIsStabilizing())
Control.getDisplayHeight(&currentHeightText[0], 0);
else
Control.getDisplayHeight(&currentHeightText[0], Control.getCurrentHeight());
if (this->lastTextWidth > 0)
this->display->fillRect((Config::DisplayWidth - this->lastTextWidth) / 2, this->currentHeightY, this->lastTextWidth, Metrics::LargeTextLineHeight, Config::ColorMoveBackground);
this->display->setTextColor(Config::ColorMoveTarget);
this->lastTextWidth = this->printCentered(&currentHeightText[0], this->currentHeightY + Metrics::LargeTextLineYOffset);
}

33
src/lib/screen/move.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef __screen_move
#define __screen_move
#include "include/screenids.h"
#include "../screen.h"
#include "../Control.h"
/*
* Move screen
* Shows the current and target height
*/
class MoveScreen : public BaseScreen
{
public:
MoveScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseScreen(screenManager, display) { }
void onShow();
void onButton(Button button);
void onTick();
ScreenId screenId() { return ScreenId::Move; };
private:
uint32_t lastRefresh;
uint8_t currentHeightY;
uint16_t lastTextWidth = 0;
bool lastIsStabilizing = true;
void drawCurrentHeight();
};
#endif

View File

@ -0,0 +1,55 @@
#include "./presets.h"
#include "./home.h"
#include "include/metrics.h"
#include "lib/settings.h"
void PresetsScreen::initHeights()
{
this->height[0] = Settings.Height.Preset[0];
this->height[1] = Settings.Height.Preset[1];
}
bool PresetsScreen::nextPage()
{
this->preset++;
if (this->preset < 2)
return true;
Settings.Height.Preset[0] = this->height[0];
Settings.Height.Preset[1] = this->height[1];
writeSettingsHeights();
this->screenManager->show<HomeScreen>();
return false;
}
void PresetsScreen::setHeight(uint16_t value)
{
if (value < Settings.Height.Minimum)
this->height[this->preset] = Settings.Height.Minimum;
else if (value > Settings.Height.Maximum)
this->height[this->preset] = Settings.Height.Maximum;
else
this->height[this->preset] = value;
}
const char* PresetsScreen::getTitle()
{
switch (this->preset)
{
case 0:
return "Preset 1";
case 1:
return "Preset 2";
default:
return nullptr;
}
}

35
src/lib/screen/presets.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef __screen_presets
#define __screen_presets
#include "include/screenids.h"
#include "./baseheightentry.h"
#include "../screen.h"
#include "../control.h"
/*
* Presets screen
* Configures the presets.
*/
class PresetsScreen : public BaseHeightEntryScreen
{
public:
PresetsScreen(ScreenManager* screenManager, Adafruit_GFX* display) : BaseHeightEntryScreen(screenManager, display) { }
ScreenId screenId() { return ScreenId::Presets; };
protected:
void initHeights();
uint16_t getHeight() { return this->height[this->preset]; }
void setHeight(uint16_t value);
bool nextPage();
bool isValidHeight() { return true; }
const char* getTitle();
private:
uint8_t preset = 0;
uint16_t height[2];
};
#endif

74
src/lib/settings.cpp Normal file
View File

@ -0,0 +1,74 @@
#include "./settings.h"
#include <EEPROM.h>
#define SettingsIdentifier 0x42
#define SettingsVersion1 1
SettingsContainer Settings;
struct SettingsHeader
{
uint8_t identifier;
uint8_t version;
};
#define SettingsHeightsAddress sizeof(SettingsHeader)
bool initialized = false;
// Forward declarations
void readHeights();
bool readSettings()
{
memset(&Settings, 0, sizeof(SettingsContainer));
SettingsHeader header;
EEPROM.get(0, header);
if (header.identifier == SettingsIdentifier)
{
if (header.version >= 1)
readHeights();
initialized = true;
return true;
}
return false;
}
bool allowPartialWrite()
{
if (initialized)
return true;
initialized = true;
SettingsHeader header;
header.identifier = SettingsIdentifier;
header.version = SettingsVersion1;
EEPROM.put(0, header);
writeSettingsHeights();
return false;
}
void readHeights()
{
EEPROM.get(SettingsHeightsAddress, Settings.Height);
}
void writeSettingsHeights()
{
if (allowPartialWrite())
EEPROM.put(SettingsHeightsAddress, Settings.Height);
}

27
src/lib/settings.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef __settings
#define __settings
#include <stdint.h>
#include <string.h>
struct SettingsHeights
{
uint16_t Offset;
uint16_t Minimum;
uint16_t Maximum;
uint16_t Preset[2];
};
struct SettingsContainer
{
SettingsHeights Height;
};
extern bool readSettings();
extern void writeSettingsHeights();
extern SettingsContainer Settings;
#endif

4
src/lib/state.cpp Normal file
View File

@ -0,0 +1,4 @@
#include "state.h"
uint32_t CurrentTime;
ScreenId MoveReturnScreen = (ScreenId)0;

10
src/lib/state.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef __state
#define __state
#include "stdint.h"
#include "include/screenids.h"
extern uint32_t CurrentTime;
extern ScreenId MoveReturnScreen;
#endif

1124
src/lib/vl53l0x.cpp Normal file

File diff suppressed because it is too large Load Diff

204
src/lib/vl53l0x.h Normal file
View File

@ -0,0 +1,204 @@
// Slightly modified version of https://github.com/pololu/vl53l0x-arduino
// which returns an error code if initialization fails.
#ifndef VL53L0X_h
#define VL53L0X_h
#include <Arduino.h>
enum class VL53L0XInitResult
{
Success,
InvalidIdentification,
GetSpadInfoFailed,
VHVCalibrationFailed,
PhaseCalibrationFailed,
};
static const uint16_t VL53L0XRangeNotStarted = 65533;
static const uint16_t VL53L0XRangeNotReady = 65534;
static const uint16_t VL53L0XRangeTimeout = 65535;
static const uint8_t VL53L0XAsyncStateNotStarted = 0;
static const uint8_t VL53L0XAsyncStateWaitingForStart = 1;
static const uint8_t VL53L0XAsyncStateWaitingForStatus = 2;
class VL53L0X
{
public:
// register addresses from API vl53l0x_device.h (ordered as listed there)
enum regAddr
{
SYSRANGE_START = 0x00,
SYSTEM_THRESH_HIGH = 0x0C,
SYSTEM_THRESH_LOW = 0x0E,
SYSTEM_SEQUENCE_CONFIG = 0x01,
SYSTEM_RANGE_CONFIG = 0x09,
SYSTEM_INTERMEASUREMENT_PERIOD = 0x04,
SYSTEM_INTERRUPT_CONFIG_GPIO = 0x0A,
GPIO_HV_MUX_ACTIVE_HIGH = 0x84,
SYSTEM_INTERRUPT_CLEAR = 0x0B,
RESULT_INTERRUPT_STATUS = 0x13,
RESULT_RANGE_STATUS = 0x14,
RESULT_CORE_AMBIENT_WINDOW_EVENTS_RTN = 0xBC,
RESULT_CORE_RANGING_TOTAL_EVENTS_RTN = 0xC0,
RESULT_CORE_AMBIENT_WINDOW_EVENTS_REF = 0xD0,
RESULT_CORE_RANGING_TOTAL_EVENTS_REF = 0xD4,
RESULT_PEAK_SIGNAL_RATE_REF = 0xB6,
ALGO_PART_TO_PART_RANGE_OFFSET_MM = 0x28,
I2C_SLAVE_DEVICE_ADDRESS = 0x8A,
MSRC_CONFIG_CONTROL = 0x60,
PRE_RANGE_CONFIG_MIN_SNR = 0x27,
PRE_RANGE_CONFIG_VALID_PHASE_LOW = 0x56,
PRE_RANGE_CONFIG_VALID_PHASE_HIGH = 0x57,
PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT = 0x64,
FINAL_RANGE_CONFIG_MIN_SNR = 0x67,
FINAL_RANGE_CONFIG_VALID_PHASE_LOW = 0x47,
FINAL_RANGE_CONFIG_VALID_PHASE_HIGH = 0x48,
FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT = 0x44,
PRE_RANGE_CONFIG_SIGMA_THRESH_HI = 0x61,
PRE_RANGE_CONFIG_SIGMA_THRESH_LO = 0x62,
PRE_RANGE_CONFIG_VCSEL_PERIOD = 0x50,
PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI = 0x51,
PRE_RANGE_CONFIG_TIMEOUT_MACROP_LO = 0x52,
SYSTEM_HISTOGRAM_BIN = 0x81,
HISTOGRAM_CONFIG_INITIAL_PHASE_SELECT = 0x33,
HISTOGRAM_CONFIG_READOUT_CTRL = 0x55,
FINAL_RANGE_CONFIG_VCSEL_PERIOD = 0x70,
FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI = 0x71,
FINAL_RANGE_CONFIG_TIMEOUT_MACROP_LO = 0x72,
CROSSTALK_COMPENSATION_PEAK_RATE_MCPS = 0x20,
MSRC_CONFIG_TIMEOUT_MACROP = 0x46,
SOFT_RESET_GO2_SOFT_RESET_N = 0xBF,
IDENTIFICATION_MODEL_ID = 0xC0,
IDENTIFICATION_REVISION_ID = 0xC2,
OSC_CALIBRATE_VAL = 0xF8,
GLOBAL_CONFIG_VCSEL_WIDTH = 0x32,
GLOBAL_CONFIG_SPAD_ENABLES_REF_0 = 0xB0,
GLOBAL_CONFIG_SPAD_ENABLES_REF_1 = 0xB1,
GLOBAL_CONFIG_SPAD_ENABLES_REF_2 = 0xB2,
GLOBAL_CONFIG_SPAD_ENABLES_REF_3 = 0xB3,
GLOBAL_CONFIG_SPAD_ENABLES_REF_4 = 0xB4,
GLOBAL_CONFIG_SPAD_ENABLES_REF_5 = 0xB5,
GLOBAL_CONFIG_REF_EN_START_SELECT = 0xB6,
DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD = 0x4E,
DYNAMIC_SPAD_REF_EN_START_OFFSET = 0x4F,
POWER_MANAGEMENT_GO1_POWER_FORCE = 0x80,
VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV = 0x89,
ALGO_PHASECAL_LIM = 0x30,
ALGO_PHASECAL_CONFIG_TIMEOUT = 0x30,
};
enum vcselPeriodType { VcselPeriodPreRange, VcselPeriodFinalRange };
uint8_t last_status; // status of last I2C transmission
VL53L0X(void);
void setAddress(uint8_t new_addr);
inline uint8_t getAddress(void) { return address; }
VL53L0XInitResult init(bool io_2v8 = true);
void writeReg(uint8_t reg, uint8_t value);
void writeReg16Bit(uint8_t reg, uint16_t value);
void writeReg32Bit(uint8_t reg, uint32_t value);
uint8_t readReg(uint8_t reg);
uint16_t readReg16Bit(uint8_t reg);
uint32_t readReg32Bit(uint8_t reg);
void writeMulti(uint8_t reg, uint8_t const * src, uint8_t count);
void readMulti(uint8_t reg, uint8_t * dst, uint8_t count);
bool setSignalRateLimit(float limit_Mcps);
float getSignalRateLimit(void);
bool setMeasurementTimingBudget(uint32_t budget_us);
uint32_t getMeasurementTimingBudget(void);
bool setVcselPulsePeriod(vcselPeriodType type, uint8_t period_pclks);
uint8_t getVcselPulsePeriod(vcselPeriodType type);
void startContinuous(uint32_t period_ms = 0);
void stopContinuous(void);
uint16_t readRangeContinuousMillimeters(void);
uint16_t readRangeSingleMillimeters(void);
void asyncStartReadRangeSingleMillimeters();
uint16_t asyncReadRangeSingleMillimeters();
bool asyncReading();
inline void setTimeout(uint16_t timeout) { io_timeout = timeout; }
inline uint16_t getTimeout(void) { return io_timeout; }
bool timeoutOccurred(void);
private:
// TCC: Target CentreCheck
// MSRC: Minimum Signal Rate Check
// DSS: Dynamic Spad Selection
struct SequenceStepEnables
{
boolean tcc, msrc, dss, pre_range, final_range;
};
struct SequenceStepTimeouts
{
uint16_t pre_range_vcsel_period_pclks, final_range_vcsel_period_pclks;
uint16_t msrc_dss_tcc_mclks, pre_range_mclks, final_range_mclks;
uint32_t msrc_dss_tcc_us, pre_range_us, final_range_us;
};
uint8_t address;
uint16_t io_timeout;
bool did_timeout;
uint16_t timeout_start_ms;
uint8_t stop_variable; // read by init and used when starting measurement; is StopVariable field of VL53L0X_DevData_t structure in API
uint32_t measurement_timing_budget_us;
uint8_t async_state = VL53L0XAsyncStateNotStarted;
bool getSpadInfo(uint8_t * count, bool * type_is_aperture);
void getSequenceStepEnables(SequenceStepEnables * enables);
void getSequenceStepTimeouts(SequenceStepEnables const * enables, SequenceStepTimeouts * timeouts);
bool performSingleRefCalibration(uint8_t vhv_init_byte);
static uint16_t decodeTimeout(uint16_t value);
static uint16_t encodeTimeout(uint32_t timeout_mclks);
static uint32_t timeoutMclksToMicroseconds(uint16_t timeout_period_mclks, uint8_t vcsel_period_pclks);
static uint32_t timeoutMicrosecondsToMclks(uint32_t timeout_period_us, uint8_t vcsel_period_pclks);
};
#endif

295
src/main.cpp Normal file
View File

@ -0,0 +1,295 @@
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <Bounce2.h>
#include "./include/config.h"
#include "./include/screenids.h"
#include "./lib/debug.h"
#include "./lib/settings.h"
#include "./lib/screen.h"
#include "./lib/vl53l0x.h"
#include "./lib/Control.h"
#include "./lib/motor.h"
#include "./lib/control.h"
#include "./lib/state.h"
#include "./lib/screen/home.h"
#include "./lib/screen/calibrate.h"
#include "./lib/screen/manual.h"
#include "./lib/screen/move-overcurrent.h"
#include "./lib/screen/move-sensorerror.h"
enum class InitSequenceStep
{
EEPROM = 0,
HeightSensorInit,
HeightSensorTest,
Last = HeightSensorTest
};
// Forward declarations
inline void setupHeightSensor();
inline void testHeightSensor();
void initSequenceStart();
void initSequenceSuccess(InitSequenceStep step);
void initSequenceError(InitSequenceStep step);
void initSequenceDisplayHeight(uint16_t measurement);
void initSequenceEnd();
auto display = Adafruit_ST7789(Config::DisplayPinCS, Config::DisplayPinDC, Config::DisplayPinRST);
auto screenManager = ScreenManager(&display);
Bounce buttons[3];
/*
Setup
*/
void setup()
{
DebugInit();
dln("[ MAIN ] Debug log started");
buttons[0].attach(Config::ButtonPinTop, INPUT_PULLUP);
buttons[1].attach(Config::ButtonPinMiddle, INPUT_PULLUP);
buttons[2].attach(Config::ButtonPinBottom, INPUT_PULLUP);
display.init(Config::DisplayWidth, Config::DisplayHeight, SPI_MODE3);
display.setRotation(Config::DisplayRotation);
screenManager.init();
initSequenceStart();
motorInit();
// Load settings from EEPROM
auto initialized = readSettings();
initSequenceSuccess(InitSequenceStep::EEPROM);
// Initialize VL53L0X sensor
CurrentTime = millis();
setupHeightSensor();
testHeightSensor();
initSequenceEnd();
CurrentTime = millis();
if (initialized)
{
Control.snapToPreset();
screenManager.show<HomeScreen>();
}
else
{
screenManager.show<CalibrateScreen>();
}
}
inline void setupHeightSensor()
{
auto error = Control.init();
if (error != VL53L0XInitResult::Success)
{
initSequenceError(InitSequenceStep::HeightSensorInit);
switch (error)
{
case VL53L0XInitResult::InvalidIdentification:
display.print("Invalid identification");
break;
case VL53L0XInitResult::GetSpadInfoFailed:
display.print("GetSpadInfo failed");
break;
case VL53L0XInitResult::VHVCalibrationFailed:
display.print("VHV calibration failed");
break;
case VL53L0XInitResult::PhaseCalibrationFailed:
display.print("Phase calibration failed");
break;
default:
display.print("Unknown error");
break;
}
while(1);
}
initSequenceSuccess(InitSequenceStep::HeightSensorInit);
}
inline void testHeightSensor()
{
Control.stabilizeStart();
while (true)
{
if (Control.update() != ControlUpdateResult::SensorError)
{
initSequenceDisplayHeight(Control.getCurrentMeasurement());
if (Control.stabilized())
break;
}
else
initSequenceDisplayHeight(0);
CurrentTime = millis();
}
initSequenceSuccess(InitSequenceStep::HeightSensorTest);
}
/*
Loop
*/
void loop()
{
CurrentTime = millis();
switch (Control.update())
{
case ControlUpdateResult::TargetReached:
switch (MoveReturnScreen)
{
case ScreenId::Manual:
screenManager.show<ManualScreen>();
break;
default:
screenManager.show<HomeScreen>();
break;
}
break;
case ControlUpdateResult::SensorError:
screenManager.show<MoveSensorErrorScreen>(ScreenId::MoveSensorError);
break;
case ControlUpdateResult::Overcurrent:
screenManager.show<MoveOvercurrentScreen>(ScreenId::MoveOvercurrent);
break;
default:
break;
}
buttons[0].update();
buttons[1].update();
buttons[2].update();
if (buttons[0].fell())
{
//dln("[ MAIN ] Button pressed: Top");
screenManager.button(Button::Top);
}
if (buttons[1].fell())
{
//dln("[ MAIN ] Button pressed: Middle");
screenManager.button(Button::Middle);
}
if (buttons[2].fell())
{
//dln("[ MAIN ] Button pressed: Bottom");
screenManager.button(Button::Bottom);
}
screenManager.tick();
}
/*
Helper functions for the status display during the initialization sequence
*/
#define initSequenceTextSize 2
// Default font is 5x7
#define initSequenceTextY(step) ((1 + (uint8_t)step) * ((7 + 3) * initSequenceTextSize))
void initSequenceStart()
{
display.fillScreen(Config::ColorInitSeqBackground);
display.setTextSize(initSequenceTextSize);
display.setCursor(0, 0);
display.setTextColor(Config::ColorInitSeqTitle);
display.println("Initializing...");
display.setTextColor(Config::ColorInitSeqItems, Config::ColorInitSeqBackground);
display.setCursor(0, initSequenceTextY(0));
display.print(" reading EEPROM");
display.setCursor(0, initSequenceTextY(1));
display.print(" height sensor");
display.setCursor(0, initSequenceTextY(2));
display.print(" sensor test");
}
void initSequenceSuccess(InitSequenceStep step)
{
display.drawChar(0, initSequenceTextY(step), 'v', Config::ColorInitSeqSuccess, Config::ColorInitSeqBackground, initSequenceTextSize);
}
void initSequenceError(InitSequenceStep step)
{
display.drawChar(0, initSequenceTextY(step), 'x', Config::ColorInitSeqError, Config::ColorInitSeqBackground, initSequenceTextSize);
display.setCursor(0, initSequenceTextY(InitSequenceStep::Last + 2));
}
void initSequenceDisplayHeight(uint16_t measurement)
{
display.setCursor(0, initSequenceTextY(InitSequenceStep::Last + 2));
if (measurement > 0)
{
display.print(measurement);
display.print("mm ");
}
else
display.print("- ");
}
void initSequenceEnd()
{
display.setTextSize(1);
delay(1000);
}