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