convert Python footprint generators to Python 3
[hw/altusmetrum] / packages / NHD-C0216CZ.py
1 #!/usr/bin/python2
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Program to emit PCB footprint for NHD-C0216CZ-FSW-FBW-3V3 2x16 text LCD
5 #
6
7 # dimensions in mm from NHD-C0216CZ-FSW-FBW-3V3.pdf datasheet
8 BodyWidth = 41.4
9 BodyHeight = 24.3
10 PinDiam = 0.7
11 PinSpacing = 1.50
12 PinOffset = 0.75
13 Pins = 10
14 ViewWidth = 34.22
15 ViewHeight = 8.76
16 ViewHCtr = 15.8 / 2 + 7.6 - BodyHeight / 2
17
18 # centered rectangle of holes for alignment pins
19 MntWidth = 40.2 
20 MntHeight = 23.1
21 MntDiam = 1.0
22
23 # contacts for LED backlight
24 BLWidth = 34.6
25 BLOffset = 2.55
26 BLDiam = 1.25           # a 1.2 x 0.6 slot is called for
27
28 import sys
29
30 # we're going to use the 1/100 of a mil fundamental unit form
31 def mm2mils100( mm ):
32         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
33
34 print '# author: Bdale Garbee'
35 print '# email: bdale@gag.com'
36 print '# dist-license: GPL 3'
37 print '# use-license: unlimited'
38
39 print 'Element[0x0 "NHD-C0216CZ" "" "" 0 0 0 0 0 100 0x0]'
40 print "("
41
42 # pins
43         # pin( x y thickness clearance mask drillhole name number flags)
44 for pin in range (1,Pins+1):
45     if pin == 1:
46         Flags = '0x0101'
47     else:
48         Flags = '0x0001'
49
50     print '   Pin[',\
51         mm2mils100((pin - 5.5)*PinSpacing), \
52         mm2mils100(-BodyHeight/2+PinOffset), \
53         mm2mils100(PinDiam * 1.75), \
54         1200, \
55         mm2mils100(PinDiam * 1.75) + 600, \
56         mm2mils100(PinDiam), \
57         '"pin%i"' % (pin), '"%i"' % (pin), Flags, ']'
58
59 print '   ElementLine[',\
60         -mm2mils100(BodyWidth/2), \
61         -mm2mils100(BodyHeight/2), \
62         mm2mils100(BodyWidth/2), \
63         -mm2mils100(BodyHeight/2), \
64         500, \
65         ']'
66 print '   ElementLine[',\
67         -mm2mils100(BodyWidth/2), \
68         -mm2mils100(BodyHeight/2), \
69         -mm2mils100(BodyWidth/2), \
70         mm2mils100(BodyHeight/2), \
71         500, \
72         ']'
73 print '   ElementLine[',\
74         -mm2mils100(BodyWidth/2), \
75         mm2mils100(BodyHeight/2), \
76         mm2mils100(BodyWidth/2), \
77         mm2mils100(BodyHeight/2), \
78         500, \
79         ']'
80 print '   ElementLine[',\
81         mm2mils100(BodyWidth/2), \
82         mm2mils100(BodyHeight/2), \
83         mm2mils100(BodyWidth/2), \
84         -mm2mils100(BodyHeight/2), \
85         500, \
86         ']'
87
88 # mark viewable area
89
90 print '   ElementLine[',\
91         mm2mils100(-ViewWidth/2), \
92         mm2mils100(ViewHCtr + ViewHeight/2), \
93         mm2mils100(ViewWidth/2), \
94         mm2mils100(ViewHCtr + ViewHeight/2), \
95         500, \
96         ']'
97
98 print '   ElementLine[',\
99         mm2mils100(-ViewWidth/2), \
100         mm2mils100(ViewHCtr - ViewHeight/2), \
101         mm2mils100(ViewWidth/2), \
102         mm2mils100(ViewHCtr - ViewHeight/2), \
103         500, \
104         ']'
105
106 print '   ElementLine[',\
107         mm2mils100(-ViewWidth/2), \
108         mm2mils100(ViewHCtr - ViewHeight/2), \
109         mm2mils100(-ViewWidth/2), \
110         mm2mils100(ViewHCtr + ViewHeight/2), \
111         500, \
112         ']'
113
114 print '   ElementLine[',\
115         mm2mils100(ViewWidth/2), \
116         mm2mils100(ViewHCtr - ViewHeight/2), \
117         mm2mils100(ViewWidth/2), \
118         mm2mils100(ViewHCtr + ViewHeight/2), \
119         500, \
120         ']'
121
122 print '   ElementLine[',\
123         mm2mils100(ViewWidth/2), \
124         mm2mils100(ViewHCtr - ViewHeight/2), \
125         mm2mils100(-ViewWidth/2), \
126         mm2mils100(ViewHCtr + ViewHeight/2), \
127         500, \
128         ']'
129
130 print '   ElementLine[',\
131         mm2mils100(-ViewWidth/2), \
132         mm2mils100(ViewHCtr - ViewHeight/2), \
133         mm2mils100(ViewWidth/2), \
134         mm2mils100(ViewHCtr + ViewHeight/2), \
135         500, \
136         ']'
137
138 # holes for alignment pins
139 print '   Pin[',\
140         mm2mils100(MntWidth/2), \
141         mm2mils100(MntHeight/2), \
142         mm2mils100(MntDiam * 1.75), \
143         1200, \
144         mm2mils100(MntDiam * 1.75) + 600, \
145         mm2mils100(MntDiam), \
146         '"G"', '"G"', '0x0001', ']'
147
148 print '   Pin[',\
149         mm2mils100(MntWidth/2), \
150         mm2mils100(-MntHeight/2), \
151         mm2mils100(MntDiam * 1.75), \
152         1200, \
153         mm2mils100(MntDiam * 1.75) + 600, \
154         mm2mils100(MntDiam), \
155         '"G"', '"G"', '0x0001', ']'
156
157 print '   Pin[',\
158         mm2mils100(-MntWidth/2), \
159         mm2mils100(MntHeight/2), \
160         mm2mils100(MntDiam * 1.75), \
161         1200, \
162         mm2mils100(MntDiam * 1.75) + 600, \
163         mm2mils100(MntDiam), \
164         '"G"', '"G"', '0x0001', ']'
165
166 print '   Pin[',\
167         mm2mils100(-MntWidth/2), \
168         mm2mils100(-MntHeight/2), \
169         mm2mils100(MntDiam * 1.75), \
170         1200, \
171         mm2mils100(MntDiam * 1.75) + 600, \
172         mm2mils100(MntDiam), \
173         '"G"', '"G"', '0x0001', ']'
174
175 # backlight pins
176 print '   Pin[',\
177         mm2mils100(-BLWidth/2), \
178         mm2mils100(-BodyHeight/2+BLOffset), \
179         mm2mils100(BLDiam * 1.75), \
180         1200, \
181         mm2mils100(BLDiam * 1.75) + 600, \
182         mm2mils100(BLDiam), \
183         '"K"', '"K"', '0x0001', ']'
184
185 print '   Pin[',\
186         mm2mils100(BLWidth/2), \
187         mm2mils100(-BodyHeight/2+BLOffset), \
188         mm2mils100(BLDiam * 1.75), \
189         1200, \
190         mm2mils100(BLDiam * 1.75) + 600, \
191         mm2mils100(BLDiam), \
192         '"A"', '"A"', '0x0001', ']'
193
194 print ")"