Inexpensive but powerful 8- and 16-bit microprocessors like the Rabbit, AVR, Intel 8051, and the PIC microcontroller are widely used as embedded devices in cars, printers, digital cameras, telephones, and toys. The popularity of the PIC may be attributed to the strong support by the manufacturer for individual users, which makes it important not only commercially, but as a learning tool. However, there are many other microcontrollers that may be more suitable for a given task. These books describe how to program and build devices using various microcontrollers, and differ widely in their style and approach.
Designing Embedded Hardware, 2nd ed.
by J. Catsoulis
2005 (377 pages) This is a general introduction to digital hardware, with chapters on the PIC, AVR, MAXQ, and two popular processors from Motorola (now called Freescale), the 68HC11 and the 68000. Since it's an O'Reilly book, it also has to have some programming information in it. For this, the author inexplicably chose Forth, a language that has been dead for many years. Once described, Forth is never used in the rest of the book (probably because it is, after all, dead).
Although the writing style is very informal and easy to read, it's full of annoying politically-correctisms. The book tries to be an overview of the topic, but ends up losing its focus. The reader soon discovers that only a handful of microcontrollers are mentioned, and the section on controllers doesn't start until page 258. The first 2/3 of the book is filled with introductory material about components, how to use assembler, how to solder, and a few tips on PCB layout. From this modest background, the reader is expected to suddenly be able to grasp the functions of address strobes and DMA control signals in the MC68000. This is quite a jump. Likewise, the author assumes that the reader is unfamiliar with concepts such as "RAM", yet a few pages later dives into assembly language programming--for two processors simultaneously. Since the book only describes a handful of microcontrollers, a tiny number of discrete components, and two programming languages (omitting C entirely), it also misses the mark to some extent as an overview. The information about the controllers that are covered is highly selective, with only 18 pages devoted to the PIC and 14 pages for the 68k. The book tries to be everything for everyone, and in this the author has set for himself an impossible task.
On the other hand, the book does contain much useful introductory information on communicating with microcontrollers. The best part of the book is its brief chapters on how to implement various communication protocols, including RS-232/422, IrDA, I2C, USB, Ethernet, and Motorola's SPI. There is also a chapter on various sensors. In fact, a more accurate title of this book would have been "Interfacing with Embedded Hardware" (or, adopting the author's P.C. style, "How She, the Engineer, Can Interface Her Devices With Her Embedded Hardware." On second thought, maybe not.)
Last but not least, the book is badly produced. Even though it was published last year, the pages started falling out of my copy well before I finished reading it.
Analog Interfacing to Embedded Microprocessors: Real World Design, 2nd ed.
by S. R. Ball
2004 (322 pages) This book is the exact opposite. Ball is an engineer who focuses precisely on what needs to be said, and what the reader needs to know to interface with embedded processors. [not finished]
PIC Microcontroller: An Introduction to Software & Hardware Interfacing
by H.W. Huang
(790 pages + CD) This is the most professional of the three PIC books I looked at and dives right into the architecture and assembly language programming, followed by tutorials on C language processing, programming interrupts, and I/O via the parallel ports. The audience seems to be electrical engineers who have little programming experience but are familiar with concepts such as banks, registers, and stacks. There are chapters on programming the USART and serial interface, integrated ADC, the Controller Area Network, and external memory. The emphasis is almost exclusively on the software programming aspects of the PIC. Topics such PicBASIC, which is not really useful in real-world applications, are ignored. Although the book's description mentions applications such as analog-to-digital conversion and temperature, humidity, and pressure sensors, the circuits for these applications are minimal and incomplete. Huang assumes that users will either use the Shuan-Shizo demo boards or have the necessary EE expertise to design and build their own circuits using the chip. On the other hand, for programmers experienced in dealing with registers and interrupts, much of the discussion on how to write programs seems unnecessary and basic. Many readers will be frustrated by the apparent assumption that a completed hardware device containing a PIC will materialize from nowhere. The book contains a CD with source code listings of the author's programs and datasheets for each of the bewildering variety of PICs, but doesn't contain any compilers or debuggers.
Pic Microcontrollers: An Introduction to Microelectronics, 2nd ed by M. Bates
(372 pages) This book is the exact opposite. As the back cover says, it assumes no knowledge about microprocessors or programming. After describing the PIC, the author goes through the complete design cycle from flow chart, block and circuit diagram, component layout, programming, to code documentation (which, as all programmers know, is always done last to ensure their continued employment). The projects, which include digital thermostat and motor controller, may not be exciting, but they are informative and well described without torturing the English language as some other books do. The book contains 43 pages of PIC data sheets in the back.
Programming and Customizing PICmicro Microcontrollers, 2nd ed by M. Predko
(1184 pages + circuit board) Although this book provides a lot of information about the PIC microcontroller, it is marred by excessive nannying by the author. There are repeated warnings about not electrocuting yourself and not burning your house down with all the dangerous electricity. The author, a Canadian, warns us not to tell obscene jokes, because these are "illegal in many jurisdictions." He is also embarrassingly politically correct in many places, cramming "she" and "her" as supposedly gender-indeterminate pronouns into any sentence that will take them. Have we really fallen so low that it is now illegal to tell jokes? Whatever happened to the days of "If you fall down and break both your legs, don't come running to me"? As someone once said, if George Orwell were alive today, he'd turn in his grave ... oh no, is that the Joke Police pulling into my driveway? Guess I'm busted (whoops, a sexual innuendo) ....
This is the book to get if you need lots of handholding. The author makes no assumptions about the reader's ability or intelligence, or absence thereof. There are complete circuit diagrams and parts lists for every circuit. Engineers may sneer at the enormous overkill in the idea of using a PIC to turn an LED on and off, but engineers are not likely to read this book. In fact, because of its verbosity, very few people (including me) are likely to ever read this book cover to cover. It doesn't matter, because the main value of this book is to pull you out of the mud if you get stuck on some aspect of the PIC due to lack of experience, lack of background knowledge, or innate stupidity.
The book contains a small, unpopulated circuit board, which has no use by itself, but is mainly there for its psychological value of convincing the reader that the PIC is real and accessible. Projects include an ultrasonic range finder, digital thermometer, serial port interface, analog-to-digital converter, and a fan speed controller. Not exactly state of the art projects, but enough to give a beginner a firm understanding about how to use the PIC. The photos of the completed boards show the author's god-awful construction techniques. But the purpose isn't to make beautiful boards using the latest surface mount technology, but to quickly make something temporary using a breadboard in order to gain experience. Even so, if you're already experienced with assembly language programming and microprocessor circuit board design, you'll probably hate this book, even if you have to refer to it many times.
C Programming for Microcontrollers Featuring ATMEL's AVR Butterfly
and the Free WinAVR Compiler
by Joe Pardue
(298 pages + CD)
This very well done book contains a CD with everything needed to edit, compile, simulate, and download programs into the ATMEL Butterfly evaluation board. The instructions and circuit diagrams are complete and the projects actually work. The only problem I had with this book was that the some of the parts numbers are wrong, and I ended up with a few wrong components. An excellent way to learn how to use the AVR.
Embedded Systems Design Using the Rabbit 3000 Microprocessor
by K. Hyder and B. Perrin
(458 pages + CD) Very popular book on the Rabbit 3000. The Rabbit seems to be positioning itself as a processor for embedded Web servers, which have become ubiquitous in printers. Rabbit tools tend to be more expensive. [not finished]
Programming and Interfacing the 8051 Microcontroller in C and Assembly
by S. Yeralan and H. Emery
(426 pages) Don't misunderestimate the 8051 just because it's been around since the age of the dinosaurs. It's still a widely-used processor. Many brand new chips (such as the Chipcon CC2431) contain an on-board 8051, which the designer may have to interface with or reprogram. This hard-to-find book uses Rigel's free Reads51 Integrated Devlopment Enviroment, which can be downloaded from their website. This distinguishes this book from some other books that require the purchase of expensive compilers. Contains many complete circuit diagrams, scope tracings, parts lists, and program fragments. Sections include assembly language programming, assembly language techniques, C language programming and hardware experiments, and building an 8051-based microcontroller system. Has an appendix on C language programming. [not finished]