Designing Embedded Hardware

John Catsoulis

Mentioned 2

Embedded computer systems literally surround us: they're in our cell phones, PDAs, cars, TVs, refrigerators, heating systems, and more. In fact, embedded systems are one of the most rapidly growing segments of the computer industry today. Along with the growing list of devices for which embedded computer systems are appropriate, interest is growing among programmers, hobbyists, and engineers of all types in how to design and build devices of their own. Furthermore, the knowledge offered by this book into the fundamentals of these computer systems can benefit anyone who has to evaluate and apply the systems. The second edition of Designing Embedded Hardware has been updated to include information on the latest generation of processors and microcontrollers, including the new MAXQ processor. If you're new to this and don't know what a MAXQ is, don't worry--the book spells out the basics of embedded design for beginners while providing material useful for advanced systems designers. Designing Embedded Hardware steers a course between those books dedicated to writing code for particular microprocessors, and those that stress the philosophy of embedded system design without providing any practical information. Having designed 40 embedded computer systems of his own, author John Catsoulis brings a wealth of real-world experience to show readers how to design and create entirely new embedded devices and computerized gadgets, as well as how to customize and extend off-the-shelf systems. Loaded with real examples, this book also provides a roadmap to the pitfalls and traps to avoid. Designing Embedded Hardware includes: The theory and practice of embedded systems Understanding schematics and data sheets Powering an embedded system Producing and debugging an embedded system Processors such as the PIC, Atmel AVR, and Motorola 68000-series Digital Signal Processing (DSP) architectures Protocols (SPI and I2C) used to add peripherals RS-232C, RS-422, infrared communication, and USB CAN and Ethernet networking Pulse Width Monitoring and motor control If you want to build your own embedded system, or tweak an existing one, this invaluable book gives you the understanding and practical skills you need.

More on

Mentioned in questions and answers.

For someone wanting to learn the rudiments of embedded programming, what are some simple projects they could tackle?

We're talking about someone that does know the basics of electronic circuitry (resistors, capacitors, digital ICs, etc...) and can do basic soldering. An electronics hobbyist that is looking to get into embedded programming, or maybe a sophomore or junior in a EE college degree.

The platform doesn't really matter and neither does the language (it could be C or assembler or whatever). The point is to get ideas for a simple project that does something.

If there is a book covering something like that, could you post a link to it?

May be my title wording can be misleading, but this is what I'm trying to accomplish.

I have a plan to develop a multipurpose integrated machine (something like fully automatic washing machine... But does more than that)... It is going to have many moving and non moving parts which needs to be controlled by a chip / processor on the panel...

I know C# and could write the modules that takes care of the user input and controls the machine by issuing commands to it. But what should do on the machine side...

Say, suppose I want the machine to rotate Drum B for 30 Seconds... My C# code will be

Machine.Rotate(drumB, Direction.Clockwise, 30);

But How am I going to access the motor of the machine so that It can spin for 30 seconds...

Should I know "Embedded Systems" to do it or is there something else I need to learn.

Could you please help me out... If possible with the books / online material to start learning the same.


First, IMHO you must learn embedded systems for this kind of project, despite the tecnologies you may use. Thinking and programming in embedded systems is a bit different than thinking and programming for desktop computers.

The most important difference is the hardware resources (example, most of the times you will have limited disk and memory capacity, and the same for the processor). Other important difference is the software fault tolerance (it can be a little anoying if the driver gets stuck inside the car on the washing machine because the software chrashed...). There are other important points that you must look for (example, software-hardware co-design), but I think this 2 are really important ones and I think you must pay attention to them from the beggining of your project.

As an introduction to embedded systems, I would recommend you "Programming Embedded Systems: With C and GNU Development Tools" form Michael Barr (more software oriented) and "Designing Embedded Hardware" by John Catsoulis (hardware oriented). Of course, you can always check Wikipedia article as a starting point.

If you really want to use .NET, you have two options:

  • as has already been said, look for .NET Micro Framework. Take care that the .NET MF only works with a limited number of hardware (check this page);
  • other option is to buy an industrial panel (example of one here) or industrial computer, install Windows Embedded and program under standard .NET Framework. Beside this last advantage, the hardware is industrial, which means it is, for example, shock and water resistant, and has a number of inputs (USB, CAN, Ethernet, Serial, ...) that you can use with all the advantages of Windows programming.

Another option is to try other hardwares, but in that case you must use the libraries/APIs/frameworks the manufacturer provides for that hardware.

In order to you access your the hardware, you must use the available hardware inputs/outputs. For example, if you want to comunicate with a, let's say, stepper motor, you must check how you can comunicate with it. If the only way is by sending a PWM signal, you must find a way to do so. Two hipothesis:

  • if you are using a development kit with .NET MF, you must check if it can generate a PWM signal, otherwise you will probably need to write a device driver to do so;
  • if you are using a host computer as human interface connected to an external hardware (it can be connected through USB, Serial, ...), the hardware must be capable to receive messages from the host and generate the PWM signal (almost certainly you will a microcontroller on your hardware for this behaviours).

For both hipothesis, you can create a high-level framework with methods like the you one you presented that abstracts all the communication with the hardware. Also, @Daniel suggestion of callbacks is a really good one because it makes your framework more flexible (as an example, you can have different behaviours defined on the callback for each of the motors after it stops or before it starts).

As a final point, you must evaluate what do you really need for your project. If your project must be cheap, probably you will use a small hardware, but in that case you may, or may not, be able to use the .NET Micro Framework; if you can spend a little bit more money, maybe you can use a little more expensive hardware running Windows and in that case you can use even the standard .NET Framework.

Sorry for the big answer, but I hope it helps you on your choice(s)!

Realated tags