component
Texas Instruments LM339BIDR quad comparator
Public Made by Adomby adom
Quad comparator, SOIC-14. Drawing-based nominal assets; physical qualification pending.
main
"""Exact-part symbol from the existing design; TI D0014A example footprint.
Project extraction is not a claim of native validation or manufacturer CAD.
"""
import sys,copy,json
from pathlib import Path
p=Path(__file__).parent;root=p.parents[1];sys.path.insert(0,str(root/'tools'));import sexp
mpn='LM339BIDR';slug=mpn.lower()
sch=sexp.parse((root/'kicad/protection.kicad_sch').read_text());s=copy.deepcopy(next(x for x in sexp.find(sexp.first(sch,'lib_symbols'),'symbol') if x[1]=='Load:'+mpn));s[1]=mpn
for x in sexp.find(s,'symbol'):x[1]=x[1].replace('Load:','')
for prop in sexp.find(s,'property'):
if prop[1]=='Footprint':prop[2]=mpn+':LM339BIDR_TI_D0014A'
if prop[1]=='Datasheet':prop[2]='https://www.ti.com/lit/ds/symlink/lm339b.pdf'
for key,value in [('Manufacturer','Texas Instruments'),('Mouser','595-LM339BIDR'),('Adom Wiki','https://wiki.adom.inc/adom/'+slug)]:
for old in sexp.find(s,'property'):
if old[1]==key:s.remove(old)
s.append(sexp.parse(f'(property "{key}" "{value}" (at 0 0 0) (hide yes) (effects (font (size 1.27 1.27))))'))
names={1:'OUT1',2:'OUT2',3:'VCC',4:'IN2-',5:'IN2+',6:'IN1-',7:'IN1+',8:'IN3-',9:'IN3+',10:'IN4-',11:'IN4+',12:'GND',13:'OUT4',14:'OUT3'}
for unit in sexp.find(s,'symbol'):
for pin in sexp.find(unit,'pin'):
sexp.first(pin,'name')[1]=names[int(sexp.first(pin,'number')[1])]
(p/(slug+'.kicad_sym')).write_text('(kicad_symbol_lib (version 20231120) (generator "adom-component-audit")\n'+sexp.dump(s)+'\n)\n')
fp={'footprintName':'LM339BIDR_TI_D0014A','description':'TI D0014A example: 1.55 x 0.60 mm pads, 5.4 mm row spacing, 1.27 mm pitch. Process qualification pending.','pads':[{'number':str(n),'x':-2.7 if n<=7 else 2.7,'y':(n-4)*1.27 if n<=7 else (11-n)*1.27,'dx':1.55,'dy':.6,'shape':'roundrect','type':'smd'} for n in range(1,15)],'body':{'x1':-2,'y1':-4.375,'x2':2,'y2':4.375},'courtyard':{'x1':-3.75,'y1':-4.65,'x2':3.75,'y2':4.65}}
(p/'footprint-input.json').write_text(json.dumps(fp,indent=2)+'\n')