Take What You Know
My old high school algebra teacher Mr. Harder was a pretty interesting guy -- and I mean that in many different senses of the word. But he had a few phrases that have stuck with me over the years and one of them is "use what you know to find out what you don't know."
Of course, he was talking about math, but I find a lot of application for that saying in embedded systems. For example, consider how a lot of A/D converters work. You charge up a capacitor until a comparator tells you that you are at the same voltage as the input. So now what do you know? You know how long it took to charge the capacitor. Turns out computers are lousy at measuring voltage but great at measuring time so score one for Mr. Harder.
That's an obvious example, of course. But I am always surprised at how many times I see designs using a larger (and more expensive) chip just to get a few extra I/O pins. Unless you have very stringent requirements, you can usually find a way to squeeze some extra out of your CPU.
For example, I often put switches (with a resistor) on the same line as an LED. I can switch the LED pin from an output to an input on a fast interrupt to keep the LED bright enough and still sample the input. Sure, when you push the button, the LED turns on (that's a feature!). But on the plus side, the LED's average power consumption goes down.
Another great trick is when you need a lot of buttons and you aren't worried about reading them "slowly" (after all, how fast can people push buttons?). Most of the CPUs I use these days have some analog channels on them and it isn't unusual to have one or more that I'm not using (or, at least, not using as analog inputs). You can make a voltage divider network with multiple resistors so that when a button is pushed, you get a different voltage. Read the analog voltage and you can detect which button is pushed.
In theory, you could hook up a ridiculous number of buttons like that. In real life, you have to pick cheap resistors and keep the ratios far enough apart. But you can still get a pretty amazing number of switches on one pin like that.
And it isn't just discrete inputs you can apply this maxim to. Consider Microchip's AN828. This clever application note shows how to measure temperature with no extra parts by noting changes in the watchdog timer period due to temperature.
Mr. Harder would be pleased.