General debugging methods
Most of these debugging
techniques can be applied to any microcontroller since they do not use
any specific tools.
There are many ways to debug
- Serial RS232.
- Hardware pins.
- Logic Analyzer.
The In Circuit Emulator is the most
expensive way to debug
your hardware. You buy a special processor that physically takes the
place of the normal processor. This special processor allows software
access to the internal operation of the processor (you can set
breakpoints on hardware modules).
ICD (PIC microcontroller)
The next best thing to ICE is ICD (In Circuit Debug)
Sometimes known as (BDM - Background Debug Mode - for non PIC
microcontrollers) let you single
step through code actually running in the target processor.
For ICD the processor has a
small amount of built in hardware that can
halt the processor when the program reaches a specific address. The
software can then read back all the registers and processor
With a source
code simulator you can step through the high level language
code and see its effect on memory and variables without having to look
at the assembler code directly. This lets you focus on the high level
language operation and lets you concentrate on the problem you are
trying to solve.
One great advantage of the
simulator is that you do not have to wait to
download and program the target processor (you do have to re-compile
the code after changing its source code though). So you can cut out the
time consuming programming task just by using the simulator.
Note: Simulators are
no good for debugging interrupts.
Debugging using hardware
Newer microcontrollers have a
built in UART giving you a virtually free
debug tool that uses minimal resources and needs very little software
For debug output you need to
connect the UART output pin (TX) to a
suitable level translator circuit e.g. a MAX232 chip. You may even get
away with direct connection (via a resistor) to the input of your PC
serial port (but this depends on the specifics of your PC hardware) -
using a translator chip will always work.
- Minimal coding.
- Simple to use.
- Minimal extra hardware.
- Takes a long time to output a character (~1ms).
- Takes even longer for blocks of characters
(~10s of ms).
- Needs extra hardware.
Even through it takes time to
output a character it is a useful debug
tool as you can output the value of a variable to see what the
microcontroller is really doing.
An LCD (Liquid Crystal Display) gives a convenient way
of displaying debugging information. It is also useful for many
different applications that need a text display output.
It is a module that displays
text characters and a common screen size is 2 rows of 16 characters.
Most LCD modules use the
HD44780 controller chip which is why LCD routines built into high level
languages always work.
- Very quick update (40us 4 bit data bus).
- Useful in many projects as the main display
- Simple to interface to an 8 bit port (only
needs six of the 8 bits).
- Uses up an 8 bit port.
- Hardware is more expensive (e.g. compared to a
serial port chip).
Using an LED as a
microcontroller 'alive' indicator.
Even though it is such a
simple thing to blink an LED on and off it is
extremely useful as a debugging tool as you can tell at a glance
whether the code you just downloaded is working.
Sometimes you can will
incorrectly set parameters on the programming software or compiler
which will stop the code dead.
The LED indicator gives a
quick health check for your microcontroller which is easy to see.
This is the simplest and
crudest debugging method; using any available
port pin. Simply set or reset this pin at any point in the code that
you want to monitor.
It has minimal impact on the
code speed or size and can give you the following information:
- You can tell if the code is active.
- It gives you the repetition rate.
- It gives you the routine time length (if you
set the pin at the start and reset it at the end).
Note: To do testing you need
an oscilloscope or a frequency counter and time interval measuring tool.
This tool attaches to the pins you want to
observe and captures the waveforms displaying multiple traces on a
single display. It uses a trigger module that can be set to activate on
combinations of the input signals or on their length. So you can
trigger on specific patterns or on glitches or both.
For non-microcontroller based
systems (e.g. 80486 based) where the data
and address bus are exposed a logic analyzer can show the address and
data organized into hex words i.e. readable. Some can disassemble the
instructions showing what the processor was doing at the trigger point.
For a microcontroller based
system the logic analyzer can be useful in
examining peripheral operation e.g. for debugging the SPI or I2C busses
some logic analyzers also have built in support for these protocols.
Another use for the logic
analyzer is to capture output over a long
period of time depending on the memory capacity of the logic analyzer.
In short there are many techniques to debug your
hardware ranging from simple (an output pin) to complex (a logic
analyzer). All of them can be useful depending on the problem you want
Copyright © John Main
Free to distribute if the article is kept complete.
Jump from article debugging to
Best Microcontroller Projects Home page.