Compare commits

..

3 commits

17 changed files with 58671 additions and 64674 deletions

2
.gitignore vendored
View file

@ -38,3 +38,5 @@ fp-info-cache
# Place Footprints plugin
place_footprints.*
**/jlcpcb/*

2
firmware/.gitignore vendored
View file

@ -1,2 +0,0 @@
micropython
pico-sdk

View file

@ -5,18 +5,13 @@ Custom micropython build for the Olimex RP2350B-XL. Comes with some features ena
## build instructions
0. Make sure to have a compiler toolchain supporting the RP2 architecture installed (Mac: `brew install gcc-arm-embedded`)
1. Clone *[pico-sdk](https://github.com/raspberrypi/pico-sdk)* (to this folder or somewhere else on your machine)
2. Change to the *pico-sdk* folder and run `git submodule update --init`
3. Point an environment variable `PICO_SDK_PATH` to the *pico-sdk* folder
4. Install *[picotool](https://github.com/raspberrypi/picotool)*
5. Clone the `micropython` repo (to this folder or somewhere else on your machine)
6. From within the `micropython` repo root, run `make -C mpy-cross`
7. Copy the `OLIMEX_PICO2_XL` folder to `micropython/ports/rp2/boards` if it doesn't exist; overwrite it if it does
8. Change to the `micropython/ports/rp2` folder
9. Run `make BOARD=OLIMEX_PICO2_XL submodules` to install dependencies
10. Run `make BOARD=OLIMEX_PICO2_XL clean` to remove previous build artefacts (if any)
11. Run `make BOARD=OLIMEX_PICO2_XL` to build the firmware
12. To rebuild: `make BOARD=OLIMEX_PICO2_XL clean && make BOARD=OLIMEX_PICO2_XL`
1. Clone the `micropython` repo
2. From within the `micropython` repo root, run `make -C mpy-cross`
3. Copy the `OLIMEX_PICO2_XL` folder to `micropython/ports/rp2/boards` if it doesn't exist; overwrite it if it does
4. Change to the `boards/rp2` folder
5. Run `make BOARD=OLIMEX_PICO2_XL submodules` to install dependencies
6. Run `make BOARD=OLIMEX_PICO2_XL clean` to remove previous build artefacts (if any)
7. Run `make BOARD=OLIMEX_PICO2_XL` to build the firmware
## flashing

View file

@ -1,20 +0,0 @@
# MIDI Drum Rack example
Press to send a MIDI note in the range from C1 to D#2. Buttons are
ordered in the same way the pads are in Ableton Drum Rack: with the USB
port poiting from the player left-to-right, bottom-to-top.
## build
1. Make a micropython build with the libraries added:
```bash
cd $MICROPYTHON_PATH/ports/rp2
make BOARD=OLIMEX_PICO2_XL clean && make V=1 BOARD=OLIMEX_PICO2_XL FROZEN_MANIFEST={path-to-neogrid-project}/firmware/examples/nanogrid-drum-rack/manifest.py
```
2. Flush the board with the resulting uf2 (see
[firmware/README.md](/firmware/README.md))
3. Copy the `main.py` to the board

View file

@ -1,246 +0,0 @@
# MicroPython USB MIDI example
#
# This example demonstrates creating a custom MIDI device.
#
# To run this example:
#
# 1. Make sure `usb-device-midi` is installed via: mpremote mip install usb-device-midi
#
# 2. Run the example via: mpremote run midi_example.py
#
# 3. mpremote will exit with an error after the previous step, because when the
# example runs the existing USB device disconnects and then re-enumerates with
# the MIDI interface present. At this point, the example is running.
#
# 4. To see output from the example, re-connect: mpremote connect PORTNAME
#
#
# MIT license; Copyright (c) 2023-2024 Angus Gratton
import usb.device
from usb.device.midi import MIDIInterface
import time
from machine import Pin
import array, time
import rp2
NUM_COL = 4
NUM_ROW = 4
NUM_LEDS = NUM_COL * NUM_ROW
PIN_NUM = 16
brightness = 0.2
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(1) [T3 - 1]
jmp(not_x, "do_zero") .side(0) [T1 - 1]
jmp("bitloop") .side(0) [T2 - 1]
label("do_zero")
nop() .side(1) [T2 - 1]
wrap()
def init_leds():
# Create the StateMachine with the ws2812 program, outputting on pin
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
##########################################################################
def show_all():
dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for i, c in enumerate(ar):
r = int(((c >> 8) & 0xFF) * brightness)
g = int(((c >> 16) & 0xFF) * brightness)
b = int((c & 0xFF) * brightness)
dimmer_ar[i] = (g<<16) + (r<<8) + b
sm.put(dimmer_ar, 8)
def set_led(i, color):
row = i // NUM_COL
col = i - row * NUM_COL
new_col = NUM_COL - col - 1
new_row = NUM_ROW - row - 1 if new_col % 2 == 0 else row
ar[new_col * NUM_ROW + new_row] = (color[1]<<16) + (color[0]<<8) + color[2]
return (set_led, show_all)
class MIDIExample(MIDIInterface):
# Very simple example event handler functions, showing how to receive note
# and control change messages sent from the host to the device.
#
# If you need to send MIDI data to the host, then it's fine to instantiate
# MIDIInterface class directly.
def on_open(self):
super().on_open()
print("Device opened by host")
def on_note_on(self, channel, pitch, vel):
print(f"RX Note On channel {channel} pitch {pitch} velocity {vel}")
def on_note_off(self, channel, pitch, vel):
print(f"RX Note Off channel {channel} pitch {pitch} velocity {vel}")
def on_control_change(self, channel, controller, value):
print(f"RX Control channel {channel} controller {controller} value {value}")
m = MIDIExample()
# Remove builtin_driver=True if you don't want the MicroPython serial REPL available.
usb.device.get().init(m, builtin_driver=True)
print("Waiting for USB host to configure the interface...")
while not m.is_open():
time.sleep_ms(100)
# TX constants
CHANNEL = 0
PITCH_C1 = 37
# CONTROLLER = 64
# control_val = 0
def init_btns():
row_pins = [
Pin(0, Pin.OUT),
Pin(1, Pin.OUT),
Pin(2, Pin.OUT),
Pin(3, Pin.OUT),
]
col_pins = [
Pin(32, Pin.IN, Pin.PULL_UP),
Pin(33, Pin.IN, Pin.PULL_UP),
Pin(34, Pin.IN, Pin.PULL_UP),
Pin(35, Pin.IN, Pin.PULL_UP),
]
pressed_keys = set()
# reset cols
for pin in row_pins:
pin.value(1)
def loop():
pressed_keys.clear()
for row, row_pin in enumerate(row_pins):
# set only active pin low, keep rest high
row_pin.value(0)
for col, col_pin in enumerate(col_pins):
key = (
(NUM_ROW - row - 1) +
(NUM_COL - col - 1) * NUM_ROW
)
if not col_pin.value():
pressed_keys.add(key)
row_pin.value(1)
return set(pressed_keys)
return loop
btn_loop = init_btns()
turned_on = set()
(set_led, show_all) = init_leds()
C_ACTIVE = (140, 60, 140)
C_INACTIVE = (0, 0, 0)
def shader(x, y, t):
st_x = float(x + 0.5) / NUM_COL
st_y = float(y + 0.5) / NUM_ROW
inv_t = 0.5 * (1.0 - t)
if st_x < t or st_y < t or (1.0 - st_x) < t or (1.0 - st_y) < t:
if t < 0.5:
return (
int(C_ACTIVE[0] * 0.5 * t),
int(C_ACTIVE[1] * 0.5 * t),
int(C_ACTIVE[2] * 0.5 * t),
)
if t >= 0.5:
return (
int(C_ACTIVE[0] * inv_t),
int(C_ACTIVE[1] * inv_t),
int(C_ACTIVE[2] * inv_t),
)
return C_INACTIVE
def play_animation(dur_s, fps):
cur_ms = float(0)
dur_ms = dur_s * 1000
interval_ms = int(1000 / fps)
processing_ms = 200
while cur_ms < dur_ms:
for r in range(0, NUM_ROW):
for c in range(0, NUM_COL):
t = cur_ms / dur_ms
color = shader(c, r, t)
set_led(c + r * NUM_COL, color)
show_all()
cur_ms += interval_ms + processing_ms
time.sleep_ms(interval_ms)
for l in range(NUM_LEDS):
set_led(l, C_INACTIVE)
show_all()
play_animation(3, 10)
print("Starting loop...")
while m.is_open():
time.sleep_ms(5)
# print(f"TX Note On channel {CHANNEL} pitch {PITCH_C1}")
# m.note_on(CHANNEL, PITCH_C1) # Velocity is an optional third argument
# time.sleep(0.5)
# print(f"TX Note Off channel {CHANNEL} pitch {PITCH_C1}")
# m.note_off(CHANNEL, PITCH_C1)
# time.sleep(1)
# print(f"TX Control channel {CHANNEL} controller {CONTROLLER} value {control_val}")
# m.control_change(CHANNEL, CONTROLLER, control_val)
# control_val += 1
# if control_val == 0x7F:
# control_val = 0
# time.sleep(1)
pressed = btn_loop()
to_turn_on = pressed.difference(turned_on)
to_turn_off = turned_on.difference(pressed)
if len(to_turn_on):
print("to_turn_on", to_turn_on)
if len(to_turn_off):
print("to_turn_off", to_turn_off)
for key in to_turn_on:
m.note_on(CHANNEL, PITCH_C1 + key - 1)
set_led(key, C_ACTIVE)
turned_on.add(key)
for key in to_turn_off:
m.note_off(CHANNEL, PITCH_C1 + key - 1)
turned_on.remove(key)
set_led(key, C_INACTIVE)
show_all()
print("USB host has reset device, example done.")

View file

@ -1,4 +0,0 @@
metadata(version="0.1.0")
include("$(PORT_DIR)/boards/manifest.py")
require("usb-device")
require("usb-device-midi")

View file

@ -1,144 +0,0 @@
# Example using PIO to drive a set of WS2812 LEDs.
import array, time
from machine import Pin
import rp2
# Configure the number of WS2812 LEDs.
NUM_LEDS = 16
PIN_NUM = 16
brightness = 0.2
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(1) [T3 - 1]
jmp(not_x, "do_zero") .side(0) [T1 - 1]
jmp("bitloop") .side(0) [T2 - 1]
label("do_zero")
nop() .side(1) [T2 - 1]
wrap()
# Create the StateMachine with the ws2812 program, outputting on pin
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM))
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
##########################################################################
def pixels_show():
dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)])
for i,c in enumerate(ar):
r = int(((c >> 8) & 0xFF) * brightness)
g = int(((c >> 16) & 0xFF) * brightness)
b = int((c & 0xFF) * brightness)
dimmer_ar[i] = (g<<16) + (r<<8) + b
sm.put(dimmer_ar, 8)
time.sleep_ms(10)
def pixels_set(i, color):
ar[i] = (color[1]<<16) + (color[0]<<8) + color[2]
def pixels_fill(color):
for i in range(len(ar)):
pixels_set(i, color)
def color_chase(color, wait):
for i in range(NUM_LEDS):
pixels_set(i, color)
time.sleep(wait)
pixels_show()
time.sleep(0.2)
def wheel(pos):
# Input a value 0 to 255 to get a color value.
# The colours are a transition r - g - b - back to r.
if pos < 0 or pos > 255:
return (0, 0, 0)
if pos < 85:
return (255 - pos * 3, pos * 3, 0)
if pos < 170:
pos -= 85
return (0, 255 - pos * 3, pos * 3)
pos -= 170
return (pos * 3, 0, 255 - pos * 3)
def rainbow_cycle(wait):
for j in range(255):
for i in range(NUM_LEDS):
rc_index = (i * 256 // NUM_LEDS) + j
pixels_set(i, wheel(rc_index & 255))
pixels_show()
time.sleep(wait)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)
print("fills")
for color in COLORS:
pixels_fill(color)
pixels_show()
time.sleep(0.2)
print("chases")
for color in COLORS:
color_chase(color, 0.01)
print("rainbow")
rainbow_cycle(0)
row_pins = [
Pin(0, Pin.OUT),
Pin(1, Pin.OUT),
Pin(2, Pin.OUT),
Pin(3, Pin.OUT),
]
col_pins = [
Pin(32, Pin.IN, Pin.PULL_UP),
Pin(33, Pin.IN, Pin.PULL_UP),
Pin(34, Pin.IN, Pin.PULL_UP),
Pin(35, Pin.IN, Pin.PULL_UP),
]
# reset cols
for pin in row_pins:
pin.value(1)
row_count = len(row_pins)
col_count = len(col_pins)
key_num = 0
pressed_keys = set()
while True:
pressed_keys.clear()
for row, row_pin in enumerate(row_pins):
# set only active pin low, keep rest high
row_pin.value(0)
# for col, col_pin in enumerate(col_pins):
# col_pin.value(1)
# time.sleep_ms(10)
for col, col_pin in enumerate(col_pins):
key = col_count * row + col + 1
if not col_pin.value():
pressed_keys.add(key)
# print("key", key, "pin", col, ":", row, col_pin.value())
row_pin.value(1)
print("pressed", pressed_keys)
time.sleep_ms(50)

View file

@ -1,13 +1,13 @@
(footprint "Olimex RP2350B-XL"
(version 20241229)
(version 20260206)
(generator "pcbnew")
(generator_version "9.0")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 25 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "0c8f97ca-349c-45d9-ac62-de6411d83df4")
(uuid "ec0842d5-29cf-4b3a-9624-b630b88aa6eb")
(effects
(font
(size 1 1)
@ -19,7 +19,7 @@
(at 0 26.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "bfa8cf7c-8492-4486-a8cc-ea085995dd05")
(uuid "5618066e-38a0-4088-a048-fc70fe837d77")
(effects
(font
(size 1 1)
@ -32,7 +32,7 @@
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "fc75ef25-db03-4c1e-a40c-f44fccf1f86c")
(uuid "d1043463-cc01-4215-82e0-4717b85d7ce2")
(effects
(font
(size 1 1)
@ -45,7 +45,7 @@
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "19eb7e2e-046e-4c89-b0bd-cedc46ffbfcf")
(uuid "2b43a2ce-8054-473e-aa19-410928f058db")
(effects
(font
(size 1 1)
@ -54,6 +54,7 @@
)
)
(attr smd)
(duplicate_pad_numbers_are_jumpers no)
(fp_rect
(start -13.65 0.2)
(end 13.6 50.95)
@ -63,50 +64,24 @@
)
(fill no)
(layer "F.SilkS")
(uuid "3f068985-2ecb-4351-ad4a-13f6554aa658")
(uuid "ab24610d-6a32-410a-9545-1674995d75d6")
)
(fp_rect
(start -4.4 0.25)
(end 4.4 5.5)
(start 4.4 0.25)
(end -4.4 5.5)
(stroke
(width 0.1)
(type solid)
(type dash)
)
(fill yes)
(fill no)
(layer "F.SilkS")
(uuid "19b3c883-1b98-4dab-8227-a36b5e5bb955")
)
(fp_text user "1"
(at 15.6 1.8 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "253bf0f2-0d21-4564-8217-2943a4f1f21a")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "1"
(at -7.95 1.775 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "85318dfe-f3a0-4060-9ea7-0e95e3a44ba6")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
(uuid "44f8ad6f-5a92-4b52-bf12-4ff2fa08512b")
)
(fp_text user "2"
(at -15.575 1.8 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "d249ec90-33c6-4dd0-a5b3-5bc7ff1548ed")
(uuid "0cbd49d0-663a-4d77-852f-393bbbb03a50")
(effects
(font
(size 1 1)
@ -115,11 +90,24 @@
(justify right bottom)
)
)
(fp_text user "1"
(at -7.95 1.775 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "a858b503-3527-43d1-ac0e-baa3cd91e778")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "USB on front!"
(at 0.025 6.45 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "e4662b08-bc3e-459e-a4c8-6c1f51fbc6dd")
(uuid "568322bd-a90f-4e8b-9f20-a323ea106ee7")
(effects
(font
(size 1.2 1.2)
@ -132,7 +120,7 @@
(at 7.95 1.825 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "edd2f2f5-5016-461f-a0d5-4cd4f6ce6f75")
(uuid "76476773-69aa-4fa8-be15-fc056f2ce704")
(effects
(font
(size 1 1)
@ -141,11 +129,24 @@
(justify right bottom)
)
)
(fp_text user "1"
(at 15.6 1.8 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "5093cabf-2c44-401b-9dee-8eca00a5f9ad")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "${REFERENCE}"
(at 0 28 0)
(unlocked yes)
(layer "F.Fab")
(uuid "7b75bf1b-c03a-4371-a3e6-061765b80325")
(uuid "99a8813c-4ba8-483c-814a-f43e3af63cc8")
(effects
(font
(size 1 1)
@ -158,28 +159,28 @@
(size 1.4 1.4)
(drill 1.4)
(layers "*.Cu" "*.Mask")
(uuid "30ab0560-0180-44db-9390-c4b04be163c0")
(uuid "3d81b15c-6025-4f94-9f6e-ea3e6fa3b262")
)
(pad "" np_thru_hole circle
(at -11.77 48.36 180)
(size 1.4 1.4)
(drill 1.4)
(layers "*.Cu" "*.Mask")
(uuid "6957d827-5343-4542-aafb-d8136ac48efb")
(uuid "6b6ac3bc-0762-4f78-9645-f5f18479dd71")
)
(pad "" np_thru_hole circle
(at 11.77 2.64 180)
(size 1.4 1.4)
(drill 1.4)
(layers "*.Cu" "*.Mask")
(uuid "cbcdea61-3cd4-407c-95ce-bdb71caf9091")
(uuid "2779ce7c-8146-453b-9f81-664a2b04ed01")
)
(pad "" np_thru_hole circle
(at 11.77 48.36 180)
(size 1.4 1.4)
(drill 1.4)
(layers "*.Cu" "*.Mask")
(uuid "1ce8f0e7-b7d0-463b-9d0a-f296fcd30cca")
(uuid "dd33fe35-6b5d-4fa2-a1a9-7f8c2aa85769")
)
(pad "1" smd rect
(at -7.96 1.37 180)
@ -188,7 +189,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3f0e8608-1e81-484c-a9dc-f5154e72ce78")
(uuid "6eace6bc-a93f-44b4-855a-ae0100afcb2b")
)
(pad "2" smd rect
(at -15.58 1.37)
@ -197,7 +198,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "6bf62609-7d52-4ae4-a08e-f2c1fabac6b8")
(uuid "76b10d2e-3df7-4899-9721-192994644541")
)
(pad "3" smd rect
(at -7.96 3.91 180)
@ -206,7 +207,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7b87f622-6873-4cb4-ad78-06e2120659b7")
(uuid "758c15b8-4009-491f-9cd3-1e4fa32f77c7")
)
(pad "4" smd rect
(at -15.58 3.91)
@ -215,7 +216,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "93c62bb8-659c-48e5-882b-3075092fb82f")
(uuid "a0d27dbd-3775-4103-ab36-445584e24dbf")
)
(pad "5" smd rect
(at -7.96 6.45 180)
@ -224,7 +225,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7f534bcd-3c9b-4a36-b159-eb8265487837")
(uuid "84a14643-cf8a-4c99-804a-701a8f40280a")
)
(pad "6" smd rect
(at -15.58 6.45)
@ -233,7 +234,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2c8e6739-beae-4bc9-ba92-9d528e29b440")
(uuid "995eae87-a82d-46a1-9b09-9ebb88651743")
)
(pad "7" smd rect
(at -7.96 8.99 180)
@ -242,7 +243,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "32dd4811-a636-412a-8f88-07688906634a")
(uuid "faebd5c5-1f8a-46d1-bc91-baeb6efe7faf")
)
(pad "8" smd rect
(at -15.58 8.99)
@ -251,7 +252,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "67652bd6-eb49-467a-8a40-c14ae579dcda")
(uuid "193e4c91-2599-4c94-ae1f-4c51e77dfab9")
)
(pad "9" smd rect
(at -7.96 11.53 180)
@ -260,7 +261,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b1bb5f8a-7ec5-4559-9811-01cebc1555dc")
(uuid "431024c2-15eb-4717-9349-47c3d5013e92")
)
(pad "10" smd rect
(at -15.58 11.53)
@ -269,7 +270,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "a6fc73ae-f189-4c68-8330-ab48a1804f45")
(uuid "acab4016-1a7a-4ab1-b504-fa3e0038bb80")
)
(pad "11" smd rect
(at -7.96 14.07 180)
@ -278,7 +279,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "26cf1a7f-3a63-4bec-95ad-f5e2573aba26")
(uuid "aa9b2265-d90b-413b-b08a-cdd6d0b875a8")
)
(pad "12" smd rect
(at -15.58 14.07)
@ -287,7 +288,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "f06d6421-c859-455b-9283-eead62a99852")
(uuid "46129f9b-7c2f-4bb3-92b3-b1ce7bcb7151")
)
(pad "13" smd rect
(at -7.96 16.61 180)
@ -296,7 +297,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "bea1de7d-cd34-473a-85e7-423314b254bb")
(uuid "318094eb-cbf4-4840-92ec-bfc09fff0d60")
)
(pad "14" smd rect
(at -15.58 16.61)
@ -305,7 +306,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "1b2205fd-8899-4979-9e18-6402e984ecc3")
(uuid "91a87cbc-e94b-4fc5-8846-ce55e5ea587e")
)
(pad "15" smd rect
(at -7.96 19.15 180)
@ -314,7 +315,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "151ccafb-90af-4f3f-8e2c-d45441657daf")
(uuid "6eaac144-dcc2-4559-a0f8-539b829b8866")
)
(pad "16" smd rect
(at -15.58 19.15)
@ -323,7 +324,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "abfbb030-ea2b-4112-a49f-a9eaccf47866")
(uuid "f7c6e960-724f-410c-bb16-9c5235aebff7")
)
(pad "17" smd rect
(at -7.96 21.69 180)
@ -332,7 +333,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b02ff5f0-6e0b-4e5c-87cb-85a47cb2eccb")
(uuid "5ab339f1-8dde-42f1-b6c9-a1bb9327f9a6")
)
(pad "18" smd rect
(at -15.58 21.69)
@ -341,7 +342,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "d2d9e9c3-aa0e-4e24-82b8-5274e46a05a3")
(uuid "9a265429-874b-4d06-ad83-2c9d0ea5fedc")
)
(pad "19" smd rect
(at -7.96 24.23 180)
@ -350,7 +351,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "fb0dafed-bdeb-4496-b6b1-aa3e7de278e4")
(uuid "d341ddcc-545e-4c98-9dc0-7dea154b42b4")
)
(pad "20" smd rect
(at -15.58 24.23)
@ -359,7 +360,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "d8fe9128-4e36-4e83-8d28-bc3107fd2a4f")
(uuid "027213ca-070a-4c61-bd22-c3b424134780")
)
(pad "21" smd rect
(at -7.96 26.77 180)
@ -368,7 +369,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "148557b6-a2fb-4f23-8e84-ff96090b5908")
(uuid "1e83bbd4-db50-4479-be3d-9b77bae02739")
)
(pad "22" smd rect
(at -15.58 26.77)
@ -377,7 +378,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7c5c6b20-9925-461b-96ca-fb124fd00300")
(uuid "4fa553a9-fe14-405b-8583-e4fe49237907")
)
(pad "23" smd rect
(at -7.96 29.31 180)
@ -386,7 +387,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "c7ab261a-f7bc-4c35-ae22-6c5d22f95978")
(uuid "bb1fe587-dcb6-43bf-b515-da7f1371f4d8")
)
(pad "24" smd rect
(at -15.58 29.31)
@ -395,7 +396,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "aade4e04-ff46-4666-95a3-7078a89385c0")
(uuid "7f0ed78d-5ad5-4eaa-a06d-53f6cbd626d7")
)
(pad "25" smd rect
(at -7.96 31.85 180)
@ -404,7 +405,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2412bd61-6e16-4820-a83a-31eecb758b21")
(uuid "e8b5b3f7-d13f-4d4e-9a82-1d1b2ef3b0a3")
)
(pad "26" smd rect
(at -15.58 31.85)
@ -413,7 +414,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "36c58757-fec5-4599-bc72-6c6286dccd5e")
(uuid "654bcb3a-cb48-43aa-b4d2-755cc1364da2")
)
(pad "27" smd rect
(at -7.96 34.39 180)
@ -422,7 +423,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "f94dbb9f-dc81-4586-8709-5a4e8574d9cc")
(uuid "1715963c-c697-47b8-a603-70984c0c125b")
)
(pad "28" smd rect
(at -15.58 34.39)
@ -431,7 +432,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ef0ab9b4-a272-4716-a0e2-74c6ffd6d0e1")
(uuid "057ba5cc-85fa-41d5-b541-d35b42a13294")
)
(pad "29" smd rect
(at -7.96 36.93 180)
@ -440,7 +441,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "08121263-87f8-4f31-9062-9ea26ebeb747")
(uuid "97b32642-764f-464b-9901-d38daccf1606")
)
(pad "30" smd rect
(at -15.58 36.93)
@ -449,7 +450,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e605ac35-dc4a-4ec1-9c34-00ecadf9a1b6")
(uuid "ab938296-6a5e-4fed-b400-72997a1f0dce")
)
(pad "31" smd rect
(at -7.96 39.47 180)
@ -458,7 +459,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "076d2672-4fe5-40a0-98f8-977725f78cff")
(uuid "60d56884-d117-431e-9c6b-901e69c66fb4")
)
(pad "32" smd rect
(at -15.58 39.47)
@ -467,7 +468,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "513b065a-5d78-4939-bb44-f430e3ca6789")
(uuid "989c150b-bc8b-4ca2-94f9-47295624cee9")
)
(pad "33" smd rect
(at -7.96 42.01 180)
@ -476,7 +477,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "dc6755bc-9adb-4cd8-990f-13da794ea9c8")
(uuid "fcb94f2e-6fed-42ed-afd4-52a3761dad29")
)
(pad "34" smd rect
(at -15.58 42.01)
@ -485,7 +486,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "0a80e000-3546-46db-a0c5-67d5d0914e80")
(uuid "6e216658-dd8f-4db4-a900-962a349102e3")
)
(pad "35" smd rect
(at -7.96 44.55 180)
@ -494,7 +495,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "27846937-c4fc-44be-a5b2-690863fa8fe5")
(uuid "f1663092-3633-40eb-aa64-7825d73954ec")
)
(pad "36" smd rect
(at -15.58 44.55)
@ -503,7 +504,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b3770b28-dfc2-4b2d-a944-29f04039fdef")
(uuid "83317897-b8c8-45b8-8b18-af22bf06eb40")
)
(pad "37" smd rect
(at -7.96 47.09 180)
@ -512,7 +513,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2f401a89-f92c-41e2-b00a-1c72a006e047")
(uuid "0fc6cd75-0982-4449-a912-955ea9aeb720")
)
(pad "38" smd rect
(at -15.58 47.09)
@ -521,7 +522,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "d84ace46-6d74-4d44-9314-2474dfb5d0a9")
(uuid "769c96cc-b25d-426e-8621-59883ece0dde")
)
(pad "39" smd rect
(at -7.96 49.63 180)
@ -530,7 +531,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3ce40518-7ba9-4491-a1a4-55d101b0ad40")
(uuid "e9fb1e36-8324-40c5-9e7d-c65c579ec6a9")
)
(pad "40" smd rect
(at -15.58 49.63)
@ -539,7 +540,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b168a8a9-6193-4070-9989-e5300ed77086")
(uuid "fd5670e3-cf84-4386-8c74-c11e1a6cb731")
)
(pad "41" smd rect
(at 15.58 1.37 180)
@ -548,7 +549,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "a3b7104a-a8c6-4f69-b7e7-224d0b7af0b7")
(uuid "4ef4fa91-42c7-48f5-9b42-52789bcf06ee")
)
(pad "42" smd rect
(at 7.96 1.37)
@ -557,7 +558,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "07cdb56c-1b5e-4cc3-9a75-260f10edbf23")
(uuid "e027d1b2-412a-4470-829f-f485531bcaf7")
)
(pad "43" smd rect
(at 15.58 3.91 180)
@ -566,7 +567,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e87e755c-1308-4cf2-9102-cd4d157d2b73")
(uuid "0e4f3304-4354-40de-a1df-472aae0fd20a")
)
(pad "44" smd rect
(at 7.96 3.91)
@ -575,7 +576,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "77f24b58-66f7-46e2-ac66-740dab6a8e2f")
(uuid "b9d61ca2-8182-4155-9c77-a85cf29e5f0f")
)
(pad "45" smd rect
(at 15.58 6.45 180)
@ -584,7 +585,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "78a7f6a2-09d1-412b-bad0-7211731d3415")
(uuid "799d5be0-b07a-4ecf-a295-c122ecc0b790")
)
(pad "46" smd rect
(at 7.96 6.45)
@ -593,7 +594,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e32fc9ba-1318-4f4e-8d68-32d50d0fffd2")
(uuid "4fd679c5-febb-4ffb-9378-f2900667002a")
)
(pad "47" smd rect
(at 15.58 8.99 180)
@ -602,7 +603,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b0cf34dd-670d-4864-a0c4-6d45c786856b")
(uuid "28129e0e-195c-45c7-a36b-1b1d3323beb4")
)
(pad "48" smd rect
(at 7.96 8.99)
@ -611,7 +612,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "16e7c6d5-bce4-4e06-ab22-f2c346c66af3")
(uuid "085df889-bbf9-401c-878e-addd4778679d")
)
(pad "49" smd rect
(at 15.58 11.53 180)
@ -620,7 +621,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b42f9a3c-e5b8-431f-929c-48a6c4cce796")
(uuid "fd7c37e9-28bf-43b8-94a7-49cde0269099")
)
(pad "50" smd rect
(at 7.96 11.53)
@ -629,7 +630,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "5e4afd56-a41c-4725-bb7a-6513f114f6bc")
(uuid "f564838a-0b88-42bd-83c9-35ff197dd616")
)
(pad "51" smd rect
(at 15.58 14.07 180)
@ -638,7 +639,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3f18dd77-ccc5-47c8-85cc-726ec107744a")
(uuid "d21bfbdd-1f29-4570-8d47-a0ebea5393ba")
)
(pad "52" smd rect
(at 7.96 14.07)
@ -647,7 +648,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "df6c2fb0-ffab-48c5-b67d-649a3dde8b64")
(uuid "86bcb12e-757e-4cca-8ab2-00a25bdadc73")
)
(pad "53" smd rect
(at 15.58 16.61 180)
@ -656,7 +657,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "c42aed00-f819-4e30-8185-36e24ee18f2e")
(uuid "78cf16db-5c29-402d-9475-898ace3d3cb9")
)
(pad "54" smd rect
(at 7.96 16.61)
@ -665,7 +666,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2205baf2-ddd6-4437-b1e7-e270d9910b3f")
(uuid "6d68b5d7-5256-4834-86a7-1c8a92c149f4")
)
(pad "55" smd rect
(at 15.58 19.15 180)
@ -674,7 +675,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "6a6f76b1-0e86-47fc-a35c-c77e2f53d46c")
(uuid "59bd8c5a-1f48-4031-bda2-37b4f130d9af")
)
(pad "56" smd rect
(at 7.96 19.15)
@ -683,7 +684,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "536fb177-b648-48d1-9ab4-25df3051082e")
(uuid "f1b89807-12c6-482b-aced-8e4cfd263593")
)
(pad "57" smd rect
(at 15.58 21.69 180)
@ -692,7 +693,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ae2aff4d-5b0f-4cb8-8683-e7f3e95c88a8")
(uuid "6f005697-94b6-4f9b-940a-2eaeffa48186")
)
(pad "58" smd rect
(at 7.96 21.69)
@ -701,7 +702,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "15f587dd-7bd4-4243-ac8c-440e9eb29a15")
(uuid "b6c81dfe-b79c-4632-a559-e647274e33fd")
)
(pad "59" smd rect
(at 15.58 24.23 180)
@ -710,7 +711,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3521d2a6-6fdc-4ec2-ab26-163a0f7182b4")
(uuid "a47ad4a4-e315-417b-8a01-56ad7b8c8938")
)
(pad "60" smd rect
(at 7.96 24.23)
@ -719,7 +720,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ebf16316-2194-4f6e-bbe9-dde03725596d")
(uuid "444ab13f-e7b3-4242-ac2d-76ecdbc26965")
)
(pad "61" smd rect
(at 15.58 26.77 180)
@ -728,7 +729,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "8df504cd-65e6-4c47-adf4-125cf69cd2e1")
(uuid "6d0297e5-95ac-4a82-a453-d887ff95af6b")
)
(pad "62" smd rect
(at 7.96 26.77)
@ -737,7 +738,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "def4747a-053d-4081-a7e8-a792df5be3c1")
(uuid "0349db70-7ef6-4d91-9a3e-5b39f3664589")
)
(pad "63" smd rect
(at 15.58 29.31 180)
@ -746,7 +747,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "068be8e1-7701-49d4-8bd7-474728251ef2")
(uuid "84bde529-4ced-4424-87fc-935619527cfd")
)
(pad "64" smd rect
(at 7.96 29.31)
@ -755,7 +756,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "49cefdde-4942-4bcd-a9ee-d51a8f04d805")
(uuid "7c83098a-d787-46ea-b2c1-63b7b9c1e9fe")
)
(pad "65" smd rect
(at 15.58 31.85 180)
@ -764,7 +765,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "4fe927b6-85e6-430d-b4bb-3d20f8b7863f")
(uuid "5107a10e-80a9-4ec5-97bb-0d453a04c527")
)
(pad "66" smd rect
(at 7.96 31.85)
@ -773,7 +774,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "285b090a-9b7e-4a7d-855c-50fa308d207e")
(uuid "7e60a5f5-cc97-473f-b5bf-8767ebf90be5")
)
(pad "67" smd rect
(at 15.58 34.39 180)
@ -782,7 +783,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e40ae8a6-c2ae-4626-913d-70c796c5975c")
(uuid "f476cf4f-8fe2-49c8-b206-b13b2b2a8e32")
)
(pad "68" smd rect
(at 7.96 34.39)
@ -791,7 +792,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "8b93ec1d-00cc-42ba-b5c0-26baa8d3ecdc")
(uuid "05cafde8-59ba-4209-80e1-4f3dc780ff6b")
)
(pad "69" smd rect
(at 15.58 36.93 180)
@ -800,7 +801,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2711a873-0b56-43ce-83f9-f556de0f8c96")
(uuid "54bae68d-4254-498e-9f09-c6d55e422137")
)
(pad "70" smd rect
(at 7.96 36.93)
@ -809,7 +810,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7148dfa4-63a1-429a-a7ba-704b8656a04a")
(uuid "30231b6f-7b89-4b48-9f00-af790fbce604")
)
(pad "71" smd rect
(at 15.58 39.47 180)
@ -818,7 +819,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "6da2c359-c7ee-4e28-b55f-7777d79b25c2")
(uuid "77488d6b-8a98-4aa9-8981-143624812434")
)
(pad "72" smd rect
(at 7.96 39.47)
@ -827,7 +828,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "577bed90-c820-4177-9fdc-052b4d269bef")
(uuid "5e5f01a2-a785-4672-a14a-ed530193b6f3")
)
(pad "73" smd rect
(at 15.58 42.01 180)
@ -836,7 +837,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "880611e8-10a1-451b-9e70-89b56e96853e")
(uuid "543b75d6-8404-480a-a630-cfe7fe1d2109")
)
(pad "74" smd rect
(at 7.96 42.01)
@ -845,7 +846,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "8c9fa1b6-8871-4ee1-990f-b269d3b748cb")
(uuid "1048bd5a-3e0a-4836-bac8-c61541138f82")
)
(pad "75" smd rect
(at 15.58 44.55 180)
@ -854,7 +855,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3d482f2a-b0a1-4c06-9b7b-08753d1a4dc2")
(uuid "06deae95-4e0a-4eba-a849-a75cd40f27ba")
)
(pad "76" smd rect
(at 7.96 44.55)
@ -863,7 +864,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "f2ad8f80-a321-476c-b7fc-06de46f1bfad")
(uuid "1045c54b-667a-4db0-9ab0-76db69073655")
)
(pad "77" smd rect
(at 15.58 47.09 180)
@ -872,7 +873,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "cb7d4461-4a79-463a-b3f9-f9d370b84fb8")
(uuid "c65af7e6-eee0-46a9-9587-c914a3a835e4")
)
(pad "78" smd rect
(at 7.96 47.09)
@ -881,7 +882,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "bd170f33-bf7e-403e-acbc-6a5cfdde3d5d")
(uuid "83a379cc-acb7-4470-9625-5613667ee062")
)
(pad "79" smd rect
(at 15.58 49.63 180)
@ -890,7 +891,7 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "91230eac-bf0d-41f4-903f-c7bb19b503b7")
(uuid "ed4e676b-9aa9-4386-a5a8-a17fe8176e26")
)
(pad "80" smd rect
(at 7.96 49.63)
@ -899,19 +900,16 @@
(offset 0.9 0)
)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "6becef61-651e-46f2-9240-1e74cbe901ec")
(uuid "0629e929-738d-463b-b5c9-7aa196f49174")
)
(zone
(net 0)
(net_name "")
(layer "F.SilkS")
(uuid "d5bc1ca6-b04a-4fb0-9f73-fc55649b94da")
(uuid "e2af00fb-c853-48a9-80a0-b6103bf50674")
(hatch full 0.5)
(connect_pads
(clearance 0)
)
(min_thickness 0.25)
(filled_areas_thickness no)
(keepout
(tracks allowed)
(vias allowed)
@ -926,6 +924,7 @@
(fill
(thermal_gap 0.5)
(thermal_bridge_width 0.5)
(island_removal_mode 0)
)
(polygon
(pts
@ -934,16 +933,13 @@
)
)
(zone
(net 0)
(net_name "")
(layer "F.SilkS")
(uuid "d882a8fb-b59b-4331-8393-04f7e3d1ecb5")
(uuid "0cd5cf8d-0994-4741-8e09-8547e5cc6f14")
(hatch full 0.5)
(connect_pads
(clearance 0)
)
(min_thickness 0.25)
(filled_areas_thickness no)
(keepout
(tracks allowed)
(vias allowed)
@ -958,6 +954,7 @@
(fill
(thermal_gap 0.5)
(thermal_bridge_width 0.5)
(island_removal_mode 0)
)
(polygon
(pts

View file

@ -0,0 +1,296 @@
(footprint "LED_SK6812MINI_HIDDEN_PADS"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(descr "3.5mm x 3.5mm PLCC4 Addressable RGB LED NeoPixel, https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf")
(tags "LED RGB NeoPixel Mini PLCC-4 3535")
(property "Value" "LED_SK6812MINI_HIDDEN_PADS"
(at 0 3.25 0)
(layer "F.Fab")
(uuid "956a095a-69da-4976-9e6b-7afce07e9dbf")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "a580e209-91d4-4bb1-985c-bc27247753bd")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "ed2cff44-0c0b-4ef4-8de7-51bfef6e679d")
(effects
(font
(size 1.27 1.27)
(thickness 0.15)
)
)
)
(property "Reference" "REF**"
(at 0 -1.85 0)
(layer "F.SilkS")
(uuid "5843c6a5-b0a0-4260-956b-174846406890")
(effects
(font
(size 0.8 0.65)
(thickness 0.08)
)
)
)
(attr smd)
(duplicate_pad_numbers_are_jumpers no)
(fp_line
(start -1.85 -1.825)
(end -1.85 -1.35)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "27f46d00-975f-4495-84e1-de40638f6b2b")
)
(fp_line
(start -1.85 -1.825)
(end -1.3 -1.825)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "5db2c7aa-b633-40d1-bb22-eae10a5848b6")
)
(fp_line
(start -1.85 0.05)
(end -1.85 0.4)
(stroke
(width 0.1)
(type solid)
)
(layer "F.SilkS")
(uuid "35a8edb1-5a71-4c03-bb26-79d0f986dd65")
)
(fp_line
(start -1.85 1.8125)
(end -1.85 1.35)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "58fa4867-6e70-4ba7-b331-af1f7098ee45")
)
(fp_line
(start -1.85 1.825)
(end 1.425 1.825)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "080ef673-c0b1-4d49-816a-d9c804078370")
)
(fp_line
(start 1.3 -1.825)
(end 1.85 -1.825)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "98019c15-74f0-4599-a6e5-7ed63e415942")
)
(fp_line
(start 1.425 1.825)
(end 1.9 1.35)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "787364ee-d3bf-47ec-993c-b00ffed20efd")
)
(fp_line
(start 1.85 -1.825)
(end 1.85 -1.35)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "5285f2f8-4ace-43e0-b0b5-0a25a7d336f1")
)
(fp_line
(start 1.85 -0.05)
(end 1.85 0.35)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "f8e8ae59-cbbf-4ca1-8dbb-2379c6295765")
)
(fp_line
(start -2.55 -2)
(end -2.55 2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "d0f64003-712d-47d2-a257-17256ba18fe1")
)
(fp_line
(start -2.55 2)
(end 2.55 2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "b4cacc8c-6ae7-470c-9ada-3f885c3d6281")
)
(fp_line
(start 2.55 -2)
(end -2.55 -2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "89cf9523-7456-48e0-9ea8-012a7546fcac")
)
(fp_line
(start 2.55 2)
(end 2.55 -2)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "0db7dfa3-9a47-4fea-8d29-ef98026dc69b")
)
(fp_line
(start -1.75 -1.75)
(end -1.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "2445b152-cdc9-4350-820c-8bb3f8709643")
)
(fp_line
(start -1.75 1.75)
(end 1.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "9c5c63e8-c311-40b5-95e2-81f680e7d47a")
)
(fp_line
(start 1.75 -1.75)
(end -1.75 -1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "4ff79426-d218-46ee-97c0-398c6499a7e8")
)
(fp_line
(start 1.75 0.75)
(end 0.75 1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "3ab021d0-0a53-4bc7-8f78-7d07d49a6269")
)
(fp_line
(start 1.75 1.75)
(end 1.75 -1.75)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "2872d124-4a7f-486c-b60b-c0d7a519f668")
)
(fp_circle
(center 0 0)
(end 0 -1.5)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.Fab")
(uuid "8fecb3a8-4e0e-4106-9e59-b23fa101b569")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "c7fd22a3-021e-4bde-bfae-134505127db5")
(effects
(font
(size 0.5 0.5)
(thickness 0.1)
)
)
)
(pad "1" smd rect
(at -1.2 -0.65)
(size 1.1 1.3)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "316fadae-a432-4d1b-b8e6-fd8017bc8bdf")
)
(pad "2" smd rect
(at -0.75 0.9)
(size 2 0.8)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "2996b5a5-cfef-45d1-9bcf-e114eef64661")
)
(pad "3" smd rect
(at 1.3 0.85)
(size 0.9 0.9)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "1c026238-e22e-4e24-b9c9-be6cc147c7fd")
)
(pad "4" smd rect
(at 0.85 -0.7)
(size 1.8 1.2)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "d963f36e-df30-499d-9995-1349cd89bc5b")
)
(embedded_fonts no)
(model "${KICAD9_3DMODEL_DIR}/LED_SMD.3dshapes/LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View file

@ -1,14 +1,14 @@
(footprint "LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
(version 20241229)
(version 20260206)
(generator "pcbnew")
(generator_version "9.0")
(generator_version "10.0")
(layer "F.Cu")
(descr "3.5mm x 3.5mm PLCC4 Addressable RGB LED NeoPixel, https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf")
(tags "LED RGB NeoPixel Mini PLCC-4 3535")
(property "Reference" "REF**"
(at 0 -1.85 0)
(layer "F.SilkS")
(uuid "5a11e3a0-df26-4e1e-8b8f-efb3ead5086b")
(uuid "cc3d1fe5-554b-40b3-959f-09e77841c386")
(effects
(font
(size 0.8 0.8)
@ -19,7 +19,7 @@
(property "Value" "LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
(at 0 3.25 0)
(layer "F.Fab")
(uuid "e06e35b3-e0aa-45c8-9c4c-d6ce7c824750")
(uuid "8490917f-662e-43aa-87a4-c6580c20b628")
(effects
(font
(size 1 1)
@ -32,7 +32,7 @@
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d1d514e2-b75a-404f-8c89-2ef6fd656f2a")
(uuid "3d00df0a-4182-4471-85af-e0af1c1733d8")
(effects
(font
(size 1.27 1.27)
@ -45,7 +45,7 @@
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "c9b5b815-b514-4091-86c6-0a3e60819067")
(uuid "8c59ac18-cdc4-485c-8835-baa256a9b759")
(effects
(font
(size 1.27 1.27)
@ -54,6 +54,7 @@
)
)
(attr smd)
(duplicate_pad_numbers_are_jumpers no)
(fp_line
(start -1.85 -1.825)
(end -1.85 -1.4)
@ -62,7 +63,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "f6e53583-4a73-42b8-91a9-e61d8b9f4786")
(uuid "b51faedb-11b6-42f1-b2c3-c04105f7586e")
)
(fp_line
(start -1.85 -1.825)
@ -72,7 +73,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "e0007227-7f77-47b5-821f-9557baa934c2")
(uuid "b40c3d18-e169-461a-b5a7-25013806294e")
)
(fp_line
(start -1.85 -0.325)
@ -82,7 +83,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "f510314b-ccbb-4882-b3fa-44cbbe9bad11")
(uuid "cb419b38-faf2-46c4-864c-c3cb4d534e68")
)
(fp_line
(start -1.85 1.8125)
@ -92,7 +93,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "5e1c5f36-a372-42fe-b4f0-082c3eaea380")
(uuid "f38ef1c0-3b08-4416-b77b-8b4cbfd06208")
)
(fp_line
(start -1.85 1.825)
@ -102,7 +103,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "51e9d6fe-e593-4051-8120-0d5f7401da41")
(uuid "be248b39-b8e9-4261-9095-ef4c501a0cfd")
)
(fp_line
(start 1.3 -1.825)
@ -112,7 +113,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "0c260f32-70f5-45b9-8c07-4c422f82811a")
(uuid "4cf4cea1-08ab-4b78-b2f8-fc5427f32167")
)
(fp_line
(start 1.425 1.825)
@ -122,7 +123,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "56bec386-0b4f-45ad-86dc-4505c9ef7d5d")
(uuid "bfea1619-0b46-4466-b4c2-dae68bbc6180")
)
(fp_line
(start 1.85 -1.825)
@ -132,7 +133,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "9e982f3d-9c63-44a2-96ba-4436c0fb7ea5")
(uuid "136bd36b-c025-4eb0-a2dc-5f5485f03b5a")
)
(fp_line
(start 1.85 -0.325)
@ -142,7 +143,7 @@
(type default)
)
(layer "F.SilkS")
(uuid "8b59e930-4c95-4cff-9aee-2de41bc7159c")
(uuid "41215911-e99d-4e68-b1fb-8cbe51503680")
)
(fp_line
(start -2.55 -2)
@ -152,7 +153,7 @@
(type solid)
)
(layer "F.CrtYd")
(uuid "72992e62-bce9-4f6e-9406-5d626166f6e0")
(uuid "1dcf91f8-13d9-4650-bc78-a991ee044d8b")
)
(fp_line
(start -2.55 2)
@ -162,7 +163,7 @@
(type solid)
)
(layer "F.CrtYd")
(uuid "3407ab69-504c-4f7b-94c8-4b7d0f807fa5")
(uuid "ca98259f-0427-49f0-bb14-de0b1b805a5b")
)
(fp_line
(start 2.55 -2)
@ -172,7 +173,7 @@
(type solid)
)
(layer "F.CrtYd")
(uuid "618d036d-5236-45e6-9dcf-8d85a1b73eed")
(uuid "c7dbc234-c2b1-47d9-af28-3e93f673133b")
)
(fp_line
(start 2.55 2)
@ -182,7 +183,7 @@
(type solid)
)
(layer "F.CrtYd")
(uuid "b6c113c4-050a-4055-bd0b-88b68607e013")
(uuid "64e9218c-9980-4754-bcd4-ac206a71af1a")
)
(fp_line
(start -1.75 -1.75)
@ -192,7 +193,7 @@
(type solid)
)
(layer "F.Fab")
(uuid "4bf15588-8141-4eed-9b3c-61f1a0af2e71")
(uuid "44bc9aa6-9f38-41e4-8e1d-027beac097c1")
)
(fp_line
(start -1.75 1.75)
@ -202,7 +203,7 @@
(type solid)
)
(layer "F.Fab")
(uuid "edf08d44-29ab-41d0-b891-6908b9c35b30")
(uuid "5b63dcf7-a4ac-402f-8245-cda83e5dda53")
)
(fp_line
(start 1.75 -1.75)
@ -212,7 +213,7 @@
(type solid)
)
(layer "F.Fab")
(uuid "d059dc71-e93e-4c09-98bd-8587f16853ad")
(uuid "b77e4234-a97f-4fac-8b3e-5f25442ebfb4")
)
(fp_line
(start 1.75 0.75)
@ -222,7 +223,7 @@
(type solid)
)
(layer "F.Fab")
(uuid "f77e6c0b-1ee4-4a22-9ff5-561d1f4206d5")
(uuid "fe0c1a2f-1699-4f53-a48a-732a010c59da")
)
(fp_line
(start 1.75 1.75)
@ -232,7 +233,7 @@
(type solid)
)
(layer "F.Fab")
(uuid "697d65c4-63d2-4b60-b801-a3800fcf954c")
(uuid "c05b8fc8-3498-41bd-a778-db3735fab15b")
)
(fp_circle
(center 0 0)
@ -243,12 +244,12 @@
)
(fill no)
(layer "F.Fab")
(uuid "974be58e-74de-4e07-947f-98852335e05c")
(uuid "68edb27c-62a1-4440-bb1a-1ef35269148a")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "44968780-5c6b-43a0-9bc4-76ab950d885b")
(uuid "a40b1aa9-dc6f-48d2-88cd-f3598adc4185")
(effects
(font
(size 0.5 0.5)
@ -260,25 +261,25 @@
(at -1.6 -0.875)
(size 1.3 0.85)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "3aa8cc5d-54e5-4038-aae5-88b9a0043bb9")
(uuid "05223953-e763-499a-b772-10a01f7c0e64")
)
(pad "2" smd rect
(at -1.6 0.875)
(size 1.3 0.85)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "9a5b3312-e555-4b96-8d26-1be1020a0691")
(uuid "b67b59df-8c6a-4b70-a0ed-5a1609d12e89")
)
(pad "3" smd rect
(at 1.6 0.875)
(size 1.3 0.85)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "80a855b4-41b1-40fc-89fa-5d46a84d59c1")
(uuid "a79be5a1-ef31-484b-8750-86e6bcfefb9f")
)
(pad "4" smd rect
(at 1.6 -0.875)
(size 1.3 0.85)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "bf51f97d-70b8-403d-b9e7-1c48bc155b9d")
(uuid "e211298b-222c-448a-b3e8-78503f8b76dd")
)
(embedded_fonts no)
(model "${KICAD9_3DMODEL_DIR}/LED_SMD.3dshapes/LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm.step"

View file

@ -0,0 +1,118 @@
(footprint "SMD Standoff M2"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(descr "Mounting Hole 3.7mm, generated by kicad-footprint-generator mountinghole.py")
(tags "mountinghole")
(property "Reference" "REF**"
(at 0 -4.65 0)
(layer "F.SilkS")
(hide yes)
(uuid "93542d0c-503b-4a39-bf38-12689d13387a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "SMD Standoff M2"
(at 0 4.65 0)
(layer "F.Fab")
(hide yes)
(uuid "7e37936d-916e-4313-a21b-787e393b6ea2")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "4f067dfd-1b33-4e9a-b5e3-1a362f2ff8e7")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "157c2c37-09a0-47e6-a081-4b99ec8c5382")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "KiLib_Generator" "mounting_hardware/mounting_hole"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "d43f0c25-4cc1-44a4-89b6-bd0af85e5c97")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr exclude_from_pos_files exclude_from_bom)
(duplicate_pad_numbers_are_jumpers no)
(fp_circle
(center 0 0)
(end 3.2 0)
(stroke
(width 0.15)
(type solid)
)
(fill no)
(layer "Cmts.User")
(uuid "cdcaca47-3b7f-4a95-a1fe-82641363ccae")
)
(fp_circle
(center 0 0)
(end 3.45 0)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "97a9c768-318f-4fb9-a394-0d2011edc583")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "363d7700-2889-4ba8-b37a-4b34c90d765b")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" thru_hole circle
(at 0 0)
(size 4.1 4.1)
(drill 3.7)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(zone_connect 2)
(uuid "e48c834a-043f-4859-9e56-e11cfe4c7bcf")
)
(pad "1" connect circle
(at 0 0)
(size 6.4 6.4)
(layers "F.Cu" "F.Mask")
(zone_connect 2)
(uuid "d34ccf93-4109-468e-b9eb-fa17912b0eb8")
)
(embedded_fonts no)
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,89 @@
{
"workspace_views": {
"BBCF7694-2A1D-4CB1-9928-E1C82999984F": {
"cam_distance": 175.60008239746094,
"cam_quat": [
0.10835900157690048,
-0.07609497010707855,
0.025265051051974297,
0.9908731579780579
],
"center": [
-5.547752380371094,
6.705680847167969,
-4.364992491900921e-07
],
"curvature_comb_scale": 0.0,
"document": {
"body_views": {
"67425C2C-BBE5-49BB-A881-482579114068": {
"expanded": true,
"solid_model_visible": false,
"visible": false
},
"6EB21290-3F75-44DD-9EA7-70779D221A49": {
"expanded": true,
"solid_model_visible": true,
"visible": true
},
"8CB5FE1F-F547-40F1-9E9E-2AAB936670A6": {
"expanded": true,
"solid_model_visible": true,
"visible": true
},
"8D5BF7C2-2052-46B1-8022-F5DA93C5EF75": {
"expanded": true,
"solid_model_visible": true,
"visible": true
},
"C0D8673C-F35E-46D6-B423-4540BAAB1261": {
"expanded": true,
"solid_model_visible": false,
"visible": false
}
},
"current_group": "167A7FF4-A1C3-4CCE-9841-2DEB04718B8A",
"entity_views": {},
"group_views": {
"1D6B5A71-8DEA-4F5F-A874-C62E5AC9AB03": {
"visible": false
},
"3CF7A3CF-5A17-4FF4-95D4-3DC6CE25B6D4": {
"visible": true
},
"4E9C2D86-5817-43F9-9DF2-018DE337BF29": {
"visible": false
},
"67425C2C-BBE5-49BB-A881-482579114068": {
"visible": false
},
"B6BDF3E9-DDEA-406B-9E2B-5A1F1660F565": {
"visible": false
},
"B8AE27F4-1912-4DAC-B5F9-BFE26E50244C": {
"visible": true
},
"C0D8673C-F35E-46D6-B423-4540BAAB1261": {
"visible": true
},
"C22E4479-ACA8-4936-A948-A4C657478B31": {
"visible": false
},
"DC7F4915-2BF7-49B4-8312-11E5FE2E67CC": {
"visible": true
},
"DF24DADC-9D92-4392-B4D7-5FFE64382670": {
"visible": false
},
"E96302BB-4C68-4A2D-8663-8C7A75071ED1": {
"visible": false
}
}
},
"hide_irrelevant_workplanes": false,
"name": "",
"projection": "ortho",
"show_construction_entities_from_previous_groups": true
}
}
}

View file

@ -4,4 +4,5 @@
(lib (name "OLIMEX_RP2350B-XL") (type "KiCad") (uri "${KIPRJMOD}/../lib/OLIMEX_RP2350B-XL.pretty") (options "") (descr ""))
(lib (name "PCB_Edge_Connectors") (type "KiCad") (uri "${KIPRJMOD}/../lib/PCB_Edge_Connectors.pretty") (options "") (descr ""))
(lib (name "SK6812-Mini") (type "KiCad") (uri "${KIPRJMOD}/../lib/SK6812-Mini.pretty") (options "") (descr ""))
(lib (name "SMD_Standoffs") (type "KiCad") (uri "${KIPRJMOD}/../lib/SMD_Standoffs.pretty") (options "") (descr ""))
)

File diff suppressed because it is too large Load diff

View file

@ -50,7 +50,7 @@
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
"min_clearance": 0.45
}
},
"diff_pair_dimensions": [],
@ -123,10 +123,10 @@
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"max_error": 0.01,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_copper_edge_clearance": 0.45,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
@ -140,7 +140,7 @@
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [

File diff suppressed because it is too large Load diff