00b29a9d156c47f23120225fe8bbd5495636a0d9
[hw/altusmetrum] / packages / jst / PH-smt-ra.py
1 #!/usr/bin/python2
2 # Copyright 2007 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for
5 #   JST PH Series 2mm Side Entry SMT (Shrouded) connectors
6 #
7 # Needs pin count on command line, in range of 2..15
8 #
9
10 # dimensions in mm from PH Series.pdf datasheet
11 TabWidth = 1.5
12 TabHeight = 3.4
13 TabPinSpacing = 2.1
14 PinWidth = 1.0
15 PinHeight = 3.5
16 PinSpacing = 2.0
17 FirstPin = 3.1
18
19 import sys
20
21 # we're going to use the 1/100 of a mil fundamental unit form
22 def mm2mils100( mm ):
23         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
24
25 pins = int(sys.argv[1])
26 if pins < 2:
27         sys.stderr.write('Must be at least 2 pins\n')
28         sys.exit(1)
29 if pins > 15:
30         sys.stderr.write('Must be no more than 15 pins\n')
31         sys.exit(1)
32
33 print '# author: Bdale Garbee'
34 print '# email: bdale@gag.com'
35 print '# dist-license: GPL 2'
36 print '# use-license: unlimited'
37
38 print 'Element[0x0 "S%iB-PH"' % pins,'"" "" 0 0 0 0 0 100 0x0]'
39 print "("
40 for pin in range (1,pins+1):
41     pinnum = pins + 1 - pin
42     print '   Pad[', \
43         mm2mils100(FirstPin + (pin-1)*PinSpacing), \
44         mm2mils100(TabHeight+TabPinSpacing+PinWidth/2), \
45         mm2mils100(FirstPin + (pin-1)*PinSpacing), \
46         mm2mils100(TabHeight+TabPinSpacing+PinHeight-PinWidth/2), \
47         mm2mils100(PinWidth), \
48         mm2mils100(PinSpacing - PinWidth), \
49         mm2mils100(PinWidth + 0.2), \
50         '"pin%i"' % pinnum, '"%i"' % pinnum, '0x0100]'
51
52
53 print '   Pad[', \
54         mm2mils100(TabWidth/2), \
55         mm2mils100(TabWidth/2), \
56         mm2mils100(TabWidth/2), \
57         mm2mils100(TabHeight - TabWidth/2), \
58         mm2mils100(TabWidth), \
59         0, \
60         mm2mils100(TabWidth + 0.2), \
61         '"pin%i"' % (pins+1), '"%i"' % (pins+1), '0x0100]'
62
63 print '   Pad[', \
64         mm2mils100(FirstPin*2 + (pins-1)*PinSpacing - TabWidth/2), \
65         mm2mils100(TabWidth/2), \
66         mm2mils100(FirstPin*2 + (pins-1)*PinSpacing - TabWidth/2), \
67         mm2mils100(TabHeight - TabWidth/2), \
68         mm2mils100(TabWidth), \
69         0, \
70         mm2mils100(TabWidth + 0.2), \
71         '"pin%i"' % (pins+1), '"%i"' % (pins+1), '0x0100]'
72
73 print ")"