I needed a small board, I could use to test and prototype things with, so I decided to make such a board.
The question that might arise is, why didn’t you just order something from the wide range of Arduino branded products or a Teensy. First, I don’t like Arduino because it uses a 328 and that chip lacks hardware USB support. So that rules out Arduino. Next, Teensy, I looked at it, and I didn’t like how it was designed: some pins brought out in stupid places, uses more layers than two, has hard to acquire, and annoying to rework (at least in Europe) QFN style ATMEGA, should you kill the one soldered on at the first place etc…

So I what I wanted to achieve
– Components on one side only, so I could also use it as an SMD device
– No more than two layers (easier and cheaper to acquire)
– Decent ground plane with two layers design
– Uses TQFP package ATMEGA (easier to rework and acquire)
– Most of the pins brought out and only on the sides
– Buttons for both Reset and HWB
– LED to indicate that the board has power
– Silkscreen on both sides indicating the pins

So here is what I came up with. This is actually version 2B, I had some version As made, but I unfortunately lost the schematics and board files, so I had to redo the work. But now the revision B is here. I will also add some images of the 2A version boards I ordered and assembled.
Eagle schematic and board included and available for download here

 

Sample code for the board, blinks the debug LED with 1 second delay
NB! Optimization is required for this code to work!

#define F_CPU 16000000

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

int main() {
	// Remove CLKDIV8
	CLKPR = 0x80;
	CLKPR = 0x00;

	// DISABLE JTAG - take control of F port
	MCUCR = _BV(JTD);
	MCUCR = _BV(JTD);

	// Set PE6 (LED) as output
	DDRE |= _BV(PE6);

	while(1) {
		_delay_ms(1000); // sleep 1 second
		PORTE ^= _BV(PE6); // toggle LED pin
	}

}

Sample code .c and ready to flash .hex available here

Share