From bbacd278bbc05430781514eb9479935ae0ad7819 Mon Sep 17 00:00:00 2001
From: Neil Gershenfeld <gersh@cba.mit.edu>
Date: Tue, 20 Aug 2024 21:13:35 -0400
Subject: [PATCH] wip

---
 python/pcb.py | 115 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 114 insertions(+), 1 deletion(-)

diff --git a/python/pcb.py b/python/pcb.py
index 99e881c..946d703 100755
--- a/python/pcb.py
+++ b/python/pcb.py
@@ -191,7 +191,7 @@ def line(x0,y0,x1,y1,z,width):
    return part
 
 def right_triangle(x0,y0,l):
-   part = "((X > x0) & (X < x0 + l - (Y-y0)) & (Y > y0))"
+   part = "((X >= x0) & (X <= x0 + l - (Y-y0)) & (Y >= y0))"
    part = part.replace('x0',str(x0))
    part = part.replace('y0',str(y0))
    part = part.replace('l',str(l))
@@ -1165,6 +1165,22 @@ class R_0402(part):
       self.shape = add(self.shape,translate(pad_0402,.0265,0,0))
       self.pad.append(point(.0265,0,0))
 
+pad_0602 = cube(-0.9/2/25.4,0.9/2/25.4,-0.6/2/25.4,0.6/2/25.4,0,0)
+
+class R_0603(part):
+   #
+   # 0603 resistor
+   #
+   def __init__(self,value=''):
+      dy = (0.9/2+0.6/2)/25.4
+      self.value = value
+      self.labels = []
+      self.pad = [point(0,0,0)]
+      self.shape = translate(pad_0402,0,-dy,0)
+      self.pad.append(point(0,-dy,0))
+      self.shape = add(self.shape,translate(pad_0402,0,dy,0))
+      self.pad.append(point(0,dy,0))
+
 pad_1206 = cube(-.032,.032,-.034,.034,0,0)
 
 class R_1206(part):
@@ -5931,6 +5947,40 @@ class D_SOD_123(part):
       self.pad.append(point(.07,0,0))
       self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))
 
+pad_SOT323 = cube(-.47/2/25.4,.47/2/25.4,-.6/2/25.4,.6/2/25.4,0,0)
+
+class NMOSFET_SOT323(part):
+   #
+   # Diodes Incorporated DMG1012UW-7
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.x = 0
+      self.y = 0
+      self.z = 0
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      dx = 0.65/25.4
+      dy = (1.3/2+0.6/2)/25.4
+      #
+      # pin 1: gate
+      #
+      self.shape = translate(pad_SOT323,-dx,-dy,0)
+      self.pad.append(point(-dx,-dy,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G',line=0.004))
+      #
+      # pin 2: source
+      #
+      self.shape = add(self.shape,translate(pad_SOT323,dx,-dy,0))
+      self.pad.append(point(dx,-dy,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S',line=0.004))
+      #
+      # pin 3: drain
+      #
+      self.shape = add(self.shape,translate(pad_SOT323,0,dy,0))
+      self.pad.append(point(0,dy,0))
+      self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D',line=0.004))
+
 pad_SOT23 = cube(-.02,.02,-.012,.012,0,0)
 
 class NMOSFET_SOT23(part):
@@ -6639,6 +6689,69 @@ class VL53L1X(part):
 # ICs
 ############################################################
 
+class SN74LVC3G14DCTR(part):
+   #
+   # triple Schmidt inverter SSOP
+   #
+   def __init__(self,value=''):
+      self.value = value
+      self.pad = [point(0,0,0)]
+      self.labels = []
+      w = 1.1/25.4/2
+      h = 0.26/25.4/2
+      d = 3.8/25.4/2
+      p = 0.65/25.4
+      pad = cube(-w,w,-h,h,0,0)
+      s = 0.003
+      #
+      # pin 1
+      #
+      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,'.1A',line=s,angle=0))
+      #
+      # 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,'3Y',line=s,angle=0))
+      #
+      # 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,'2A',line=s,angle=0))
+      #
+      # 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,'G',line=s,angle=0))
+      #
+      # 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,'2Y',line=s,angle=0))
+      #
+      # 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,'3A',line=s,angle=0))
+      #
+      # 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,'1Y',line=s,angle=0))
+      #
+      # 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,'V',line=s,angle=0))
+
 class TLV365DBVR(part):
    #
    # op-amp SOT-23-5
-- 
GitLab