I have now added a 110ohm resistor between +5V and RESET and a 10uF capacitor between RESET and GND. With this configuration, I still get the message:
avrdude: stk500_initialize(): programmer not in sync, resp=0x15
avrdude: initialization failed, rc=-1
Despite this error, the IDE says that it has finished uploading. Before, the bar above the serial window in the IDE was turning orange and reporting an error, so I am counting this as a small step in the right direction. But I still get that error when trying to burn a bootloader (i.e., set the clock fuses) on the ATTiny45.
I have had a heartbeat on Pin 9 the whole time, and it is pulsing fine. It continues pulsing through the entire process of uploading the script. I just added error and communication LEDs on 8 and 7 respectively. They pulse twice when ArduinoISP is started (or reset), but do not come on at all during the programming of the ATtiny45.
Here is the initial avrdude output, in case that tells you something:
Using Port : \\.\COM3
Using Programmer : stk500v1
Overriding Baud Rate : 9600
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
AVR Part : ATtiny45
Chip Erase delay : 4500 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Just to see what would happen, I removed the wires connecting the MOSI and MISO on the Mega2560 with those on the ATTiny45. I got the exact same error as before, so I suspect the Mega is not even getting to the point of communicating with the ATTiny45.
Thanks for your help.