This is one of the most informative pieces I have read on this subject. Thanks a lot. I understand it so much better.
You're welcome. I'm glad if I'm able to be of assistance.
If the ATMEGA is removed on the NANO will the RESET -- RESET work?
I'm not sure. I recently tried to use an FTDI FT232 module (which is the equivalent of a Nano with the ATmega328P removed) to upload to an Uno board and I couldn't make the auto-reset circuit work. I think the reason was that the existing auto-reset circuit on the Uno was interfering with the auto-reset circuit I had wired from the FTDI module. However the person on the forum I was trying to help tried the same thing and it worked for them. So I think it's kind of hit and miss whether it works.
In order to upload, the bootloader needs to be activated. This is done by resetting the microcontroller. However, the bootloader only runs for a short time before timing out and switching to running your sketch so the reset has to be timed just right during the upload. Normally, we have an auto-reset circuit set up that resets the microcontroller at just the right time during the upload. The auto reset circuit consists of the DTR or RTS on the USB to TTL serial adapter chip connected to the reset pin via a 0.1 uF capacitor. You can use either DTR or RTS, it doesn't matter which. This converts the signal on the DTR or RTS pin into a reset pulse at the right moment of the upload.
If you don't have an auto-reset circuit, you'll need to manually reset your Arduino during the upload. When you don't have that auto-reset, and are resetting manually, you need to get the timing right. If you press the reset button too early, the bootloader will have already timed out by the time the upload starts. The tricky thing is that when you press the "Upload" button in the Arduino IDE, it first compiles your sketch before starting the actual upload. So you need to wait until after the compilation finishes before pressing the reset button. The way to get the timing right is to watch the black console window at the bottom of the Arduino IDE window. As soon as you see something like this:
Sketch uses 444 bytes (1%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
press and release the reset button.
So it's not the end of the world if you don't have auto-reset, but it is kind of inconvenient to have to do the manual reset every time you upload.