ATMega328, USBtinyISP, FTDI Basic or Friend, and how to connect everything

I’m making a PCB for an ATMega328-based project, and I’d like to have the ability to burn the bootloader, upload firmware revisions to the board, and have the option to use the Arduino serial monitor for debugging purposes.

It’s my understanding that a USBtinyISP can perform the former two functions and an FTDI breakout can do all three, although burning the bootloader can take over an hour[edit: using FTDI, according to http://learn.adafruit.com/ftdi-friend/programming-the-arduino-bootloader]. Let’s assume PCB space is cheap and time isn’t–I’m impatient and I don’t want to wait to upload the bootloader.

Based on Use the FTDI Basic Breakout Board to program an Atmega328P-PU With Optiboot. | Modsbyus.com and http://www.instructables.com/file/FJ1YJJNH5R9EXPU I think I need the following connections:

FTDI | ATMega328*

pin | label | pin | label

1 GND | 8 GND
2 > CTS | (NC)
3 < VCC | 7 VCC
4 < TX | 2 D0/RX
5 > RX | 3 D1/TX
6 < RTS | 1 RESET***
(DTR**)

USBtinyISP | ATMega328*

pin | label | pin | label

1 MISO | 18 D12
2 VCC | 7 VCC
3 SCK | 19 D13
4 MOSI | 17 D11
5 RESET | 1 RESET
6 GND | 8 GND

*D prefix means digital pin
** RTS on Adafruit FTDI Friend, DTR on Sparkfun FTDI Basic
*** Through 0.1uF capacitor; pin 1 held at VCC through 10k resistor

I’m using most of my digital pins for this project, mostly for momentary switches, an optocoupler, a rotary encoder, and a shift register, so I think if I reserve D0-D1 and D11-13 for the momentary switches, I’m in the clear as far as impedance issues go.

I’m just trying to make sure that I’m hooking everything up properly and that I’m not going overboard with both the USBtinyISP and the FTDI breakout. If there’s one tool that can do everything well, I’d prefer that.

Burning a bootloader only takes a minute or two. Here is a project of mine with both FTDI and ICSP connections. FTDI breakout boards cannot burn a bootloader. I use Adafruit's USBtinyISP to burn bootloaders and to program chips directly when I opt not to use a bootloader. I also use AFI's FTDI friend and SFE's FTDI basic. All are good products. The latter two are equivalent, both are not needed. Bottom line, an ICSP programmer (USBtinyISP, USBasp, AVRISPmkII, etc.) and an FTDI product (breakout board or cable if you prefer) are required tools AFAIC; the associated investment is modest.

Using pins 0/1 for normally-open momentary contact switches should coexist fine with bootloader programming, and using 11-13 for ICSP programming as well as for other purposes can often work fine if as you say, the impedance is kept reasonable and if the programming doesn't affect whatever else is connected.

OctoberAllOver:
It's my understanding that a USBtinyISP can perform the former two functions and an FTDI breakout can do all three

No, an FTDI can't burn bootloaders.

If you want all three functions you need both devices.

PS: If the serial port is only for debugging (ie. not for communicating with the PC) then I prefer something like this to a horribly slow Java console window that refuses to stay open: http://www.ebay.com/itm/280990461557

(Item picked at random because it has a pretty picture, not because I'm recommending the seller)

OctoberAllOver:
burning the bootloader can take over an hour.

Nah, it takes about a minute.

I already have a USBtinyISP, so I guess once I get the FTDI Friend I'm good to go with the connections listed above. Thanks for the help!

An FTDI can burn bootloaders - it is really tedious tho.
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html

Way easier to use an actual AVR ISP. Be sure that if devices with outputs are connected to SCK.MOSI.MISO pins that their outputs are disabled when Reset is asserted and the 328P output pins are floating. This may entail adding a pullup resistor to CS lines for instance.