Elaborating on what the class learned in making the FabISP, this week the assignment took the process one step further: we learned to design our own PCBs using EAGLE (Easily Applicable Graphical Layout Editor) PCB Design Software. The assignment was to redraw and make the echo hello-world board and add (at least) a button and an LED (and current-limiting resistors).

After drawing in all the wires in the schematic using the "wire" command, I read a couple of Eagle tutorials online and discovered the "net" tool that automatically couples wires together (after asking you, of course :) ). Instead of using an actual line on the screen to link two components together, you can draw two short segments of wire (using the "net" command) from the appropriate pins of the two (or more) separate components. Right-click on the component or use the command "name" to select one of the wire segments. For example, you can name the first wire (coming from pin 10 of the ATTINY-44) "BUTTON", and name the wire at the other end "BUTTON" as well. The program will ask you: "Connect N$[#] and BUTTON?" Click yes to connect and associate the two+ pieces. In "Board" view, the two components will appear to be connected by a thin line. Right-click the line to route traces between components drawn to scale.

I forgot to do a DRC (Design Rules Check) and an ERC (Electrical Rule Check) before exporting my board as a PNG. After already having recreated my PNG once to try and correct the error, the DRC caught one major error: not enough clearance between the lower left pad of the 2x3 header and the trace passing by right above it. The DRC did not catch errors I found only after milling the board. Three more traces (all in the central region of the PCB) were too close to their neighboring pads. When the fab modules created the 4 tool paths to mill the board, the paths did not run between these traces and pads. In the actual "finished" board, the traces and pads are stuck together. Despite trying my best to use the X-ACTO knife to separate the traces and the pads, I keep discovering more of these conditions so I will have to recreate the board and mill a third time.

echo hello-world Board Errors

One other design tool I did not discover until late in the PCB fabrication process is that you can change the grid size. I had been manually adjusting the positions of each wire in the Properties menu, but hopefully, in the newest redesign, the change of grid size from 0.05 to 0.025 inches will help to resolve the conditions from the previous two PCB iterations.

I could have saved myself some trouble if I had just used the vinyl cutter like I had originally planned. Using the Default settings in the fab modules, the tool path generated did not run into any of the issues I had with the milling process.

echo hello-world Board Schematic
echo hello-world Board
echo hello-world Board + FabISPkey
Programming Setup

I started attempting to program the echo hello-world board using the Programming tutorial. I got stuck on this step:

$ sudo make -f hello.ftdi.44.echo.c.make program-usbtiny-fuses

Following TA Matt's helpful debugging tips for the FabISP and without realizing the errors in my own board, I came to the conclusion that the FabISP that I had borrowed did not work for some reason or another. With the appropriate drivers installed on your operating system (for Mac OS X - CrossPack for AVR Development), typing in:

avrdude -c usbtiny -p t44

should prompt the response

avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.

***avrdude: error: usbtiny_transmit: usb_control_msg(DeviceRequestTO): unknown error***

avrdude done. Thank you.

The part inside the *** *** seemed to suggest that there was something wrong with the FabISP itself. In a couple of days, I will try this out again, and I hope to succeed next time :D.

Looking ahead to the Final Project, some thoughts from DigiKey. IR LEDs and phototransistors!!