Logo Search packages:      
Sourcecode: pcb version File versions

amp.inc

# -*- m4 -*-
#
# $Id: amp.inc,v 1.2 2004/04/28 21:53:32 danmc Exp $
#                            COPYRIGHT
#
#   PCB, interactive printed circuit board design
#   Copyright (C) 2003 Dan McMahill
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
# 
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
# 
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# 
# 
#
#  Amp (www.amp.com) Specific Footprints

# -------------------------------------------------------------------
# the definition of a MICTOR connector
# $1: canonical name
# $2: name on PCB
# $3: value
# $4: number of pins
# $5: pad width  (1/1000 mil)
# $6: pad length (1/1000 mil)
# $7: pad pitch (1/1000 mil)
# $8: pad seperation center to center for pads on opposite sides of
#     the package (1/1000 mil)
# $9: define to make the pins get numbered starting with the highest pin
#     instead of pin 1.  Needed for certain brain damaged packages like
#     the Mini-Circuits KK81
# pin 1 will be upper left, pin N/2 will be lower left,
# pin N will be upper right as defined here
define(`COMMON_AMP_MICTOR_MIL',
        `
      # number of pads
      define(`NPADS', `$4')

      # number of segments of 38 pins each
      define(`NSEG', eval(NPADS/38))

      # pad width in 1/1000 mil
        define(`PADWIDTH', `$5')
      # pad length in 1/1000 mil
        define(`PADLENGTH',`$6')
      # pad pitch 1/1000 mil
      define(`PITCH',`$7')
      # seperation between pads on opposite sides 1/1000 mil
      define(`PADSEP',`$8')

      # X coordinates for the right hand column of pads (mils)
        define(`X1', `eval( (PADSEP/2 + PADLENGTH - PADWIDTH/2)/1000)')
        define(`X2', `eval( (PADSEP/2 + PADWIDTH/2)/1000)')

      # silk screen width (mils)
      define(`SILKW', `10')
      define(`SILKSEP', `5')


      # figure out if we have an even or odd number of pins per side
      define(`TMP1', eval(NPADS/4))
      define(`TMP2', eval((4*TMP1 - NPADS) == 0))
      ifelse(TMP2, 1, `define(`EVEN',"yes")', `define(`EVEN',"no")')

      # silk bounding box is -XMAX,-YMAX, XMAX,YMAX (mils)
      define(`XMAX', `200')
      define(`YMAX', `eval(250 + NSEG*250 + 125)')

      define(`REV', `$9')

      ifelse(REV,"reverse",
            `define(`CURPIN', NPADS)'
      ,
            `define(`CURPIN', `1')'
      )     
Element(0x00 "$1" "$2" "$3" -20 -60 0 100 0x00)
(
      define(`SEG', `1')
      define(`YOFS', eval((1-NSEG)*25000/2))
        forloop(`i', 1, eval(NPADS / 2),
            `
            ifelse(eval(i > SEG*19), 1, 
                  `define(`SEG', incr(SEG))
                  define(`YOFS', eval((1-NSEG)*25000/2 + (SEG-1)*25000))',)
                ifelse(EVEN,"yes",
             `Pad(   -X1 eval( (-(NPADS/4)*PITCH - PITCH/2 + i*PITCH + YOFS)/1000) 
                   -X2 eval( (-(NPADS/4)*PITCH - PITCH/2 + i*PITCH + YOFS)/1000) 
                  eval(PADWIDTH/1000) "CURPIN" "CURPIN" 0x0)',
             `Pad(   -X1 eval( (-(NPADS/4)*PITCH - PITCH   + i*PITCH + YOFS)/1000) 
                   -X2 eval( (-(NPADS/4)*PITCH - PITCH   + i*PITCH + YOFS)/1000) 
                  eval(PADWIDTH/1000) "CURPIN" "CURPIN" 0x0)')

            ifelse(REV,"reverse", 
                  `define(`CURPIN', decr(CURPIN))
                  define(`CURPIN', decr(CURPIN))',
                  `define(`CURPIN', incr(CURPIN))
                  define(`CURPIN', incr(CURPIN))'
                  )
        ')
      ifelse(REV,"reverse",
            `define(`CURPIN', `2')'
      ,
            `define(`CURPIN', `NPADS')'
      )     

      define(`SEG', `1')
      define(`YOFS', eval((NSEG-1)*25000/2))
        forloop(`i', eval((NPADS / 2) + 1), NPADS,
            `
            ifelse(eval(i - NPADS/2 > SEG*19), 1, 
                  `define(`SEG', incr(SEG)) 
                  define(`YOFS', eval((NSEG-1)*25000/2 - (SEG-1)*25000))',)
                ifelse(EVEN,"yes",
             `Pad(   X1 eval( ((NPADS/4)*PITCH + PITCH/2 - (i-NPADS/2)*PITCH + YOFS)/1000) 
                   X2 eval( ((NPADS/4)*PITCH + PITCH/2 - (i-NPADS/2)*PITCH + YOFS)/1000) 
                  eval(PADWIDTH/1000) "CURPIN" "CURPIN" 0x0)',
             `Pad(   X1 eval( ((NPADS/4)*PITCH + PITCH   - (i-NPADS/2)*PITCH + YOFS)/1000) 
                   X2 eval( ((NPADS/4)*PITCH + PITCH   - (i-NPADS/2)*PITCH + YOFS)/1000) 
                  eval(PADWIDTH/1000) "CURPIN" "CURPIN" 0x0)')
            ifelse(REV,"reverse", 
                  `define(`CURPIN', incr(CURPIN))
                  define(`CURPIN', incr(CURPIN))',
                  `define(`CURPIN', decr(CURPIN))
                  define(`CURPIN', decr(CURPIN))'
                  )
        ')

      define(`GNDpad', `60')
      define(`GNDdrl', `32')
# now add the center row of grounding pins
      define(`CURPIN', incr(NPADS))
      define(`YOFS', `eval(250-NSEG*250)')
      forloop(`j', 1, NSEG,
      `forloop(`i', -2, 2,
            `Pin(0 eval(i*100 + YOFS) GNDpad GNDdrl "GND" "CURPIN" 0x01)
            define(`CURPIN', incr(CURPIN))'
      )
      define(`YOFS', eval(YOFS + 500))'
      )
# the latch pins
      Pin(0 eval(-YOFS - 55) 80 53 "LATCH" "CURPIN" 0x01)
      define(`CURPIN', incr(CURPIN))
      Pin(0  eval(YOFS + 55) 80 53 "LATCH" "CURPIN" 0x01)
      define(`CURPIN', incr(CURPIN))
# and the orientation pin
      Pin(0 eval(-YOFS+50) 84 84 "ORIENT" "CURPIN" 0x09)

# and finally the silk screen
      ElementLine(-XMAX -YMAX -XMAX  YMAX SILKW)
      ElementLine(-XMAX  YMAX  XMAX  YMAX SILKW)
      ElementLine( XMAX  YMAX  XMAX -YMAX SILKW)
      ElementLine(-XMAX -YMAX   -25 -YMAX SILKW)
      ElementLine( XMAX -YMAX    25 -YMAX SILKW)

      # punt on the arc on small parts as it can cover the pads
      ifelse(eval((PADSEP-PADLENGTH)/1000 > 50), 1, `ElementArc(0 -YMAX 25 25 0 180 SILKW)', )
      
      # Mark at the common centroid
        Mark(0 0)
)')

# dimensions are given in 1/100 mm.
# $5-$8 are pad width, length, pitch, and sep
define(`COMMON_AMP_MICTOR_MM',  `COMMON_AMP_MICTOR_MIL(`$1',`$2',`$3',`$4',
      eval($5*100000/254),eval($6*100000/254),eval($7*100000/254),eval($8*100000/254), `$9')')


define(`COMMON_AMP_MICTOR_767054',  `COMMON_AMP_MICTOR_MIL(`$1',`$2',`$3',`$4',17000,50000,25000,278000)')

# EXTRACT_BEGIN

#
##  Amp Mictor Connectors
#
define(`PKG_AMP_MICTOR_767054_1',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',38)')
define(`PKG_AMP_MICTOR_767054_2',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',76)')
define(`PKG_AMP_MICTOR_767054_3',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',114)')
define(`PKG_AMP_MICTOR_767054_4',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',152)')
define(`PKG_AMP_MICTOR_767054_5',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',190)')
define(`PKG_AMP_MICTOR_767054_6',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',228)')
define(`PKG_AMP_MICTOR_767054_7',  `COMMON_AMP_MICTOR_767054(`$1',`$2',`$3',266)')

# EXTRACT_END


Generated by  Doxygen 1.6.0   Back to index