Notes on building and programming the Fabulous Fabio “Arduino-compatible controller” board from the Make Your Bot! website (makeyourbot.org) – This is the first in a series of Fabio Arduino-Clone related posts from Track Hacker member JT. Thank you for all of the hard work that has gone into this and for sharing it with the Track Hacker community! -craigbic (admin)
Note: weblinks have been footnoted and moved to the bottom.
Over the last six months, I’ve built, tuned, and tested a 3-axis CNC machine based on plans from Rockcliff Machine [1] Now that it is functioning and capable of milling PCBs, I decided to experiment with using it as an “Additive Manufacturing” machine, in other words, a rapid prototyping machine under computer control that uses extruded plastic filaments to build a structure based on commands generated from a processed CAD file.
This was triggered by the image of an extruder head called the “Plastruder Mk4” available from the Makerbot website [2]. I had visions of my machine producing all sorts of neat little plastic Chatchkis and such, wowing my family and amazing my friends. One of the hitches was that the extruder did NOT come with the electronics. Not to worry! Being a life-long eclectic hacker, I figured I could use the Fabio board featured on the Mantis site[3] since they used the Fabio to control the heater for an extruder. [4] The Fabio is a low-end clone of the ubiquitous Arduino series of Atmel microcontroller chips. The Fabio uses the ATMEGA168A[5] part.
Fabricating the Fabulous Fabio
Since I’m a circuit designer by profession, and have the free version of Eagle PCB layout suite at home for amusement, I decided to re-layout the Fabio board in Eagle and then route it in a single-sided layout pretty much identical to that shown on the website. After generating the board Gerber files, I used the Eagle[6] User Language Program (ULP) pcb-gcode-3.3.2.zip to generate the G-code file that controls my CNC machine. I then used another program, path-opti (written in Java) to optimize the rapid tool paths, minimizing the time the bit spends traveling between cuts. (http://pcbgcode.org)
I then used yet another free program called Basic CNC Viewer[7] to view the resultant G-code file for any Gotchas that may have snuck in. I especially wanted to see that the engraving bit I had selected was going to cut between the ATMEL ATMEGA168A chip pins. If not, the board would be useless. Success! The CNC Viewer showed cut paths between all of the ATMEGA168 pin pads!
The optimized Fabio G-code file was then loaded into my Mach3[8] machine controller application program that controls the machine to cut the copper that makes a Fabio board.
A friend had given me several sheets of unused and uncoated 50 mil thick double-sided FR4 Printed Circuit Board (PCB) material, so I hacked off a piece slightly larger than the 2” high x 1.25” wide Fabio board size. After milling a 5” X 6” flat spot on my Y-axis sacrificial table, I fastened the PCB blank to the table with double-sided tape, the kind with almost zero thickness. This is important so the board can’t move down under pressure from the milling operation.
Using my Mach3 jog control, I moved the X and Y axes on my machine so the bit was over the lower left corner of the PCB blank which corresponds the Zero X-Zero Y point of the toolpath image on the screen. I left the Z height at about 1 inch. A test run with the elevated Z showed me that the setup looked OK and that with the correct Z setting, in about 30 minutes, the Fabio board should appear from within the copper board surface.
Next, I used the Mach3 jog control to lower the Z axis to as close to the copper as I could get without touching it. To accurately set the Z axis to zero (PCB blank copper surface), I first disabled the Z axis motor. Then one wire of my Zero Z box was then clipped onto the bit and the other was placed in contact with the copper plate. By turning a knob attached to the rear shaft of the Z axis motor, I was manually able to slowly move the Z axis down until the bit just touched the copper and the LED on my Zero Z box LED came on. Z has landed! A click on the Zero Z button on Mach3 set my Z axis DRO to zero. X and Y were likewise set to zero. I then removed my Zero Z box and re-enabled the Z axis motor. Ready to cut.
p.s. After buggering up several PCB blanks through procedural mistakes, I developed a checklist of steps to insure that scrap due to impatience was minimized. I’ll include that at the end.
Milling Fabio
After about ½ hour of flying fiberglass and copper, a virgin Fabio PCB appeared in the copper cladding on my PCB blank. A thorough inspection under an eye loupe showed it to be usable, so I cleaned it up with some fine steel wool, and re-examined it. There were a number of fine thread-like copper traces still left on the board so I removed the most likely to short out ones with a #11 Xacto blade. The new Fabio board was then trimmed with metal snips to the correct size.
Filling Fabio (Populating the board)
I had previously ordered from Digikey[9], my Favorite Supplier for Home Projects, all of the major parts to populate the newly milled PCB.With diligence, a steady hand, and a magnifier, I was able to solder all parts onto the board with no shorts. I already had a red LED in surface mount format, but no green ones, so I soldered on a 3mm leaded green LED instead.
To complete the Fabio development package, I had previously ordered the FTDI USB-TTL cable[10] to both power and program the Fabio. It supplies the 5V needed to power the board and the RS232 signals at 3.3V for communication by the PC to the Fabio’s ATMEGA168 chip. I also downloaded and installed the required FTDI driver[11] on the PC. I selected the latest windows version and it installed seamlessly. (I’m running XP on an older Compaq Deskpro)
Initial Power-up
After downloading the Arduino development application[12] and being one who figures things out by trail and error (mostly error), I selected what I thought was the best version of the listed Arduino boards and the correct com port from the TOOLS menu. I then tried to download a HEX file — err SKETCH (BLINK). Got lots of errors on that one!
After perusing all the Arduino forums I could find, I discovered that I needed to install a Bootloader program on the Fabio itself to assist in downloading the BLINK sketch. Virgin AMEGA168 chip have no brains. For that, I needed a real programmer, not the FTDI USB-TTL cable. More $$ spent. I bought the Pocket AVR Programmer from Sparkfun (sku: PGM-09825)[13]. It comes with a ribbon cable with both a 10-pin and a 6-pin female header that plugs onto the 6-pin ICSP header (2×3 pins) on the Fabio board. I followed the Fabio circuit diagram and programmer diagram to make sure I got the pin orientation right the first time.
The programmer was connected to the Fabio 6-pin ICSP header for programming signals, and the FTDI cable was plugged into the 6-pin inline header for board power, since the Fabio board does not connect its power line to the ICSP header.
Again, it was “Select the correct Arduino version and try downloading the bootloader, get error message, try another version, etc. Failure-failure-failure. Back to forums. One forum entry was complaining about the fact that the Power-No Power switch position on the Pocket AVR Programmer didn’t seem to matter. I checked the schematic, and found that the ICSP cable buffer, a 74ACT125D buffer chip gets its power from the same source the target board is powered by. Thus, current can leak through the 74ACT125D input protection diodes from the ATMEGA168 chip and power the target board if the VCC of the target is lower than that of the ATMEGA168. In my case, the Fabio board has a 3.3V regulator on board, so that was the case with my hardware. I shorted out the 3.3V Fabio regulator IC and ran the board on 5V. Still no bootloader success.
Finally I found a forum entry saying that sometimes failed programming attempts will alter the ATMEGA168 internal fuses such that the chip needs an external clocking source to get going. To check this out, I soldered in (Very Carefully) an 8 MHz crystal and two 20 pF caps to the XTAL1 and XTAL2 pins (PLCC package pins 7 &
per the Adafruit Lilypad circuit.[14] I again tried downloading the bootltoader using the Sparkfun Pocket AVR Programmer. This time I selected the Lilypad as the board since it was also an ATMEGA168 running on 5V with an 8 MHz clock. Success! The Arduino app said “DONE”, and the Lilypad bootloader blinked 3 times fast (A Lilypad bootloader characteristic, I found out)! Success!!
Gotta go now and get some stuff done. Let me know if this tale is of interest and I’ll continue it in Part 2.
Coming Soon: Part 2 Next Step, try loading the BLINK program into the Fabio/Lilypad board. After that, it you’re still awake, maybe Part 3 “How I hacked the Fabio to run a Rep-Rap Plastruder on a Rockcliff CMC machine”.
http://www.rockcliffmachine.com/index.php, http://toolmonger.com/2007/10/04/the-cnc-revolution-will-not-be-televised/
http://store.makerbot.com/catalogsearch/result/?q=plastruder&x=0&y=0
http://makeyourbot.org/fabio-1-1
http://makeyourbot.org/heater-1-0
http://www.atmel.com/dyn/resources/prod_documents/doc8271.pdf
http://www.cncedit.com/BasicViewer/Default.aspx
http://www.adafruit.com/index.php?main_page=product_info&products_id=70
http://www.ftdichip.com/Drivers/VCP.htm
http://arduino.cc/en/Main/Software
http://www.sparkfun.com/products/9825
http://arduino.cc/en/uploads/Main/LilyPad_schematic_v18.pdf
Related articles
- Using an Arduino or Seeeduino for its FTDI chip (hackaday.com)
- Arduino introduces two new boards – Uno and Mega2560 (electronics-lab.com)
- In the Maker Shed: Prototino ATMega328 kit (makezine.com)
- About the Atmega32u4 Breakout board+ (adafruit.com)








Fantastic article JT! Us regular readers have heard SO much about you!
I can’t wait for parts 2 & 3 to see how things work out.
[Reply]
can’t wait for parts 2 & 3 to see how things work out.
[Reply]
Eagerly waiting for part 2 and part 3, Very detailed explanation.
[Reply]
I think it’s unanimous, everyone here can’t wait for parts 2 and 3!
[Reply]
Still waiting for parts 2 and 3? When is JT going to update? Not rushing but found thye article fantastic and want to see the progress.
[Reply]