I have been using this interface to program an AVR microcontroller I'm using in another project. It has been working but I sometimes experienced reliability issues. The avrdude program couldn't always communicate with the AVR or the output pins of the AVR wouldn't behave properly after it was programmed. I found myself moving a wire before I used avrdude to program the AVR and moving the wire back after the programming of the AVR was complete. It soon became annoying having to do that each time I wanted to test changes to code I was using in the AVR. I started thinking if I could put the outputs of the '245 in to tri-state mode when it wasn't being used to program an AVR it would simplify things and make it easier to use the programmer.
The change needed to the circuit was minor. The reset line from the Pi can also be used as the chip enable line of the '245. When the line goes low to reset the AVR part to being the programming process it enables the outputs from the '245. When the line goes high, allowing the AVR to run the program it just received, the outputs of the '245 are put in to tri-state mode. I added a jumper to the PCB so the chip enable input of the '245 can be driven by the reset line or it can be tied to ground when the '245 is being used to buffer GPIO lines.
I added the new jumper to the schematic and PCB. While I was updating the PCB layout I made some additional changes. I modified the silkscreen so all component references can be seen and added the part values for the resistors and capacitor. I also reduced the board width by 0.05". The images in the gallery have been updated with the latest version of the schematic, PCB layout, and 3D model of an assembled board.
I have been using the modified version of the programmer for the last 5 days and it has really been a big help. I no longer need to move any wires when switching between running a program on the AVR and programming the AVR with new software.