Programming the MCU on a PCB

Hi folks

I am so lost I don't even know how to phrase this question...

Basically, I am moving from the breadboard phase to PCB prototype.

There are plenty of services out there who will design and assemble a PCB.

However, my question is about how to get the Arduino software on to the chip? The fabricators don't seem to do this.

Are chips generally programmed elsewhere and then added to the PCB?

I'm looking for pointers to commercial services rather than DIY advice - I don't have the tools or chops to do it at home.

First off, programming the Arduino bootloader onto a blank chip is really really easy. You just need to include an ISP header on the board and then you hook up a cheap programmer like a USBASP and use the Arduino IDE 'Burn Bootloader' command.
Having said that, Microchip do offer a production programming service for commercial quantities.

That's a help - at least I know what to start googling.


You’re accepting defeat before you you have any idea of how simple the task is.

Ultimately, I suspect you’ll spend more time trying to figure out how to pay someone to do something you can learn to do in thirty seconds? The tools for programming a raw, blank chip are very inexpensive, cheap even and readily available. The software required to perform the operation are built into the Arduino IDE.

Start with the basics which you must know:

How many units?
Which chip? By that I mean which processor model (AVR, Cortex) and package type (DIP, SMD)?

Thanks for the gee up.


10 units initially, ATMega328/P, DIP

There several ways to do this. The two most common:

  1. Use a decent quality 28 pin socket on your target board. Using an Uno board that has been loaded with the “Arduino as ISP” sketch (in the IDE), program a blank chip in a “programming shield”. Remove the programmed chip from the ZIF socket (zero insertion force) on the programmer and plug into your board to test.

  2. Using the Uno as a design reference, add a 3x2 pin header to your target board that connects to the ISP pins of the ‘328. With a blank chip in your board (soldered or socketed), plug a USBASP programmer onto the header pins. Program the chip in place, unplug the USBASP and power up the board to test.

#2 is the most flexible and allows for SMD processor packages which are physically smaller and cheaper than DIP devices. Unless you want the end user to be able to easily remove the processor, a soldered SMD package would be considered more reliable than a socketed DIP and of course lower cost.

As mentioned in an earlier post, the software required to program the chips is built into the IDE. Rather using the “download” option, you use the “download with programmer” selection.