Code lends itself to unit-testing and refactoring because one can copy and paste at no cost. For electronics, to unit test, one way would be to write software, then replace a function with a piece of hardware that does the same thing. Refactoring would involve recreating a completed project on a breadboard with a duplicate set of parts (to test) and then modifying (to refactor). A good example of this is a voltage regulator or amplifier.

The aim (at least to begin with) is to build a simple controlled device, like a heater. Any system like this needs a number of components.


Start with a good goal, buy materials, then build.

Tools of production

Time spent refining your process is never wasted. These are the tools I use at the moment:

  • For PIC MCUs:
    • XC8 for compiling
    • a PicStart+ clone for programming pic16 MCUs (ZIF socket and ISCP) and a PicKit2 clone for programming pic16 and pic18 MCUs (ISCP only)
    • pk2cmd for uploading
  • For AVR MCUs:
    • avr-gcc and avr-objcopy for compiling
    • a USBasp clone for programming
    • AVRdude for uploading
  • For circuit design:
    • Eagle for drawing electronic circuits
    • ngspice for simulating circuits
  • GNU Make for managing compilation and writing of hex files.

How to choose the next project

There are many projects and limited time. Use the following guide (in order of priority):

  1. Prefer projects that build on previous projects
  2. Prefer new projects that enable multiple future projects
  3. Prefer projects that assist your career
  4. Prefer projects of commercial application

Beyond this, being interested is the best motivation.

Some ideas:

  • a process for circuit board creation
  • bayesian classifier + IP blocking for website attacks
  • control the position of one servo motor with another
  • WebGL fabric modelling
  • yet another pic programmer
  • ngspice tutorial