7) MICROCONTROLLER PROGRAMMING LANGUAGES


    Just a bit of an introduction for the beginner.


7.1) Machine/Assembly language


    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.


7.2) Interpreters


    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.


7.3) Compilers


    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).


7.4) Fuzzy Logic and Neural Networks


    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.