def pads(self, mod): """add the pads""" pad_size = kicad.mil2mm(68) hole_size = kicad.mil2mm(40) for i in range(18): pad_shape = ('circle', 'rect')[i == 0] p = kicad.mod_pad('%d' % (i + 1), 'thru_hole', pad_shape, ('*.Cu', '*.Mask')) p.set_size(pad_size, pad_size).set_drill(hole_size) p.set_xy(self.pad_xy(i)) mod.add_pad(p)
def pad_xy(self, i): """return the x, y position of pad i (i is zero based)""" if i < 14: group = 0 idx = i else: group = 1 idx = i - 14 pin_spacing = kicad.mil2mm(100) x = group * kicad.mil2mm(500) y = group * kicad.mil2mm(-3175) x += idx * pin_spacing return (x, y)
def add_pads(self, mod): """add the pads""" pad_size = kicad.mil2mm(68) hole_size = kicad.mil2mm(40) for row in range(2): for n in range(50): pad_shape = ('circle', 'rect')[row == 0 and n == 0] pad_name = '%s%d' % (('A', 'B')[row == 1], n + 1) p = kicad.mod_pad(pad_name, 'thru_hole', pad_shape, ('*.Cu', '*.Mask')) p.set_size(pad_size, pad_size).set_drill(hole_size) p.set_xy(self.pad_xy(row, n)) mod.add_pad(p)
def holes(self, mod): """add mounting holes""" hole_size = kicad.mil2mm(120) pad_size = kicad.mil2mm(150) w = 44.0 h = 76.0 x0 = (kicad.mil2mm(1300) - w) / 2.0 y0 = -4.0 tl = (x0, y0 - h) tr = (x0 + w, y0 - h) bl = (x0, y0) br = (x0 + w, y0) for v in (tl, tr, bl, br): p = kicad.mod_pad('', 'thru_hole', 'circle', ('*.Cu', '*.Mask')) p.set_size(pad_size, pad_size).set_drill(hole_size) p.set_xy(v) mod.add_pad(p)
def __init__(self, n, width): self.name = 'DIP%d_%d' % (n, kicad.mm2mil(width)) self.descr = '%d pin DIP package, row spacing %d mils' % ( n, kicad.mm2mil(width)) self.n = n # number of pins self.pitch = kicad.mil2mm(100) self.w = float(width) # width between pin rows (mm) self.h = ((self.n / 2) - 1) * self.pitch
def silk(self, mod): """add a silk layer""" d = kicad.mil2mm(110) w = self.w + d h = self.h + d self.centered_rect(mod, w, h, 'F.SilkS', 0.12) w = self.w - d self.centered_rect(mod, w, h, 'F.SilkS', 0.12, render=('L', 'R')) mod.add_arc(self.w / 2.0, -d / 2.0, self.pitch / 2.0, 'F.SilkS', 0.12)
def fab(self, mod): """add a fab layer""" d = kicad.mil2mm(100) w = self.w + d h = self.h + d self.centered_rect(mod, w, h, 'F.Fab', 0.1) w = self.w - d self.centered_rect(mod, w, h, 'F.Fab', 0.1, render=('L', 'R')) # add the notch x = (self.w - w) / 2.0 y = (self.h - h) / 2.0 w = self.pitch / 2.0 h = w mod.add_rect(x, y, w, h, 'F.Fab', 0.1, render=('d0', ))
def add_silk(self, mod): """add a silk layer""" # add connector outlines cw = kicad.mil2mm(200) ch = kicad.mil2mm(25 * 100) for cx, cy in (self.pad_xy(0, 0), self.pad_xy(1, 0)): cx -= kicad.mil2mm(50) cy -= kicad.mil2mm(50) mod.add_rect(cx, cy, cw, ch, 'F.SilkS', 0.12) # silk reference t = kicad.mod_text('REF**', 'reference', 'F.SilkS') t.set_xy((kicad.mil2mm(25), kicad.mil2mm(-100))) mod.add_shape(t) # silk pin 1 t = kicad.mod_text('A1', 'user', 'F.SilkS') t.set_xy((kicad.mil2mm(-100), 0)) mod.add_shape(t)
def fab(self, mod): """add a fab layer""" # fab name at top left t = kicad.mod_text(name, 'value', 'F.Fab') t.set_xy((kicad.mil2mm(0), kicad.mil2mm(-3250))) mod.add_shape(t) # fab reference at top left t = kicad.mod_text('%R', 'user', 'F.Fab') t.set_xy((kicad.mil2mm(0), kicad.mil2mm(-3150))) mod.add_shape(t) # board outline x = (kicad.mil2mm(1300) - self.w) / 2.0 y = kicad.mil2mm(50) - self.h mod.add_rect(x, y, self.w, self.h, 'F.Fab', 0.1)
def silk(self, mod): """add a silk layer""" # silk reference t = kicad.mod_text('REF**', 'reference', 'F.SilkS') t.set_xy((0, kicad.mil2mm(-100))) mod.add_shape(t) # silk pin 1 t = kicad.mod_text('1', 'user', 'F.SilkS') t.set_xy((kicad.mil2mm(-100), 0)) mod.add_shape(t) # add the connector outlines ch = kicad.mil2mm(100) dx = kicad.mil2mm(50) dy = kicad.mil2mm(50) # large connector (cx, cy) = self.pad_xy(0) cx -= dx cy -= dy mod.add_rect(cx, cy, kicad.mil2mm(14 * 100), ch, 'F.SilkS', 0.12) # small connector (cx, cy) = self.pad_xy(14) cx -= dx cy -= dy mod.add_rect(cx, cy, kicad.mil2mm(4 * 100), ch, 'F.SilkS', 0.12)
def courtyard(self, mod): """add a courtyard""" x = (kicad.mil2mm(1300) - self.w) / 2.0 y = kicad.mil2mm(50) - self.h mod.add_rect(x, y, self.w, self.h, 'F.CrtYd', 0.05)
mod.add_shape(t) # add text: fab reference (center) t = kicad.mod_text('%R', 'user', 'F.Fab') t.set_xy((self.w / 2.0, self.h / 2.0)) mod.add_shape(t) # add the pads pad_size = 1.6 hole_size = 0.8 for i in range(self.n): pad_shape = ('oval', 'rect')[i == 0] p = kicad.mod_pad('%d' % (i + 1), 'thru_hole', pad_shape, ('*.Cu', '*.Mask')) p.set_size(pad_size, pad_size).set_drill(hole_size) p.set_xy(self.pad_xy(i)) mod.add_pad(p) self.courtyard(mod) self.fab(mod) self.silk(mod) return str(mod) #----------------------------------------------------------------------------- footprint.db.add(dip(8, kicad.mil2mm(300))) footprint.db.add(dip(28, kicad.mil2mm(300))) footprint.db.add(dip(14, kicad.mil2mm(300))) footprint.db.add(dip(40, kicad.mil2mm(600))) #-----------------------------------------------------------------------------
def add_courtyard(self, mod): """add a courtyard""" x = (kicad.mil2mm(2100) - self.w) / 2.0 y = kicad.mil2mm(-1350) mod.add_rect(x, y, self.w, self.h, 'F.CrtYd', 0.05)
def pad_xy(self, row, n): pin_spacing = kicad.mil2mm(100) row_spacing = kicad.mil2mm(2000) x = row * row_spacing + (n & 1) * pin_spacing y = (n >> 1) * pin_spacing return (x, y)