Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [main]
branches: [main, nightly]
pull_request:
branches: [main]
branches: [main, nightly]

jobs:
build-matrix:
Expand Down
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
</a>
</p>

# Zener standard library
# Zener Standard Library

Reusable files to make writing zener more enjoyable and easier, versions packaged with [`pcb`](https://github.com/diodeinc/pcb)
Reusable files to make writing Zener more enjoyable and easier, versions packaged with [`pcb`](https://github.com/diodeinc/pcb).

# Zener Nightly

Check out `origin/nightly` for the latest features not yet stabilized in mainstream releases.
262 changes: 262 additions & 0 deletions kicad/MolexClikMate.zen

Large diffs are not rendered by default.

116 changes: 116 additions & 0 deletions kicad/MolexKK254.zen
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
load("../properties.zen", "Properties")
load("/Users/davide/src/diodeinc/packages/stdlib/generics/Mosfet.zen", "S")

# -----------------------------------------------------------------------------
# Component types
# -----------------------------------------------------------------------------

Variant = enum(
# KK-254 (2.54mm pitch) variants
"AE-6410-02A_1x02_P2.54mm_Vertical",
"AE-6410-03A_1x03_P2.54mm_Vertical",
"AE-6410-04A_1x04_P2.54mm_Vertical",
"AE-6410-05A_1x05_P2.54mm_Vertical",
"AE-6410-06A_1x06_P2.54mm_Vertical",
"AE-6410-07A_1x07_P2.54mm_Vertical",
"AE-6410-08A_1x08_P2.54mm_Vertical",
"AE-6410-09A_1x09_P2.54mm_Vertical",
"AE-6410-10A_1x10_P2.54mm_Vertical",
"AE-6410-11A_1x11_P2.54mm_Vertical",
"AE-6410-12A_1x12_P2.54mm_Vertical",
"AE-6410-13A_1x13_P2.54mm_Vertical",
"AE-6410-14A_1x14_P2.54mm_Vertical",
"AE-6410-15A_1x15_P2.54mm_Vertical",
"AE-6410-16A_1x16_P2.54mm_Vertical",
)

# -----------------------------------------------------------------------------
# Component parameters
# -----------------------------------------------------------------------------

variant = config("variant", Variant, convert = Variant)
properties = config("properties", dict, optional = True)

# -----------------------------------------------------------------------------
# Helper functions
# -----------------------------------------------------------------------------

def PinCount(variant: Variant) -> int:
# Extract pin count from variant string, e.g. "1x02" or "1x16"
s = str(variant)
idx = s.find("1x")
if idx != -1:
start = idx + 2
end = start
for i in range(start, len(s)):
if not s[i].isdigit():
break
end = i + 1
return int(s[start:end])
error("Cannot determine pin count from variant: " + str(variant))

# -----------------------------------------------------------------------------
# IO ports (up to 16 pins)
# -----------------------------------------------------------------------------

pins = {}
for pin in range(1, PinCount(variant) + 1):
pins["Pin_{}".format(pin)] = io("Pin_{}".format(pin), Net)

# -----------------------------------------------------------------------------
# Helper functions
# -----------------------------------------------------------------------------

def _footprint(variant: Variant):
# Map variants to their corresponding footprints
footprint_map = {
Variant("AE-6410-02A_1x02_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-02A_1x02_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-03A_1x03_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-03A_1x03_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-04A_1x04_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-04A_1x04_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-05A_1x05_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-05A_1x05_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-06A_1x06_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-06A_1x06_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-07A_1x07_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-07A_1x07_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-08A_1x08_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-08A_1x08_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-09A_1x09_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-09A_1x09_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-10A_1x10_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-10A_1x10_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-11A_1x11_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-11A_1x11_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-12A_1x12_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-12A_1x12_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-13A_1x13_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-13A_1x13_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-14A_1x14_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-14A_1x14_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-15A_1x15_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-15A_1x15_P2.54mm_Vertical.kicad_mod",
Variant("AE-6410-16A_1x16_P2.54mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_KK-254_AE-6410-16A_1x16_P2.54mm_Vertical.kicad_mod",
}

if variant in footprint_map:
return footprint_map[variant]
else:
error("No footprint found for variant: " + str(variant))

def _symbol(variant: Variant):
"""Get the appropriate symbol based on pin count."""
pin_count = PinCount(variant)
pin_str = str(pin_count) if pin_count >= 10 else "0" + str(pin_count)
return "@kicad-symbols/Connector_Generic.kicad_sym:Conn_01x" + pin_str

def _mpn(variant: Variant) -> str:
return variant.value.split("_")[0]

# -----------------------------------------------------------------------------
# Component definition
# -----------------------------------------------------------------------------

Component(
name = "MKK254",
type = "molex_kk_254",
symbol = Symbol(_symbol(variant)),
footprint = File(_footprint(variant)),
prefix = "J",
pins = pins,
properties = Properties(
properties,
{
"value": _mpn(variant),
"mpn": _mpn(variant),
},
),
)
216 changes: 216 additions & 0 deletions kicad/MolexMicroFit3.zen
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
load("../properties.zen", "Properties")

# -----------------------------------------------------------------------------
# Component types
# -----------------------------------------------------------------------------

Variant = enum(
# Single row connectors - Horizontal
"43650-0200_1x02_P3.00mm_Horizontal",
"43650-0300_1x03_P3.00mm_Horizontal",
"43650-0400_1x04_P3.00mm_Horizontal",
"43650-0500_1x05_P3.00mm_Horizontal",
"43650-0600_1x06_P3.00mm_Horizontal",
"43650-0700_1x07_P3.00mm_Horizontal",
"43650-0800_1x08_P3.00mm_Horizontal",
"43650-0900_1x09_P3.00mm_Horizontal",
"43650-1000_1x10_P3.00mm_Horizontal",
"43650-1100_1x11_P3.00mm_Horizontal",
"43650-1200_1x12_P3.00mm_Horizontal",

# Single row connectors - Vertical
"43650-0215_1x02_P3.00mm_Vertical",
"43650-0315_1x03_P3.00mm_Vertical",
"43650-0415_1x04_P3.00mm_Vertical",
"43650-0515_1x05_P3.00mm_Vertical",
"43650-0615_1x06_P3.00mm_Vertical",
"43650-0715_1x07_P3.00mm_Vertical",
"43650-0815_1x08_P3.00mm_Vertical",
"43650-0915_1x09_P3.00mm_Vertical",
"43650-1015_1x10_P3.00mm_Vertical",
"43650-1115_1x11_P3.00mm_Vertical",
"43650-1215_1x12_P3.00mm_Vertical",

# Double row connectors - Horizontal
"43045-0200_2x01_P3.00mm_Horizontal",
"43045-0400_2x02_P3.00mm_Horizontal",
"43045-0600_2x03_P3.00mm_Horizontal",
"43045-0800_2x04_P3.00mm_Horizontal",
"43045-1000_2x05_P3.00mm_Horizontal",
"43045-1200_2x06_P3.00mm_Horizontal",
"43045-1400_2x07_P3.00mm_Horizontal",
"43045-1600_2x08_P3.00mm_Horizontal",
"43045-1800_2x09_P3.00mm_Horizontal",
"43045-2000_2x10_P3.00mm_Horizontal",
"43045-2200_2x11_P3.00mm_Horizontal",
"43045-2400_2x12_P3.00mm_Horizontal",

# Double row connectors - Vertical
"43045-0212_2x01_P3.00mm_Vertical",
"43045-0412_2x02_P3.00mm_Vertical",
"43045-0612_2x03_P3.00mm_Vertical",
"43045-0812_2x04_P3.00mm_Vertical",
"43045-1012_2x05_P3.00mm_Vertical",
"43045-1212_2x06_P3.00mm_Vertical",
"43045-1412_2x07_P3.00mm_Vertical",
"43045-1612_2x08_P3.00mm_Vertical",
"43045-1812_2x09_P3.00mm_Vertical",
"43045-2012_2x10_P3.00mm_Vertical",
"43045-2212_2x11_P3.00mm_Vertical",
"43045-2412_2x12_P3.00mm_Vertical",
)

# -----------------------------------------------------------------------------
# Component parameters
# -----------------------------------------------------------------------------

variant = config("variant", Variant, convert = Variant)
properties = config("properties", dict, optional = True)

# -----------------------------------------------------------------------------
# Helper functions
# -----------------------------------------------------------------------------

def PinCount(variant: Variant) -> int:
# Extract pin count from variant string
s = str(variant)

# Look for 1xNN pattern for single row
idx = s.find("1x")
if idx != -1:
start = idx + 2
end = start
for i in range(start, len(s)):
if not s[i].isdigit():
break
end = i + 1
return int(s[start:end])

# Look for 2xNN pattern for double row
idx = s.find("2x")
if idx != -1:
start = idx + 2
end = start
for i in range(start, len(s)):
if not s[i].isdigit():
break
end = i + 1
return int(s[start:end]) * 2 # Multiply by 2 for double row

error("Cannot determine pin count from variant: " + str(variant))

def IsDoubleRow(variant: Variant) -> bool:
return "2x" in str(variant)

# -----------------------------------------------------------------------------
# IO ports (up to 24 pins for 2x12)
# -----------------------------------------------------------------------------

pins = {}
for pin in range(1, PinCount(variant) + 1):
pins["Pin_{}".format(pin)] = io("Pin_{}".format(pin), Net)

# -----------------------------------------------------------------------------
# Helper functions
# -----------------------------------------------------------------------------

def _footprint(variant: Variant):
# Map variants to their corresponding footprints
footprint_map = {
# Single row horizontal
Variant("43650-0200_1x02_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0200_1x02_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0300_1x03_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0300_1x03_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0400_1x04_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0400_1x04_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0500_1x05_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0500_1x05_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0600_1x06_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0600_1x06_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0700_1x07_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0700_1x07_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0800_1x08_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0800_1x08_P3.00mm_Horizontal.kicad_mod",
Variant("43650-0900_1x09_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0900_1x09_P3.00mm_Horizontal.kicad_mod",
Variant("43650-1000_1x10_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1000_1x10_P3.00mm_Horizontal.kicad_mod",
Variant("43650-1100_1x11_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1100_1x11_P3.00mm_Horizontal.kicad_mod",
Variant("43650-1200_1x12_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1200_1x12_P3.00mm_Horizontal.kicad_mod",

# Single row vertical
Variant("43650-0215_1x02_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0215_1x02_P3.00mm_Vertical.kicad_mod",
Variant("43650-0315_1x03_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0315_1x03_P3.00mm_Vertical.kicad_mod",
Variant("43650-0415_1x04_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0415_1x04_P3.00mm_Vertical.kicad_mod",
Variant("43650-0515_1x05_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0515_1x05_P3.00mm_Vertical.kicad_mod",
Variant("43650-0615_1x06_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0615_1x06_P3.00mm_Vertical.kicad_mod",
Variant("43650-0715_1x07_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0715_1x07_P3.00mm_Vertical.kicad_mod",
Variant("43650-0815_1x08_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0815_1x08_P3.00mm_Vertical.kicad_mod",
Variant("43650-0915_1x09_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-0915_1x09_P3.00mm_Vertical.kicad_mod",
Variant("43650-1015_1x10_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1015_1x10_P3.00mm_Vertical.kicad_mod",
Variant("43650-1115_1x11_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1115_1x11_P3.00mm_Vertical.kicad_mod",
Variant("43650-1215_1x12_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43650-1215_1x12_P3.00mm_Vertical.kicad_mod",

# Double row horizontal
Variant("43045-0200_2x01_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0200_2x01_P3.00mm_Horizontal.kicad_mod",
Variant("43045-0400_2x02_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0400_2x02_P3.00mm_Horizontal.kicad_mod",
Variant("43045-0600_2x03_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0600_2x03_P3.00mm_Horizontal.kicad_mod",
Variant("43045-0800_2x04_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0800_2x04_P3.00mm_Horizontal.kicad_mod",
Variant("43045-1000_2x05_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1000_2x05_P3.00mm_Horizontal.kicad_mod",
Variant("43045-1200_2x06_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1200_2x06_P3.00mm_Horizontal.kicad_mod",
Variant("43045-1400_2x07_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1400_2x07_P3.00mm_Horizontal.kicad_mod",
Variant("43045-1600_2x08_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1600_2x08_P3.00mm_Horizontal.kicad_mod",
Variant("43045-1800_2x09_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1800_2x09_P3.00mm_Horizontal.kicad_mod",
Variant("43045-2000_2x10_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2000_2x10_P3.00mm_Horizontal.kicad_mod",
Variant("43045-2200_2x11_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2200_2x11_P3.00mm_Horizontal.kicad_mod",
Variant("43045-2400_2x12_P3.00mm_Horizontal"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2400_2x12_P3.00mm_Horizontal.kicad_mod",

# Double row vertical
Variant("43045-0212_2x01_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0212_2x01_P3.00mm_Vertical.kicad_mod",
Variant("43045-0412_2x02_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0412_2x02_P3.00mm_Vertical.kicad_mod",
Variant("43045-0612_2x03_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical.kicad_mod",
Variant("43045-0812_2x04_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-0812_2x04_P3.00mm_Vertical.kicad_mod",
Variant("43045-1012_2x05_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1012_2x05_P3.00mm_Vertical.kicad_mod",
Variant("43045-1212_2x06_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1212_2x06_P3.00mm_Vertical.kicad_mod",
Variant("43045-1412_2x07_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1412_2x07_P3.00mm_Vertical.kicad_mod",
Variant("43045-1612_2x08_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1612_2x08_P3.00mm_Vertical.kicad_mod",
Variant("43045-1812_2x09_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-1812_2x09_P3.00mm_Vertical.kicad_mod",
Variant("43045-2012_2x10_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2012_2x10_P3.00mm_Vertical.kicad_mod",
Variant("43045-2212_2x11_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2212_2x11_P3.00mm_Vertical.kicad_mod",
Variant("43045-2412_2x12_P3.00mm_Vertical"): "@kicad-footprints/Connector_Molex.pretty/Molex_Micro-Fit_3.0_43045-2412_2x12_P3.00mm_Vertical.kicad_mod",
}

if variant in footprint_map:
return File(footprint_map[variant])
else:
error("No footprint found for variant: " + str(variant))

def _symbol(variant: Variant):
"""Get the appropriate symbol based on pin count and row configuration."""
pin_count = PinCount(variant)

if IsDoubleRow(variant):
# For double row, we need the per-row count
rows = pin_count // 2
row_str = str(rows) if rows >= 10 else "0" + str(rows)
orientation = "_Top_Bottom" if pin_count > 2 else ""
return "@kicad-symbols/Connector_Generic.kicad_sym:Conn_02x" + row_str + orientation
else:
# Single row
pin_str = str(pin_count) if pin_count >= 10 else "0" + str(pin_count)
return "@kicad-symbols/Connector_Generic.kicad_sym:Conn_01x" + pin_str

def _mpn(variant: Variant) -> str:
return variant.value.split("_")[0]

# -----------------------------------------------------------------------------
# Component definition
# -----------------------------------------------------------------------------

Component(
name = "MMF3",
type = "molex_micro_fit_3",
symbol = Symbol(_symbol(variant)),
footprint = File(_footprint(variant)),
prefix = "J",
pins = pins,
properties = Properties(
properties,
{
"value": _mpn(variant),
"mpn": _mpn(variant),
},
),
)
Loading
Loading