diff --git a/python/pcb.py b/python/pcb.py
index c1b2ec4dfbefd97dfec4e738c4c77c6dfebdcfaf..6444c2f0c041a487a780a910708e19e0228ef19c 100755
--- a/python/pcb.py
+++ b/python/pcb.py
@@ -20,8 +20,8 @@
 # uncomment for desired output:
 #
 
-#output = "top, labels, and exterior"
-output = "top, labels, holes, and exterior"
+output = "top, labels, and exterior"
+#output = "top, labels, holes, and exterior"
 #output = "top, bottom, labels, and exterior"
 #output = "top, bottom, labels, holes, and exterior"
 #output = "top traces"
@@ -5027,6 +5027,140 @@ class ADXL343(part):
 # ICs
 #
 
+class ATtiny3216(part):
+   #
+   # SOIC-20
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      d = 9.82/2/25.4
+      w = .63/2/25.4
+      h = 1.9/2/25.4
+      pad = cube(-h,h,-w,w,0,0)
+      #
+      # pin 1
+      #
+      self.shape = translate(pad,-d,.225,0)
+      self.shape = add(self.shape,cylinder(-d-h,.225,0,0,w))
+      self.pad.append(point(-d,.225,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1VCC'))
+      #
+      # pin 2
+      #
+      self.shape = add(self.shape,translate(pad,-d,.175,0))
+      self.pad.append(point(-d,.175,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA4'))
+      #
+      # pin 3
+      #
+      self.shape = add(self.shape,translate(pad,-d,.125,0))
+      self.pad.append(point(-d,.125,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA5'))
+      #
+      # pin 4
+      #
+      self.shape = add(self.shape,translate(pad,-d,.075,0))
+      self.pad.append(point(-d,.075,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA6'))
+      #
+      # pin 5
+      #
+      self.shape = add(self.shape,translate(pad,-d,.025,0))
+      self.pad.append(point(-d,.025,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA7'))
+      #
+      # pin 6
+      #
+      self.shape = add(self.shape,translate(pad,-d,-.025,0))
+      self.pad.append(point(-d,-.025,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB5'))
+      #
+      # pin 7
+      #
+      self.shape = add(self.shape,translate(pad,-d,-.075,0))
+      self.pad.append(point(-d,-.075,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4'))
+      #
+      # pin 8
+      #
+      self.shape = add(self.shape,translate(pad,-d,-.125,0))
+      self.pad.append(point(-d,-.125,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RB3'))
+      #
+      # pin 9
+      #
+      self.shape = add(self.shape,translate(pad,-d,-.175,0))
+      self.pad.append(point(-d,-.175,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'TB2'))
+      #
+      # pin 10
+      #
+      self.shape = add(self.shape,translate(pad,-d,-.225,0))
+      self.pad.append(point(-d,-.225,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1'))
+      #
+      # pin 11
+      #
+      self.shape = add(self.shape,translate(pad,d,-.225,0))
+      self.pad.append(point(d,-.225,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0'))
+      #
+      # pin 12
+      #
+      self.shape = add(self.shape,translate(pad,d,-.175,0))
+      self.pad.append(point(d,-.175,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC0'))
+      #
+      # pin 13
+      #
+      self.shape = add(self.shape,translate(pad,d,-.125,0))
+      self.pad.append(point(d,-.125,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC1'))
+      #
+      # pin 14
+      #
+      self.shape = add(self.shape,translate(pad,d,-.075,0))
+      self.pad.append(point(d,-.075,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC2'))
+      #
+      # pin 15
+      #
+      self.shape = add(self.shape,translate(pad,d,-.025,0))
+      self.pad.append(point(d,-.025,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC3'))
+      #
+      # pin 16
+      #
+      self.shape = add(self.shape,translate(pad,d,.025,0))
+      self.pad.append(point(d,.025,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'UPDI'))
+      #
+      # pin 17
+      #
+      self.shape = add(self.shape,translate(pad,d,.075,0))
+      self.pad.append(point(d,.075,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA1'))
+      #
+      # pin 18
+      #
+      self.shape = add(self.shape,translate(pad,d,.125,0))
+      self.pad.append(point(d,.125,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA2'))
+      #
+      # pin 19
+      #
+      self.shape = add(self.shape,translate(pad,d,.175,0))
+      self.pad.append(point(d,.175,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA3'))
+      #
+      # pin 20
+      #
+      self.shape = add(self.shape,translate(pad,d,.225,0))
+      self.pad.append(point(d,.225,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))
+
 class SAMD21E(part):
    #
    # TQFP
@@ -5238,7 +5372,7 @@ class SAMD21E(part):
 
 class SAMD11D(part):
    #
-   # SOIC
+   # SOIC-20
    #
    def __init__(self,value=''):
       self.value = value