The idea behind this board is: build general purpose Arduino for a fraction of its normal price. Skip the form factor, but make it possible to connect sensors and servo's directly. Make it possible to use in breadboard, but also as small standalone module. Make it flexible, yet as compact as possible.
This board was previously dubbed 'CheapDuino' but after a discussion with Tom Igoe this board has been renamed 'ottantotto' which is italian for eightyeight (since the board is using Atmega88 controllers)
PCB can be splitted into two parts: the MAX232 section for programming and communication and the microcontroller itself.
The design is made in a way that you can either use a PCB (double sided) or just build it on soldering-breadboard. I decided to build a true-to-scale ottantotto on breadboard. The backside is reasonably simple to solder.
The programming adapter is slightly larger than the PCB version, but the reset functionality using the DTR line works well.
This PCB can be cut into two pieces, the microcontroller board and the programming dongle. The design is very flexible, so the board can be build in a number of 'flavours' tailored to your needs:
This is the board completely populated. It works similar to a serial arduino (except that the power connector is wired to the board) In this way the board can be used as stand-alone microcontroller system, or build in somewhere. The serial port is fully available.
When only the connectors at microcontroller-pin -side are connected, the board can be used as test module for solderless breadboard. the positioning of power connection (- and +) allows for breadboard connectivity too.
When the PCB has been cut, both of the boards can be populated independently. This allows for a very compact board (which can be used for controlling mobile robots such as the flatpack-walker (check http://www.retrointerfacing.com)
The programming dongle can be used separately
On the silkscreen of the PCB no room was left for the pin numbers. A simple solution is to print out the following image and to glue it on the microcontroller! ottantottopins.pdf The pin numbers are according to the Arduino standard: PD0 tm PD7 are numbered 0 to 7. PB0 tm PB5 are numbered 8 to 13. The analog pins are numbered a0 to a5 and represent PC0 to PC5.
Power can be connected in numerous ways, depending on the 'flavour' of your board. An adaptor plug can be connected using wires, you can also connect a battery pack directly to any of the power pins.
The bootloader is adapted from the standard arduino bootloader for atmega168. The sources can be found here With winavr installed (I did not use arduino to compile the bootloader, but it should be possible anyway), you type make atmega88 from a command prompt, and the correct version will compile.
Point is that the atmega88 has the same memory footprint as the mega8, but the same internal configuration (registers, timers, uart, interrupts as the atmega 168)
a new entry to the boards.txt file has been made that resides in the 'hardware' directory. boards.txt (zipped)
############################################################## atmega88.name=Ottantotto with ATmega88 atmega88.upload.protocol=stk500 atmega88.upload.maximum_size=7168 atmega88.upload.speed=19200 atmega88.bootloader.low_fuses=0xff atmega88.bootloader.high_fuses=0xdd atmega88.bootloader.extended_fuses=0x00 atmega88.bootloader.path=atmega168 atmega88.bootloader.file=ATmegaBOOT_168_atmega88.hex atmega88.bootloader.unlock_bits=0x3F atmega88.bootloader.lock_bits=0x0F atmega88.build.mcu=atmega88 atmega88.build.f_cpu=16000000L atmega88.build.core=arduino
Besides the board.txt file, also a number of sources need to be altered. Since the processor is mostly compatible with the atmega168, except memory sizes, the c-files in the hardware\cores\arduino directory needed to be altered. Every entry #if defined(AVR_ATmega168) has been replaced with #if defined(AVR_ATmega168) || (AVR_ATmega88)
here you can download the new directory hardware/cores/arduino hardware_cores_arduino.zip. This is the hardware cores directory for Arduino011 or even earlier and is far from complete. When compilation of libraries throws up warnings, the replacement strategy mentioned above normally suffices.
From version 0013 (according to GIPLT) no warnings are thrown, so only adding the ottantotto section described above suffices.