The previous post discussed my gradual drift to using a dedicated ICSP programmer to reflash AVR chips. This post describes how to make useful ICSP slave boards, to make life easier yet.
First up, some pinouts. I'm mostly interested in the 6-pin ICSP header, and the ATTiny85 (absolutely tiny, not many I/O pins), ATTiny2313 (a bit bigger, tiny memory, but built-in UART and more I/O pins), and ATmega328 (as used in Arduino). These are all drawn on a Mac in "Shapes", by the way. Another experiment, and it seems OK for basic diagrams, if a little buggy. £2.99 from the App Store.
I've only marked the pins that are important for ICSP. Connecting one of these up to an ICSP header is trivial - just connect the corresponding pin labels together between the ICSP header, and an IC socket. Notes:
- If you want to flash an IC that's to be fused for an external oscillator, or already is fused that way, then you'll need to do some work with the XTAL1 and XTAL2 pins before the ICSP master will communicate properly with the slave. For simple ATTiny work, you don't need to bother with external oscillators, but for Arduino, you do.
- On the ATmega328, the Vref and AVcc pins also connect to Vcc on the ISP header.
Ah - but see how a lot of the pins are all in roughly the same place and order? Well, I wondered if you could connect up a single socket in such a way that it can be used to program any of these 3 chips? Luckily, we can!
Here are the required connections, assuming a 40-pin socket. You could use a 36-pin, but those are harder to find:
When inserting the ICs into the socket, you just line them up according to the arrows in the middle of the diagram, with pin 1 (the little dot marker) towards the top left of the socket. I found a cheap Zero Insertion Force (ZIF) socket somewhere online (probably this one), and connected it up. Now I can plug and unplug chips to be programmed without struggling to remove them from standard sockets, and risking breaking the pins. Here's the final product, built onto tripad stripboard because of the pin spacings in the ICSP header.