X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=packages%2FRN4678.py;fp=packages%2FRN4678.py;h=75ae9e92610abae4380add7772415900cfcce05b;hb=42e4b6528f69a5ca79b5e541b49f41ea83503dd8;hp=0000000000000000000000000000000000000000;hpb=382bc7b150b1c2961ade174aefdbd46c5c37a222;p=hw%2Faltusmetrum diff --git a/packages/RN4678.py b/packages/RN4678.py new file mode 100755 index 0000000..75ae9e9 --- /dev/null +++ b/packages/RN4678.py @@ -0,0 +1,171 @@ +#!/usr/bin/python +# Copyright 2016 by Bdale Garbee . GPLv3+ +# +# Program to emit PCB footprint for Microchip RN4678 Bluetooth LE module +# + +# dimensions in mm from BM70/71 Data Sheet (part of the same family) + +BodyWidth = 12.00 +BodyHeight = 22.00 + +GndEdgeLine = 18.00 + +PinWidth = 0.7 +PinHeight = 1.5 +PinSpacing = 1.1 +PinOffset = 0.5 + +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 "BM70BLES1FC2" "" "" 0 0 -10161 -12011 0 100 0x0]' +print "(" +print ' Pad[',\ + mm2mils100(BodyHeight - 21.2), \ + mm2mils100(BodyWidth + PinOffset - PinWidth/2), \ + mm2mils100(BodyHeight - 21.2), \ + mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin1" "1" 0x0100]' + +print ' Pad[',\ + mm2mils100(BodyHeight - 21.2), \ + mm2mils100(-PinOffset + PinWidth/2), \ + mm2mils100(BodyHeight - 21.2), \ + mm2mils100(-PinOffset + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin33" "33" 0x0100]' + +print ' Pad[',\ + mm2mils100(BodyHeight - 20.1), \ + mm2mils100(BodyWidth + PinOffset - PinWidth/2), \ + mm2mils100(BodyHeight - 20.1), \ + mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin2" "2" 0x0100]' + +print ' Pad[',\ + mm2mils100(BodyHeight - 20.1), \ + mm2mils100(-PinOffset + PinWidth/2), \ + mm2mils100(BodyHeight - 20.1), \ + mm2mils100(-PinOffset + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin32" "32" 0x0100]' + +print ' Pad[',\ + mm2mils100(BodyHeight - 13.9), \ + mm2mils100(BodyWidth + PinOffset - PinWidth/2), \ + mm2mils100(BodyHeight - 13.9), \ + mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin3" "3" 0x0100]' + +print ' Pad[',\ + mm2mils100(BodyHeight - 12.8), \ + mm2mils100(BodyWidth + PinOffset - PinWidth/2), \ + mm2mils100(BodyHeight - 12.8), \ + mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin4" "4" 0x0100]' + +for pin in range (5,15): + print ' Pad[',\ + mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \ + mm2mils100(BodyWidth + PinOffset - PinWidth/2), \ + mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \ + mm2mils100(BodyWidth + PinOffset - PinHeight + PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % pin, '"%i"' % pin, '0x0100]' + + print ' Pad[',\ + mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \ + mm2mils100(- PinOffset + PinWidth/2), \ + mm2mils100(BodyHeight - 11.7 + ((pin - 5) * PinSpacing)), \ + mm2mils100(- PinOffset + PinHeight - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % (36 - pin), '"%i"' % (36 - pin), '0x0100]' + +for pin in range (15,22): + print ' Pad[',\ + mm2mils100(BodyHeight + PinOffset - PinWidth/2), \ + mm2mils100(BodyWidth - 2.7 + (-(pin - 15) * PinSpacing)), \ + mm2mils100(BodyHeight - PinHeight + PinOffset + PinWidth/2), \ + mm2mils100(BodyWidth - 2.7 + (-(pin - 15) * PinSpacing)), \ + mm2mils100(PinWidth), \ + mm2mils100(PinSpacing - PinWidth), \ + mm2mils100(PinWidth)+600, \ + '"pin%i"' % pin, '"%i"' % pin, '0x0100]' + + +# body outline + +print ' ElementLine[',\ + 0, \ + 0, \ + 0, \ + mm2mils100(BodyWidth), \ + '1000 ]' + +print ' ElementLine[',\ + 0, \ + mm2mils100(BodyWidth), \ + mm2mils100(BodyHeight), \ + mm2mils100(BodyWidth), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(BodyHeight), \ + mm2mils100(BodyWidth), \ + mm2mils100(BodyHeight), \ + 0, \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(BodyHeight), \ + 0, \ + 0, \ + 0, \ + '1000 ]' + +# hash marks where gnd plane should end + +print ' ElementLine[',\ + mm2mils100(BodyHeight-GndEdgeLine), \ + mm2mils100(BodyWidth-1), \ + mm2mils100(BodyHeight-GndEdgeLine), \ + mm2mils100(BodyWidth-3), \ + '1000 ]' + +print ' ElementLine[',\ + mm2mils100(BodyHeight-GndEdgeLine), \ + mm2mils100(1), \ + mm2mils100(BodyHeight-GndEdgeLine), \ + mm2mils100(3), \ + '1000 ]' + +print ")"