This is a work in progress, but I wanted to get at least a starting point (for now) out there for people.
UPDATE 5/1/2007:
Added Links to programs.
Reomved a large section, replaced it with a file.
Added a new CFG file for reference.
Here's my To Do list for now:
Explain ViewMate, and how to use it to check your boards for accuracy
Pictures of GrebMerge in action
Deeper, better explanation of GerbMerge
One final thing before I start:
I am NOT liable for any damage this may cause. I am NOT liable for the accuracy of the contentents of the tutorial. I am NOT liable if the program creates defective gerbers. I am NOT liable if the program doesn't work, and you send off the files to get made, and you get a bunch of non-functional boards. If you live in a place where these warranties are insufficient under law, and thereby null and void, use of these instructions is PROHIBITED.
Sorry I had to do that, but I don't wan't or need to get in trouble for something I volunteered.
How to tile PCBs:
Go get these files first:
GerbMerge
Python (I'll be using 2.5)
eGenix mxBase
SimpleParse
ViewMate (Registration required)
Install all of these programs, using standard installation paths.
GerbMerge uses configuration files, they specify what files are to be combined together. I'll give a quick overview here, then come back later, after we've made our Gerber files that we want to merge.
Here's the standard configuration file:
- Code: Select all
# This configuration file demonstrates panelizing a single job.
##############################################################################
# In the [DEFAULT] section you can create global names to save typing the same
# directory name, for example, over and over.
##############################################################################
[DEFAULT]
# Change projdir to wherever your project files are, for example:
#
# projdir = /home/stuff/projects/test
#
# or relative pathname from where you are running GerbMerge
#
# projdir = testdata
#
# or if all files are in the current directory (as in this example):
#
# projdir = .
projdir = .
# For convenience, this is the base name of the merged output files.
MergeOut = merge1
#############################################################################
# The [Options] section defines settings that control how the input files are
# read and how the output files are generated.
#############################################################################
[Options]
################################################################
#
# Settings that are somewhat important
#
################################################################
CutLineLayers = *topsilkscreen,*bottomsilkscreen
CropMarkLayers = *topsilkscreen,*bottomsilkscreen
FabricationDrawingFile = %(mergeout)s.fab
ExcellonLeadingZeros = 0
OutlineLayerFile = %(mergeout)s.oln
ScoringFile = %(mergeout)s.sco
PanelWidth = 12.6
PanelHeight = 7.8
LeftMargin = 0.1
RightMargin = 0.1
TopMargin = 0.1
BottomMargin = 0.1
################################################################
#
# Settings that are probably not important
#
################################################################
XSpacing = 0.125
YSpacing = 0.125
CutLineWidth = 0.01
CropMarkWidth = 0.01
AllowMissingLayers = 0
[MergeOutputFiles]
Prefix = %(mergeout)s
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt
################################################################
#
# This is the project specifications
#
################################################################
[Proj1]
Prefix=%(projdir)s/proj1
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 5
Note that I have removed many comments from this file, because I will be explaining everything you need to know. If you want to see the original file, it's here: http://claymore.engineer.gvsu.edu/~steriana/Python/gerbmerge/layout1.cfg
Here's a list of sections:
*DEFAULT
*Options
*MergeOutputFiles
*Proj1
In DEFAULT you have two variables, projdir and MergeOut.
projdir specifies where the project is. I suggest that you don't type in something like
- Code: Select all
C:\blah blah\blah blah
- Code: Select all
..\..\..\blah blah\blah blah
MergeOut is the name of the files after you merge them. Name them anything you want, just no ,/| etc... just like standard 8.3 format.
Next is Options:
The only things you need to change are panelwidth and panelheight. These are in inches, and should be pretty self-explanitory.
Next up, MergeOutputFiles. You shouldn't need to change these parameters.
And onto the last part. Proj1. This is the place where you put your files. The name doesn't have to be “Proj1” it can be anything you want it to be, and it might be helpful if you name it something meaningful. We'll go over this a little later, but for now, remember that you'll have multiple groups like this one.
You'll want to save this file as something.cfg in your python directory.
Onto Eagle:
Exporting your files.
This is a little complicated, for the sole reason that Eagle's “gerb274x.cam” cam file is missing two things that GerbMerge needs. It's no problem though: I'll walk you through how to get all the needed files.
I'll be doing this with ladyada's wavebubble pieces, all of them individually.
1)Put all of the jobs you want in one folder (close to the root directory preferably, C: in this case) under seperate subfolders.

2)Open Eagle by double clicking the first file.

3)Open the CAM window

NEW
4) Download this file into your CAM folder:
http://witt.michael.googlepages.com/gerb274x-m.cam
** The old way didn't work correctly, this file resolves that **
5) Run it by pressing "Process Job"
6) Repeat for all other boards.
Now we need to set up the projects in the CFG file that we use with GerbMerge.
For each of the projects you created, you need a section like this:
- Code: Select all
[Proj1]
Prefix=%(projdir)s/proj1
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 5
Change the name to something meaningful and unique (In this example, it's “Proj1”).
Change the “Repeat” variable to the number of repetitions you want, so if you want 3 copies, change it to 3.
Also modify the Prefix variable, leaving the part that says:
- Code: Select all
%(projdir)s/
Now go back to the first section of the configuration file (called “DEFAULT”), and change the projdir variable to
- Code: Select all
..\
Save the file as something.cfg (you can change “something” to anything you want, just remember it) in C:\Python25. (Change Python25 to something else if you use a version of python different than 2.5)
The file I used, in keeping with all of the WaveBubble parts is here:
- Code: Select all
# This configuration file demonstrates panelizing a single job.
##############################################################################
# In the [DEFAULT] section you can create global names to save typing the same
# directory name, for example, over and over.
##############################################################################
[DEFAULT]
# Change projdir to wherever your project files are, for example:
#
# projdir = /home/stuff/projects/test
#
# or relative pathname from where you are running GerbMerge
#
# projdir = testdata
#
# or if all files are in the current directory (as in this example):
#
# projdir = .
projdir = ..\WaveBubble
# For convenience, this is the base name of the merged output files.
MergeOut = tiled_stuff
#############################################################################
# The [Options] section defines settings that control how the input files are
# read and how the output files are generated.
#############################################################################
[Options]
################################################################
#
# Settings that are somewhat important
#
################################################################
CutLineLayers = *topsilkscreen,*bottomsilkscreen
CropMarkLayers = *topsilkscreen,*bottomsilkscreen
FabricationDrawingFile = %(mergeout)s.fab
ExcellonLeadingZeros = 0
OutlineLayerFile = %(mergeout)s.oln
ScoringFile = %(mergeout)s.sco
PanelWidth = 10
PanelHeight = 6
LeftMargin = 0.1
RightMargin = 0.1
TopMargin = 0.1
BottomMargin = 0.1
################################################################
#
# Settings that are probably not important
#
################################################################
XSpacing = 0.125
YSpacing = 0.125
CutLineWidth = 0.01
CropMarkWidth = 0.01
AllowMissingLayers = 0
[MergeOutputFiles]
Prefix = %(mergeout)s
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
ToolList = toollist.%(prefix)s.drl
Placement = placement.%(prefix)s.txt
################################################################
#
# This is the project specifications
#
################################################################
[wb_ant]
Prefix=%(projdir)s\cigpack_ant\cigpack_ant
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 1
[wb_aaa]
Prefix=%(projdir)s\cigpack-batt_aaa\cigpack-batt_aaa
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 1
[wb_lipoly]
Prefix=%(projdir)s\cigpack-batt_lipoly\cigpack-batt_lm3622
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 1
[wb_main]
Prefix=%(projdir)s\cigpack-main\cigpack-main_rc1a
*TopLayer=%(prefix)s.cmp
*BottomLayer=%(prefix)s.sol
*TopSilkscreen=%(prefix)s.plc
*BottomSilkscreen=%(prefix)s.pls
*TopSoldermask=%(prefix)s.stc
*BottomSoldermask=%(prefix)s.sts
Drills=%(prefix)s.xln
BoardOutline=%(prefix)s.bor
Repeat = 1
Now open up a command prompt.
Type:
- Code: Select all
cd C:\Python25
(change this if you're using a version of python different than 2.5)
now type:
- Code: Select all
gerbmerge something.cfg
A disclaimer will come up, type y, then enter.
The program will start to work, placing all of your files on the board. It will not stop on its own, you have to type "Ctrl-c" to get the program to break. It will then save all of your files in the C:\Python25" directory.
I will explain more later, but right now, I have to go.

