Electronics Production

The purpose of this weeks assignment was to learn to rapidly prototype circuit boards. This was a two step-process. First we would mill the circuit boards using a modela and then stuff the circuit boards ourselves. Despite having a degree in Computer Engineering (that I have never used...) I never got to produce my own PCB or solder surface mount components, so I was excited to give it a try.

The board that we were given to build was an fabISP, or in-system programmer. This would allow us to later program other AVR micro-controllers that we will be designing as the course moves forward. The board schematics and variations can be found on the MAS.836 electronics production page.

First Board

The first board I planned on building was the hello.44.isp.cad board for which the schematic, traces, and outline are all available on the class website.

The first step was to mill the traces on the board using a 1/64th inch end mill. To make the traces we are removing about .12mm from a .03mm thick copper layer on top of an epoxy base.

Next we cut the outline using a 1/32nd inch endmill. You can see an attempt to mill a second set of traces that ran out of room in the middle.

Before starting to solder it is really important to wash the board to remove dust and any spurious connections. The soldering went surprisingly smoothly, starting from the inside to outside and from short to tall components.

The board fully stuffed. Most of the solder joints were actually pretty shiny - which is what you want. The USB connector was a pain to attach. It is tiny!

When I finished stuffing the circuit, I plugged it into USB power and the programmer in the Arch Shop. I got a green light which meant that the circuit seemed to be working!

Using avrdude on the shop computer I was able to program my circuit successfully with the following commands

make clean make hex sudo make fuse sudo make program

Plugging the device into my computer I am able to see that the computer recognizes the fabISP! Success!

Second Board

I wanted to build a second board so that I could test the functionality of my first fabISP and I was also really interested in making the breakaway circuit board that Valentin had make in a previous year.

Non-Standard Parts

When looking for the parts for the second board I realized that Valentin's schematic called for two 18pF capacitors that were not located in the standard fabLab inventory. This seemed strange, given that the circuit was nominally a re-laid out version of what I had already built. To double check this I decided to draw out the section of the circuit that included these parts for both circuits

Looking at the parallel diagrams, it is apparent that the portion of the circuit containing the 20MHz oscillator simply has 3 different capacitors between the two designs. Given that my first fabISP worked, and this design should be the same, it stands to reason that I should be able to replace the two 18pF capacitors and .1uF capacitor with the 10pF and 1uF capacitors I used in my first circuit. The math must work out that these components result in the same outcome, or perhaps his design is calling for a different oscillator than we are now using.


This board was somewhat difficult to mill properly. Given that we are using the milled traces as the USB connection it is important to ensure enough of the surplus copper is milled away that you won't have spurious connections. To do this I used a number of offsets value of 6 instead of 4. The second issue was that the cutout contains some curves, and the board had a habit of moving before it was completely milled.

As you can see this ruined one board. On my successful board I stopped the mill when the board moved and finished the final through-cutting with an x-acto knife. Stronger double sided tape might come in handy here. Trying to mill this as the second board in a row without resetting the tape is a bad idea as well.

You can see with a side by side comparison of the mask with the milled board that there were 4 places that were still connected that needed to be separated. I'm not sure if this is an artifact of the design having traces too close together, that the offsets value of 6 caused some strange behavior (seems unlikely), or some other unknown factor.

I cut the connections that were not supposed to exist with an x-acto knife. I verified that the traces were no longer connected with a multimeter. Some of the cuts were not the cleanest - a sharper blade would have helped.

After stuffing the circuit I discovered that I now had a new problem. It seems that the board needs to be powered to be programmed, and I had to provide power to the board without breaking away the part blocking the usb connector.

That's what the DC power supply on the bench is for. I set the output to 5V and limited the current to .3A in case I had a short on the board.

I clipped the alligator clips to the power and ground usb traces, and nothing happened. We passed the smoke test!

I wanted to program the board from my personal computer using the fabISP I had built, so I followed the instructions here to set up the proper software and toolchain for AVR Programming.

After setting up the toolchain and downloading the firmware, I had to edit the makefile to use the usbtiny configuration which should work with the fabISP.

# Proper Makefile Config AVRDUDE = avrdude -c usbtiny -p $(DEVICE) # fabISP #AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # commercial pgmr

I made a connector cable so I could attach my first fabISP to the second one. When connecting them together I was careful to match the orientation of the pins such that the pins were attached in the same configuration.

I programmed the new fabISP with the same commands as before, and all seemed to go well. To test the new fabISP I had to break apart the breakaway components. Hopefully it really did work!

For now I used a paper shim to thicken the connector. I'll add some solder or a piece of plastic later. Checking for connected devices the fabISP was in the list. This verifies that both my first fabISP works as a programmer, and my second fabISP was also properly built and programmed!