Bridge the Digital Divide - Basically

Document Sample
Bridge the Digital Divide - Basically Powered By Docstoc
					 By Al Williams, WD5GNR

Bridge the Digital Divide—
If you think working with microprocessor-based circuits is frustrating
and complicated, you haven’t been introduced to the Basic Stamp—a
powerful, yet friendly, digital building block that puts scores of smart
circuits at your fingertips. Here’s how to get started.

         ams often speak in strange          called PBasic. Although PBasic is easy

H        lingo. As a ham you should be
         able to easily decipher the
                                             to learn and use, it has powerful
                                             commands tailored to the types of tasks
                                             hams and computer experimenters want
   TU OM ES GL 73 DE WD5GNR.                 microcontrollers to perform. On top of
   But what about the next group?            that, these microcontrollers—called Basic
   BSF PORTA,3                               Stamps—require practically no external
   MOVF SBYTE,W                              components.
   Unless you know about PIC                 The Hardware
microprocessors, those three lines               There are several types of Basic Stamp     Figure 1— One handy use for the Stamp’s
                                             processors, all made by Parallax.1 More        built-in port is to print informational
probably seem like gibberish. Because an                                                    messages for debugging purposes right
increasing number of ham radio projects      expensive Stamps have more memory and          back to the Stamp program. You can do this
depend on microprocessors, don’t be          are faster than the less expensive chips.      with the DEBUG statement, as shown here.
surprised if you can decipher this new       The two most common Stamps are the
“code” sometime in the not-too-distant       BS1 and the BS2. The BS1 has eight I/O
future.                                      pins and stores 256 bytes of instructions.     Stamp is how easy it is to connect the
   Microprocessors (or microcontrollers)     Although 256 bytes of program storage          hardware. The BS2 has its own regulator
offer unparalleled flexibility and can       (and 14 bytes for variables) sounds like a     and clock circuits. You can simply
replace dozens or even hundreds of other     miniscule amount in these days of              connect a 9-V battery (the voltage can
components in modern radio systems.          megabytes and gigabytes, for a small           range from 6 to 15 V) and the Basic
Microprocessors no longer require            controller, it’s often more than you’ll        Stamp is ready to go. It’s that simple. Of
expensive, special-purpose programming       need. The BS2 has 16 I/O pins and also         course, you also need to connect whatever
hardware, so more designers are using        stores 2048 bytes of instructions (along       circuitry you want to monitor or control,
them instead of ordinary logic ICs.          with 32 bytes of data).                        but the microprocessor itself merely
   Most microcontrollers have limited            You can buy the BS1 on a small PC          needs a power supply. If your project
memory capacities, however, so designers     board or as a 14-pin SIP. The BS2 looks        already has a dc supply, you can probably
often use assembly language—like the         like a standard 24-pin IC, but it’s really a   use that instead.
snippet above—to control the                 tiny PC board with IC pins. In addition           The BS2 is quite different from
microprocessor and conserve precious         to the BS2, you can also get the BS2SX,        traditional microprocessors that need
memory space. Although that approach         BS2E or BS2P which have more memory            regulated power supplies (perhaps even
leads to efficient programs, many people     and features but are more expensive.           multi-voltage supplies) and external clock
find assembly language difficult to learn    These processors are also faster than the      circuits.
and tricky to work with—especially the       BS2, but consumes more power. For most
bare-bones assembly languages that           projects, the BS2 is a good trade-off          Programming
usually accompany microcontrollers.          between cost, speed and power. In this            The Stamp, super chip that it is, won’t
   If you want to design and build modern    article I’ll focus on the BS2 exclusively.     do a thing without programming. The BS2
projects, you may not have to learn          If you learn to use it, you’ll have no         connects to a PC using the PC’s serial
assembly language. The fastest possible      problems with the other chips.                 port, but because the BS2 doesn’t have a
route from idea to finished product is via       One of the best features of the Basic      standard RS-232 port, you may need to
a line of small controllers that use a                                                      devise a way to connect a serial cable to
simple-to-learn Basic-like language          1
                                                 Notes appear on page 34.                   your project. Typical BS2 projects have
30   April 2001
Figure 2—Using Parallax software to create
a program to call CQ. The complete program
listing is shown elsewhere in this article.

RS-232 ports anyway, so that’s not always
a problem. The port requires only four
pins, so if you only need to program the
device you can put a simple four-pin
connector on the board and wire a custom
   You can also buy a carrier board from
the manufacturer. This is simply a PC
board with some uncommitted holes and
a serial port connector. If you want to
work on a solderless breadboard (highly
recommended for getting started) you can
create a custom cable, use a prototyping
adapter,2 or buy the Stamp in a special       Figure 3—You can use this simple circuit to start experimenting with the Stamp.
form that can plug into a breadboard.3        B1—9-V battery                              R1—470 Ω , 1/4-W resistor
   In addition to the cable you’ll need       U1—BS2-IC (Basic Stamp)                              Ω
                                                                                          R2—10 kΩ, 1/4-W resistor
                                              D1—Red LED                                  S1—SPST pushbutton switch
special software, which you can freely
download from the Internet. You can also
get the entire manual for the chip at the
same Web site in Adobe PDF format at          the state of P0 to turn the LED on or off.    to be an output. If the output is a logical
no charge.4                                      Each of the 16 I/O pins on the Stamp       0 (the default), the command toggles it
   The programming software is shown          can be used as an input or an output. By      to a logical 1 (about 5 V). If the output is
in Figure 2. You simply enter your            default, the pins start as inputs, but you    already a logical 1, the command toggles
program and press Control+R (or the           can change them to outputs at any time.       it to a logical 0.
Run|Run menu) to download the program         You can even have pins that are                   goto again This command simply
and execute it. Once you program the          sometimes inputs, sometimes outputs,          executes the program back at the again:
Stamp, it will remain programmed              depending on your program.                    label.
indefinitely—even if the power cycles.           One potentially confusing Stamp                This simple program makes the LED
The PC connection is only required to         convention is that the I/O pin numbers        blink so fast that it looks like it’s on all
program the chip.                             don’t correspond to the IC pin numbers.       the time (unless you watch the output pin
   The Stamp editor works like most           For example, P0, the first I/O pin, is        with an oscilloscope). Let’s slow things
Windows-based editors. If you create a        actually IC pin 5; P1 is pin 6, etc. It’s     down with the pause command:
new file, however, it appears as a tab near   easy to get confused.                             again:
the top of the editor. This allows you to        Here’s a simple BS2 program that will            toggle 0
switch between multiple files even though     blink the LED connected to P0:                      pause 500
only one can reside in the Stamp at one          again:                                           goto again
time. (To begin with, work with one file            toggle 0                                    The pause command makes the
at a time.)                                         goto again                              program stop for the specified number of
                                                 If you’ve ever written a Basic program     milliseconds. With a value of 500, the
Your First Program                            you can probably figure this out. Consider    program will blink the LED at about
   Once you have a programming cable          the program line by line:                     1 Hz (a half-second on and a half-second
and a 9-V battery (or other suitable power       again: This is a label. You can use        off).
supply), you’re almost ready to go. The       almost any word you like, but it must             The toggle command is a good
only remaining task is to connect an          begin with a letter and can’t contain         example of the special commands that the
external device to measure or control.        spaces. The label ends with a colon. Think    Stamp uses to control external devices.
Figure 3 shows a simple test circuit that     of a label as a bookmark that holds a place   You can find a complete list of Stamp
consists of an LED and a switch. The pull-    in your program. Later, you can return to     commands in Table 1. Simple Basic
up resistor (R2) makes sure that P1 is high   the bookmark to start the program at the      constructs such as for and if are present,
unless you press the switch (S1). The         labeled step.                                 along with a host of I/O-related
Stamp can read the state of P1 and change        toggle 0 This command forces pin 0         commands such as pwm, freqout, pulsin
                                                                                                                      April 2001      31
 Table 1
 Basic Stamp II Commands
 Command      Description                                                     Notes
 Branch          Jump to a label based on an index
 Button          Monitors a button                                   Provides debounce and auto repeat functions
 Count           Counts pulses
 Data            Stores data in EEPROM                               Stores at compile time
 Debug           Write to the debug terminal                         Usually uses your PC
 Dtmfout         Generate DTMF tones
 End             Halt program execution
 For/Next        Basic-language loop
 Freqout         Generate one or two tones
 Gosub/Return    Subroutine call
 Goto            Unconditional jump
 High            Sets I/O pin to logic 1                             Implies output
 If/Then         Basic-language control flow                         Conditional goto only
 Input           Changes I/O pin to input
 Lookdown        Searches a table for a match
 Lookup          Finds an entry in a table
 Low             Sets I/O pin to logic 0                             Implies output
 Nap             Pause in low power mode
 Output          Changes I/O pin to output
 Pause           Pause program execution                             1 mS resolution
 Pulsin          Measures a pulse                                    2 µS resolution
 Pulsout         Generates a pulse                                   2 µS resolution
 Pwm             Pulse width modulation                              Use to control motor speeds or generate analog voltages
 Random          Generate a random number
 Rctime          Measures RC network charge                          Use to read a potentiometer or any resistive or capacitive sensor
 Read            Reads data from EEPROM
 Reverse         Changes I/O pin to opposite state
 Serin           Read RS-232 data                                    243 baud to 50 K baud
 Serout          Send RS-232 data                                    243 baud to 50 K baud
 Shiftin         Synchronous serial input                            Use with SPI EEPROMs, A/Ds, etc
 Shiftout        Synchronous serial output                           Use with SPI EEPROMs, A/Ds, etc
 Sleep           Pause in low power mode
 Toggle          Reverses logic level of I/O pin                     Implies output
 Write           Writes data to EEPROM                               Stores at run time
 Xout            Generates X-10 commands                             Requires external hardware

and so forth.                                  the exact state of the output pin instead      Listing 1. Sending CQ
   Commands such as toggle require a           of switching it to the opposite state.             ‘ CQ by WD5GNR
pin number. You can also access pins as           Subroutines are fundamental to re-
variables. For example, to read the switch     using Basic code, and the Stamp supports           LED con 0
as a binary digit, you can refer to in1. You   the gosub command as any Basic should.             speed con 200 ‘ base speed
can also directly set the LED’s state using    A gosub command transfers control to a
out0. Here’s a simple program that turns       label much like a goto. Unlike a goto,
                                                                                                  wait for switch
on the blinking LED when you push the          however, a return statement will go back            if in1=1 then waiting
button:                                        to the line following the gosub. For                gosub dash
   waitbtn:                                    example:                                            gosub dot
      if in1=1 then waitbtn                       again:                                           gosub dash
   again:                                            gosub blink                                   gosub dot
      toggle 0                                       goto again                                    pause speed
      pause 500                                   blink:                                           gosub dash
                                                                                                   gosub dash
      goto again                                     toggle 0
                                                                                                   gosub dot
   Notice that the if statement can only             pause 500                                     gosub dash
jump to a label (such as waitbtn). You               return                                        goto waiting
can’t use the goto keyword, and you can’t         Not only is this easier to read, but it
execute any statements. You can only           also saves space when you need to blink            dot:
jump to a label.                               the LED from more than one place in your             high LED
   Of course, there is more than one way       program. Even with this simple slate of              pause speed
to accomplish any programming task.            commands, you can write some ham radio               low LED
                                                                                                    pause speed
Here’s another way to blink the LED:           software right away. Listing 1 shows a
   again:                                      very simple program that blinks CQ on
      high 0                                   the LED after you press the button. This           dash:
      pause 500                                isn’t the most efficient way to write the            high LED
      low 0                                    program, but it works.                               pause speed*3
      pause 500                                   Notice that the program in Listing 1              low LED
      goto again                               uses several statements (near the top) that          pause speed
   Here, the high and low commands set         use the con keyword. This defines a                  return

32    April 2001
constant. By using a constant in the pause        ‘ wait for button up                       multiplication before the addition). The
statements, you can change the Morse                  goto top                               Stamp, however, goes strictly left to
code speed by changing one number.                Generating TouchTones in software          right, so it computes the answer as 16
Without the constant you’d have to             usually requires sophisticated wave           (addition first). Luckily, PBasic (for the
change every pause statement separately.       synthesis techniques to generate the two      Stamp II) supports parenthesis, so you
Lines that start with an apostrophe are        simultaneous sine waves. But when using       could write:
comments and don’t affect the execution        PBasic, you don’t care. You simply use            X=3+(5*2)
of the program.                                the DTMFOUT command and the Stamp                 This will produce the answer you
                                               does the rest!                                expect without having to rearrange the
Learning More                                     Other sophisticated commands can           equation.
 One of the strengths of                       handle serial I/O, pulse-width modula-            There are several tricks to eliminating
 the Stamp is that many                        tion, resistance or capacitance measure-      floating-point math. Sometimes you
                                               ments and pulse counting. Of course, the      simply need to rearrange your equation.
 of its PBasic commands                        Stamp also handles sophisticated integer      Suppose you read a value from an analog-
      replace dozens                           math, something that’s usually trou-          to-digital converter (ADC). The byte is
   —or even hundreds—                          blesome with ordinary microcontrollers.       in a variable (adin). In addition, you have
                                                                                             a constant defining the reference voltage
   of lines of assembly                        Variables                                     input to the ADC (nominally 5 V).
         language.                                If you’re going to use math, you’ll        Because the ADC returns a number
                                               probably want to use variables. The           between 0 and 255 (a span of 256), each
    There is a wealth of information on the    Stamp provides several registers (work-       count is equivalent to about 19.5 mV (5/
Web about the Basic Stamp. The Parallax        ing memory areas for data) that you can       256) if the reference voltage is 5 V.
Web site is a good place to start. You         address by name. It’s usually better,         Consider this code:
might also enjoy my Basic Stamp FAQ.5          however, to ask the Stamp to assign               adin            var              byte
If you like to read paper instead of           registers to variables that have mean-            value           var            word
computer screens, you’ll enjoy my Basic        ingful names. For example:                        ref             con                 5
Stamp book. 6                                     adin            var           byte             value = ref/256*adin
    With the Basic Stamp you can build            counter         var          word              This won’t work because ref/256 is 0,
computer controls into your ham radio             This defines two variables. One is a       so value will always be 0. You must
projects with very little investment. Yes,     byte (eight bits) and the other is a word     rewrite the equation so the multiplication
the Stamp is more expensive than a             (16 bits). The byte’s name is adin and the    occurs first:
barebones microprocessor, but the price        word is named counter. Variables can              value = adin*ref/256
is more reasonable after you deduct the        also be of type bit (a single bit) or nib         Even then, adin must rise above 52
cost of the extra components, the              (four bits). The PBasic program               before value can reach 1, which wastes a
development tools, the complexity and          automatically assigns registers to these      lot of resolution. What if you measured
the time spent writing and debugging           variables (until you run out of registers     decivolts instead of volts (that is, use 0.1 V
assembly language.                             and get an error).                            units)? Now, the reference value is 50 (5 V
    One of the strengths of the Stamp is          You can also use the same syntax to        is 50 decivolts). So now, value will change
that many of its PBasic commands               provide an alias for another variable. This   for every five or six increases in adin.
replace dozens—or even hundreds—of             is useful if you want to reuse a single           You can’t carry this reasoning too far,
lines of assembly language. That means         register in two non-conflicting places. For   though. Suppose you decide to go to one
you can write programs in minutes that         example:                                      more decimal point (centivolts, or 0.01 V
would take hours or days using traditional        tmpvar         var            adin         increments). Of course, the ADC can
methods. A great example of this is the           ‘ can’t use tmpvar and adin together       produce only about half of that resolution.
Stamp’s DTMFOUT command. You can                  You can also give names to constants.      For the sake of argument, however, don’t
use this to easily generate TouchTones on      For example:                                  worry about that yet.
any output pin. You can connect a piezo           pi100          con             314             Expressing the reference value in
speaker (or filter the output and feed it to      limit          con             100         centivolts results in a ref constant of 500.
a transmitter). Suppose you have such a                                                      The problem is, when you multiply adin
speaker connected to pin 0 of the Stamp.       Math                                          by ref, the maximum result is 255*500
Here’s the entire program required to dial        The Stamp can do full-featured, 16-bit     or 127500. The largest 16-bit number is
a telephone number:                            integer math. That includes multi-            65535. The Stamp will quietly overflow
    DTMFOUT 0,[1,8,0,0,5,5,5,1,2,1,2]          plication and division, which are usually     and produce an incorrect result.
    That’s it! How do you trigger it?          unpleasant to do on a microcontroller.
Simply turn the Stamp on. Push a button        What Stamps can’t do is handle floating-      Serial Capabilities
to make the Stamp dial and hold it down        point numbers. Therefore, 10/3 (10               The Stamp has a special built-in half-
until it’s done. If you really wanted to       divided by 3) results in an answer of 3,      duplex serial port (this is the port you use
wait for a button (and leave the Stamp on      which can cause problems.                     to program it). Your program can also use
all the time), you could change the               Another subtle point is that the Stamp     this serial port, or you can use any pin as
program a little:                              evaluates math expressions from left to       a TTL-level serial input or output. One
    top:                                       right, which is not how you normally          handy use for the built-in port is to print
    ‘ switch 0 when on                         work an equation. For example, consider       informational messages for debugging
       if in1=1 then top                       this statement:                               purposes right back to the Stamp program.
       dtmfout 0,[1,8,0,0,5,5,5,1,2,1,2]          X=3+5*2                                    You can do this with the DEBUG
    done:                                         In high school math you learned that       statement. For example:
    if in1=0 then done                         the correct answer is 13 (you do the             i var word
                                                                                                                        April 2001       33
    for i = 1 to 100                           PWM duty cycle. So, if the duty cycle is      monitor pulses—you’ll eventually have to
    debug ?i                                   128, the voltage will be about 2.5 V.         stop to do additional processing.
    next                                           The only problem with the Stamp’s
    This produces the output in Figure 1.      PWM system is that the Stamp does not         Brave New World
For more general-purpose serial                multitask. Therefore, when you use PWM           What will you do with a Basic Stamp?
communications you can use the Serin           to charge a capacitor to a certain voltage,   Here are some ham radio ideas:
and Serout commands. You can specify           you have to eventually stop and do            • A remote control for an RS-232
any of the 16 general-purpose I/O pins (0-     something else. The Stamp automatically         transceiver (use Rctime to read
15) or you can use the special pin number      switches the I/O pin to an input state,         potentiometers and Pulsin to monitor
16 to specify the built-in port. You can       which has a high resistance. Unfortun-          an optical encoder).
also control the baud rate and certain         ately, the rest of your circuit may present   • A simplex repeater (use a digital speech
other parameters.                              enough of a load to rapidly discharge the       recorder).
    Because of the Stamp’s robust inputs,      capacitor.                                    • A control system for an auto-tuner.
you can actually connect a serial output           This isn’t always a problem. For          • A smart rotator controller.
through a 22-ký series resistor directly to    example, suppose you create a capaci-            Basic Stamps aren’t useful in every
an I/O pin. This works even though the         tance meter (see below). You decide to        application. But for the many tasks they
pin may have to absorb ±12 V (just don’t       make the output a voltage you can read        will handle, you can’t find anything easier
forget the resistor or you may damage the      with your digital voltmeter. Your meter’s     to program. The expense of the chip is
Stamp). You can usually drive an RS-232        input resistance is probably 10 mý or         minor compared to the expense of buying
receiver directly from a Stamp pin,            more, so as long as you make the Stamp        special hardware and software to program
although using 0 and 5 V for RS-232            execute the PWM command regularly             other microcontrollers—not to mention
signaling isn’t standard.                      (maybe once a second or so), you won’t        the expense of hours of frustrating
    Of course, you can also use an RS-232      see any significant error in the output.      programming in assembly language!
driver (like the Maxim MAX232 chip 7) to           On the other hand, suppose the voltage       There’s plenty more to learn about
generate (and accept) true RS-232              is driving a light bulb, which will quickly   Basic Stamps, but luckily, there are plenty
signaling levels. The Stamp can support        discharge the capacitor. In this case it’s    of online resources and books to help.8
either mode of operation. The built-in port    best to buffer the PWM output with an         There is also an active e-mail reflector
contains a level converter that “steals”       op amp.                                       that supports the Stamp.9 Be sure to check
–12 V from the transmitter (which limits                                                     out my Basic Stamp FAQ10 and my book
it to half-duplex operation). You can find     Resistance and Capacitance                    on the Stamp,11 which has many projects
more details in the Stamp manuals.                My high school math teacher always         and some tips on how to move from the
    Don’t forget that the Stamp does one       said, “You have to use what you know to       Stamp to the PIC, a more traditional
thing at a time. Therefore, if you’re          discover what you don’t.” Computers           microcontroller.
waiting for serial data, you can’t do          aren’t good at measuring analog                  If you’ve been putting off learning
anything else until the data arrives, or       quantities such as resistance and             about microcontrollers, the Stamp is the
your timeout expires. Similarly, if data       capacitance. On the other hand, they are      perfect way to get your feet wet. Just be
arrives while you’re not listening, it’s       very good at measuring time. You can use      warned: Once you’ve done one project,
simply lost. That means accommodating          the Stamp to measure the time it takes for    you’ll think of at least a hundred you’ll
serial data requires careful planning and      an RC network to charge or discharge,         never have time to start!
some form of handshaking (which the            and that time relates to the value of a       Notes:
Stamp supports).                               resistor and a capacitor in the network.        Parallax Inc, 599 Menlo Dr, Suite 100,
                                                  If you use a fixed capacitor you can          Rocklin, CA 95765;
Pulse-Width Modulation                                                                         See
                                               measure the resistance (perhaps a                for more about the solderless breadboard
    Another intriguing Stamp capability is     potentiometer or a thermistor). If you           adapters.
pulse-width modulation. The PWM                provide a fixed resistor, the time will be    3
                                                                                               The OEM Stamp can plug into a breadboard.
command allows you to generate a pulse         proportional to a changing capacitance.          See
stream with a specific duty cycle. For         The command that measures time is             4
example, if you set the PWM command            Rctime. You can charge or discharge the          downloads/download.htm has the soft-
to 128, the output pulses will be high as      network (using the High or Low                   ware and documentation. You can also
                                                                                                download free course material from www
much as they are low (50% duty cycle).         commands) and invoke Rctime to          Although the course
Changing the value to 64 will make the         determine how long it takes the capac-           material is meant for classroom use, you can
output low more often than high (25%           itor’s voltage to reach the opposite state.      easily use them for self-study.
duty cycle).                                                                                   The Basic Stamp FAQ is at
                                               Pulse Measurements                     
    You can use this pulse stream to                                                         6
                                                                                               Microcontroller Projects with Basic Stamps ,
control the brightness of an LED (or              The Stamp can also measure pulses             published by CMP Books, is available from
lamp) or even the speed of a motor.            using Pulsin, which returns the width of         the ARRL.
Although the Stamp has enough muscle           a positive- or negative-going pulse. You        Maxim’s Web site is
to drive an LED, you’ll need some extra        can also count the number of pulses over        See footnote 4.
                                                                                               Log into and sign up for
circuitry to drive a motor. One of the most    a given period using the Count command.          the basicstamps group.
useful things you can do with pulse-width      These commands are excellent for              10
                                                                                                See footnote 5.
modulation is to use a simple RC network       measuring relatively low frequencies.         11
                                                                                                See footnote 6.
to integrate the pulses into a voltage. This      If you want to generate pulses you can     You can contact the author at 310 Ivy
allows you to create an analog voltage on      use the Pulsout command. Don’t forget,        Glen, League City, TX 77573; alw@al-
an output pin with very little external        however, while you’re measuring or  
circuitry. The voltage across an external      generating pulses, nothing else is
capacitor will be proportional to the          happening. So you can’t constantly
34    April 2001

Shared By: