
.: week 3.pcb design, fabrication, and assembly :.
Electronics is clearly the winner of the day.
--John Ford
This week, we milled and stuffed a FabISP - an in-system programmer for AVR microcontrollers. This was my first foray into surface mount soldering - I've only done through-hole boards in the past. This is what my final FabISP board looks like:

Milling
First I milled the board. After a failed attempt on the MODELA (the cuts were uneven), I used David Carr's fantastic Mantis (and it worked and only took half the time). My milled board:

Board Stuffing
Next it was time for stuffing the board, so I set up my soldering station...

It took me a few tries to get acclimated to surface mounted parts, but I finally found my magic ingredients. Plenty of flux, pre-soldering a single pad to get the part in place, and patience. Some of my first solders:

I got all the parts on the board (the USB connector was the most difficult - tiny pins!) and crossed my fingers for encoding. Sure enough, it worked on the first try!

And then it stopped.
Debugging
About 20 seconds after encoding my board, OS X spit out an error message stating "Your USB device is drawing too much power". I unplugged the board, plugged it back in, and heard a faint 1 second "hiss". Bummer. After some hunting with my trusty multimeter, I found that USB pin 1 was connected to the USB casing. I removed the USB connector, and found a glob of stray solder underneath. It looked toasty.

During removal of the USB connector, one of the copper pads for the connector came off, and one of my traces broke. I used some very thin wire to reconnect the trace, and just settled for 3 pads on the connector. USB connector with a tiny wire soldered in:

The board still didn't work, so I started more maintenance. I found a suspect resistor (R10), so I uprooted it to find a small short with the center trace. Here's a picture of the short:

Finally, I ended up removing almost all the components in between Vcc and Gnd, as there was a connection between pins 4 and 6 of the ISP header. I don't know which component was the problem, but my FabISP finally works and is recognized in OS X.
