How can I use my SMD Arduino to program a separate DIP ATmega328?

Check the Arduino site for instructions to use your Arduino SMD board to program another Arduino board.

Arduino ISP diagram

To extend this to programming a DIP ATmega328, you would translate the 6 wires pictured to the corresponding pins on the DIP module.

  • D13 = PB5, pin 19
  • D12 = PB4, pin 18
  • D11 = PB3, pin 17
  • RESET = RESET, pin 1
  • 5V = AVCC and VCC, pins 20 and 7, respectively
  • GND = AGND and GND, pins 22 and 8, respectively

The Arduino UNO schematic would be helpful for reference for verification.

As pointed out, you would also need to connect a 16MHz crystal with 22pF capacitors on the chip that is being programmed. You would need to connect this to pins 9 and 10 on the chip you are programming as seen here:

Using an Arduino board to burn the bootloader onto an ATmega on a breadboard.


Another solution is to use the ISP Shield from Evil Mad Scientist. The kit costs about $13 and takes about 30 minutes to solder together.

If you are planning to program many parts, the ZIF (Zero Insertion Force) socket on the ISP Shield will definitely pay off. Even if you don't purchase the shield, consider a ZIF socket for programming more than a handful of parts.

ISP Shield from Evil Mad Scientist