Week 3 - Electronics production

This week focused on circuit board fabrication. In-System Programmers (ISP) are devices used to program microprocessor chips. Typically you would use a commercial ISP such as the Amtel AVRISP mkll. However This week's assignment was to fabricate an ISP of our own. Ali (a previous How to Make student) has written a very informative tutorial on how our FAB ISP actually works.

The process we used to fabricate a circuit board was as follows:

  1. Position some copper clad FR1 onto the bed of a Roland MX-20 mill
  2. Generate tool paths for the machine using black and white .png images and the mods software. Machining the traces with a 1/64" end mill and the cut out the board using a 1/32" end mill.
  3. Stuff the board with all the necessary components
  4. Program the board using a commercial programmer or a completed FAB ISP
  5. Remove the solder jumpers and verify that the board has been successfully programmed by pluging into a computer and checking that it appears as a USB device

Milling the circuit board

I've had some experience fabricating circuit boards over the last few months however I still ran into few issues which I've described below.

Mistake 1 - Uneven board placement

In these pictures you can see that the end mill hasn't cut at an even depth across the design. I recognised this just after I started the job when I saw that chips were not being formed consistently across the boards surface. This unevenness happened during two of my attempts, indicating that the sacrifical base layer was not even. To overcome this I moved my job into the center of the base plate.

Mistake 2 - Not having enough space to mill your design

Pretty clear what the mistake was here. For future cuts I made sure to check dimensions of your design in the 'read png' module of the mods software. I then did a rough measurement in x and y from the origin of the toolpath to ensure there was enough room.

Stuffing and programming the circuit board

The traces of some of the components were incredibly thin and therefore required a bit of practice. During my first attempt at soldering the ATTiny I applied too much solder and didn't reflow it, resulting in bulky, non-shiny globs. In the process of trying to fix these connections, I applied too much heat to the chip, causing the shell to melt slightly.

The rest of the stuffing went fairly smoothly. I had a problems programming the chip whereby I could successfully program it using the AVR ISP, however, after removing the jumpers, the board was not recognised as a USB device. After trouble shooting for a while I stuffed a second board was able to successfully program and detcet it.

Eric kindly debugged the first one and found that one of the Zener diodes had blown. So now I have two programmers, thanks Eric.

Notes from recitation

Removing the zero ohm jumpers

After programming our ISP's (for Neil's design), we had to remove two jumpers to then use it as a programmer. One zero ohm resistor pulls down the reset line to allow the chip to be programmed. The other one routes the power to a different location based on whether it's being programmed or programming.

Timing source for the board

The smaller Atmel processors like the ATTiny that we're using implement USB as a software protocol, this means you need to include an external time source. Initially, FabISP use an external timing source such as a crystal or resonator. The question is then how far off the USB timing can the external source be. The original 12MHz crystal used in the FabISP worked well, divided neatly down to 1.5MHz. When the design moved to a 20MHz crystal it didn't divide as accuratly down to 1.5MHz (frequency of low speed USB) but it worked just about OK. Using the resonator leads to very inaccurate timing. Extra note - the FabTinyStar uses the incoming bits to figure out how to tell time so adaptably tells time based on what it's hearing. Seems to be the best solution of all. In summary, favour the use of a crystal over a resonator, but also maybe try and implement FabTinyStar method of timing.

ISP header - VCC pin explained

The VCC pin isn't a power source for the board, the VCC pin provides a reference to the programmer to tell it which voltage it is running at. Therefore, our boards require an external power source to be programmed which we provide via a USB. This is why you need to have the board you're trying to program plugged into the USB port of your computer at the same time as having the programmer plugged in to do the programming.

Types of memory on the ATTiny

The chips have different types of memory:

Zener diode

USB power is 5V. Transmitted signal levels are 0.0–0.3 V for logical low, and 2.8–3.6 V for logical high level. A Zener diode is used to clip the 5V down to 3.3V to supply the data lines. This is combined with a resistor to limit the current through the diode.