I have a sparkfun AVR Pocket Programmer and have burned the bootloader and uploaded programs using "upload using programmer" via USBtinyISP. It works fantastic.

I have a sparkfun FTDI Basic (as well as another FTDI breakout) that can send and receive bytes via the Arduino IDE serial monitor.

However, I cannot upload a new sketch or modified sketch to the atmega328 via FTDI. The IDE just hangs at the upload till timeout. Here is the list of some of my troubleshooting attempts:

  1. I have tried uploading a plain bootloader, as well as a running program via the ISP programmer before attempting the FTDI.
  2. I have tried direct connecting the FTDI DTR/RTS reset to the Atmega328 pin1.
  3. I have also tried connecting the FTDI DTR/RTS reset to a one side of a 0.1uF cap, and the other side of the cap to the Atmega328 pin1. I assume the cap is to send just a reset pulse instead of a reset constant.
  4. I have tried a different brand of FTDI FT232RL chip. No difference.
  5. I have tried adding 1k resistors on the Tx and Rx lines. No difference.

Being able to program over serial is really the secret sauce that makes Arduino so much easier for beginners than a stock AVR chip. However, I have not been able to locate any detailed information on how this Arduino programming via serial really works. Also, I am not sure how the reset pin works in relation to this process. I remember something that on old Arduino boards you had to press or hold the reset when uploading, but have not be able to find any of this information either as it has been buried by time.

This Building an Arduino on a Breadboard Article and photo from that article below is a good outline of the setup I have right now. But in this configuration it seems that a sketch can not be uploaded. What do I need to add breadboard circuit in order to upload a sketch via serial? Or what procedure do I need to do with the reset button when uploading?

enter image description here


Atmega328 Spec Sheet PDF

  • Instead of showing a picture of what you attempted, you should show us a picture of what you have actually done.
    – Majenko
    Sep 24, 2020 at 18:56
  • 1
    1) Your first link in fact provided all the information you need. By default, Atmega328 only support programming via ISP (which is an SPI interface), in order to serial boot loading, you need to upload the bootloader to the chip first. There are plenty of information available on the internet or even on the first link you provided on how to burn a bootloader to Atmega328. For programming via serial, you need the DTR connect RST via a cap, take a look at Pro Mini schematic.
    – hcheung
    Sep 25, 2020 at 0:41
  • @hcheung, Thanks! I had just figured it out when you posted your comment, but you were right on! Thanks!
    – user14446
    Sep 25, 2020 at 1:30
  • @Majenko, I posted my actual breadboards in the answer. Thanks!
    – user14446
    Sep 25, 2020 at 1:31

1 Answer 1


Answering my own question; I just got lost in the troubleshooting.

Upload Using Programmer != Burn Bootloader

Though I tested it both ways, I evidently overlapped issues, masking the core problem. Upload using programmer works great for transferring your sketch but it does NOT allow sketches to be uploaded via serial later. (Not sure if there is an inherent or logical reason for this, but this is what I have found by experimentation).

And like hcheung mentioned in the comments, a capacitor on the FTDI reset line is required. Connecting it directly will NOT work. I used a 0.1uF and it worked well. I have attached a couple different photos of my setup for someone following this path in the future. Note that the LED I am using has an internal resistor; a normal LED will need an 1k series resistor. Also, leaving the ISP programmer attached while uploading a sketch over serial did not seem to cause any issues.

atmega328 ftdi top view ftdi setup left ftdi setup right

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.