# # hello.LCD.44.cad # # 16x2 LCD hello-world # # Neil Gershenfeld # CBA MIT 10/18/07 # # (c) Massachusetts Institute of Technology 2007 # Permission granted for experimental and personal use; # license for commercial sale available from MIT. # # # define shapes and transformation # # circle(x0, y0, r) # cylinder(x0, y0, z0, z1, r) # cone(x0, y0, z0, z1, r0) # sphere(x0, y0, z0, r) # torus(x0, y0, z0, r0, r1) # rectangle(x0, x1, y0, y1) # cube(x0, x1, y0, y1, z0, z1) # triangle(x0, y0, x1, y1, x2, y2) (points in clockwise order) # pyramid(x0, x1, y0, y1, z0, z1) # function(Z_of_XY) # functions(upper_Z_of_XY,lower_Z_of_XY) # add(part1, part2) # subtract(part1, part2) # intersect(part1, part2) # move(part,dx,dy) # translate(part,dx,dy,dz) # rotate(part, angle) # rotate_x(part, angle) # rotate_y(part, angle) # rotate_z(part, angle) # rotate_90(part) # rotate_180(part) # rotate_270(part) # reflect_x(part) # reflect_y(part) # reflect_z(part) # reflect_xy(part) # reflect_xz(part) # reflect_yz(part) # scale_x(part, x0, sx) # scale_y(part, y0, sy) # scale_z(part, z0, sz) # scale_xy(part, x0, y0, sxy) # scale_xyz(part, x0, y0, z0, sxyz) # coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset) # coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset) # coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset) # taper_x_y(part, x0, y0, y1, s0, s1) # taper_x_z(part, x0, z0, z1, s0, s1) # taper_xy_z(part, x0, y0, z0, z1, s0, s1) # shear_x_y(part, y0, y1, dx0, dx1) # shear_x_z(part, z0, z1, dx0, dx1) # (more to come) def circle(x0, y0, r): part = "(((X-x0)**2 + (Y-y0)**2) <= r**2)" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'r',str(r)) return part def cylinder(x0, y0, z0, z1, r): part = "(((X-x0)**2 + (Y-y0)**2 <= r**2) & (Z >= z0) & (Z <= z1))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'r',str(r)) return part def cone(x0, y0, z0, z1, r0): part = cylinder(x0, y0, z0, z1, r0) part = taper_xy_z(part, x0, y0, z0, z1, 1.0, 0.0) return part def sphere(x0, y0, z0, r): part = "(((X-x0)**2 + (Y-y0)**2 + (Z-z0)**2) <= r**2)" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'r',str(r)) return part def torus(x0, y0, z0, r0, r1): part = "(((r0 - sqrt((X-x0)**2 + (Y-y0)**2))**2 + (Z-z0)**2) <= r1**2)" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'r0',str(r0)) part = replace(part,'r1',str(r1)) return part def rectangle(x0, x1, y0, y1): part = "((X >= x0) & (X <= x1) & (Y >= y0) & (Y <= y1))" part = replace(part,'x0',str(x0)) part = replace(part,'x1',str(x1)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) return part def cube(x0, x1, y0, y1, z0, z1): part = "((X >= x0) & (X <= x1) & (Y >= y0) & (Y <= y1) & (Z >= z0) & (Z <= z1))" part = replace(part,'x0',str(x0)) part = replace(part,'x1',str(x1)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) return part def triangle(x0, y0, x1, y1, x2, y2): # points in clockwise order part = "((((y1-y0)*(X-x0)-(x1-x0)*(Y-y0)) >= 0) & (((y2-y1)*(X-x1)-(x2-x1)*(Y-y1)) >= 0) & (((y0-y2)*(X-x2)-(x0-x2)*(Y-y2)) >= 0))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'x1',str(x1)) part = replace(part,'y1',str(y1)) part = replace(part,'x2',str(x2)) part = replace(part,'y2',str(y2)) return part def pyramid(x0, x1, y0, y1, z0, z1): part = cube(x0, x1, y0, y1, z0, z1) part = taper_xy_z(part, (x0+x1)/2., (y0+y1)/2., z0, z1, 1.0, 0.0) return part def function(Z_of_XY): part = '(Z <= '+Z_of_XY+')' return part def functions(upper_Z_of_XY,lower_Z_of_XY): part = '(Z <= '+upper_Z_of_XY+') & (Z >= '+lower_Z_of_XY+')' return part def add(part1, part2): part = "part1 | part2" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def subtract(part1, part2): part = "(part1) & ~(part2)" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def intersect(part1, part2): part = "(part1) & (part2)" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def move(part,dx,dy): part = replace(part,'X','(X-'+str(dx)+')') part = replace(part,'Y','(Y-'+str(dy)+')') return part def translate(part,dx,dy,dz): part = replace(part,'X','(X-'+str(dx)+')') part = replace(part,'Y','(Y-'+str(dy)+')') part = replace(part,'Z','(Z-'+str(dz)+')') return part def rotate(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*y)') part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)') part = replace(part,'y','Y') part = replace(part,'angle',str(angle)) return part def rotate_x(part, angle): angle = angle*pi/180 part = replace(part,'Y','(cos(angle)*Y+sin(angle)*z)') part = replace(part,'Z','(-sin(angle)*Y+cos(angle)*z)') part = replace(part,'z','Z') part = replace(part,'angle',str(angle)) return part def rotate_y(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*z)') part = replace(part,'Z','(-sin(angle)*X+cos(angle)*z)') part = replace(part,'z','Z') part = replace(part,'angle',str(angle)) return part def rotate_z(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*y)') part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)') part = replace(part,'y','Y') part = replace(part,'angle',str(angle)) return part def rotate_90(part): part = reflect_xy(part) part = reflect_y(part) return part def rotate_180(part): part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) return part def rotate_270(part): part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) return part def reflect_x(part): part = replace(part,'X','-X') return part def reflect_y(part): part = replace(part,'Y','-Y') return part def reflect_z(part): part = replace(part,'Z','-Z') return part def reflect_xy(part): part = replace(part,'X','temp') part = replace(part,'Y','X') part = replace(part,'temp','Y') return part def reflect_xz(part): part = replace(part,'X','temp') part = replace(part,'Z','X') part = replace(part,'temp','Z') return part def reflect_yz(part): part = replace(part,'Y','temp') part = replace(part,'Z','Y') part = replace(part,'temp','Z') return part def scale_x(part, x0, sx): part = replace(part,'X','(x0 + (X-x0)/sx)') part = replace(part,'x0',str(x0)) part = replace(part,'sx',str(sx)) return part def scale_y(part, y0, sy): part = replace(part,'Y','(y0 + (Y-y0)/sy)') part = replace(part,'y0',str(y0)) part = replace(part,'sy',str(sy)) return part def scale_z(part, z0, sz): part = replace(part,'Z','(z0 + (Z-z0)/sz)') part = replace(part,'z0',str(z0)) part = replace(part,'sz',str(sz)) return part def scale_xy(part, x0, y0, sxy): part = replace(part,'X','(x0 + (X-x0)/sxy)') part = replace(part,'Y','(y0 + (Y-y0)/sxy)') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'sxy',str(sxy)) return part def scale_xyz(part, x0, y0, z0, sxyz): part = replace(part,'X','(x0 + (X-x0)/sxyz)') part = replace(part,'Y','(y0 + (Y-y0)/sxyz)') part = replace(part,'Z','(z0 + (Z-z0)/sxyz)') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'sxyz',str(sxyz)) return part def coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','(x0 + (X-x0)/(offset + amplitude*cos(phase0 + (phase1-phase0)*(Y-y0)/(y1-y0))))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','(x0 + (X-x0)/(offset + amplitude*cos(phase0 + (phase1-phase0)*(Z-z0)/(z1-z0))))') part = replace(part,'x0',str(x0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','(x0 + (X-x0)/(offset + amplitude*cos(phase0 + (phase1-phase0)*(Z-z0)/(z1-z0))))') part = replace(part,'Y','(y0 + (Y-y0)/(offset + amplitude*cos(phase0 + (phase1-phase0)*(Z-z0)/(z1-z0))))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def taper_x_y(part, x0, y0, y1, s0, s1): part = replace(part,'X','(x0 + (X-x0)*(y1-y0)/(s1*(Y-y0) + s0*(y1-Y)))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def taper_x_z(part, x0, z0, z1, s0, s1): part = replace(part,'X','(x0 + (X-x0)*(z1-z0)/(s1*(Z-z0) + s0*(z1-Z)))') part = replace(part,'x0',str(x0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def taper_xy_z(part, x0, y0, z0, z1, s0, s1): part = replace(part,'X','(x0 + (X-x0)*(z1-z0)/(s1*(Z-z0) + s0*(z1-Z)))') part = replace(part,'Y','(y0 + (Y-y0)*(z1-z0)/(s1*(Z-z0) + s0*(z1-Z)))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def shear_x_y(part, y0, y1, dx0, dx1): part = replace(part,'X','(X - dx0 - (dx1-dx0)*(Y-y0)/(y1-y0))') part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'dx0',str(dx0)) part = replace(part,'dx1',str(dx1)) return part def shear_x_z(part, z0, z1, dx0, dx1): part = replace(part,'X','(X - dx0 - (dx1-dx0)*(Z-z0)/(z1-z0))') part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'dx0',str(dx0)) part = replace(part,'dx1',str(dx1)) return part def coshear_x_z(part, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','(X - offset - amplitude*cos(phase0 + (phase1-phase0)*(Z-z0)/(z1-z0)))') part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part # # PCB classes and definitions # cad.labels = [] class PCB: def __init__(self,x0,y0,width,height,mask): self.board = "False" self.interior = rectangle(x0,x0+width,y0,y0+height) self.exterior = subtract("True",rectangle(x0,x0+width,y0,y0+height)) self.mask = "False" def add(self,part): self.board = add(self.board,part) self.mask = add(self.mask,move(part,-mask,mask)) self.mask = add(self.mask,move(part,-mask,-mask)) self.mask = add(self.mask,move(part,mask,mask)) self.mask = add(self.mask,move(part,mask,-mask)) return self class part: def add(self,pcb,x,y,z=0,angle=0): self.x = x self.y = y self.z = z self.angle = angle if (angle == 90): self.shape = rotate_90(self.shape) elif (angle == 180): self.shape = rotate_180(self.shape) elif ((angle == 270) | (angle == -90)): self.shape = rotate_270(self.shape) angle = pi*angle/180 self.shape = translate(self.shape,x,y,z) for i in range(len(self.pad)): xnew = cos(angle)*self.pad[i].x + sin(angle)*self.pad[i].y ynew = -sin(angle)*self.pad[i].x + cos(angle)*self.pad[i].y self.pad[i].x = x + xnew self.pad[i].y = y + ynew self.pad[i].z += z cad.labels.append(cad_text(x,y,z,self.value,size=14)) for i in range(len(self.labels)): xnew = cos(angle)*self.labels[i].x + sin(angle)*self.labels[i].y ynew = -sin(angle)*self.labels[i].x + cos(angle)*self.labels[i].y self.labels[i].x = x + xnew self.labels[i].y = y + ynew self.labels[i].z += z cad.labels.append(self.labels[i]) pcb = pcb.add(self.shape) return pcb def wire(pcb,width,*points): for i in range(1,len(points)): x0 = points[i-1].x y0 = points[i-1].y z0 = points[i-1].z x1 = points[i].x y1 = points[i].y z1 = points[i].z if (x0 < x1): pcb.board = add(pcb.board,cube(x0-width/2,x1+width/2,y0-width/2,y0+width/2,z0,z0)) elif (x1 < x0): pcb.board = add(pcb.board,cube(x1-width/2,x0+width/2,y0-width/2,y0+width/2,z0,z0)) if (y0 < y1): pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y0-width/2,y1+width/2,z0,z0)) elif (y1 < y0): pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y1-width/2,y0+width/2,z0,z0)) return pcb # # PCB library # # # discretes # pad_0402 = cube(-.0175,.0175,-.014,.014,0,0) class R_0402(part): # # 0402 resistor # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_0402,-.0265,0,0) self.pad.append(point(-.0265,0,0)) self.shape = add(self.shape,translate(pad_0402,.0265,0,0)) self.pad.append(point(.0265,0,0)) pad_1206 = cube(-.032,.032,-.034,.034,0,0) class R_1206(part): # # 1206 resistor # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_1206,-.06,0,0) self.pad.append(point(-.06,0,0)) self.shape = add(self.shape,translate(pad_1206,.06,0,0)) self.pad.append(point(.06,0,0)) class C_1206(part): # # 1206 capacitor # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_1206,-.06,0,0) self.pad.append(point(-.06,0,0)) self.shape = add(self.shape,translate(pad_1206,.06,0,0)) self.pad.append(point(.06,0,0)) pad_1210 = cube(-.032,.032,-.048,.048,0,0) class L_1210(part): # # 1210 inductor # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_1210,-.06,0,0) self.pad.append(point(-.06,0,0)) self.shape = add(self.shape,translate(pad_1210,.06,0,0)) self.pad.append(point(.06,0,0)) pad_choke = cube(-.06,.06,-.06,.06,0,0) class choke(part): # # Panasonic ELLCTV # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_choke,-.177,-.177,0) self.pad.append(point(-.177,-.177,0)) self.shape = add(self.shape,translate(pad_choke,.177,.177,0)) self.pad.append(point(.177,.177,0)) # # connectors # pad_MTA = cube(-.021,.021,-.041,.041,0,0) pad_MTA_solder = cube(-.071,.071,-.041,.041,0,0) class MTA_2(part): # # AMP 1445121-2 # MTA .050 SMT 2-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1 # self.shape = translate(pad_MTA,-.025,-.1,0) self.pad.append(point(-.025,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2 # self.shape = add(self.shape,translate(pad_MTA,.025,.1,0)) self.pad.append(point(.025,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.187,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.187,0,0)) class MTA_power(part): # # AMP 1445121-2 # MTA .050 SMT 2-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: Gnd # self.shape = translate(pad_MTA,-.025,-.1,0) self.pad.append(point(-.025,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2: Vcc # self.shape = add(self.shape,translate(pad_MTA,.025,.1,0)) self.pad.append(point(.025,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Vcc',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.187,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.187,0,0)) class MTA_i0(part): # # AMP 1445121-3 # MTA .050 SMT 3-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: GND # self.shape = translate(pad_MTA,.05,.1,0) self.pad.append(point(.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1\nGND',14)) # # pin 2: power # self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0)) self.pad.append(point(-.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V',14)) # # pin 3: data # self.shape = add(self.shape,translate(pad_MTA,0,-.1,0)) self.pad.append(point(0,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'data',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.212,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.212,0,0)) ######################################################################## class MTA_3(part): # # AMP 1445121-3 # MTA .050 SMT 3-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] fnt = 8 # # pin 1 # self.shape = translate(pad_MTA,.05,.1,0) self.pad.append(point(.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',fnt)) # # pin 2: power # self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0)) self.pad.append(point(-.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2',fnt)) # # pin 3: data # self.shape = add(self.shape,translate(pad_MTA,0,-.1,0)) self.pad.append(point(0,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3',fnt)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.212,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.212,0,0)) ######################################################################## class MTA_4(part): # # AMP 1445121-4 # MTA .050 SMT 4-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1 # self.shape = translate(pad_MTA,-.075,-.1,0) self.pad.append(point(-.075,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2 # self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0)) self.pad.append(point(.025,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2',14)) # # pin 3 # self.shape = add(self.shape,translate(pad_MTA,.075,.1,0)) self.pad.append(point(.075,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3',14)) # # pin 4 # self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0)) self.pad.append(point(-.025,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0)) class MTA_LCD_data(part): # # AMP 1445121-4 # MTA .050 SMT 4-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1 # self.shape = translate(pad_MTA,-.075,-.1,0) self.pad.append(point(-.075,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB7\n14',14)) # # pin 2 # self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0)) self.pad.append(point(.025,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB5\n12',14)) # # pin 3 # self.shape = add(self.shape,translate(pad_MTA,.075,.1,0)) self.pad.append(point(.075,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB4\n11',14)) # # pin 4 # self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0)) self.pad.append(point(-.025,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB6\n13',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0)) class MTA_serial(part): # # AMP 1445121-4 # MTA .050 SMT 4-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: Gnd # self.shape = translate(pad_MTA,-.075,-.1,0) self.pad.append(point(-.075,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2: Tx # self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0)) self.pad.append(point(.025,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx',14)) # # pin 3: Rx # self.shape = add(self.shape,translate(pad_MTA,.075,.1,0)) self.pad.append(point(.075,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx',14)) # # pin 4: DTR # self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0)) self.pad.append(point(-.025,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DTR',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0)) class MTA_5(part): # # AMP 1445121-5 # MTA .050 SMT 5-pin vertical # def __init__(self,value=''): fnt = 8 self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1 # self.shape = translate(pad_MTA,-.1,-.1,0) self.pad.append(point(-.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',fnt)) # # pin 2 # self.shape = add(self.shape,translate(pad_MTA,0,-.1,0)) self.pad.append(point(0,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2',fnt)) # # pin 3 # self.shape = add(self.shape,translate(pad_MTA,.1,-.1,0)) self.pad.append(point(.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3',fnt)) # # pin 4 # self.shape = add(self.shape,translate(pad_MTA,.05,.1,0)) self.pad.append(point(.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4',fnt)) # # pin 5 # self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0)) self.pad.append(point(-.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5',fnt)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.262,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.262,0,0)) class MTA_LCD_ctrl(part): # # AMP 1445121-5 # MTA .050 SMT 5-pin vertical # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1 # self.shape = translate(pad_MTA,-.1,-.1,0) self.pad.append(point(-.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'E\n6',14)) # # pin 2 # self.shape = add(self.shape,translate(pad_MTA,0,-.1,0)) self.pad.append(point(0,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V0\n3',14)) # # pin 3 # self.shape = add(self.shape,translate(pad_MTA,.1,-.1,0)) self.pad.append(point(.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND,R/W\n1,5',14)) # # pin 4 # self.shape = add(self.shape,translate(pad_MTA,.05,.1,0)) self.pad.append(point(.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC\n2',14)) # # pin 5 # self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0)) self.pad.append(point(-.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RS\n4',14)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.262,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.262,0,0)) class MTA_ICP(part): # # AMP 1445121-5 # MTA .050 SMT 4-pin vertical # def __init__(self,value=''): fnt = 8 self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: MISO # self.shape = translate(pad_MTA,-.1,-.1,0) self.pad.append(point(-.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MISO',fnt)) # # pin 2: GND # self.shape = add(self.shape,translate(pad_MTA,0,-.1,0)) self.pad.append(point(0,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',fnt)) # # pin 3: MOSI # self.shape = add(self.shape,translate(pad_MTA,.1,-.1,0)) self.pad.append(point(.1,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MOSI',fnt)) # # pin 4: -RESET # self.shape = add(self.shape,translate(pad_MTA,.05,.1,0)) self.pad.append(point(.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-RESET',fnt)) # # pin 5: SCK # self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0)) self.pad.append(point(-.05,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK',fnt)) # # solder pads # self.shape = add(self.shape,translate(pad_MTA_solder,-.262,0,0)) self.shape = add(self.shape,translate(pad_MTA_solder,.262,0,0)) class power_65mm(part): # # CUI PJ1-023-SMT # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: power # self.shape = cube(.433,.512,-.047,.047,0,0) self.pad.append(point(.467,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'P',14)) # # pin 2: ground # self.shape = add(self.shape,cube(.285,.423,-.189,-.098,0,0)) self.pad.append(point(.354,-.144,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',14)) # # pin 3: contact # self.shape = add(self.shape,cube(.325,.463,.098,.189,0,0)) self.pad.append(point(.394,.144,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C',14)) # # solder pads # self.shape = add(self.shape,cube(.108,.246,-.169,-.110,0,0)) self.shape = add(self.shape,cube(.069,.207,.110,.169,0,0)) pad_stereo_2_5mm = cube(-.03,.03,-.05,.05,0,0) class stereo_2_5mm(part): # # CUI SJ1-2533-SMT # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: base # self.shape = translate(pad_stereo_2_5mm,-.130,-.16,0) self.pad.append(point(-.130,-.149,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'base',14)) # # pin 2: tip # self.shape = add(self.shape,translate(pad_stereo_2_5mm,.197,.15,0)) self.pad.append(point(.197,.141,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'tip',14)) # # pin 3: middle # self.shape = add(self.shape,translate(pad_stereo_2_5mm,-.012,-.16,0)) self.pad.append(point(-.012,-.149,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'middle',14)) pad_Molex = cube(-.0155,.0155,-.0265,.0265,0,0) pad_Molex_solder = cube(-.055,.055,-.065,.065,0,0) class Molex_serial(part): # # Molex 53261-0471 # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: Rx # self.shape = translate(pad_Molex,-.075,.064,0) self.pad.append(point(-.075,.064,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx',14)) # # pin 2: Tx # self.shape = add(self.shape,translate(pad_Molex,-.025,.064,0)) self.pad.append(point(-.025,.064,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx',14)) # # pin 3: DTR # self.shape = add(self.shape,translate(pad_Molex,.025,.064,0)) self.pad.append(point(.025,.064,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DTR',14)) # # pin 4: GND # self.shape = add(self.shape,translate(pad_Molex,.075,.064,0)) self.pad.append(point(.075,.064,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',14)) # # solder pads # self.shape = add(self.shape,translate(pad_Molex_solder,-.16,-.065,0)) self.shape = add(self.shape,translate(pad_Molex_solder,.16,-.065,0)) # # switches # pad_button_6mm = cube(-.04,.04,-.03,.03,0,0) class button_6mm(part): # # Omron 6mm pushbutton # B3SN-3112P # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # left 1 # self.shape = translate(pad_button_6mm,-.125,.08,0) self.pad.append(point(-.125,.08,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'L1',14)) # # right 1 # self.shape = add(self.shape,translate(pad_button_6mm,-.125,-.08,0)) self.pad.append(point(-.125,-.08,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R1',14)) # # right 2 # self.shape = add(self.shape,translate(pad_button_6mm,.125,-.08,0)) self.pad.append(point(.125,-.08,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R2',14)) # # left 2 # self.shape = add(self.shape,translate(pad_button_6mm,.125,.08,0)) self.pad.append(point(.125,.08,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'L2',14)) # # crystals and resonators # pad_XTAL = cube(-.016,.016,-.077,.077,0,0) class XTAL(part): # # Panasonic EFOBM series # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # left # self.shape = translate(pad_XTAL,-.053,0,0) self.pad.append(point(-.053,0,0)) # # ground # self.shape = add(self.shape,translate(pad_XTAL,0,0,0)) self.pad.append(point(0,0,0)) # # right # self.shape = add(self.shape,translate(pad_XTAL,.053,0,0)) self.pad.append(point(.053,0,0)) # # diodes, transistors, regulators # class D_1206(part): # # 1206 diode # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # anode # self.shape = translate(pad_1206,-.06,0,0) self.pad.append(point(-.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A',14)) # # cathode # self.shape = add(self.shape,translate(pad_1206,.06,0,0)) self.pad.append(point(.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C',14)) class LED_1206(part): # # 1206 LED # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # anode # self.shape = translate(pad_1206,-.06,0,0) self.pad.append(point(-.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A',14)) # # cathode # self.shape = add(self.shape,translate(pad_1206,.06,0,0)) self.pad.append(point(.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C',14)) class phototransistor_1206(part): # # 1206 phototransistor # OPTEK 520,521 # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # collector # self.shape = translate(pad_1206,-.06,0,0) self.pad.append(point(-.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C',14)) # # emitter # self.shape = add(self.shape,translate(pad_1206,.06,0,0)) self.pad.append(point(.055,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'E',14)) pad_SOD_123 = cube(-.02,.02,-.024,.024,0,0) class D_SOD_123(part): # # SOD-123 diode # def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # anode # self.shape = translate(pad_SOD_123,-.07,0,0) self.pad.append(point(-.07,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A',14)) # # cathode # self.shape = add(self.shape,translate(pad_SOD_123,.07,0,0)) self.pad.append(point(.07,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C',14)) pad_SOT23 = cube(-.015,.015,-.02,.02,0,0) class NMOSFET_SOT23(part): # # Fairchild NDS355AN # def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] # # pin 1: gate # self.shape = translate(pad_SOT23,-.0375,-.045,0) self.pad.append(point(-.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',14)) # # pin 2: source # self.shape = add(self.shape,translate(pad_SOT23,.0375,-.045,0)) self.pad.append(point(.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S',14)) # # pin 3: drain # self.shape = add(self.shape,translate(pad_SOT23,0,.045,0)) self.pad.append(point(0,.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D',14)) class PMOSFET_SOT23(part): # # Fairchild NDS356AP # def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] # # pin 1: gate # self.shape = translate(pad_SOT23,-.0375,-.045,0) self.pad.append(point(-.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',14)) # # pin 2: source # self.shape = add(self.shape,translate(pad_SOT23,.0375,-.045,0)) self.pad.append(point(.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S',14)) # # pin 3: drain # self.shape = add(self.shape,translate(pad_SOT23,0,.045,0)) self.pad.append(point(0,.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D',14)) class regulator_SOT23(part): def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] # # pin 1: output # self.shape = translate(pad_SOT23,-.0375,-.045,0) self.pad.append(point(-.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2: input # self.shape = add(self.shape,translate(pad_SOT23,.0375,-.045,0)) self.pad.append(point(.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'in',14)) # # pin 3: ground # self.shape = add(self.shape,translate(pad_SOT23,0,.045,0)) self.pad.append(point(0,.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'gnd',14)) pad_SOT223 = cube(-.02,.02,-.03,.03,0,0) pad_SOT223_ground = cube(-.065,.065,-.03,.03,0,0) class regulator_SOT223(part): def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] # # pin 1: input # self.shape = translate(pad_SOT223,-.09,-.12,0) self.pad.append(point(-.09,-.12,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1I',14)) # # pin 2: ground # self.shape = add(self.shape,translate(pad_SOT223,0,-.12,0)) self.pad.append(point(0,-.12,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',14)) # # pin 3: output # self.shape = add(self.shape,translate(pad_SOT223,.09,-.12,0)) self.pad.append(point(.09,-.12,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'O',14)) # # pin 4: ground # self.shape = add(self.shape,translate(pad_SOT223_ground,0,.12,0)) self.pad.append(point(0,.12,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',14)) pad_SM8 = cube(-.035,.035,-.016,.016,0,0) class H_bridge_SM8(part): # # Zetex ZXMHC3A01T8 # def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] d = .13 # # pin 1: G3 (right N gate) # self.shape = translate(pad_SM8,-d,.09,0) self.pad.append(point(-d,.09,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GRN',14)) # # pin 2: S2 S3 (N source) # self.shape = add(self.shape,translate(pad_SM8,-d,.03,0)) self.pad.append(point(-d,.03,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SN',14)) # # pin 3: G2 (left N gate) # self.shape = add(self.shape,translate(pad_SM8,-d,-.03,0)) self.pad.append(point(-d,-.03,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GLN',14)) # # pin 4: G1 (left P gate) # self.shape = add(self.shape,translate(pad_SM8,-d,-.09,0)) self.pad.append(point(-d,-.09,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GLP',14)) # # pin 5: D1 D2 (left drain) # self.shape = add(self.shape,translate(pad_SM8,d,-.09,0)) self.pad.append(point(d,-.09,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DL',14)) # # pin 6: S1 S4 (P source) # self.shape = add(self.shape,translate(pad_SM8,d,-.03,0)) self.pad.append(point(d,-.03,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SP',14)) # # pin 7: D3 D4 (right drain) # self.shape = add(self.shape,translate(pad_SM8,d,.03,0)) self.pad.append(point(d,.03,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DR',14)) # # pin 8: G4 (right N gate) # self.shape = add(self.shape,translate(pad_SM8,d,.09,0)) self.pad.append(point(d,.09,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GRP',14)) # # ICs # pad_SOT23_5 = cube(-.01,.01,-.02,.02,0,0) class op_amp_SOT23_5(part): def __init__(self,value=''): self.value = value self.x = 0 self.y = 0 self.z = 0 self.pad = [point(0,0,0)] self.labels = [] # # pin 1: output # self.shape = translate(pad_SOT23_5,-.0375,-.045,0) self.pad.append(point(-.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'O',14)) # # pin 2: V- # self.shape = add(self.shape,translate(pad_SOT23_5,0,-.045,0)) self.pad.append(point(0,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V-',14)) # # pin 3: I+ # self.shape = add(self.shape,translate(pad_SOT23_5,.0375,-.045,0)) self.pad.append(point(.0375,-.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'I+',14)) # # pin 4: I- # self.shape = add(self.shape,translate(pad_SOT23_5,.0375,.045,0)) self.pad.append(point(.0375,.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'I-',14)) # # pin 5: V+ # self.shape = add(self.shape,translate(pad_SOT23_5,-.0375,.045,0)) self.pad.append(point(-.0375,.045,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V+',14)) pad_SOICN = cube(-.035,.035,-.015,.015,0,0) class op_amp_SOICN(part): def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: A out # self.shape = translate(pad_SOICN,-.12,.075,0) self.pad.append(point(-.12,.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1 Ao',14)) # # pin 2: A- # self.shape = add(self.shape,translate(pad_SOICN,-.12,.025,0)) self.pad.append(point(-.12,.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A-',14)) # # pin 3: A+ # self.shape = add(self.shape,translate(pad_SOICN,-.12,-.025,0)) self.pad.append(point(-.12,-.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A+',14)) # # pin 4: V- # self.shape = add(self.shape,translate(pad_SOICN,-.12,-.075,0)) self.pad.append(point(-.12,-.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V-',14)) # # pin 5: B+ # self.shape = add(self.shape,translate(pad_SOICN,.12,-.075,0)) self.pad.append(point(.12,-.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'B+',14)) # # pin 6: B- # self.shape = add(self.shape,translate(pad_SOICN,.12,-.025,0)) self.pad.append(point(.12,-.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'B-',14)) # # pin 7: B out # self.shape = add(self.shape,translate(pad_SOICN,.12,.025,0)) self.pad.append(point(.12,.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Bo',14)) # # pin 8: V+ # self.shape = add(self.shape,translate(pad_SOICN,.12,.075,0)) self.pad.append(point(.12,.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V+',14)) pad_SOIC = cube(-.043,.043,-.015,.015,0,0) class ATtiny45_SOIC(part): def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: PB5/dW/ADC0/-RESET/PCINT5 # self.shape = translate(pad_SOIC,-.14,.075,0) self.pad.append(point(-.14,.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',14)) # # pin 2: PB3/ADC3/-OC1B/CLKI/XTAL1/PCINT3 # self.shape = add(self.shape,translate(pad_SOIC,-.14,.025,0)) self.pad.append(point(-.14,.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3',14)) # # pin 3: PB4/ADC2/OC1B/CLKO/XTAL2/PCINT4 # self.shape = add(self.shape,translate(pad_SOIC,-.14,-.025,0)) self.pad.append(point(-.14,-.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4',14)) # # pin 4: GND # self.shape = add(self.shape,translate(pad_SOIC,-.14,-.075,0)) self.pad.append(point(-.14,-.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',14)) # # pin 5: PB0/MOSI/DI/SDA/AIN0/OC0A/-OC1A/AREF/PCINT0 # self.shape = add(self.shape,translate(pad_SOIC,.14,-.075,0)) self.pad.append(point(.14,-.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0',14)) # # pin 6: PB1/MISO/DO/AIN1/OC0B/OC1A/PCINT1 # self.shape = add(self.shape,translate(pad_SOIC,.14,-.025,0)) self.pad.append(point(.14,-.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1',14)) # # pin 7: PB2/SCK/USCK/SCL/ADC1/T0/INT0/PCINT2 # self.shape = add(self.shape,translate(pad_SOIC,.14,.025,0)) self.pad.append(point(.14,.025,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2',14)) # # pin 8: VCC # self.shape = add(self.shape,translate(pad_SOIC,.14,.075,0)) self.pad.append(point(.14,.075,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC',14)) class ATtiny44_SOICN(part): def __init__(self,value=''): self.value = value self.pad = [point(0,0,0)] self.labels = [] fnt = 8 # # pin 1: VCC # self.shape = translate(pad_SOICN,-.12,.15,0) self.pad.append(point(-.12,.15,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',fnt)) # # pin 2: PB0/XTAL1/PCINT8 # self.shape = add(self.shape,translate(pad_SOICN,-.12,.1,0)) self.pad.append(point(-.12,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0',fnt)) # # pin 3: PB1/XTAL2/PCINT9 # self.shape = add(self.shape,translate(pad_SOICN,-.12,.050,0)) self.pad.append(point(-.12,.05,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1',fnt)) # # pin 4: PB3/dW/-RESET/PCINT11 # self.shape = add(self.shape,translate(pad_SOICN,-.12,0,0)) self.pad.append(point(-.12,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3',fnt)) # # pin 5: PB2/CKOUT/OC0A/INT0/PCINT10 # self.shape = add(self.shape,translate(pad_SOICN,-.12,-.05,0)) self.pad.append(point(-.12,-.05,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2',fnt)) # # pin 6: PA7/ADC7/OC0B/ICP/PCINT7 # self.shape = add(self.shape,translate(pad_SOICN,-.12,-.1,0)) self.pad.append(point(-.12,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA7',fnt)) # # pin 7: PA6/ADC6/MOSI/SDA/OC1A/PCINT6 # self.shape = add(self.shape,translate(pad_SOICN,-.12,-.15,0)) self.pad.append(point(-.12,-.15,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA6',fnt)) # # pin 8: PA5/ADC5/DO/MISO/OC1B/PCINT5 # self.shape = add(self.shape,translate(pad_SOICN,.12,-.15,0)) self.pad.append(point(.12,-.15,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA5',fnt)) # # pin 9: PA4/ADC4/USCK/SCL/T1/PCINT4 # self.shape = add(self.shape,translate(pad_SOICN,.12,-.1,0)) self.pad.append(point(.12,-.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA4',fnt)) # # pin 10: PA3/ADC3/T0/PCINT3 # self.shape = add(self.shape,translate(pad_SOICN,.12,-.05,0)) self.pad.append(point(.12,-.05,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA3',fnt)) # # pin 11: PA2/ADC2/AIN1/PCINT2 # self.shape = add(self.shape,translate(pad_SOICN,.12,0,0)) self.pad.append(point(.12,0,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA2',fnt)) # # pin 12: PA1/ADC1/AIN0/PCINT1 # self.shape = add(self.shape,translate(pad_SOICN,.12,.050,0)) self.pad.append(point(.12,.05,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA1',fnt)) # # pin 13: PA0/ADC0/AREF/PCINT0 # self.shape = add(self.shape,translate(pad_SOICN,.12,.1,0)) self.pad.append(point(.12,.1,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA0',fnt)) # # pin 14: GND # self.shape = add(self.shape,translate(pad_SOICN,.12,.15,0)) self.pad.append(point(.12,.15,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',fnt)) pad_TQFP_h = cube(-.025,.025,-.008,.008,0,0) pad_TQFP_v = cube(-.008,.008,-.025,.025,0,0) class ATmega88_TQFP(part): def __init__(self,value=''): c = .18 d = .031 fnt = 5 self.value = value self.pad = [point(0,0,0)] self.labels = [] # # pin 1: PD3/PCINT19/OC2B/INT1 # self.shape = translate(pad_TQFP_h,-c,3.5*d,0) self.pad.append(point(-c,3.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1',fnt)) # # pin 2: PD4/PCINT20/XCK/T0 # self.shape = add(self.shape,translate(pad_TQFP_h,-c,2.5*d,0)) self.pad.append(point(-c,2.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD4',fnt)) # # pin 3: GND # self.shape = add(self.shape,translate(pad_TQFP_h,-c,1.5*d,0)) self.pad.append(point(-c,1.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',fnt)) # # pin 4: VCC # self.shape = add(self.shape,translate(pad_TQFP_h,-c,.5*d,0)) self.pad.append(point(-c,.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC',fnt)) # # pin 5: GND # self.shape = add(self.shape,translate(pad_TQFP_h,-c,-.5*d,0)) self.pad.append(point(-c,-.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',fnt)) # # pin 6: VCC # self.shape = add(self.shape,translate(pad_TQFP_h,-c,-1.5*d,0)) self.pad.append(point(-c,-1.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC',fnt)) # # pin 7: PB6/PCINT6/XTAL1/TOSC1 # self.shape = add(self.shape,translate(pad_TQFP_h,-c,-2.5*d,0)) self.pad.append(point(-c,-2.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB6',fnt)) # # pin 8: PB7/PCINT7/XTAL2/TOSC2 # self.shape = add(self.shape,translate(pad_TQFP_h,-c,-3.5*d,0)) self.pad.append(point(-c,-3.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB7',fnt)) # # pin 9: PD5/PCINT21/OC0B/T1 # self.shape = add(self.shape,translate(pad_TQFP_v,-3.5*d,-c,0)) self.pad.append(point(-3.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD5',fnt)) # # pin 10: PD6/PCINT22/OC0A/AIN0 # self.shape = add(self.shape,translate(pad_TQFP_v,-2.5*d,-c,0)) self.pad.append(point(-2.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD6',fnt)) # # pin 11: PD7/PCINT23/AIN1 # self.shape = add(self.shape,translate(pad_TQFP_v,-1.5*d,-c,0)) self.pad.append(point(-1.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD7',fnt)) # # pin 12: PB0/PCINT0/CLKO/ICP1 # self.shape = add(self.shape,translate(pad_TQFP_v,-.5*d,-c,0)) self.pad.append(point(-.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0',fnt)) # # pin 13: PB1/PCINT1/OC1A # self.shape = add(self.shape,translate(pad_TQFP_v,.5*d,-c,0)) self.pad.append(point(.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1',fnt)) # # pin 14: PB2/PCINT2/-SS/OC1B # self.shape = add(self.shape,translate(pad_TQFP_v,1.5*d,-c,0)) self.pad.append(point(1.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2',fnt)) # # pin 15: PB3/PCINT3/OC2A/MOSI # self.shape = add(self.shape,translate(pad_TQFP_v,2.5*d,-c,0)) self.pad.append(point(2.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3',fnt)) # # pin 16: PB4/PCINT4/MISO # self.shape = add(self.shape,translate(pad_TQFP_v,3.5*d,-c,0)) self.pad.append(point(3.5*d,-c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4',fnt)) # # pin 17: PB5/SCK/PCINT5 # self.shape = add(self.shape,translate(pad_TQFP_h,c,-3.5*d,0)) self.pad.append(point(c,-3.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB5',fnt)) # # pin 18: AVCC # self.shape = add(self.shape,translate(pad_TQFP_h,c,-2.5*d,0)) self.pad.append(point(c,-2.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AVCC',fnt)) # # pin 19: ADC6 # self.shape = add(self.shape,translate(pad_TQFP_h,c,-1.5*d,0)) self.pad.append(point(c,-1.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'ADC6',fnt)) # # pin 20: AREF # self.shape = add(self.shape,translate(pad_TQFP_h,c,-.5*d,0)) self.pad.append(point(c,-.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AREF',fnt)) # # pin 21: GND # self.shape = add(self.shape,translate(pad_TQFP_h,c,.5*d,0)) self.pad.append(point(c,.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',fnt)) # # pin 22: ADC7 # self.shape = add(self.shape,translate(pad_TQFP_h,c,1.5*d,0)) self.pad.append(point(c,1.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'ADC7',fnt)) # # pin 23: PC0/ADC0/PCINT8 # self.shape = add(self.shape,translate(pad_TQFP_h,c,2.5*d,0)) self.pad.append(point(c,2.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC0',fnt)) # # pin 24: PC1/ADC1/PCINT9 # self.shape = add(self.shape,translate(pad_TQFP_h,c,3.5*d,0)) self.pad.append(point(c,3.5*d,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC1',fnt)) # # pin 25: PC2/ADC2/PCINT10 # self.shape = add(self.shape,translate(pad_TQFP_v,3.5*d,c,0)) self.pad.append(point(3.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC2',fnt)) # # pin 26: PC3/ADC3/PCINT11 # self.shape = add(self.shape,translate(pad_TQFP_v,2.5*d,c,0)) self.pad.append(point(2.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC3',fnt)) # # pin 27: PC4/ADC4/SDA/PCINT12 # self.shape = add(self.shape,translate(pad_TQFP_v,1.5*d,c,0)) self.pad.append(point(1.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC4',fnt)) # # pin 28: PC5/ADC5/SCL/PCINT13 # self.shape = add(self.shape,translate(pad_TQFP_v,.5*d,c,0)) self.pad.append(point(.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC5',fnt)) # # pin 29: PC6/-RESET/PCINT14 # self.shape = add(self.shape,translate(pad_TQFP_v,-.5*d,c,0)) self.pad.append(point(-.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC6',fnt)) # # pin 30: PD0/RXD/PCINT16 # self.shape = add(self.shape,translate(pad_TQFP_v,-1.5*d,c,0)) self.pad.append(point(-1.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD0',fnt)) # # pin 31: PD1/TXD/PCINT17 # self.shape = add(self.shape,translate(pad_TQFP_v,-2.5*d,c,0)) self.pad.append(point(-2.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD1',fnt)) # # pin 32: PD2/INT0/PCINT18 # self.shape = add(self.shape,translate(pad_TQFP_v,-3.5*d,c,0)) self.pad.append(point(-3.5*d,c,0)) self.labels.append(cad_text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD2',fnt)) # # graphics # class CBA(part): def __init__(self,r=.02): self.value = '' self.pad = [point(0,0,0)] self.labels = [] d = 3*r self.shape = circle(0,0,r) self.shape = add(self.shape,translate(circle(0,0,r),-d,d,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),-d,0,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),-d,-d,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),0,-d,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),d,-d,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),d,0,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),d,d,0)) self.shape = add(self.shape,translate(rectangle(-r,r,-r,r),0,d,0)) class hello(part): # # HELLO # def __init__(self,w,z): self.value = '' self.pad = [point(0,0,0)] self.labels = [] # H self.shape = rectangle(-.01,.01,0,.1) self.shape = add(self.shape,rectangle(0,.05,.04,.06)) self.shape = add(self.shape,rectangle(.04,.06,0,.1)) # E self.shape = add(self.shape,rectangle(.08,.1,0,.1)) self.shape = add(self.shape,rectangle(.1,.14,0,.02)) self.shape = add(self.shape,rectangle(.1,.13,.04,.06)) self.shape = add(self.shape,rectangle(.1,.14,.08,.1)) # L self.shape = add(self.shape,rectangle(.16,.18,0,.1)) self.shape = add(self.shape,rectangle(.18,.21,0,.02)) # L self.shape = add(self.shape,rectangle(.23,.25,0,.1)) self.shape = add(self.shape,rectangle(.25,.28,0,.02)) # 0 self.shape = add(self.shape,rectangle(.3,.32,0,.1)) self.shape = add(self.shape,rectangle(.32,.345,0,.02)) self.shape = add(self.shape,rectangle(.32,.345,.08,.1)) self.shape = add(self.shape,rectangle(.345,.365,0,.1)) # # define board # w = .016 width = 2 #-=.2 height = 2.32 #-=.05 # # w = .016 # width = 1.02 # width +=width # height = 1.18 # height +=height # height +=height # width = 1.02 # height = 1.18 x = 1 y = 1 z = -.005 d = .06 mask = .004 pcb = PCB(x,y,width,height,mask) ######################################################################## # A88 STUFF # ######################################################################## x0 = x+.97#was1.1 y0 = y+.721 #was.7 A88 = ATmega88_TQFP('ATM88') pcb = A88.add(pcb,x0,y0,z,angle=90) #pcb = A88.add(pcb,x+width/2,y+.67+height/2,z,angle=90) ################################ # button MTA # ################################ MTB = MTA_5('MTB') pcb = MTB.add(pcb, A88.x - .7, A88.y + .3,z,angle=-90) dx = 2*w pcb = wire(pcb, w, MTB.pad[3], point(A88.pad[9 ].x - .2+ 3*dx, A88.pad[9 ].y,z), A88.pad[9]) pcb = wire(pcb, w, MTB.pad[4], point(A88.pad[10].x - .2+ 2*dx, A88.pad[10].y,z), A88.pad[10]) pcb = wire(pcb, w, MTB.pad[2], point(A88.pad[11].x - .2+ dx, A88.pad[11].y,z), A88.pad[11]) pcb = wire(pcb, w, MTB.pad[5], point(A88.pad[12].x - .2, A88.pad[12].y,z), A88.pad[12]) pcb = wire(pcb, w, MTB.pad[1], point(A88.pad[13].x - .2 - dx, A88.pad[13].y,z), A88.pad[13]) ################################ # POWER AND GROUND # ################################ RA1 = R_1206('RA1') pcb = RA1.add(pcb, A88.pad[4].x, A88.pad[4].y+.12,z) #88pad +=1 C88 = C_1206('C88') pcb = C88.add(pcb, A88.pad[17].x - 2.5*w, A88.pad[17].y-.15,z, angle=90) #reset pcb = wire(pcb, w, RA1.pad[2], A88.pad[2], point(A88.pad[2].x, A88.pad[29].y,z), A88.pad[29]) # route a88.1->2 #power pcb = wire(pcb, w, RA1.pad[1], A88.pad[6], point(A88.pad[6].x, A88.y,z),A88.pad[18], point(A88.pad[18].x, C88.pad[1].y,z), C88.pad[1]) #sidestream pcb = wire(pcb, w, point(A88.pad[6].x, A88.pad[6].y-.07,z), point(A88.pad[4].x, A88.pad[4].y-.07,z), A88.pad[4]) pcb = wire(pcb, w, C88.pad[2], point(A88.pad[21].x, C88.pad[2].y,z), A88.pad[21], point(A88.pad[21].x, A88.y,z), A88.pad[3], point(A88.pad[3].x, A88.pad[3].y+.06,z), point(A88.pad[5].x, A88.pad[5].y+.06,z), A88.pad[5]) # ground ################################ # PROGRAMMING MTA # ################################ ### J88 = MTA_ICP('J88\nICP') #pcb = J88.add(pcb,A88.x,A88.y-.19-.19-.1,z, angle=-90) ### pcb = J88.add(pcb,A88.pad[13].x-.19-.19,A88.pad[13].y-.19-.02,z,angle=-90) ### # MOSI pcb = wire(pcb,w, A88.pad[15], J88.pad[3]) # RESET d1 = .07 pcb = wire(pcb, w, J88.pad[4], point(MTB.pad[4].x-d1, J88.pad[4].y,z), point(MTB.pad[4].x-d1, MTB.y+.152, z), point(RA1.pad[2].x, MTB.y + .152, z), RA1.pad[2]) # pcb = wire(pcb,w, # A88.pad[29],point(A88.pad[29].x -.045, A88.pad[29].y, z), # point(A88.pad[29].x-.045, A88.pad[24].y,z), # point(A88.pad[29].x-.045, A88.y - .63,z), # point(J88.pad[4].x - .075, J88.pad[4].y,z), # J88.pad[4]) # pcb = wire(pcb,w, # A88.pad[29],point(A88.pad[1].x, A88.pad[1].y - .045,z), # J88.pad[4]) ## GND #pcb = wire(pcb,w, # J88.pad[2],point(A88.pad[16].x,J88.pad[2].y,z),point(A88.pad[16].x, A88.pad[21].y+.045,z), # point(A88.pad[21].x, A88.pad[21].y+.045,z), # A88.pad[21]) # # SCK hw = (J88.pad[1].x + A88.pad[16].x)/2 d1 = .1 d2 = .056 pcb = wire(pcb, w, J88.pad[5], point(J88.pad[5].x, J88.pad[5].y - d1,z), point(hw+ d2, J88.pad[5].y - d1,z), point(hw+ d2, A88.pad[17].y, z), A88.pad[17]) # pcb = wire(pcb, w, J88.pad[5], # point(J88.pad[5].x, J88.pad[5].y - d1,z), # point(C88.x - d2, J88.pad[5].y - d1,z), # point(C88.x - d2, A88.pad[17].y, z), # A88.pad[17]) #pcb = wire(pcb,w, # A88.pad[17],point(A88.pad[17].x, J88.pad[5].y,z),point(A88.pad[17].x, J88.pad[1].y-.05,z), # J88.pad[5]) # # MISO hw = (J88.pad[1].x + A88.pad[16].x)/2 pcb = wire(pcb,w, J88.pad[1], point(hw, J88.pad[1].y,z), point(hw, A88.pad[16].y,z),A88.pad[16]) #pcb = wire(pcb,w, # J88.pad[1],point(J88.x, J88.pad[1].y,z),point(J88.x,J88.pad[4].y,z), # point((A88.pad[16].x + J88.pad[3].x)/2, A88.pad[16].y, z), # A88.pad[16]) # pcb = wire(pcb,w, # A88.pad[16],point((J88.pad[1].x + A88.pad[16].x)/2,J88.pad[1].y,z), # J88.pad[1]) # # # ################################ # RGB placeholder pads # ################################ w=.016 pad_lp = cube(-w/2,w/2,-.043,.043,0,0) #pad_lp = cube(-.015,.015,-.043,.043,0,0) dy = 3.3*w # 2->3.3 class LP(part): # # pads for RGB led array # def __init__(self,value=''): self.value = value self.labels = [] self.pad = [point(0,0,0)] self.shape = translate(pad_lp,-3*dy,0,0) self.pad.append(point(-3*dy,0,0)) for i in range(6): self.shape = add(self.shape,translate(pad_lp,-2*dy + dy*i,0,0)) self.pad.append(point(-2*dy + dy*i,0,0)) LP1 = LP('LP1') pcb = LP1.add(pcb, A88.x + .6, A88.y, z, angle=90) #x+=.5-=.25 LP2 = LP('LP2') pcb = LP2.add(pcb, A88.x+1,A88.y,z,angle=90) pcb = wire(pcb,w, LP1.pad[1], LP2.pad[1]) pcb = wire(pcb,w, LP1.pad[2], LP2.pad[2]) pcb = wire(pcb,w, LP1.pad[3], LP2.pad[3]) pcb = wire(pcb,w, LP1.pad[4], LP2.pad[4]) pcb = wire(pcb,w, LP1.pad[5], LP2.pad[5]) pcb = wire(pcb,w, LP1.pad[6], LP2.pad[6]) pcb = wire(pcb,w, LP1.pad[7], LP2.pad[7]) dx = 2*w pcb = wire(pcb, w, LP1.pad[1], point(LP1.pad[1].x - .25+0*dx,LP1.pad[1].y,z), point(LP1.pad[1].x - .25+0*dx,A88.pad[30].y,z),A88.pad[30]) pcb = wire(pcb, w, LP1.pad[2], point(LP1.pad[2].x - .25+1*dx,LP1.pad[2].y,z), point(LP1.pad[2].x - .25+1*dx,A88.pad[28].y,z),A88.pad[28]) pcb = wire(pcb, w, LP1.pad[3], point(LP1.pad[3].x - .25+2*dx,LP1.pad[3].y,z), point(LP1.pad[3].x - .25+2*dx,A88.pad[27].y,z),A88.pad[27]) pcb = wire(pcb, w, LP1.pad[4], point(LP1.pad[4].x - .25+3*dx,LP1.pad[4].y,z), point(LP1.pad[4].x - .25+3*dx,A88.pad[26].y,z),A88.pad[26]) pcb = wire(pcb, w, LP1.pad[5], point(LP1.pad[5].x - .25+4*dx,LP1.pad[5].y,z), point(LP1.pad[5].x - .25+4*dx,A88.pad[25].y-.1-0*dx, z),point(A88.pad[25].x, A88.pad[25].y-.1-0*dx, z),A88.pad[25]) pcb = wire(pcb, w, LP1.pad[6], point(LP1.pad[6].x - .25+5*dx,LP1.pad[6].y,z), point(LP1.pad[6].x - .25+5*dx,A88.pad[24].y-.1-1*dx, z),point(A88.pad[24].x, A88.pad[24].y-.1-1*dx, z),A88.pad[24]) pcb = wire(pcb, w, LP1.pad[7], point(LP1.pad[7].x - .25+6*dx,LP1.pad[7].y,z), point(LP1.pad[7].x - .25+6*dx,A88.pad[23].y-.1-2*dx, z),point(A88.pad[23].x, A88.pad[23].y-.1-2*dx, z),A88.pad[23]) MTP = MTA_5('MTP') pcb = MTP.add(pcb, LP1.x + .15, LP1.y,z, angle=-90) ######################################################################## # T444 STUFF # ######################################################################## T444 = ATtiny44_SOICN('T444\nt44') pcb = T444.add(pcb,A88.x+.25,A88.y+.96,z,angle=180) #pcb = T444.add(pcb,x+.85+.4,y+1.56,z,angle=180) ### x+=.3,.45,.4,-.03, y+=.2 #pcb = T444.add(pcb,x+.53,y+1.3,z,angle=180) ### #pcb = T444.add(pcb,x+.35,y+.67,z) ### ### PROGRAMMING MTA J44 = MTA_ICP('J44\nICP') pcb = J44.add(pcb,T444.x,T444.pad[7].y+.25,z) ### #pcb = J44.add(pcb,T444.pad[7].x-.19,T444.y,z,angle=-90) ### #pcb = J44.add(pcb,T444.x,T444.pad[7].y-.19,z,angle=180) ### pcb = wire(pcb,w, T444.pad[7], J44.pad[3]) # MOSI pcb = wire(pcb,w, T444.pad[4], J44.pad[4]) # RESET # pcb = wire(pcb,w, T444.pad[14], J44.pad[2]) # GND pcb = wire(pcb,w, T444.pad[9], J44.pad[5]) # SCK pcb = wire(pcb,w, T444.pad[8], J44.pad[1]) # MISO # # TILT MTA # MTT = MTA_5('MTT') pcb = MTT.add(pcb, T444.x - .42, T444.y+.05,z,angle=-90) dx = 2*w pcb = wire(pcb, w, MTT.pad[3], T444.pad[8 ]) pcb = wire(pcb, w, MTT.pad[4], T444.pad[9 ]) pcb = wire(pcb, w, MTT.pad[2], T444.pad[10]) pcb = wire(pcb, w, MTT.pad[5], T444.pad[11]) pcb = wire(pcb, w, MTT.pad[1], T444.pad[12]) # # OUTWARD CONNECTIONS TO LCD # # pcb = wire(pcb, w, T444.pad[13], A88.pad[2]) # pcb = wire(pcb, w, T444.pad[2 ], A88.pad[1]) # pcb = wire(pcb, w, T444.pad[1 ], A88.pad[32]) # # OUTWARD CONNECTIONS TO RGB # dy = .1 dx = 4*w pcb = wire(pcb, w, T444.pad[13], point(T444.pad[13].x + dx, T444.pad[13].y,z), point(T444.pad[13].x + dx, A88.pad[1].y,z), point(A88.pad[1].x +dx, A88.pad[1].y,z), A88.pad[1]) pcb = wire(pcb, w, T444.pad[3], point(T444.x, T444.pad[3].y,z), point(T444.x, A88.pad[32].y,z), A88.pad[32]) pcb = wire(pcb, w, T444.pad[2], point(T444.pad[2].x - dx, T444.pad[2].y,z), point(T444.pad[2].x-dx, A88.pad[31].y,z), A88.pad[31]) MTO = MTA_3('MTO') pcb = MTO.add(pcb, T444.x, (T444.y + A88.y)/2+.1, z) # +=.1 #pcb = wire(pcb, w, T444.pad[13], # point(T444.pad[13].x+2.5*dx, T444.pad[13].y,z), # point(T444.pad[12].x+2.5*dx, A88.pad[2].y+dx+dy,z), # point(A88.pad[2].x, A88.pad[2].y+dx+dy,z), # A88.pad[32]) # was pad[2] #pcb = wire(pcb, w, T444.pad[3 ], # point(T444.x, T444.pad[3].y,z), # point(T444.x, A88.pad[1].y+2*dx+dy,z), # point(A88.pad[1].x, A88.pad[1].y+2*dx+dy,z), # A88.pad[31]) # was pad[1] #pcb = wire(pcb, w, T444.pad[2 ], # point(T444.pad[2].x-2.5*dx, T444.pad[2].y, z), # point(T444.pad[2].x-2.5*dx, A88.pad[1].y+3*dx+dy, z), # point(A88.pad[32].x, A88.pad[1].y+3*dx+dy,z), # A88.pad[30]) # was pad[32] # # OUTWARD CONNECTIONS TO LCD # #pcb = wire(pcb,w, R01.pad[1], # point(R01.pad[1].x-.22, R01.pad[1].y,z), # point(R01.pad[1].x-.22, J44.pad[4].y+.1,z), # point(MTT.x - .2, J44.pad[4].y+.1,z), # point(MTT.x - .2, T444.pad[13].y,z), # T444.pad[13]) #pcb = wire(pcb,w, R02.pad[1], T444.pad[3]) #pcb = wire(pcb,w, R03.pad[1], T444.pad[2]) ################################ # POWER AND GROUND # ################################ mtc = .156 # clearance for mta crx = T444.pad[4].x + .15 C44 = C_1206('C44') pcb = C44.add(pcb, crx, T444.pad[4].y ,z, angle=90) R44 = R_1206('R44') pcb = R44.add(pcb, crx, T444.pad[7].y+.1,z, angle=90) pcb = wire(pcb, w, J44.pad[4], point(J44.x+mtc,J44.pad[4].y, z), point(J44.x+mtc,R44.pad[1].y,z), R44.pad[1]) pcb = wire(pcb, w, R44.pad[2], C44.pad[1]) hw = (C44.pad[1].x + T444.pad[1].x)/2 pcb = wire(pcb, w, C44.pad[1], point(hw, C44.pad[1].y, z), point(hw,T444.pad[1].y,z), T444.pad[1]) ######################################################################## # GLOBAL POWER AND GROUND # ######################################################################## MP = MTA_power('MP\npower') pcb = MP.add(pcb, MTB.x,J44.y-.2,z, angle=-90) #pcb = MP.add(pcb, MTB.x+.2,J44.y,z, angle=-90) #pcb = MP.add(pcb,IC1.x-.03,IC1.pad[1].y+.2,z,angle=0) VR = regulator_SOT23('VR\n5V') pcb = VR.add(pcb, MP.x+.25,MP.y+.2,z, angle=180) #pcb = VR.add(pcb, MP.x-.25,MP.y-.2,z, angle=180) #pcb = VR.add(pcb,IC1.x-.28,IC1.pad[1].y,z,angle=180) pcb = wire(pcb,w, MP.pad[2], VR.pad[2]) pcb = wire(pcb,.014, MP.pad[1], VR.pad[3]) ###wiring bpy = MTT.pad[1].y - dy/2 mtcx = MTB.x-mtc-3*w pcb = wire(pcb, w, VR.pad[3], point(VR.pad[3].x, bpy,z), point(MTB.x-mtc-3*w, bpy,z), point(MTB.x-mtc-3*w,J88.pad[2].y,z), J88.pad[2]) ################## pcb = wire(pcb,w,point(VR.pad[3].x, bpy,z), point(MTT.pad[1].x, bpy,z), point(MTT.pad[1].x, T444.pad[14].y,z), T444.pad[14]) # pcb = wire(pcb,w,point(MTB.x-mtc-3*w,J88.pad[2].y,z), # point(MTB.x-mtc-3*w, J88.y - .5, z), # pcb = wire(pcb, w, J88.pad[2], point(MTB.x-mtc-2*w,J88.pad[2].y,z), # point(MTB.x-mtc-2*w, VR.pad[3].y,z), # VR.pad[3]) RC = R_1206('RC') pcb = RC.add(pcb,MTP.x ,J44.y,z) #J44 ground y1 = VR.pad[1].y + .15 - 2*w bp = point(J44.pad[2].x,y1,z) pcb = wire(pcb, w, VR.pad[3],point(VR.pad[3].x+.08, VR.pad[3].y,z), point(VR.pad[3].x+.08,y1,z), bp, J44.pad[2]) # gnd #T444 power pcb = wire(pcb, w, VR.pad[1], point(VR.pad[1].x, VR.pad[1].y + .15,z), point(RC.x, VR.pad[1].y + .15,z), point(RC.x,RC.y,z), point(RC.x, C44.pad[1].y, z), C44.pad[1]) pcb = wire(pcb, w, bp, RC.pad[1]) #pcb = wire(pcb, w, VR.pad[3], RC.pad[1]) pcb = wire(pcb, w, RC.pad[2], point(RC.pad[2].x, C44.pad[2].y,z),C44.pad[2]) # gnd #pcb = wire(pcb, w, VR.pad[3], C44.pad[2]) # gnd mtcx = MTB.x-mtc-3*w dy = .37 pcb = wire(pcb, w, VR.pad[1], point(VR.pad[1].x, VR.pad[1].y + .15,z), point(mtcx-2.5*w ,VR.pad[1].y + .15,z), point(mtcx-2.5*w,J88.y - dy, z), point(C88.x-4*w, J88.y - dy,z), point(C88.x-4*w, C88.pad[1].y,z), C88.pad[1]) # power # pcb = wire(pcb, w, VR.pad[3], C88.pad[2]) # gnd RC1 = R_1206('RC1') pcb = RC1.add(pcb, MTB.x-mtc, J88.y-dy,z, angle=90) pcb = wire(pcb, w, point(MTB.x-mtc-3*w,J88.pad[2].y,z), RC1.pad[1]) pcb = wire(pcb, w, RC1.pad[2],point(C88.pad[2].x, RC1.pad[2].y,z), C88.pad[2]) ######################################################################## # FINISH # ######################################################################## # # ONWARD # # H1 = hello(w,z) # pcb = H1.add(pcb,x+width-.02,y+height-.4,z,angle=-90) cad.function = add(pcb.board,pcb.exterior) # # uncomment to export traces # #cad.function = pcb.board # # uncomment to export exterior # #cad.function = pcb.exterior # # uncomment to export solder mask # #cad.function = pcb.mask # # uncomment to mill out board # # use 1/32 end-mill # set tool diameter = .0312 # set xy, z speed = .5 # set # contours = 1 # #cad.function = pcb.interior #z = -.065 # # define limits and parameters # cad.xmin = x-.1 # min x to render cad.xmax = x+width+.1 # max x to render cad.ymin = y-.1 # min y to render cad.ymax = y+height+.1 # max y to render cad.zmin = z cad.zmax = .050 dpi = 200 # low resolution for previewing #dpi = 500 # high resolution for machining nxy = int(dpi*(cad.xmax-cad.xmin)) cad.nx = nxy # x points to render cad.ny = nxy # y points to render cad.nz = 1 cad.view('xy') # 2D view