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