]> git.gag.com Git - hw/altusmetrum/commitdiff
create second Pi Zero 2W footprint for back-to-back mounting ala TeleTerra
authorBdale Garbee <bdale@gag.com>
Fri, 8 Aug 2025 01:57:42 +0000 (19:57 -0600)
committerBdale Garbee <bdale@gag.com>
Fri, 8 Aug 2025 01:57:42 +0000 (19:57 -0600)
packages/Makefile
packages/pizero-tt.py [new file with mode: 0755]

index 2b70d70361d9a05cba10a24ee09483707b36bf84..57af66ee53f69448f865b38a77595638538909b5 100644 (file)
@@ -183,6 +183,7 @@ FOOTPRINTS= \
        NRS50.fp \
        ARJM11D7009ABEW2.fp \
        pizero.fp \
+       pizero-tt.fp \
        XLR3.fp \
        XLR4.fp \
        XLR5.fp \
diff --git a/packages/pizero-tt.py b/packages/pizero-tt.py
new file mode 100755 (executable)
index 0000000..3eb81b4
--- /dev/null
@@ -0,0 +1,166 @@
+#!/usr/bin/python3
+# Copyright 2025 by Bdale Garbee <bdale@gag.com>.  GPLv3
+#
+# Program to emit PCB footprint for Raspberry Pi Zero 2 W in TeleTerra.  
+#
+# Note that this footprint is intended to be used to mount a 02W "back to 
+# back" with another PCB, using no headers for minimal package volume.
+#
+# 40 pin header, 4 mounting holes, outline in silk
+
+# dimensions in mm
+PinSpacing = 2.54
+PinHole = 0.038 * 25.4
+PinCopper = 0.07 * 25.4
+
+rows = 20
+cols = 2
+
+row_off = (rows + 1)/2 * PinSpacing / 2.0 
+col_off = (cols - 1) * PinSpacing / 2.0
+
+BoardLength = 65.0
+BoardWidth = 30.0
+CornerRadius = 2.25
+
+MntOffset = 3.5
+MntDiam = 2.5
+
+# 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 "PiZero-TT" "" "" 0 0 0 0 0 100 0x0]')
+print ("(")
+
+for row in range (0,rows):
+    for col in range (0,cols):
+        pin = row * cols + col
+        pinnum = pin + 1
+        if pinnum == 1:
+            Flags = '0x0101'
+        else:
+            Flags = '0x0001'
+        print ('   Pin[', \
+           mm2mils100(((rows-1)/2 - row)*-PinSpacing), \
+           mm2mils100(col_off-col*PinSpacing), \
+            mm2mils100(PinCopper),
+            500,
+           mm2mils100(PinCopper) + 500,
+           mm2mils100(PinHole), \
+           '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']')
+
+print( '   Pin[',\
+        mm2mils100(BoardLength/2-MntOffset), \
+        0, \
+        mm2mils100(MntDiam * 1.75), \
+        1200, \
+        mm2mils100(MntDiam * 1.75) + 600, \
+        mm2mils100(MntDiam), \
+        '"GND"', '"41"', '0x0001', ']')
+
+print( '   Pin[',\
+        mm2mils100(-BoardLength/2+MntOffset), \
+        0, \
+        mm2mils100(MntDiam * 1.75), \
+        1200, \
+        mm2mils100(MntDiam * 1.75) + 600, \
+        mm2mils100(MntDiam), \
+        '"GND"', '"41"', '0x0001', ']')
+
+print( '   Pin[',\
+        mm2mils100(BoardLength/2-MntOffset), \
+        mm2mils100(BoardWidth-2*MntOffset), \
+        mm2mils100(MntDiam * 1.75), \
+        1200, \
+        mm2mils100(MntDiam * 1.75) + 600, \
+        mm2mils100(MntDiam), \
+        '"GND"', '"41"', '0x0001', ']')
+
+print( '   Pin[',\
+        mm2mils100(-BoardLength/2+MntOffset), \
+        mm2mils100(BoardWidth-2*MntOffset), \
+        mm2mils100(MntDiam * 1.75), \
+        1200, \
+        mm2mils100(MntDiam * 1.75) + 600, \
+        mm2mils100(MntDiam), \
+        '"GND"', '"41"', '0x0001', ']')
+
+print( '   ElementLine[',\
+        mm2mils100(-BoardLength/2+CornerRadius), \
+        mm2mils100(-MntOffset), \
+        mm2mils100(BoardLength/2-CornerRadius), \
+        mm2mils100(-MntOffset), \
+        500, \
+        ']')
+
+print( '   ElementLine[',\
+        mm2mils100(-BoardLength/2+CornerRadius), \
+        mm2mils100(BoardWidth-MntOffset), \
+        mm2mils100(BoardLength/2-CornerRadius), \
+        mm2mils100(BoardWidth-MntOffset), \
+        500, \
+        ']')
+
+print( '   ElementLine[',\
+        mm2mils100(-BoardLength/2), \
+        mm2mils100(-MntOffset+CornerRadius), \
+        mm2mils100(-BoardLength/2), \
+        mm2mils100(BoardWidth-MntOffset-CornerRadius), \
+        500, \
+        ']')
+
+print( '   ElementLine[',\
+        mm2mils100(BoardLength/2), \
+        mm2mils100(-MntOffset+CornerRadius), \
+        mm2mils100(BoardLength/2), \
+        mm2mils100(BoardWidth-MntOffset-CornerRadius), \
+        500, \
+        ']')
+
+print( '   ElementArc[',\
+        mm2mils100(-BoardLength/2+CornerRadius), \
+        mm2mils100(-MntOffset+CornerRadius), \
+        mm2mils100(CornerRadius), \
+        mm2mils100(CornerRadius), \
+       270, \
+       90, \
+        500, \
+        ']')
+
+print( '   ElementArc[',\
+        mm2mils100(BoardLength/2-CornerRadius), \
+        mm2mils100(-MntOffset+CornerRadius), \
+        mm2mils100(CornerRadius), \
+        mm2mils100(CornerRadius), \
+       180, \
+       90, \
+        500, \
+        ']')
+
+print( '   ElementArc[',\
+        mm2mils100(-BoardLength/2+CornerRadius), \
+        mm2mils100(BoardWidth-MntOffset-CornerRadius), \
+        mm2mils100(CornerRadius), \
+        mm2mils100(CornerRadius), \
+       0, \
+       90, \
+        500, \
+        ']')
+
+print( '   ElementArc[',\
+        mm2mils100(BoardLength/2-CornerRadius), \
+        mm2mils100(BoardWidth-MntOffset-CornerRadius), \
+        mm2mils100(CornerRadius), \
+        mm2mils100(CornerRadius), \
+       90, \
+       90, \
+        500, \
+        ']')
+
+print (")")