Monday, December 28, 2009

Doing it wrong is progress

I spent a day working on the partitioning of the system, mapping functions to pins, and sketching the mechanical arrangement of the boards, display, touch panel, and radio.  System level design work.

There are a fair number of variables to consider.  A few of the more important ones:
  • Power. Where does it come in, what voltages and currents are needed, how does it get distributed.
  • Connectivity.  Do the boards stack, or connected via a cable. What side of the board should the connector be on. What signals are on each connector.
  • Compatibility.  Touch panel and RF both require special care in locating them in the system.
  • Pin allocation.  AVR controllers have a lot of special pin functions.  What is the best use of the pins to get the functions I need.
I juggled all that and more, and thought by the end of the day that I'd gotten it right.  But the next day, as I started to implement one of the boar designs, I realized I'd made two mistakes.  Not merely sub-optimal choices, but flat out broken.

In working on those errors, some other choices came tumbling down, no longer the best fit.  My core problem is that I am trying to design too optimally, too close to the edge.  For example, I needed to put one more function in an ATmega that was out of pins.  If I had chosen an ATxmega device, I'd have plenty of pins to work with.

The good news is that having done the system design once, the second iteration was a lot easier, and it is now a better, "rev 2", design.  But I worry that I may have missed something else, and I don't have time to juggle the system around repeatedly.

No comments: