Click on the image for an annotated version. |
Background
My experience with my Arduino web server has shown that the 32kB program memory of the Uno isn't enough to run a full-featured web server and do other interesting things at the same time. As I'm using an Arduino Mega2560 memory isn't an issue at the moment. Unfortunately taking these ideas beyond the prototype stage means either using one of the surface mount ATmega line or experimenting with the ATmega644P/ATmega1284P, both of which are available in a convenient dual in-line package. Before attempting a shield-compatible Sanguino clone I wanted to be sure I could make a standard Arduino clone based on the ATmega328. This has been done many times before; I found the ITY tutorial helpful (see also the updated version on the Arduino web site). As far as I can find no-one has built a shield-compatible breadboard Arduino before.
Offset headers and the 0.16" spacing problem
For reasons I don't understand the designers of the Arduino chose to space two of the headers by 0.16", which causes problems when using breadboards and stripboard (Veroboard), both of which haves holes at 0.1" spacing. Fortunately 8 pin offset stackable headers can be used to solve this problem.
Offset header for use with Arduino shields. |
Breadboard layout
Ethernet shield removed to show the ATmega328 and wiring. Click on the image for an annotated version. |
I basically followed the ITY tutorial so I'll just report the differences.
I clipped together two Wisher WBU-TJ breadboards, with the ATmega328P straddling the join. The two parts from the Wisher WBU-DJ breadboard are fitted at the top and bottom to provide power rails. I chose to align A5 with pin 28 on the ATmega328P. That aligns D0 with pin 1 (reset). Since the headers are fitted to a different section of the breadboard that is not a problem.
I chose not to connect AREF, see this warning.
In addition to fitting the AVR programming adapter I also fitted a 2×3 header connected via wires to send the ICSP/SPI signals to the ethernet shield.
I adapted the reset circuitry to allow auto-reset.
Auto-reset circuit. |
Note the offset header used for D8-D13. Click on the image for an annotated version. |
Parts list
- Breadboard (e.g. 1 × Wisher WBU-DJ, 2 × Wisher WBU-TJ)
- 1 × ATmega328P microprocessor
- 1 × red LED
- 1 × 16MHz crystal, 18pF load capacitance
- 1 × 1kΩ resistor
- 1 × 220Ω resistor
- 1 × 10kΩ resistor
- 2 × 22pF capacitors
- 3 × 100nF capacitors
- 1 × 100µF capacitor
- 1 × FTDI breakout board (Sparkfun DEV-09716)
- 1 × AVR programming adapter (Sparkfun BOB-08508)
- 1 × ICSP lead (2×3 pins), else use 6 wires
- 4 × 6 pin stackable headers (Sparkfun PRT-09280)
- 3 × 8 pin stackable headers (Sparkfun PRT-09279)
- 1 × 8 pin offset stackable headers (Sparkfun PRT-09374)
- 1 × reset switch
- 22 AWG wire
The next step is to try this with the ATmega644P before moving the circuit to stripboard.