Or: A good use for old Arduino boards
Like me, you may have a few old Arduino boards or ATmega8 chips (in the boards) laying around from when you were first playing with Arduino. Those chips can still be really useful as the heart of a tiny “Minimal Arduino” setup.
A normal Arduino board contains support components that make it easy to use. If you want a smaller footprint, you can get one of the many Arduino work-alike boards. But if you want a really small footprint, and reuse your old parts, you can make an Arduino board using just five components:
- ATmega8 chip
- single 10k resistor
- single 0.1uF capacitor
- tiny breadboard
- some hookup wire
The minimal Arduino circuit is dead simple. It relies on the internal 8MHz oscillator (like the Lilypad Arduino). And like the Lilypad, it doesn’t include a USB-to-serial. You have to provide that with a FTDI USB-to-serial cable or with an old Arduino board.
Getting the Arduino bootloader into the ATmega8
While the circuit is very similar to a Lilypad Arduino, the chip used is different. The ATmega8 has less memory and must be programmed slightly differently than the Lilypad’s ATmega168.
So a modified Arduino bootloader needs to be programmed into the ATmega8. The bootloader is a small program on the chip that listens to the serial port on power up and can reprogram the rest of the chip if instructed to. Here, a variant of the standard “Arduino NG” bootloader is used. The modifications are:
- uses internal 8MHz oscillator (no external part required)
- serial speed is 38400 instead of 19200 for faster uploads
Files for Minimal Arduino ATmega8 bootloader:
Unzip this file into the “arduino-0015/hardware/bootloaders” directory of your Arduino installation to create the directory “atmega8_noxtal”. The zip file contains:
- ATmegaBOOT.hex — the actual bootloader to program
- ATmegaBoot.c — the source code of the bootloader
- Makefile — Makefile to produce & program the bootloader
Actually programming the bootloader to the ATmega8 chip can be done in a few ways. I prefer using an AVRISPmkII programmer and an old Arduino board. Seat the ATmega8 into the Arduino, plug the AVRISP into the 6-pin “ICSP” header, plug both into USB, and program the ATmegaBOOT.hex file. If you are familiar with the command-line, go into the “atmega8_noxtal” directory and type “make isp” to program. If not, you can have the Arduino software program it for you once you tell it about this new kind of Arduino board.
Configuring Arduino to use Minimal Arduino
Because this minimal Arduino setup isn’t exactly like any other previous Arduino boards, we need to tell the Arduino software how to talk to it. In the Arduino directory, there is a file called “arduino-0015/hardware/boards.txt” that does this. Open that file in a text editor and add these lines to it:
############################################################## atmega8noxtal.name=ATmega8-noxtal @8MHz atmega8noxtal.upload.protocol=stk500 atmega8noxtal.upload.maximum_size=7168 atmega8noxtal.upload.speed=38400 atmega8noxtal.bootloader.low_fuses=0xe4 atmega8noxtal.bootloader.high_fuses=0xc4 atmega8noxtal.bootloader.path=atmega8_noxtal atmega8noxtal.bootloader.file=ATmegaBOOT.hex atmega8noxtal.bootloader.unlock_bits=0x3F atmega8noxtal.bootloader.lock_bits=0x0F atmega8noxtal.build.mcu=atmega8 atmega8noxtal.build.f_cpu=8000000L atmega8noxtal.build.core=arduino
The next time you start up the Arduino software, you should have a new entry of “ATmega8-noxtal @8MHz” in the “Boards” menu. It will look something like this:
From this point you could burn the bootloader onto the ATmega8 chip by going to the “Burn Bootloader” menu and selecting “w/ AVRISP mkII”.
Uploading Arduino sketches
Once the bootloader has been installed, you can leave it plugged into the Arduino board to test it out, or you can remove it and place it on your minimal Arduino breadboard. To upload sketches to it, the easiest way I’ve found is to run a few wires from an old Arduino board to the breadboard:
Links / Resources
This minimal Arduino idea is nothing new. Many others have done similar things. If I could have found an Arduino clone that used an internal 8MHz oscillator on ATmega8, I would’ve used it instead. Some of the pages I referenced:
- Bootloader page on Arduino.cc
- Setting up Arduino on a Breadboard from Tom Igoe at ITP
- Standalone Arduino on the Arduino Playground
- Boarduino from Adafruit
- Really Bare Bones Board Arduino-compatible board from Modern Device
- Arduino Core Hardware page on the Arduino Playground