Файл: C Programming for microcontrollers (Joe Pardue, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.06.2025

Просмотров: 2432

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Figure 35: Sine Wave Figure 36: Square Wave..............................................

231

Figure 37: Triangle Wave Figure 38: Sawtooth Wave ...................................

231

Figure 39 Butterfly Menu....................................................................................

253

Figure 40: Cheap soldering iron, solder and wick from JAMECO.....................

276

Figure 41: Seasoning the tip................................................................................

276

Chapter 1: Introduction

Chapter 1: Introduction

C Programming and microcontrollers are two big topics, practically continental in size, and like continents, are easy to get lost in. Combining the two is a little like traipsing from Alaska to Tierra del Fuego. Chances are you’ll get totally lost and if the natives don’t eat you, your infected blisters will make you want to sit and pout. I’ve been down this road so much that I probably have my own personal rut etched in the metaphorical soil, and I can point to all the sharp rocks I’ve stepped on, all the branches that have whacked me in the face, and the bushes from which the predators leapt. If you get the image of a raggedy bum stumbling through the jungle, you’ve got me right. Consider this book a combination roadmap, guidebook, and emergency first aid kit for your journey into this fascinating, but sometimes dangerous world.

I highly recommend that you get the book, ‘The C Programming Language – second edition’ by Kernighan and Ritchie, here after referred to as K&R. Dennis Ritchie, Figure 1, wrote C, and his book is the definitive source on all things C.

Figure 1: Dennis Ritchie, inventor of the C programming language stands next to Ken Thompson, original inventor of Unix, designing the original Unix operating system at Bell Labs on a PDP-11

11

Chapter 1: Introduction

I have chosen to follow that book’s organization in this book’s structure. The main difference is that their book is machine independent and gives lots of examples based on manipulating text, while this book is machine dependent, specifically based on the AVR microcontroller, and the examples are as microcontroller oriented as I can make them.

Why C?

Back in the dark ages of microprocessors, software development was done exclusively in the specific assembly language of the specific device. These assembly languages were character based ‘mnemonic’ substitutions for the numerical machine language codes. Instead of writing something like: 0x12 0x07 0xA4 0x8F to get the device to load a value into a memory location, you could write something like: MOV 22 MYBUFFER+7. The assembler would translate that statement into the machine language for you. I’ve written code in machine language (as a learning experiment) and believe me when I tell you that assembly language is a major step up in productivity. But a device’s assembly language is tied to the device and the way the device works. They are hard to master, and become obsolete for you the moment you change microcontroller families. They are specific purpose languages that work only on specific microprocessors. C is a general-purpose programming language that can work on any microprocessor that has a C compiler written for it. C abstracts the concepts of what a computer does and provides a text based logical and readable way to get computers to do what computers do. Once you learn C, you can move easily between microcontroller families, write software much faster, and create code that is much easier to understand and maintain.

Why AVR?

As microprocessors evolved, devices increased in complexity with new hardware and new instructions to accomplish new tasks. These microprocessors became known as CISC or Complex Instruction Set Computers. Complex is often an understatement; some of the CISCs that I’ve worked with have mind-numbingly complex instruction sets. Some of the devices have so many instructions that it becomes difficult to figure out the most efficient way to do anything that isn’t built into the hardware.

12


Chapter 1: Introduction

Then somebody figured that if they designed a very simple core processor that only did a few things but did them very fast and efficiently, they could make a much cheaper and easier to program computer. Thus was born the RISC, Reduced Instruction Set Computers. The downside was that you had to write additional assembly language software to do all the things that the CISC computer had built in. For instance, instead of calling a divide instruction in a CISC device, you would have to do a series of subtractions to accomplish a division using a RISC device. This ‘disadvantage’ was offset by price and speed, and is completely irrelevant when you program with C since the complier generates the assembly code for you.

Although I’ll admit that ‘CISC versus RISC’ and ‘C versus assembly language’ arguments often seem more like religious warfare than logical discourse, I have come to believe that the AVR, a RISC device, programmed in C is the best way to microcontroller salvation (halleluiah brother).

The folks that designed the AVR as a RISC architecture and instruction set while keeping C programming language in mind. In fact they worked with C compiler designers from IAR to help them with the hardware design to help optimize it for C programming.

Since this is an introductory text I won’t go into all the detailed reasons I’ve chosen the AVR, I’ll just state that I have a lot of experience with other microcontrollers such as Intel’s 8051, Motorola’s 68xxxes, Zilog’s Z’s, and Microchip’s PIC’s and I’m done with them (unless adequately paid – hey, I’m no zealot). These devices are all good, but they require expensive development boards, expensive programming boards, and expensive software development tools (don’t believe them about the ‘free’ software, in most cases the ‘free’ is for code size or time limited versions).

The AVR is fast, cheap, in-circuit programmable, and development software can be had for FREE (really free, not crippled or limited in any way). I’ve paid thousands of dollars for development boards, programming boards, and C compilers for the other devices, but never again -- I like free. The hardware used in this text, the ATMEL Butterfly Evaluation Board can be modified with a few components to turn it into a decent development system and the Butterfly and

13

Chapter 1: Introduction

needed components can be had for less than $40.00 (See Appendix 1 Project Kits). You can’t get a better development system for 10 times this price and you can pay 100 times this and not get as good.

Okay, maybe I am a zealot.

Goals

What I hope to accomplish is to help you learn some C programming on a specific microcontroller and provide you with enough foundation knowledge that you can go off on your own somewhat prepared to tackle the plethora (don’t you just love that word, say it 10 times real quick) of microcontrollers and C programming systems that infest the planet.

Both C programming and microcontrollers are best learned while doing projects. I’ve tried to provide projects that are both useful and enhance the learning process, but I’ve got to admit that many of the early projects are pretty lame and are put in mainly to help you learn C syntax and methods.

Suggested Prerequisites:

You should be able to use Windows applications.

You should have an elementary knowledge of electronics, or at least be willing to study some tutorials as you go along so that you’ll know things like why you need to use a resistor when you light up an LED.

I’ve received lots of suggestions about what needs to be in this book. Some folks are adamant that one must first learn assembly language and microcrocontroller architecture and basic electronics and digital logic and bla bla bla before even attempting C on microcontrollers. I politely disagree and say that you should just jump right in learn whats fun for you. You’ll run across lots of stuff that you will want to learn about, but I won’t cover in the book so you should be able to bracket your ignorance (and mine) making a note when you hit something you don’t know but would like to. Then you can learn it later. I’m using lots of things that aren’t directly relevant to C programming (like communicating with a microcontroller from a PC using a serial port or like what the heck is that transistor motor driver thingee…). If you get really curious, then GOOGLE for a tutorial on the topic.

14


Chapter 1: Introduction

By the time you complete the text and projects you will:

Have an intermediate understanding of the C programming language.

Have a elementary understanding microcontroller architecture.

Be able to use the WinAVR and AVR Studio tools to build programs.

Be able to use C to develop microcontroller functions such as:

o Port Inputs and Outputs o Read a joystick

o Use timers

o Program a Real Time Clock o Communicate with PC

o Conduct analog to digital and digital to analog conversions o Measure temperature, light, and voltage

o Control motors o Make music

o Control the LCD

o Flash LEDs like crazy

On the CD you will find the ATMEL ATMEGA169 data book. At 364 pages, it is the comprehensive source of information for the microcontroller used on the AVR Butterfly board. Open it on your PC with Adobe Acrobat and look around a bit: intimidating isn’t it? But don’t worry; one of the purposes of this text is to give you enough knowledge so that you can winnow the wheat from the chaff in the data book and pull out what you need for your C based control applications.

I know how easy it is to get bogged down in all the detail and lose momentum on this journey, so we’ll begin with the ‘Quick Start’ chapter by learning only enough to make something interesting happen: kind of a jet plane ride over the territory. Then we will proceed at a comfortable pace from the simple to the complex using as interesting examples as I can come up with. I’m partial to LEDs so you are going to see a lot of flashing lights before we are through, and hopefully the lights won’t be from you passing out from boredom and boinking your head on the keyboard.

15


Chapter 2: Quick Start Guide

Chapter 2: Quick Start Guide

The purpose of this quick start guide is to help you modify the Butterfly hardware so you can use it as a development board and to show you how to use the FREE software for writing and compiling C code and downloading it from your PC to the Butterfly.

The AVR Butterfly is an evaluation kit for the ATMEGA169 microcontroller that was custom designed with an AVR core and peripherals to make it both a generalpurpose microcontroller and an LCD controller. This little board is by far (at this writing) the lowest cost system for learning and developing that I’ve ever seen. I don’t know how much these things cost them to make, but Digi-Key (www.digikey.com) sells them for $19.99 (Spring 2005), which has to be a real loss leader for ATMEL (www.ATMEL.com). But their loss is our gain, and I’m sure they are happy to prime-the-pump a little, knowing that we’ll get hooked on the AVR and buy lots of their product.

It is simply amazing what the Butterfly has built in:

100 segment LCD display

4 Mbit (that’s 512,000 bytes!) dataflash memory

Real Time Clock 32.768 kHz oscillator

4-way joystick, with center push button

Light sensor

Temperature sensor

ADC voltage reading, 0-5V

Piezo speaker for sound generation

Header connector pads for access to peripherals

RS-232 level converter for PC communications

Bootloader for PC based programming without special hardware

Pre-programmed demos with source code

Built-in safety pin for hanging from you shirt (GEEK POWER!)

Kitchen sink.

I mean this thing has everything (except a kitchen sink… sorry). If anyone can find a development platform with anywhere near this much for this price, I want to hear about it. And, no, I don’t own stock in ATMEL, or work for them, I just

17

Chapter 2: Quick Start Guide

couldn’t find anything that comes close to this system for my goal of teaching C programming for AVR microcontrollers (or any microcontrollers for that matter). If I seem to be raving a bit, get used to it, I do that a lot.

There are sufficient instructions on the AVR Butterfly box to show you how to use all the built-in functions. Play with it now before you risk destroying it in the next step. Don’t say I didn’t warn you. If you break it, you’ll have to order a new one from Digi-Key (www.digikey.com). I shudder to think how many of these things will get burned up, blown up, stepped on, and drenched in coffee. And that’s just me this morning.

Note: in order to save you money, rather than selling you the Butterfly and the experiments kits, you will find a parts list (Appendix 1) so that you can buy this stuff directly from the vendors. But check my website: www.smileymicros.com, no telling what you’ll find. (Hopefully, not a ‘going out of business’ sale.)

If you purchased the e-book, you can download the WinAVR software from http://sourceforge.net/projects/winavr (this book uses version 20040404) and the AVRStudio software from the http://www.atmel.com web site. On the ATMEL website search for the AVRStudio version 4.11 (later versions may not correlate to this book). If, for some reason, these sites are not available (I can’t guarantee what they’ll do to their sites) look on the http://www.smileymicros.com website for updated information on how to get the software. If you purchased a hard copy of the book, you will find the software on the accompanying CD.

Don’t get bogged down in all the installation choices given, just accept suggested defaults so your installation will match this book. And, as an aside, by the time you install all this software, the WinAVR and the AVRStudio will have new and improved versions available on their web sites. DON’T USE THEM! This text is based on the versions on the CD or on the SmileyMicros.com web site and using the new and improved software may only confuse things. Of course, by the time you finish this text, you will be encouraged to get the latest and greatest, by then you’ll know all you need to use it wisely.

18