Beruflich Dokumente
Kultur Dokumente
Computer Stuff Auto Stuff Electronics Stuff Science Stuff Home Stuff Stuffo Health Stuff Money Stuff Travel Stuff People Stuff Shop
In this article, we will look at microcontrollers so that you can understand what they are and how they
work. Then we will go one step further and discuss how you can start working with microcontrollers
yourself -- we will create a digital clock with a microcontroller! We will also build a digital thermometer.
In the process, you will learn an awful lot about how microcontrollers are used in commercial
http://computer.howstuffworks.com/microcontroller.htm/printable (1 of 23) [6/23/2005 11:19:19 PM]
Howstuffworks "How Microcontrollers Work"
products.
Background
If you are not familiar with digital logic, electronic
gates and wiring them together, then you will want to
read about them first:
What is a Microcontroller?
A microcontroller is a computer. All computers -- whether we are talking about a personal desktop
computer or a large mainframe computer or a microcontroller -- have several things in common:
● All computers have a CPU (central processing unit) that executes programs. If you are sitting at
a desktop computer right now reading this article, the CPU in that machine is executing a
program that implements the Web browser that is displaying this page.
● The CPU loads the program from somewhere. On your desktop machine, the browser program
is loaded from the hard disk.
● The computer has some RAM (random-access memory) where it can store "variables."
● And the computer has some input and output devices so it can talk to people. On your desktop
machine, the keyboard and mouse are input devices and the monitor and printer are output
devices. A hard disk is an I/O device -- it handles both input and output.
The desktop computer you are using is a "general purpose computer" that can run any of thousands
of programs. Microcontrollers are "special purpose computers." Microcontrollers do one thing well.
There are a number of other common characteristics that define microcontrollers. If a computer
matches a majority of these characteristics, then you can call it a "microcontroller":
● Microcontrollers are "embedded" inside some other device (often a consumer product) so that
they can control the features or actions of the product. Another name for a microcontroller,
● Microcontrollers are dedicated to one task and run one specific program. The program is
stored in ROM (read-only memory) and generally does not change.
● Microcontrollers are often low-power devices. A desktop computer is almost always plugged
into a wall socket and might consume 50 watts of electricity. A battery-operated microcontroller
might consume 50 milliwatts.
● A microcontroller has a dedicated input device and often (but not always) has a small LED or
LCD display for output. A microcontroller also takes input from the device it is controlling and
controls the device by sending signals to different components in the device.
For example, the microcontroller inside a TV takes input from the remote control and displays
output on the TV screen. The controller controls the channel selector, the speaker system and
certain adjustments on the picture tube electronics such as tint and brightness. The engine
controller in a car takes input from sensors such as the oxygen and knock sensors and controls
things like fuel mix and spark plug timing. A microwave oven controller takes input from a
keypad, displays output on an LCD display and controls a relay that turns the microwave
generator on and off.
● A microcontroller is often small and low cost. The components are chosen to minimize size
and to be as inexpensive as possible.
The microcontroller controlling a car's engine, for example, has to work in temperature
extremes that a normal computer generally cannot handle. A car's microcontroller in Alaska has
to work fine in -30 degree F (-34 C) weather, while the same microcontroller in Nevada might
be operating at 120 degrees F (49 C). When you add the heat naturally generated by the
engine, the temperature can go as high as 150 or 180 degrees F (65-80 C) in the engine
compartment.
On the other hand, a microcontroller embedded inside a VCR hasn't been ruggedized at all.
In many products, such as microwave ovens, the demand on the CPU is fairly low and price is an
important consideration. In these cases, manufacturers turn to dedicated microcontroller chips --
chips that were originally designed to be low-cost, small, low-power, embedded CPUs. The Motorola
6811 and Intel 8051 are both good examples of such chips. There is also a line of popular controllers
called "PIC microcontrollers" created by a company called Microchip. By today's standards, these
CPUs are incredibly minimalistic; but they are extremely inexpensive when purchased in large
quantities and can often meet the needs of a device's designer with just one chip.
A typical low-end microcontroller chip might have 1,000 bytes of ROM and 20 bytes of RAM on the
chip, along with eight I/0 pins. In large quantities, the cost of these chips can sometimes be just
pennies. You certainly are never going to run Microsoft Word on such a chip -- Microsoft Word
requires perhaps 30 megabytes of RAM and a processor that can run millions of instructions per
second. But then, you don't need Microsoft Word to control a microwave oven, either. With a
microcontroller, you have one specific task you are trying to accomplish, and low-cost, low-power
performance is what is important.
Using Microcontrollers
In How Electronic Gates Work, you learned about 7400-series TTL devices, as well as where to buy
them and how to assemble them. What you found is that it can often take many gates to implement
simple devices. For example, in the digital clock article, the clock we designed might contain 15 or 20
chips. One of the big advantages of a microcontroller is that software -- a small program you write and
execute on the controller -- can take the place of many gates. In this article, therefore, we will use a
microcontroller to create a digital clock. This is going to be a rather expensive digital clock (almost
$200!), but in the process you will accumulate everything you need to play with microcontrollers for
years to come. Even if you don't actually create this digital clock, you will learn a great deal by reading
about it.
The microcontroller we will use here is a special-purpose device designed to make life as simple as
They are called "Stamps," by the way, because they are about as big as a postage stamp.
Parallax makes two versions of the BASIC Stamp: the BS-1 and the BS-2. Here are some of the
differences between the two models:
The specific BASIC Stamp we will be using in this article is called the "BASIC Stamp Revision D"
(pictured below).
The BASIC Stamp Revision D is a BS-1 mounted on carrier board with a 9-volt battery holder, a
power regulator, a connection for a programming cable, header pins for the I/O lines and a small
prototyping area. You could buy a BS-1 chip and wire the other components in on a breadboard. The
Revision D simply makes life easier.
You can see from the previous table that you aren't going to be doing anything exotic with a BASIC
stamp. The 75-line limit (the 256 bytes of EEPROM can hold a BASIC program about 75 lines long)
for the BS-1 is fairly constraining. However, you can create some pretty neat stuff, and the fact that
the Stamp is so small and battery operated means that it can go almost anywhere.
● + - addition
● - - subtraction
● * - multiplication (low-word)
● ** - multiplication (high-word)
● / - division
● // - mod
● max - return maximum of 2 values
● min - return minimum of 2 values
● & - AND
● | - OR
● ^ - XOR
● &/ - NAND
● |/ - NOR
● ^/ - XNOR
If statement logic:
● =
● <>
● <
● <=
● >
● >=
● AND
● OR
Variables
All variables in the BS-1 have pre-defined names (which you can substitute with names of your own).
Remember that there are only 14 bytes of RAM available, so variables are precious. Here are the
standard names:
Because there are only 14 bytes of memory, w0 and b0/b1 are the same locations in RAM, and w1
and b2/b3 are the same, and so on. Also, bit0 through bit15 reside in w0 (and therefore b0/b1 as
well).
I/O pins
You can see that 14 of the instructions in the BS-1 have to do with the I/O pins. The reason for this
emphasis is the fact that the I/O pins are the only way for the BASIC Stamp to talk to the world. There
are eight pins on the BS-1 (numbered 0 to 7) and 16 pins on the BS-2 (numbered 0 to 15).
The pins are bi-directional, meaning that you can read input values on them or send output values to
them. The easiest way to send a value to a pin is to use the HIGH or LOW functions. The statement
high 3 sends a 1 (+5 volts) out on pin 3. LOW sends a 0 (Ground). Pin 3 was chosen arbitrarily here --
you can send bits out on any pin from 0 to 7.
There are a number of interesting I/O pin instructions. For example, POT reads the setting on a
potentiometer (variable resistor) if you wire it up with a capacitor as the POT instruction expects. The
PWM instruction sends out pulse-width modulated signals. Instructions like these can make it a lot
easier to attach controls and motors to the Stamp. See the documentation for the language for details.
Also, a book like Scott Edward's Programming and Customizing the BASIC Stamp Computer can be
extremely helpful because of the example projects it contains.
You can get a starter kit either from Parallax (the manufacturer) or from a supplier like Jameco (who
should be familiar to you from the electronic gates and digital clock articles). From Parallax, you can
order the BASIC Stamp D Starter Kit (part number 27202), or from Jameco you can order part number
140089. You will receive the Stamp (pictured below), a programming cable, software and instructions.
The kit is $79 from both suppliers. Occasionally, Parallax runs a special called "We've Bagged the
Basics" that also includes Scott Edward's Programming and Customizing the BASIC Stamp
Computer.
http://computer.howstuffworks.com/microcontroller.htm/printable (9 of 23) [6/23/2005 11:19:19 PM]
Howstuffworks "How Microcontrollers Work"
Hooking up the Stamp is easy. You connect it into the parallel port of your PC. Then you run a DOS
application to edit your BASIC program and download it to the Stamp. Here is a screenshot of a
typical editor (in this case, the one from Scott Edward's book):
To run the program in this editor, you hit ALT-R. The editor application checks the BASIC program
and then sends it down the wire to the EEPROM on the Stamp. The Stamp then executes the
program. In this case, the program produces a square wave on I/O pin 3. If you hook up a logic probe
or LED to pin 3 (see the electronic gates article for details), you will see the LED flash on and off twice
per second (it changes state every 250 milliseconds because of the PAUSE commands). This
program would run for several weeks off of a 9-volt battery. You could save power by shortening the
time that the LED is on (perhaps it is on for 50 milliseconds and off for 450 milliseconds), and also by
using the NAP instruction instead of PAUSE.
Let's say that we would like to use the I/O pins on the BASIC Stamp to display numeric values. In the
digital clock article, we saw how to interface to a 7-segment LED display using a 7447 chip. 7447s
would work just as well with the BASIC Stamp. You could wire four of the I/O pins straight into a 7447
and easily display a number between 0 and 9. Since the BS-1 Stamp has eight I/O pins, it is easy to
drive two 7447s directly like this.
For a clock, we need a minimum of four digits. To drive four 7447s with eight I/O pins, we have to be
slightly more creative. The following diagram shows you one approach:
This is, in fact, a standard way to control LED displays. For example, if you have an old LED
calculator, turn it on and shake it while watching the display. You will actually be able to see that only
one digit is ever illuminated at once. The approach is called multiplexing the display.
While this approach works fine for clocks and calculators, it has two important problems:
An alternative approach is to use an LCD screen. As it turns out, LCDs are widely available and can
be easily hooked to a Stamp. For example, the two-line by 16-character alphanumeric display shown
below is available from both Jameco (part number 150990) and Parallax (part number 27910). A
typical display is shown here, mounted on a breadboard for easier interfacing:
● The display can be driven by a single I/O pin. The display contains logic that lets a Stamp
communicate with it serially, so only one I/O pin is needed. In addition, the SEROUT command
in Stamp BASIC handles serial communication easily, so talking to the display is simple.
● The LCD can display alphanumeric text: letters, numbers and even custom characters.
● The LCD consumes very little power -- only 3 milliamps.
The only problem is that one of these displays costs $59. Obviously, you would not embed one of
these in a toaster oven. If you were designing a toaster oven, however, you would likely prototype with
one of these displays and then create custom chips and software to drive much cheaper LCDs in the
final product.
To drive a display like this, you simply supply it with +5 volts and ground (the Stamp supplies both
from the 9-volt battery) and then hook one of the I/O pins from the Stamp to the display's input line.
The easiest way I have found to connect the Stamp's I/O pins to a device like an LCD is to use a wire-
wrap tool (Jameco part number 34577) and 30-gauge wire wrap wire (Jameco part number 22541 is
typical). That way, no soldering is involved and the connections are compact and reliable.
The following BASIC program will cause a BASIC Stamp to behave like a clock and output the time on
the LCD (assuming the LCD is connected to I/O pin 0 on the Stamp):
again:
b0 = b0 + 1 'increment seconds
if b0 < 60 then minutes
b0 = 0 'if seconds=60
b1 = b1 + 1 ' then increment minutes
minutes:
http://computer.howstuffworks.com/microcontroller.htm/printable (13 of 23) [6/23/2005 11:19:19 PM]
Howstuffworks "How Microcontrollers Work"
if b1 < 60 then hours
b1 = 0 'if minutes=60
b2 = b2 + 1 ' then increment hours
hours:
if b2 < 13 then show
b2 = 1 'if hours=13 reset to 1
show:
serout 0, n2400, (254, 135) 'position cursor on display,
'then display time
serout 0, n2400, (#b2, ":", #b1, ":", #b0, " ")
pause 950 'pause 950 milliseconds
goto again 'repeat
In this program, the SEROUT commands send data to the LCD. The sequence (254, 1) clears the
LCD (254 is the escape character and 1 is the command to clear the screen). The sequence (254,
135) positions the cursor. The other two SEROUT commands simply send text strings to the display.
This approach will create a reasonably accurate clock. By tweaking the PAUSE statement you can get
the accuracy to within a few seconds a day. Obviously, in a real clock you would like to wire up a push-
button or two to make setting it easier -- in this program, you preset the time before you download the
program to the Stamp.
While this approach is simple and works, it is not incredibly accurate. If you want better accuracy, one
good approach would be to wire a real-time clock chip up to your Stamp. Then, every second or so,
you can read the time from the chip and display it. A real-time clock chip uses a quartz crystal to give
it excellent accuracy. Clock chips also usually contain date information and handle leap year
correction automatically.
One easy way to interface a real-time clock to a stamp is to use a component called the Pocket
Watch B.
The Pocket Watch B is available from both Jameco (part number 145630) and Parallax (part number
27962). This part is about as big as a quarter and contains the clock chip, crystal and a serial
interface so that only one I/O pin is necessary to communicate with it. This component costs about
$30 -- again, not something you want to embed in a toaster oven, but easy to play with when
constructing prototypes.
● A temperature-sensing device
● An analog-to-digital (A/D) converter for the temperature-sensing device
● A shift register to read the data out of the A/D converter
● A little EEPROM (electrically erasable programmable read-only memory) to remember settings
The DS1620 has two modes: In one mode, it acts as a stand-alone thermostat chip, and in the other
http://computer.howstuffworks.com/microcontroller.htm/printable (15 of 23) [6/23/2005 11:19:19 PM]
Howstuffworks "How Microcontrollers Work"
mode you hook it up to a computer and use it as a thermometer. The EEPROM remembers the
current mode as well as the set temperatures for the thermostat.
Hooking up the DS1620 to the Stamp is very easy. The DS1620 comes in an 8-pin chip. Supply +5
volts from the Stamp to pin 8 of the DS1620. Supply ground to pin 4 of the DS1620. You then use
three I/O pins from the Stamp to drive three pins on the DS1620:
● Pin 1 on the DS1620 is the data pin. You read and write data bits on this pin.
● Pin 2 on the DS1620 is the clock pin. You clock data in and out of the shift register with this pin.
● Pin 3 on the DS1620 is the reset/select pin. You set pin 3 high to select the chip and
communicate with it.
You can get a DS1620 either from Jameco (part number 146456) or Parallax (part number 27917) in
an "application kit" that includes the chip, the capacitor, some good documentation and sample code.
Or you can buy the chip on its own from Jameco (part number 114382). I would suggest getting the
application kit the first time you try using the DS1620 because the documentation is very useful.
You can assemble the DS1620 in the prototype area of the Stamp carrier board or on a separate
breadboard. Once you have assembled it, hook your LCD display up to I/O pin 3 of the Stamp, and
then load and run the following program:
begin:
low RST ' deselect the 1620 unless talking to it
setup:
high RST ' select the 1620
b0 = $0C ' $0c is the 1620 command byte
' saying "Write Config"
gosub shift_out ' send it to the 1620
b0 = %10 ' %10 is the 1620 command byte
' to set thermometer mode
gosub shift_out ' send it to the 1620
low RST ' deselect the 1620
pause 50 ' delay 50ms for EEPROM
start_convert:
b0 = $EE ' $EE is the 1620 command byte
' to start conversions
high RST ' select the 1620
gosub shift_out ' send it to the 1620
low RST ' deselect the 1620
If you run this program, you will find that it displays the centigrade temperature with an accuracy of
one-half degree.
The DS1620 measures temperatures in centigrade half-degrees. It returns the temperature in a 9-bit
2s-complement number with a range of -110 to 250 F (-55 to 125 C). You divide the number you
receive by 2 to get the actual temperature. 2s-complement binary numbers are a convenient way to
represent negative values. The following list shows the values for a 4-bit 2s-complement number:
0111 : 7
0110 : 6
0101 : 5
0100 : 4
0011 : 3
0010 : 2
0001 : 1
0000 : 0
1111 : -1
1110 : -2
1101 : -3
1100 : -4
You can see that instead of the 4 bits representing values from 0 to 15, the 4 bits in a 2s-complement
number represent the values -8 to 7. You can look at the left-most bit to determine if the number is
negative or positive. If the number is negative, you can invert the bits and add 1 to get the positive
representation of the number.
Here's what goes on with the digital thermometer program shown here:
1. It uses the symbol keyword to set up several constants that make the program slightly easier
to read (and also make it easy for you to move the chip to different I/O pins on the Stamp).
2. It sets the CLK and RST pins on the DS1620 to their expected values.
3. It writes a command byte to the EEPROM on the DS1620 to tell the chip to operate in
"thermometer mode." Because the mode is stored in EEPROM, you only have to do it once, so
you could technically take this section of the code out of the program after you run the program
once (to save program space).
4. The program sends the command $EE ("$" means "hexadecimal number" -- $EE is 238 in
decimal) to tell the thermometer to start up its conversion process.
The program then enters a loop. Every second, it sends a command to the DS1620 telling the
DS1620 to return the current temperature, and then it reads the 9-bit value that the DS1620 returns
into the w0 variable. The Stamp sends and receives data 1 bit at a time by toggling the CLK line on
the DS1620. Remember that the w0 (16-bit) variable overlays the b0/b1 (8-bit) variables, which
overlay the bit0/bit1/.../bit15 (1-bit) variables, so when you insert a bit from the DS1620 into bit 8 and
divide w0 by 2, what you are doing is shifting each bit to the right to store the 9-bit temperature from
the DS1620 into w0. Once the temperature has been saved in w0, the display subroutine determines
whether the number is positive or negative and displays it appropriately on the LCD as a centigrade
temperature. The conversion from degrees C to degrees F is:
dF = dC * 9/5 + 32
http://computer.howstuffworks.com/microcontroller.htm/printable (21 of 23) [6/23/2005 11:19:19 PM]
Howstuffworks "How Microcontrollers Work"
At this point, we have succeeded in creating an extremely expensive thermometer. What might you do
with it? Here's one idea. Let's say you work for a drug company and you are shipping expensive drugs
across the country that MUST remain at a certain temperature the entire way or the drugs will spoil.
What you can do with a Stamp is create a data logging thermometer. Both Jameco (part number
143811) and Parallax (part number 27960) sell a device called the "RAM Pack module." It contains a
low-power 8-kilobyte (or optionally 32-kilobyte) RAM chip with a serial interface. You could add this
component (or something similar) to your Stamp and write code that saves temperature readings to
the RAM every minute. You could then slip your Stamp into the drug shipment, and at the other end of
the trip retrieve the Stamp. The RAM module would contain the temperature history of the entire trip
and you would know whether or not the drugs ever thawed out.
There are all kinds of neat, useful devices like this that you can build with a Stamp now that you know
how microcontrollers work!
For more information on microcontrollers and related topics, check out the links on the next page.
BASIC Stamp
PIC Links
FAQs
● Microcontroller FAQ
● BASIC Stamp FAQ
● 8051 microcontroller FAQ
● 68HC11 microcontroller FAQ
Other
● The 8052 Online Resource - lots of good information on the 8052 microcontroller
● Embedded Linux Journal