7) MICROCONTROLLER PROGRAMMING LANGUAGES
Just a bit of an introduction for the beginner.
Machine language is the program representation as the microcontroller
understands it. It is not easy for humans to read and is a common
cause of migraine headaches. Assembly language is a human-readable
form of machine language which makes it much easier for us flesh and
bone types to deal with. Each assembly language statement
corresponds to one machine language statement (not counting macros).
An assembly/machine language program is fast and small. This is
because you are in complete charge of what goes into the program. Of
course, if you write a slow, large, stupid program, then it will run
slowly, be too big, and be stupid. Assembly language (assembler)
can't correct stupidity - although sometimes I wish it could ;-).
If you are starting out learning about microcontrollers, it would be
worth your while first learning assembler. By programming in
assembler, you master the underlying architecture of the chip, which
is important if you intend to do anything significant with your
microcontroller.
An interpreter is a high level language translator that is closer to
natural language. The interpreter itself is a program that sits
resident in the microcontroller. It executes a program by reading
each language statement one at a time and then doing what the
statement says to do. The two most popular interpreters for
microcontrollers are BASIC and FORTH.
BASIC's popularity is due to its simplicity, readability, and of
course just about everyone has at least played with BASIC at one time
or another. One common compaint about [interpreted] BASIC is that it
is slow. Often this can be solved by using a different technique for
performing the desired task. Other times it is just the price paid
for using an interpreter.
FORTH has a very loyal following due to its speed (approaching that
of assembler language) and its incremental approach to building a
system from reusable parts. Many FORTH systems come with a host
system which turns your desktop computer into a development system.
FORTH can be quite difficult to write in (if you have no experience
with it) and is probably even harder to read. However, it is a very
useful and productive language for control systems and robotics, and
can be mastered in time.
The nicest thing about developing a system with an interpreter is
that you can build your program interactively. You first write a
small piece of code and then you can try it out immediately to see
how it works. When the results are satisfactory, you can then add
additional components until the final product is achieved.
A compiler is a high level language translator that combines the
programming ease of an interpreter with greater speed. This is
accomplished by translating the program (on a host machine such as a
desktop PC) directly into machine language. The machine language
program is then burned onto an EPROM or downloaded directly to the
microcontroller. The microcontroller then executes the translated
program directly, without having to interpret first.
The most popular microcontroller compilers are C and BASIC. PL/M,
from Intel, also has some popular support due to that company's
extensive use of that language.
Due to both its popularity and its slow speed, it was only logical
that BASIC would appear as a compiled language. A few companies
supply a BASIC compiler for several of the more popular
microcontrollers. Execution speed is drastically increased over
interpreted BASIC since the microcontroller is freed from the task of
interpreting the statements as the program runs.
While interpreted Forth approaches (and sometimes surpasses) the
speed of many compilers, compiled Forth screams along. Today there
are many high performance optimizing native code Forth compilers, and
there are also lots of very cheap or free public domain Forths. Some
of them like Tom Almy's ForthCMP produces optimized native code with
less overhead and better performance than just about anything else
out there. Of course it still has compactness and more elegant
factoring of functionality than in most languages.
C is now the language of choice for the entire universe. C is used
on computers from the tiny microcontroller up to the largest Cray
supercomputer. Although a C program can be a bit tedious at times to
read (due to the terse programming style followed by many C
programmers), it is a powerful and flexible development tool.
Although a high level language, it also gives the developer access to
the underlying machine. There are several very good and cheap C
compilers available for the more popular microcontrollers. It is
widely used, available, supported, and produces fairly efficient code
(fast and compact).
Fuzzy Logic and neural networks are two design methods that are
coming into favor in embedded systems. The two methods are very
different from each other, from conception to implementation.
However, the advantages and disadvantages of the two can complement
each other.
The advantage of neural networks is that it is possible to design
them without completely understanding the underlying logical rules by
which they operate. The neural network designer applies a set of
inputs to the network and "trains" it to produce the required output.
The inputs must represent the behavior of the system that is being
programmed, and the outputs should match the desired result within
some margin of error. If the network's output does not agree with
the desired result, the structure of the neural network is altered
until it does. After training it is assumed that the network will
also produce the desired output, or something close to it, when it is
presented with new and unknown data.
In contrast, a fuzzy-logic system can be precisely described. Before
a fuzzy control system is designed, its desired logical operation
must be analyzed and translated into fuzzy-logic rules. This is the
step where neural networks technology can be helpful to the
fuzzy-logic designer. The designer can first train a software neural
network to produce the desired output from a given set of inputs and
outputs and then use a software tool to extract the underlying rules
from the neural network. The extracted rules are translated into
fuzzy-logic rules.
Fuzzy logic is not a complete design solution. It supplements rather
than replaces traditional event control and PID (proportional,
integral, and derivate) control techniques. Fuzzy logic relies on
grade of membership and artifical intelligence techniques. It works
best when it is applied to non-linear systems with many inputs that
cannot be easily expressed in either mathematical equations used for
PID control or IF-THEN statements used for event control.
In an effort to change fuzzy logic from a "buzzword" (as it is in
most parts of the world) to a well established design method (as it
is in Japan), most manufacturers of microcontrollers have introduced
fuzzy logic software. Most software generates code for specific
microcontrollers, while other generates C code which can be compiled
for any microcontroller.