For my projects, I have used a few different micro-controllers such as ATmega328p, ATtiny85v, ESP-01, and ESP32. In order to flash (programs or boot loaders) the micro-controllers, you need programmers. There are commercial products you can buy, but there are cheaper way to do the same.
There are two ways I usually use to flash the chips: 1) UART (using serial ports of the chip through serial to USB converter, FTDI for example); and 2) Arduino ISP (In-System-Programmer, using SPI (Serial Peripheral Interface) protocol).
I have made a programmer for the ATtiny85/ATtiny45 chips (see this post), and another one for ESP-01 (see this post). But for the other chips like ATmega328p DIP package, I usually program them with another Arduino board (Jeonlab mini v1.3 for example) and an FTDI break-out on a breadboard. For the ATmega328p TQFP package, I have used the Arduino as ISP method through SPI bus.
The ESP chips have pre-loaded firmware with a boot-loader, so I only need the FTDI breakout board with the RTS pin enabled.
Recently, I started thinking to integrate all these into a single board that consists of:
- FT232RL chip for FTDI
- ATmega328p TQFP with Arduino as ISP program loaded
- 5V to 3.3V regulator (600mA max.) for 3.3V output (FTDI has 3.3V output but 50mA max.)
- FTDI IO voltage selector (5V or 3V3)
- V-out selector (5V or 3V3)
- Programmer selector (ISP or FTDI)
- DIP socket for ATmega328p and ATtiny85/45
- ESP-01 programming socket header
- ISP output socket header
- FTDI output socket header
- USB type-C connector to PC
Here is the schematic.
I designed the PCB with KiCad and placed an order from PCBWay (www.pcbway.com). It was my first time with PCBWay and happy with the results. I’m quite satisfied with the quality. I have checked the PCBs with a magnifying glass for etching, solder mask, silkscreen, hole and edge finishes and all looked pretty good. Another thing I like about using PCBWay is the fast processing time. As you might noticed in the schematic above, I found a minor mistake for the first run and had to order the second batch. The first run was ordered in the middle of a week and the fabrication was all done within 24 hours and they immediately shipped. That was very impressive. The second order was place on Friday evening and they finished on Monday and shipped the package right away. The package is also pretty nicely done as shown in the picture below.

Here is a picture of the bare PCB, top and bottom layers.

And assembled one.

Note that I assembled 3x 8pin DIP socket instead of 1x 28pin DIP socket. That’s because the last 4 pins for the ATmega328p are not used for programming and the SPI pins for the ATmega328p and the ATtiny85 are in the same order. See the schematic and you will get it. By using 8pin DIPs, it’s easy to place the ATtiny85.
For the ATmega328p chip, the V_out is set to 3V3 and the V_IO is set to 3V3, and the PRG_SEL switch is set to ISP. See the picture below.
For the ATtiny85v, the switch settings are the same as above.
Now for the ESP-01, the settings are: 3V3 for V_OUT, 3V3 for V_IO, and the PRG_SEL switch to FTDI.
The FTDI header is the same as the popular FTDI breakout board except for the CTS pin is replaced with the RTS pin. The CTS pin is not used for Arduino programming and the RTS pin is very useful for ESP programming which allows complext boot/reset button presses during uploads. Here is an example I use for the GPS watch 3.1 programming through FTDI output.
If you want to make one for yourself, you can order PCB directly from PCBWay.
Please leave comments if you have any questions or comments.
Thanks.