It's controlled by an 8051 (actually developed using a Dallas DS5000) and should work with most variants, since it doesn't use any special features. I hope it won't be too difficult to modify for use with an 8031 (external ROM) or one of Don's DT103 Simmsticks.
It has been (slightly) tested on an AT90S1200A-16PC and an AT90S8515-8PC, using Jon Anders Haugum's avrp programmer driver for Linux and Atmel's aprogwin under MS-Windows 95.
This design is far from finished - although it works for me as presented, there are various changes I want to make to both hardware and software. It would probably be a bad idea to spend a lot of time designing a PCB for it in this form.
There are absolutely no guarantees regarding the fitness of this programmer for purpose : if it doesn't work, you have the software and the circuit - fix it. But please tell me what you fixed. Suggestions for improvements are welcome and will be dealt with in my copious free time.
E&OE, YMMV, etc. etc.
AVRs are connected to the programmer through ZIF sockets (one 40 pin and one 20 pin). It's obvious that the serial interface can be brought out for in-system programming (and there wouldn't be a lot of point in having it without such a connection) but this needs to be used carefully at present as it's 5V only and might damage a 3V target system. I intend to buffer this interface to make it safer before I use it much.
Note that Atmel suggest that a serial / parallel programmer should operate in parallel mode when addressed using their protocol and make no suggestions as to how serial mode should be selected. This programmer starts in parallel mode but may be switched into serial mode with the command string 'mSS', or back into parallel mode with 'mPP'. Since this feature doesn't conform to the Atmel spec, it may well have to be removed : I don't recomend that driver software should be changed to make any use of it. Create a script for your favourite comms program if you want to use this option.
My prototype is handwired on groundplane matrix board and the complexity is well within the scope of this method : the components are an 8751, crystal, MAX232, power supply, a TL431 regulator and a handful of discrete components. In the short term, I'll describe this circuitry with a few tables and ASCII diagrams : eventually, I hope I'll add a PostScript circuit diagram.
Connections from 8051 to programmer hardware (standard 8051 connections such as power, ground, reset, xtal are not listed). Various bits of the source code assume that an 11.0592MHz processor crystal is used - the critical parts are in the uart and timer setup areas, and most of the timeouts defined in the programming spec rely on these - but there may be odd exceptions, especially if you use one of the really fast (reduced-clock-division) 8051 replacements.
8051 pin Target 20 pin socket Target 40 pin socket 1 P1.0 12 pb0 1 pb0 2 P1.1 13 pb1 2 pb1 3 P1.2 14 pb2 3 pb2 4 P1.3 15 pb3 4 pb3 5 P1.4 16 pb4 5 pb4 6 P1.5 17 pb5/mosi 6 pb5/mosi 7 P1.6 18 pb6/miso 7 pb6/miso 8 P1.7 19 pb7/sck 8 pb7/sck 10 P3.0 RXD (rs232 input driver - MAX232 or similar) 11 P3.1 TXD (rs232 output driver - MAX232 or similar) 12 P3.2 3 rdy/bsy 11 rdy/bsy 13 P3.3 5 xtal1 19 xtal1 14 P3.4 (set low to enable VPP/reset supply) 15 P3.5 (set low : Vpp = 12V; set high : Vpp = 5V) 16 P3.6 (reserved for use as a write line) 17 P3.7 (set low to enable 5V VDD supply) 21 P2.0 6 oe 12 oe 22 P2.1 7 wr 13 wr 23 P2.2 8 bs 14 bs 24 P2.3 9 xa0 15 xa0 25 P2.4 11 xa1 16 xa1The VDD control only needs to provide a 5V supply when P3.7 is at 0V - I wired it like this :
2n3906
5V supply ----+-----e c-------+----- 47R ----------- To Vdd
| b | 20-pin skt pin 20
10k | 27k 40-pin skt pin 40
| | |
P3.7 ---------+--10k--+ |
| +-------------- To Gnd
| | 20-pin skt pin 10
| | 40-pin skt pin 20
| |
gnd gnd
The VPP control should be
2n3904
15V supply ---+-------c e----+------+----+-- 47R -- To Vpp / rst
| b | | |
1k2 | 100p 27k | 20-pin skt pin 1
| | | | | 40-pin skt pin 9
+---------+ +------+ |
| | | |
c c | |
P3.4 --10k--b TL431 r----+------+ |
e a | | |
2n3904 | | | 27k 1k
| | | | |
| | | | |
gnd gnd | gnd gnd
|
+---15k----+
1n914 | |
P3.5 ----------|<|--+-- 15k ---+
Almost none of the above components are critical : they're selected on
the basis of what was in my junkbox. The only exceptions are the ratios
of the resistors (27k and 7k5) around the TL431, which set the 5V and
12V levels. This circuit will provide a more accurate 5V level than it
does a 12V level, but neither appears to be particularly fussy.
(A TL431 is a shunt regulator which acts to maintain 2.5V at it's
reference terminal .. a zener with an external feedback loop.)
Please note that spam (unsolicited advertising matter) is not welcome and will incur an unspecified processing charge dependent on the cost of recovery. Any such mail sent to this address acknowledges acceptance of these conditions.