From b954baee0c658b2826ef066ba12070c1cb85d279 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 25 Jan 2024 10:18:11 -0700 Subject: [PATCH] add qfn-44 for ATmega32U4 --- packages/Makefile | 1 + packages/qfn-44.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100755 packages/qfn-44.py diff --git a/packages/Makefile b/packages/Makefile index 5c9fad2..96a6bcb 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -57,6 +57,7 @@ FOOTPRINTS= \ 8ufson2x2.fp \ ti-qfn20.fp \ qfn-16.fp \ + qfn-44.fp \ ap.10g.fp \ BTM182.fp \ NHD-C0216.fp \ diff --git a/packages/qfn-44.py b/packages/qfn-44.py new file mode 100755 index 0000000..3c12b6b --- /dev/null +++ b/packages/qfn-44.py @@ -0,0 +1,84 @@ +#!/usr/bin/python3 +# Copyright 2024 by Bdale Garbee . GPLv3 +# +# emit PCB footprint for QFN-44 package used by ATmega32U4 +# - leaving out the under-chip pad as it's not necessary +# + +# dimensions in mm from +# atmel/samd21/ATmega32U4.pdf + +PinWidth = 0.3 # X1 +PinHeight = 0.85 # Y1 +RowSpacing = 6.9 # C1 / C2 +PinSpacing = 0.5 # E +Overall = 7.0 +GndSquare = 5.20 # X2 / Y2 +CoreSquare = 2.1 +PinClearance = 2 * (PinSpacing - PinWidth) + +# ATMEL specifies 120-150 microns between pad and solder mask +# AT88RF1354 Appplication note .. should be good here too? +# +PinResist = PinWidth + (2 * 0.07) + +# 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 "qfn-44" "" "" 0 0 0 0 0 100 0x0]') +print("(") + +# pins +for pin in range (1,12): + print(' Pad[',\ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(-RowSpacing/2 - PinHeight/2 + PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(-RowSpacing/2 + PinHeight/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinClearance), \ + mm2mils100(PinResist), \ + '"pin%i"' % (34-pin), '"%i"' % (34-pin), '0x0000]') + + print(' Pad[',\ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(RowSpacing/2 - PinHeight/2 + PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinHeight/2 - PinWidth/2), \ + mm2mils100(PinWidth), \ + mm2mils100(PinClearance), \ + mm2mils100(PinResist), \ + '"pin%i"' % pin, '"%i"' % pin, '0x0000]') + + print(' Pad[',\ + mm2mils100(-RowSpacing/2 - PinHeight/2 + PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(-RowSpacing/2 + PinHeight/2 - PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinClearance), \ + mm2mils100(PinResist), \ + '"pin%i"' % (33+pin), '"%i"' % (33+pin), '0x0000]') + + print(' Pad[',\ + mm2mils100(RowSpacing/2 - PinHeight/2 + PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(RowSpacing/2 + PinHeight/2 - PinWidth/2), \ + mm2mils100((-6 + pin) * PinSpacing), \ + mm2mils100(PinWidth), \ + mm2mils100(PinClearance), \ + mm2mils100(PinResist), \ + '"pin%i"' % (23-pin), '"%i"' % (23-pin), '0x0000]') + +print(' ElementArc[',\ + mm2mils100(-Overall/2 - PinWidth), \ + mm2mils100(Overall/2 + PinWidth), \ + '500 500 0 360 1000 ]') +print(")") -- 2.30.2