remove lepton/rindove v1 design

This commit is contained in:
King Kévin 2022-08-11 11:44:27 +02:00
parent cf80f5126a
commit 6a8f701bc3
49 changed files with 0 additions and 24451 deletions

181
Rakefile
View File

@ -1,181 +0,0 @@
# encoding: utf-8
# ruby: 2.1.0
=begin
Rakefile to manage hardware projects
uses Lepton EDA for schematic and pcb-rnd for board layouts.
Rakefile instead of Makefile for better text file parsing capabilities.
=end
require 'rake/clean'
require 'csv' # to export BOM and costs
# =================
# project variables
# =================
# common name used for file names
name = "pd_blocker"
# project version, read from "version" file
raise "define project version in 'version' file" unless File.exist? "version"
version = IO.read("version").split("\n")[0]
# current date for stamping output
date = Time.now.strftime("%Y-%m-%d")
# revision based on number of changes on schematic or board layout and current git commit
changes = `git log --pretty=oneline "#{name}.sch" "#{name}.lht" | wc -l`.chomp.to_i
commit = `git rev-parse --short HEAD`.chomp
revision = "#{changes} (#{commit})"
# path to qeda"
qeda = "qeda"
# ==========
# main tasks
# ==========
desc "main building task"
task :default => [:print, :fabrication, :bom, :pnp]
desc "print schematic and layout (as pdf)"
prints = [ "#{name}.sch.pdf", "#{name}.brd.pdf", "#{name}.brd-top.svg", "#{name}.brd-bottom.svg" ]
task :print => prints
CLEAN.include([ "#{name}.versioned.sch", "#{name}.versioned.lht" ])
CLOBBER.include(prints)
desc "generate fabrication gerbers (as archive)"
gerbers = [ "#{name}.brd.asb", "#{name}.brd.ast", "#{name}.brd.gbl", "#{name}.brd.gbo", "#{name}.brd.gbp", "#{name}.brd.gbs", "#{name}.brd.gko", "#{name}.brd.gtl", "#{name}.brd.gto", "#{name}.brd.gtp", "#{name}.brd.gts", "#{name}.brd.xln", "#{name}.brd.g2l", "#{name}.brd.g3l" ]
fab = [ "#{name}.brd.zip" ]
task :fabrication => fab
CLEAN.include(gerbers)
CLOBBER.include(fab)
desc "generate symbols and footprints from parts"
task :library do
sh "#{qeda} config output geda"
sh "#{qeda} generate ."
sh "#{qeda} config output coraleda"
sh "#{qeda} generate ."
end
desc "export BOMs from schematic"
boms = [ "#{name}.bom.csv" ]
task :bom => boms
CLOBBER.include(boms)
desc "export PnP placement"
pnps = [ "#{name}.cpl.csv" ]
task :pnp => pnps
CLOBBER.include(pnps)
# ===============
# file generation
# ===============
desc "generate schematic with version information all symbols embedded"
rule ".versioned.sch" => ".sch" do |t|
sh "cp #{t.source} #{t.name}"
sh "lepton-embed --embed #{t.name} 2> /dev/null"
sh "sed --in-place 's/\\$version\\$/#{version}/' #{t.name}"
sh "sed --in-place 's/\\$date\\$/#{date}/' #{t.name}"
sh "sed --in-place 's/\\$revision\\$/#{revision}/' #{t.name}"
end
desc "generate board layout with version information"
rule ".versioned.lht" => ".lht" do |t|
sh "cp #{t.source} #{t.name}"
sh "sed --in-place 's/\\$version\\$/#{version}/' #{t.name}"
sh "sed --in-place 's/\\$date\\$/#{date}/' #{t.name}"
sh "sed --in-place 's/\\$revision\\$/#{revision}/' #{t.name}"
end
desc "generate printable version (PDF) of schematic"
rule ".sch.pdf" => ".versioned.sch" do |t|
sh "lepton-cli export --color --paper=iso_a4 --layout=landscape --output=#{t.name} #{t.source} 2> /dev/null"
end
desc "generate printable version (PostScript) of board layout"
rule ".brd.ps" => ".versioned.lht" do |t|
sh "pcb-rnd -x ps --ps-color --media A4 --psfile #{t.name} #{t.source} 2> /dev/null"
end
desc "generate printable version (PDF) of board layout"
rule ".brd.pdf" => ".brd.ps" do |t|
sh "ps2pdf -sPAPERSIZE=a4 -dEPSCrop #{t.source} #{t.name}"
end
desc "generate photo realistic picture from layout (top side)"
rule ".brd-top.svg" => ".versioned.lht" do |t|
sh "pcb-rnd -x svg --photo-mode --outfile #{t.name} #{t.source} 1> /dev/null"
end
desc "generate photo realistic picture from layout (bottom side)"
rule ".brd-bottom.svg" => ".versioned.lht" do |t|
sh "pcb-rnd -x svg --photo-mode --flip --outfile #{t.name} #{t.source} 1> /dev/null"
end
desc "archive gerbers"
rule ".brd.zip" => ".versioned.lht" do |t|
base = File.basename(t.source, ".versioned.lht")
dir = "fabrication"
sh "mkdir #{dir}" unless File.directory?(dir)
sh "pcb-rnd -x cam gerber:JLC_PCB --outfile #{dir}/#{base}.brd #{t.source} 2> /dev/null"
sh "zip --quiet #{t.name} #{dir}/*"
end
desc "generate BOM file from schematic"
rule ".bom.csv" => ".sch" do |t|
attributes = ["device", "value", "description", "footprint", "manufacturer", "mpn", "datasheet", "lcsc", "digikey"]
bom_data = bom2(t.prerequisites[0], attributes)
CSV.open(t.name, "wb") do |csv|
all_attributes = ["refdes","qty"] + attributes
csv << all_attributes
bom_data.each do |line|
csv << all_attributes.collect{|attribute| line[attribute]}
end
end
end
desc "generate pick-and-place file from board"
rule ".cpl.csv" => [".versioned.lht", "mass_prop.sh", "pnp_fab.tab"] do |t|
sh "./mass_prop.sh #{t.prerequisites[0]} pnp_fab.tab" # add fab placement offsets
sh "pcb-rnd -x XY --xyfile #{t.name} --xy-unit mm --format 'JLCPCB' --vendor jlcpcb #{t.prerequisites[0]}" # export XY file in JLCPCB format
end
# ================
# helper functions
# ================
# generate gnetlist bom2 and parse them
# arguments: schematic=schematic to use, attributes=attributes to use for generating bom2
# returns an array of hash. key is the attribute name, value is the attribute value
def bom2(schematic, attributes)
to_return = []
# force attributes to be an array
attributes = case attributes
when String
[attributes]
when Array
attributes
else
[attributes.to_s]
end
# generate bom2
list = `lepton-netlist --backend bom2 --backend-option attribs=#{attributes*','} --quiet --output - #{schematic} 2> /dev/null`
list = list.each_line {|l| '"' + l + '"' + '\n' }
list.gsub!(/^(.+)/, '"\1')
list.gsub!(/(.+)$/, '\1"')
list.gsub!(/(?!http):(?!\/\/)/, '\1":"\2') # protect the values between ':' (such as URLs)
# parse bom2
csv = CSV.parse(list, col_sep: ":", quote_char: '"')
if csv.empty? then
$stderr.puts "no parts found for BOM"
return []
end
csv[1..-1].each do |row|
line = {}
row.each_index do |col|
line[csv[0][col]] = row[col] unless row[col] == "unknown"
end
to_return << line
end
return to_return
end

View File

@ -1,307 +0,0 @@
# subcircuit generated using QEDA
li:pcb-rnd-subcircuit-v6 {
ha:subc.1 {
uid = CAPC1608X92N............
ha:attributes {
footprint = CAPC1608X92N
}
ha:data {
li:padstack_prototypes {
ha:ps_proto_v6.2 {
htop = 0
hbottom = 0
hdia = 0
hplated = 0
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.625mm
-0.550mm
0.625mm
-0.550mm
0.625mm
0.550mm
-0.625mm
0.550mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.675mm
-0.600mm
0.675mm
-0.600mm
0.675mm
0.600mm
-0.675mm
0.600mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.625mm
-0.550mm
0.625mm
-0.550mm
0.625mm
0.550mm
-0.625mm
0.550mm
}
ha:layer_mask {
top = 1
paste = 1
}
ha:combining {
auto = 1
}
}
}
}
}
li:objects {
ha:padstack_ref.23 {
proto = 2
rot = 0
x = 0.000mm
y = -0.750mm
ha:attributes {
term = 1
name = 1
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.24 {
proto = 2
rot = 0
x = 0.000mm
y = 0.750mm
ha:attributes {
term = 2
name = 2
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
}
li:layers {
ha:subc-aux {
lid = 0
ha:type {
top = 1
misc = 1
virtual = 1
}
li:objects {
ha:line.25 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = origin
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 0.000mm
}
ha:line.26 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = x
}
x1 = 0.000mm
x2 = 1.000mm
y1 = 0.000mm
y2 = 0.000mm
}
ha:line.27 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = y
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 1.000mm
}
ha:line.28 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = pnp-origin
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 0.000mm
}
}
}
ha:top-silkscreen {
lid = 1
ha:type {
top = 1
silk = 1
}
li:objects {
ha:text.29 {
x = 0.000mm
y = 0.000mm
rot = 0
scale = 100
string = %a.parent.refdes%
fid = 0
ha:flags {
floater = 1
dyntext = 1
}
}
ha:line.30 {
x1 = -0.925mm
y1 = -0.900mm
x2 = -0.925mm
y2 = 0.900mm
thickness = 0.200mm
clearance = 0
}
ha:line.31 {
x1 = 0.925mm
y1 = -0.900mm
x2 = 0.925mm
y2 = 0.900mm
thickness = 0.200mm
clearance = 0
}
}
}
ha:top-assembly {
lid = 2
ha:type {
top = 1
doc = 1
}
purpose = assy
li:objects {
ha:arc.32 {
x = 0.000mm
y = 0.000mm
width = 0.500mm
height = 0.500mm
thickness = 0.100mm
astart = 0
adelta = 360
clearance = 0
}
ha:line.33 {
x1 = -0.700mm
y1 = 0.000mm
x2 = 0.700mm
y2 = 0.000mm
thickness = 0.100mm
clearance = 0
}
ha:line.34 {
x1 = 0.000mm
y1 = -0.700mm
x2 = 0.000mm
y2 = 0.700mm
thickness = 0.100mm
clearance = 0
}
ha:text.35 {
x = 0.000mm
y = 0.000mm
rot = 90
scale = 53
string = CAPC1608X92N
fid = 0
ha:flags {
floater = 1
}
}
ha:line.36 {
x1 = -0.400mm
y1 = -0.800mm
x2 = 0.400mm
y2 = -0.800mm
thickness = 0.100mm
clearance = 0
}
ha:line.37 {
x1 = 0.400mm
y1 = -0.800mm
x2 = 0.400mm
y2 = 0.800mm
thickness = 0.100mm
clearance = 0
}
ha:line.38 {
x1 = 0.400mm
y1 = 0.800mm
x2 = -0.400mm
y2 = 0.800mm
thickness = 0.100mm
clearance = 0
}
ha:line.39 {
x1 = -0.400mm
y1 = 0.800mm
x2 = -0.400mm
y2 = -0.800mm
thickness = 0.100mm
clearance = 0
}
}
}
ha:top-courtyard {
lid = 3
ha:type {
top = 1
doc = 1
}
purpose = ko.courtyard
li:objects {
ha:polygon.40 {
li:geometry {
ta:contour {
{ -0.875mm; -1.550mm }
{ -0.875mm; -1.050mm }
{ -0.875mm; 1.050mm }
{ -0.875mm; 1.550mm }
{ 0.875mm; 1.550mm }
{ 0.875mm; 1.050mm }
{ 0.875mm; -1.050mm }
{ 0.875mm; -1.550mm }
}
}
}
}
}
}
}
}
}

View File

@ -1,560 +0,0 @@
# subcircuit generated using QEDA
li:pcb-rnd-subcircuit-v6 {
ha:subc.1 {
uid = CONNECTOR_HEADER-2.54-1X
ha:attributes {
footprint = CONNECTOR_HEADER-2.54-1X10
}
ha:data {
li:padstack_prototypes {
ha:ps_proto_v6.2 {
htop = 0
hbottom = 0
hdia = 1.000mm
hplated = 1
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.750mm
-0.750mm
0.750mm
-0.750mm
0.750mm
0.750mm
-0.750mm
0.750mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.800mm
-0.800mm
0.800mm
-0.800mm
0.800mm
0.800mm
-0.800mm
0.800mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.750mm
-0.750mm
0.750mm
-0.750mm
0.750mm
0.750mm
-0.750mm
0.750mm
}
ha:layer_mask {
intern = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.750mm
-0.750mm
0.750mm
-0.750mm
0.750mm
0.750mm
-0.750mm
0.750mm
}
ha:layer_mask {
bottom = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.800mm
-0.800mm
0.800mm
-0.800mm
0.800mm
0.800mm
-0.800mm
0.800mm
}
ha:layer_mask {
bottom = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
}
}
ha:ps_proto_v6.3 {
htop = 0
hbottom = 0
hdia = 1.000mm
hplated = 1
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 1.500mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_circ {
x = 0
y = 0
dia = 1.550mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 1.500mm
}
ha:layer_mask {
intern = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 1.500mm
}
ha:layer_mask {
bottom = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_circ {
x = 0
y = 0
dia = 1.550mm
}
ha:layer_mask {
bottom = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
}
}
}
li:objects {
ha:padstack_ref.23 {
proto = 2
rot = 0
x = 0.000mm
y = -11.430mm
ha:attributes {
term = 1
name = 1
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.24 {
proto = 3
rot = 0
x = 0.000mm
y = -8.890mm
ha:attributes {
term = 2
name = 2
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.25 {
proto = 3
rot = 0
x = 0.000mm
y = -6.350mm
ha:attributes {
term = 3
name = 3
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.26 {
proto = 3
rot = 0
x = 0.000mm
y = -3.810mm
ha:attributes {
term = 4
name = 4
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.27 {
proto = 3
rot = 0
x = 0.000mm
y = -1.270mm
ha:attributes {
term = 5
name = 5
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.28 {
proto = 3
rot = 0
x = 0.000mm
y = 1.270mm
ha:attributes {
term = 6
name = 6
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.29 {
proto = 3
rot = 0
x = 0.000mm
y = 3.810mm
ha:attributes {
term = 7
name = 7
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.30 {
proto = 3
rot = 0
x = 0.000mm
y = 6.350mm
ha:attributes {
term = 8
name = 8
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.31 {
proto = 3
rot = 0
x = 0.000mm
y = 8.890mm
ha:attributes {
term = 9
name = 9
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.32 {
proto = 3
rot = 0
x = 0.000mm
y = 11.430mm
ha:attributes {
term = 10
name = 10
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
}
li:layers {
ha:subc-aux {
lid = 0
ha:type {
top = 1
misc = 1
virtual = 1
}
li:objects {
ha:line.33 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = origin
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 0.000mm
}
ha:line.34 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = x
}
x1 = 0.000mm
x2 = 1.000mm
y1 = 0.000mm
y2 = 0.000mm
}
ha:line.35 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = y
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 1.000mm
}
ha:line.36 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = pnp-origin
}
x1 = 0.000mm
x2 = 0.000mm
y1 = 0.000mm
y2 = 0.000mm
}
}
}
ha:top-silkscreen {
lid = 1
ha:type {
top = 1
silk = 1
}
li:objects {
ha:text.37 {
x = 0.000mm
y = 0.000mm
rot = 0
scale = 100
string = %a.parent.refdes%
fid = 0
ha:flags {
floater = 1
dyntext = 1
}
}
ha:line.38 {
x1 = -1.305mm
y1 = -12.800mm
x2 = 1.305mm
y2 = -12.800mm
thickness = 0.200mm
clearance = 0
}
ha:line.39 {
x1 = 1.305mm
y1 = -12.800mm
x2 = 1.305mm
y2 = 12.800mm
thickness = 0.200mm
clearance = 0
}
ha:line.40 {
x1 = 1.305mm
y1 = 12.800mm
x2 = -1.305mm
y2 = 12.800mm
thickness = 0.200mm
clearance = 0
}
ha:line.41 {
x1 = -1.305mm
y1 = 12.800mm
x2 = -1.305mm
y2 = -12.800mm
thickness = 0.200mm
clearance = 0
}
}
}
ha:top-assembly {
lid = 2
ha:type {
top = 1
doc = 1
}
purpose = assy
li:objects {
ha:arc.42 {
x = 0.000mm
y = 0.000mm
width = 0.500mm
height = 0.500mm
thickness = 0.100mm
astart = 0
adelta = 360
clearance = 0
}
ha:line.43 {
x1 = -0.700mm
y1 = 0.000mm
x2 = 0.700mm
y2 = 0.000mm
thickness = 0.100mm
clearance = 0
}
ha:line.44 {
x1 = 0.000mm
y1 = -0.700mm
x2 = 0.000mm
y2 = 0.700mm
thickness = 0.100mm
clearance = 0
}
ha:text.45 {
x = 0.000mm
y = 0.000mm
rot = 90
scale = 100
string = CONNECTOR_HEADER-2.54-1X10
fid = 0
ha:flags {
floater = 1
}
}
ha:line.46 {
x1 = -0.205mm
y1 = -12.700mm
x2 = 1.205mm
y2 = -12.700mm
thickness = 0.100mm
clearance = 0
}
ha:line.47 {
x1 = 1.205mm
y1 = -12.700mm
x2 = 1.205mm
y2 = 12.700mm
thickness = 0.100mm
clearance = 0
}
ha:line.48 {
x1 = 1.205mm
y1 = 12.700mm
x2 = -1.205mm
y2 = 12.700mm
thickness = 0.100mm
clearance = 0
}
ha:line.49 {
x1 = -1.205mm
y1 = 12.700mm
x2 = -1.205mm
y2 = -11.700mm
thickness = 0.100mm
clearance = 0
}
ha:line.50 {
x1 = -1.205mm
y1 = -11.700mm
x2 = -0.205mm
y2 = -12.700mm
thickness = 0.100mm
clearance = 0
}
}
}
ha:top-courtyard {
lid = 3
ha:type {
top = 1
doc = 1
}
purpose = ko.courtyard
li:objects {
ha:polygon.51 {
li:geometry {
ta:contour {
{ -1.455mm; -12.950mm }
{ 1.455mm; -12.950mm }
{ 1.455mm; 12.950mm }
{ -1.455mm; 12.950mm }
}
}
}
}
}
}
}
}
}

View File

@ -1,955 +0,0 @@
# subcircuit generated using QEDA
li:pcb-rnd-subcircuit-v6 {
ha:subc.1 {
uid = CONNECTOR_XKB_U261-24XN-
ha:attributes {
footprint = CONNECTOR_XKB_U261-24XN-4BC2LS
}
ha:data {
li:padstack_prototypes {
ha:ps_proto_v6.2 {
htop = 0
hbottom = 0
hdia = 0
hplated = 0
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.150mm
-0.400mm
0.150mm
-0.400mm
0.150mm
0.400mm
-0.150mm
0.400mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.200mm
-0.450mm
0.200mm
-0.450mm
0.200mm
0.450mm
-0.200mm
0.450mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.150mm
-0.400mm
0.150mm
-0.400mm
0.150mm
0.400mm
-0.150mm
0.400mm
}
ha:layer_mask {
top = 1
paste = 1
}
ha:combining {
auto = 1
}
}
}
}
ha:ps_proto_v6.3 {
htop = 0
hbottom = 0
hdia = 0.400mm
hplated = 1
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 0.700mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_circ {
x = 0
y = 0
dia = 0.750mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 0.700mm
}
ha:layer_mask {
intern = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_circ {
x = 0
y = 0
dia = 0.700mm
}
ha:layer_mask {
bottom = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_circ {
x = 0
y = 0
dia = 0.750mm
}
ha:layer_mask {
bottom = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
}
}
ha:ps_proto_v6.4 {
htop = 0
hbottom = 0
hdia = 0
hplated = 1
li:shape {
ha:ps_shape_v4 {
clearance = 0
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 0.500mm
square = 0
}
ha:layer_mask {
mech = 1
}
ha:combining {
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 0.900mm
square = 0
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 1.000mm
square = 0
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 0.900mm
square = 0
}
ha:layer_mask {
intern = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0.200mm
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 0.900mm
square = 0
}
ha:layer_mask {
bottom = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
ha:ps_line {
x1 = 0.000mm
y1 = -0.600mm
x2 = 0.000mm
y2 = 0.600mm
thickness = 1.000mm
square = 0
}
ha:layer_mask {
bottom = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
}
}
ha:ps_proto_v6.5 {
htop = 0
hbottom = 0
hdia = 0
hplated = 0
li:shape {
ha:ps_shape_v4 {
clearance = 0.200mm
li:ps_poly {
-0.225mm
-0.700mm
0.225mm
-0.700mm
0.225mm
0.700mm
-0.225mm
0.700mm
}
ha:layer_mask {
top = 1
copper = 1
}
ha:combining {
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.275mm
-0.750mm
0.275mm
-0.750mm
0.275mm
0.750mm
-0.275mm
0.750mm
}
ha:layer_mask {
top = 1
mask = 1
}
ha:combining {
sub = 1
auto = 1
}
}
ha:ps_shape_v4 {
clearance = 0
li:ps_poly {
-0.225mm
-0.700mm
0.225mm
-0.700mm
0.225mm
0.700mm
-0.225mm
0.700mm
}
ha:layer_mask {
top = 1
paste = 1
}
ha:combining {
auto = 1
}
}
}
}
}
li:objects {
ha:padstack_ref.25 {
proto = 2
rot = 0
x = 2.750mm
y = -5.935mm
ha:attributes {
term = A1
name = A1
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.26 {
proto = 2
rot = 0
x = 2.250mm
y = -5.935mm
ha:attributes {
term = A2
name = A2
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.27 {
proto = 2
rot = 0
x = 1.750mm
y = -5.935mm
ha:attributes {
term = A3
name = A3
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.28 {
proto = 2
rot = 0
x = 1.250mm
y = -5.935mm
ha:attributes {
term = A4
name = A4
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.29 {
proto = 2
rot = 0
x = 0.750mm
y = -5.935mm
ha:attributes {
term = A5
name = A5
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.30 {
proto = 2
rot = 0
x = 0.250mm
y = -5.935mm
ha:attributes {
term = A6
name = A6
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.31 {
proto = 2
rot = 0
x = -0.250mm
y = -5.935mm
ha:attributes {
term = A7
name = A7
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.32 {
proto = 2
rot = 0
x = -0.750mm
y = -5.935mm
ha:attributes {
term = A8
name = A8
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.33 {
proto = 2
rot = 0
x = -1.250mm
y = -5.935mm
ha:attributes {
term = A9
name = A9
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.34 {
proto = 2
rot = 0
x = -1.750mm
y = -5.935mm
ha:attributes {
term = A10
name = A10
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.35 {
proto = 2
rot = 0
x = -2.250mm
y = -5.935mm
ha:attributes {
term = A11
name = A11
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.36 {
proto = 2
rot = 0
x = -2.750mm
y = -5.935mm
ha:attributes {
term = A12
name = A12
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.37 {
proto = 3
rot = 0
x = -2.750mm
y = -4.285mm
ha:attributes {
term = B1
name = B1
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.38 {
proto = 3
rot = 0
x = -2.250mm
y = -5.015mm
ha:attributes {
term = B2
name = B2
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.39 {
proto = 3
rot = 0
x = -1.750mm
y = -4.285mm
ha:attributes {
term = B3
name = B3
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.40 {
proto = 3
rot = 0
x = -1.250mm
y = -5.015mm
ha:attributes {
term = B4
name = B4
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.41 {
proto = 3
rot = 0
x = -0.750mm
y = -4.285mm
ha:attributes {
term = B5
name = B5
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.42 {
proto = 3
rot = 0
x = -0.250mm
y = -5.015mm
ha:attributes {
term = B6
name = B6
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.43 {
proto = 3
rot = 0
x = 0.250mm
y = -4.285mm
ha:attributes {
term = B7
name = B7
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.44 {
proto = 3
rot = 0
x = 0.750mm
y = -5.015mm
ha:attributes {
term = B8
name = B8
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.45 {
proto = 3
rot = 0
x = 1.250mm
y = -4.285mm
ha:attributes {
term = B9
name = B9
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.46 {
proto = 3
rot = 0
x = 1.750mm
y = -5.015mm
ha:attributes {
term = B10
name = B10
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.47 {
proto = 3
rot = 0
x = 2.250mm
y = -4.285mm
ha:attributes {
term = B11
name = B11
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.48 {
proto = 3
rot = 0
x = 2.750mm
y = -5.015mm
ha:attributes {
term = B12
name = B12
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.49 {
proto = 4
rot = 0
x = -4.350mm
y = -5.585mm
ha:attributes {
term = S1
name = S1
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.50 {
proto = 4
rot = 0
x = 4.350mm
y = -5.585mm
ha:attributes {
term = S2
name = S2
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.51 {
proto = 5
rot = 0
x = -3.575mm
y = -4.485mm
ha:attributes {
term = S3
name = S3
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
ha:padstack_ref.52 {
proto = 5
rot = 0
x = 3.575mm
y = -4.485mm
ha:attributes {
term = S4
name = S4
}
clearance = 0.200mm
ha:flags {
clearline = 1
}
}
}
li:layers {
ha:subc-aux {
lid = 0
ha:type {
top = 1
misc = 1
virtual = 1
}
li:objects {
ha:line.53 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = origin
}
x1 = 0.000mm
x2 = 0.000mm
y1 = -5.585mm
y2 = -5.585mm
}
ha:line.54 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = x
}
x1 = 0.000mm
x2 = 1.000mm
y1 = -5.585mm
y2 = -5.585mm
}
ha:line.55 {
clearance = 0
thickness = 0.1mm
ha:attributes {
subc-role = y