Dick Cappels' project pages http://www.projects.cappels.org
Return to HOME (more projects)

MAX038-Based Sweep/Function Generator With Markers

using Maxim MAX038 and Atmel ATiny2313 or AT90S1200A

Take Maxim's MAX038 function generator chip, add some frills, and you have a pretty nice tool for the bench.

Main Circuit Schematic
Power Supply Schematic
You can build this with switches instead of buttons if you don't want to use a micro controller. Here is the controller code.
AVRStudio 4.x Assembler Source for AT90S1200A  fsgen050527A.asm
AVRStudio 4.x hex file for AT90S1200A   fsgen050527A.hex
AVRStudio 4.x Assembler Source for ATtiny2313  fsgen13050527A .asm

Related project: A DC to 20 MHz Coax Driver Using Discreet Transistors

Maxim's MAX038 function generator chip is capable of producing nearly constant amplitude sine, square, and triangle waves with a low output impedance, from a very low frequency to more than 20 MHz. Basically, a function generator on a chip. Here is a function/sweep generator that uses the MAX038 chip. The design described on these pages are not so much instructions for duplicating the design as they are a collection of ideas to stimulate your own thoughts.

Operation requires an oscilloscope at a minimum to set it up, and a frequency meter is also a good idea. The waveform can be selected by repetitively pressing the "Waveform" button until the one you want comes out.  The amplitude can be adjusted by with the variable attenuator pot, or by using the switchable attenuators. The DC offset on the output can be adjusted with the offset pot. The DC offset is not affected by the attenuators.

Scope Photo: Sweeping a 455kHz ceramic filter.
FLOW= 413 kHz, FHIGH = 512 kHz.

To set up the generator to sweep a given frequency range, first select the band that covers the frequency of interest. Press the FLOW button and then adjust the FLOW pot to set the lowest frequency in the sweep range, for example 400 kHz. Then press the FHIGH button and adjust the FHIGH pot to the highest frequency in the sweep range, for example. 500 kHz. Then press the SWEEP button and the output signal will repetitively sweep from frequency set with the FLOW up to the  frequency set with FHIGH pot, in this case, from 400 kHz to 500 kHz, then the frequency will rapidly return to the FLOW. The large envelope in the middle of the waveform in the photograph above shows the bandpass of a 455 kHz ceramic filter, The two smaller envelopes at the sides correspond to when the generator rapidly sweeps through that frequency again as it returns the MAX038 to FLOW in preparation for another sweep. FLOW must be set to a frequency lower than that to which FHIGH is set in order for the circuit to sweep.

From the preceding, you should see that the generator can be operated at a constant frequency using either the FLOW or FHIGH pots, and that you can use them as presets and use their associated buttons to switch between two frequencies within the same band.

Scope Photo: Sweeping from 1 MHz to 20 MHz.
Top trace is signal out with marker on. Bottom
trace is external marker output. Wide blanking pulse
shows "retrace" period. Marker is set to 10 MHz.

The marker system is composed of one maker circuit, and two marker position pots. The pots can be enabled  one at a time by pressing the button  next to the desired pot. The marker circuit makes a fixed width pulse centered on the frequency to which it is set. There are two ways to see the pulse. One is to press the  Marker On/OFF Toggle Button to cause the marker to attenuate the output waveform during the marker pulse. The upper trace in the photograph above shows the waveform output of the generator when set to sweep a sine wave from 1 Mhz to 20 MHz.  Marker 2 is set to 10 MHz and enabled, which causes the narrow notch in the sweep waveform.  The wider notches are indications of the time when the saw tooth generator that sweeps the MAX038 retraces from the FHIGH back to FLOW. A pulse from the  Marker Pulse connector is shown on the lower trace. Since there may be notches and peaks in the waveform, especially when measuring the response of a filter or other circuit, sometimes the notch in the waveform is adequate to see the marker, and sometimes, its necessary to use a second scope channel to see the marker clearly.

To set the frequency for Marker 1, connect the scope or frequency meter to the Waveform Output and turn the Band Switch to the band desired, press the Marker Mode Select Button to put the MAX038's frequency under the control of the marker pots. Press the  Marker 1 Frequency Set Pot, which is seen as "M1" in the photograph and is R43 in the schematic. While measuring the oscillator frequency on the Waveform Output,  adjust the Marker 1 Frequency Set Pot to the desired frequency. The frequency for Marker 2 Frequency Set Pot is set in a similar manner.

Marker 1 Frequency Set Pot and Marker 2 Frequency Set Pot may be used for fixed frequency presets similar to the way this can be done with Low Frequency Set Pot and High Frequency Set Pot.  Marker Mode Select Button must be pressed to switch oscillator control from FLOW and FHIGH pots and the sweep function to the Marker pots.

Scope Photo: Sweeping a 10.7 MHz ceramic filter.
After setting the marker to correspond to the peak
in filter response, the marker location was measured
as 10.66 MHz.

A sort of inverse procedure can be used to measure the frequency of a feature in a swept envelope. The marker is centered on the feature you want to measure the frequency of, in the case of the photo above, the major peak in the filter response. Then the Marker Mode Select Button us pressed so that the generator puts out a continuous signal at the frequency set with the marker pot, and the frequency is measured. The measured frequency corresponds to the center of the marker pulse.

CLICK HERE for a short tutorial on the use of the Marker controls.

A list of the basic functions is below.
Frequency Range: 0.1 HZ to 20 MHz in six bands.
P-P Output Voltage: 900 uV to 1.7 V P-P.
DC Offset:   -1.4V to + 1.4V.
Output Impedance: 50 Ohms or 75 Ohms, switchable.
Sweep Range: Adjustable up to about   to 300:1.
Number of markers: One maker with two independent position pots.
Attenuators: Variable 0 to -12 db; switchable -3, -10, -20, and -20 db.

Here is a list of controls:
Low Frequency Set Pot
High Frequency Set Pot
Select Low Frequency Button
Select Sweep Button
Select High Frequency Button
Marker 1 Frequency Set Pot
Marker 2 Frequency Set Pot
Market 1 Select Button
Marker 2 Select Button
Marker Mode Select Button (Switches frequency control to selected marker pot.)
Marker On/OFF Toggle Button
Band Switch
Fine Frequency Control Pot
Offset Pot
Offset On/Off Switch
Symmetry Adjust Pot
Symmetry Variable/Fixed Pot
Variable Attenuator Pot
-3 db Switched Attenuator
-10 db Switched Attenuator
-20 db Switched attenuator (Two of them)
Power On/Off Switch
Waveform Change Button.

Sweep Start Pulse (RCA Connector)
Marker Pulse (RCA Connector)
5V P-P CMOS Out (RCA Connector)
Analog Waveform Out (BNC Connector)

The symmetry of the waveform, or duty cycle in the case of the square wave output, is variable. The performance of the generator is highly dependent upon physical layout. There is one frequency marker circuit and two selectable controls. This, in conjunction with the ability to switch the oscillator's frequency control to the selected marker pot allows accurate setting or location of the frequency marker.

Circuit Overview

Block diagram of the sweep/marker generator.

The Much of the circuitry is dedicated to controlling the voltage that controls the MAX038's oscillation frequency. Multiplexers allow the selection of the Low Frequency Set Pot, High Frequency Set Pot, either of the two Marker Set Pots, or when the inputs to the multiplexer are properly set, the circuit toggles between the Low Frequency Pot and High Frequency Set Pot as the MAX038 output frequency is swept between the corresponding frequencies. Since the output of the MAX038 can be set to correspond to the setting of any of these four pots, enabling the measurement of the sweep start and stop frequencies, and the frequency of either marker with an external frequency meter or oscilloscope.

A microcontroller is the interface between the buttons on the front panel and the circuitry controlled by them. There is no need to use a microcontroller as all the circuits can be controlled by electromechanical switches -I just used a controller because I prefer buttons to other kinds of switches.

The main board schematic diagram of the circuit, less power supply can be seen or downloaded by clicking on the button above. Image size is 1126 X 742, about 36 K Bytes. The power supply is discussed further down this page.

Simplified versions of the circuits, for the purpose of discussion, are shown below, but many aspects of the overall circuit and some blocks that are included in the main board schematic are omitted from the discussions below.

MAX038 Circuit

Use the MAX038 data sheet as reference. The things to note on this schematic is that there is an switch to switch the symmetry control between variable and the chip's fixed symmetry setting, and that R19 and R20 convert a -3V to +3V control voltage an the VCO control current. Thus, the oscillation frequency is a pretty linear function of control voltage. The frequency control voltage is supplied by the saw tooth generator circuit, the output of which will be either a DC voltage from one of the four frequency setting pots (F Low, F High, Marker 1, Marker 2) or a saw tooth waveform.

The capacitance on the leads to the band switch, is pretty large compared to the oscillator capacitance, 10 to 15 pf in my case, so I did not put a capacitor on the band switch, but selected a capacitor to go on the circuit board next to the MAX038. The MAX038 that I used can oscillate up to 30 MHz when the weather is right, but the output of the chip starts to drop and the square and triangle waves both look like sine waves above 20 MHz anyway, so I selected a capacitor that limits oscillation frequency to about 21 MHz.

The two waveform select control inputs, A0 and A1 are driven by microcontroller PORTD, bits 2 and 3 respectively. Alternatively, you can control these inputs with two pole rotary switch set up to encode A0 and A1 according to the data sheet, or use a pair of SPST switches and a pair of pull-up resistors, or use a pair of pull-down resistors and use an ON-OFF-ON toggle switch to select  the Sine, Square, or Triangle waveform.

A wide band amplifier with a DC offset control drives the output signal through an impedance setting resistor and the BNC connector.

Here are some measurements indicative of the flatness of the sine wave output from the Zetex ZXFY202N8 output amplifier as a function of frequency. The output amplifer circuit is not on this page, but can be seen on the main board schematic.

200 kHz
2 Mhz
10 MHz
20 MHz
0 db
-0.3 db
-0.5 db
-1.1 db

Saw tooth Generator

This is a simplified schematic of the saw tooth generator.
The circuit in the complete schematic has additional inputs.

The saw tooth generator's output drives the frequency control voltage input of the MAX038 circuit. Refer to the simplified circuit above. The saw tooth waveform is produced by integrator U1A. The output ramps from the low frequency set point, which is set by R6, to the high frequency set point, which is set by R3. When ramping up, the CD4051 multiplexer connects the input of comparitor U1B to the R3, the high set point. The rate at which the output of U1A changes while ramping up is determined by the 0.22 uf integration capacitor and the value of R17 in series with R18.

 When the output of the integrator reaches the high set point, the output of comparitor U1B goes high, which by way of inverting comparitor U1D, switches the CD4051 multiplexer to select the low set point. The output of comparitor U1B also drives the resistor/-diode network on the input of the integrator high. With the additional current through R15 into the integrator, the waveform ramps down to the low set point quickly, making a saw tooth.

The CD4051 that switches between the high set and low set pots also enables the MAX038 control voltage to be set by the Marker pots. See the complete schematic for these details.

The band switch has two sections. One is the frequency setting capacitor switch shown in the schematic in the MAX038 circuit section of this page. The other section switches among five sets of 1N916 diodes and resistors configures similar to R15 and R16 in the schematic above, so that the sweep rate, in terms of Hz per second varies with the frequency band. When in the highest frequency band, the one I use most frequently, the sweep/function generator sweeps from 106 kHz to 20.76 MHz in 47 milliseconds, or 439 MHz/second.  I chose this leisurely sweep rate so as to obtain the a more accurate idea of the response of narrow band pass filters than I could with faster scan rates. With a CRT based oscilloscope, this would cause some flicker, but I use this with a band pass storage scope, and therefore don't see any flicker. To use this with a CRT based oscilloscope, reduce the resistors by a factor of 3 to get the sweep rate, and therefore the display refresh rate up past 70 Hz, where there should be little in the way of perceivable flicker.


The amplitude of the output stage is controlled by a variable attenuator that has a range of about 0 to -12 db,  a -3db switched attenuator, a -10 db switched attenuator, and two -20 db switched attenuators. The input and output resistance are 100 ohms. This value was chosen over a more conventional 50 ohm because it requires less power to drive.

200 kHz
2 MHz
10 MHz
20 MHz
0 db
0 db
0 db
0 db
0 db
-3 db
-2.8 db
-3.1 db
-2.8 db
-3.2 db
-10 db
-9.9 db
-10.1 db
-9.9 db
-10.4 db
-13 db
-12.7 db
-13.2 db
-12.8 db
-13.4 db
-20 db
-19.9 db
-20.3 db
-19.6 db
-20.1 db
-23 db
-22.8 db
-23.2 db
-23.2 db
-22.6 db
-30 db
-29.8 db
-30.2 db
-29.8 db
-27.3 db
-33 db
-32.6 db
-33.2 db
-30.3 db
-28.4 db
-40 db
-40.0 db
-40.0 db
-25.5 db

-43 db
-42.4 db
-43.1 db

-50 db
-50.1 db
-49.2 db

-53 db
-52.8 db
-51.5 db

Measured attenuation of the switched attenuators.

Inspection of the table above shows  that the switched accuracy of the attenuators is highly dependent upon frequency.  This is, without much doubt, a result of the physical arrangement of the components and associated wiring.  Notice that the attenuators are pretty accurate all the way down to -52 db at 200 kHz and 2 Mhz, so more care in the wiring, perhaps using lower capacitance switches, shielding the attenuators and better layout of the output circuitry would certainly extend the frequency range over which the attenuators calibration held. It might be that designing the attenuator sections for 50 ohm impedance would have made the attenuators frequency response flatter. The present performance is adequate for my expected near term needs, particularly now that I have characterized the attenuator.

Marker circuit

A marker circuit makes a signal that indicates when the sweep generator's output corresponds to a predetermined frequency. In this circuit, it makes a rectangular pulse that is centered on the predetermined frequency, and this pulse is available to be viewed directly on the "Marker Out" connector with an oscilloscope, or if markers are "On" as toggled by the Marker On/Off toggle button, the marker pulse is added to the blanking pulse to put a notch in the output waveform. The circuit is composed of a a CD4051 analog multiplexer to select which of two marker position pots will control the circuit, a window comparitor made from both sections of U4, a dual comparitor, and a current source, made of the two 2N4401 transistors, which creates an offset between the high and low thresholds for the window.

When the saw tooth is more positive than U4 Pin 6 and
less positive than U4 Pin 3, the output of window comparitor
U4 is high.

The width of the pulse is a fixed voltage, and this corresponds to a fixed percentage of the maximum sweep range for any given band. The width of the marker can be changed by changing the value of R49. A variable width marker can be made by using a variable resistor instead of a fixed resistor for R49. It would have been nice, but alas, the box for this instrument is already very large, and I ran out of front panel space.

The offset  across R49 is created by a constant current that is generated by a current mirror made of two 2N4401 transistors.  The diode-connected transistor, the one with its collector connected to the 470k resistor, provides temperature compensation so that the voltage across the emitter resistor of the other 2N4401 does not change much as its base-emitter voltage changes as a function of temperature. The current out of the 2N4401 on the right is, as far as this circuit is concerned, independent of the voltage of its collector voltage. If the current to generate the offset was generated with a resistor, the width of the marker pulse would be different at low frequencies than it would be at high frequencies because the current to R49 would not be constant.

When the sweep/function generator is in "Marker Mode" and the oscillation frequency is controlled by one of the two marker pots, the voltage fed to the VCO is midway between the lower and higher thresholds of the window comparitor, making the marker centered on the generator's output frequency while in "Marker Mode." The frequency control voltage in the middle of the window is created by the voltage divider made up of R47 and R48.

The U4 is an open collector comparitor, so the outputs can be safely wired -ORed in this fashion.


I used an AT90S1200A from Atmel as the interface between the pushbuttons on the front panel and the circuits they control.  It could have been done with switches, but buttons seemed to be a slightly better human interface. Since I used really cheap buttons, there is no tactile feedback, so I used the remaining spare output of the controller to make a small click whenever a button is pressed. In order for the instrument to retain its settings when power is removed, the output port state, which is controlled by the front panel buttons, is stored in EEPROM. When three minutes elapse after the last button press, the controller saves the state of the output pins to its on-chip EEPROM and emits a slightly longer chirp than is used for the button clicks. Storing the output state takes one of the 64 available bytes, and each is used in turn, so the 100,000 write cycles guaranteed on the data sheet is extended to 6,400,000 write cycles. At three minutes per cycle, the life of the EEPROM  would be a minimum of 300,000 hours, if I were to stand there, pushing the button every 3 minutes. So, I  am not worried about wearing out the EEPROM.

Here is how the EEPROM read and write routines work. The assumption is that the EEPROM starts out filled with zeros, which will be done automatically by the firmware if it encounters an EEPROM without any locations set to zero, as is the case when the EEPROM is erased during the programming procedure, which sets all EEPROM locations to $FF. The EEPROM can also be zeroed by pressing the Waveform Change Button and Marker On/Off Button at the same time while the instrument is running.  There should be no reason to manually zero the EEPROM -the manual zeroing routine was written before I realized that erasing the EERPOM during programming would result in the same effect.

The output state data is written by the "WriteNextEE" routine. The routine scans the EEPROM memory from location zero up toward location 63 and writes the data into the first memory location it finds with a content of $00. When it writes the byte, it sets bit 6 high so that it will never write a zero value. If the search for a blank location wraps around to location 0, then the entire EEPROM is erased by writing zeros to each location.

The routine, "ReadNextEE" scans the EEPROM contents from location 63 toward zero, and returns the first nonzero value it finds. If it fails to find a nonzero byte, it returns a default value.

The clicks and chirps are emitted as a short bursts of about 600 Hz through a piezoelectric transducer that is capactivitely coupled to bit  6 on port D.

All the button read and toggle routines use debounce routines. I have an old Weller constant temperature soldering iron on my bench, and whenever it switches on or  off, it makes a huge glitch. When using a 30 millisecond debounce time, sometimes the soldering iron glitch would case the sweep/function generator to chance states. As a result, the debounce delay is now about 50 milliseconds and the problem of spontaneous changes to control settings appears to be gone.

An ATtiny2313 can also be used,  The ATtiny2313 version of the code was changed by adding code to to initialize the RAM stack and the specified include file to the ATtiny2313 include file.  Set the clock fuses to use the internal 8 MHz clock and enable clock division by 8 to get a 1 MHz clock for the CPU. What came up months later, while re-using part of code, is that the AT90S2313/Tiny2313 needs to have the EEPROM write enabled prior to the write strobe. This line [ sbi     EECR,EEMWE        ;Set master write enable.] was added to the assembler source file on March 4, 2006. AT90S2313 and ATtiny2313 chips programmed with earlier source and hex files do not save settings to the EEPROM. The code with this change has not been tested.

Power supply

The power supply was designed to provide a balanced +5V and - 5V from a wall-mounted DC supply that provides 12 VDC minimum. There was not enough voltage available to use any of the three terminal regulators I have access to, so I designed one around the TL431 voltage regulator, used here as a combination voltage reference and error amplifier. It drives the 2N7000 which in turn drives the SPB0806P pass transistor to make 10.0 VDC. The dropout voltage of this regulator is a couple hundred millivolts at 100 milliamps. The 2N2907 provides over-current protection. The LM358 driving the 2NSC2655 and 2NSA1020Y transistors creates a ground by supplying the ground current necessary to keep the supplies evenly split at +5V and -5V.  The first section of the LM358 serves no purpose and can be omitted, with pin 3 being connected directly to the 7.32 k resistors. The two 7.32k resistors can be any pair of 1% resistors with a resistance between 5k and about 50k. The 2NSC2655 and 2NSA1020Y transistors are small signal transistors that are capable of dissipating a little more power than one typically mounted in a to-92 case, such as a 2N222. Since the total power dissipation is likely to be less than 250 mw, a 2N2222 and a 2N2907 can be used here, though I did not try them.

This current imbalance supplied by the 2NSC2655 and 2NSA1020Y transistors can be measured across the 47 ohm resistor. In the function/sweep generator I built, the worst case offset current when driving a 75 ohm load is 24 milliamps. When the output offset is turned off, the current imbalance is only 5 milliamps.

The current drain can be measured across the 2.2 ohm current limit sense resistor. In the function/sweep generator I built, the worst case current is 116 milliamps.

It was critical that the output voltage be a high as possible so as to obtain the maximum dynamic range in the output stage, yet not exceed the +/- 5 Volt maximum power supply voltage specified for the Zetex ZXFY202N8 output amplifier. To meet that goal, I made the 10 volt regulator adjustable. The result is that the output voltage is +4.99 volts and - 4.98 volts.

Since the MAX038 chip is expensive and the ZXFY202N8 output amplifier is a little delicate, I added over voltage limiting in the form of shunt regulators to the outputs. The fear was that one of the power supply rails would be accidentally shorted to ground during testing, and that would dump the entire 10 volts across the other supply, stressing and potentially destroying some of the semiconductors in the circuit. I tested the shunt regulators by shorting each supply to ground and watching the other power supply's voltage on a oscilloscope - no problems. These tests were performed before the power supply was attached to the rest of the circuit. No point in tempting the fates.

There is a reverse polarity diode across the power supply input, and an input filter to reduce the magnitude of capacitively coupled current spikes that might pass through the ZXFY202N8 output stage when plugging the 12V power adapter into a 220V wall outlet while the function/sweep generator's output is connected to a grounded circuit. A varistor is also across the input just in case of line transients.

An extra measure of safety is given by reverse polarity protection diodes on the main circuit board. See the main board schematic for details.

Parts placement

I suggest that you come up with your own parts placement, but to get you started, here (below) is the placement of the chips and connectors on the main circuit board. The Power Supply was assembled separately.

A Glance Back

There is plenty of of extra space inside the cabinet. This is the smallest off-the-shelf box that I could find that was large enough to accommodate the front panel controls. All of the circuitry is point-to-point hand wired. Connectors are used so that the boards can be removed and worked on with minimum stress on the wiring harness (and I apply that term loosely.)

Now that I have been using the function/sweep generator for about a month, I can say that I am very pleased with it. It certainly makes the 'scope a lot more useful.

At a couple of points during the design, I wondered whether more than one set of marker controls was really a good idea, and waivered about adding them until I had cut the holes in the front pane. Now I am convinced that having two markers are a good idea. For example, When measuring the bandwidth of a filter, I centered the left marker to the -3db point on the left side of the passband envelope, and the right marker over the -3db point on the right side of the marker envelope, and then switched to Marker Mode and measured the output frequency of each marker. In another instance, I was able to keep the generator set up to sweep over a certain frequency range, with one of the markers set at 10 MHz as a reference, and and still use the other marker control to vary the output frequency in Marker (non-sweep) Mode, and then return to sweeping with the touch of a button, without having to set the pots up again.

Another thing I wondered about was whether the control-per-function approach to front panel design would really be better than the more modern context dependent controls - controls that change function depending upon what part of the operating menu you are in. The control-per-function approach is definitely the easiest for work with. It takes more panel space and it takes more controls, but it is much faster to operate in that there is no need to consider what mode the instrument is in before manipulating a control. Indeed, please notice that the only indicators on the front panel are the power-on LED and the mechanical markings on the controls themselves.

The range of the adjustable attenuator is about right. I am tempted to add another output with a much higher voltage swing. With the output unterminated, I can get over 3.5 volts peak-to-peak, plus when the offset is taken into account, the output has a total swing of about 8 volts peak-to-peak (about ground) when unterminated. This is useful for some things like driving small bipolar transistors and low threshold FETs, but it would be nice to have this kind of range when terminated, and sometimes 10 V P-P terminated would be useful.

When the CMOS 5 volt output is loaded, it puts glitches into the grounds and output signal. The addition of ferrites at strategic places did not noticeably effect these glitches. It appears that reworking the grounds is the only solution. Since I am afraid of breaking one of the many wires each time I remove the circuit board, and reworking the grounds would require removing and replacing the board a dozen or more times, I am not going to bother with this right now. I can probe the CMOS output with a scope probe for sync purposes without inducing glitches on the output.

After putting this much effort into designing and building the function/waveform generator, and realizing that the old Wavetek sweep/function generator that I use in my garage in Mesa, Arizona is over 20 years old, I realized that I should keep a set of critical replacement parts on hand, and so have assembled a spare parts kit and schematic diagram and placed in inside the nearly empty enclosure, so that in case of a failure, even 10 or 20 years from now, I can still repair it. The kit contains some switches, the output buffer chip, and the MAX038. Even if the special parts are no longer manufactured. This leaves me wondering whether the microcontroller will hold its flash memory contents that long. Check back at this web page in 2025 and see if I've posted the answer.

Ocotober, 2010: I accidentally performed and experiment that proved that the output of the sweep/function generator is not tolerant of being connected to 240 VAC. Unfortuantely, I was not able to get the board working with the spare and now obsolete ZXFY202N8 opamp, and so built an output amplifier with dsicreet components. The new output amplifier is described in this web page:  A DC to 20 MHz Coax Driver Using Discreet Transistors

HOME (More Projects)
Contents ©2005, 2006, 200, 2008 and 2010 Richard Cappels All Rights Reserved. http://www.projects.cappels.org/

First posted in June, 2005. Modifications/corrections/additions: March 5, 2006, December 2007, January 2008, October, 2010.

You can send  email to me at projects(at)cappels.org. Replace "(at)" with "@" before mailing.

Use of information presented on this page is for personal, nonprofit educational and noncommercial use only. This material (including object files) is copyrighted by Richard Cappels and may not be republished or used directly for commercial purposes. For commercial license, click here.

Liability Disclaimer and intellectual property notice
(Summary: No warranties, use these pages at your own risk. You may use the information provided here for personal and educational purposes but you may not republish or use this information for any commercial purpose without explicit permission.)
I neither express nor imply any warranty for the quality, fitness for any particular purpose or  user, or freedom from patents or other restrictions on the rights of use of any software, firmware, hardware, design, service,information, or advice provided, mentioned,or made reference to in these pages. By utilizing or relying on software, firmware, hardware, design, service,information, or advice provided, mentioned, or made reference to in these pages, the user takes responsibility to assume all risk and associated with said activity and hold Richard Cappels harmless in the event of any loss or expense associated with said activity. The contents of this web site, unless otherwise noted, is copyrighted by Richard Cappels. Use of information presented on this site for personal, nonprofit educational and noncommercial use is encouraged, but unless explicitly stated with respect to particular material, the material itself may not be republished or used directly for commercial purposes. For the purposes of this notice, copying binary data resulting from program files, including assembly source code and object (hex) files into semiconductor memories for personal, nonprofit educational or other noncommercial use is not considered republishing. Entities desiring to use any material published in this pages for commercial purposes should contact the respective copyright holder(s).