Got a dual 1284P board assembled!
I'll post a price shortly if anyone wants to buy, will offer as kits and assembled boards.
Features:
4 hardware serial ports, with RS232 buffers for all, jumper selectable, with 3-pin headers for all.
64 IO Ports with Signal, Power, Gnd at each pin.
5V regulator with power LED, with Vraw, Vin, 5V on power headers.
Separate ICSP headers.
Separate FTDI Basic headers for dual USB connections.
Separate I2C connections with pullup resistors.
Selectable DTR connections.
Activity LEDs on D13 for each.
Lots of options for chip to chip connections.
And 128K flash, 16K SRAM, and 4K EEPROM for each device.
One little error - got Rx/Tx swapped on the FTDI header, so a little jumper cable is needed to swap the pins. Can't believe I did that.
I'm struggling to think of a use case where this (dual chip avr board with two of the same chips) makes sense - what was the motivation behind these dual-avr boards?
Struggle away - someone will come up with a use. LarryD already suggested it for 32-pin cable tester on another topic.
Who knows when 2 chips with 16K SRAM might be handy - one for processing lots of IO, one for displaying it on a large TFT display or something.
I have 1284Ps on the card pictured, the standard eagle symbol I think shows 644, I just hadn't changed the "value" field to make it 1284P yet. The board will accept any of the 164, 324, 644, 1284 chips at either location.
I can see one good use for people that use ATMega for TV & VGA output
With VGA @ 640x400 / 60hz / 16MHz, the processor is working hard just to keep the picture constant
Since the 1284 has the highest ram of any 8Bit ATMega it is perfect for VGA
A second processor is a good example of how one uP can be used to handle maths functions taking a lot of effort away from the video uP
There are many uses for dual [and higher-count] processor arrangments. If you think of the typical program as being composed of 3 main parts:
INPUT --> PROCESSING --> OUTPUT
then, depending on what you are actually doing, you can allocate the 3 blocks in different ways. Eg, if there's a lot of real-time and especially interrupt-driven I/O, then that can be done on one processor, and the mainstream PROCESSING block, where you might not want it being constantly interrupted, computed on the other processor. Any kind of signal or graphics processing fits in here.
You can think of this in terms of the higher-processor is doing "more abstract" computations, so you're dividing the tasks along the lines of functional-abstraction. Very similar to modular software coding in general, except doing it with hardware.
Also, on my robots, I am doing similar. I am stacking single-processor boards, actually Teensy3.1 on top of mega1284, where the 1284 does the low-level sensor and motor processing, and the Teensy is doing navigation, specialized sensor processing, &etc.