1 | #!/usr/bin/python
|
2 | import math
|
3 |
|
4 | #Parameter zum einstellen:
|
5 |
|
6 | #Pad-Masse
|
7 | pad_length = '1.2mm'
|
8 | pad_width = '0.3mm'
|
9 |
|
10 | #Pads pro Seite
|
11 | pads_per_side = 44
|
12 |
|
13 | #Abstand der gegenueberliegenden Pad-Reihen (Mitte der Pads)
|
14 | pad_row_distance = 26.7 - 1.2
|
15 |
|
16 | #Abstand zwischen den mitten der aeusseren Pads einer Seite
|
17 | pads_side_length = 21.8 - 0.3
|
18 |
|
19 | #Siehe Eagle-Doku zu 'SMD'
|
20 | pad_roundness = '0'
|
21 |
|
22 | # 4 fuer TQFP etc, 2 fuer SO
|
23 | sides = 4 # oder 2
|
24 |
|
25 |
|
26 | #finger weg_
|
27 | _pad_counter = 1
|
28 |
|
29 | def smd(pos, orientation, name):
|
30 | return "SMD %s %s -%s R%f '%s' (%fmm %fmm)" % (pad_length, pad_width, pad_roundness, orientation, name, pos[0], pos[1])
|
31 |
|
32 | def rad2deg(a):
|
33 | return 180.0 * a / math.pi
|
34 |
|
35 | def pad_name(i):
|
36 | return '%d' % i
|
37 |
|
38 | def pad_line(start, end, num):
|
39 | global _pad_counter
|
40 | res = list()
|
41 | x_delta = end[0] - start[0]
|
42 | y_delta = end[1] - start[1]
|
43 | angle = rad2deg(math.atan2(y_delta, x_delta)) + 90.0
|
44 | for i in range(num):
|
45 | x = start[0] + (end[0] - start[0]) * float(i) / float(num -1 )
|
46 | y = start[1] + (end[1] - start[1]) * float(i) / float(num -1 )
|
47 | res.append(smd((x,y), angle, pad_name(_pad_counter)))
|
48 | _pad_counter += 1
|
49 | return res
|
50 |
|
51 | def create_footprint():
|
52 | res = []
|
53 | if sides == 4:
|
54 | left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
|
55 | bot = ((-pads_side_length / 2.0, -pad_row_distance / 2.0), (+pads_side_length / 2.0, -pad_row_distance / 2.0))
|
56 | right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
|
57 | top = ((pads_side_length / 2.0, pad_row_distance / 2.0), (-pads_side_length / 2.0, pad_row_distance / 2.0))
|
58 | res.extend(pad_line(left[0], left[1], pads_per_side))
|
59 | res.extend(pad_line(bot[0], bot[1], pads_per_side))
|
60 | res.extend(pad_line(right[0], right[1], pads_per_side))
|
61 | res.extend(pad_line(top[0], top[1], pads_per_side))
|
62 | elif sides == 2:
|
63 | left = ((-pad_row_distance / 2.0, pads_side_length / 2.0), (-pad_row_distance / 2.0, -pads_side_length / 2.0))
|
64 | right =((pad_row_distance / 2.0, -pads_side_length / 2.0), (pad_row_distance / 2.0, pads_side_length / 2.0))
|
65 | res.extend(pad_line(left[0], left[1], pads_per_side))
|
66 | res.extend(pad_line(right[0], right[1], pads_per_side))
|
67 | return '\n'.join(res)
|
68 |
|
69 |
|
70 | if __name__ == '__main__':
|
71 | print create_footprint()
|