Commit d9e79479 authored by Sam Calisch's avatar Sam Calisch
Browse files

started raytac board

parents
from koko.lib.pcb import *
from koko.lib.sam import *
class TagConnectPDI(Component):
'''
'''
_pad = s2d.circle(0,0,.5*.031)
_via = s2d.circle(0,0,.5*.039)
pins = [
Pin(-.05,-.025,_pad,'CLK',label_size=.02),
Pin( .00,-.025,_pad,'NC',label_size=.02),
Pin( .05,-.025,_pad,'DAT',label_size=.02),
Pin(-.05,.025,_pad,'VCC',label_size=.02),
Pin( .00,.025,_pad,'NC',label_size=.02),
Pin( .05,.025,_pad,'GND',label_size=.02)
]
vias = [
Via(-.1,0,_via),
Via(.1,0.04,_via),
Via(.1,-.04,_via),
]
class TagConnectSWD(Component):
'''
'''
_pad = s2d.circle(0,0,.5*.031)
_via = s2d.circle(0,0,.5*.039)
pins = [
Pin(-.05,-.025,_pad,'SWDIO',label_size=.015),
Pin( .00,-.025,_pad,'NC',label_size=.015),
Pin( .05,-.025,_pad,'SWCLK',label_size=.015),
Pin(-.05,.025,_pad,'VCC',label_size=.015),
Pin( .00,.025,_pad,'NC',label_size=.015),
Pin( .05,.025,_pad,'GND',label_size=.015)
]
vias = [
Via(-.1,0,_via),
Via(.1,0.04,_via),
Via(.1,-.04,_via),
]
class Regulator_SOT23(Component):
''' SOT23 voltage regulator
'''
_pad_SOT23 = s2d.rectangle(-.02,.02,-.012,.012)
pins = [
Pin(-0.045, -0.0375, _pad_SOT23,'IN'),
Pin(-0.045, 0.0375, _pad_SOT23,'OUT'),
Pin(0.045, 0, _pad_SOT23,'GND')
]
prefix = 'U'
vias = []
class Crystal_FC135(Component):
''' CRYSTAL 32.7680KHZ 12.5PF SMT
'''
_pad = s2d.rectangle(-.5/25.4,.5/25.4,-.9/25.4,.9/25.4)
pins = [
Pin(-1.25/25.4, 0, _pad),
Pin( 1.25/25.4, 0, _pad),
]
prefix = 'U'
vias = []
class Header_FTDI(Component):
''' FTDI cable header
'''
_pad_header = chamfered_rectangle(-0.06, 0.08,-0.035, 0.035,.007)
pins = [
#Pin(0, -0.25, _pad_header, 'RTS'),
Pin(0, -0.15, _pad_header, 'RX'),
Pin(0, -0.05, _pad_header, 'TX'),
Pin(0, 0.05, _pad_header, 'VCC'),
Pin(0, 0.15, _pad_header, 'CTS'),
Pin(0, 0.25, _pad_header, 'GND')
]
prefix = 'J'
vias = []
#shadow = s2d.rectangle(-.06,8/25.4,-.3,.3)
shadow = s2d.rectangle(-.06,8/25.4,-.2,.3)
def bot_chamfered_rectangle(x0,x1,y0,y1,c):
r = rectangle(x0,x1,y0,y1)
c1 = triangle(x0,y0,x0,y0+c,x0+c,y0)
c2 = triangle(x1,y1, x1, y1-c, x1-c, y1)
c3 = triangle(x0,y1, x0+c, y1, x0, y1-c)
c4 = triangle(x1,y0, x1-c, y0, x1, y0+c)
return r-c2-c3
class CR20XX(Component):
#coin cell battery, e.g. 2032
pins = [
Pin(0,0,circle(0,0,5./25.4),'-')
]
shadow = circle(0,0,10./25.4)
vias = []
class AAA(Component):
#AAA battery smd holder
pad = chamfered_rectangle(-.125,.125,-.12,.12,.05)
pins = [
Pin(1.21-.125,0,pad,'+',label_size=.08),
Pin(-1.21+.125,0,pad,'-',label_size=.08),
]
shadow = rectangle(-1.07,1.07,-.25,.25)
vias = [
Via(-1.21+.25,.209,circle(0,0,.039))
]
class MDBT42(Component):
#Raytach nrf52 module
p = .7/25.4
pad_hw = .2/25.4
pad_hh = .8/25.4
_padv = rectangle(-pad_hw,pad_hw,-pad_hh,pad_hh)
_padh = rectangle(-pad_hh,pad_hh,-pad_hw,pad_hw)
_padg = rectangle(-pad_hh,pad_hh,-.3/25.4,.3/25.4)
c= 4.4/25.4
start_y = 10.3/25.4
start_x = .55/25.4
y_os = .25
names = [
'GND1','P23','P22','SWCLK','SWDIO','RESET','P18','P17','P15','P13','P12','P10','P9',
'GND2','VDD','P8','P6','P7','P5','XL1','XL2','P4','P3','P2','GND3',
'DCC','DEC4','P31','P27','P25','P30','P29','P28','P11','P26','P19','GND4'
]
pins = [Pin(-c,start_y-y_os,_padg,n,label_size=.018) for i,n in enumerate(names[:1])]
pins += [Pin(-c,start_y-.8/25.4-i*p-y_os,_padh,n,label_size=.018) for i,n in enumerate(names[1:13])]
pins += [Pin(-c+start_x+i*p,-y_os,_padv,n,label_size=.018,label_rot=-90) for i,n in enumerate(names[13:25])]
pins += [Pin(c,start_y-1.5/25.4-i*p-y_os,_padh,n,label_size=.018) for i,n in enumerate(names[25:36][::-1])]
pins += [Pin(c,start_y-y_os,_padg,n,label_size=.018) for i,n in enumerate(names[36:37])]
vias = []
shadow = rectangle(-c,c,-y_os,start_y+3.5/25.4-y_os)
class BT832(Component):
#Fanstel BT832 nrf52 module
p = 1.1/25.4
pad_hw = .7/25.4
pad_hh = .35/25.4
_pad = rectangle(-pad_hw,pad_hw,-pad_hh,pad_hh)
c= 7/25.4
start_y = 1.1/25.4
y_os = .25
names = [
'SDA','SCL','XL1','XL2','AIN0','AIN1','NFC1','NFC2',
'VCC','GND','P13','P18','P20','RESET','SWDCLK','SWDIO'
]
pins = [Pin(-c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[:8][::-1])]
pins += [Pin(c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[8:16])]
vias = []
shadow = rectangle(-c,c,-y_os,16/25.4-y_os)
class BC832(Component):
#Fanstel BC832 micro nrf52 module
p = 1.1/25.4
pad_hw = .7/25.4
pad_hh = .35/25.4
_pad = rectangle(-pad_hw,pad_hw,-pad_hh,pad_hh)
c= 3.9/25.4
start_y = .618/25.4
y_os = .18
names = [
'P26/SDA','P27/SCL','XL1','XL2','AIN0','AIN1','P9/NFC1','P10/NFC2',
'VCC','GND','P13','P18','P20','RESET','SWDCLK','SWDIO'
]
pins = [Pin(-c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[:8][::-1])]
pins += [Pin(c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[8:16])]
vias = []
shadow = rectangle(-c,c,-y_os,8.8/25.4-y_os)
class Hole(Component):
pins = [Pin(0,0,circle(0,0,0.01))]
vias = [Via(0,0,circle(0,0,.5*2.1/25.4))]
tap = circle(0,0,.5*1.9/25.5)
width = 1.
height = .83
pcb = PCB(0,0,width,height,chamfer_distance=.05)
def connectG(pin,dx,dy,width=.014):
'''
Convenience function for connecting to ground plane
'''
pcb.connectD(pin,[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy],width=width,sides=[0,1,1])
def connectS(pin,dx,dy,width=.014):
pcb.connectD(pin,[pin.x+dx+.0001,pin.y+dy],width=width)
def connectM(pin1,pin2,dx,width=.014):
pcb.connectD(pin1,[pin1.x+dx,pin1.y],pin2,width=width)
ftdi = Header_FTDI(.2,.38,180,'ftdi')
pcb += ftdi
reg = Regulator_SOT23(ftdi.x+.13,ftdi.y-.25,180,'3.3v')
pcb += reg
pcb.connectV(reg['GND'],ftdi['GND'])
pcb.connectD(ftdi['VCC'],[ftdi['VCC'].x+.03,ftdi['VCC'].y],[reg['IN'].x-.09,reg['IN'].y],reg['IN'])
#todo:
#decoupling caps on regulator
#button reset
#route analog inputs?
mdb = MDBT42(ftdi.x+.55,ftdi.y,-90,'Raytach\nMDBT42Q\nNRF52')
pcb += mdb
#bt = BT832(1.5,1.2,0,'Fanstel\nBT832\nNRF52')
#pcb += bt
#bc = BC832(.6,1.2,-90,'Fanstel\nBC832\nNRF52')
#pcb += bc
pcb.connectV(ftdi['TX'],mdb['P6'],width=.014)
pcb.connectD(ftdi['RX'],[ftdi['RX'].x+.04,ftdi['RX'].y],mdb['P8'],width=.014)
swd = TagConnectSWD(mdb.x+.07,mdb.y+.3,0,'swd')
pcb += swd
pcb.connectD(swd['SWCLK'],mdb['SWCLK'],width=.014)
pcb.connectD(swd['SWDIO'],mdb['SWDIO'],width=.014)
pcb.connectD(swd['VCC'],[swd['VCC'].x-.25,swd['VCC'].y+.03],[mdb['VDD'].x-.13,mdb['VDD'].y+.03],mdb['VDD'],width=.014)
pcb.connectD(mdb['GND3'],[mdb['GND3'].x,mdb['GND3'].y-.03],reg['GND'])
pcb.connectD(reg['OUT'],[ftdi.x-.1,ftdi['GND'].y-.06],[ftdi.x-.12,ftdi['RX'].y+.04],[ftdi.x+.08,ftdi['RX'].y+.06],mdb['VDD'],width=.014)
x1 = Crystal_FC135(mdb.x-.34,mdb.y-.02,90,'X1\n32.768',label_size=.025)
pcb += x1
cx1 = C_0805(x1.x-.08,x1.y,90,'CX1\n22pF',label_size=.02)
cx2 = C_0805(x1.x-.03,x1.y-.1,0,'CX2\n22pF',label_size=.02)
pcb += cx1
pcb += cx2
pcb.connectD(x1[0],mdb['XL1'],width=.014)
pcb.connectD(x1[1],mdb['XL2'],width=.014)
pcb.connectV(cx2[1],cx1[1])
pcb.connectV(x1[0],cx1[0])
pcb.connectV(x1[1],cx2[0])
pcb.connectV(cx2[1],[mdb['GND3'].x,mdb['GND3'].y-.02],mdb['GND3'])
L1 = R_0805(mdb.x-.19,mdb.y-.245,0,'L1 10uH',label_size=.02)
pcb += L1
pcb.connectD(L1[1],[L1[1].x,L1[1].y+.02],mdb['DCC'],width=.014)
pcb.connectD(L1[0],mdb['DEC4'],width=.014)
C1 = R_0805(L1.x,L1.y-.07,0,'C1 1 uF',label_size=.02)
pcb += C1
pcb.connectV(L1[0],C1[0])
pcb.connectD(C1[1],[C1[1].x-.04,C1[1].y+.01],reg['GND'])
connectG(mdb['GND2'],-.06,.02)
connectG(mdb['GND3'],-.05,-.05)
connectG(mdb['GND4'],0,-.08)
pcb.connectD(mdb['GND1'],[mdb['GND1'].x+.06,mdb['GND1'].y+.2],[swd['GND'].x+.02,swd['GND'].y+.06],swd['GND'])
connectG(swd['GND'],-0.01,.06)
cad.shapes = pcb.layout()
#cad.shape = pcb.traces+(pcb.cutout-pcb.cutout)
#cad.shape = pcb.cutout+(pcb.traces-pcb.traces)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment