648f0cc2c03400ed157709690fdf15ce54e1d5bd
[hw/altusmetrum] / packages / U-DFN2020-6-F.py
1 #!/usr/bin/python3
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit U-DFN2020-6 (Type F) footprint for singe-channel FET
5 #
6
7 # dimensions in mm from diodes-inc/DMN2022UFDF.pdf datasheet
8
9 BodyWidth = 2.0
10 BodyHeight = 2.0
11
12 PinWidth = 0.4
13 PinHeight = 0.425
14 PinSpacing = 0.65
15 RowOuters = 2.3
16 RowSpacing = RowOuters - (2 * PinHeight)
17
18 # overall dimensions for the two inner pads
19 X1 = 0.48
20 Y1 = 0.80
21
22 X2 = 0.95
23 Y2 = 1.15
24
25 # we're going to use the 1/100 of a mil fundamental unit form
26 def mm2mils100( mm ):
27         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28
29 print ('# author: Bdale Garbee')
30 print ('# email: bdale@gag.com')
31 print ('# dist-license: GPL 3')
32 print ('# use-license: unlimited')
33
34 print ('Element[0x0 "U-DFN2020-6-F" "" "" 0 0 -10161 -12011 0 100 0x0]')
35 print ("(")
36 for pin in range (0,3):
37     print ('   Pad[',\
38         mm2mils100((pin-1) * PinSpacing), \
39         mm2mils100(-(RowSpacing/2 + PinWidth/2)), \
40         mm2mils100((pin-1) * PinSpacing), \
41         mm2mils100(-(RowSpacing/2 + PinHeight - PinWidth/2)), \
42         mm2mils100(PinWidth), \
43         mm2mils100(PinSpacing - PinWidth), \
44         mm2mils100(PinWidth)+600, \
45         '"pin%i"' % (6 - pin), '"%i"' % (6 - pin), '0x0100]')
46
47     print ('   Pad[',\
48         mm2mils100((pin-1) * PinSpacing), \
49         mm2mils100(RowSpacing/2 + PinWidth/2), \
50         mm2mils100((pin-1) * PinSpacing), \
51         mm2mils100(RowSpacing/2 + PinHeight - PinWidth/2), \
52         mm2mils100(PinWidth), \
53         mm2mils100(PinSpacing - PinWidth), \
54         mm2mils100(PinWidth)+600, \
55         '"pin%i"' % (1 + pin), '"%i"' % (1 + pin), '0x0100]')
56
57 print ('   Pad[',\
58         mm2mils100(-PinSpacing/2), \
59         mm2mils100(-Y2/2 + X2/2), \
60         mm2mils100(-PinSpacing/2), \
61         mm2mils100(Y2/2 - X2/2), \
62         mm2mils100(X2), \
63         mm2mils100(.1524), \
64         mm2mils100(X2)+600, \
65         '"pin7" "7" 0x0100]')
66
67 print ('   Pad[',\
68         mm2mils100(PinSpacing + (X1 - PinWidth)/2), \
69         mm2mils100(-Y1/2 + X1/2), \
70         mm2mils100(PinSpacing + (X1 - PinWidth)/2), \
71         mm2mils100(Y1/2 - X1/2), \
72         mm2mils100(X1), \
73         mm2mils100(.1524), \
74         mm2mils100(X1)+600, \
75         '"pin8" "8" 0x0100]')
76
77 #print ('   ElementLine[',\
78 #       mm2mils100(-BodyHeight/2), \
79 #       mm2mils100(-BodyWidth/2), \
80 #       mm2mils100(-BodyHeight/2), \
81 #       mm2mils100( BodyWidth/2), \
82 #       '1000 ]')
83 #
84 #print ('   ElementLine[',\
85 #       mm2mils100(-BodyHeight/2), \
86 #       mm2mils100( BodyWidth/2), \
87 #       mm2mils100( BodyHeight/2), \
88 #       mm2mils100( BodyWidth/2), \
89 #       '1000 ]')
90 #
91 #print ('   ElementLine[',\
92 #       mm2mils100( BodyHeight/2), \
93 #       mm2mils100( BodyWidth/2), \
94 #       mm2mils100( BodyHeight/2), \
95 #       mm2mils100(-BodyWidth/2), \
96 #       '1000 ]')
97 #
98 #print ('   ElementLine[',\
99 #       mm2mils100( BodyHeight/2), \
100 #       mm2mils100(-BodyWidth/2), \
101 #       mm2mils100(-BodyHeight/2), \
102 #       mm2mils100(-BodyWidth/2), \
103 #       '1000 ]')
104 #
105 #print ('   ElementArc[',\
106 #       mm2mils100(-2 * PinSpacing), \
107 #       mm2mils100(1.25 * RowSpacing), \
108 #       '500 500 0 360 1000 ]')
109
110 print (")")