A couple of month ago I ordered my first Arduino board. It was one of the Diecimila revision. As I often try something on my breadboard, I found out, that it can get troublesome to connect the Arduino with the breadboard over and over again. Others found that out as well and have solutions for that. An Arduino clone that snaps nicely onto your breadboard, e.g. Boarduino or RBBB.
So what to do if these boards are far away across the ocean and it is holiday season everywhere? You may have guessed it, we build it on a prototype board.
Luckily I had most needed components laying around. The ATmega168 is replaced by an ATmega8 but that is not a problem as the very first Arduinos were based on that chip.
- ATmega8, 16MHz, 8kB flash memory, 1kB sram memory
- 2 x 0.1u capacitors
- 2 x 22p capacitors
- 16MHz crystal
- 10k resistor
- 1k resistor
- red 3mm LED
- 6 pin header for ISP
- 3 pin header for serial communication
- prototyping board
- USBtoRS232 converter
- ISP programmer
All components can be bought for about 4.50€, without the ISP programmer and the USBtoRS232 converter.
If I had a resonator, I would have taken that, instead of the crystal and the capacitors as it needs less space on the prototype board.
The schematic is mostly the same as for the Boarduino. I left out the power supply circuit.
It has an ISP connector to program the bootloader and a serial connection used for uploading Arduino sketches. Also in place is a capacitor for the auto-reset function. It is connected to RTS line on pin 1 of the serial connection. The board should be feature compatible with Arduino.
On a breadboard
First you can assemble all parts on a breadboard.
All Arduinos are comming with an installed bootloader. If you build it yourself, you have to program the chip with a bootloader, at least once. That is why we need the ISP programmer.
First I tried to use the ADABOOT bootloader which is a modified version of the original bootloader. It has some modifications that makes it more comfortable, e.g. starts your sketch right after the upload is finished, without having to wait several seconds. Unfortunately I could not get it to work. I was able to compile it after adding some special #defines for the ATmega8. Programming it worked as well. I can see that the bootloader runs, as it blinks the LED four times, but it wont connect to the Arduino IDE. It always gets a read timeout.
So I took the bootloader that came with the Arduino IDE. It can be found at
You can try to call
make to compile the bootloader or take the precompiled ATmegaBOOT.hex file. I needed to adapt the
DIRAVR path setting in the Makefile to make it work. I used only the compile target, so I just typed
make clean; make
That gives you a warning, that delay.h has been moved, but you can ignore that.
Next thing is to get the fuses right. If you are new to AVR microcontrollers, these fuses
are used to configure some properties of the AVR chip, e.g. which clock to use: an
external crystal or the internal oscillator. These fuses are registers that can be programmed, just as you can program flash memory.
Programming the fuses is always fun. Every option you want to enable or disable is represented as a bit and grouped in two 8 bit values, high fuse and low fuse (for ATmega8). To make it hard to read, programmed bits are represented by zeros and unprogrammed by ones. To make it more fun, if you mix things up, you can “brick” your controller and it can get hard to revive it. And because you probably do fuse programming only once per chip, you may have forgotten most of it when you have to do it again.
Good for us, that fuse bits are provided in the Makefile that comes with the bootloader. As I use avrdude for programming, this is how my command line looks like.
avrdude -v -c usbtiny -p ATmega8 -C /Users/alex/etc/avrdude-tiny.conf -U hfuse:w:0xCA:m -U lfuse:w:0xDF:m -U lock:w:0xFF:m
This writes the high and low fuses and the lock bits. Lock bits have to be written to enable programming the bootloader.
Now we are ready to program the bootloader.
avrdude -v -u -p ATmega8 -c usbtiny -C /Users/alex/etc/avrdude-tiny.conf -U
When that is done, try to hit the reset button and you should see the LED at pin 13 blinking. That signals that the Arduino is ready to accept your sketch.
Testing it with an Arduino sketch
Next thing is to check if our Arduino wants to speak to the Arduino IDE.
Start your Arduino IDE and load the Blink sketch from the examples. Compile/verify it and hit the upload button.
By now, and if everything goes well, you should see the LEDs of your serial connection blinking, resetting the Arduino and the uploading the sketch.
Then your LED connected to pin 13 will blink once every two seconds.
On the prototype board
If you have tested your components and your software successfully, you can move on to solder it on a prototype board.
If you solder header connectors to a prototype board and try then to connect it to the breadboard, you will notice, that the header connectors are a bit short. I used my pliers to push the pins a bit. If you solder these, you will have a better connection to the breadboard.
This Arduino can be used for old school prototyping as well. Just use it as a standard ATmega8 and program it with the ISP connector. And it is one of the cheapest Arduino boards, that you can get.
- Arduino home
- Freeduino index for everything related to Arduino and Arduino clones.
- Boarduino Arduino for the breadboard from Adafruit Industries.
- RBBB Arduino for the breadboard from Modern Device.
- Arduino XMAS hitcounter
More at Flickr.