You are on page 1of 17

Microcontroller application

development
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks

Table of Contents
If you're viewing this document online, you can click any of the topics below to link directly to that section.

1. Introduction.............................................................. 2
2. Microcontroller basics ................................................. 5
3. Development tools ..................................................... 8
4. Circuit design ........................................................... 13
5. Summary & resources................................................. 16

Microcontroller application development Page 1 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Section 1. Introduction

Another twist on wireless


Traditional wireless applications, such as short messaging service (SMS), remote
access to corporate networks, or the holy grail of wireless -- Internet access -- are
viewed as enabling an "on-the-go" worker or a flexible, online lifestyle. These
applications share a common architecture, namely a wireless communication
connection back to a home network or roaming cell network. However, not all wireless
applications require nor demand this umbilical cord of a wireless connection. A wireless
application may instead communicate directly with a dedicated piece of hardware, such
as a remote data logger.

A dedicated device refers to equipment built for a single, functional purpose, rather
than a design around a general-purpose computer. The dedicated device employs just
enough computational horsepower to get the job done in a cost-effective manner. The
"brain" of these dedicated devices is often a microcontroller. A classic wireless
application involving a microcontroller-enabled device is illustrated by a technician
performing field diagnostics on a device such as a fire sensor or piece of networking
equipment. This application is made possible by the inherent logic and communications
capabilities of the device itself. Without the myriad of microcontroller-based appliances
and equipment in the field, an entire classification of wireless applications would be lost
to the modern world. This tutorial begins to explore this "other side of wireless" by
examining the fundamentals of microcontroller application design and development.

Roadmap
This tutorial presents an introduction to microcontroller application design and
development, and includes both hardware and software components in the design of a
functional sample application. The sample application illuminates a series of
light-emitting diodes based on the application's low-level instructions. This design is
meant to be a starting point for someone seeking to learn about embedded application
development. The tutorial includes circuit explanation, circuit layout, application source
code, a parts list, required tools, and all of the information needed to build and test the
sample application.

The tutorial is organized into the following sections:

* Introduction & motivation


* Microcontroller basics
* Development tools
* Circuit design & application
* Wrap up

Full source code and diagrams are available for download from the Resources on page 16
section. These include:

* MPLAB Edit Project image -- illustrates sample application settings in MPLAB


(MPLAB is Microchip's integrated development environment, or IDE. Section 3,

Microcontroller application development Page 2 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Development tools on page 8 , details the role of the MPLAB in microcontroller


development).
* ibmdw.asm -- application source code required for the tutorial; runs in the
PIC16F84 device.
* circuit.bmp -- a pictorial representation of the tutorial's sample circuit.
* Bill of material -- a listing of all parts used in the tutorial's sample circuit.

Helpful terms
The following terms are used throughout this tutorial:

* Embedded device or appliance : A digital device possessing a limited user


interface and some degree of computational capacity. An appliance may be a
labor-saving device, or a control system of a larger or more comprehensive
design.
* Microcontroller : Microcontrollers are found in numerous embedded devices. They
provide greater flexibility and a lower part count than discrete circuit designs.
Microcontrollers, sometimes referred to as MCUs, are available in many
configurations. The MCU's computational power ranges from the simplistic 8-bit
computer to the complex processor, rivaling the desktop-machine capabilities.
* Simulator: A simulator assists in the development and testing process. Typically,
a simulator is software driven, simulating functionality of a hardware circuit or
device.
* LED: Light Emitting Diodes, or LEDs, are found on virtually every piece of
hardware. They are used to indicate the presence of power to the device or as
feedback to user action.
* Seven-segment display : This component contains seven light emitting diodes
arranged in a specific manner. When illuminated, the segments display a digital
representation of the numbers 0 - 9. Seven-segment displays are often used in
digital clocks and other appliances such as microwave ovens and videocassette
recorders (VCRs).
* Compiler, assembler, & linker: Software tools used in the development of
applications for microcontrollers.

Motivation
Technology as a whole is often regarded in a bipolar manner, divided between
hardware and software. Hardware represents anything with mass -- something taking
up space. Common examples of hardware include computers and printers, or discrete
components such as integrated circuits, resistors, capacitors, memory chips, quartz
clocking crystals, etc. Software, on the other hand, is non-physical. Examples of
software include an operating system, a word processor, or a game played on a
personal computer. Beyond these physical characteristics, hardware and software are
also separated by the skills commonly needed to construct them. Traditionally,
hardware design and software development are divided between specialists in each
respective field. Microcontrollers present an exciting opportunity for both groups.

The microcontroller is a valuable prototyping platform for embedded designs. Hardware

Microcontroller application development Page 3 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

design engineers enjoy flexible and rapid design iterations without the need to redesign
and construct discrete logic chips. The final design may utilize a microcontroller, or be
built from discrete components for faster operation. In either case, the microcontroller
aids in the design process, resulting in time- and cost-saving opportunities.

For the software engineer, microcontrollers offer at least two exciting opportunities. The
first is liberation. No longer is the end product relegated to a display monitor, but now
an application has a physical embodiment. The other, more important aspect of
microcontroller development is a fine-tuning of software programming skills.
Programming applications for limited-resource devices require more discipline and
precision than developing applications for the resource-rich and forgiving desktop and
server arenas.

Conventions used in this tutorial


There are several conventions used throughout this tutorial to reinforce the material at
hand:

* Text to be typed in is displayed in bold monospace font. In some code


examples, bold is used to draw attention to a tag or element being referenced in
the accompanying text.
* Emphasis is used to draw attention to windows, dialog boxes, and feature names.
* A monospace font presents file and path names, as well as code segments and
functions.

About the author


After his college basketball career came to an end without a multi-year contract to play
for the L.A. Lakers, Frank Ableson shifted his focus to computer software design. He
enjoys solving complex problems, particularly in the areas of communications and
hardware interfacing. When not working, he can be found spending time with his wife
Nikki and their children. You can reach Frank at frank@cfgsolutions.com.

Microcontroller application development Page 4 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Section 2. Microcontroller basics

Role in the industry


A microcontroller contains virtually everything required for performing computational
and/or control functions. It is a fully functional computer containing a processor unit,
memory for program and data, and interface circuitry to interact with other devices.
Processor speeds are limited and the data-bus is typically only 8 bits wide, although
these are often not severely detrimental characteristics. Many embedded designs need
to simply monitor a few input sources, make a decision, and initiate an action via an
output signal. The microcontroller offers greater flexibility in design than discrete
designs, and at a lower cost than the majority of personal computer-based applications.

A common phrase of our time is, "computers are everywhere." Any modern office
building contains as many computers as desks, if not more. These computers are
personal computers, midrange computers, and beyond. However, other industries
employ computers as well, although they are not all "personal computers." One of the
largest consumers of computer technology is the automotive industry. Each vehicle
rolling off the assembly line contains one or more computers. They govern fuel
injection, environmental control, global positioning, and more. These are not personal
computers, but rather application-specific computers controlling vital vehicle functions.
These devices are more cost-effective and reliable than personal computers for their
specialized applications.

The home is another place where a variety of microcontrollers might be found. Any
device that is "programmable," such as a microwave oven or a VCR, likely contains a
microcontroller class computer. As homes and devices get "smarter," microcontroller
deployment opportunities increase. Modern home automation designs call for
PC-based applications directing various embedded devices throughout the dwelling.
These embedded devices require limited sensory, communications, and
decision-making capabilities. The microcontroller is the perfect fit.

Popular architectures
The core design of microcontrollers varies by manufacturer. Some devices employ the
Von-Neumann (or Princeton) architecture; others, the Harvard architecture. The
Von-Neumann architecture employs a single memory space for both program code and
working data storage (variables). The Harvard architecture maintains one distinct
memory space for program code and another for variable storage. The Harvard
architecture offers a high degree of "parallelism" in its ability to fetch instructions while
simultaneously carrying out previously fetched instructions on variable or register data.
The Von Neumann design allows for flexible operations not possible in the dual
memory architecture of the Harvard design. Both designs have strong points, and
should be considered on a project-by-project basis.

Well-known microcontroller manufacturers include Intel, Motorola, Microchip, Atmel,


and others. The Intel 8051 microcontroller is perhaps the industry's most common
design. Other manufacturers have built a substantial business by supplying
8051-compatible devices. However, the market offers much more than

Microcontroller application development Page 5 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

8051-compatible devices. The microcontroller market is remarkably accommodating for


engineers seeking to find a suitable "brain" for a specific design. Microchip alone
boasts a product line of over 100 distinct part numbers.

Microcontrollers are differentiated by a number of characteristics, including, but not


limited to:

* Program storage capacity


* Addressable memory locations
* Available number of registers
* Available number of I/O pins
* Operating speed (instructions per second)
* Available "peripherals" such as serial ports, analog-to-digital converters, timers,
etc.

No matter the embedded design, there is likely a microcontroller properly sized and
suited to do the job. For more information on selecting an appropriate part for a project,
please see the Resources on page 16 section.

The Microchip line of microcontrollers


This tutorial focuses on the Microchip line of microcontrollers. Microchip enjoys a
healthy market share, and also boasts a significant support network. The Resources
section lists a few Microchip support options. The tools available for Microchip
application development are freely available, lowering the barrier to entry to embedded
development and design.

The Microchip line of microcontrollers is known as the PIC family. There are five basic
lines to the PIC family:

* Low-end devices supporting small amounts of program store and no on-board


peripherals
* Midrange devices supporting basic arithmetic functions, optional onboard
peripherals, and a modest program store
* The 17Cxx family of devices boasts enhanced computational capabilities.
* The 18Cxx family devices enjoy significant expansion of program store capacity
over other models as well as software-modifiable stack.
* The most recent addition, the DsPIC line, combines an 18Cxx device with a digital
signal processor, providing a very versatile computational device.

Each of these device families is source level-compatible, and the product line continues
to mature.

PICStart and the 16F84


This tutorial utilizes a midrange microcontroller from Microchip, namely the PIC-16F84.
The 16F84 part is available in a starter, or beginner's, product called the PICStart kit.
The PICStart kit contains everything needed to begin embedded development with

Microcontroller application development Page 6 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Microchip parts, including:

* Microchip's development tools on CD, known as MPLAB and MPASM


* A PIC16F84 device
* A simple serial programmer

The 'F' in the part number stands for flash. A flash part is capable of being configured
via a device known as a programmer. Flash parts can be reprogrammed hundreds of
times. The advent of flash technology and its significance to the embedded design
industry is remarkable; it is a topic unto itself. Suffice it to say for the purpose of this
tutorial, flash technology aids in the edit, compile, and debug cycles by allowing the
same part to be efficiently programmed numerous times. Another common name for a
programmer is an EEPROM burner. Not all programmers are alike. Programmers and
burners are differentiated by the size and shape of the devices they can accept, their
programming speed, and the variety of supported chips.

Examples and instruction supplied in this tutorial are based on the 16F84 part and
programmer available in the PICStart kit. The sample application can be ported to other
Microchip parts with little effort.

Microcontroller application development Page 7 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Section 3. Development tools

Available development tools


Applications for embedded microcontrollers are generally written in assembler, C, or
Basic. There are certainly other options, but these three are by far the most common.
This tutorial utilizes simple assembly instructions in carrying out its tasks. Microchip's
integrated development environment (IDE), known as MPLAB, supports multiple tool
chains. Some of the key features of the MPLAB environment available with the
PICStart kit include:

* Application project management


* Source code editor
* Assembler (MPASM)
* PICStart programmer control
* Debugging facilities
* Microchip part support
* It's free!

These tools are freely available from Microchip's Web site. See the Resources on page 16
section for details on obtaining these tools.

MPLAB also integrates with C compilers. Embedded application development in C is


becoming more popular. While MPLAB and MPASM are freely available, the C
compilers are available in a variety of price ranges. See the Resources on page 16
section for more information on available C compilers for Microchip parts.

In addition to these environments, there are a few Basic-language programming


environments available. The most popular is the Parallax "Basic Stamp," which is a
microcontroller capable of running Basic programs. Another popular Basic chip is the
8052 and its variants. These popular microcontrollers have provided an alternative to
developers not willing to delve into the world of assembler. The Resources on page 16
section contains a link to Jan Axelson's book on microcontroller design ideas.

MPLAB
Perform the default installation of the MPLAB software and then start MPLAB. Take a
brief look through the various menu options to get a feel for the available choices.
MPLAB is broken into the following menu choices:

* File -- Manipulate files, such as C and ASM source files.


* Project -- Manage projects, including executing builds.
* Debug -- Run, step-through, and halt the active project in MPLAB's simulator. This
also includes a facility for simulating signals at various pins on the device. This is
useful for testing an application's response to a button press.
* PICStart Plus -- Controls access to the PICStart programmer, used to "burn" the
current project into a physical device.
* Window -- Provides access to a variety of useful windows, including memory,
program listing, watch variables, and more.

Microcontroller application development Page 8 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

The MPLAB installation subdirectories contain a variety of templates and examples


helpful in application development.

Common assembler instructions


Assembly language is the most dreaded topic for many programmers familiar with
high-level languages such as C, Basic, and Java. On high-powered platforms,
Assembly language is not required for most day-to-day programming chores. However,
when dealing in resource-limited platforms such as microcontrollers where there is
often the need to respond to real-world interrupts, speed is of the essence. When
speed is important, Assembly language is sure to follow. Below are a few commonly
used assembly instructions for the PIC microcontroller family. The actual instructions
vary in each class of PIC microcontroller; however, differences are more the exception
than the rule. For more information on PIC microcontroller instructions sets, see the
Resources on page 16 section.

The PIC is organized into a series of file registers, each 8 bits wide. Instructions can
access a register directly, indirectly, or use a literal value. All PIC microcontrollers have
a special register known as the 'W' register. This is a working register, used as the
implied source and optional destination for many operations. Here are some examples:

movlw 0x01 ; moves the literal value 0x01 into the w register.
movwf R ; moves the value in the w register into the register, R
addwf R ; add the contents of the w register to R, leaving results in R
incf R ; increment value in R by 1, leaving result in R
incrsz R ; increment value in R by 1, if R becomes zero,
; skip the next instruction

There are also bit-oriented instructions used to set, clear, or test a bit in a register or
port. Here are some examples:

bcf R, 1 ; clear bit one in register R


bsf R, 3 ; set bit three in register R
btfsc R, 4 ; test bit 4 in register R, skip the next instruction
; if bit 4 is clear (= 0)

Sample application source code


The tutorial's sample application consists of a single assembly source file, ibmdw.asm
. This program is very simplistic, yet provides a glimpse of key PIC programming
instructions. The program contains a code section for module level directives, a section
for initialization, and a main program loop. Here is the code listing for the pertinent
portion of ibmdw.asm , followed by a section-by-section description. The full project is
available via download.

INCLUDE "p16f84.inc"
org 0x00 ; set program memory base at vector reset
reset
bsf STATUS, RP0 ; Goto Bank 1 to set Port Direction
movlw 0x00 ; set all of portb to output

Microcontroller application development Page 9 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

movwf TRISB ^ 0x080


bcf STATUS, RP0 ; Go back to Bank 0
mainloop
bcf PORTB, 0 ; enable the LED on PORTB.0
bcf PORTB, 1 ; enable the LED on PORTB.1
bsf PORTB, 2 ; disable the LED on PORTB.2
bcf PORTB, 3 ; enable the LED on PORTB.3
goto mainloop
end

This program begins by including information specific to the 16F84 processor with the
INCLUDE directive.

The PIC architecture "multiplexes" access to various registers by organizing them into
register banks. Setting the RP0 bit in the STATUS register provides access to the
TRISB register. This register controls the input/output state of PORTB. Once the
TRISB register has been updated, the register bank is restored.

The main loop of the program simply sets and clears various bits in PORTB. These bits
control pins RB0, RB1, RB2, and RB3. The pins control the current flow in the circuit.
When the value is cleared, or low, current flows through an LED causing it to illuminate.

Testing tool installation: Building


The sample source code available in the Resources on page 16 section is a good place
to start in validating the tool installation. Here are the required steps:

1. Unzip the sample source into a new directory named ibmdw .


2. Start MPLAB.
3. Open the project using the Project | Open menu in MPLAB. Navigate to the
ibmdw folder containing the sample project. This is in the ibmdw.pjt file.
4. Build the project using the Project | Make Project menu choice (or F-10 key).
5. Verify that the results window says: Build completed successfully.

The output of an MPLAB project is a HEX file. The HEX file contains the low-level
information required by the PIC device.

Select the Project | Edit Project menu choice. This displays a view of the ibmdw project
in MPLAB.

Microcontroller application development Page 10 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

The target of the project is the HEX file mentioned above. The target filename is
ibmdw.hex . The project contains a single node, namely: ibmdw.asm . If the project
contained multiple source files, each would appear as a node beneath the ibmdw[hex]
line in the Project Files window.

Using the MPLAB simulator


Once the application has been successfully built, the MPLAB environment allows
debugging of the application. Debugging can be accomplished via the Debug menu,
the toolbar, or through window accelerator keys:

* Run: F9
* Reset: F6
* Halt: F5

Microcontroller application development Page 11 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

* Step: F7
* Step-Over: F8

Under the window menu choice, select Watch Windows | New Watch Window.
Select PORTB from the available choices in the list to the left. Click on the Add button.
As each line of code is executing during the debugging process, the Watch Window's
contents update to reflect current register values. The window can contain variables,
I/O ports, and registers. Debugging the tutorial's sample application is not very exciting,
but verifying the installation, including the ability to debug, is an important step in
setting up a productive development environment.

Testing tool installation: Programming


The next step is to burn, or program, the HEX file into the PIC chip itself. The following
steps describe burning the code with the PICStart Plus Programmer available in the
PICStart kit. The steps for other programmers will vary.

Connect the programmer to the PC via an available serial port. Place the 16F84 part
into the programmer, aligning it in the top-most pin slots. The 16F84 (and most
integrated circuits) have a semi-circle on the end near pin number 1. Place this end
toward the top of the programmer. Raise the silver handle to secure the part.

Next, select the PICStart Plus | Enable Programmer menu choice. This causes
MPLAB to find the PICStart programmer attached to one of the PC's serial ports. When
the programmer is found, MPLAB displays a small dialog window containing important
settings for the programmer. Click on the Configuration Bits button. Another, smaller
window is displayed. Make the following selections:

* Oscillator: XT
* Watchdog Timer: Off
* PowerUp Timer: On
* Code Protect: Off

Click on the Program button on the PICStart window in MPLAB. Another window
appears displaying the status of the programming process. The result should be
Success. The status window closes a moment after the programming is complete.

Microcontroller application development Page 12 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Section 4. Circuit design

PIC micros are fully independent... almost


While a PIC microcontroller contains the majority of components required to operate, it
still requires a small accompaniment of discrete components. The key elements to
operating the PIC microcontroller are power and clocking:

* Power: The chip needs a 5-volt source to operate with sufficient amperage to run
the PIC and accompanying peripherals.
* Clocking: The clock provides timing for the instructions of the microcontroller to
operate. Without a clock signal, the PIC sits dormant, without a heartbeat.

A PIC operates quite happily with power and a clock source, although it doesn't do
anyone much good running all by itself. A useful PIC circuit needs additional
capabilities to provide value. Switches, sensors, serial interfaces, feedback
mechanisms such as LEDs, relays, buzzers, and the like provide the necessary glue
for a microcontroller application.

In addition to the overtly useful support components mentioned above, there are
discrete components used to keep the circuit healthy. The most common examples of
this in introductory circuit design include current limiting resistors to protect LEDs, and
power line filtering capacitors to stabilize the power source for the microcontroller.

Tutorial sample circuit


The sample circuit is a very simple reference design. The diagram below describes the
circuit used in this tutorial. In addition to the required components of power, clocking,
and reset, the PIC drives an array of four LEDs. The diagram is a crude layout
representing the circuit. Following are some points to note in this circuit.

* A quartz crystal is connected across pins 15 and 16, providing a clocking source.
PIC circuit clocking ranges from a simple Resistor/Capacitor (RC) circuit to 4, 7,
12, and even 20 MHz crystals.
* A capacitor filters the power source.
* The MCLR pin is "pulled high," allowing the part to run and stay out of the reset
condition.
* Pins 14 and 5 provide power and ground respectively.
* The main loop of the program clears bits in PORTB, attached to pins 6, 7, 8, and
9. This creates a potential across the LEDs, allowing current to flow, and thus
illuminating them.
* Current limiting resistors are employed to protect the LEDs and the PIC.

Microcontroller application development Page 13 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Bill Of material
The parts list for this project is very modest:

Item Quantity
5 volt power supply 1
Quartz Crystal (4 or 7 MHz is fine). A simple RC Oscillator is sufficient 1
as well
.1 micro-Farad Capacitor to filter power supply 1
10K ohm resistor to "pull up" MCLR pin 1
LED array 1
Or single LED 4
220 ohm resistor (one per LED) 4
Jumper wires handful
PIC16F84 1

UMPS

Microcontroller application development Page 14 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

There is an additional tool available for prototyping circuit designs warranting mention.
The Universal Microprocessor Program Simulator (UMPS) is a Windows-based tool
that allows rapid prototyping of microcontroller applications and circuit designs. It
models components outside of the processor itself, such as switches, serial interfaces,
latches, and more. This ability to simulate external components takes the development
process to the next level by affording the designer the luxury of simulating a design
prior to purchasing parts and undergoing the task of circuit layout.

UMPS offers support for most popular microcontroller architectures and is


commercially available. For more information on obtaining an evaluation copy of
UMPS, see the Resources on page 16 section.

Microcontroller application development Page 15 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Section 5. Summary & resources

Summary
This tutorial has presented the basics of microcontroller application design for the
beginner. From this introductory framework, more complex applications can be built.
Next steps for the aspiring embedded developer call for enhancements to the sample
application and circuit. These enhancements might include capturing user input via a
keypad or interacting with another device by way of a serial connection. The only
limitation to embedded development is the imagination.

Resources
* You can find sample source for this tutorial at http://www.cfgsolutions.com. Follow
the IBM developerWorks link on the left.
* The developerWorksPalm OS Data Collection Series discusses a potential
embedded application. The article and tutorials may be found at
http://www-106.ibm.com/developerworks/wireless/library/wi-edpick.html .
* Myke Predko has written many quality books on embedded development. Check
out his Web site at http://www.myke.com.
* Find the PicList mailing list at http://www.piclist.com.
* Microchip offers free development tools. Download MPLAB at
http://www.microchip.com/11110/pline/tools/index.htm.
* Selecting the proper microcontroller is a crucial step in the success of a project.
This guide enumerates all of the current Microchip parts:
http://www.microchip.com/11110/suppdoc/index.htm.
* Find available C compilers for Microchip parts at
http://www.microchip.com/11110/pline/tools/picmicro/code/third/index.htm.
* Parallax markets the Basic Stamp line of microcontrollers. Learn more at
http://www.parallax.com.
* Jan Axelson has contributed many fine volumes to PC and embedded design.
Visit her site at http://www.lvr.com.
* Microchip offers many Application Notes providing helpful ideas on PIC-based
projects. Visit the Microchip site at
http://www.microchip.com/11110/suppdoc/appnote/index.htm.
* You can find UMPS at http://www.vmdesign.com.
* Darrick Addison's developerWorks article on Robotics provides some insight into
the use of microcontrollers in automation:
http://www-106.ibm.com/developerworks/library/l-rob.html .
* For a glimpse at assembly language on the Intel X86 platform, see this
developerWorks article: http://www-106.ibm.com/developerworks/library/l-ia.html .

Feedback
Please send us your feedback on this tutorial. We look forward to hearing from you!

Microcontroller application development Page 16 of 17


Presented by developerWorks, your source for great tutorials ibm.com/developerWorks

Colophon
This tutorial was written entirely in XML, using the developerWorks Toot-O-Matic tutorial
generator. The open source Toot-O-Matic tool is an XSLT stylesheet and several XSLT
extension functions that convert an XML file into a number of HTML pages, a zip file, JPEG
heading graphics, and two PDF files. Our ability to generate multiple text and binary formats
from a single source file illustrates the power and flexibility of XML. (It also saves our
production team a great deal of time and effort.)

You can get the source code for the Toot-O-Matic at


www6.software.ibm.com/dl/devworks/dw-tootomatic-p. The tutorial Building tutorials with the
Toot-O-Matic demonstrates how to use the Toot-O-Matic to create your own tutorials.
developerWorks also hosts a forum devoted to the Toot-O-Matic; it's available at
www-105.ibm.com/developerworks/xml_df.nsf/AllViewTemplate?OpenForm&RestrictToCategory=11.
We'd love to know what you think about the tool.

Microcontroller application development Page 17 of 17

You might also like