Thursday, 1/10/02

It is possible that I might be embarking on a major project sometime in the near future. If that is indeed the case, I want to do this project right. I was remembering some of my past experiences, figuring out the parts of the project-creation process that I think I've done wrong, and I came up with this little list. Now, I'm not normally a "daily affirmation" kind of guy, but I'm hoping that this bit of writing will give me some guidance as I take the plunge. Please excuse the sporadic capitalization. I know it gives it the flavor of one of those "WHY EINSTEIN WAS WRONG" manifestoes that you can pick up from some of the more scientifically-inclined vagrants on the Berkeley campus, but I was feeling emphatic.

How to do a project RIGHT:

On the oscilloscope: PLOT, DON'T PLAY.
It is okay to play around with parameters (component values, environmental variables, circuit configurations) at first, to develop a feel for their effects. But before making any design decisions, PLOT the effects of each of the parameters. On each plot, RECORD the values of all independent variables not under test. Examine the plots, and TAKE THE TIME to figure out what is responsible for the observed behavior and attempt to express it mathematically. If there are deviations from an ideal, TAKE THE TIME to experiment and determine the cause of the deviation, instead of just making an assumption.

When you need a filter: DESIGN IT RIGHT.
Don't just slap down a few R's and C's, or just average the last few samples. First determine the acceptable specs (passband ripple, transition width, stopband rejection), and do it with some method other than "pulling numbers out of your ass". FIGURE OUT the effects of the non-idealities (ripple, sinx/x droop, non-linear phase) and CALCULATE how much tolerance is acceptable. Follow the procedure to design a classic optimal filter. After implementation, TEST IT to see if it really meets the specs.

Even if the target platform is a battery-powered 8-bit microcontroller, develop the software in a HIGH-LEVEL LANGUAGE on a 1 GHz Pentium. Even if the anticipated requirements for glue logic are minimal, put a huge FPGA on the prototype board. If you don't know which of two chips or circuit configurations to use, use BOTH on the test board. Even if the final design will be completely custom, use off-the-shelf parts (chips, RTOS, software libraries) for non-critical components during the design phase. Don't get bogged down in implementation details when experimenting with high-level concepts and designs. GIVE YOURSELF FREEDOM.

If the observed behavior deviates from what was expected or calculated or simulated, even just a little bit, FIND OUT WHY. It may not be necessary to develop a mathematical description of the deviation, but the SOURCE must be tracked down. How much noise is on the signal, and where is it coming from? If you think it's thermal noise, pull out a hair-dryer and find out! If you think it's EMI, test the design in a grounded metal box. Power supply ripple? Don't just sprinkle bypass caps -- find out what part of the circuit is causing the current spikes. Signal ringing? Know which part of the circuit is filtering out the high frequencies or distorting the phase. Are transmission line effects coming into play? Is the observed deviation simply caused by the test equipment itself? TAKE THE TIME to figure out what's going on -- don't just pass off non-ideal behavior as "good enough".

If you think a problem might have been solved already, do a search. Use research papers, use textbooks. If you are entering unfamiliar territory in your design, TAKE THE TIME to read a book on the subject instead of trying to figure it all out on your own. If you are having difficulty with a software tool, take the time to read the manual.

If you need it and it'll fit in the budget, BUY IT. If you can't tell what the circuit is doing because you don't have the right test equipment, BUY IT. If you need a software tool or hardware part and somebody else has already made it, BUY IT. Don't try to make everything yourself. DON'T TRY TO MAKE EVERYTHING YOURSELF!!!

Keep a notebook. Record what happened each day, describe every problem encountered and how the solution was found. Write down ideas as they occur.

Don't let the project consume you. Find a recreational activity that you enjoy, and SCHEDULE time to do it. Find an activity that you can do with other people, and SCHEDULE time to do it.