Looking for feedback: designing a Pro Mini form-factor board with the Mega1284P

I've done a couple of design revisions of an Arduino-compatible ATmega1284P board, the first one designed to fit in the "normal" (Uno/Leonardo/etc) form-factor (like the "Goldilocks" board), but today I was playing around with making one in the Pro Mini's form factor. I used the Pro Mini and SparkFun's Pro Micro as my references for pin assignment (other than the Pro Micro's maddeningly poor pin 3 assignment to GND instead of RST like it's supposed to be, which led to untold hours of debugging with the Mini USB Host Shield... but I digress...). Anyway, I tried to match up pins to the Pro Mini by their auxiliary functions as much as possible, but I ended up having to make a few changes.

  • The FTDI Basic header is connected to RXD0/TXD0, but the pins on the breadboard header (D0/D1) are connected to RXD1/TXD1, that way I can use both UARTs
  • The ATmega328P has SDA and SCL on analog pins, so the Pro Mini assigns them as A4 and A5, the ATmega1284P does not have them on analog pins, so I'm using D2 and D3 like on the Pro Micro
  • Rx/Tx LED's moved to C6 and C7, since I wasn't using those for anything
  • I've extended the board length to accommodate the additional I/O pins of the ATmega1284P... so kind of a "Mini-Mega" form-factor
  • I added JTAG and ISP headers, in addition to the FTDI Basic header.

Anyway, I just wanted to run my schematic by a few people and see whether or not I'd made any silly mistakes, or if there was anything in particular I could improve with the design, especially wrt the pin assignment I've chosen. I've attached my current schematic and my not-quite-completely traced PCB (I've kind of traced myself into a corner on the right-hand side, but I have a few ideas of what I can move around and to where, but I'll wait until I get some feedback on the schematic before I do any more work on the board). Any comments or criticisms are greatly appreciated.

What "board type" will you be using for pinouts? Or will you be making up your own?

I see a lot of unrouted traces.

You have 2 pins you are not bringing out at all? That is a waste. Especially as they are PWM pins.

You have 2 pins just driving onboard LEDs? That is a waste. That's 4 IO that you've taken away.

Add a diode from RST/ (anode) to +5 (cathode) to prevent any spikes from looking like the start of a high voltage programming cycle, with results in the chip looking like it's hung.

Perhaps take a look at my 1284P surface mount variant to see how all the IO was assigned.
No onboard regulator, figuring to run on 3 AA batteries or similar, or 5V wallwart. ICSP header for bootloading and FTDI header, generally thinking offboard USB/Serial for debugging.
All 32 IO available, with lots of ground connections if desired.
(D1 missing from the picture, didn't have proper sized diode on hand when we took the picture.)
http://www.crossroadsfencing.com/BobuinoRev17/

CrossRoads:
What "board type" will you be using for pinouts? Or will you be making up your own?

I'll be making my own board definition.

CrossRoads:
I see a lot of unrouted traces.

Yeah, I traced myself into a corner a bit, but typically when I do that, I need to step away for a bit and come back to it so I can see where things can be moved. I figured in the mean time I'd seek feedback on the schematic end of things in case I'd done anything really stupid and needed to change something major. No point going to the trouble of moving the traces around if I was just going to have to go back and rip them all up again...

CrossRoads:
You have 2 pins you are not bringing out at all? That is a waste. Especially as they are PWM pins.

You have 2 pins just driving onboard LEDs? That is a waste. That's 4 IO that you've taken away.

"Waste" is relative. 4 I/O pins out of the 32 available is not a huge deal. I'm more interested in the large Flash and SRAM on this chip. I made the intentional design choice of sticking to a standard 0.6" DIP-32 footprint so I can use this in a breadboard or standard socket, and I didn't want to go up to the next standard DIP size (DIP-40). I could, of course, add the extra pins in the middle of the board like the A4/A5 pins on the Pro Mini, or the PORTA pins on the Teensy++ 2.0, but personally, I don't like doing that, and I know if I did, I'd never populate those headers. If I really want all of the I/O's I'll go with a Goldilocks or a Bobduino or something else in a larger form factor.

CrossRoads:
Add a diode from RST/ (anode) to +5 (cathode) to prevent any spikes from looking like the start of a high voltage programming cycle, with results in the chip looking like it's hung.

I haven't seen this done in any of the AVR board reference schematics I've looked at, Arduino or otherwise, but for the cost of a diode it couldn't hurt.

I haven't seen this done in any of the AVR board reference schematics

Really? Where were you looking? The diode is clearly seen:

I say "waste" because PWM pins always seem to be at a premium. If you're after SRAM instead and specific size, I can appreciate that too.

CrossRoads:
Really? Where were you looking?

Hmm... guess I didn't look closely enough last time I checked the full-size Arduino schematics. The Pro Mini and Micro don't have it.

I say "waste" because PWM pins always seem to be at a premium. If you're after SRAM instead and specific size, I can appreciate that too.

I may rethink the PWM pins. I'll have to consider my options.

After a bit more looking into it, I decided to go with the Goldilocks pinout instead of what I had previously, so I should be able to mostly just use that board definition. I made one change so that D[0..4] is RXD1, TXD1, SCL, SDA, instead of RXD0, TXD0, RXD1, TXD1 like the Goldilocks has it. For the Rx/Tx LED's, I lose the external timer/counter inputs, the divided system clock output, and the USART0 clock input, but I can live with that, and I cut it down to a DIP-28 footprint, so that's nice. The one unfortunate thing is that there's no way to fit the chip inside a 0.6" wide footprint with room for silkscreen without switching to QFN, and I don't want to do that, but I'll live with missing silkscreen on the middle few pins, and I'll just copy all of the pin names to the bottom silkscreen as well, so at least they're marked somewhere on the board.

I made one change so that D[0..4] is RXD1, TXD1, SCL, SDA, instead of RXD0, TXD0, RXD1, TXD1 like the Goldilocks has it.

Just curious about the physical pin to software pin mappings:

If RxD1 and TxD1 are D0, D1, and SCL/SDA are D2, D3,
then RxD0 and TxD0 become what D#s then?

Same for the other pins: RxLED, TxLED, TCK, TMS, TDO, TDI.

Not suggesting anything, just wondering.

Rx0 and Tx0 are going out to a separate FTDI header on the end of the board (like the Pro Mini), That way the FTDI UART and D0/D1 pins are separate signals. The JTAG pins go to a similar header, on the other end of the board. Those two headers will stick "up" from the board so as not to interfere with the two main rows of pins that are meant to insert into a breadboard or ZIF socket. If you look at my first post, you can see the two headers on the ends in the board pic. I've just shrunk it to be 2 pins shorter in length (removing Rx0/Tx0 from the main pin rows and connecting a secondary oscillator to TOSC1/2). RxLED/TxLED are currently not brought out to any external pins. I may end up connecting them to an external pad, since now that I've shrunk it to DIP-28, I could always backtrack to DIP-30 and add those extra 2 pins back (DIP-30 is a standard package, right?), then I'd have all of the I/O pins broken out except C6/7, which are connected to the 32kHz crystal.

Edit: Just realized you were asking about software mapping of pins. On the Goldilocks (which is what I'm basing my pinout off of), the I2C and JTAG pins don't seem to be assigned D#'s, they're just assigned signal names. I may be wrong, I'll have to look a bit more into the board definition files...

DIP-30 is a standard package, right?

IIRC 28 and 32 but not 30.


Rob

Graynomad:

DIP-30 is a standard package, right?

IIRC 28 and 32 but not 30.

Yeah, that sounds right now that I think about it. In that case I may stick with DIP-28, at the cost of those 2 I/O pins.