]> git.gag.com Git - hw/altusmetrum/blobdiff - packages/UBLOX-ZOE.py
add a footprint for the u-blox ZOE
[hw/altusmetrum] / packages / UBLOX-ZOE.py
diff --git a/packages/UBLOX-ZOE.py b/packages/UBLOX-ZOE.py
new file mode 100755 (executable)
index 0000000..d2181e0
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/python
+# Copyright 2020 by Bdale Garbee <bdale@gag.com>.  GPLv3
+#
+# Program to emit PCB footprint for U-Blox ZOE-8 GPS receiver
+#
+
+# dimensions in mm from:
+#      ZOE-M8_HIM_(UBX-16030136).pdf
+
+BodySize = 4.5
+PadSpacing = 0.5
+PadDiam = 0.27
+
+Clearance = 0.010 * 25.4 
+Mask = (0.010 * 25.4) + PadDiam
+
+ValidPin = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'B1', 'B9', 
+            'C1', 'C3', 'C4', 'C5', 'C6', 'C7', 'C9', 'D1', 'D3', 'D4', 'D6',
+           'D9', 'E1', 'E3', 'E7', 'E9', 'F1', 'F3', 'F4', 'F6', 'F7', 'F9',
+           'G1', 'G3', 'G4', 'G5', 'G6', 'G7', 'G9', 'H1', 'H9', 'J1', 'J2',
+           'J3', 'J4', 'J5', 'J6', 'J7', 'J8', 'J9']
+
+import sys
+
+# we're going to use the 1/100 of a mil fundamental unit form
+def mm2mils100( mm ):
+       return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
+
+print '# author: Bdale Garbee'
+print '# email: bdale@gag.com'
+print '# dist-license: GPL 3'
+print '# use-license: unlimited'
+
+print 'Element[0x0 "UBLOX-ZOE" "" "" 0 0 11000 0 0 100 0x0]'
+print "("
+
+rows = ['A','B','C','D','E','F','G','H','J']
+for row in rows:
+  rownum = rows.index(row)     # rownum will run 0..8
+  for col in range (1,10):     # col wil run 1..9
+    ThisPin = row+str(col)
+    if ThisPin in ValidPin:
+      print '   Pad[',\
+        mm2mils100((col-5) * PadSpacing), \
+        mm2mils100((rownum-4) * PadSpacing), \
+        mm2mils100((col-5) * PadSpacing), \
+        mm2mils100((rownum-4) * PadSpacing), \
+        mm2mils100(PadDiam), \
+        mm2mils100(Clearance), \
+        mm2mils100(Mask), \
+        '"%s"' % ThisPin, '"%s"' % ThisPin, '""]'
+
+print '   ElementLine[',\
+        mm2mils100(-BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        mm2mils100( BodySize/2), \
+        '1000 ]'
+
+print '   ElementLine[',\
+        mm2mils100(-BodySize/2), \
+        mm2mils100( BodySize/2), \
+        mm2mils100( BodySize/2), \
+        mm2mils100( BodySize/2), \
+        '1000 ]'
+
+print '   ElementLine[',\
+        mm2mils100( BodySize/2), \
+        mm2mils100( BodySize/2), \
+        mm2mils100( BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        '1000 ]'
+
+print '   ElementLine[',\
+        mm2mils100( BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        mm2mils100(-BodySize/2), \
+        '1000 ]'
+
+print '   ElementArc[',\
+        mm2mils100(-5 * PadSpacing), \
+        mm2mils100(-5 * PadSpacing), \
+        '500 500 0 360 1000 ]'
+
+print ")"