From 06674229ae4d4dcd1b8480d576901dfb405f1b9c Mon Sep 17 00:00:00 2001
From: Neil Gershenfeld <gersh@cba.mit.edu>
Date: Sun, 19 Dec 2021 12:57:39 -0500
Subject: [PATCH] wip

---
 python/pcb.py | 183 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 180 insertions(+), 3 deletions(-)

diff --git a/python/pcb.py b/python/pcb.py
index 86b815d..d90a4e8 100755
--- a/python/pcb.py
+++ b/python/pcb.py
@@ -19,8 +19,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"
@@ -2087,7 +2087,6 @@ class header_UPDI(part):
       # pin 1: UPDI
       #
       self.shape = translate(pad_header,0,-.05,0)
-      self.shape = add(self.shape,cylinder(.05,-.05,0,0,.025))
       self.pad.append(point(0,-.05,0))
       self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'UPDI'))
       #
@@ -4780,6 +4779,184 @@ class XTAL_CSM_7(part):
 # diodes, transistors, regulators, sensors
 ############################################################
 
+class ALS31313(part):
+   #
+   # Allegro ALS31313 vector magnetometer
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      l = 0.003
+      d = 6.4/2/25.4
+      p = 0.65/25.4
+      w = 0.01/2
+      h = 1.7/2/25.4
+      pad = cube(-h,h,-w,w,0,0)
+      #
+      # pin 1
+      #
+      self.shape = translate(pad,-d,1.5*p,0)
+      self.shape = add(self.shape,cylinder(-d-h,1.5*p,0,0,w))
+      self.pad.append(point(-d,1.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'.VCC',line=l))
+      #
+      # pin 2
+      #
+      self.shape = add(self.shape,translate(pad,-d,0.5*p,0))
+      self.pad.append(point(-d,0.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A0',line=l))
+      #
+      # pin 3
+      #
+      self.shape = add(self.shape,translate(pad,-d,-0.5*p,0))
+      self.pad.append(point(-d,-0.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=l))
+      #
+      # pin 4
+      #
+      self.shape = add(self.shape,translate(pad,-d,-1.5*p,0))
+      self.pad.append(point(-d,-1.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'INT',line=l))
+      #
+      # pin 5
+      #
+      self.shape = add(self.shape,translate(pad,d,-1.5*p,0))
+      self.pad.append(point(d,-1.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'NC',line=l))
+      #
+      # pin 6
+      #
+      self.shape = add(self.shape,translate(pad,d,-0.5*p,0))
+      self.pad.append(point(d,-0.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A1',line=l))
+      #
+      # pin 7
+      #
+      self.shape = add(self.shape,translate(pad,d,0.5*p,0))
+      self.pad.append(point(d,0.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDA',line=l))
+      #
+      # pin 8
+      #
+      self.shape = add(self.shape,translate(pad,d,1.5*p,0))
+      self.pad.append(point(d,1.5*p,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCL',line=l))
+
+class MLX90395(part):
+   #
+   # Melexis MLX90395 vector magnetometer
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      d = 0.11
+      w = 0.015
+      h = .03
+      pad = cube(-h,h,-w,w,0,0)
+      #
+      # pin 1
+      #
+      self.shape = translate(pad,-d,.075,0)
+      self.shape = add(self.shape,cylinder(-d-h,.075,0,0,w))
+      self.pad.append(point(-d,.075,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'.SCL'))
+      #
+      # pin 2
+      #
+      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,'SDA'))
+      #
+      # pin 3
+      #
+      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,'MISO'))
+      #
+      # 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,'INT'))
+      #
+      # pin 5
+      #
+      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,'A0'))
+      #
+      # 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,'GND'))
+      #
+      # pin 7
+      #
+      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,'VDD'))
+      #
+      # pin 8
+      #
+      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,'MS'))
+
+class TLE493DA2B6(part):
+   #
+   # Infineon TlE493D-A2B6 three-axis magnetometer
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      d = 1.325/25.4
+      w = 0.5/25.4/2
+      h = 0.75/25.4/2
+      p = 0.95/25.4
+      pad = cube(-w,w,-h,h,0,0)
+      s = 0.003
+      #
+      # pin 1
+      #
+      self.shape = translate(pad,-p,-d,0)
+      self.shape = add(self.shape,cylinder(-p,-d-h,0,0,w))
+      self.pad.append(point(-p,-d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'.SCL',line=s,angle=90))
+      #
+      # pin 2
+      #
+      self.shape = add(self.shape,translate(pad,0,-d,0))
+      self.pad.append(point(0,-d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s,angle=90))
+      #
+      # pin 3
+      #
+      self.shape = add(self.shape,translate(pad,p,-d,0))
+      self.pad.append(point(p,-d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s,angle=90))
+      #
+      # pin 4
+      #
+      self.shape = add(self.shape,translate(pad,p,d,0))
+      self.pad.append(point(p,d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VDD',line=s,angle=90))
+      #
+      # pin 5
+      #
+      self.shape = add(self.shape,translate(pad,0,d,0))
+      self.pad.append(point(0,d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s,angle=90))
+      #
+      # pin 6
+      #
+      self.shape = add(self.shape,translate(pad,-p,d,0))
+      self.pad.append(point(-p,d,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDA',line=s,angle=90))
+
 class DRV8428_HTSSOP(part):
    #
    # TI DRV8428PWPR stepper driver
-- 
GitLab