NAME¶
xoscope - Digital Oscilloscope
SYNOPSIS¶
xoscope [X toolkit options] [xoscope options] [file]
DESCRIPTION¶
Xoscope is a digital real-time oscilloscope. It graphically displays
signal amplitude or bit logic as a function of time. Signals may be displayed,
saved, recalled, and manipulated by math functions. Signal input devices
currently include:
- /dev/dsp
- Audio sound recording via /dev/dsp. Two 8-bit analog
channels at 8000 S/s to 44100 S/s. Left and right audio is connected to A
and B inputs respectively. Use an external mixer program to select which
sound inputs to record. AC coupled, voltages unknown, 256K sample memory.
- EsounD
- Shared audio sound via the Enlightened Sound Daemon. This
is great for watching music but support for it is an option at
compile-time. EsounD is auto-detected and preferred over /dev/dsp.
- ProbeScope / OsziFOX
- Radio Shack ProbeScope, Cat. No. 22-310 is also known as an
osziFOX. This handheld probe sends its data through a serial port. It
samples one channel at 6-bits up to 20 MS/s with 128 samples of memory.
Real voltages are labeled in sample ranges from 1 volt to 100 volts. If a
ProbeScope is detected, it is connected to the A input.
- Bitscope
- Bitscope (www.bitscope.com) is a mixed-signal capture
engine which is accessed through a serial port. It simultaneously samples
a digital 8-bit port and two analog channels at 8 bit resolution at up to
25 MS/s or more. If detected, Channel A and B are connected to X and Y
while the Logic Analyzer is connected to C. Bitscope support is currently
under development and not yet fully functional.
- COMEDI
- The COMEDI project (www.comedi.org) develops Linux drivers,
tools, and libraries for data acquisition. Many commercially available ADC
cards are supported by COMEDI, and Xoscope can receive signals from
them via the COMEDI library.
See the -x and -z options and the ENVIRONMENT section
below for more details on how the above devices are detected. Some of the
controls below apply only to the sound card and are labeled as such.
Xoscope has no physical control over the ProbeScope/osziFOX which
is controlled by its own switches and built-in menus. Please refer to your
ProbeScope or osziFOX Owner's Manual for operating instructions. Bitscope
will eventually be controlled through a separate dialog window.
RUN-TIME KEYBOARD CONTROLS¶
Xoscope is an interactive program and can be completely controlled from
the keyboard at run-time. In verbose key help mode, each available key is
shown on the screen in (parentheses). The following single key commands are
available:
- ?
- Toggle verbose key help display mode.
- Escape
- Immediately quit the program.
- @
- Load a previously saved file. You are prompted for the
filename.
- #
- Save current settings and memory buffers to a file that can
be loaded later. You are prompted for the filename and asked for
confirmation to overwrite if it already exists.
- Enter
- Clear and refresh the entire screen.
- &
- Cycle between the various input devices. Note that this key
will not toggle to an unresponsive input device, so if only one device is
present, it will appear to have no effect.
- *
- Different behavior for different input devices
Under EsounD, this value instead determines whether the connection to EsounD
will block or not. Blocking mode is nicest to CPU usage but the
xoscope interface will not respond when the there is no sound
stream coming from EsounD. Nonblocking mode will let xoscope be
responsive whether sound is available or not, but will consume all
available CPU cycles.
Under COMEDI, this key toggles between different analog reference points
(ground, differential, or common).
- ^
- Different behavior for different input devices
- (/)
- Decrease/increase the sampling rate.
- 9/0
- Increase/decrease the Sec/Div horizontal time scale (zoom
out/in on time).
- -/=
- Decrease/increase the trigger level.
- _
- Cycle the trigger channel.
- +
- Cycle the trigger type: none, rising edge, or falling edge.
- Space
- Cycle the trigger mode: run, wait, stop. Run mode
continuously acquires and displays samples after trigger events. Wait mode
waits for the first trigger event and displays only the first set of
samples; this is "single-shot" mode. Stop mode suspends the data
acquisition and displays the current samples.
- !
- Cycle the plotting mode: point, point accumulate, line, or
line accumulate. In the accumulate modes, all samples stay on the screen;
use Enter to clear them.
- ,
- Cycle the graticule style: none, minor divisions only, or
minor and major divisions.
- .
- Toggle the graticule position: behind or in front of the
signals.
- '
- Toggle the manual cursors on/off. When manual cursors are
displayed, the measurements between the cursor positions are shown. When
cursors are not displayed, automatic measurements are shown.
- "
- Reset both manual cursor positions to the sample just after
trigger.
- Ctrl-q/w/e/r
- The Control key held down in combination with q/w/e/r moves
the first cursor back or forward by 10 samples or back or forward by 1
sample respectively.
- Ctrl-a/s/d/f
- The Control key held down in combination with a/s/d/f moves
the second cursor back or forward by 10 samples or back or forward by 1
sample respectively.
- 1-8
- Select the corresponding display channel. Measurements are
displayed for the channel. Channel 1 and 2 are used as input to the math
functions so they can't be used to do math. By default, they are connected
to the A and B input channels. Channel 1 and 2 can also be used to display
memory buffers or for doing math on memory or the alternate input. Channel
3 through 8 are not restricted and can be used for any purpose. The
remaining single key commands operate on the currently selected channel:
- Tab
- Toggle visibility: Hide or show the selected channel.
- {/}
- Decrease/Increase vertical scale of the selected channel.
- [/]
- Decrease/Increase vertical position of the selected
channel.
- `/~
- Decrease/Increase number of logic analyzer bits displayed.
The default of zero bits plots the signal as one analog line of varying
amplitude. Any other value plots multiple digital lines representing the
least significant bits from bottom to top.
- ;/:
- Increase/Decrease the math function of the selected
channel. This is not available on channel 1 & 2.
- $
- Show the result of an external math command on the selected
channel. You are prompted for the command. The command must accept samples
of channel 1 & 2 on stdin and write a new signal to stdout. See operl,
offt.c and xy.c in the distribution for examples of external math filter
commands. Not available on channel 1 & 2.
- a-z
- Recall the corresponding memory buffer or input device to
the currently selected channel. Input device channels are mapped to the
earliest letters of the alphabet; the rest of the buffers are available
for signal memory.
- A-Z
- Store the currently selected channel into the corresponding
memory buffer. Early letters of the alphabet can not be used because
they're reserved as the signal inputs, so the exact number of available
buffers is dependant on the input device. Memories are stored from time
zero to the current display update position. So it is best to STOP the
display before storing to a memory buffer.
MOUSE CONTROLS¶
Xoscope adds mouse controls to menus or around the edges of the scope
area. These should be nearly self-explanatory. They perform the same functions
as the equivalent keyboard commands above. If built with GTK+, a
context-sensitive pop-up menu is available with right-click to select
channels, change scale and position, recall and store signals and so on. Left
click decreases a variable while right click increases. The manual measurement
cursors can also be positioned with the mouse.
COMMAND-LINE OPTIONS¶
The command-line options define the startup state of
xoscope and have
reasonable defaults. All options may be capitalized in case they conflict with
an X toolkit option. These options are also recorded in text files saved by
xoscope.
- -h
- Help usage message showing these startup options with their
default values, then exit.
- -# <code>
- Startup conditions of each channel. # is a channel number
from 1 to 8. Code can have up to three fields, separated by colons:
position[.bits][:scale[:function #, memory letter, or external command]].
Position is the number of pixels above (positive) or below (negative) the
center of the display. Bits is the number of logic analyzer bits to
display. Scale is a valid scaling factor from 1/50 to 50, expressed as a
fraction. The third field may contain a built-in math function number,
memory letter, or external math command to run on the channel. Using these
options makes the channel visible unless position begins with a '+', in
which case the channel is hidden.
- -a <channel>
- Active, or selected, channel.
- -r <rate>
- Sampling Rate in samples per second. For the sound card,
current valid values are 8000, 11025, 22050, or 44100.
- -s <scale>
- Time Scale factor from 1/20 to 1000 expressed as a fraction
where 1/1 is 1 ms/div.
- -t <trigger>
- Trigger conditions. Trigger can have up to three fields,
separated by colons: position[:type[:channel]]. Position is the number of
pixels above (positive) or below (negative) the center of the display.
Type is a number indicating the kind of trigger, 0 = automatic, 1 = rising
edge, 2 = falling edge. Channel should be x or y.
- -l <cursors>
- Manual cursor Line positions. Cursors can have up to three
fields, separated by colons: first[:second[:on?]]. First is the sample
position of the first cursor. Second is the sample position of the second
cursor. The final field is weather the manual cursors are displayed (1) or
the not displayed (0).
- -p <type>
- Plot type. 0 = point, 1 = point accumulate, 2 = line, 3 =
line accumulate, 4 = step, 5 = step accumulate.
- -g <style>
- Graticule style. 0 = none, 1 = minor divisions only, 2 =
minor and major divisions.
- -b
- Whether the graticule is drawn Behind or in front of the
signals.
- -v
- Whether the Verbose key help is displayed.
- -x
- Whether the sound card input device (XY) is turned on. This
can be used to skip the attempt to connect to Esound or /dev/dsp.
- -z
- Whether the serial input device (Z) is turned on. This can
be used to suppress the search for a serial scope device.
- file
- The name of a file to load upon startup. This should be a
file previously saved by xoscope.
EXAMPLES¶
- xoscope -1 80 -2 -80 -3 0:1/5:6 -4 -160:1/5:7
-
This runs xoscope with channel 1 above and channel 2 below the center
of the display. Also channel 3 and 4 are made visible to show the FFT of
channel 1 and 2 respectively at a reduced scale of 1/5.
- xoscope oscope.dat
-
This runs xoscope, loading settings and memory buffers from a previously
saved data file called "oscope.dat".
FILES¶
Xoscope creates readable text data files. The files contain at least a
comment header which holds the current settings of
xoscope. Loading the
file causes these saved settings to be restored.
To record your signals permanently first store them into memory buffers,
optionally recall them to channels, and then save the file. All non-empty
memory buffers are written to a column of the file following the comment
header. Columns are separated by tab characters. These are stored back into
the memory buffers when the file is later loaded. Simply recall them to
channels to view them.
This format could also be read by some spreadsheet or plotting programs. For
example, the
gnuplot (1) command
plot "oscope.dat" using 0:1, "oscope.dat" using 0:2
would plot the first and second columns of the "oscope.dat" data file.
ENVIRONMENT¶
- OSCOPEPATH
- The path to use when looking for external math commands. If
unset, the built-in default is used.
- PROBESCOPE
- The serial device your ProbeScope or osziFOX is connected
to. If unset, /dev/probescope is used. /dev/probescope could be a symbolic
link to the real device such as /dev/ttyS1.
- BITSCOPE
- The serial device your Bitscope is connected to. If unset,
/dev/bitscope is used. /dev/bitscope could be a symbolic link to the real
device such as /dev/ttyS1.
- ESPEAKER
- The host:port of the EsounD to connect to if built with
EsounD support. If unset, localhost is assumed. If no EsounD connection is
made or if there is no EsounD support compiled in, then xoscope
will try to read /dev/dsp directly.
LIMITATIONS¶
The sound card should be capable of 44100 Hz sampling via the sound drivers. You
must use an external mixer program to select the input source device, level,
etc. Since these unknowns affect the amplitude, there is no reference to
voltage on the Y axis; it is in fact, unknown. Instead you're given the scale
in pixels per sample unit. Note that the serial oscilloscope devices don't
have this limitation. They have real voltage labels on the Y axis.
Signal math is only valid if Channel 1 and 2 contain signals of the same
sampling rate.
It is up to you to make sure this is the case. Doing math on
signals of different sample rates will produce incorrect results!
The automatic measurements count zero crossings and divide to determine the
frequency and period. If these zero crossings are not
"regularly-periodic", these measurements could be invalid.
Xoscope does understand how to measure the built-in FFT functions by
locating the peak frequency. Use manual cursor positioning to get more precise
measurements.
Your sound card is most-likely AC coupled so you will never see any DC offset.
You probably can't get DC coupling by just shorting the input capacitors on
your sound card. Use serial hardware to see DC offsets.
The display may not be able to keep up if you give it too much to plot,
depending on your sound card, graphics card, and processor speed. External
math commands are particularly expensive since the kernel must then split the
available CPU cycles across multiple processes. To maximize refresh speed,
hide all unneeded channels, use point or point accumulate mode, zoom in on
Sec/Div as much as possible, and turn off the graticule.
BUGS¶
The keyboard interface may be confusing.
AUTHOR¶
Oscope was written by Tim Witham (twitham@quiknet.com), originally based
on "scope" by Jeff Tranter (Jeff_Tranter@Mitel.COM). Most recent
work is by Brent Baccala (cosine@freesoft.org).
Xoscope is released
under the conditions of the GNU General Public License. See the files README
and COPYING in the distribution for details.