C Programming for Microcontrollers Featuring Atmel's Avr Butterfly and the Free Winavr Compiler Paperback – Mar 1 2005
Customers Who Bought This Item Also Bought
No Kindle device required. Download one of the Free Kindle apps to start reading Kindle books on your smartphone, tablet, and computer.
Getting the download link through email is temporarily not available. Please check back later.
To get the free app, enter your mobile phone number.
Most Helpful Customer Reviews on Amazon.com (beta)
* Excellent value for money
* Excellent hardware available from author's website
* User-friendly style of writing
* Wide coverage of C - I am learning a lot
* CD ROM contains source code, data sheets, compiler, IDE and
terminal software, software for downloading code
* Friendly and responsive answers to questions via email
* Wide range of topics covered
* Sloppy editing - many typos and some fundamental errors
* Weakness in communicating concepts
* Needs to explain longer/detailed code/program examples step-by-step to fully explain concepts and so students grasp program functionality and AVR architecture clearly and confidently
* Has been rushed
Mr. Pardue has written an enjoyable book. His writing style makes it easy to get through somewhat technical subject matter. There are a range of fun and practical examples to experiment with. However, more detailed examples could be broken down further and explained, which from a pedagogical perspective would be more effective for students to fully grasp and feel confident with the inner workings of programming.
If Mr. Pardue writes a sequel covering more advanced C programming and AVR microcontroller concepts, especially detailed assembly language programming and AVR architecture, and effectively explains detailed code examples and AVR architecture step-by-step I will definitely buy it.
Possible features of the next book could include hardware hacking of the AVR Butterfly to access more ports, building circuits that take advantage of ICSP, robotics such as SONAR, infra-red communication, sound sensing , using other communication protocols like I2C etc, interfacing with compass sensor, interfacing with speech recognition and text-to-speech sysnthesis, interfacing with GPS, how to write and run different software other than the built-in code of the Butterfly (customised operating system), internet/networking.
This book, and the AVR Butterfly (~$20 at Digikey) are the best bargain you can get for getting started in Embedded programming and development. Together (the book, the AVR Butterfly and miscellaneous parts) form a complete development kit. AVR must be selling the kit for a loss to introduce their products. Buy it before they change their minds.
Although this is not a professional development kit, you will be able to do a lot. This is more like a cookbook to introduce you to the concepts and to enable to easily put a project together.
After reading through this and putting together the projects you will have the basics to understand more advanced books and enable you to design more advanced projects.
The one basic I thought the author left out that was important to include, was the C programming type qualifier "volatile". Volatile before a variable tells the compiler that a variable can have its value altered by agencies other than the program. For example you would use this when you are reading from a hardware address that is set by an interface. Otherwise the compiler may optimize the variable as a constant and not actually read the value from the hardware address on repeat iterations.
Code example: volatile int temp; Reads an 8 bit temperature code from a hadware address interfaced to a thermocouple.
So now you have it.
I found the book to be very readable, easy to understand and fun to read through.
As prerequisites for this I would recommend:
* Familiarity with the C programming language. For beginners:
I recommend the book "Practical C Programming". There are
many fine books to choose from.
* Knowledge of very basic circuits, and how to solder
* A very light knowledge of microprocessors. For
beginners: I recommend the book "Programming Embedded
Systems in C and C++", by Michael Barr. There are a few
other good beginner books to choose from.
For the beginner, this is a must have that will enable you to quickly get started and build introductory projects. If you are new to embedded programming and design I would highly recommend getting this book and the AVR butterfly.
Pardue's book is about two things: hardware, and software.
For hardware, Pardue commendably picked Atmel's Butterfly. It's a truly amazing and compelling miniaturized machine, guaranteed to mesmerize and puzzle anyone with a desire to learn microcontrollers. For less than the cost of a dinner, one can have the Butterfly, and for a song, download the free software to program it. Pardue's book is also reasonable in cost.
What makes the Butterfly come alive is a program, a compiled C program. And the software side of Pardue's book is centered around the C language. Briefly, the author takes you through the process of learning C, writing programs, compiling them, loading them on the Butterfly, and executing them. While C is a relatively "low level" read "simple", language, it is still complex and difficult to understand for beginners.
What makes this book a bad choice for the newbie? Well, you can't teach C and microcontrollers in 269 pages, period. Basically, the author's scope for the book is simply too ambitious. But don't misunderstand: Learning C with the Butterfly is a really good idea, it's just not practical in so few pages.
For example, a good C book covers mostly C, unsurprisingly. For instance, Prata's very good "C Primer Plus", is over 700 fairly concise, but beginner friendly, pages. (Granted, Prata's book covers more C topics than Pardue's book, but the comparison is still valid and compelling.)
Contrast that to Pardue's short 269 page book, that attempts to cover appx 700 pages of C, and at the same time, covers microcontrollers. Not gonna happen.
Then there's Pardue's chapter six, which is a prime example of the problem. Until this chapter, most example programs are short, if not just fragments. And for the most part, they are easy to understand, because Pardue takes the time to explain the program verbosely. Chapter six, to the contrary, slams you in the face with nearly six pages of solid code. While it's commented inline, there is little "direct" text explanation to augment the comments. I was limping when I got through the first five chapters, but chapter six blew me away. I fully expect the majority of true newbies will be blown away also. The remainder of the book has long programs, similarly lacking in adequate explanation.
Other reviewers have mentioned the author's poor grammar and typography, so I will not harp on it here. The author also attempts to inject humor in this dry technical subject, and mostly he succeeds. The reader will have to decide if his humor is appealing though.
Pardue does some things well. He gives adequate attention to guiding the newbie through putting the semi-kit-like Butterfly together, and introducing the compiler and Atmel IDE tools. For those unfamiliar with breadboards, those images will also be helpful. Pardue is obviously a gifted engineer, programmer and teacher, and many sections of text illustrate it well.
If you insist on buying the book and the Butterfly, here is my best recipe for success:
1. Buy and read another book on C first. I found "C Primer Plus" to be outstanding.
2. After you have a handle on the elementary aspects of C, then buy Pardue's book and the Butterfly, then get the errata and pencil in the numerous changes.
3. You should expect to read each chapter at least twice, and the chapters that cover the Butterfly will likely require more readings.
4. Type the code in yourself, as opposed to copying it from another source. Add your own comments to his, to reinforce your understanding.
5. I am sure you will need to refer back to your C book, when Pardue's book covers something in typical whirlwind manner.
There is one major mitigating factor to the negatives listed above. Joe Pardue, or "Smiley" as he is called on the avrfreaks forum, is a prolific poster and easily approachable online. He has a long track record of answering questions, many of them about his book. Regardless of whether you buy his book and Butterfly kit, do yourself a favor and google avrfreaks and check out the forum. I found it indespensible in deciphering the mystery that Atmel is.
As a side note, become aquainted with the open source hardware initiative "Arduino". The key attraction here is most of the hardware complexity is shielded by excellent library functions. These functions do things like drive output, read input, PWM, timers and serial work. The downside to Arduino is you are just "holding hands" with the hardware. The Butterfly requires "intimate" contact.
What many other reviewers here say about the text is true: a little bit of basic C is covered at the beginning, and then all of a sudden you're hacking away at Atmel's own code. If I knew how to hack up code like that, I wouldn't need to learn about it!
It's possible to teach from others' code, but the author misses opportunities to help newbies as they transition into the "AVR-GCC community" -- ALL the deprecated functions and macros that are included in the Atmel code are kept, and you're given NO clue as to what the new "proper" functions are! So if you don't understand something in the book, and you check the current AVR-libc documentation, you're even more lost from the mismatch between the two.
It's difficult and confusing to complete even basic projects with the material you *should* have been able to learn with this book. I have read through it twice and I still don't understand much of the book. I'd also like to note that unless you have a butterfly setup EXACTLY as the author has it setup -- which means having a specific OLD, OUTDATED GCC compiler setup (good luck getting that if you bought the book used or in PDF) -- none of the examples work at all: they're too entangled in little shortcuts and hacks that only work for the specific setup.
I'd appreciate if, in the next edition, the author threw out a lot of the fancy tricks and hacks and instead focused on providing a solid foundation on things like interrupt handling, comprehensive bit manipulations, etc. If I can figure all this out by myself before the next edition, however, I certainly won't be buying this -- or any other -- title from this author.
I think most readers will learn something from this book, but it is still a poor investment and not the best choice for those trying to learn microcontroller programming. Save your money and shop around.