This article is a primer and general FAQ about microcontrollers. Included is a collection of information sources on various microcontrollers. The following topics are addressed: 0) Rantings and ravings (to make the FAQ zero-based) 1) ABOUT THIS FAQ 1.1) Who put this FAQ together? 1.2) How can I contribute to this FAQ? 1.3) What newsgroups will this FAQ be posted to? 1.4) May I distribute this FAQ or post it somewhere else? 2) MICROCONTROLLERS 2.1) What is a Microcontroller? 2.2) Applications 2.3) Flavors 2.4) Special microcontroller features 2.5) Some popular microcontrollers 3) MICROCONTROLLER PROGRAMMING LANGUAGES 3.1) Machine/Assembly language 3.2) Interpreters 3.3) Compilers 4) DEVELOPMENT TOOLS 4.1) Simulators 4.2) Resident Debuggers 4.3) Emulators 4.4) Good Stereo System 5) FINDING OUT MORE ABOUT MICROCONTROLLERS 5.1) Books 5.2) Periodicals 5.3) Internet newsgroups 5.4) Internet sources of information on specific microcontrollers 6) MICROCONTROLLER FREE SOFTWARE SOURCES 6.1) FTP sites 6.2) BBSs 0) Rantings and ravings Disclaimer: Just so it is understood, the "rantings and ravings" are my rantings and raving. My readers are refined and sophisticated and would never rant or rave. I, on the other hand, sit in front of the TV in torn underwear and drink beer out of the bottle. The other day I was watching my 8 year old daughter play with her Barbie Dolls. She has about 7 or so, including two that used to belong to my wife (Roz) when she was a girl. I noticed an interesting difference between the old dolls and the new dolls. The old Barbies could only move their heads sideways, while the new Barbies not only can move their heads sideways, but also up and down. AMAZING - the old Barbies were good girls - they could only say no. The new Barbies however can also say yes. Progress - isn't it wonderful! Which leads me to an amazing fact. Most everyone thinks of the PIC microcontroller line as being a recent introduction. However, they've been around for over 20 years. What's the difference? The new chips are fabricated in CMOS, some features have been added, new family lines have been introduced, and the company name is Microchip and not General Instrument. Microchip actually seems to care - they are aggressive and are providing a product that their customers want. Whatever the differences might be, these chips are really dynamite. PSST! Hey kid! Want a naked Barbie Doll?! Just a reminder to please be kind and send in your suggestions. Thanks. Take care of yourselves, Uncle Russ 1) ABOUT THIS FAQ 1.1) Who put this FAQ together? Me again! This FAQ is just a way to tie up loose ends. From time to time, general questions about microcontrollers (from beginners to experienced designers) pop up in the newsgroups. It seemed that a general primer/FAQ on microcontrollers might be useful. Much of this document could be considered as a sort of a primer on microcontrollers. For those of you with previous experience, sections 5 and 6 might be of special interest (especially for those of you looking for that elusive "free COBOL compiler for the 1802"). 1.2) How can I contribute to this list? I please ask that if you have any suggestions or additions, or you would like to correct any of the information contained herein, please send me a note. My Email address is: sibit@datasrv.co.il My Smail address is: Russ Hersch HaVradim 11 Ginot Shomron ISRAEL Thanks to the following who have contributed to this document: Robin L. Getz (National Semiconductor) William Chernoff Robert Boys Cecil Moore (Intel) Bob Coggeshall Richard H. Barnett (who has actually succeeded in publishing a book in 1995 - cute trick!) Dave Dunfield (Dunfield Development Systems) Ross Mitchell Jason McDonald (Program Coordinator, MW Media) Also, thanks to those who have posted questions and to those who have posted answers. Thanks to "my new friends" who send suggestions and encouragement, as well as the occasional question. Special thanks to my mother-in-law, who thankfully will probably never read this document. I hope that those of you who have special knowledge on the subject of microcontroller use, or know of sources of information on microcontrollers, will share with everyone by contributing to document. 1.3) What newsgroups will this FAQ be posted to? I will test the waters by initially posting to the following newsgroups: comp.robotics comp.sys.intel comp.sys.m68k comp.sys.6809 sci.electronics alt.comp.hardware.homebuilt I will look forward to any suggestions about postings. I will probably post once a month - probably on or about the 26th of each month. 1.4) May I distribute this FAQ or post it somewhere else? I am putting no restrictions on the use of this FAQ except - It must be distributed in its entirety with the copyright notice, and no financial gain may be realized from it. After all, I have spent, and continue to spend, a lot of time on this. For this reason I have appended a copyright statement to the end of this FAQ. I feel pretty silly doing this, but I just want to protect myself. The copyright does not limit the use of this list for noncommercial purposes. I hereby give my permission to one and all to pass this list around and post it wherever you want - as long as it is not for financial gain. Thank you. 2) MICROCONTROLLERS 2.1) What is a Microcontroller? A controller is used to control (makes sense!) some process or aspect of the environment. A typical microcontroller application is the monitoring of my house. As the temperature rises, the controller causes the windows to open. If the temperature goes above a certain threshold, the air conditioner is activated. If the system detects my mother-in-law approaching, the doors are locked and the windows barred. In addition, upon detecting that my computer is turned on, the stereo turns on at deafening volume (for more on this, see the section on development tools). At one time, controllers were built exclusively from logic components, and were usually large, heavy boxes. Later on, microprocessors were used and the entire controller could fit on a small circuit board. This is still common - you can find many [good] controllers powered by one of the many common microprocessors (including Zilog Z80, Intel 8088, Motorola 6809, and others). As the process of miniaturization continued, all of the components needed for a controller were built right onto one chip. A one chip computer, or microcontroller was born. A microcontroller is a highly integrated chip which includes, on one chip, all or most of the parts needed for a controller. The microcontroller could be called a "one-chip solution". It typically includes: CPU (central processing unit) RAM (Random Access Memory) EPROM/PROM/ROM (Erasable Programmable Read Only Memory) I/O (input/output) - serial and parallel timers interrupt controller By only including the features specific to the task (control), cost is relatively low. A typical microcontroller has bit manipulation instructions, easy and direct access to I/O (input/output), and quick and efficient interrupt processing. Microcontrollers are a "one-chip solution" which drastically reduces parts count and design costs. 2.2) Applications In addition to control applications such as the above home monitoring system, microcontrollers are frequently found in embedded applications. Among the many uses that you can find one or more microcontrollers: appliances (microwave oven, refrigerators, television and VCRs, stereos), automobiles (engine control, diagnostics, climate control), environmental control (greenhouse, factory, home), instrumentation, aerospace, and thousands of other uses. Microcontrollers are used extensively in robotics. In this application, many specific tasks might be distributed among a large number of microcontrollers in one system. Communications between each microcontroller and a central, more powerful microcontroller (or microcomputer, or even large computer) would enable information to be processed by the central computer, or to be passed around to other microcrontrollers in the system. A special application that microcontrollers are well suited for is data logging. Stick one of these chips out in the middle of a corn field or up in a ballon, and monitor and record environmental parameters (temperature, humidity, rain, etc). Small size, low power consumption, and flexibility make these devices ideal for unattended data monitoring and recording. 2.3) Flavors Microcontrollers come in many flavors and varieties. Depending on the power and features that are needed, you might choose a 4 bit, 8 bit, 16 bit, or 32 bit microcontroller. In addition, some specialized versions are available which include features specific for communications, signal processing, video processing, and other tasks. 2.4) Special microcontroller features CMOS - Complementary Metal Oxide Semiconductor This is the name of a common technique used to fabricate most (if not all) of the newer microcontrollers. CMOS requires much less power than older fabrication techniques, which permits battery operation. CMOS chips also can be fully or near fully static, which means that the clock can be slowed up (or even stopped) putting the chip in sleep mode. CMOS has a much higher immunity to noise (power fluctuations or spikes) than the older fabrication techniques. PMP - Post Metal Programming (National Semiconductor) PMP is a high-energy implantation process that allows microcontroller ROM to be programmed AFTER final metalization. Usually ROM is implemented in the second layer die, with nine or ten other layers then added on top. That means the ROM pattern must be specified early in the production process, and completed prototypes devices won't be available typically for six to eight weeks. With PMP, however, dies can be fully manufactured through metalization and electrical tests (only the passivation layers need to be added), and held in inventory. This means that ROM can be programmed late in production cycle, making prototypes available in only two weeks. OTP - One Time Programmable An OTP is a PROM (Programmable Read-Only-Memory) device. Once your program is written into the device with a standard EEPROM burner, it can not be erased or modified. This is usually used for limited production runs before a ROM mask is done in order to test code. Watchdog timer A watchdog timer provides a means of graceful recovery from a system problem. This could be a program that goes into an endless loop, or a hardware problem that prevents the program from operating correctly. If the program fails to reset the watchdog at some predetermined interval, a hardware reset will be initiated. The bug may still exist, but at least the system has a way to recover. This is especially useful for unattended systems. Analog to Digital Conversion (A/D) Converts an external analog signal (typically relative to voltage) and converts it to a digital representation. Microcontrollers that have this feature can be used for instrumention, environmental data logging, or any application that lives in an analog world. Comparator One or more standard comparators can sometimes be placed on a microcontroller die. These comparators operate much like standard comparators however the input and output signals are available on the microcontroller bus. Pulse width modulator Often used as a digital-to-analog conversion technique. A pulse train is generated and regulated with a low-pass filter to generate a voltage proportional to the duty cycle. Pulse accumulator A pulse accumulator is an event counter. Each pulse increments the pulse accumulator register, recording the number of times this event has occured. Input Capture Input Capture can precisely measure external frequencies or time intervals by copying the value from a free running timer into a register when an external event occurs. Clock Monitor A clock monitor can shut the microcontroller down (by holding the microcontroller in reset) if the input clock is too slow. This can usually be turned on or off under software control. Brownout Protection Brownout protection is usually an on-board protection circuit that resets the device when the operating voltage (Vcc) is lower than the Brownout voltage. The device is held in reset and will remain in reset when Vcc stays below the Brownout voltage. The device will resume execution (from reset) after Vcc has risen above the Brown Out Voltage. UART A UART (Universal Asynchronous Receiver Transmitter) is a serial port adapter for asynchronous serial communications. USART A USART (Universal Synchronous/Asynchronous Receiver Transmitter) is a serial port adapter for either asynchronous or synchronous serial communications. Synchronous serial port A synchronous serial port doesn't require start/stop bits and can operate at much higher clock rates than an asynchronous serial port. Used to communicate with high speed devices such as memory servers, display drivers, additional A/D ports, etc. Can also be used to implement a simple microcontroller network. SPI (Motorola) An SPI (serial peripheral interface) is a synchronous serial port. SCI An SCI (serial communications interface) is an enhanced UART (asynchronous serial port). I2C bus - Inter-Integrated Circuit bus (Intel) The I2C but is a two line, multi-master, multi-slave network interface with collision detection. Several peripherals also exist that support the I2C bus. Each node (microcontroller or peripheral) may initiate a message, and then transmit or receive data. The two lines of the network consist of the serial data line and the serial clock line. Each node on the network has a unique address which accompanies any message passed between nodes. Since only 2 wires are needed, it is easy to interconnect a number of devices. MICROWIRE/PLUS (National Semiconductor) MICROWIRE/PLUS is a serial synchronous bi-directional communications interface. This is used on National Semiconductor Corporation's devices (microcontrollers, A/D converters, display drivers, EEPROMS, etc.). Software protection Either by encryption or fuse protection, the programmed software is protected against unauthorized snooping (reverse engineering, modifications, piracy, etc.). Idle/Halt/Wakeup The device can be placed into IDLE/HALT mode by software control. In both Halt and Idle conditions the state of the microcontroller remains. RAM is not cleared and any outputs are not changed. The terms idle and halt often have different definitions, depending on the manufacturer. What some call idle, others may call halt, and vice versa. It can be confusing, so check the data sheet for the device in question to be sure. In IDLE mode, all activities are stopped except: - associated on-board oscillator circuitry - watchdog logic (if any) - the clock monitor - the idle timer (a free running timer) Power supply requirements on the microcontroller in this mode are typically around 30% of normal power requirements of the microprocessor. Idle mode is exited by a reset, or some other stimulus (such as timer interrupt, serial port, etc.). A special timer/counter (the idle timer) causes the chip to wake up at a regular interval to check if things are OK. The chip then goes back to sleep. IDLE mode is extremely useful for remote, unattended data logging - the microprocessor wakes up at regular intervals, takes its measurements, logs the data, and then goes back to sleep. In Halt mode, all activities are stopped (including timers and counters). The only way to wake up is by a reset or device interrupt (such as an I/O port). The power requirements of the device are minimal and the applied voltage (Vcc) can sometimes be decreased below operating voltage without altering the state (RAM/Outputs) of the device. Current consumption is typically less than 1 uA. A common application of HALT mode is in laptop keyboards. In order to have maximum power saving, the controller is in halt until it detects a keystroke (via a device interrupt). It then wakes up, decodes and sends the keystroke to the host, and then goes back into halt mode, waiting either for another keystroke, or information from the host. Resident program loader Loads a program by Initializing program/data memory from either a serial or parallel port. Convenient for prototyping or trying out new features, eliminates the erase/burn/program cycle typical with EPROMs, and allows convenient updating of a system even from an offsite location. Monitor A monitor is a program installed in the microcontroller which provides basic development and debug capabilities. Typical capabilities of a microcontroller monitor include: loading object files into system RAM, executing programs, examining and modifying memory and registers, code disassembly, setting breakpoints, and single-stepping through code. Some simple monitors only allow basic functions such as memory inspection, and the more sophisticated monitors are capable of a full range of debug functions. Monitors can either communicate with a dumb terminal or with a host computer such as a PC. Much of the work of the monitor (such as user interface) can be offloaded to the host PC running a program designed to work with the monitor. This makes it possible to reduce the size and complexity of the code that must be installed in the target system. MIL transducer An MIL transducer is a sophisticated and expensive device that detects the presence of your mother-in-law. Sensitivity settings are possible for a full range of stimuli such as: snarling, stomping, nasty faces, and others. Techno-Wimp (address withheld upon request), the sole manufacturer of the MIL transducer, has recently announced a major new version which is sensitive enough to detect less-tangible stimuli. This breakthrough product is dubbed the MIL-WOMF ("Whoa, outta my face!") transducer. Both the original MIL and the new MIL-WOMF transducers are programmable and easy to interface to most microcontrollers. 2.5) Some popular microcontrollers Some common microcontrollers are described below. A common question is "what microcontroller should I use for...?" Well, that's a tough one. The best advice would be to choose a chip that has a full set of development tools at the price you can afford, and good documentation. For the hobbyist, the Intel 8051, Motorola 68hc11, or Microchip PIC would all make suitable choices. 8048 (Intel) The grandaddy of 'em all, the first microcontroller, it all started here! Although a bit long in the tooth and a bit kludgey in design (at least by today's standards), it is still very popular due to its very low cost, availability, and wide range of development tools. Split memory architecture with program ROM on chip with an additional 64 to 256 bytes also on chip. I/O is mapped in its own space. 8051 (Intel and others) The 8051, Intel's second generation of microcontrollers, rules the microcontroller market at the present time. Although featuring a somewhat bizarre design, it is a very powerful and easy to program chip (once you get used to it). Split memory architecture with separate address spaces for program memory and data memory. The program memory can be up to 64K. The lower portion (4K or 8K depending on type) may reside on chip. The 8051 can address up to 64K of external data memory, and is accessed only by indirect addressing. The 8051 has 128 bytes (256 bytes for the 8052) of on-chip RAM, plus a number of special function registers (SFRs). I/O is mapped in its own space. The 8051 features the so-called "boolean processor". This refers to the way instructions can single out bits just about anywhere (RAM, accumulators, I/O registers, etc.), perform complex bit tests and comparisons, and then execute relative jumps based on the results. Piles of software, both commercial and free, are available for the 8051 line. Many manufacturers supply what must be a hundred different variants of this chip for any requirement. Often featured in construction projects in the popular hobbyist magazines. 80186,80188 (Intel) These chips are, in essence, microcontroller versions of the 8086 and 8088 (of IBM/PC fame). Included on the chip are: 2 channels of DMA, 2 counter/timers, programmable interrupt controller, and dynamic RAM refresh. There are several variations including: low power versions, variations with serial ports, and so on. One major advantage you gain by using one of these microcontrollers is that you can use standard PC development tools (compilers, assemblers, etc) for developing you applications. If you are already familiar with PC software development, the learning curve will be short, since these chips have the same basic architecture as the original 8088 (as used in the IBM/PC). Other advantages include high speed processing, a full megabyte addressing space, and powerful interrupt processing. 80386 EX (Intel) The 80386 EX is of course a 386 in microcontroller clothing. Included on the chip are: serial I/O, power management, DMA, counter/timers, programmable interrupt controller, and dynamic RAM refresh. And of course, all of the power of the 386 microprocessor. One major advantage you gain by using one of these microcontrollers is that you can use standard PC development tools (compilers, assemblers, etc) for developing you applications. If you are already familiar with PC software development, the learning curve will be short, since these chips have the same basic architecture as the original 8088 (as used in the IBM/PC). We're talking power here gang. 8096 The third generation of Intel microprocessors, the 8096 is a 16 bit processor. Among the many features it includes are: hardware multiply and divide, 6 addressing modes, high speed I/O, A/D, serial communications channel, up to 40 I/O ports, 8 source priority interrupt controller, PWM generator, and watchdog timer. 6805 (Motorola) The 6805 is based loosely on the manufacturer's earlier 6800, with some similarities to the 6502. It has a common memory architecture in which instructions, data, I/O, and timers all share the same space. Stack pointer is 5 bits wide which limits the stack to 32 bytes deep. Some members of this family include on chip A/D, PLL frequency synthesizer, serial I/O, and software security. 68hc11 (Motorola and others) The popular 68hc11 is a powerful 8-bit data, 16-bit address microcontroller from Motorola (the sole supplier) with an instruction set that is similar to the older 68xx parts (6801, 6805, 6809). The 68hc11 has a common memory architecture in which instructions, data, I/O, and timers all share the same memory space. Depending on the variety, the 68hc11 has built-in EEPROM/OTPROM, RAM, digital I/O, timers, A/D converter, PWM generator, pulse accumulator, and synchronous and ansynchronous communications channels. Typical current draw is less than 20ma. 683xx (Motorola) The MC68EC300 series incorporates various peripherals into various 68k family core processors. These can be called "integrated processors". They are really super-microcontrollers, very high performance, capable of high processing speeds, and able to address large amounts of memory. A typical example from this line would be the 68331. It is based on a 68020-like core and has about the same processing power as an Intel 80386. PIC (MicroChip) The PIC line of microcontrollers has been popular for over 20 years. Microchip (which was originally [owned by] General Instruments), seems to have recreated this microcontroller into a product universally regarded as a powerful and cost effective solution. The PIC microcontrollers were the first RISC microcontrollers, and maybe still the only ones. RISC generally implies that simplicity of design allows more features to be added at lower cost, and the PIC line is no exception. Although having few instructions (eg. 33 instructions for the 16C5X line versus over 90 for the Intel 8048), the PIC line has a wealth of features included as part of the chip. Separate buses for instructions and data (Harvard architecture) allows simultaneous access of program and data, and overlapping of some operations for increased processing performance. The benefits of design simplicity are a very small chip, small pin count, and very low power consumption. PIC microcontrollers are rapidly gaining in popularity. They are being featured more and more often in construction projects in popular hobbyist magazines, and are chalking up a good number of design wins. Due to their low cost, small size, and low power consumption, these microcontrollers can now be used in areas that previously wouldn't have been appropriate (such as logic circuits). They are currently available in three lines: the PIC16C5x, PIC16Cxx, and PIC17Cxx families. COP800 Family (National Semiconductor) The COP800 Basic Family is a fully static 8-bit microcontroller, fabricated using double metal silicon gate microCMOS technology. This low cost microcontroller contains all system timing, interrupt logic, ROM, RAM, and I/O necessary to implement dedicated control functions in a variety of applications. Depending on the device, features include: 8-bit memory mapped architect, MICROWIRE serial I/O, UART, memory mapped I/O, many 16 bit timer/counters with capture registers, a multi-sourced vectored interrupt, comparator, WATCHDOG Timer and Clock monitor, Modulator/Timer (high speed PWM timer for IR transmission), 8-channel A/D converter with prescaler and both differential and single-ended modes, brownout protection, halt mode, idle mode, high current I/O pins with 15mA sink capability, Schmitt trigger inputs and Multi-Input-Wake-Up. Most devices operate over a voltage range from 2.5V to 6V. High throughput is achieved with an efficient, powerful instruction set operating at a 1uS per instruction rate (most instructions are single byte/single cycle) including true bit manipulation and BCD arithmetic instructions. Most devices have military versions for -55C to +125C. Z8 (Zilog) A "loose" derivative of the Zilog Z80, the Z8 is actually a composite of several different achitectures. Not really compatible with the Z80 peripherals. Has a unique architecture with three memory spaces: program memory, data memory, and a CPU register file. On-chip features include UART, timers, DMA, up to 40 I/O lines. Some versions include a synchronous/asynchronous serial channel. Features fast interrupt response with 37 interrupt sources. The Z8671 has Tiny Basic in ROM. The Super-8 is just that, a super version of the Z8 with more of everything. HD64180 (Hitachi) A powerful microcontroller with full Z80 functionality plus: extended memory management, two DMA channels, synchronous and asynchronous communications channels, timers, and interrupt controller. Some versions of this chip also include EPROM, RAM, and PIO (programmable input/output). It runs Z80 code in fewer clock cycles than the Z80 and adds in hardware multiply and a few other instructions. Available in versions that run up to 18MHz. TMS370 (Texas Instruments) It is similar to the 8051 in having 256 registers, A and B accumulators, stack in this register page, etc. It also has a host of onboard support devices, some members have all of them while others have a subset, the peripherals include: RAM, ROM (mask, OTP, or EEPROM), 2 timers (configurable as timers/ counters/comparators/PWM output), watchdog timer, SCI (syncronous serial port), SPI (asynchronous serial port), A/D (8 bit, 8 channel), interupts. Instruction set is mostly 8 bit with some 16 bit support. Has several addressing modes, 8x8 multiply, 16/8 divide. Clock speeds are up to 20MHz which gives 5MHz for buss access and instruction cycles. Pins mostly TTL compatible (except clock and reset). Packages include: 28,40 DIP 28 CLCC 28,44,68 PLCC 40,64 SDIP A developers/proto board is available. It is a multi layer PCB about 12"x7" with RS-232 serial I/O, and monitor as well as access to all processor pins on a patch and proto area. Support software includes IBM-PC monitor & loader, cross assembler (absolute only). A pure serial TTY monitor is also supported. Sole power requirement is +5v. Priced is about $500 or so. A relocating assembler and linker, and a C compiler are also available. 1802 (RCA) This is a real old-timer. The 1802 is the successor to the 1801 (2 chip set) which was the first microprocessor implemented in CMOS. Both products were called microprocessors by RCA, not microcontrollers. However, since the 1801 was implemented in CMOS and therefore had low power requirements, it was often used in microcontroller applications. The 1802, with its higher level of integration and ease of use, could actually be considered a true microcontroller. The 1802 has separate data and I/O address spaces. 3) MICROCONTROLLER PROGRAMMING LANGUAGES Just a bit of an introduction for the beginner. 3.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. 3.2) Interpreters An interpreter is a high level language 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. 3.3) Compilers A compiler is a high level language 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. 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). 4) DEVELOPMENT TOOLS Having a programming language is usually not enough to develop a program for a microcontroller. Some way of debugging your program is needed. I am only too painfully aware of this fact. 4.1) Simulators A simulator runs your microcontroller program on a host machine (such as your PC). You can step through the code to see exactly what is happening as the program runs. Contents of registers or variables can be altered to change the way the program runs. Eliminates (or at least delays) the erase/burn/program EPROM cycle common in microcontroller program development. You can work out ideas or learn about microcontrollers by experimenting with small code fragments and watching on the screen what happens. A simulator can't support real interrupts or devices, and usually runs much slower than the real device the program is intended for. 4.2) Resident Debuggers A resident debugger runs your program on the microcontroller itself, while showing the progress on your host machine (such as a PC). Has many of the same advantages as simulator above, with the additional benefit of seeing how the program runs on the real target machine. A resident debugger needs to "steal" some resources from the target machine, including: a communications port to communicate with the host, an interrupt to handle single stepping, and a certain amount of memory for the resident part (on the target) of the debugger. 4.3) Emulators If you've got the money, this is the equipment you want to develop your system with (yeah, that's right, a preposition at the end of a sentence!). A [usually] expensive piece of hardware that even for the cheaper versions will run you at least $700. An emulator is a sophisticated device that pretends that it is the microprocessor itself, while at the same time capturing information. It provides full and total control over your target, while at the same time not requiring any resources from the target. The emulator can either be a stand alone device with its own display, or it can be interface to a PC. 4.4) Good Stereo System This is the most important tool for the microcontroller developer, or for any computer system developer for that matter. Don't expect to get anywhere unless you have the proper music playing in the background(?) at the proper volume. I find that I do my best work with the Rolling Stones (especially Goats Head Soup) or Clapton (especially early stuff like Cream - Disraeli Gears is a killer album!). The volume must be set to cause excrutiating pain to be most effective. Trust me on this ;-). 5) FINDING OUT MORE ABOUT MICROCONTROLLERS If you are interested in learning more about microcontrollers, there are many fine sources of information. You have your choice of printed media (books, periodicals, informative graffiti) or interactive (right here on the Internet, or BBSs). 5.1) Books The 16 bit 8096: Programming, Interfacing, Applications - Ron Katz and Howard Boyet - Microprocessor Training Inc 14 East 8th Street, New York, NY 10003 212-473-4947 - Library of Congress Catalog card number: 85-61954 - According to William Chernoff: "The book is pretty good - mostly software examples. The one hardware thing I looked closely at was wrong - a schematic error. Oh well." The 68hc11 Microcontroller - Joseph D. Greenfield (at R.I.T.) - Saunders College Publishing, (Harcourt Brace Jovanovich) - 1992 - ISBN 0-03-051588-2 - A number of the sections make use of the Buffalo monitor. This could be useful if you are using the Motorola Trainer EVB. The 8051 Family of Microcontrollers -Richard H. Barnett -Prentice-Hall, 1995 (yeah, that's right, 1995!) -ISBN 0-02-306281-9 8051 Interfacing and Applications - Applied Logic Engineering 13008 93rd Place North, Maple Grove, MN 55369 - (612)494-3704 8051 Product Directory - MW Media - Fairmont Plaza, 50 W. San Fernando, #675, San Jose, CA 95113 - (408)286-4200 - FAX: (408)288-4728 The 8051 Microcontroller - I. Scott MacKenzie - Macmillan Publishing Company, 1992 The 8051 Microcontroller - James W. Stewart - Prentice Hall, 1993 The 8051 Microcontroller: Architecture, Programming and Applications - Kenneth J. Ayala - 241 pages, soft cover - 5.25" diskette with assembler and simulator - ISBN 0-314-77278-2, Dewey 004.165-dc20 - West Publishing Company P.O. Box 64526, St. Paul, MN 55164 (800)328-9352 - see review in next section Assembly Language Programming (for the MCS-51 family) - F. A. Lyn - L. S. Electronic Systems Design Basic-52 Programmer's Guide - Systronix, Inc. (they also sell a Basic compiler) - address above Beginner's Guide - Suncoast Technologies A Beginners Guide to the Microchip PIC - Nigel Gardner - Character Press, Ltd. (UK) - ISBN 1 899013 00 8 - software (on floppy) and hardware guide, debugging techniques - Available from Polar Electronics in UK for 19.95 UK Pounds C and the 8051 - Thomas W. Schultz - Prentice Hall - ISBN 0-13-753815-4 Data Acquisition and Process Control with the M68HC11 Microcontroller - Frederick Driscoll, Robert Coughlin, Robert Villanucci of Wentworth Institute of Technology. - Macmillan Publishing Company - 1994 - ISBN 0-02-33055-X - Several Chapters on the 68HC11, instructions, and EVB; chapters on interfacing Analog and Digital signals to the 68HC11; example applications of interfaces to temperature, load cell, pressure and thermocouple sensors. - a good companion to Motorola's "pink" books Data book / Handbook / Users' Guide - Advanced Micro Devices - Dallas (User's guide for the DS5000) - Intel - Siemens Design with Microcontrollers - John B. Peatman - ISBN 0-07-049238-7 - This book is on a more advanced level. Uses both the 68hc11 and Intel 8096 as example systems. - Used for a very popular course on microcontroller design at Georgia Tech. Embedded Controller Forth for the 8051 Family - Academic Press - William H. Payne - uses a Forth development system available on the Internet Embedded Controllers Databook 1992 Edition - National Semiconductor Corporation - literature number: 400049 - (800)272-9959 call this number for for copies Embedded Systems Programming in C and Assembler - John Forrest Brown - Van Nostrand Reinhold, 1994 - 304 pages, $49.95 - ISBN 0-442-01817-7 - covers Motorola and Intel processors - includes diskette with code from the book - book review in Dr. Dobb's Journal, November 1994, page 121 Experimenter's guide - Rigel Corporation Intel Development Tools Handbook, 2nd Edition (Support Solutions for Intel's Embedded Microprocessor) - MW Media - Fairmont Plaza, 50 W. San Fernando, #675, San Jose, CA 95113 - (408)286-4200 - FAX: (408)288-4728 - Survey of commercial development tools for the 8051, 8096, and 80186 lines of Intel microprocessors. This document could very well be a "must" if you're into serious development using one of these chips. If you are "just" a hobbyist, see how the "other half" lives. Introduction to Microcontroller Design, Based on the 8051 family of Processors - Business Data Computers P.O. Box 1549, Chester, CA 96020 M68hc11 Reference Manual - Motorola - literature reference M68HC11RM/AD - This document is the "bible" of the 6811 and is a must-have for any serious 6811 programmer. MC68hc811E2 Programming Reference Guide - Motorola - literature reference M68HC811E2RG - A pocket-sized guide to the version of the 6811 used on the Mini Board Microcomputer Engineering - Gene H. Miller - Prentice Hall, Englewood Cliffs, NJ 07632 - 1993 - ISBN 0-13-584475-4 - Explains the basics. Many clear and concise assembly language example programs. - Written to be used with the Motorola Trainer (EVB). Microcontroller Technology, The 68hc11 - Peter Spasov - Prentice Hall - ISBN 0-13-583568-2 Microcontrollers: Architecture, Implementation, and Programming - Kenneth Hintz and Daniel Tabak - McGraw-Hill Inc. 1992 - ISBN 0-07-028977-8 MW Media - Product Directories - Motorola Microcontroller Tools Directory ('94 edition out in 3 weeks) - Motorola 68K Source ('94 edition available now) - Intel Development Tools Handbook ('95 edition just beginning) (survey of commercial development tools for the 8051, 8096, and 80186 lines of Intel microprocessors) - Embedded Intel 386 Directory (released in Aug '94) - Intel 486/Pentium directory (forthcoming in '95) - 8051 Product Directory ('94 edition out in 4 weeks) (survey of various 8051 products) - Hitachi Microcontroller Development Tools Directory (out in '95) - AMD FusionE86 Directory (out in '95) (186,386,486) - AMD 29K Directory (pending in '95) - Low Power Product Directory (out in '95) (3.3. volts and lower) - DSP Directory (released in May '94) - Multimedia CD (hopefully out in '95) - These documents could very well be a "must" if you're into serious development using any of these chips. If you are "just" a hobbyist, see how the "other half" lives. - FREE to qualified developers - MW Media - Fairmont Plaza, 50 W. San Fernando, #675, San Jose, CA 95113 - (408)288-4721 and (408)286-4200 - FAX: (408)288-4728 - Email: jasonm@violet.berkeley.edu (Jason McDonald, program director) Programmer's Guide to the 1802 - Tom Swan - Hayden Book Company, Inc., 1981 - ISBN 0-8104-5183-2 - good introduction to assembly language progamming and an thorough tutorial on the 1802 Programming Microcontrollers in C - Ted Van Sickle - HighText Publications, 1994 - 394 pages, $29.95 - ISBN 1-878707-14-0 - thorough tutorial on C programming, covers aspects of C programming specific to embedded systems - covers the Motorola line of microcontrollers (small to large) - book review in Dr. Dobb's Journal, November 1994, page 121 Single- and Multiple-Chip Microcomputer Interfacing - G.J. Lipovski - Copyright 1988 - 478 pages - ISBN 0-13-810557-X (Prentice-Hall Edition) ISBN 0-13-810573-1 (Motorola Edition) - Based around the 68HC11 it covers both hardware and software at undergraduate level, but the emphasis is on interfacing. - Chapter titles: 1 Microcomputer Architecture 2 Programming Microprocessors 3 Bus Hardware and Signals 4 Parallel and Serial I/O 5 Interrupts and Alternatives 6 Analog Interfacing 7 Counters and Timers 8 Communications Systems 9 Storage and Display Systems Single- and Multiple- Chip Microcomputer Interfacing (Lab Manual) - Peter Song and G. Jack Lipovski - Prentice-Hall, 1988 - ISBN 0-13-811605-9 - Support for the above book. Examples based around the Motorola EVB and the BUFFALO monitor or the EVBU (or 3-chip micro) and PC-Bug11. User Manual for the CDP1802 COSMAC Microprocessor - RCA, 1977 - contains useful hardware and software techniques 5.2) Periodicals Various magazines and journals (journals seems to be THE popular name for magazines these days) provide articles from time to time on microcontrollers. If you are just starting out learning, pick those magazines that feature construction articles. The Computer Applications Journal (Circuit Cellar Ink) - programming and construction articles - POB 7694, Riverton, NJ 08077-8784 - Fax: (203)872-2204 - Voice orders: (609) 786-0409 - On-line orders (BBS): (203) 871-1988 - Email orders: ken.davidson@circellar.com - $21.95, $31.95 surface Canada and Mexico, $49.95 air all other countries Computer Design - industry announcements and trends - One Technology Park Drive, P.O. Box 990, Westford, MA 01886 - (508)692-0700 The Computer Journal - programming and construction articles - PO Box 535, Lincoln 96648 Dr. Dobbs Journal - programming articles, concepts, and designs - 411 Borel Ave., San Mateo, CA 94402 - (415)358-9500 Electronic Engineering Times - industry announcements and trends - 500-B Bi-County Boulevard, Farmingdale, NY 11735 - (516)293-3000 Electronics Now - construction articles - Box 55115, Boulder, CO 80321-5115 - $19.97 one year Elektor Electronics - programming and construction articles - World Wide Subscription Service Ltd Unit 4, Gibbs Reed Farm, Pashley Road Ticehurst TN5 7HE, England - 27 UK pounds or - Old Colony Sound Lab, P.O. Box 243, Peterborough, NH 03458 - Tel. (603) 924-6371, 924-6526 - Fax: (603) 924-9467 - $57 USA and Canada per year Embedded Systems Programming - programming and systems design articles - Miller Freeman Publications - 500 Howard St., San Francisco, CA 94105 - (415) 397-1881 Inquisitor Magazine - If you're the type that watched Gilligan's Island for its socio-political insights, then you'll love a new 'zine that just crossed my desk - Inquisitor Magazine. It's general philosophy seems to be ... well, it seems to be ... uh, yeah! Technical in nature, bizarre, tongue in cheek, eclectic, electric, did I mention bizarre(?), and lots of fun. Worth looking at if you like the out of the ordinary. The moving force behind this magazine is Daniel Drennan, who seems to have suffered from an overdose of radiation from his computer monitor ;-). - Planetarium Station, P.O.Box 132 New York, NY 10024-0132 - (212)595-8370 - Email: inquisitor@echonyc.com - $16 per year (4 issues) M icrocomputer Journal (formerly Computer Craft) - programming and construction articles - 76 N. Broadway, Hicksville, NY 11801 - $18.95 one year, foreign $23.00, foreign air mail $76.00 M idnight Engineering - 1700 Washington Ave., Rocky Road, CO 81067 - (719)254-4553 N uts & Volts Magazine - A National Publication for the Buying and Selling of Electronic Equipment - 430 Princeland Court, Corona, CA 91719 - Mailed third class, USA only: $17.00 one year $31.00 two years - Mailed first class, one year only: $34.00-USA $35.00-Canada/Mexico - Foreign/Air Mail - $70.00; Foreign/Surface - $39.00 - (800)783-4624 - Email: 74262.3664@Compuserve.com 5 .3) Internet newsgroups V arious newsgroups frequently have discussions or information on various microcontrollers. Among some of the more useful (especially t he first 3 newsgroups): c omp.robotics M icrocontrollers figure heavily in robotics projects. You will find a lot of information about the subject in this newsgroup. Even if you aren't building a robot, check this newsgroup out. Lots of 68hc11 activity, too. s ci.electronics a lt.comp.hardware.homebuilt T wo good places to find [mostly technical] discussions on microcontroller use and implementation. Most of the participants are crazy about "rolling their own", and they are eager to share their knowledge. c omp.realtime O ccasional discussions about real-time use of microcontollers. c omp.sys.m68k T he full line of Motorola 68000 microprocessors is discussed in this newsgroup, including the very powerful and advanced microcontrollers based on this family. c omp.sys.6809 T his newsgroup covers an old-time favorite, the 6809 microprocessor, which is commonly used for control applications. Motorola 8 bit microprocessors and microcontrollers (6805, 6811, etc.) are also discussed in this newsgroup. c omp.sys.intel M ostly trends and development are discussed in this newsgroup. From time to time you will find a discussion on some obtuse technical problem or feature. c omp.lang.misc S ometimes questions or discussions on different microcontroller topics pop up here. I guess it's the ".misc" that attracts these questions. 5 .4) Internet sources of information on specific microcontrollers I f you are interested in finding sources of information on a specific microcontroller, check out the really fine FAQs ;-) that have been compiled for the more popular microcontrollers. Subject: PIC microcontrollers Newsgroups: sci.electronics Maintainer: Tom Kellett Tom@takdsign.demon.co.uk Subject: 8051 microcontrollers Newsgroups: comp.sys.intel comp.realtime comp.robotics comp.lang.forth sci.electronics Archive: rtfm.mit.edu : /pub/usenet/comp.answers/microcontroller-faq/8051 /pub/usenet/sci.answers/microcontroller-faq/8051 /pub/usenet/news.answers/microcontroller-faq/8051 Maintainer: Russ Hersch Email: sibit@datasrv.co.il Subject: 68hc11 microcontrollers Newsgroups: comp.realtime comp.robotics sci.electronics Archive: rtfm.mit.edu : /pub/usenet/comp.answers/microcontroller-faq/68hc11 /pub/usenet/sci.answers/microcontroller-faq/68hc11 /pub/usenet/news.answers/microcontroller-faq/68hc11 Maintainer: Russ Hersch Email: sibit@datasrv.co.il Subject: Motorola 68K microprocessor line Newsgroups: comp.sys.m68k Archive: bode.ee.ualberta.ca : pub/motorola/general ftp.luth.se : /pub/misc/motorola/faq file name of archive is m68kfaq?.zip (? is version) Maintainer: Robert Boys Ontario, Canada Email: r.boys@genie.geis.com or fboys@uoguelph.ca S everal other FAQs have been compiled that address various aspects of microcontroller design and implementation. Subject: Robotics Newsgroups: comp.robotics Maintainer: Kevin Dowling (412)268-8830 Email: nivek@ri.cmu.edu Smail: Carnegie Mellon University The Robotics Institute Pittsburgh, PA 15213 Subject: Electronics Newsgroups: sci.electronics Maintainer: Filip Gieszczykiewicz Email: filip@smi.med.pitt.edu Subject: Real-time Newsgroups: comp.realtime, comp.answers, news.answers Archive: rtfm.mit.edu : pub/usenet/comp.realtime Maintainer: Mark Linimon Lonesome Dove Computing Services Roanoke, Virginia Email: linimon@nominil.lonesome.com. 6 ) MICROCONTROLLER FREE SOFTWARE SOURCES T his section includes descriptions and references to free microcontroller software. FTP sites and BBSs contain many quality packages and code samples for free. For heavy duty use, you might prefer the many commercial packages that are available. With the public domain (or free) stuff, you're usually on your own. The commercial packages usually provide extensive documentation and support. I f you are looking for commercial software for the 8051, 68hc11, or PIC, then check out the FAQs on these microcontrollers for details on what is available. F or the hobbyist, or professional on a budget, who would like to buy a reasonably priced and well supported development package, check out Dunfield Development. For only $100.00 you get a near ANSI C compiler, assembler, monitor/debugger, and much more. The following chips are supported: 6809, 68hc11, 68hc16, 8051/52, 8080/85, 8086, and 8096. Dunfield Development Systems P.O. Box 31044 Nepean, Ontario K2B 8S8 Canada (613)256-5820 Fax: (613)256-5821 Email: ddunfield@bix.com I f you're just looking for a plain C compiler without the frills, ImageCraft has just released version 1 of their compiler for the 68hc11. The price is just $40 for a near ANSI C compiler. Initial feedback on this compiler seem promising. The pre-release versions are already in use by many of you, and will still be available as freeware. ImageCraft P.O. Box 64226 Sunnyvale, CA 94086-9991 (Richard Man) imagecft@netcom.com 6 .1) FTP sites T he following is a list of the anonymous ftp sites that have source code and programming languages for various microcontrollers. There are many others that are not listed here that contains bits and pieces. Usually you can find them using Archie and searching for v ariations on the name of the microntroller you are looking for. f tp.pppl.gov (formerly lyman.pppl.gov) - this is a great source of 8051 stuff /pub/8051 /pub/incoming - check this out for new untested/unsorted items f tp.mcc.ac.uk - this is a new 8051 ftp site f tp.intel.com - good source of stuff the MCS-51 and MCS-96 families /pub/mcs51 - various development tools and sample code for the MCS-51 family /pub/mcs96 - various development tools and sample code for the MCS-96 family b ode.ee.ualberta.ca - HUGE archive of all sorts of stuff on the 68hc11 (lots of other good stuff too!) - you'll have fun mucking around this ftp site, there's piles of stuff here /pub/cookbook /pub/motorola /pub/motorola/68hc11 /pub/motorola/mcu11 cherupakha.media.mit.edu (cher.media.mit.edu) - HUMONGOUS archive of all sorts of stuff on the 68hc11 including the 6.270 robotics project, Mini Board, F1 board, and more (lots of other good stuff too!) - you'll lose yourself rooting around this ftp site, there's piles of stuff here (assemblers, tools, C compilers, plans and schematics, and many other items) /pub/6270 - tools, docs, schematics, etc. for the MIT 6.270 robotics project using a 68hc11-based development system /pub/6811 - software, schematics, etc. for the 68hc11-based F1 board /pub/incoming - various unsorted or new items /pub/miniboard - software, docs, schematics, etc. for the 3"x2", 68hc11-based Mini Board controller listserv@oberon.com - mailing list for the Mini Board and 6.270 board - send a message containing the word "help" for directions - mailing list address: robot-board@oberon.com - maintainer: gkulosa@oberon.com ftp.funet.fi (nic.funet.fi) - this is a good source for various microcontrollers /pub/microprocs/ (subdirectories include: 1802, 6805, 8048, 8051, 8096 and many other microprocessors) ernie.uvic.ca - files provided by local Motorola representative /pub (subdirectories include: ibm, dsp96k, dsp56100, dsp56k, dsptools, develop, mac, mcu302, mcu332, mcu11, pgmr, mcu16, mcu, market, qa, general, m68k, evm, dsp) ftp.sics.se - PIC microcontroller software from the PIC BBS - ftp site of Memec Scandinavia, Microchip's Swedish agent. /pub/mchipsoft wpi.wpi.edu - basic stamp information PLUS PIC "C" compiler /stamp ftp.luth.se /pub/misc/microchip - PIC information /pub/languages/assembler - various freeware assemblers hpcsos.col.hp.com /misc/ns32k/beowulf ftp.netcom.com /pub/imagecft - prerelease version of ImageCraft C for 68hc11 info@circellar.com - Email (not ftp) - send Email to get information file on services available - all Circuit Cellar INK and BYTE related files available asterix.inescn.pt - FORTH archive /pub/forth 6.2) BBSs The following BBSs have 8051 information: Circuit Cellar, Inc. - contains code from their magazine articles and from the original Circuit Cellar articles in Byte magazine, also contains many other interesting items - The BBS is mentioned in the masthead of each issue (on the table of contents page). Excerpts from the BBS appear in Ken Davidson's ConnecTime column in every issue with a description of how to access the system at the end of every column. - (203)871-1988 - Voice: (203)875-2751 - Fax: (203)872-2204 Dunfield Development Systems - support for their Micro-C C compiler and development tools - includes a lot of nice goodies - CHECK THIS OUT! - (613) 256-6289 Electronics Now - contains code from their magazine articles - (516)293-2283 - 1200/2400, 8N1 Intel American Marketing Applications Support Bulletin Board System - 16 lines, hi-speed modems (14.4K) - Lots of useful info and files (including design examples) - Full ANSI-BBS with color is recommended, but support for just about all terminal types is provided - 916-356-3600 (24 hours) Auto config: 1200 thru 14.4K Baud 8 data bits, no parity, 1 stop Don Lekei BBS - support for the PIC line of microcontrollers - (604)597-3479 (Canada) Microchip BBS - support for the PIC line of microcontrollers - Contact by dialing the same number you would use to get to Compuserve at 19200,n,8,1, except that you press + at the (garbage) prompt, followed by MCHIPBBS as the host (instead of CIS). Motorola (Austin Texas) BBS - terrific, has piles of stuff, only some of which is on bode.ee.ualberta.ca - (512) 891-3733 (Austin, Texas) - V.32 9600 Baud modems w/ MNP-5 - 8 Data Bits, No Parity, 1 Stop Bit. Other Motorola BBSs: - Munich, Germany: 49-89-92103-111 (2400 baud) - Stuttgart, Germany: 49-7031-275496 (19200 baud) - San Diego, California: (619) 279-3907 - Toronto, Ontario, Canada: (416) 497-8989 Philips Semiconductor (parent company of Signetics) - support for: standard logic, programmable logic, in-car electronics (planned), 8 and 16 bit microcontrollers, I2C software, third party software, discrete semiconductors, cross assemblers (general), RF (planned) - PHIBBS is located in the Netherlands: +31-40-721102 - maximum 14400 baud / V42bis - 24 hours a day available - Help desk: +31-40-722749 (9.00 AM - 16.00 PM CET) Signetics (Philips Semiconductors) - support for their 8051 variants - contains many good source code items - partially mirrored on ftp.pppl.gov and nic.funet.fi - (800)451-6644 or (408)991-2406 __________________________________________________________ Copyright (c) 1994 by Russell Hersch, all rights reserved. This FAQ may be posted to any USENET newsgroup, on-line service, or BBS as long as it is posted in its entirety and includes this copyright statement. This FAQ may not be distributed for financial gain. This FAQ may not be included in commercial collections or compilations without express permission from the author. ----------------------------------- Russ Hersch - sibit@datasrv.co.il