ArduBatch - Batch programmer for ISP chips

Yes, I know the name is pretty lame but it was the best that I could come up with.

This project utilises 2 Atmega8A chips, one as an Arduino and another as a USBASP ISP programmer. The Arduino operates as a switch, switching power to one of the 9 programming ports ultimately switching power to a chip to be programmed. This is done by making the outputs high/low switching power to the chip and when finished, making the outputs into inputs putting them into a high impedance state. Doing so prevents the next chip in line from parasitically powering the previous via the data lines.

The initial concept for the ardubatch came about when a need arose for programming a lot of AVR chips. There aren’t any or many ISP batch programmers out there, least of all cheap.

This project started off with simple ZIF socket programmers via a 6 pin ISP header. Next, an arduino was used to provide power to each ZIF socket. The atmega8 can provide up to 40mA per pin and considering the USBASP can only program 1 chip at a time, only 1 chip will be active at any one point and considering 1 chip may only draw 7-10mA, it’s plenty.

This however had issues as flicking between each programmer, parasitic power was being fed back and forth corrupting the programming process.

This was fixed by turning the outputs into inputs between each chip being programmed, this prevented any parasitic power from being fed backwards between the ISP pins.

The batch programming occurs via a batch file on the host computer. The batch file first opens the com port to the arduino and via serial comms, sets the arduino to power a chip. The USBASP then programs the chip, when completed, the batch file then removes power to the chip, turns the outputs to inputs, waits a second for power/capacitors to drain before repeating the process with the next chip.

Constructing and designing the board was relatively easy. The stock USBASP circuit was used with a few modifications, namely, removing the need for self programming as there is a separate ISP header and removing the slow clock header also as the clock speed is handled via the “-B” tag in avrdude

Initial testing was a little sketchy, the USB ports were somewhat flaky but I think it was down to using coiled usb cables and a poor USB extension lead which I think has affected communication.

For serial comms, a CH340T was used however, a design consideration will be made for future models to replace it with a CH340G which is cheaper, easier to get supply and fewer pin count.

The arduino uses it’s own internal 8mhz clock source with a modified bootloader and arduino boards.txt to allow for programming. This choice was made to reduce part count as it is not necessary or time critical for the arduino.

Improvements in the future may try and reduce the trace length of the USB comms as it can be a little flaky but fine so long decent cables are used.

There is one error in the silk screen for the LED display, The USBASP Power and Busy led silk screen is the wrong way round giving inccorrect indication but not a massive issue.

The arduino program needs further work to include all 9 of the ports as currently, only the first 3 are supported.

I have several boards available and will be soldering them up in due course should anyone wish to try one out, drop me a PM

Cool! That's an idea. For batch firmware upload, I designed a jig with pogo sticks for programming. Your design (target) has 4 mounting holes. Design a second board with the same mounting hole placement, and the same 2X3 header location so this board can program targets with this 2X3 header. You then mount this programmer on a stand with the 4 mounting holes and stand off so your target board can slide down the standoffs and make contact with programmer's pogo sticks. Then press a button to start programming. Have a buzzer on the programmer to indicate completion.