Spectrum Brands Mi 20Xx Users Manual Mi20_manual

MI.20xx to the manual 16fc5fbc-12fb-4b87-a0f7-b9e13aa160a0

2015-02-02

: Spectrum-Brands Spectrum-Brands-Mi-20Xx-Users-Manual-448393 spectrum-brands-mi-20xx-users-manual-448393 spectrum-brands pdf

Open the PDF directly: View PDF PDF.
Page Count: 96

DownloadSpectrum-Brands Spectrum-Brands-Mi-20Xx-Users-Manual- Mi20_manual  Spectrum-brands-mi-20xx-users-manual
Open PDF In BrowserView PDF
MI.20xx
fast 8 bit transient recorder,
A/D converter board
for PCI bus
Hardware Manual
Software Driver Manual

English version

April 1, 2005

SPECTRUM SYSTEMENTWICKLUNG MICROELECTRONIC GMBH · AHRENSFELDER WEG 13-17 · 22927 GROSSHANSDORF · GERMANY
PHONE: +49 (0)4102-6956-0 · FAX: +49 (0)4102-6956-66 · E-MAIL: info@spec.de · INTERNET: http://www.spec.de

(c) SPECTRUM SYSTEMENTWICKLUNG MICROELECTRONIC GMBH
AHRENSFELDER WEG 13-17, 22927 GROSSHANSDORF, GERMANY

SBench is a registered trademark of Spectrum Systementwicklung Microelectronic GmbH.
Microsoft, Visual C++, Visual Basic, Windows, Windows 98, Windows NT, Window 2000 and Windows XP are tradenarks/registered
trademarks of Microsoft Corporation.
LabVIEW, DASYLab, Diadem and LabWindows/CVI are tradenarks/registered trademarks of National Instruments Corporation.
MATLAB is a tradenark/registered trademark of The Mathworks, Inc.
Agilent VEE, VEE Pro and VEE OneLab are tradenarks/registered trademarks of Agilent Technologies, Inc.
FlexPro is a registered trademark of Weisang GmbH & Co. KG.

Introduction....................................................................................................................... 6
Preface ............................................................................................................................................................................... 6
General Information ............................................................................................................................................................. 6
Different models of the MI.20xx series .................................................................................................................................... 7
Additional options ................................................................................................................................................................ 8
Extra I/O (Option -XMF).................................................................................................................................................. 8
Extra I/O (Option -XIO)................................................................................................................................................... 8
Starhub ......................................................................................................................................................................... 9
Timestamp ..................................................................................................................................................................... 9
The Spectrum type plate ...................................................................................................................................................... 10
Hardware information......................................................................................................................................................... 11
Block diagram.............................................................................................................................................................. 11
Technical Data ............................................................................................................................................................. 11
Dynamic Parameters ..................................................................................................................................................... 12
Order information......................................................................................................................................................... 12

Hardware Installation ..................................................................................................... 13
System Requirements ..........................................................................................................................................................
Warnings..........................................................................................................................................................................
ESD Precautions ...........................................................................................................................................................
Cooling Precautions ......................................................................................................................................................
Sources of noise ...........................................................................................................................................................
Installing the board in the system..........................................................................................................................................
Installing a single board without any options....................................................................................................................
Installing a board with digital inputs/outputs....................................................................................................................
Installing a board with extra I/O (Option -XMF) ...............................................................................................................
Installing multiple boards synchronized by starhub............................................................................................................
Installing multiple synchronized boards ...........................................................................................................................

13
13
13
13
13
13
13
14
14
15
16

Software Driver Installation ............................................................................................. 17
Interrupt Sharing ................................................................................................................................................................
Windows 98 .....................................................................................................................................................................
Installation ...................................................................................................................................................................
Version control .............................................................................................................................................................
Driver - Update.............................................................................................................................................................
Windows 2000 .................................................................................................................................................................
Installation ...................................................................................................................................................................
Version control .............................................................................................................................................................
Driver - Update.............................................................................................................................................................
Windows XP......................................................................................................................................................................
Installation ...................................................................................................................................................................
Version control .............................................................................................................................................................
Driver - Update.............................................................................................................................................................
Windows NT .....................................................................................................................................................................
Installation ...................................................................................................................................................................
Adding boards to the Windows NT driver .......................................................................................................................
Driver - Update.............................................................................................................................................................
Linux.................................................................................................................................................................................
Overview ....................................................................................................................................................................
Installation ...................................................................................................................................................................

17
18
18
18
19
20
20
20
21
22
22
22
23
24
24
24
24
25
25
25

Software ......................................................................................................................... 27
Software Overview.............................................................................................................................................................
First Test with SBench..........................................................................................................................................................
C/C++ Driver Interface.......................................................................................................................................................
Header files .................................................................................................................................................................
Microsoft Visual C++ ....................................................................................................................................................
Linux Gnu C.................................................................................................................................................................
Other Windows C/C++ compilers .................................................................................................................................
National Instruments LabWindows/CVI...........................................................................................................................
Driver functions ............................................................................................................................................................
Delphi (Pascal) Programming Interface ..................................................................................................................................
Type definition .............................................................................................................................................................
Include Driver...............................................................................................................................................................
Examples.....................................................................................................................................................................
Driver functions ............................................................................................................................................................
Visual Basic Programming Interface ......................................................................................................................................
Include Driver...............................................................................................................................................................
Visual Basic Examples...................................................................................................................................................
VBA for Excel Examples ................................................................................................................................................
Driver functions ............................................................................................................................................................

27
27
28
28
28
28
29
29
29
32
32
32
32
32
34
34
34
34
34

3

Programming the Board .................................................................................................. 36
Overview ..........................................................................................................................................................................
Register tables ...................................................................................................................................................................
Programming examples.......................................................................................................................................................
Error handling....................................................................................................................................................................
Initialization.......................................................................................................................................................................
Starting the automatic initialization routine ......................................................................................................................
PCI Register .................................................................................................................................................................
Hardware version.........................................................................................................................................................
Date of production........................................................................................................................................................
Serial number ..............................................................................................................................................................
Maximum possible sample rate ......................................................................................................................................
Installed memory ..........................................................................................................................................................
Installed features and options .........................................................................................................................................
Used interrupt line ........................................................................................................................................................
Used type of driver .......................................................................................................................................................
Powerdown and reset .........................................................................................................................................................

36
36
36
36
37
37
37
38
38
38
38
38
39
39
39
40

Analog Inputs.................................................................................................................. 41
Channel Selection ..............................................................................................................................................................
Important note on channels selection ...............................................................................................................................
Setting up the inputs ...........................................................................................................................................................
Input ranges.................................................................................................................................................................
Input offset...................................................................................................................................................................
Input termination...........................................................................................................................................................
Automatical adjustment of the offset settings.....................................................................................................................

41
41
42
42
43
44
44

Standard acquisition modes ............................................................................................ 45
General Information ...........................................................................................................................................................
Programming .....................................................................................................................................................................
Memory, Pre- and Posttrigger .........................................................................................................................................
Starting without interrupt (classic mode)...........................................................................................................................
Starting with interrupt driven mode .................................................................................................................................
Data organization ........................................................................................................................................................
Sample format..............................................................................................................................................................
Reading out the data with SpcGetData............................................................................................................................

45
45
45
46
46
47
47
47

FIFO Mode....................................................................................................................... 49
Overview ..........................................................................................................................................................................
General Information......................................................................................................................................................
Background FIFO Read .................................................................................................................................................
Speed Limitations..........................................................................................................................................................
Programming .....................................................................................................................................................................
Software Buffers ...........................................................................................................................................................
Buffer processing ..........................................................................................................................................................
FIFO mode ..................................................................................................................................................................
Example FIFO acquisition mode .....................................................................................................................................
Data organization ........................................................................................................................................................
Sample format..............................................................................................................................................................

49
49
49
49
50
50
51
52
52
52
53

Clock generation ............................................................................................................. 54
Overview ..........................................................................................................................................................................
Internally generated sample rate ..........................................................................................................................................
Standard internal sample rate ........................................................................................................................................
Using plain quartz with no PLL........................................................................................................................................
Direct external clock .....................................................................................................................................................
External clock with divider .............................................................................................................................................

54
54
54
55
55
57

Trigger modes and appendant registers .......................................................................... 58
General Description............................................................................................................................................................
Software trigger .................................................................................................................................................................
External TTL trigger .............................................................................................................................................................
Edge triggers ...............................................................................................................................................................
Pulsewidth triggers........................................................................................................................................................
Channel Trigger .................................................................................................................................................................
Overview of the channel trigger registers.........................................................................................................................
Triggerlevel..................................................................................................................................................................
Detailed description of the channel trigger modes.............................................................................................................

4

58
58
58
59
60
62
62
63
65

Option Multiple Recording ............................................................................................... 73
Recording modes ...............................................................................................................................................................
Standard Mode............................................................................................................................................................
FIFO Mode ..................................................................................................................................................................
Trigger modes....................................................................................................................................................................

73
73
73
73

Option Gated Sampling ................................................................................................... 75
Recording modes ...............................................................................................................................................................
Standard Mode............................................................................................................................................................
FIFO Mode ..................................................................................................................................................................
Trigger modes....................................................................................................................................................................
General information and trigger delay ............................................................................................................................
Allowed trigger modes ..................................................................................................................................................
Example program...............................................................................................................................................................

75
75
75
75
75
76
77

Option Timestamp ........................................................................................................... 78
General information ...........................................................................................................................................................
Timestamp modes...............................................................................................................................................................
Standard mode ............................................................................................................................................................
StartReset mode............................................................................................................................................................
RefClock mode (optional) ..............................................................................................................................................
Timestamp Status................................................................................................................................................................
Reading out timestamp data ................................................................................................................................................
Functions for accessing the data .....................................................................................................................................
Data format .................................................................................................................................................................
Example programs .............................................................................................................................................................
Standard acquisition mode ............................................................................................................................................
Acquisition with Multiple Recording ................................................................................................................................

78
78
78
78
78
79
79
79
80
81
81
81

Option Extra I/O ............................................................................................................. 82
Digital I/Os .......................................................................................................................................................................
Channel direction .........................................................................................................................................................
Transfer Data ...............................................................................................................................................................
Analog Outputs..................................................................................................................................................................
Programming example ........................................................................................................................................................

82
82
82
83
83

Synchronization (Option) ................................................................................................. 84
The different synchronization options ....................................................................................................................................
Synchronization with option cascading ...........................................................................................................................
Synchronization with option starhub ...............................................................................................................................
The setup order for the different synchronization options .........................................................................................................
Setup Order for use with standard (non FIFO) mode and equally clocked boards .................................................................
Setup synchronization for use with FIFO mode and equally clocked boards .........................................................................
Additions for synchronizing different boards..........................................................................................................................
Additions for equal boards with different sample rates ......................................................................................................
Resulting delays using different boards or speeds .............................................................................................................

84
84
84
85
85
89
91
93
93

Appendix ........................................................................................................................ 94
Error Codes .......................................................................................................................................................................
Pin assignment of the multipin connector ...............................................................................................................................
Extra I/O with external connector(Option -XMF) ...............................................................................................................
Pin assignment of the multipin cable .....................................................................................................................................
Pin assignment of the internal multipin connector ....................................................................................................................
Extra I/O with internal connector (Option -XIO)................................................................................................................

94
95
95
95
96
96

5

Preface

Introduction

Introduction
Preface
This manual provides detailed information on the hardware features of your Spectrum instrumentation board. This information includes technical data, specifications, block diagram and a connector description.
In addition, this guide takes you through the process of installing your board and also describes the installation of the delivered driver package
for each operating system.
Finally this manual provides you with the complete software information of the board and the related driver. The reader of this manual will
be able to integrate the board in any PC system with one of the supported bus and operating systems.
Please note that this manual provides no description for specific driver parts such as those for LabVIEW or MATLAB. These drivers are provided by special order.
For any new information on the board as well as new available options or memory upgrades please contact our webside
http://www.spectrum-instrumentation.com. You will also find the current driver package with the latest bug fixes and new features on our site.
Please read this manual carefully before you install any hardware or software. Spectrum is not responsible
for any hardware failures resulting from incorrect usage.

General Information
The 4 models of the MI.20xx series are designed for the fast and high quality data acquisition. Every of the up to four input channels has its
own A/D converter and it's own programmable input amplifier.
This allows to record signals with 8 bit resolution without any phase delay between them. The inputs could be selected to one of seven input
ranges by software and could be programmed to compensate an input offset of ±400% of the input range. The extremely large on-board
memory allows long time recording even with highest sample rates. A FIFO mode is also integrated on the board. This allows to record data
continuously and to process it in the PC or to store it to hard disk.
Several boards of the MI.xxxx series may be connected together by the internal standard synchronisation bus to work with the same time base.
Application examples: Laboratory equipment, Supersonics, LDA/PDA, Radar, Spectroscopy, production test.

6

MI.20xx Manual

Introduction

Different models of the MI.20xx series

Different models of the MI.20xx series
The following overwiew shows the different available models of the MI.20xx series. They differ in the number mounted generation modules
and the number of available channels. You can also see the model dependant allocation of the output connectors.

• MI.2020
• MI.2030
•

• MI.2021
• MI.2031

(c) Spectrum GmbH

7

Additional options

Introduction

Additional options
Extra I/O (Option -XMF)
With this simple-to-use enhancement
it is possible to control a wide range
of external instruments or other
equipment. Therefore you have 24
digital I/O and the 4 analog outputs
available.
The asynchronous I/Os of the extra
I/O option are useful if an external
amplifier should be controlled, any
kind of signal source must be programmed, an antenna must be adjusted, a status information from
external machine has to be obtained
or different test signals have to be
routed to the board.
The additional inputs and outputs
are mounted on an extra bracket.
The figure shows the allocation of the two connectors.
The shown option is mounted exemplarily on a board with two modules. Of course you can also combine this option as well with a board
that is equipped with only one module.
It is not possible to use this option together with the star hub or timestamp option, because there is just space for
one piggyback module on the on-board expansion slot.

Extra I/O (Option -XIO)
With this simple-to-use enhancement
it is possible to control a wide range
of external instruments or other
equipment. Therefore you have 16
digital I/O and the 4 analog outputs
available.
The asynchronous I/Os of the extra
I/O option are useful if an external
amplifier should be controlled, any
kind of signal source must be programmed, an antenna must be adjusted, a status information from
external machine has to be obtained
or different test signals have to be
routed to the board.
The additional inputs and outputs
are not mounted on an extra brakket, but are available on an internal connector. The figure shows the position of this connector on the bottom side of the extra I/O piggy-back
module.
The shown option is mounted exemplarily on a board with two modules. Of course you can also combine this option as well with a board
that is equipped with only one module.
It is not possible to use this option together with the star hub or timestamp option, because there is just space for
one piggyback module on the on-board expansion slot.

8

MI.20xx Manual

Introduction

Additional options

Starhub
The star hub module allows the synchronisation of up to 16 MI boards.
It is possible to synchronise boards
of the same type with each other as
well as different types.
The module acts as a star hub for
clock and trigger signals. Each
board is connected with a small cable of the same length, even the master board. That minimises the clock
skew between the different boards.
The figure shows the piggyback module mounted on the base board
schematically without any cables to
achieve a better visibility.
Any board could be the clock master and the same or any other
board could be the trigger master. All trigger modes that are available on the master board are also available if the synchronisation star hub
is used.
The cable connection of the boards is automatically recognised and checked by the driver at load time. So no care must be taken on how to
cable the boards. The programming of the star hub is included in the standard board interface and consists of only 3 additional commands.
It is not possible to use this option together with the timestamp or extra I/O option, because the is just space for one
piggyback module on the on-board expansion slot.

Timestamp
The timestamp module was designed to record the exact time information between trigger events.
The timestamp reset command sets
an internal counter to zero. The
counter is running with the same resolution as the sample rate. On each
trigger event a timestamp is recorded in an extra FIFO. The recorded
timestamps are read out asynchronously to the board sampling.
If the absolute time information is of
interest it is possible to synchronise
the timestamp counter with a 1 Hz
"seconds" signal of a radio clock or
a GPS receiver. In that case the 64
bit timestamp information is split up
in two parts. The one part counts the number of seconds starting with the reset command, the other part is set to zero on every rising edge
of the seconds signal and specifies the exact time position in relation to the seconds signal.
The figure shows the piggyback module installed on the on-board expansion slot. The shown option is mounted exemplarily on a board with
two modules.
It is not possible to use this option together with the star hub or extra I/O option, because the is just space for one
piggyback module on the on-board expansion slot.

(c) Spectrum GmbH

9

The Spectrum type plate

Introduction

The Spectrum type plate

The Spectrum type plate, which consists of the following components, can be found on all of our boards.

The board type, consisting of the two letters describing the bus (in this case MI for the PCI bus) and the model number.

The size of the on-board installed memory in MSamples. In this example there are 8 MS (16 MByte) installed.

The serial number of your Spectrum board. Every board has a unique serial number.

The board revision, consisting of the base version and the module version.

A list of the installed options. A complete list of all available options is shown in the order information. In this example the options
’Multiple recording’ and ’Extra I/O with external outputs’ are installed.

The date of production, consisting of the calendar week and the year.

Please always supply us with the above information, especially the serial number in case of support request. That
allows us to answer your questions as soon as possible. Thank you.

10

MI.20xx Manual

Introduction

Hardware information

Hardware information
Block diagram

Technical Data
Resolution
Differential linearity error (ADC)
Integral linearity error (ADC)
Multi: Trigger to 1st sample delay
Multi: Recovery (re-arm) time
Trigger accuracy 2/4 channel mode
Trigger accuracy 1 channel mode
Ext. clock: delay to internal clock
input signal with 50 ? termination
Trigger output delay
Input impedance
Min internal clock
Min external clock

8 bit
0.5 LSB typ.
0.5 LSB typ.
fixed
< 20 samples
1 Sample
2 Samples
42 ns ± 2 ns
max 5 V rms
1 Sample
50 Ohm / 1 MOhm || 25 pF
1 kS/s
1 MS/s

Dimension
Width (Standard)
Width (with star hub option)
Analogue Connector
Overvoltage protection (range < ±500 mV)
Overvoltage protection (range > ±500 mV)
Warm up time
Operating temperature
Storage temperature
Humidity

312 mm x 107 mm
1 full size slot
2 full size slots
3 mm SMB male
±5 V
±50 V
10 minutes
0°C - 50°C
-10°C - 70°C
10% to 90%

Power consumption 5 V @ full speed
Power consumption 5 V @ power down

max 3.4 A (17.0 Watt)
max 1.9 A (9.5 Watt)

Trigger input:Standard TTL level

Low: -0.5 > level < 0.8 V
High: 2.0 V > level < 5.5 V
Trigger pulse must be valid > 2 clock periods.

Clock input: Standard TTL level

Trigger output

Standard TTL, capable of driving 50 Ohm.
Low < 0.4 V (@ 20 mA, max 64 mA)
High > 2.4 V (@ -20 mA, max -32 mA)
One positive edge after the first internal trigger

Clock output

Low: -0.5 > level < 0.8 V
High: 2.0 V > level < 5.5 V
Rising edge is used.
Required duty cycle: 50% ± 5%
Standard TTL, capable of driving 50 Ohm
Low < 0.4 V (@ 20 mA, max 64 mA)
High > 2.4 V (@ -20 mA, max -32 mA)

Input range
Software programmable offset
Offset error
Gain error
MI.202x: Noise (rms): 50 Ohm, 50 MS/s
MI.203x: Noise (rms): 50 Ohm, 100/200 MS/s
Crosstalk 5 MHz signal, ±50 mV input, 50 Ohm

±50 mV
±200 mV

±100 mV
±400 mV

<2%
< 0.5 LSB
< 2.0 LSB

<2%
< 0.5 LSB
< 1.5 LSB

±200 mV
±800 mV

±500 mV
±1 V
±2 V
±4 V
< 1 LSB, adjustable by user
<2%
<2%
<2%
< 0.5 LSB
< 0.5 LSB
< 0.5 LSB
< 1.0 LSB
< 1.0 LSB
< 1.0 LSB
< 62 dB

(c) Spectrum GmbH

±2 V
±8 V

±5 V
±20 V

<2%
< 0.5 LSB
< 1.0 LSB

<2%
< 0.5 LSB
< 1.0 LSB

11

Hardware information

Introduction

MI.2020
MI.2021
50 MS/s
50 MS/s
> 25 MHz

max internal clock
max external clock
-3 dB bandwidth

MI.2030
MI.2031
200 MS/s
100 MS/s
> 90 MHz

Dynamic Parameters
MI.2020
MI.2021
50 MS/s
1 MHz
> 47.5 dB
< -52.5 dB
> 57.0 dB
> 46.0 dB
> 7.3

Test - Samplerate
Testsignal frequency
SNR (typ)
THD (typ)
SFDR (typ), incl harm.
SINAD (typ)
ENOB (based on SINAD)

MI.2030
MI.2031
100 MS/s
1 MHz
> 45.9 dB
< -49.1 dB
> 55.5 dB
> 44.2
> 7.1

Dynamic parameters are measured at ± 1 V input range (if no other range is stated) and 50 Ohm termination with the samplerate specified in the table. Measured parameters are averaged 20 times to get typical values. Test signal is a pure sine wave of the specified frequency with > 99% amplitude. SNR and RMS noise parameters may differ depending on the quality
of the used PC. SNR = Signal to Noise Ratio, THD = Total Harmonic Distortion, SFDR = Spurious Free Dynamic Range, SINAD = Signal Noise and Distortion, ENOB = Effective Number
of Bits. For a detailed description please see application note 002.

Order information
Order No

Description

Order No

Description

MI2020
MI2021
MI2030

MI.2020 with 16 MSample memory and drivers/SBench 5.x
MI.2021 with 16 MSample memory and drivers/SBench 5.x
MI.2030 with 16 MSample memory and drivers/SBench 5.x

MI2xxx-32M
MI2xxx-64M
MI2xxx-128M

Option: 32 MSample memory instead of 16 MSample standard mem
Option: 64 MSample memory instead of 16 MSample standard mem
Option: 128 MSample memory instead of 16 MSample standard
mem

MI2031

MI.2031 with 16 MSample memory and drivers/SBench 5.x

MI2xxx-256M

MI2xxx-up

Option: 256 MSample memory instead of 16 MSample standard
mem
Option: 512 MSample memory instead of 16 MSample standard
mem
Additional handling costs for later memory upgrade

MI2xxx-mr
MI2xxx-gs
MI2xxx-cs

Option Multiple Recording: Memory segmentation
Option Gated Sampling: Gate signal controls acquisition
Synchronisation of 2 - 4 boards, one option per system

MI20xx-dl
MI20xx-hp
MI20xx-lv
MATLAB

DASYLab driver for MI.20xx series
VEE driver for MI.20xx series
LabVIEW driver for MI.20xx series
MATLAB driver for all MI.xxxx, MC.xxxx and MX.xxxx series.

MI2xxx-512M
MI2xxx-smod
MIxxxx.xio
MIxxxx-xmf
MI2xxx-time

Star Hub: Synchronisation of 2 - 16 boards, one option per system
Extra I/O, internal connector: 16 DI/O, 4 Analog out
Extra I/O, external connector: 24 DI/O, 4 Analog out, incl. cable
Timestamp option: Extra memory for trigger time

Cab-3f-9m-80
Cab-3f-9m-200
Cab-3f-9f-80
Cab-3f-9f-200

Adapter
Adapter
Adapter
Adapter

12

cable:
cable:
cable:
cable:

SMB
SMB
SMB
SMB

female
female
female
female

to
to
to
to

BNC male 80 cm
BNC male 200 cm
BNC female 80 cm
BNC female 200 cm

MI.20xx Manual

Hardware Installation

System Requirements

Hardware Installation
System Requirements
All Spectrum MI.xxxx instrumentation boards are compliant to the PCI standard and require in general one free full length slot. Depending
on the installed options additional free slots can be necessary.

Warnings
ESD Precautions
The boards of the MI.xxxx series contain electronic components that can be damaged by electrostatic discharge (ESD).
Before installing the board in your system or even before touching it, it is absolutely necessary to bleed of
any electrostatic electricity.

Cooling Precautions
The boards of the MI.xxxx series operate with components having very high power consumption at high speeds. For this reason it is absolutely
required to cool this board sufficiently. It is strongly recommended to install an additional cooling fan producing a stream of air across the
boards surface. In most cases professional PC-systems are already equipped with sufficient cooling power. In that case please make sure that
the air stream is not blocked.
During longer pauses between the single measurements the power down mode should be called to reduce the heat production.

Sources of noise
The boards of the MI.xxxx series should be placed far away from any noise producing source (like e.g. the power supply). It should especially
be avoided to place the board in the slot directly adjacent to another fast board (like the graphics controller).

Installing the board in the system
Installing a single board without any options
Before installing the board you first need to unscrew and remove the dedicated blind-bracket usually mounted to cover unused slots of your
PC. Please keep the screw in reach to fasten your Spectrum board afterwards. All Spectrum boards require a full length PCI slot with a track
at the backside to guide the board by it’s retainer. Now insert the board slowly into your computer. This is done best with one hand each at
both fronts of the board.

While inserting the board take care not to tilt the retainer in the track.

Please be very carefully when inserting the board in the PCI slot, as most of the mainboards are mounted
with spacers and therefore might be damaged if they are exposed to high preasure.

After the board’s insertion fasten the screw of the bracket carefully, without overdoing.

(c) Spectrum GmbH

13

Installing the board in the system

Hardware Installation

Installing a board with digital inputs/outputs
Before installing the board you first need to unscrew and remove the dedicated blind-brackets usually mounted to cover unused slots of your
PC. Please keep the screws in reach to fasten your Spectrum board and the extra bracket afterwards. All Spectrum boards require a full length
PCI slot with a track at the backside to guide the board by it’s retainer. Now insert the board and the extra bracket slowly into your computer.
This is done best with one hand each at both fronts of the board.

While inserting the board take care not to tilt the retainer in the track.

Please be very carefully when inserting the board in the PCI slot, as most of the mainboards are mounted
with spacers and therefore might be damaged they are exposed to high preasure.

After the board’s insertion fasten the screws of both brackets carefully, without overdoing. The figure shows an example of a board with two
installed modules.

Installing a board with extra I/O (Option -XMF)
Before installing the board you first need to unscrew and remove the dedicated blind-brackets usually mounted to cover unused slots of your
PC. Please keep the screws in reach to fasten your Spectrum board and the extra bracket afterwards. All Spectrum boards require a full length
PCI slot with a track at the backside to guide the board by it’s retainer. Now insert the board and the extra bracket slowly into your computer.
This is done best with one hand each at both fronts of the board.

While inserting the board take care not to tilt the retainer in the track.

Please be very carefully when inserting the board in the PCI slot, as most of the mainboards are mounted
with spacers and therefore might be damaged they are exposed to high preasure.

After the board’s insertion fasten the screws of both brackets carefully, without overdoing. The figure shows an example of a board with two
installed modules.

14

MI.20xx Manual

Hardware Installation

Installing the board in the system

Installing multiple boards synchronized by starhub
Hooking up the boards
Before mounting several synchronized boards for a multi channel system into the PC you can hook up the boards with their synchronization
cables first. If there is enough space in your computer’s case (e.g. a big tower case) you can also mount the boards first and hook them up
afterwards. Spectrum ships the boards together with the needed amount of synchronization cables. All of them are matched to the same
length, to achieve a zero clock delay between the boards.
Only use the included flat ribbon cables.
All of the boards, including the board that carrys the starhub piggy-back module, must be wired to the starhub as the figure is showing exemplarily for three synchronized boards.
It does not matter which of the 16 connectors on the starhub module you use for which board. The software driver will detect the types and
order of the synchronized boards automatically. The figure shows the three cables mounted next to each other only to achieve a better visibility.

As some of the synchronization cables are not secured against wrong plugging you should take
care to have the pin 1 markers on the multiple connectors and the cable on the same side, as the
figure on the right is showing.

Mounting the wired boards
Before installing the boards you first need to unscrew and remove the dedicated blind-brackets usually mounted to cover unused slots of your
PC. Please keep the screws in reach to fasten your Spectrum boards afterwards. All Spectrum boards require a full length PCI slot with a track
at the backside to guide the board by it’s retainer. Now insert the board and the extra bracket slowly into your computer. This is done best
with one hand each at both fronts of the board. Please keep in mind that the board carrying the starhub piggy-back module requires the width
of two slots.

While inserting the boards take care not to tilt the retainers in the tracks.

Please be very carefully when inserting the boards in the PCI slots, as most of the mainboards are mounted
with spacers and therefore might be damaged if they are exposed to high preasure.

After the boards insertion fasten the screws of all brackets carefully, without overdoing. The figure shows an example of three boards with
two installed modules.

(c) Spectrum GmbH

15

Installing the board in the system

Hardware Installation

Installing multiple synchronized boards
Hooking up the boards
Before mounting several synchronized boards for a multi channel system into the PC you can hook up the boards with the synchronization
cable first. If there is enough space in your computer’s case (e.g. a big tower case) you can also mount the boards first and hook them up
afterwards. Spectrum ships the boards together with the needed synchronization cable.
All of the possible four boards must be wired with the delivered synchronization cable. The figure is showing an example of three synchronized boards.
The outer boards have a soldered termination for the sync bus. These boards are marked with an additional sticker.
Only mount the cluster of synchronized boards in a row with the dedicated boards on the outer sides.

Mounting the wired boards
Before installing the boards you first need to unscrew and remove the dedicated blind-brackets usually mounted to cover unused slots of your
PC. Please keep the screws in reach to fasten your Spectrum boards afterwards. All Spectrum boards require a full length PCI slot with a track
at the backside to guide the board by it’s retainer. Now insert the boards slowly into your computer. This is done best with one hand each
at both fronts of the board.

While inserting the boards take care not to tilt the retainers in the tracks.

Please be very carefully when inserting the boards in the PCI slots, as most of the mainboards are mounted
with spacers and therefore might be damaged if they are exposed to high preasure.

After the boards insertion fasten the screws of all brackets carefully, without overdoing. The figure shows an example of three boards with
two installed modules.

16

MI.20xx Manual

Software Driver Installation

Interrupt Sharing

Software Driver Installation
Before using the board a driver must be installed that matches the operating system. The installation is done in different ways depending on
the used operating system. The driver that is on CD supports all boards of the MI, MC and MX series. That means that you can use the same
driver for all boards of theses families.

Interrupt Sharing
This board uses a PCI interrupt for DMA data transfer and for controlling the FIFO mode. The used interrupt line is allocated by the PC BIOS
at system start and is normally depending on the selected slot. Because there is only a limited number of interrupt lines available on the PCI
bus it can happen that two or more boards must use the same interrupt line. This so called interrupt sharing must be supported by all drivers
of the participating equipment.
Most available drivers and also the Spectrum driver for your board can manage interrupt sharing. But there are also some drivers on the
market that can only use one interrupt exclusively. If this equipment shares an interrupt with the Spectrum board, the system will hang up if
the second driver is loaded (the time is depending on the operating system).
If this happens it is necessary to reconfigure the system in that way that the critical equipment has an exclusive access to an interrupt.
On most systems the BIOS shows a list of all installed PCI boards with their allocated interrupt lines directly after system start. You have to
check whether an interrupt line is shared between two boards. Some BIOS allow the manual allocation of interrupt lines. Have a look in your
mainboard manual for further information on this topic.
Because normally the interrupt line is fixed for one PCI slot it is simply necessary to use another slot for the critical board to force a new
interrupt allocation. You have to search a configuration where all critical boards have only exclusive access to one interrupt.
Depending on the system, using the Spectrum board with a shared interrupt may degrade performance a little. Each interrupt needs to be
checked by two drivers. For this reason when using time critical FIFO mode even the Spectrum board should have an exclusively access to
one interrupt line.

(c) Spectrum GmbH

17

Windows 98

Software Driver Installation

Windows 98
Installation
When installing the board in a Windows 98 system the Spectrum board
will be recognized automatically on
the next start-up.
The system offers the direct installation of a driver for the board.
Let Windows search automatically
for the best driver for your system.

Select the CD that was delivered
with the board as installation source.
The driver files are located on CD in
the directory
\Driver\Win98_2k_XP.
The hardware assistant shows you
the exact board type that has been
found like the MI.3020 in the example. Older boards (before june
2004) show „Spectrum Board“ instead.

The drivers can be used directly after installation. It is not necessary to restart the system.
The installed drivers are linked in the device manager. Below you’ll see how to examine
the driver version and how to update the driver with a newer version.

Version control
If you want to check which driver version is installed
in the system this can be easily done in the device
manager. Therefore please start the device manager
from the control panel and show the properties of the
installed driver.
On the property page Windows 98 shows the date
of the driver.

18

MI.20xx Manual

Software Driver Installation

Windows 98

After clicking the driver info button the detailed version information of the driver is shown. In the case
of a support question this information must be presented together with the board’s serial number to
the support team to help finding a fast solution.

Driver - Update
If a new driver version is to be installed no Spectrum board should be in use. So please stop and exit all software that could access the boards.
New drivers are available at http://www.spectrum-instrumentation.com. After down loading the driver unzip it to a temporary folder.

A new driver version is directly installed from the device manager.
Therefore please open the properties
page of the driver as shown in the
section before. As next step click on
the update driver button and follow
the steps of the driver installation in
a similar way to the previous board
and driver installation.

Please select the path where the new
driver version was unzipped to. If
you’ve got the new driver version on
CD please select the
\Driver\Win98_2k_XP path on the
CD containing the new driver version.

The new driver version can be used directly after installation without restarting the system.
Please keep in mind to update the driver of all installed Spectrum boards.

(c) Spectrum GmbH

19

Windows 2000

Software Driver Installation

Windows 2000
Installation
When installing the board in
a Windows 2000 system the
Spectrum board will be recognized automatically on the
next start-up.
The system offers the direct installation of a driver for the
board.
Let Windows search automatically for the best driver for
your system.

Select the CD that was delivered with the board as installation source. The driver files
are located on CD in the directory
\Driver\Win98_2k_XP.
The hardware assistant
shows you the exact board
type that has been found like
the MI.3020 in the example.
Older boards (before june
2004) show „Spectrum
Board“ instead.

The drivers can be used directly after installation. It is
not necessary to restart the
system. The installed drivers
are linked in the device manager.
Below you’ll see how to examine the driver version and
how to update the driver with
a newer version.

Version control
If you want to check which driver version
is installed in the system this can be easily done in the device manager. Therefore please start the device manager
from the control panel and show the
properties of the installed driver.
On the property page Windows 2000
shows the date and the version of the installed driver.
After clicking the driver details button the
detailed version information of the driver
is shown. In the case of a support question this information must be presented together with the board’s serial number to
the support team to help finding a fast solution.
20

MI.20xx Manual

Software Driver Installation

Windows 2000

Driver - Update
If a new driver version should be installed no Spectrum board is allowed to be in use by any software. So please stop and exit all software
that could access the boards.

A new driver version is directly installed from the device
manager. Therefore please
open the properties page of
the driver as shown in the section before. As next step click
on the update driver button
and follow the steps of the
driver installation in a similar
way to the previous board
and driver installation.

Please select the path where
the new driver version was
unzipped to. If you’ve got the
new driver version on CD
please select the
\Driver\Win98_2k_XP path
on the CD containing the new
driver version.

The new driver version can
be used directly after installation without restarting the system. Please keep in mind to
update the driver of all installed Spectrum boards.

(c) Spectrum GmbH

21

Windows XP

Software Driver Installation

Windows XP
Installation
When installing the board in a Windows XP system the Spectrum board will be recognized automatically on the next start-up.
The system offers the direct installation of a driver for the board.
Do not let Windows automatically search for the best driver, because sometimes the driver will not be found on the CD. Please take the
option of choosing a manual installation path instead.

Allow Windows XP to search for the most suitable driver in a specific directory. Select the CD that was delivered with the board as installation source. The driver files
are located on CD in the directory \Driver\Win98_2k_XP.

The hardware assistant shows you the exact board type that has been found like
the MI.3020 in the example. Older boards (before june 2004) show „Spectrum
Board“ instead.
The drivers can be used directly after installation. It is not necessary to restart the
system. The installed drivers are linked in the device manager.
Below you’ll see how to examine the driver version and how to update the driver
with a newer version.

Version control
If you want to check which driver version is installed in the system this
can be easily done in the device manager. Therefore please start the
device manager from the control panel and show the properties of
the installed driver.

22

MI.20xx Manual

Software Driver Installation

Windows XP

On the property page Windows XP shows the date and the version of the installed driver.
After clicking the driver details button the detailed version information of the driver is shown.
In the case of a support question this information must be presented together with the
board’s serial number to the support team to help finding a fast solution.

Driver - Update
If a new driver version should be installed no Spectrum board is allowed to be in
use by any software. So please stop and exit all software that could access the
boards.
A new driver version is directly installed from the device manager. Therefore please
open the properties page of the driver as shown in the section before. As next step
click on the update driver button and follow the steps of the driver installation in a
similar way to the previous board and driver installation.

Please select the path where the new driver version was unzipped to. If you’ve got
the new driver version on CD please select the \Driver\Win98_2k_XP path on the
CD containing the new driver version.

The new driver version can be used directly after installation without restarting the
system. Please keep in mind to update the driver of all installed Spectrum boards.

(c) Spectrum GmbH

23

Windows NT

Software Driver Installation

Windows NT
Installation
Under Windows NT the
Spectrum driver must be installed manually. The driver is
found on CD in the directory
\Install\WinNTDrv. Please
start the „Setup.exe“ program. The installation is performed totally automatically,
simply click on the „Next“
button. After installtion the system must be rebooted once
(see picture on the right side).
The driver is install to support
one PCI/PXI or CompactPCI
device. If more boards are installed in the system the configuration of the driver has to be changed. Please see the following chapter for this
topic.

Adding boards to the Windows NT driver
The Windows NT driver
must be configured by the
Driver Configuration utility
to support more than one
board. The Driver Configuration utility is automatically installed with the driver.
The Utility can be found in
the start menu as „DrvConfig“.
To add a new card please follow these steps:
•
•
•
•
•

Increase the board number on top of the screen by pressing the right button
Change the board type from „Not Installed“ to „PCI Board“
Press the „Apply changes“ button
Press the „OK“ button
Restart the system

Driver - Update
If a new driver version should be installed no Spectrum board is allowed to be in use by any software. So please stop and exit all software
that could access the boards.
When updating a system please simply execute the setup file of the new driver version. Afterwards the system has to be rebooted. The driver
configuration is not changed.

24

MI.20xx Manual

Software Driver Installation

Linux

Linux
Overview
The Spectrum boards are delivered with drivers for linux. It is necessary to install them manually following the steps explained afterwards.
The linux drivers can be found on CD in the directory /Driver/linux. As linux is an open source operating system there are several distributions
in use world-wide that are compiled with different kernel settings. As we are not able to install and maintain hundreds of different distributions
and versions we had to focus on some common used linux distributions.
However if your distribution does not work with one of these pre-compiled kernel modules or you have a specialized kernel installed (like a
SMP kernel) you can get the linux driver sources directly from us. With this sources it’s no problem to compile and use the linux driver on your
system. Please contact your local distributor to get the sources. The Spectrum linux drivers are compatible with kernel versions 2.4 and 2.6.
On this CD you’ll find pre-compiled linux kernel modules for the following versions:
SuSE version 8.0
SuSE version 9.0
Redhat version 9.0

Kernel 2.4.18
Kernel 2.4.21
Kernel 2.4.20

directory /Driver/linux/suse80
directory /Driver/linux/suse90
directory /Driver/linux/redhat90

SuSE version 8.2
SuSE version 9.1

Kernel 2.4.20
Kernel 2.6.4

directory /Driver/linux/suse82
directory /Driver/linux/suse91

Installation
Login as root.
It is necessary to have the root rights for installing a driver.
Select the right driver from the CD.
Refer to the list shown above. If your distribution is not listed there please select the module that most closely matches your installed kernel
version. Copy the driver kernel module spc.o from the CD directory to your hard disk. Be sure to use a hard disk directory that is a accessible
by all users who should work with the board.
First time load of the driver
The linux driver is shipped as the loadable module spc.o. The driver includes all Spectrum PCI, PXI and CompactPCI boards. The boards are
recognized automatically after driver loading.Load the driver with the insmod command:
linux:~ # insmod spc.o

The insmod command may generate a warning that the driver module was compiled for another kernel version. In that case you may try to
load the driver module with the force parameter and test the board very carefully.
linux:~ # insmod -f spc.o

If the kernel module could not be loaded in your linux installation it is necessary to compile the driver directly on your system. Please contactSpectrum to get the needed source files including the compilation description.
Depending on the used linux distribution the insmod command generates a message telling the driver version and the board types and serial
numbers that have been found. If your distribution does not show this message it is possible to view them with the dmesg command:
linux:~ # dmesg
... some other stuff
spc driver version: 3.07 build 0
sp0: MI.3020 sn 01234

In the example we show you the output generated by a MI.3020. All other board types are similar to this output but showing the correct
board type.
Examine the major number of the driver
For accessing the device driver it is necessary to know the major number of the device. This number is listed in the /proc/devices list. The
device driver is called "spec" in this list. Normally this number is 254 but this depends on the device drivers that have been installed before.
linux:~ # cat /proc/devices
Character devices:
...
171 ieee1394
180 usb
188 ttyUSB
254 spec
Block devices:
1 ramdisk
2 fd
...

(c) Spectrum GmbH

25

Linux

Software Driver Installation

Installing the device
You connect a device to the driver with the mknod command. The major number is the number of the driver as shown in the last step, the
minor number is the index of the board starting with 0. This step must only be done once for the system where the boards are installed in.
The device will remain in the file structure even if the board is de-installed from the system.
The following command makes a device for the first Spectrum board the driver has found:
linux:~ # mknod /dev/spc0 c 254 0

Make sure that the users who work with the driver have full rights access for the device. Therefore you should give all persons all rights to the
device:
linux:~ # chmod a+w /dev/spc0

Now it is possible to access the board using this device.
Driver info
Information about the installed boards could be found in the /proc/spectrum file. All PCI, PXI and CompactPCI boards show the basic information found in the EEProm there. This is an example output generated by a MI.3020:
linux:~ # cat /proc/spectrum
Spectrum driver information
--------------------------Driver Version: 3.07 build 0
Board#0: MI.3020
serial number:
production month:
version:
samplerate:
installed memory:

01234
05/2004
9.6
100 MHz
16 MBytes

Automatic load of the driver
It is necessary to load the kernel driver module after each start of the system before using the boards. Therefore you may add the „insmod
spc.o“ command in one of the start-up files. Or you may load the kernel driver module manually whenever you need access to the board.

26

MI.20xx Manual

Software

Software Overview

Software
This chapter gives you an overview about the structure of the drivers and the software, where to find and how to use the examples. It detailed
shows how the drivers are included under different programming languages and where the differences are when calling the driver functions
from different programming languages.
This manual only shows the use of the standard driver API. For further information on programming drivers
for third-party software like LabVIEW, MATLAB, DASYLab or VEE an additional manual is required that is delivered with the ordered driver option.

Software Overview

The Spectrum drivers offer you a common and fast API for using all of the board hardware features. This API is nearly the same on all operating
systems. Based on this API one can write your own programs using any programming language that can access the driver API. This manual
detailed describes the driver API allowing you to write your own programs.
The optional drivers for third-party products like LabVIEW or DASYLab are also based on this API. The special functionality of these drivers
is not subject of this manual and is described on separate manuals delivered with the driver option.

First Test with SBench
After installation of the board and the drivers it can be useful to first test the board function with
a ready to run software before starting with programming. A full version of SBench 5.x is delivered with the board on CD. The program supports all actual acquisition, generator and digital I/O boards from Spectrum. Depending on the used board and the software setup, one
could use SBench as a digital storage oscilloscope, a spectrum analyser, a logic analyser or
simply as a data recording front end. Different export and import formats allow the use of
SBench together with a variety of other programs.
On the CD you’ll find an install version of SBench in the directory /Install/SBench. There’s also
a pre-installed program version on CD that can be started directly from CD without installing
to hard disk. This file can be found in the /Programs/SBench5 directory. Also on CD is a program description that shows in detail how SBench works and what settings have to be done to
use SBench in one of the different modes. The manual is found in the path /Internet/english/
swmanuals/SBench.
The current version of SBench can be down loaded free of charge directly from the Spectrum
website http://www.spectrum-instrumentation.com. Please go to the download section and get the latest version there.
SBench is designed to run under Windows 98, Windows ME, Windows NT, Windows 2000 and Windows XP.
It does not run under Linux. At the moment there is no graphical ready-to-run software for Linux available.
Please use the driver examples to examine whether the board is correctly installed under Linux.

(c) Spectrum GmbH

27

C/C++ Driver Interface

Software

C/C++ Driver Interface
C/C++ is the main programming language for which the drivers have been build up. Therefore the interface to C/C++ is the best match. All
the small examples of the manual showing different parts of the hardware programming are done with C.

Header files
The basic task before using the driver is to include the header files that are delivered on CD together with the board. The header files are
found in the directory /Driver/header_c. Please don’t change them in any way because they are updated with each new driver version to
include the new registers and new functionality.
dlltyp.h

Includes the platform specific definitions for data types and function declarations. All data types are based on this definitions. The use of this typ definition file
allows the use of examples and programs on different platforms without changes to the program source.
Defines all registers and commands which are used in the Spectrum driver for the different boards. The registers a board uses are described in the board specific part of the documentation.
Defines the functions of the driver. All definitions are taken from the file dlltyp.h. The functions itself are described below.
Lists all and describes all error codes that can be given back by any of the driver functions. The error codes and their meaning are described in detail in the
appendix of this manul.
Only there for backward compatibility with older program versions. Please use spcerr.h instead.

regs.h
spectrum.h
spcerr.h
errors.h

Example for including the header files:
// ----#include
#include
#include
#include

driver includes ----"dlltyp.h"
"spectrum.h"
"spcerr.h"
"regs.h"

Microsoft Visual C++
Include Driver
The driver files can be easily included in Microsoft C++ by simply using the library file that is delivered together with the drivers. The library
file can be found on the CD in the path /Driver/Win98_2k_XP. Please include the library file Spectrum.lib in your Visual C++ project. All
functions described below are now available in your program.
Examples
Examples can be found on CD in the path /Examples/vc. There is one subdirectory for each board family. You’ll find board specific examples
for that family there. The examples are bus type independent. As a result that means that the MI30xx directory contains examples for the
MI.30xx, the MC.30xx and the MX.30xx families. The example directories contain a running project file for Microsoft Visual C++ that can
be directly loaded and compiled.
There are also some more board independent examples in the directory MIxxxx. These examples show different aspects of the boards like
programming options or synchronization and have to be combined with one of the board specific example.

Linux Gnu C
Include Driver
The interface of the linux drivers is a little bit different from the windows interface. To make the access easier and to have more similar examples we added an include file that re maps the standard driver functions to the linux specific functions. This include file is found in the path /
Examples/linux/spcioctl.inc. All examples are based on this file.
Example for including Linux driver:
// ----#include
#include
#include

driver includes ----"dlltyp.h"
"regs.h"
"errors.h"

// ----- include the easy ioctl commands from the driver ----#include "../spcioctl.inc"

Examples
Examples can be found on CD in the path /Examples/linux. There is one subdirectory for each board family. You’ll find board specific examples for that family there. The examples are bus type independent. As a result that means that the MI30xx directory contains examples for
the MI.30xx, the MC.30xx and the MX.30xx families. The examples are simple one file programs and can be compiled using the Gnu C
compiler gcc. It’s not necessary to use a makefile for them.

28

MI.20xx Manual

Software

C/C++ Driver Interface

Other Windows C/C++ compilers
Include Driver
To access the driver, the driver functions must be loaded from the driver dll. This can be easily done by standard windows functions. There
is one example in the directory /Examples/other that shows the process. After loading the functions from the dll one can proceed with the
examples that are given for Microsoft Visual C++.
Example of function loading:
// definition of external function that has to be loaded
typedef int16 (SPCINITPCIBOARDS) (int16* pnCount, int16*
typedef int16 (SPCSETPARAM)
(int16 nNr, int32 lReg,
typedef int16 (SPCGETPARAM)
(int16 nNr, int32 lReg,
...
SPCINITPCIBOARDS* pfnSpcInitPCIBoards;
SPCSETPARAM*
pfnSpcSetParam;
SPCGETPARAM*
pfnSpcGetParam;
...
// ----- Search for dll ----hDLL = LoadLibrary ("spectrum.dll");

from DLL
pnPCIVersion);
int32 lValue);
int32* plValue);

// ----- Load functions from DLL ----pfnSpcInitPCIBoards = (SPCINITPCIBOARDS*) GetProcAddress (hDLL, "SpcInitPCIBoards");
pfnSpcSetParam =
(SPCSETPARAM*)
GetProcAddress (hDLL, "SpcSetParam");
pfnSpcGetParam =
(SPCGETPARAM*)
GetProcAddress (hDLL, "SpcGetParam");

National Instruments LabWindows/CVI
Include Drivers
To use the Spectrum driver under LabWindows/CVI it is necessary to first load the functions from the driver dll. This is more or less similar to
the above shown process with the only difference that LabWindows/CVI uses it’s own library handling functions instead of the windows
standard functions.
Example of function loding under LabWindows/CVI:
// ----- load the driver entries from the DLL ----DriverId = LoadExternalModule ("spectrum.lib");
// ----- Load functions from DLL ----SpcInitPCIBoards = (SPCINITPCIBOARDS*) GetExternalModuleAddr (DriverId, "SpcInitPCIBoards", &Status);
SpcSetParam =
(SPCSETPARAM*)
GetExternalModuleAddr (DriverId, "SpcSetParam", &Status);
SpcGetParam =
(SPCGETPARAM*)
GetExternalModuleAddr (DriverId, "SpcGetParam", &Status);

Examples
Examples for LabWindows/CVI can be found on CD in the directory /Examples/cvi. Theses examples show mainly how to include the driver
in a LabWindows/CVI environment and don’t use any special functions of the boards. The examples have to be merged with the standard
windows examples described under Visual C++.

Driver functions
The driver contains five functions to access the hardware.
Function SpcInitPCIBoard
This function initializes all installed PCI, PXI and CompactPCI boards. The boards are recognized automatically. All installation parameters
are read out from the hardware and stored in the driver. The number of PCI boards will be given back in the value Count and the version of
the PCI bus itself will be given back in the value PCIVersion.
Function SpcInitPCIBoards:
int16 SpcInitPCIBoards (int16* count, int16* PCIVersion);

Under Linux this function is not available. Instead one must open and close the driver with the standard file
functions open and close. The functionality behind this function is the same as the SpcInitPCIBoards function.

Using the Driver under Linux:
hDrv = open ("/dev/spc0", O_RDWR);
...
close (hDrv);

(c) Spectrum GmbH

29

C/C++ Driver Interface

Software

Function SpcSetParam
All hardware settings are based on software registers that can be set by the function SpcSetParam. This function sets a register to a defined
value or executes a command. The board must first be initialized. The available software registers for the driver are listed in the board specific
part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be changed and the value
„value“ is the new value that should be set to this software register. The function will return an error value in case of malfunction.
Function SpcSetParam
int16 SpcSetParam (int16 nr, int32 reg, int32 value);

Under Linux the value „nr“ must contain the handle that was retrieved by the open function for that specific
board. The values is then not of the type „int16“ but of the type „handle“.

Function SpcGetParam
The function SpcGetParam reads out software registers or status information. The board must first be initialized. The available software registers for the driver are listed in the board specific part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be read out and the value
„value“ is a pointer to a value that should contain the read parameter after function call. The function will return an error value in case of
malfunction.
Function SpcGetParam
int16 SpcGetParam (int16 nr, int32 reg, int32* value);

Under Linux the value „nr“ must contain the handle that was given back by the open function of that specific
board. The values is then not of the type „int16“ but of the type „handle“.

Function SpcSetData
Writes data to the board for a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be written. „data“
is a pointer to the array holding the data. The function will return an error value in case of malfunction.

This function is only available on generator or i/o boards. The function is not available on acquisition boards.

Function SpcSetData (Windows)
int16 SpcSetData (int16 nr, int16 ch, int32 start, int32 len, dataptr data);

Under Linux the additional parameter nBytesPerSample must be used for this function. For all boards with 8 bit resolution the parameter is
„1“, for all boards with 12, 14 or 16 bit resolution this parameter has to be „2“. Under Linux the value „hDrv“ must contain the handle that
was given back by the open function of that specific board.
Function SpcSetData (Linux)
int32 SpcSetData (int hDrv, int32 lCh, int32 lStart, int32 lLen, int16 nBytesPerSample, dataptr pvData)

Function SpcGetData
Reads data from the board from a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be read. „data“
is a pointer to the array that should hold the data. The function will return an error value in case of malfunction.

This function is only available on acquisition or i/o boards. The function is not available on generator boards.

Function SpcGetData
int16 SpcGetData (int16 nr, int16 ch, int32 start, int32 len, dataptr data);

30

MI.20xx Manual

Software

C/C++ Driver Interface

Under Linux the additional parameter nBytesPerSample must be used for this function. For all boards with 8 bit resolution the parameter is
„1“, for all boards with 12, 14 or 16 bit resolution this parameter has to be „2“. Under Linux the value „hDrv“ must contain the handle that
was given back by the open function of that specific board.
Function SpcGetData (Linux)
int32 SpcGetData (int hDrv, int32 lCh, int32 lStart, int32 lLen, int16 nBytesPerSample, dataptr pvData)

(c) Spectrum GmbH

31

Delphi (Pascal) Programming Interface

Software

Delphi (Pascal) Programming Interface
Type definition
All Spectrum driver functions are using pre-defined variable types to cover different operating systems and to use the same driver interface
for all programming languages. Under Delphi it is necessary to define these types once. This is also shown in the examples delivered on CD.
Delphi type definition:
type
int8
pint8
int16
pint16
int32
pint32
data
dataptr

=
=
=
=
=
=
=
=

shortint;
^shortint;
smallint;
^smallint;
longint;
^longint;
array[1..MEMSIZE] of smallint;
^data;

In the example shown above the size of data is defined to „smallint“. This definition is only valid for boards
that have a sample resolution of 12, 14 or 16 bit. On 8 bit boards this has to be a „shortint“ type.

Include Driver
To include the driver functions into delphi it is necessary to first add them to the implementation section of the program file. There the name
of the function and the location in the dll is defined:
Driver implementation:
function
function
function
function
function

SpcSetData (nr,ch:int16; start,len:int32; data:dataptr): int16; cdecl; external 'SPECTRUM.DLL';
SpcGetData (nr,ch:int16; start,len:int32; data:dataptr): int16; cdecl; external 'SPECTRUM.DLL';
SpcSetParam (nr:int16; reg,value: int32): int16;
cdecl; external 'SPECTRUM.DLL';
SpcGetParam (nr:int16; reg:int32; value:pint32): int16;
cdecl; external 'SPECTRUM.DLL';
SpcInitPCIBoards (count,PCIVersion: pint16): int16;
cdecl; external 'SPECTRUM.DLL';

Examples
Examples for Delphi can be found on CD in the directory /Examples/delphi. There is one subdirectory for each board family. You’ll find
board specific examples for that family there. The examples are bus type independent. As a result that means that the MI30xx directory contains examples for the MI.30xx, the MC.30xx and the MX.30xx families. The example directories contain a running project file for Borland
Delphi that can be directly loaded and compiled.

Driver functions
The driver contains five functions to access the hardware.
Function SpcInitPCIBoard
This function initializes all installed PCI, PXI and CompactPCI boards. The boards are recognized automatically. All installation parameters
are read out from the hardware and stored in the driver. The number of PCI boards will be given back in the value Count and the version of
the PCI bus itself will be given back in the value PCIVersion.
Function SpcSetParam
All hardware settings are based on software registers that can be set by the function SpcSetParam. This function sets a register to a defined
value or executes a command. The board must first be initialized. The available software registers for the driver are listed in the board specific
part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be changed and the value
„value“ is the new value that should be set to this software register. The function will return an error value in case of malfunction.
Function SpcGetParam
The function SpcGetParam reads out software registers or status information. The board must first be initialized. The available software registers for the driver are listed in the board specific part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be read out and the value
„value“ is a pointer to a value that should contain the read parameter after function call. The function will return an error value in case of
malfunction.
Function SpcSetData
Writes data to the board for a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be written. „data“
is a pointer to the array holding the data. The function will return an error value in case of malfunction.
32

MI.20xx Manual

Software

Delphi (Pascal) Programming Interface

This function is only available on generator or i/o boards. The function is not available on acquisition boards.

Function SpcGetData
Reads data from the board from a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be read. „data“
is a pointer to the array that should hold the data. The function will return an error value in case of malfunction.

This function is only available on acquisition or i/o boards. The function is not available on generator boards.

(c) Spectrum GmbH

33

Visual Basic Programming Interface

Software

Visual Basic Programming Interface
The Spectrum boards can be used together with Microsoft Visual Basic as well as with Microsoft Visual Basic for Applications. This allows
per example the direct access of the hardware from within Microsoft Excel. The interface between the programming language and the driver
is the same for both.

Include Driver
To include the driver functions into Basic it is necessary to first add them to the module definition section of the program file. There the name
of the function and the location in the dll is defined:
Module definition:
Public Declare Function SpcInitPCIBoards Lib "SpcStdNT.dll" Alias "_SpcInitPCIBoards@8" (ByRef Count As Integer,
ByRef PCIVersion As Integer) As Integer
Public Declare Function SpcInitBoard Lib "SpcStdNT.dll" Alias "_SpcInitBoard@8" (ByVal Nr As Integer, ByVal Typ
As Integer) As Integer
Public Declare Function SpcGetParam Lib "SpcStdNT.dll" Alias "_SpcGetParam@12" (ByVal BrdNr As Integer, ByVal
RegNr As Long, ByRef Value As Long) As Integer
Public Declare Function SpcSetParam Lib "SpcStdNT.dll" Alias "_SpcSetParam@12" (ByVal BrdNr As Integer, ByVal
RegNr As Long, ByVal Value As Long) As Integer
Public Declare Function SpcGetData8 Lib "SpcStdNT.dll" Alias "_SpcGetData@20" (ByVal BrdNr As Integer, ByVal
Channel As Integer, ByVal Start As Long, ByVal Length As Long, ByRef data As Byte) As Integer
Public Declare Function SpcSetData8 Lib "SpcStdNT.dll" Alias "_SpcSetData@20" (ByVal BrdNr As Integer, ByVal
Channel As Integer, ByVal Start As Long, ByVal Length As Long, ByRef data As Byte) As Integer
Public Declare Function SpcGetData16 Lib "SpcStdNT.dll" Alias "_SpcGetData@20" (ByVal BrdNr As Integer, ByVal
Channel As Integer, ByVal Start As Long, ByVal Length As Long, ByRef data As Integer) As Integer
Public Declare Function SpcSetData16 Lib "SpcStdNT.dll" Alias "_SpcSetData@20" (ByVal BrdNr As Integer, ByVal
Channel As Integer, ByVal Start As Long, ByVal Length As Long, ByRef data As Integer) As Integer

The module definition is already done for the examples and can be found in the Visual Basic examples directory. Please simply use the file
declnt.bas.

Visual Basic Examples
Examples for Visual Basic can be found on CD in the directory /Examples/vb. There is one subdirectory for each board family. You’ll find
board specific examples for that family there. The examples are bus type independent. As a result that means that the MI30xx directory contains examples for the MI.30xx, the MC.30xx and the MX.30xx families. The example directories contain a running project file for Visual
Basic that can be directly loaded.

VBA for Excel Examples
Examples for VBA for Excel can be found on CD in the directory /Examples/excel. The example here simply show the access of the driver
and make a very small demo acquisition. It is necessary to combine these examples with the Visual Basic examples to have full board functionality.

Driver functions
The driver contains five functions to access the hardware.
Function SpcInitPCIBoard
This function initializes all installed PCI, PXI and CompactPCI boards. The boards are recognized automatically. All installation parameters
are read out from the hardware and stored in the driver. The number of PCI boards will be given back in the value Count and the version of
the PCI bus itself will be given back in the value PCIVersion.
Function SpcInitPCIBoard:
Function SpcInitPCIBoards (ByRef Count As Integer, ByRef PCIVersion As Integer) As Integer

Function SpcSetParam
All hardware settings are based on software registers that can be set by the function SpcSetParam. This function sets a register to a defined
value or executes a command. The board must first be initialized. The available software registers for the driver are listed in the board specific
part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be changed and the value
„value“ is the new value that should be set to this software register. The function will return an error value in case of malfunction.
Function SpcSetParam:
Function SpcSetParam (ByVal BrdNr As Integer, ByVal RegNr As Long, ByVal Value As Long) As Integer

34

MI.20xx Manual

Software

Visual Basic Programming Interface

Function SpcGetParam
The function SpcGetParam reads out software registers or status information. The board must first be initialized. The available software registers for the driver are listed in the board specific part of the documentation below.
The value „nr“ contains the index of the board that you want to access, the value „reg“ is the register that has to be read out and the value
„value“ is a pointer to a value that should contain the read parameter after function call. The function will return an error value in case of
malfunction.
Function SpcGetParam:
Function SpcGetParam (ByVal BrdNr As Integer, ByVal RegNr As Long, ByRef Value As Long) As Integer

Function SpcSetData
Writes data to the board for a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be written. „data“
is a pointer to the array holding the data. The function will return an error value in case of malfunction.
Function SpcSetData:
Function SpcSetData8 (ByVal BrdNr As Integer, ByVal Channel As Integer, ByVal Start As Long, ByVal Length As
Long, ByRef data As Byte) As Integer
Function SpcSetData16 (ByVal BrdNr As Integer, ByVal Channel As Integer, ByVal Start As Long, ByVal Length As
Long, ByRef data As Integer) As Integer

It is necessary to select the function with the matching data width from the above mentioned data write functions. Use the SpcSetData8 function for boards with 8 bit resolution and use the SpcSetData16 function for
boards with 12, 14 and 16 bit resolution.

This function is only available on generator or i/o boards. The function is not available on acquisition boards.

Function SpcGetData
Reads data from the board from a specific memory channel. The board must first be initialized. The value „nr“ contains the index of the board
that you want to access, the „ch“ parameter contains the memory channel. „start“ and „len“ define the position of data to be read. „data“
is a pointer to the array that should hold the data. The function will return an error value in case of malfunction.
Function SpcGetData:
Function SpcGetData8 (ByVal BrdNr As Integer, ByVal Channel As Integer, ByVal Start As Long, ByVal Length As
Long, ByRef data As Byte) As Integer
Function SpcGetData16 (ByVal BrdNr As Integer, ByVal Channel As Integer, ByVal Start As Long, ByVal Length As
Long, ByRef data As Integer) As Integer

It is necessary to select the function with the matching data width from the above mentioned data read functions. Use the SpcGetData8 function for boards with 8 bit resolution and use the SpcGetData16 function for
boards with 12, 14 and 16 bit resolution.

This function is only available on acquisition or i/o boards. The function is not available on generator boards.

(c) Spectrum GmbH

35

Overview

Programming the Board

Programming the Board
Overview
The following chapters show you in detail how to program the different aspects of the board. For every topic there’s a small example. For
the examples we focussed on Visual C++. However as shown in the last chapter the differences in programming the board under different
programming languages are marginal. This manual describes the programming of the whole hardware family. Some of the topics are similar
for all board versions. But some differ a little bit from type to type. Please check the given tables for these topics and examine carefully which
settings are valid for your special kind of board.

Register tables
The programming of the boards is totally software register based. All software registers are described in the following form:
The name of the software register as found in the regs.h file.
Could directly be used by C and
C++ compiler

The decimal value of the software register.
Also found in the regs.h file. This value must
be used with all programs or compilers that
cannot use the header file directly.

Describes whether
the register can be
read (r) and/or written (w).

Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register of the board.

SPC_START

10

Starts the board with the current register settings.

SPC_STOP

20

Stops the board manually.

Any constants that can be used to
program the register directly are
shown inserted beneath the register
table.

The decimal value of the constant. Also
found in the regs.h file. This value must be
used with all programs or compilers that
cannot use the header file directly.

Short description of the functionality of the register. A more detailled description is found
above or below this register.

Short description of
the use of this constant.

If no constants are given below the register table, the dedicated register is used as a switch. All such registers
are activated if written with a “1“ and deactivated if written with a “0“.

Programming examples
In this manual a lot of programming examples are used to give you an impression on how the actual mentioned registers can be set within
your own program. All of the examples are located in a seperated colored box to indicate the example and to make it easier to differ it from
the describing text.
All of the examples mentioned throughout the manual are basically written using the Visual C++ compiler for Windows. If you use Linux there
are some changes in the funtion’s parameter lists as mentioned in the relating software chapter.
To keep the examples as compatible as possible for users of both operational systems (Windows and Linux) all the functions that
contain either a board number (Windows) or a handle (Linux) use the common parameter name ’hDrv’. Windows users simply have
to set the parameter to the according board number (as the example below is showing), while Linux uses can easily use the handle
that is given back for the according board by the initialization function.
// Windows users must set hDrv to the according board number before.
// Assuming that there is only one Spectrum board installed you’ll
// have to set hDrv like this:
hDrv = 0;
SpcGetParam (hDrv, SPC_LASTERRORCODE,

&lErrorCode); // Any command just to show the hDrv usage

Error handling
If one action caused an error in the driver this error and the register and value where it occurs will be saved.
The driver is then locked until the error is read out using the SPC_LASTERRORCODE function. All other functions
will lead to the same errorcode unless the error is cleared by reading SPC_LASTERRORCODE.

36

MI.20xx Manual

Programming the Board

Initialization

This means as a result that it is not necessary to check each driver call for an error but to check for an error before the board is started to see
whether all settings have been valid.
By reading all the error information one can easily examine where the error occured. The following table shows all the error related registers
that can be read out.
Register

Value

Direction

Description

SPC_LASTERRORCODE

999999

r

Error code of the last error that occured. The errorcodes are found in spcerr.h. If this register is read,
the driver will be unlocked.

SPC_LASTERRORREG

999998

r

Software register that causes the error.

SPC_LASTERRORVALUE

999997

r

The value that has been written to the faulty software register.

The error codes are described in detail in the appendix. Please refer to this error description and the description of the software register to examine the cause for the error message.

Example for error checking:
SpcSetParam (hDrv, SPC_MEMSIZE, -345);
// faulty command
if (SpcSetParam (hDrv, SPC_COMMAND, SPC_START) != ERR_OK)
// try to start and check for an error
{
SpcGetParam (hDrv, SPC_LASTERRORCODE, &lErrorCode);
// read out the error information
SpcGetParam (hDrv, SPC_LASTERRORREG,
&lErrorReg);
SpcGetParam (hDrv, SPC_LASTERRORVALUE, &lErrorValue);
printf („Error %d when writing Register %d with Value %d !\n“, lErrorCode, lErrorReg, &lErrorValue);
}

This short program then would generate a printout as:
Error 101 when writing Register 10000 with Value -345 !

Initialization
Starting the automatic initialization routine
Before you can access the boards in your program, you have to initialize them first. Therefore the Spectrum function SpcInitPCIBoards is used.
If it is called, all Spectrum boards in the host system are initialized automatically. If no errors occured during the initialization, the returned
value is 0 (ERR_OK). In any other cases something has gone wrong. Please see appendix for explanations of the different error codes.
If the process of initializing the boards was successful, the function returns the total number of Spectrum boards that have been found in your
system. The third return value is the revision of the PCI Bus, the Spectrum boards are installed in.
The following example shows how to start the initialization of the board and check for errors.
// ----- Initialization of PCI Bus Boards-----------------------------------if (SpcInitPCIBoards (&nCount, &nPCIBusVersion) != ERR_OK)
return;
if (nCount == 0)
{
printf ("No Spectrum board found\n");
return;
}

PCI Register
These registers are set by the driver after the PCI initialization. The information is found in the on-board EEPROM, and can easily be read
out by your own application software. All of the following PCI registers are read only. You get access to all registers by using the Spectrum
function SpcGetParam with one of the following registers.
Register

Value

Direction

Description

SPC_PCITYP

2000

r

Type of board as listed in the table below.

One of the following values is returned, when reading this register.
Boardtype

Value hexadezimal

Value dezimal

Boardtype

Value hexadezimal

Value dezimal

TYP_MI2020

2020h

8224

TYP_MI2021

2021h

8225

TYP_MI2030

2030h

8240

TYP_MI2031

2031h

8241

(c) Spectrum GmbH

37

Initialization

Programming the Board

Hardware version
Since all of the MI, MC and MX boards from Spectrum are modular boards, they consist of one base board and one or two (only PCI and
CompactPCI) piggy-back modules. This register SPC_PCIVERSION gives information about the revision of either the base board and the modules. Normally you do not need this information but if you have a support question, please provide the revision together with it.
Register

Value

Direction

Description

SPC_PCIVERSION

2010

r

Board revision: bit 15..8 show revision of the base card, bit 7..0 the revision of the modules

If your board has a piggy-back expansion module mounted (MC und MI series boards only) you can get the hardwareversion with the following register.
Register

Value

Direction

Description

SPC_PCIEXTVERSION

2011

r

Board’s expansion module hardware revision as integer value.

Date of production
This register informs you about the production date, which is returned as one 32 bit longword. The upper word is holding the information
about the year, while the lower byte informs about the month. The second byte (counting from below) is not used. If you only need to know
the production year of your board you have to mask the value accordingly. Normally you do not need this information, but if you have a
support question, please provide the revision within.
Register

Value

Direction

Description

SPC_PCIDATE

2020

r

Production date: year in bit 31..16, month in bit 7..0, bit 15..8 are not used

Serial number
This register holds the information about the serial number of the board. This numer is unique and should always be sent together with a
support question. Normally you use this information together with the register SPC_PCITYP to verify that multiple measurements are done with
the exact same board.
Register

Value

Direction

Description

SPC_PCISERIALNO

2030

r

Serial number of the board

Maximum possible sample rate
This register gives you the maximum possible samplerate the board can run however. The information provided here does not consider any
restrictions in the maximum speed caused by special channel settings. For detailed information about the correlation between the maximum
samplerate and the number of activated chanels please refer th the according chapter.
Register

Value

Direction

Description

SPC_PCISAMPLERATE

2100

r

Maximum samplerate in Hz as a 32 bit integer value

Installed memory
This register returns the size of the installed on-board memory in bytes as a 32 bit integer value. If you want to know the ammount of samples
you can store, you must regard the size of one sample of your Spectrum board. All 8 bit boards can store only sample per byte, while all
other boards with 12, 14 and 16 bit use two bytes to store one sample.
Register

Value

Direction

Description

SPC_PCIMEMSIZE

2110

r

Instaleld memory in bytes as a 32 bit integer value

The following example is written for a „two bytes“ per sample board (12, 14 or 16 bit board).
SpcGetParam (hDrv, SPC_PCIMEMSIZE,
&lInstMemsize);
printf ("Memory on board: %ld MBytes (%ld MSamples)\n", lInstMemsize /1024 / 1024, lInstMemsize /1024 / 1024 /2);

38

MI.20xx Manual

Programming the Board

Initialization

Installed features and options
The SPC_PCIFEATURES register informs you about the options, that are installed on the board. If you want to know about one option being
installed or not, you need to read out the 32 bit value and mask the interesting bit.
Register

Value

Direction

Description

SPC_PCIFEATURES

2120

r

PCI feature register. Holds the installed features and options as a bitfield, so the return value must be
masked with one of the masks below to get information about one certain feature.

PCIBIT_MULTI

1

Is set if the Option Multiple Recording / Multiple Replay is installed.

PCIBIT_DIGITAL

2

Is set if the Option Digital Inputs / Digital Outputs is installed.

PCIBIT_GATE

32

Is set if the Option Gated Sampling / Gated Replay is installed.

PCIBIT_SYNC

512

Is set if the Option Synchronization is installed for that certain board, regardless what kind of synchronization you
use. Boards without this option cannot be synchronized with other boards.

PCIBIT_TIMESTAMP

1024

Is set if the Option Timestamp is installed.

PCIBIT_STARHUB

2048

Is set on the board, that carrys the starhub piggy-back module. This flag is set in addition to the PCIBIT_SYNC flag
mentioned above. If on no synchronized board the starhub option is installed, the boards are synchronized with the
cascading option.

PCIBIT_XIO

8192

Is set if the Option Extra I/O is installed.

The following example demonstrates how to read out the information about one feature.
SpcGetParam (hDrv, SPC_PCIFEATURES,

&lFeatures);

if (lFeatures & PCIBIT_DIGITAL)
printf("Option digital inputs is installed on your board");

Used interrupt line
This register holds the information of the actual used interrupt line for the board. This information is sometimes more easy in geting the interrupt
line of one specific board then using the hardware setups of your operating system.
Register

Value

Direction

Description

SPC_PCIINTERRUPT

2300

r

The used interrupt line of the board.

Used type of driver
This register holds the information about the driver that is actually used to access the board. Although most users will use the boards within
a Windows system and most Windows users will use the WDM driver, it can be sometimes necessary of knowing the type of driver.
Register

Value

Direction

Description

SPC_GETDRVTYPE

1220

r

Gives information about what type of driver is actually used

DRVTYP_DOS

0

DOS driver is used

DRVTYP_LINUX

1

Linux driver is used

DRVTYP_VXD

2

Windows VXD driver is used (only Windows 95)

DRVTYP_NTLEGACY

3

Windows NT Legacy driver is used (only Windows NT)

DRVTYP_WDM

4

Windows WDM driver is used (only Windows 98/ME/2000/XP). This is the most common Windows driver.

Driver version
This register informs Windows users about the actual used driver DLL. This information can also be obtained from the device manager. Please
refer to the „Driver Installation“ chapter. Linux users will get the revision of their kernel driver instead, because linux does not use any DLL.
Register

Value

Direction

Description

SPC_GETDRVVERSION

1200

r

Gives information about the driver DLL version

Kernel Driver version
This register informs OS independent about the actual used kernel driver. Windows users can also get this information from the device manager. Plese refer to the „Driver Installation“ chapter. Linux users can get the driver version by simply accessing the following register for the
kernel driver.
Register

Value

Direction

Description

SPC_GETKERNELVERSION

1210

r

Gives information about the kernel driver version.

(c) Spectrum GmbH

39

Powerdown and reset

Programming the Board

Example program for the board initialization
The following example is only an exerpt to give you an idea on how easy it is to initialize a Spectrum board.
// ----- Initialization of PCI Bus Boards ----------------------------------if (SpcInitPCIBoards (&nCount, &nPCIBusVersion) != ERR_OK)
return;
if (nCount == 0)
{
printf ("No Spectrum board found\n");
return;
}
// ----- request and print Board type and some information -----------------SpcGetParam (hDrv, SPC_PCITYP,
&lBrdType);
SpcGetParam (hDrv, SPC_PCIMEMSIZE,
&lInstMemsize);
SpcGetParam (hDrv, SPC_PCISERIALNO,
&lSerialNumber);
// ----- print the board type depending on bus. Board number is always the lower 16 bit of type ----switch (lBrdType & TYP_SERIESMASK)
{
case TYP_MISERIES:
printf ("Board found:
MI.%x sn: %05d\n", lBrdType & 0xffff, lSerialNumber);
break;
case TYP_MCSERIES:
printf ("Board found:
break;
case TYP_MXSERIES:
printf ("Board found:
break;
}

MC.%x sn: %05d\n", lBrdType & 0xffff, lSerialNumber);

MX.%x sn: %05d\n", lBrdType & 0xffff, lSerialNumber);

printf ("Memory on board: %ld MBytes (%ld MSamples)\n", lInstMemsize /1024/1024, lInstMemsize /1024/1024 /2);
printf ("Serial Number:
%05ld\n", lSerialNumber);

Powerdown and reset
Every Spectrum board can be set to powerdown mode by software. In this mode the board is therefore consuming less power than in normal
operation mode. The amount of saved power is board dependant. Please refer to the technical data section for details. The board can be set
to normal mode again either by performing a reset as mentioned below or by starting the board as described in the according chapters later
in this manual.
If the board is set to powerdown mode or a reset is performed the data in the on-board will be no longer
valid and cannot be read out or replayed again.

Performing a board reset or powering down the board can be easily done by the related board commands mentioned in the following table.
Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register of the board.

SPC_POWERDOWN

30

Sets the board to powerdown mode. The data in the on-board memory is no longer valid and cannot be read out or
replayed again. The board can be set to normal mode again by the reset command or by starting the boards.

SPC_RESET

0

A software and hardware reset is done for the board. All settings are set to the default values. The data in the board’s
on-board memory will be no longer valid.

40

MI.20xx Manual

Analog Inputs

Channel Selection

Analog Inputs
Channel Selection
One key setting that influences all other possible settings is the channel enable register. An unique feature of the Spectrum boards is the
possibility to program the number of channels you want to use. All on-board memory can then be used by these activated channels.
This description shows you the channel enable register for the complete board family. However your specific board may have less channels
depending on the board type you purchased and did not allow you to set the maximum number of channels shown here.
Register

Value

Direction

Description

SPC_CHENABLE

11000

r/w

Sets the channel enable information for the next board run.

CHANNEL0

1

Activates channel 0

CHANNEL1

2

Activates channel 1

CHANNEL2

4

Activates channel 2

CHANNEL3

8

Activates channel 3

The channel enable register is set as a bitmap. That means one bit of the value corresponds to one channel to be activated. To activate more
than one channel the values have to be combined by a bitwise OR.
Example showing how to activate 4 channels:
SpcSetParam (hDrv, SPC_CHENABLE, CHANNEL0 | CHANNEL1 | CHANNEL2 | CHANNEL3);

The following table shows all allowed settings for the channel enable register.

Ch0
X
X
X
X

Channels to activate
Ch1
Ch2
Ch3
X
X

X
X

X

Values to program
CHANNEL0
CHANNEL0 | CHANNEL1

Value as hex
1h
3h

Value as decimal
1
3

CHANNEL0 | CHANNEL2
CHANNEL0 | CHANNEL1 | CHANNEL2 | CHANNEL3

5h
Fh

5
15

Any channel activation mask that is not shown here is not valid. If programming another channel activation
the driver automatically remaps this to the best matching activation mask. You can read out the channel enable register to see what channel activation mask the driver has set.
Reading out the channel enable register can be done directely after setting it or later like this:
SpcGetParam (hDrv, SPC_CHENABLE, &lActivatedChannels);
printf ("Activated channels are: %ld \n", lActivatedChannels);

Important note on channels selection
As some of the manuals passages are used in more than one hardware manual most of the registers and
channel settings throughout this handbook are described for the maximum number of possible channels that
are available on one board of the actual series. There can be less channels on your actual type of board or
bus-system. Please refer to the table above to get the actual number of available channels.

(c) Spectrum GmbH

41

Setting up the inputs

Analog Inputs

Setting up the inputs
Input ranges
This analog acquisition board uses separate input amplifiers and converters on each channel. This gives you the possibility to set up the desired and concerning your application best suiting input range also separately for each channel. The input ranges can easily be set by the
corresponding input registers. The table below shows the available input registers and possible ranges for your type of board.

Register

Value

Direction

Description

SPC_AMP0

30010

r/w

Defines the input range of channel0.

SPC_AMP1

30110

r/w

Defines the input range of channel1.

SPC_AMP2

30210

r/w

Defines the input range of channel2.

SPC_AMP3

30310

r/w

Defines the input range of channel3.

50

± 50 mV calibrated input range for the appropriate channel.

100

± 100 mV calibrated input range for the appropriate channel.

200

± 200 mV calibrated input range for the appropriate channel.

500

± 500 mV calibrated input range for the appropriate channel.

1000

± 1 V calibrated input range for the appropriate channel.

2000

± 2 V calibrated input range for the appropriate channel.

5000

± 5 V calibrated input range for the appropriate channel.

The different input ranges are set with the help of relais. These relais need a settling time if they are changed, so that the relais are fully set
and didn’t influence the signal when the board is started. The following table shows the related register to adjust the wait time. Any changes
of the wait time below the default value should only be done after detailed tests of the boards behaviour. Setting lower values may be possible
or may not be possible depending on the application that is done.
Register

Value

Direction

Description

SPC_RELAISWAITTIME

200700

r/w

Wait time in ms for relais settling before the start of the board. Default value is 200 ms.

If you want to know, how many different input ranges are available on the actual board per channel, you can easily read that information
by using the read-only register shown in the table below.
Register

Value

Direction

Description

SPC_READIRCOUNT

3000

r

Informs about the numer of the board’s calibrated input ranges.

Additionally cou can read out the minimum and the maximum value of each input range as shown in the table below. The number of input
ranges is read out with the above shown register.
Register

Value

Direction

Description

SPC_READRANGEMIN0

4000

r

Gives back the minimum value of input range 0 in mV.

SPC_READRANGEMIN1

4001

r

Gives back the minimum value of input range 1 in mV.

SPC_READRANGEMIN2

4002

r

Gives back the minimum value of input range 2 in mV.

...

...

r

...

SPC_READRANGEMAX0

4100

r

Gives back the maximum value of input range 0 in mV.

SPC_READRANGEMAX1

4101

r

Gives back the maximum value of input range 1 in mV.

SPC_READRANGEMAX2

4102

r

Gives back the maximum value of input range 2 in mV.

...

...

r

...

The following example reads out the number of available input ranges and reads and prints the minimum and maximum value of all input
ranges.
SpcGetParam (hDrv, READIRCOUNT,
&lNumberOfRanges);
for (i = 0; i < lNumberOfRanges; i++)
{
SpcGetParam (hDrv, SPC_READRANGEMIN0 + i, &lMinimumInputRage);
SpcGetParam (hDrv, SPC_READRANGEMAX0 + i, &lMaximumInputRange);
printf („Range %d: %d mV to %d mV\n“, i, lMinimumInputRange, lMaximumInputRange);
}

42

MI.20xx Manual

Analog Inputs

Setting up the inputs

Input offset
In most cases the external signals will not be symmetrically related to ground. If you want to acquire such asymmetrical signals, it is possible to use the smallest input range that matches
the biggest absolute signal amplitude without exceeding the
range.
The figure at the right shows this possibility. But in this example you would leave half of the possible resolution unused.
It is much more efficient if you shift the signal on-board to be
as symmetrical as possible and to acquire it within the best
possible range.
This results in a much better use of the converters resolution.
On all acquisition boards from Spectrum you have the possibility to adjust the input offset separately for each channel.

The example in the right figure shows signals with a
range of ±1.0 V that have offsets up to ±1.0 V. So related to the desired input range these signals have offsets
of ±100 %.
For compensating such offsets you can use the offset register for each channel separately. If you want to compensate the +100 % offset of the outer left signal, you would
have to set the offset to -100 % to compensate it.
As the offset levels are relatively to the related input
range, you have to calculate and set your offset again
when changing the input’s range.
The table below shows the offset registers and the possible offset ranges for your specific type of board

Register

Value

Direction

Description

Offset range

SPC_OFFS0

30000

r/w

Defines the input’s offset and therfore shifts the input of channel0.

± 400 % in steps of 1 %

SPC_OFFS1

30100

r/w

Defines the input’s offset and therfore shifts the input of channel1.

± 400 % in steps of 1 %

SPC_OFFS2

30200

r/w

Defines the input’s offset and therfore shifts the input of channel2.

± 400 % in steps of 1 %

SPC_OFFS3

30300

r/w

Defines the input’s offset and therfore shifts the input of channel3.

± 400 % in steps of 1 %

When writing a program that should run with different board families it is useful to just read-out the possible offset than can be programmed.
You can use the following read only register. It will give you the maximum relative offset in percentage as an interger value.
Register

Value

Direction

Description

SPC_READMAXOFFSET

3100

r

Reads out the maximum offset that can be used to compensate an signal offset.

To give you an example how the registers of the input range and the input offset are to be used, the following example shows a setup to
match all of the four signals in the second input offset figure to match the desired input range. Therefore every one of the four channels is set
to the input range of ± 1.0 V. After that the four offset settings are set exactely as the offsets to be compensated, but with the the opposite
sign. The result is, that all four channels match perfectely to the choosen input range.
SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam

(hDrv,
(hDrv,
(hDrv,
(hDrv,

SPC_AMP0
SPC_AMP1
SPC_AMP2
SPC_AMP3

,
,
,
,

SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam

(hDrv,
(hDrv,
(hDrv,
(hDrv,

SPC_OFFS0,
SPC_OFFS1,
SPC_OFFS2,
SPC_OFFS3,

1000);
1000);
1000);
1000);

//
//
//
//

Set
Set
Set
Set

up
up
up
up

channel0
channel1
channel2
channel3

to
to
to
to

the
the
the
the

range
range
range
range

of
of
of
of

±
±
±
±

1.0
1.0
1.0
1.0

V
V
V
V

-100); // Set the input offset to get the signal symmetrically to 0.0 V
-50);
50);
100);

(c) Spectrum GmbH

43

Setting up the inputs

Analog Inputs

Input termination
All inputs of Spectrum’s analog boards can be terminated separately with 50 Ohm by software programming. If you do so, please make sure
that your signal source is able to deliver the higher output currents. If no termination is used, the inputs have an impedance of 1 Megaohm.
The following table shows the corresponding register to set the input termination.

Register

Value

Direction

Description

SPC_50OHM0

30030

r/w

A „1“ sets the 50 ohm termination for channel0. A „0“ sets the termination to1 MOhm.

SPC_50OHM1

30130

r/w

A „1“ sets the 50 ohm termination for channel1. A „0“ sets the termination to1 MOhm.

SPC_50OHM2

30230

r/w

A „1“ sets the 50 ohm termination for channel2. A „0“ sets the termination to1 MOhm.

SPC_50OHM3

30330

r/w

A „1“ sets the 50 ohm termination for channel3. A „0“ sets the termination to1 MOhm.

Automatical adjustment of the offset settings
All of the channels are calibrated in factory before the board is shipped. These settings are stored in the on-board EEProm under the default
settings. If you have asymmetrical signals, you can adjust the offset easily with the corresponding registers of the inputs as shown before.
To start the automatic offset adjustment, simply write the register, mentioned in the following table. Because the adjustment of all the channels
in all different input ranges can take up some time, it can be useful to adjust only the current input range to safe time.
Before you start an automatic offset adjustment make sure, that no signal is connected to any input. Leave
all the input connectors open and then start the adjustment. If you adjust all ranges, this can take up some
time. All the internal settings of the driver are changed, while the automatic offset compensation is in
progress.
Register

Value

Direction

Description

SPC_ADJ_AUTOADJ

50020

w

Performs the automatic offset compensation in the driver either for all input ranges or only the actual.

ADJ_ALL

0

Automatic offset adjustment for all input ranges.

ADJ_CURRENT

1

Automatic offset adjustment only for the current chosen input range.

As all settings are temporarily stored in the driver, the automatically adjustment will only affect these values. After exiting your program, all
adjustments will be lost. In some applications it can be nevertheless necessary to adjust the boards offset settings permanently. To give you
a possibility to save your own settings, every Spectrum board has at minimum one set of user settings that can be saved within the on-board
EEPROM. The default settings of the offset and gain values are read-only and cannot be written to the EEProm by the user.
You can easily either save adjustment settings to the EEPROM with SPC_ADJ_SAVE or recall them with SPC_ADJ_LOAD. These two registers
are shown in the table below. The values for these EEPROM access registers are the sets that can be stored within the EEPROM. The amount
of sets available for storing user offset settings depends on the type of board you use. The table below shows all the EEPROM sets, that are
available for your board.

Register

Value

Direction

Description

SPC_ADJ_LOAD

50000

w

Loads the specified set of settings from the EEPROM. The default settings are automatically loaded,
when the driver is started.

r

Reads out, what kind of settings have been loaded last.

SPC_ADJ_SAVE

50010

w

Stores the actual settings to the specified set in the EEPROM. T

r

Reads out, what kind of settings have been saved last.

ADJ_DEFAULT

0

Default settings can be loaded only. These settings cannot be saved by the user.

ADJ_USER0

1

User settings 0. This is a valid set for storing user offset settings to.

If you want to make an offset adjustment on all the channels and store the data to the ADJ_USER0 set of the EEPROM you can do this the
way, the following example shows.
SpcSetParam (hDrv, SPC_ADJ_AUTOADJ,
SpcSetParam (hDrv, SPC_ADJ_SAVE
,

ADJ_ALL ); // Activate offset adjustment on all channels
ADJ_USER0); // and store values to USER0 set in the EEPROM

To work with these settings instead with the default ones at for example another day, you need to restore your user settings with the help pf
the SPC_ADJ_LOAD register as the following example shows.
SpcSetParam (hDrv, SPC_ADJ_LOAD

44

,

ADJ_USER0); // and load values to USER0 set in the EEPROM

MI.20xx Manual

Standard acquisition modes

General Information

Standard acquisition modes
General Information
The standard mode is the easiest and mostly used mode to acquire analog data with a Spectrum A/D board. In standard recording mode
the board is working totally independant from the host system (in most cases a standard PC), after the board setup is done. The advantage
of the Spectrum boards is that regardless to the system usage the board will sample with equidistant time intervals.
The sampled and converted data is stored in the onboard memory and is held there for being read out after the acquisition. This mode allows
sampling at very high conversion rates without the need to transfer the data into the memory of the host system at high speed.
After the recording is done, the data can be read out by the user and is transfered via the PCI bus into PC memory.
This standard recording mode is the most common mode for all analog acquisition and oscilloscope boards. The data is written to a
programmed amount of the onboard memory (memsize). That part
of memory is used as a ringbuffer, and recording is done continuously until a triggerevent is detected. After the trigger event, a
certain programmable amount of data is recorded (posttrigger) and
then the recording finishes. Due to the continuously ringbuffer recording, there are also samples prior to the triggerevent in the memory
(pretrigger).
When the board is started the pretrigger is filled up with data first. While doing this the board’s trigger detection is not armed. If you use a huge pretrigger size and a slow sample rate it can take up some time after
starting the board before a trigger event will be detected.

Programming
Memory, Pre- and Posttrigger
At first you have to define, how many samples are to be recorded at all and how many of them should be acquired after the triggerevent has
been detected.
Register

Value

Direction

Description

SPC_MEMSIZE

10000

r/w

Sets the memory size in samples per channel.

SPC_POSTTRIGGER

10100

r/w

Sets the number of samples to be recorded after the trigger event has been detected.

You can access these settings by the registers SPC_MEMSIZE, which sets the total amount of data that is recorded, and the register
SPC_POSTTRIGGER, that defines the number of samples to be recorded after the triggerevent has been detected. The size of the pretrigger
results on the simple formula:
pretrigger = memsize - posttrigger
The maximum memsize that can be use for recording is of course limited by the installed amount of memory and by the number of channels
to be recorded. The following table gives you an overview on the maximum memsize in relation to the installed memory.

ch2

ch3

2031

ch1

2030

x
x
x
x

2021

ch0

2020

Maximum memsize

x

1/1
1/2.
n.a.
n.a.

1/1
1/2
1/2
1/4

1/1
1/2
n.a.
n.a.

1/1
1/2
1/2
1/4

x
x

x
x

How to read this table: If you have installed the standard amount of 16 MSample on your 2021 board and you want to record all four
channels, you have a total maximum memory of 16 MSample * 1/4 = 4 MSample per channel for your data.
The maximum settings for the post counter are limited by the hardware, because the post counter has a limited range for counting. The settings
depend on the number of activated channels, as the table below is showing.

ch2

ch3

2031

ch1

2030

x
x
x
x

2021

ch0

2020

Maximum posttrigger in MSamples

x

256
128
n.a.
n.a.

256
128
256
128

256
128
n.a.
n.a.

256
128
256
128

x
x

x
x

The amount of memory that can be either set for the used memsize and postcounter values can only be set by certain steps. These steps are
results of the internal memory organization. For this reason these steps also define the minimum size for the data memory and the postcounter.
(c) Spectrum GmbH

45

Programming

Standard acquisition modes

The values depend on the number of activated channels and on the type of board being used. The minimum stepsizes for setting up the memsize and the postcounter are shown in the table below.

ch2

ch3

2031

ch1

2030

x
x
x
x

2021

ch0

2020

Minimum and stepsize of memsize and posttrigger in samples

x

64
32
n.a.
n.a.

64
32
64
32

64
32
n.a.
n.a.

64
32
64
32

x
x

x
x

Starting without interrupt (classic mode)
Command register
Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register of the board.

SPC_START

10

Starts the board with the current register settings.

SPC_STOP

20

Stops the board manually.

In this mode the board is started by writing the SPC_START value to the command register. All settings like for example the size of memory
and postcounter, the number of activated channels and the trigger settings must have been programmed before. If the start command has
been given, the setup data is transferred to the board and the board will start.
If your board has relays to switch between different settings a programmed time will be waited to prevent having the influences of the relays
settling time in the signal. For additional information please first see the chapter about the relay settling time. You can stop the board at any
time with the command SPC_STOP. This command will stop immediately.
Once the board has been started, it is running totally independent from the host system. Your program has full CPU time to do any calculations
or display. The status register shown in the table below shows the current status of the board. The most simple programming loop is simply
waiting for the status SPC_READY. This status shows that the board has stopped automatically.
The read only status register can be read out at any time, but it is mostly used for polling on the board’s status after the board has been
started. However polling the status will need CPU time.
Status register
Register

Value

Direction

Description

SPC_STATUS

10

r

Status register, of the board.

0

Indicates that the board has been started and is waiting for a triggerevent.

SPC_RUN
SPC_TRIGGER

10

Indicates that the board is running and a triggerevent has been detected.

SPC_READY

20

Indicates, that the board has stopped.

The following shortened excerpt of a sample program gives you an example of how to start the board in classic mode and how to poll for
the SPC_READY flag. It is assumed that all board setup has been done before.
// ----- start the board ----nErr = SpcSetParam (hDrv, SPC_COMMAND,

SPC_START);

// Here you can check for driver errors as mentioned in the relating chapter
// ----- Wait for Status Ready (polling for SPC_READY in a loop) ----do
{
SpcGetParam (hDrv, SPC_STATUS, &lStatus);
}
while (lStatus != SPC_READY);
printf ("Board has stopped\n");

Starting with interrupt driven mode
In contrast to the classic mode, the interrupt mode has no need for polling for the board’s status. Starting your board in the interrupt driven
mode does in the main not differ from the classic mode. But there has to be done some additional programming to prevent the program from
hanging. The SPC_STARTANDWAIT command doesn’t return until the board has stopped. Big advantage of this mode is that it doesn’t waste
any CPU time for polling. The driver is just waiting for an interrupt and the System has full CPU time for other jobs. To benefit from this mode
it is necessary to set up a program with at least two different tasks: One for starting the board and to be blocked waiting for an interrupt. The
other one to make any kind of calculations or display activities.

46

MI.20xx Manual

Standard acquisition modes

Programming

Command register
Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register, of the board.

SPC_STARTANDWAIT

11

Starts the board with the current register settings in the interrupt driven mode.

SPC_STOP

20

Stops the board manually.

If the board is started in the interrupt mode the task calling the start function will not return until the board
has finished. If no trigger event is found or the external clock is not present, this function will wait until the
program is terminated from the taskmanager (Windows) or from another console (Linux).
To prevent the program from this deadlock, a second task must be used which can send the SPC_STOP signal to stop the board. Another
possibility, that does not require the need of a second task is to define a timeout value.
Register

Value

Direction

Description

SPC_TIMEOUT

295130

r/w

Defines a time in ms after which the function SPC_STARTANDWAIT terminates itself.

This is the easiest and safest way to use the interrupt driven mode. If the board started in the interrupts mode it definitely will not return until
either the recording has finished or the timeout time has expired. In that case the function will return with an error code. See the appendix
for details.
The following excerpt of a sample program gives you an example of how to start the board in the interrupt driven mode. It is assumed that
all board setup has been done before.
SpcSetParam (hDrv, SPC_TIMEOUT, 1000);
nErr = SpcSetParam (hDrv, SPC_COMMAND, SPC_STARTANDWAIT);

// Define the timeout to 1000 ms = 1 second
// Starts the board in the interrupt driven mode

if (nErr == ERR_TIMEOUT)
printf ("No trigger found. Timeout has expired.\n");

// Checks for the timeout

An example on how to get a second task that can do some monitoring on the running task and eventually send the SPC_STOP command can
be found on the Spectrum driver CD that has been shipped with your board. The latest examples can also be down loaded via our website
at http://www.spectrum-instrumentation.com.

Data organization
Normal mode (non interlace)
This chapter shows the data organization for sample rates < 100 MS/s. The data organization for sample rates above 100 MS/s is described
in the next chapter (Interlace mode)
In standard mode tha data is organized on the board in two memory channels, named memory channel 0 and memory channel 1. The data
in memory is organized depending on the used channels and the type of board. This is a result of the internal hardware structure of the board.
Ch0
X
X
X
X

Ch1

Ch2

Ch3

X
X

X
X

X

Sample ordering in standard mode on memory channel 0
A0
A1
A2
A3
A4
A5
A6
A7
A0
B0
A1
B1
A2
B2
A3
B3
A0
A1
A2
A3
A4
A5
A6
A7
A0
B0
A1
B1
A2
B2
A3
B3

Sample ordering in standard mode on memory channel 1
A8
A4
A8
A4

A9
B4
A9
B4

B0
C0

B1
D0

B2
C1

B3
D1

B4
C2

B5
D2

B6
C3

B7
D3

B8
C4

B9
D4

The samples are re-named for better readability. A0 is sample 0 of channel 0, C4 is sample 4 of channel 2, ...

Sample format
The 8 bit samples in twos complement are always stored in memory as sign extended 8 bit integer values. This leads to a range of possible
integer values from -128…0…+127.
Bit

Standard Mode

D7

ADx Bit 7 (MSB)

D6

ADx Bit 6

D5

ADx Bit 5

D4

ADx Bit 4

D3

ADx Bit 3

D2

ADx Bit 2

D1

ADx Bit 1

D0

ADx Bit 0 (LSB)

Reading out the data with SpcGetData
The function SpcGetData enables you to read out the data that is stored in the on-board memory during any of the standard recording modes
easily after the acquisition has finished. Depending on your operating system, the function is called with a different amount of parameters.
(c) Spectrum GmbH

47

Programming

Standard acquisition modes

Please refer to the relating chapter earlier in this manual. The examples in this section are written in Visual C++ for Windows, so the examples
differ a little bit for the use with linux.
As the data is read out individually for every memory channel, it is important to know where the data has been stored. Please refer to the
data organization section, to get the information you need first.
Assuming that you know the memory channel or channels that contain the acquired data, you now have to decide whether you want to read
out the whole memory or just one part of it. To select the area to be read out two values are needed by the function SpcGetData.
The value ’start’ as a 32 bit integer value
This value defines the start of the memory area to be read out in samples. This result is, that you do not need to care for the number of bytes
a single sample contains. If you want to read out the whole memory this value must be set to 0.
The value ’len’ as a 32 bit integer value
This value defines the number of samples that are read out, beginning with the first sample defined by the ’start’ value mentioned above. If
you want to read out the whole on-board memory you need to program the „len“ parameter to the before programmed memory size. At this
point please keep in mind that depending on the activated channels there may be more than one board channel in one memory channel.
This „len“ value must be a total memsize for all channels that are acquired in that memory channel. As a result that means if acquiring two
channels to memory channel 0 the „len“ value must be set to „2 * memsize“.
Multiplexed data
Depending on the activated channels and the board type several channels could be stored in one memory channel. As a result that means
that „start“ and „len“ parameter have to be multiplied by the number of channels per memory channel (module). If for example two channels
have been acquired into one memory channel a call like:
SpcGetData (hDrv, 0, 2 * 4096, 2 * 2048, Data);

reads out data of both channels from memory channel 0 starting at sample position 4k and a length of 2k. The Data array must be of course
large enough to hold data of both channels (in that case 2 * 2k = 4k of data).
Standard mode
Reading out the data is really easy, if a recording modes is used that stores non multiplexed data in the dedicated memory channels. The
next example shows, how to read out the data after having recorded two channels that have been written without multiplexing to both memory
channels.
Example for SpcGetData, no memory allocation error checking performed:
for (i = 0; i < 2; i++)
pbyData[i] = (ptr8) malloc (lMemsize * sizeof(int8));

// both memory channels have been used
// allocate memory for the data pointers
// with the maximum size (lMemsize)

SpcGetData (hDrv, 0, 0, lMemsize, (dataptr) pbyData[0]);
SpcGetData (hDrv, 1, 0, lMemsize, (dataptr) pbyData[1]);

// no demultiplexing is necessary on channel 0
// neither it is on channel 1

If you use two channels for recording using only one memory channel or four channels, the data in the memory channel(s) is multiplexed and
needs to be unsorted by the user. The following example shows how to unsort the data for the recording of two channels using memory channel 0.

48

for (i = 0; i < 2; i++)
pbyData[i] = (ptr8) malloc (lMemsize * sizeof(int8));

// 2 channels to read out from 1 memory channel
// allocate memory for the data pointers
// with the maximum size (lMemsize) per channel

pbyTmp = (ptr8) malloc (lMemsize * 2 * sizeof(int8));

// allocate temporary buffer for copy

SpcGetData (hDrv, 0, 0, 2 * lMemsize, (dataptr) pbyTmp);

// get both channels together
// from memory channel 0

for (i = 0; i < lMemsize; i++)
{
pbyData[0][i] = pbyTmp[(2 * i)];
pbyData[1][i] = pbyTmp[(2 * i) + 1];
}

// split data in the two channels

free (pbyTmp);

// free the temporary buffer

MI.20xx Manual

FIFO Mode

Overview

FIFO Mode
Overview
General Information
The FIFO mode allows to record data continuously and transfer it online to the PC (acquisition boards) or allows to write
data continuously from the PC to the board (generation
boards). Therefore the on-board memory of the board is used
as a continuous buffer. On the PC the data can be used for
any calculation or can be written to hard disk while recording
is running (acquisition boards) or the data can be read from
hard disk and calculated online before writing it to the board.
FIFO mode uses interrupts and is supported by the drivers on 32 bit operating systems like Window 9x/ME, Windows NT/2000/XP or Linux.
Start of FIFO mode waits for a trigger event. If you wish to start FIFO mode immediately, you may use the software trigger.FIFO mode can
be used together with the options Multiple Recording/Replay and Gated Sampling/Replay. Details on this can be found in the appropriate
chapters about the options.

Background FIFO Read

On the hardware side the board memory is spilt in two buffers of the same length. These buffers can be up to half of the on-board memory
in size. In addition to the hardware buffers the driver holds up to 256 software buffers of the same length as the hardware buffers are. Whenever a hardware buffer is full with data the hardware generates an interrupt and the driver transfers this hardware buffer to the next software
buffer that is available. While transfering one buffer to the PC, the other one is filled up with data. The driver is doing this job automatically
in the background.
After the driver has finsihed transferring the data, the application software gets a signal and can process data (e.g stores data to hard disk
or makes some calculations). After processing the data the application software tells the driver that he can again use the software buffer for
acquisition data.
This two stages buffering has big advantages when running FIFO mode at the speed limit. The software buffers extremly expand the acquisition time that can be buffered and protects the whole system against buffer overruns.

Speed Limitations
The FIFO mode is running continuously all the time. Therefore the data must be read out from the board (data acquisition) or written to the
board (data generation) at least with the same speed that it is recorded/replayed. If data is read out from the board or written to the board
slower, the hardware buffers will overrun at a certain point and FIFO mode is stopped.
One bottleneck with the FIFO mode is the PCI bus. The standard PCI bus is theoretically capable of transferring data with 33 MHz and 32
Bit. As a result a maximum burst transfer rate of 132 MByte per second can be achieved. As several devices can share the PCI bus this
maximum transfer rate is only available to a short transfer burst until a new bus arbitration is necessray. In real life the continuous transfer
rate is limited to approximately 100-110 MBytes per second. The maximum FIFO speed one can achieve heavily depends on the PC system
and the operating system and varies from system to system.
The maximum sample rate one can run in continuous FIFO mode depends on the number of activated channels:

(c) Spectrum GmbH

49

Programming

1
2
4
8

Channel
Channels
Channels
Channels

FIFO Mode

Theoretical maximum sample rate
100 MS/s
50 MS/s
25 MS/s
12.5 MS/s

PCI Bus Throughput
[1 Channel] x [1 Byte per sample] * 100 MS/s = 100 MB/s
[2 Channels] x [1 Byte per sample] * 50 MS/s = 100 MB/s
[4 Channels] x [1 Byte per sample] * 25 MS/s = 100 MB/s
[8 Channels] x [1 Byte per sample] * 12.5 MS/s = 100 MB/s

When using FIFO mode together with one of the options that allow to have gaps in the acquisiton like Multiple Recording or Gated Sampling
one can even run the board with higher sample rates. It just has to be sure that the average sample rate (calculated with acquisition time and
gap) does not exceed the above mentioned sample rate limitations.
The sample rate that can be run in one of these mode is depending on the number of channels that have been activated. Due to the internal
structure of the board this is limited to a internal throughput of 250 MB/s (250 MS/s):

1
2
4
8

Channel
Channels
Channels
Channels

Maximum sample rate that can be programmed
250 MS/s
125 MS/s
62.5 MS/s
31.25 MS/s

Internal throughput
[1 Channel] x [1 Byte per sample] x 250 MS/s = 250 MB/s
[2 Channels] x [1 Byte per sample] x 125 MS/s = 250 MB/s
[4 Channels] x [1 Byte per sample] x 62.5 MS/s = 250 MB/s
[8 Channels] x [1 Byte per sample] x 31.25 MS/s = 250 MB/s

Programming
The setup of FIFO mode is done with a few additional software registers described in this chapter. All the other settings can be used as described before. In FIFO mode the register SPC_MEMSIZE and SPC_POSTTRIGGER are not used.

Software Buffers
This register defines the number of software buffers that should be used for FIFO mode. The number of hardware buffers is always two and
can not be changed by software.
Register

Value

Direction

Description

SPC_FIFO_BUFFERS

60000

r/w

Number of software buffers to be used for FIFO mode. Value has to be between 2 and 256

When this manual was printed there are a total of 256 buffers possible. However if there are changes and enhancements to the driver in the
future it will be informative to read out the number of buffers the new driver version can hold.
Register

Value

Direction

Description

SPC_FIFO_BUFADRCNT

60040

r

Read out the number of available FIFO buffers

The length of each buffer is defined in bytes. This length is used for hardware and software buffers as well. Both have the same length. The
maximum length that can be used is depending on the installed on-board memory.
Register

Value

Direction

Description

SPC_FIFO_BUFLEN

60010

r/w

Length of each buffer in bytes. Must be a multiple of 1024 bytes.

Each FIFO buffer can be a maximum of half the memory. Be aware that the buffer length is given in overall bytes not in samples. Therefore
the value has to be calculated depending on the activated channels and the resolution of the board:

50

MI.20xx Manual

FIFO Mode

Programming

Analog acquisition or generation boards

1
2
4
8

Channel
Channels
Channels
Channels

Buffer length to be programmed in Bytes
12 bit resolution
14 bit resolution
1 x 2 x [Samples in Buffer]
1 x 2 x [Samples in Buffer]
2 x 2 x [Samples in Buffer]
2 x 2 x [Samples in Buffer]
4 x 2 x [Samples in Buffer]
4 x 2 x [Samples in Buffer]
8 x 2 x [Samples in Buffer]
8 x 2 x [Samples in Buffer]

8 bit resolution
1 x [Samples in Buffer]
2 x [Samples in Buffer]
4 x [Samples in Buffer]
8 x [Samples in Buffer]

16 bit resolution
1 x 2 x [Samples in Buffer]
2 x 2 x [Samples in Buffer]
4 x 2 x [Samples in Buffer]
8 x 2 x [Samples in Buffer]

Digital I/O (701x or 702x ) or pattern generator boards (72xx)
Buffer length to be programmed in Bytes
16 bit mode
32 bit mode
2 x [Samples in Buffer]
4 x [Samples in Buffer]

8 bit mode
[Samples in Buffer]

64 bit mode
8 x [Samples in Buffer]

Digital I/O board 7005 only

1 Channel

1 bit mode
1/8 x [Samples in Buffer]

2 bit mode
1/4 x [Samples in Buffer]

Buffer length to be programmed in Bytes
4 bit mode
8 bit mode
1/2 x [Samples in Buffer]
[Samples in Buffer]

16 bit mode
2 x [Samples in Buffer]

We at Spectrum achieved best results when programming the buffer length to a number of samples that can hold approximately 100 ms of
data. However if going to the limit of the PCI bus with the FIFO mode or when having buffer overruns it can be useful to have larger FIFO
buffers to buffer more data in it.
When the goal is a fast update in FIFO mode smaller buffers and a larger number of buffers can be a better setup.
Register

Value

Direction

Description

SPC_FIFO_BUFADR0

60100

r/w

32 bit address of FIFO buffer 0. Must be allocated by application program

SPC_FIFO_BUFADR1

60101

r/w

32 bit address of FIFO buffer 1. Must be allocated by application program

60355

r/w

32 bit address of FIFO buffer 255. Must be allocated by application program

...

...

SPC_FIFO_BUFADR255

The driver handles the programmed number of buffers. To speed up FIFO transfer the driver uses buffers that are allocated and maintained
by the application program. Before starting the FIFO mode the addresses of the allocated buffers must be set to the driver.
Example of FIFO buffer setup. No memory allocation error checking in the example to improve readability:
// ----- setup FIFO buffers ----SpcSetParam (hDrv, SPC_FIFO_BUFFERS,
SpcSetParam (hDrv, SPC_FIFO_BUFLEN,

64);
8192);

// ----- allocate memory for data ----for (i = 0; i < 64; i++)
pnData[i] = (ptr16) malloc (8192);
// pbyData[i] = (ptr8)

// 64 FIFO buffers used in the example
// Each FIFO buffer is 8 kBytes long

// memory allocation for 12, 14, 16 bit analog boards
// and digital boards
// memory allocation for 8 bit analog boards

malloc (8192);

// ----- tell the used buffer adresses to the driver ----for (i = 0; i < 64; i++)
nErr = SpcSetParam (hDrv, SPC_FIFO_BUFADR0 + i, (int32) pnData[i]); // for 12, 14, 16 bit analog boards
// and digital boards only
// nErr = SpcSetParam (hDrv, SPC_FIFO_BUFADR0 + i,
(int32) pbyData[i]); // for 8 bit analog boards only

Buffer processing
The driver counts all the software buffers that have been transferred. This number can be read out from the driver to know the exact amount
of data that has been transferred.
Register

Value

Direction

Description

SPC_FIFO_BUFCOUNT

60020

r

Number of transferred buffers until now

If one knows before starting FIFO mode how long this should run it is possible to program the numer of buffers that the driver should process.
After transferring this number of buffer the driver will automatically stop. If FIFO mode should run endless a zero must be programmed to this
register. Then the FIFO mode must be stoped by the user.
Register

Value

Direction

Description

SPC_FIFO_BUFMAXCNT

60030

r/w

Number of buffers to be transferred until automatic stop. Zero runs endless

(c) Spectrum GmbH

51

Programming

FIFO Mode

FIFO mode
In normal applications the FIFO mode will run in a loop and process one buffer after the other. There are a few special commands and registers for the FIFO mode:
Register

Value

Direction

Description

SPC_COMMAND

0

w

Command register. Allowed values for FIFO mode are listed below

SPC_FIFOSTART

12

Starts the FIFO mode and waits for the first interrupt

SPC_FIFOWAIT

13

Waits for the next buffer interrupt

SPC_STOP

20

Stops the FIFO mode

The start command and the wait command both wait for the signal from the driver that the next buffer has to be processed. This signal is
generated by the driver on receiving an interrupt from the hardware. While waiting none of these commands waiste cpu power (no polling
mode). If for any reason the signal is not coming from the hardware (e.g. trigger is not found) the FIFO mode must be stopped from a second
task with a stop command.
This handshake command tells the driver that the application has finished it’s work with the software buffer. The both commands
SPC_FIFOWAIT (SPC_FIFOSTART) and SPC_FIFO_BUFFERS form a simple but powerful handshake protocol between application software
and board driver.
Register

Value

Direction

Description

SPC_FIFO_BUFREADY

60050

w

FIFO mode handshake. Application has finsihed with that buffer. Value is index of buffer

Backward compatibility: This register replaces the formerly known SPC_FIFO_BUFREADY0 ...
SPC_FIFO_BUFREADY15 commands. It has the same functionality but can handle more FIFO buffers. For backward compatibility the older commands still work but are still limited to 16 buffers.

Example FIFO acquisition mode
This example shows the main loop of a FIFO acquisition. The example is a part of the FIFO examples that are available for each board on
CD. The example simply counts the buffers when it receives a new buffer from the driver and returns control immideately back to the driver.
FIFO acquisition example:
nBufIdx = 0;
lBufCount = 0;
lCommand = SPC_FIFOSTART;
printf ("Start\n");
do
{
nErr = SpcSetParam (hDrv, SPC_COMMAND,
lCommand = SPC_FIFOWAIT;

lCommand);

// ----- perform any data calculation or hard disk recording (in example only counting buffers)----printf ("FIFO Buffer %ld\n", lBufCount++);
// ----- buffer is ready ----SpcSetParam (hDrv, SPC_FIFO_BUFREADY, nBufIdx);
// ----- next Buffer ----nBufIdx++;
if (nBufIdx == MAX_BUF)
nBufIdx = 0;
}
while (nErr == ERR_OK);

Data organization
When using FIFO mode data in memory is organized in some cases a little bit different then in standard mode. This is a result of the internal
hardware structure of the board. The organization of data is depending on the activated channels:
Ch0
X
X
X
X

Ch1

Ch2

Ch3

X
X

X
X

X

Sample ordering in FIFO buffer
A0
A1
A2
A3
A4
A0
B0
A1
B1
A2
A0
B0
A1
B1
A2
A0
C0
B0
D0
A1

A5
B2
B2
C1

A6
A3
A3
B1

A7
B3
B3
D1

A8
A4
A4
A2

A9
B4
B4
C2

A10
A5
A5
B2

A11
B5
B5
D2

A12
A6
A6
A3

A13
B6
B6
C3

A14
A7
A7
B3

A15
B7
B7
D3

The samples are re-named for better readability. A0 is sample 0 of channel 0, C4 is sample 4 of channel 2, ...

52

MI.20xx Manual

A16
A8
A8
A4

A17
B8
B8
C4

A18
A9
A9
B4

A19
B9
B9
D4

FIFO Mode

Programming

The following example shows how to sort the channel data when using 4 channels in FIFO mode:
for (i = 0; i < (lBufferSizeInSamples / 4); i++)
{
Data[0][i] = FIFOBuffer[i * 4 + 0];
Data[1][i] = FIFOBuffer[i * 4 + 2];
Data[2][i] = FIFOBuffer[i * 4 + 1];
Data[3][i] = FIFOBuffer[i * 4 + 3];
}

Sample format
The sample format in FIFO mode does not differ from the one of the standard (non FIFO) mode. Please refer to the relating passage concerning
the sample format in the standard acquisition chapter.

(c) Spectrum GmbH

53

Overview

Clock generation

Clock generation
Overview
The Spectrum boards offer a wide variety of different clock modes to match all the customers needs. All the clock modes are described in
detail with programming examples below. This chapter simply gives you an overview which clock mode to select:
Standard internal sample rate
PLL with internal 40 MHz reference. This is the easiest way to generate a sample rate with no need for additional external clock signals. The
sample rate has a fine resolution.
Quartz and divider
Internal quarz clock with divider. For applications that need a lower clock jitter than the PLL produces. The possible sample rates are restricted
to the values of the divider.
External reference clock
PLL with external 1 MHz to 125 MHz reference clock. This provides a very good clock accuracy if a stable external reference clock is used.It
also allows the easy synchronization with an external source.
External clock
Any clock can be fed in that matches the specification of the board. The external clock signal can be used to synchronize the board on a
system clock or to feed in an exact matching sample rate.
External clock with divider
The externally fed in clock can be divided to generate a low-jitter sample rate of a slower speed than the external clock available.
There is a more detailed description of the clock generation part available as an application note. There some
more background information and details of the internal structure are explained.

Internally generated sample rate
Standard internal sample rate
The internal sample rate is generated in default mode by a PLL and dividers out of an internal 40 MHz frequency reference. In most cases
the user does not need to care on how the desired sample rate is generated by multiplying and dividing internally. You simply write the
desired sample rate to the according register shown in the table below. If you want to make sure the sample rate has been set correctly you
can also read out the register and the driver will give you back the sample rate that is matching your desired one best.
Register

Value

Direction

Description

SPC_SAMPLERATE

20000

w

Defines the sample rate in Hz for internal sample rate generation.

r

Read out the internal sample rate that is nearest matching to the desired one.

If a sample rate is generated internally, you can additionally enable the clock output. The clock will be available on the external clock connector and can be used to synchronize external equipment with the board.
Register

Value

Direction

Description

SPC_EXTERNOUT

20110

r/w

Enables clock output on external clock connector. Only possible with internal clocking. (old name)

SPC_CLOCKOUT

20110

r/w

Enables clock output on external clock connector. Only possible with internal clocking. (new name)

Example on writing and reading internal sample rate
SpcSetParam (hDrv, SPC_SAMPLERATE, 1000000);
SpcSetParam (hDrv, SPC_CLOCKOUT, 1);
SpcGetParam (hDrv, SPC_SAMPLERATE, &lSamplerate);
printf („Samplerate = %d\n“, lSamplerate);

//
//
//
//

Set internal sample rate to 1 MHz
enable the clock output of that 1 MHz
Read back the sample rate that has been programmed
print it. Output should be „Samplerate = 1000000“

Minimum internal sample rate
The minimum internal sample rate is limited on all boards to 1 kHz and the maximum sample rate depends on the specific type of board. The
maximum sample rates for your type of board are shown in the tables below.

54

MI.20xx Manual

Clock generation

Internally generated sample rate

Remapped channels
ch0 ch1 ch2 ch3

2020

2021

2030

2031

Maximum internal sample rate in MS/s

x
x
x
x

50
50
n.a.
n.a.

50
50
50
50

200
100
n.a.
n.a.

200
100
200
100

x
x
x

x

x

Using plain quartz with no PLL
In some cases it is useful for the application not to have the on-board PLL activated. Although the PLL used on the Spectrum boards is a lowjitter version it still produces more clock jitter than a plain quartz oscillator. For these cases the Spectrum boards have the opportunity to switch
off the PLL by software and use a simple clock divider.
Register

Value

Direction

Description

SPC_PLL_ENABLE

20030

r/w

A „1“ enables the PLL mode (default) or disables it by writing a 0 to this register

The sample rates that could be set are then limited to the quartz speed divided by one of the below mentioned dividers. The quartz used on
the board is similar to the maximum sample rate the board can achieve. As with PLL mode it’s also possible to set a desired sample rate and
read it back. The result will then again be the best matching sample rate.
Available divider values
1
400

2
500

4
800

8
1000

10
2000

16

20

40

50

80

100

200

External reference clock
Register

Value

Direction

Description

SPC_REFERENCECLOCK

20140

r/w

Programs the external reference clock in the range from 1 MHz to 125 MHz.

0

Internal reference is used for internal sample rate generation.

External sample rate in Hz as an integer value

External reference is used. You need to set up this register exactly to the frequency of the external fed in clock.

If you have an external clock generator with a extremly stable frequency, you can use it as a reference clock. You can connect it to the external
clock connector and the PLL will be fed with this clock instead of the internal reference. Due to the fact that the driver needs to know the
external fed in frequency for an exact calculation of the sample rate you must set the the SPC_REFERENCECLOCK register accordingly. The
driver automatically sets the PLL to achieve the desired sample rate. Therefore it examines the reference clock and the sample rate registers.
Example of reference clock:
SpcSetParam (hDrv, SPC_EXTERNALCLOCK, 0);
SpcSetParam (hDrv, SPC_REFERENCECLOCK, 10000000);
SpcSetParam (hDrv, SPC_SAMPLERATE,
25000000);

// Set to internal clock
// Reference clock that is fed in is 10 MHz
// We want to have 25 MHz as sample rate

Termination of the clock input
If the external connector is used as an input, either for feeding in an external reference clock or for external clocking you can enable a 50
Ohm termination on the board. If the termination is disabled, the impedance is 1 Megaohm. Please make sure that your source is capable
of driving that current and that it still fulfills the clock input specification as given in the technical data section.
Register

Value

Direction

Description

SPC_CLOCK50OHM

20120

r/w

A „1“ enables the 50 Ohm termination at the external clock connector. Only possible, when using
the external connector as an input.

External clocking
Direct external clock
An external clock can be fed in on the external clock connector of the board. This can be any clock, that matches the specification of the
board. The external clock signal can be used to synchronize the board on a system clock or to feed in an exact matching sample rate.
Register

Value

Direction

Description

SPC_EXTERNALCLOCK

20100

r/w

Enables the external clock input. If external clock input is disabled, internal clock will be used.

The maximum values for the external clock is board dependant and shown in the table below.

(c) Spectrum GmbH

55

Internally generated sample rate

Clock generation

Termination of the clock input
If the external connector is used as an input, either for feeding in an external reference clock or for external clocking you can enable a 50
Ohm termination on the board. If the termination is disabled, the impedance is 1 Megaohm. Please make sure that your source is capable
of driving that current and that it still fulfills the clock input specification as given in teh technical data section.
Register

Value

Direction

Description

SPC_CLOCK50OHM

20120

r/w

A „1“ enables the 50 Ohm termination at the external clock connector. Only possible, when using
the external connector as an input.

Minimum external sample rate
The minimum external sample rate is limited on all boards to 1 MHz and the maximum sample rate depends on the specific type of board.
The maximum sample rates for your type of board are shown in the tables below.

Remapped channels
ch0 ch1 ch2 ch3

2020

2021

2030

2031

Maximum external samplerate in MS/s

x
x
x
x

50
50
n.a.
n.a.

50
50
50
50

100
100
n.a.
n.a.

100
100
100
100

x
x
x

x

x

An external sample rate above the mentioned maximum can cause damage to the board.

Ranges for external sample rate
Due to the internal structure of the board it is essential to know for the driver in which clock range the external clock is operating. The external
range register must be set according to the clock that is fed in externally.
Register

Value

Direction

Description

SPC_EXTERNRANGE

20130

r/w

Defines the range of the actual fed in external clock. Use one of the below mentioned ranges

2

External Range Single

EXRANGE_SINGLE
EXRANGE_BURST_S

4

External Range Burst S

EXRANGE_BURST_M

8

External Range Burst M

EXRANGE_BURST_L

16

External Range Burst X

EXRANGE_BURST_XL

32

External Range Burst XL

The range must not be left by more than 5 % when the board is running. Remember that the ranges depend
on the activated channels as well, so a different board setup for external clocking must always include the
related clock ranges.
This table below shows the ranges that are defined by the different range registers mentioned above. The range depends on the activated
channels and the mode the board is used in. Please be sure to select the correct range. Otherwise it is possible that the board will not run
properly.

ch0
X
X
X
X
X

ch1

ch2

ch3

X
X
X

X
X

X
X
X

Mode
Standard/FIFO
Standard/FIFO
Standard/FIFO
Standard only
FIFO

EXRANGE_SINGLE
< 10 MHz
< 5 MHz
< 10 MHz
< 5 MHz
< 2.5 MHz

EXRANGE_BURST_S
10 MHz up to max
5 MHz up to max
10 MHz up to max
5 MHz up to max
2.5 MHz up to 7.5 MHz

EXRANGE_BURST_M

EXRANGE_BURST_L

EXRANGE_BURST_XL

7.5 MHz up to 17.5 MHz

17.5 MHz up to 36 MHz

> 36 MHz

How to read this table? If you have activated all four channels and are using the board in FIFO mode and your external clock is known to
be around 5 MHz you have to set the EXRANGE_BURST_S for the external range.
Example:
SpcSetParam (hDrv, SPC_CHENABLE,
CHANNEL0 | CHANNEL1 | CHANNEL2 | CHANNEL3); // activate all 4 channels
SpcSetParam (hDrv, SPC_EXTERNALCLOCK,
1);
// activate external clock
SpcSetParam (hDrv, SPC_EXTERNRANGE, EXRANGE_BURST_M);
// set external range to Burst M

56

MI.20xx Manual

Clock generation

Internally generated sample rate

External clock with divider
The extra clock divider can be used to divide an external fed in clock by a fixed value. The external clock must be > 1 MS/s. This divided
clock is used as a sample clock for the board.
Register

Value

Direction

Description

SPC_CLOCKDIV

20040

r/w

Extra clock divider for external samplerate. Allowed values are listed below

Available divider values
1
400

2
500

4
800

8
1000

10
2000

16

20

40

50

(c) Spectrum GmbH

80

100

200

57

General Description

Trigger modes and appendant registers

Trigger modes and appendant registers
General Description
The trigger modes of the Spectrum MI, MC and MX A/D boards are very complex and give you the possibility to detect nearly any trigger
event, you can think of.
You can choose between seven external TTL trigger modes and up to 18 internal trigger modes including software and channel trigger, depending on your type of board. Five of the internal trigger modes can be independently set set for each input channel (on A/D boards only)
resulting in a even bigger variety of modes. This chapter is about to explain all of the different trigger modes and setting up the board’s
registers for the desired mode.
Every analog Spectrum board has one dedicated SMB connector mounted in it’s bracket for feeding in an external trigger signal or outputting
a trigger signal of an internal trigger event. Due to the fact that only one connector is available for external trigger I/O, it is not possible to
forward the fed in external trigger signal to another board. If this is however necessary, you need to split up the external trigger signal before.

Software trigger
The software trigger is the easiest way of triggering any Spectrum
board. The acquisition or replay of data will start immediately after starting the board. The only delay results from the time the
board needs for its setup.

Register

Value

Direction

Description

SPC_TRIGGERMODE

40000

r/w

Sets the triggermode for the board.

0

Sets the trigger mode to software, so that the recording/replay starts immediately.

TM_SOFTWARE

In addition to the softwaretrigger (free run) it is also possible to force a triggerevent by software while the board is waiting for an internal or
external trigger event. Therefore you can use the board command shown in the following table.
Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register of the board.

16

Forces a trigger event if the hardware is still waiting for a trigger event. Needs a base board hardware version > 7.x.

SPC_FORCETRIGGER

Due to the fact that the software trigger is an internal trigger mode, you can optionally enable the external trigger output to generate a high
active trigger signal, which indicates when the data acquisition or replay begins. This can be useful to synchronize external equipment with
your Spectrum board.
Register

Value

Direction

Description

SPC_TRIGGEROUT

40100

r/w

Defines the data direction of the external trigger connector.

0

The trigger connector is not used and the line driver is disabled.

1

The trigger connector is used as an output that indicates a detected internal trigger event.

Example for setting up the software trigger:
SpcSetParam (hDrv, SPC_TRIGGERMODE, TM_SOFTWARE); // Internal software trigger mode is used
SpcSetParam (hDrv, SPC_TRIGGEROUT , 1
); // And the trigger output is enabled

External TTL trigger
Enabling the external trigger input is done, if you choose one of the following external trigger modes. The dedicated register for that operation
is shown below.
Register

Value

Direction

SPC_TRIGGERMODE

40000

r/w

TM_TTLPOS

20000

Sets the trigger mode for external TTL trigger to detect positive edges.

TM_TTLNEG

20010

Sets the trigger mode for external TTL trigger to detect negative edges

TM_TTLBOTH

20030

Sets the trigger mode for external TTL trigger to detect positive and negative edges
Sets the trigger mode for external TTL trigger to detect HIGH pulses that are longer than a programmed pulsewidth.

58

Description

TM_TTLHIGH_LP

20001

TM_TTLHIGH_SP

20002

Sets the trigger mode for external TTL trigger to detect HIGH pulses that are shorter than a programmed pulsewidth.

TM_TTLLOW_LP

20011

Sets the trigger mode for external TTL trigger to detect LOW pulses that are longer than a programmed pulsewidth.

TM_TTLLOW_SP

20012

Sets the trigger mode for external TTL trigger to detect LOW pulses that are shorter than a programmed pulsewidth.

MI.20xx Manual

Trigger modes and appendant registers

External TTL trigger

If you choose an external trigger mode the SPC_TRIGGEROUT register will be overwritten and the trigger connector will be used as an input
anyways.
Register

Value

Direction

Description

SPC_TRIGGEROUT

40100

r/w

Defines the data direction of the external trigger connector.

X

If external triggermodes are used, this register will have no effect.

As the trigger connector is used as an input, you can decide whether the input is 50 Ohm terminated or not. If you enable the termination,
please make sure, that your trigger source is capable to deliver the needed current. Please check carefully whether the source is able to fullfill
the trigger input specification given in the technical data section. If termination is disabled, the input is at high impedance.
Register

Value

Direction

Description

SPC_TRIGGER50OHM

40110

r/w

A „1“ sets the 50 Ohm termination, if the trigger connector is used as an input for external trigger
signals. A „0“ sets the 1 MOhm termination

The following short example shows how to set up the board for external positive edge TTL trigger. The trigger input is 50 Ohm terminated.
The different modes for external TTL trigger are to be detailed described in the next few passages.
SpcSetParam (hDrv, SPC_TRIGGERMODE , TM_TTLPOS); // External positive TTL edge trigger
SpcSetParam (hDrv, SPC_TRIGGER50OHM, 1
); // and the 50 Ohm termination of the trigger input are used

Edge triggers
Positive TTL trigger
This mode is for detecting the rising edges of an external TTL signal. The board will trigger on the first rising edge that is detected after starting the board. The next triggerevent will then be
detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_TRIGGERMODE

40000

r/w

Sets the triggermode for the board

20000

Sets the trigger mode for external TTL trigger to detect positive edges

TM_TTLPOS

Example on how to set up the board for positive TTL trigger:
SpcSetParam (hDrv, SPC_TRIGGERMODE, TM_TTLPOS); // Setting up external TTL trigger to detect positive edges

Negative TTL trigger
This mode is for detecting the falling edges of an external TTL signal. The board will trigger on the first falling edge that is detected after starting the board. The next triggerevent will then be
detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_TRIGGERMODE

40000

r/w

Sets the triggermode for the board.

20010

Sets the trigger mode for external TTL trigger to detect negative edges.

TM_TTLNEG

(c) Spectrum GmbH

59

External TTL trigger

Trigger modes and appendant registers

Positive and negative TTL trigger
This mode is for detecting the rising and falling edges of an external TTL signal. The board will trigger on the first rising or falling
edge that is detected after starting the board. The next triggerevent will then be detected, if the actual recording/replay has finished and the board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_TRIGGERMODE

40000

r/w

Sets the triggermode for the board.

20030

Sets the trigger mode for external TTL trigger to detect positive and negative edges.

TM_TTLBOTH

Pulsewidth triggers
TTL pulsewidth trigger for long HIGH pulses
This mode is for detecting HIGH pulses of an external TTL signal
that are longer than a programmed pulsewidth. If the pulse is
shorter than the programmed pulsewidth, no trigger will be detected. The board will trigger on the first pulse matching the trigger
condition after starting the board. The next triggerevent will then
be detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_PULSEWIDTH

44000

r/w

Sets the pulsewidth in samples. Values from 2 to 255 are allowed.

40000

r/w

Sets the triggermode for the board.

20001

Sets the trigger mode for external TTL trigger to detect HIGH pulses that are longer than a programmed pulsewidth.

SPC_TRIGGERMODE
TM_TTLHIGH_LP

TTL pulsewidth trigger for short HIGH pulses
This mode is for detecting HIGH pulses of an external TTL signal
that are shorter than a programmed pulsewidth. If the pulse is longer than the programmed pulsewidth, no trigger will be detected.
The board will trigger on the first pulse matching the trigger condition after starting the board. The next triggerevent will then be
detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_PULSEWIDTH

44000

r/w

Sets the pulsewidth in samples. Values from 2 to 255 are allowed.

40000

r/w

Sets the triggermode for the board.

20002

Sets the trigger mode for external TTL trigger to detect HIGH pulses that are shorter than a programmed pulsewidth.

SPC_TRIGGERMODE
TM_TTLHIGH_SP

60

MI.20xx Manual

Trigger modes and appendant registers

External TTL trigger

TTL pulsewidth trigger for long LOW pulses
This mode is for detecting LOW pulses of an external TTL signal
that are longer than a programmed pulsewidth. If the pulse is
shorter than the programmed pulsewidth, no trigger will be detected. The board will trigger on the first pulse matching the trigger
condition after starting the board. The next triggerevent will then
be detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_PULSEWIDTH

44000

r/w

Sets the pulsewidth in samples. Values from 2 to 255 are allowed.

40000

r/w

Sets the triggermode for the board.

20011

Sets the trigger mode for external TTL trigger to detect LOW pulses that are longer than a programmed pulsewidth.

SPC_TRIGGERMODE
TM_TTLLOW_LP

TTL pulsewidth trigger for short LOW pulses
This mode is for detecting LOW pulses of an external TTL signal
that are shorter than a programmed pulsewidth. If the pulse is longer than the programmed pulsewidth, no trigger will be detected.
The board will trigger on the first pulse matching the trigger condition after starting the board. The next triggerevent will then be
detected, if the actual recording/replay has finished and the
board is armed and waiting for a trigger again.

Register

Value

Direction

Description

SPC_PULSEWIDTH

44000

r/w

Sets the pulsewidth in samples. Values from 2 to 255 are allowed.

40000

r/w

Sets the triggermode for the board.

20012

Sets the trigger mode for external TTL trigger to detect LOW pulses that are shorter than a programmed pulsewidth.

SPC_TRIGGERMODE
TM_TTLLOW_SP

SpcSetParam (hDrv, SPC_TRIGGERMODE, TM_TTLHIGH_LP); // Setting up external TTL trigger to detect high pulses
SpcSetParam (hDrv, SPC_PULSEWIDTH , 50
); // that are longer than 50 samples.

(c) Spectrum GmbH

61

Channel Trigger

Trigger modes and appendant registers

Channel Trigger
Overview of the channel trigger registers
The channel trigger modes are the most common modes, compared to external equipment like oscilloscopes. The 17 different channel trigger
modes enable you to observe nearly any part of the analog signal. This chapter is about to explain the different modes in detail. To enable
the channel trigger, you have to set the triggermode register accordingly. Therefore you have to choose, if you either want only one channel
to be the trigger source, or if you want to combine two or more channels to a logical OR trigger. The following table shows the according
registers for the two general channel trigger modes.
Register

Value

Direction

Description

SPC_TRIGGERMODE

40000

r/w

Sets the triggermode for the board.

TM_CHANNEL

20040

Enables the channel trigger mode so that only one channel can be a trigger source.

TM_CHOR

35000

Enables the channel trigger mode so that more than one channel can be a trigger source.

If you have set the general triggermode to channel trigger you must set the all of the channels to their modes according to the following table.
So even if you use TM_CHANNEL and only want to observe one channel, you need to deactivate all other
channels. You can do this by setting the channel specific register to the value TM_CHXOFF.
The tables lists the maximum of the available channel mode registers for your card’s series. So it can be that you have less channels installed
on your specific card and therefore have less valid channel mode registers. If you try to set a channel, that is not installed on your specific
card, a error message will be returned.

Register

Value

Direction

Description

SPC_TRIGGERMODE0

40200

r/w

Sets the trigger mode for channel0. Channeltrigger must be activated with SPC_TRIGGERMODE.

SPC_TRIGGERMODE1

40201

r/w

Sets the trigger mode for channel1. Channeltrigger must be activated with SPC_TRIGGERMODE.

SPC_TRIGGERMODE2

40202

r/w

Sets thetrigger mode for channel2. Channeltrigger must be activated with SPC_TRIGGERMODE.

SPC_TRIGGERMODE3

40203

r/w

Sets the trigger mode for channel3. Channeltrigger must be activated with SPC_TRIGGERMODE.

TM_CHXOFF

10020

Channel is not used for trigger detection.

TM_CHXPOS

10000

Enables the trigger detection for positive edges

TM_CHXNEG

10010

Enables the trigger detection for negative edges

TM_CHXBOTH

10030

Enables the trigger detection for positive and negative edges

TM_CHXPOS_LP

10001

Enables the pulsewidth trigger detection for long positive pulses

TM_CHXNEG_LP

10011

Enables the pulsewidth trigger detection for long negative pulses

TM_CHXPOS_SP

10002

Enables the pulsewidth trigger detection for short positive pulses

TM_CHXNEG_SP

10012

Enables the pulsewidth trigger detection for short negative pulses

TM_CHXPOS_GS

10003

Enables the steepness trigger detection for flat positive pulses

TM_CHXNEG_GS

10013

Enables the steepness trigger detection for flat negative pulses

TM_CHXPOS_SS

10004

Enables the steepness trigger detection for steep positive pulses

TM_CHXNEG_SS

10014

Enables the steepness trigger detection for steep negative pulses

TM_CHXWINENTER

10040

Enables the window trigger for entering signals

TM_CHXWINLEAVE

10050

Enables the window trigger for leaving signals

TM_CHXWINENTER_LP

10041

Enables the window trigger for long inner signals

TM_CHXWINLEAVE_LP

10051

Enables the window trigger for long outer signals

TM_CHXWINENTER_SP

10042

Enables the window trigger for short inner signals

TM_CHXWINLEAVE_SP

10052

Enables the window trigger for short outer signals

So if you want to set up a four channel board to detect only a positive edge on channel0, you would have to setup the board like the following
example. Both of the examples either for the TM_CHANNEL and the TM_CHOR triggermode do not include the necessary settigs for the
triggerlevels. These settings are detailed described in the following paragraphs.
SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam

(hDrv,
(hDrv,
(hDrv,
(hDrv,
(hDrv,

SPC_TRIGGERMODE ,
SPC_TRIGGERMODE0,
SPC_TRIGGERMODE1,
SPC_TRIGGERMODE2,
SPC_TRIGGERMODE3,

TM_CHANNEL);
TM_CHXPOS );
TM_CHXOFF );
TM_CHXOFF );
TM_CHXOFF );

//
//
//
//
//

Enable channel trigger mode
Set triggermode of channel0
Disable channel1 concerning
Disable channel2 concerning
Disable channel3 concerning

to positive edge trigger
trigger detection
trigger detection
trigger detection

If you want to set up a four channel board to detect a triggerevent on either a positive edge on channel1 or a negative edge on channel3
you would have to set up your board as the following example shows.
SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam
SpcSetParam

62

(hDrv,
(hDrv,
(hDrv,
(hDrv,
(hDrv,

SPC_TRIGGERMODE ,
SPC_TRIGGERMODE0,
SPC_TRIGGERMODE1,
SPC_TRIGGERMODE2,
SPC_TRIGGERMODE3,

TM_CHOR );
TM_CHXOFF);
TM_CHXPOS);
TM_CHXOFF);
TM_CHXNEG);

//
//
//
//
//

Enable channel OR trigger mode
Disable channel0 concerning trigger detection
Set triggermode of channel1 to positive edge trigger
Disable channel2 concerning trigger detection
Set triggermode of channel3 to positive edge trigger

MI.20xx Manual

Trigger modes and appendant registers

Channel Trigger

Triggerlevel
All of the channel trigger modes listed above require at least one triggerlevel to be set (except TM_CHXOFF of course). Some like the window
trigger require even two levels (upper and lower level) to be set. Before explaining the different channel trigger modes, it is necessary to
explain the board’s series specific range of triggerlevels.
After the data has been sampled, the upper N data bits are compared with the N bits of the trigger levels. The amount of bits, the trigger
levels are represented with depends on the board’s series. The following table shows the level registers and the possible values they can be
set to for your specific board.
6 bit resolution for the trigger levels:
Register

Value

Direction

Description

Range

SPC_HIGHLEVEL0

42000

r/w

Defines the upper level (triggerlevel) for channel 0

-31 to +31

SPC_HIGHLEVEL1

42001

r/w

Defines the upper level (triggerlevel) for channel 1

-31 to +31

SPC_HIGHLEVEL2

42002

r/w

Defines the upper level (triggerlevel) for channel 2

-31 to +31

SPC_HIGHLEVEL3

42003

r/w

Defines the upper level (triggerlevel) for channel 3

-31 to +31

SPC_LOWLEVEL0

42100

r/w

Defines the upper level (triggerlevel) for channel 0

-31 to +31

SPC_LOWLEVEL1

42101

r/w

Defines the upper level (triggerlevel) for channel 1

-31 to +31

SPC_LOWLEVEL2

42102

r/w

Defines the upper level (triggerlevel) for channel 2

-31 to +31

SPC_LOWLEVEL3

42103

r/w

Defines the upper level (triggerlevel) for channel 3

-31 to +31

In the above table the values for the triggerlevels represent the digital values for the corresponding data width N of the triggerlevels. If for
example the triggerlevels are represented by 8 bit, the bipolar range would be -128 … 127. To archieve symmetric triggerlevels the most
negative value is not used and the so resulting range would be -127 … +127.
As the triggerlevels are compared to the digitized data, the triggerlevels depend on the channels input range. For every input range available
to your board there is a corresponding range of triggerlevels. On the different input ranges the possible stepsize for the triggerlevels differs
as well as the maximum and minimum values. The following table, gives you the absolute triggerlevels for your specific board’s series.
Resulting ranges of the 6 bit trigger level resolution:
Input ranges
Triggerlevel

±50 mV

±100 mV

±200 mV

±500 mV

±1 V

±2 V

±5 V

31

+48.4 mV

+96.9 mV

+193.8 mV

+484.4 mV

+968.8 mV

+1937.5 mV

+4843.8 mV

30

+46.9 mV

+93.8 mV

+187.5 mV

+468.8 mV

+937.5 mV

+1875.0 mV

+4687.5 mV

+25.0 mV

+50.0 mV

+100.0 mV

+250.0 mV

+500.0 mV

+1000.0 mV

+2500.0 mV

2

+3.1 mV

+6.3 mV

+12.5 mV

+31.3 mV

+62.5 mV

+125.0 mV

+312.5 mV

1

+1.6 mV

+3.1 mV

+6.3 mV

+15.6 mV

+31.3 mV

+62.5 mV

+156.3 mV

0

0.0 mV

0.0 mV

0.0 mV

0.0 mV

0.0 mV

0.0 mV

0.0 mV

-1

-1.6 mV

-3.1 mV

-6.3 mV

-15.6 mV

-31.3 mV

-62.5 mV

-156.3 mV

-2

-3.1 mV

-6.3 mV

-12.5 mV

-31.3 mV

-62.5 mV

-125.0 mV

-312.5 mV

-25.0 mV

-50.0 mV

-100.0 mV

-250.0 mV

-500.0 mV

-1000.0 mV

-2500.0 mV

-30

-46.9 mV

-93.8 mV

-187.5 mV

-468.8 mV

-937.5 mV

-1875.0 mV

-4687.5 mV

-31

-48.4 mV

-96.9 mV

-193.8 mV

-484.4 mV

-968.8 mV

-1937.5 mV

-4843.8 mV

Stepsize

1.6 mV

3.1 mV

6.3 mV

15.6 mV

31.3 mV

62.5 mV

156.3 mV

…
16
…

…
-16
…

The following example shows, how to set up a one channel board to trigger on channel0’s rising edge. It is asumed, that the input range of
channel0 is set to the the ±200 mV range. The dezimal value for SPC_HIGHLEVEL0 corresponds then with 75.6 mV, wich is the resulting
triggerlevel.
SpcSetParam (hDrv, SPC_TRIGGERMODE ,
SpcSetParam (hDrv, SPC_TRIGGERMODE0,
SpcSetParam (hDrv, SPC_HIGHLEVEL0 ,

TM_CHANNEL); // Enable channel trigger mode
TM_CHXPOS ); // Enable channel trigger mode
12
); // Sets triggerlevel to 75.6 mV

Reading out the number of possible trigger levels
The Spectrum driver also contains a register, that holds the value of the maximum possible different trigger levels considering the above mentioned exclusion of the most negative possible value. This is useful, as new drivers can also be used with older hardware versions, because
you can check the trigger resolution during runtime. The register is shown in the following table:
Register

Value

Direction

Description

SPC_READTRGLVLCOUNT

2500

r

Contains the number of different possible trigger levels.

In case of a board that uses 8 bits for trigger detection the returned value would be 255, as either the zero and 127 positive and negative
values are possible.

(c) Spectrum GmbH

63

Channel Trigger

Trigger modes and appendant registers

The resulting trigger step width in mV can easily be calculated from the returned
value. It is assumed that you know the actually selected input range.

Input Range max – Input Range min
Trigger step width = --------------------------------------------------------------------------------Number of trigger levels + 1

To give you an example on how to use this formular we assume, that the
+1000 mV – (-1000 mV)±1.0 V input range is selected and the board uses 8 bits for trigger detection. Trigger step width = ----------------------------------------------------------255 + 1
The result would be 7.81 mV, which is the step width for your type of board withing the actually chosen input range.

64

MI.20xx Manual

Trigger modes and appendant registers

Channel Trigger

Detailed description of the channel trigger modes
Channel trigger on positive edge
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from lower values to higher values (rising edge) then the triggerevent will be detected.
These edge triggered channel trigger modes correspond to
the trigger possibilities of usual ocilloscopes.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXPOS

10000

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

Value

Channel trigger on negative edge
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from higher values to lower values (falling edge) then the triggerevent will be detected.
These edge triggered channel trigger modes correspond to
the trigger possibilities of usual ocilloscopes.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXNEG

10010

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

Value

Channel trigger on positive and negative edge
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal (either rising or falling edge) the triggerevent will be detected.
These edge triggered channel trigger modes correspond to
the trigger possibilities of usual ocilloscopes.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXBOTH

10030

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

(c) Spectrum GmbH

65

Channel Trigger

Trigger modes and appendant registers

Channel pulsewidth trigger for long positive pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from lower to higher values (rising
edge) the pulsewidth counter is started. If the signal crosses
the triggerlevel again in the opposite direction within the
the programmed pulsewidth time, no trigger will be detected. If the pulsewidth counter reaches the programmed
amount of samples, without the signal crossing the triggerlevel in the opposite direction, the triggerevent will be detected.
The pulsewidth trigger modes for long pulses can be used
to prevent the board from triggering on wrong (short) edges
in noisy signals.
Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXPOS_LP

10001

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Channel pulsewidth trigger for long negative pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from higher to lower values (falling
edge) the pulsewidth counter is started. If the signal crosses
the triggerlevel again in the opposite direction within the
the programmed pulsewidth time, no trigger will be detected. If the pulsewidth counter reaches the programmed
amount of samples, without the signal crossing the triggerlevel in the opposite direction, the triggerevent will be detected.
The pulsewidth trigger modes for long pulses can be used
to prevent the board from triggering on wrong (short) edges
in noisy signals.
Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXNEG_LP

10011

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

66

MI.20xx Manual

Trigger modes and appendant registers

Channel Trigger

Channel pulsewidth trigger for short positive pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from lower to higher values (rising
edge) the pulsewidth counter is started. If the pulsewidth
counter reaches the programmed amount of samples, no
trigger will be detected.
If the signal does cross the triggerlevel again within the the
programmed pulsewidth time, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXPOSG_SP

10002

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Channel pulsewidth trigger for short negative pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed triggerlevel is crossed by
the channel’s signal from higher to lower values (falling
edge) the pulsewidth counter is started. If the pulsewidth
counter reaches the programmed amount of samples, no
trigger will be detected.
If the signal does cross the triggerlevel again within the the
programmed pulsewidth time, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXNEG_SP

10012

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired triggerlevel relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

(c) Spectrum GmbH

67

Channel Trigger

Trigger modes and appendant registers

Channel steepness trigger for flat positive pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed lower level is crossed by
the channel’s signal from lower to higher values (rising
edge) the pulsewidth counter is started. If the signal does
cross the upper level within the the programmed pulsewidth
time, no trigger will be detected.
If the pulsewidth counter reaches the programmed amount
of samples a triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXPOS_GS

10003

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Set it to the desired lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Channel steepness trigger for flat negative pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed upper level is crossed by
the channel’s signal from higher to lower values (falling
edge) the pulsewidth counter is started. If the signal does
cross the lower level within the the programmed pulsewidth
time, no trigger will be detected.
If the pulsewidth counter reaches the programmed amount
of samples a triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXNEG_GS

10013

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Set it to the desired lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

68

MI.20xx Manual

Trigger modes and appendant registers

Channel Trigger

Channel steepness trigger for steep positive pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed lower level is crossed by
the channel’s signal from lower to higher values (rising
edge) the pulsewidth counter is started. If the pulsewidth
counter reaches the programmed amount of samples without the signal crossing the higher level, no trigger will be
detected.
If the signal does cross the upper level within the the programmed pulsewidth time, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXPOS_SS

10004

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Set it to the desired lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Value

Channel steepness trigger for steep negative pulses
The analog input is continuously sampled with the selected
sample rate. If the programmed upper level is crossed by
the channel’s signal from higher to lower values (falling
edge) the pulsewidth counter is started. If the pulsewidth
counter reaches the programmed amount of samples without the signal crossing the lower level, no trigger will be
detected.
If the signal does cross the lower level within the the programmed pulsewidth time, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXNEG_SS

10014

SPC_HIGHLEVEL0

42000

r/w

Set it to the desired upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Set it to the desired lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

(c) Spectrum GmbH

69

Channel Trigger

Trigger modes and appendant registers

Channel window trigger for entering signals
The analog input is continuously sampled with the selected
sample rate. The upper and the lower level define a window. Every time the signal enters the the window from the
outside, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

Value
20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINENTER

10040

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

Value

Channel window trigger for leaving signals
The analog input is continuously sampled with the selected
sample rate. The upper and the lower level define a window. Every time the signal leaves the the window from the
inside, a triggerevent will be detected.

Register

Value

Direction

set to

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINLEAVE

10050

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

70

MI.20xx Manual

Trigger modes and appendant registers

Channel Trigger

Channel window trigger for long inner signals
The analog input is continuously sampled with the selected
sample rate. The upper and the lower levels define a window. Every time the signal enters the window from the outside, the pulsewidth counter is startet. If the signal leaves
the window before the pulsewidth counter has stopped, no
trigger will be detected.
If the pulsewidth counter stops and the signal is still inside
the window, the triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINENTER_LP

10041

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Channel window trigger for long outer signals
The analog input is continuously sampled with the selected
sample rate. The upper and the lower levels define a window. Every time the signal leaves the window from the inside, the pulsewidth counter is startet. If the signal enters the
window before the pulsewidth counter has stopped, no trigger will be detected.
If the pulsewidth counter stops and the signal is still outside
the window, the triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINLEAVE_LP

10051

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

(c) Spectrum GmbH

71

Channel Trigger

Trigger modes and appendant registers

Channel window trigger for short inner signals
The analog input is continuously sampled with the selected
sample rate. The upper and the lower levels define a window. Every time the signal enters the window from the outside, the pulsewidth counter is startet. If the pulsewidth
counter stops and the signal is still inside the window, no
trigger will be detected.
If the signal leaves the window before the pulsewidth counter has stopped, the triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINENTER_SP

10042

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

Channel window trigger for short outer signals
The analogd input is continuously sampled with the selected
sample rate. The upper and the lower levels define a window. Every time the signal leaves the window from the inside, the pulsewidth counter is startet. If the pulsewidth
counter stops and the signal is still outside the window, no
trigger will be detected.
If the signal enters the window before the pulsewidth counter has stopped, the triggerevent will be detected.

Register

Value

Direction

set to

Value

SPC_TRIGGERMODE

40000

r/w

TM_CHANNEL

20040

SPC_TRIGGERMODE0

40200

r/w

TM_CHXWINLEAVE_SP

10052

SPC_HIGHLEVEL0

42000

r/w

Sets the window’s upper level relatively to the channel’s input range.

board dependant

SPC_LOWLEVEL0

42100

r/w

Sets the window’s lower level relatively to the channel’s input range.

board dependant

SPC_PULSEWIDTH

44000

r/w

Set to the desired pulsewidth in samples.

2 to 255

72

MI.20xx Manual

Option Multiple Recording

Recording modes

Option Multiple Recording
The option Multiple Recording allows the acquisition of data blocks with multiple trigger events without restarting the hardware. The on-board
memory will be divided into several segments of the same size. Each segment will be filled with data when a trigger event occures. As this
mode is totally done in hardware there is a very small rearm time from end of the acquisition of one segment until the trigger detection is
enabled again. You’ll find that rearm time in the technical data section of this manual.

Recording modes
Standard Mode
With every detected trigger event one data block is filled
with data. The length of one multiple recording segment is
set by the value of the posttrigger register. The total amount
of samples to be recorded is defined by the memsize register.
In most cases memsize will be set to a a multiple of the segment size (postcounter). The table below shows the register
for enabling Multiple Recording. For detailed information
on how to setup and start the standard acquisition mode
please refer to the according chapter eralier in this manual.

When using Multiple Recording pretrigger is not available.

Register

Value

Direction

Description

SPC_MULTI

220000

r/w

Enables Multiple Recording mode.

SPC_MEMSIZE

10000

r/w

Defines the total amount of samples to record.

SPC_POSTTRIGGER

10100

r/w

Defines the size of one Multiple Recording segment.

FIFO Mode
The Multiple Recording in FIFO Mode is similar to the Multiple Recording in Standard Mode. The segment size is also
set by the postcounter register.
In contrast to the Standard mode you cannot programm a
certain total amount of samples to be recorded. The acquisition is running until the user stops it. The data is read FIFO
block by FIFO block by the driver. These blocks are online
available for further data processing by the user program.
This mode sigficantly reduces the average data transfer
rate on the PCI bus. This enables you to use faster sample rates then you would be able to in FIFO mode without Multiple Recording. Usually
the FIFO blocks are multiples of the Multiple Recording segments.
The advantage of Multiple Recording in FIFO mode is that you can stream data online to the hostsystem. You can make realtime data processing or store a huge amount of data to the hard disk. The table below shows the dedicated register for enabling Multiple Recording. For
detailed information how to setup and start the board in FIFO mode please refer to the according chapter earlier in this manual.
Register

Value

Direction

Description

SPC_MULTI

220000

r/w

Enables Multiple Recording mode.

SPC_POSTTRIGGER

10100

r/w

Defines the size of one Multiple Recording segment.

Trigger modes
In Multiple Recording modes all of the board’s trigger modes are available except the software trigger. Depending
on the different trigger modes, the chosen sample rate the
used channels and activated board synchronisation (see
according chapter for details about synchronizing multiple
boards) there are different delay times between the trigger
event and the first sampled data (see figure).
This delay is necessary as the board is equipped with dynamic RAM, which needs refresh cycles to keep the data
in memory when the board is not recording.
The delay is fix for a certain board setup. All possible
delays in samples between the trigger event and the first recorded sample are listed in the table below. A negative
amount of samples indicates that the trigger will be visible.
(c) Spectrum GmbH

73

Trigger modes

Option Multiple Recording

Resulting start delays
Activated channels
0

1

2

Sample rate

external TTL trigger

internal trigger

3

ext. TTL trigger with
activated
synchronization

internal trigger with
activated
synchronization

x

< 10 MS/s

+22 samples

+31 samples

+24 samples

+33 samples

x

(10 < SR < 100) MS/s

+23 samples

+21 samples

+25 samples

+23 samples

x

> 100 MS/s

+16 samples

+32 samples

+18 samples

+34 samples

x

x

< 5 MS/s

-5 samples

+5 samples

-3 samples

+7 samples

x

x

> 5 MS/s

+8 samples

+16 samples

+10 samples

+18 samples

x

x

< 10 MS/s

+22 samples

+31 samples

+24 samples

+33 samples

x

x

(10 < SR < 100) MS/s

+23 samples

+21 samples

+25 samples

+23 samples

x

> 100 MS/s

+16 samples

+32 samples

+18 samples

+34 samples

x

x

x
x

x

< 5 MS/s

-5 samples

+5 samples

-3 samples

+7 samples

x

x

x

x

> 5 MS/s

+8 samples

+16 samples

+10 samples

+18 samples

The following example shows how to set up the board for Multiple Recording in standard mode. The setup would be similar in FIFO mode,
but the memsize register would not be used.
SpcSetParam (hDrv, SPC_MULTI,

1);

SpcSetParam (hDrv, SPC_POSTTRIGGER,
SpcSetParam (hDrv, SPC_MEMSIZE,

1024);
4096);

SpcSetParam (hDrv, SPC_TRIGGERMODE,

74

// Enables Multiple Recording

//
//
//
TM_TTLPOS);//

Set the
Set the
so that
Set the

MI.20xx Manual

segment size to 1024 samples
total memsize for recording to 4096 samples
actually four segments will be recorded
triggermode to external TTL mode (rising edge)

Option Gated Sampling

Recording modes

Option Gated Sampling
The option Gated Sampling allows the data acquisition controlled by an external gate signal. Data will only be recorded, if the programmed
gate condition is true.

Recording modes
Standard Mode
Data will be recorded as long as the gate signal fulfills the gate
condition that has had to be programmed before. At the end of
the gate interval the recording will be stopped and the board will
pause until another gates signal appears. If the total amount of
data to acquire has been reached the board stops immediately
(see figure). The total amount of samples to be recorded can be
defined by the memsize register.
The table below shows the register for enabling Gated Sampling. For detailed information on how to setup and start the standard acquisition mode please refer to the according chapter
earlier in this manual.

When using Gated Sampling pretrigger is not available and postcounter has no function.

Register

Value

Direction

SPC_GATE

220400

r/w

Description
Enables Gated Sampling mode.

SPC_MEMSIZE

10000

r/w

Defines the total amount of samples to record.

FIFO Mode
The Gated Sampling in FIFO Mode is similar to the Gated Sampling in Standard Mode. In contrast to the Standard mode you
cannot programm a certain total amount of samples to be recorded. The acquisition is running until the user stops it. The data is
read FIFO block by FIFO block by the driver. These blocks are
online available for further data processing by the user program.
The advantage of Gated Sampling in FIFO mode is that you can
stream data online to the hostsystem with a lower average data
rate than in conventional FIFO mode without gated sampling.
You can make realtime data processing or store a huge amount
of data to the hard disk. The table below shows the dedicated
register for enabling Gated Sampling. For detailed information how to setup and start the board in FIFO mode please refer to the according
chapter earlier in this manual.
Register

Value

Direction

Description

SPC_GATE

220400

r/w

Enables Gated Sampling mode.

Trigger modes
General information and trigger delay
Not all of the board’s trigger modes can be used in combination with Gated Sampling. All possible trigger modes are
listed below. Depending on the different trigger modes, the
chosen sample rate, the used channels and activated board
synchronisation (see according chapter for details about
synchronizing multiple boards) there are different delay
times between the trigger event and the first sampled data
(see figure). This start delay is necessary as the board is
equipped with dynamic RAM, which needs refresh cycles to
keep the data in memory when the board is not recording.
It is fix for a certain board setup. All possible delays in samples between the trigger event and the first recorded sample
are listed in the table below. A negative amount of samples
indicates that the trigger will be visible.

(c) Spectrum GmbH

75

Trigger modes

Option Gated Sampling

Due to the structure of the on-board memory there is
another delay at the end of the gate interval.
Internally a gate-end signal can only be recognized at
an eight samples alignment.
So depending on what time your external gate signal
will leave the programmed gate condition it might happen that at maximum seven more samples are recorded,
before the board pauses (see figure).
The figure on the right is showing this end delay exemplarily for three possible gate signals. As all samples are
counted from zero. The eight samples alignment in the
upper two cases is reached at the end of sample 39,
which is therefore the 40th sample.

Resulting start delays
Activated channels
0

1

2

Sample rate

external TTL trigger

internal trigger

3

ext. TTL trigger with
activated
synchronization

internal trigger with
activated
synchronization

x

< 10 MS/s

+22 samples

+31 samples

+24 samples

+33 samples

x

(10 < SR < 100) MS/s

+23 samples

+21 samples

+25 samples

+23 samples

x

> 100 MS/s

+16 samples

+32 samples

+18 samples

+34 samples

x

x

< 5 MS/s

-5 samples

+5 samples

-3 samples

+7 samples

x

x

> 5 MS/s

+8 samples

+16 samples

+10 samples

+18 samples

x

x

< 10 MS/s

+22 samples

+31 samples

+24 samples

+33 samples

x

x

(10 < SR < 100) MS/s

+23 samples

+21 samples

+25 samples

+23 samples

x

> 100 MS/s

+16 samples

+32 samples

+18 samples

+34 samples

x

x

x
x

x

< 5 MS/s

-5 samples

+5 samples

-3 samples

+7 samples

x

x

x

x

> 5 MS/s

+8 samples

+16 samples

+10 samples

+18 samples

Allowed trigger modes
As mentioned above not all of the possible trigger modes can be used as a gate condition. The following table is showing the allowed trigger
modes that can be used and explains the event that has to be detected for gate-start end for gate-end.
External TTL edge trigger
The following table shows the allowed trigger modes when using the external TTL trigger connector:
Mode

Gate start will be detected on

Gate end will be detected on

TM_TTLPOS

positive edge on external trigger

negative edge on external trigger

TM_TTL_NEG

negative edge on external trigger

positive edge on external trigger

External TTL pulsewidth trigger
The following table shows the allowed pulsewidth trigger modes when using the external TTL trigger connector:
Mode

Gate start will be detected on

Gate end will be detected on

TM_TTLHIGH_LP

high pulse of external trigger longer than programmed pulsewidth

negative edge on external trigger

TM_TTLLOW_LP

low pulse of external trigger longer than programmed pulsewidth

positive edge on external trigger

76

MI.20xx Manual

Option Gated Sampling

Example program

Channel trigger
Mode

Gate start will be detected on

Gate end will be detected on

TM_CHXPOS

signal crossing level from low to high

signal crossing level from high to low

TM_CHXNEG

signal crossing level from high to low

signal crossing level from low to high

TM_CHXPOS_LP

signal above level longer than the programmed pulsewidth

signal crossing level from high to low

TM_CHXNEG_LP

signal below level longer than the programmed pulsewidth

signal crossing level from low to high

TM_CHXWINENTER

signal entering window between levels

signal leaving window between levels

TM_CHXWINENTER_LP

signal entering window between slower than the programmed pulsewidth

signal leaving window between levels

TM_CHXWINLEAVE

signal leaving window between levels

signal entering window between levels

TM_CHXWINLEAVE_LP

signal leaving window between slower than the programmed pulsewidth

signal entering window between levels

Example program
The following example shows how to set up the board for Gated Sampling in standard mode. The setup would be similar in FIFO mode, but
the memsize register would not be used.
SpcSetParam (hDrv, SPC_GATE,
SpcSetParam (hDrv, SPC_MEMSIZE,
SpcSetParam (hDrv, SPC_TRIGGERMODE,

1);
4096);
TM_TTLPOS);

//
//
//
//

Enables Gated Sampling
Set the total memsize for recording to 4096 samples
Sets the gate condition to external TTL mode, so that
recording will be done, if the signal is at HIGH level

(c) Spectrum GmbH

77

General information

Option Timestamp

Option Timestamp
General information
The timestamp function is used to record trigger events relative to the beginning of the measurement, relative to a fixed time-zero point or
synchronized to an external radio clock. This is done by a wide resetable counter that is incremented with every sample rate. With every
detected trigger event the actual counter value is stored in a seperate timestamp memory.
This function is designed as an enhancement to the Multiple Recording and the Gated Sampling mode but can also be used without these
options. If Gated Sampling mode is used, then both the start and end of a recorded segment are timestamped.
The timestamp memory is designed as a FIFO buffer so that it can be read out even while the Spectrum board is recording data continuously
to the PC in the FIFO mode. This extra memory is 64 K Timestamps in size.
Each recorded timestamp consists of the number of samples that has been counted since the last
counter reset has been done. The actual time from the point since the last reset has been done so
can easily be calculated by the formular besides.

Timestamp
t = ---------------------------Sample rate

If you want to know the time between two timestamps, you can simply calculate this by the formular besides.

Timestamp n + 1 – Timestamp n
∆t = -----------------------------------------------------------------------Sample rate

Timestamp modes
Standard mode
In standard mode the timestamp counter is set to zero
once by writing the TS_RESET commando to the command register. After that command the counter counts
continuously.
The timestamps of all recorded trigger events are referenced to this common zero time. With this mode you
can calculate the exact time difference between different recordings.
The following table shows the valid values that can be
written to the timestamp command register.
Register

Value

Direction

SPC_TIMESTAMP_CMD

47000

w

Description
Writes a command to the timestamp command register.

SPC_TIMESTAMP_CMD

47000

r

Reads out the actual timestamp mode.

TS_RESET

0

Resets the counter of the timestamp module to zero.

TS_MODE_DISABLE

10

Disables the timestamp module. No timestamps are recorded.

TS_MODE_STANDARD

12

Must be written to enable the Standard timestamp mode. The counter must be manually reset by writing the command
TS_RESET to the command register. The timestamps values will be relative to this reset time.

StartReset mode
In StartReset mode the timestamp counter is set to zero
on every start of the board. After starting the board the
counter counts continuously.
The timestamps of one recording are referenced to the
start of the recording. This mode is very useful for Multiple Recording and Gated Sampling (see according
chapters for detailed information on these two optional
modes).
The following table shows the valid values that can be
written to the timestamp command register.
Register

Value

Direction

SPC_TIMESTAMP_CMD

47000

w

Description
Writes a command to the timestamp command register.

SPC_TIMESTAMP_CMD

47000

r

Reads out the actual timestamp mode.

TS_RESET

0

Resets the counter of the timestamp module to zero.

TS_MODE_DISABLE

10

Disables the timestamp module. No timestamps are recorded.

TS_MODE_STARTRESET

11

Must be written to enable the StartReset timestamp mode. The counter is reset on each start of the board. The
timestamps values are relative to the board start.

RefClock mode (optional)
The counter is spilt in a HIGH and a LOW part and an additional secons signal, that affects both parts of the counter (TTL pulse with f = 1
Hz) is must be externally fed in.
78

MI.20xx Manual

Option Timestamp

Timestamp Status

The HIGH part counts the seconds that have elapsed since the last counter reset with the reset command TS_RESET. The LOW part is reset to
zero on every seconds signal and is clocked with the actual sample rate. The edge of the external secondssignal must be set seperately as
described below.
This mode allows the recording of an absolute time of a trigger event. This even allows the synchronization of data that has been recorded
with different boards.
Register

Value

Direction

SPC_TIMESTAMP_CMD

47000

w

Writes a command to the timestamp command register.

SPC_TIMESTAMP_CMD

47000

r

Reads out the actual timestamp mode.

0

Resets the whole counter of the timestamp module to zero. Waits for synchronization to an external seconds signal.
This may last up to 1 second. The lower part of the counter can be reset with the external fed in second signal. The
edge of the reset signal can be programmed with the SPC_TIMESTAMP_RESETMODE register as shown in the table
below.

TS_RESET

Description

TS_MODE_DISABLE

10

Disables the timestamp module. No timestamps are recorded.

TS_MODE_REFCLOCK

13

Must be written to enable the RefClock timestamp mode. The counter must be manually reset by writing the command
TS_RESET to the command register. The counter is splitted into two parts. The upper part counts the seconds of an
external reference clock. The lower part is reset on each second signal and counts the samples.

The edge of the external TTL seconds signal can be programmed by the following register either to detect the rising or falling edge.
Register

Value

Direction

Description

SPC_TIMESTAMP_RESETMODE

47050

r/w

Defines the active edge of the external fed in seconds signal to reset the lower part of the counter. The
values written here do not affect the timestamp command TS_RESET.

TS_RESET_POS

10

The lower part of the counter will be reset on every rising edge of the external reset signal (seconds signal).

TS_RESET_NEG

20

The lower part of the counter will be reset on every falling edge of the external reset signal (seconds signal).

To get recordings in relation to each other it is importent to know the absolute start time. This time can be easily read out by the following
register. The time is given back in seconds since midnight (00:00:00), January 1, 1970, which is the standard ’time_t’ in C/C++.
Register

Value

Direction

Description

SPC_TIMESTAMP_STARTTIME

47030

r

Reads out the start time of the RefClock mode. Return value is the number of seconds since midnight
(00:00:00), January 1, 1970, which is the standard ’time_t’ in C/C++.

Timestamp Status
The timestamp module has its own status register for the timestamp FIFO. You can easily read out the FIFO status with the help of the timestamp
status register shown in the table below.
Register

Value

Direction

Description

SPC_TIMESTAMP_STATUS

47010

r

Reads the status of the timestamp FIFO.

TS_FIFO_EMPTY

0

The timestamp FIFO is still empty.

TS_FIFO_LESSHALF

1

There are values in the timestamp FIFO but less than half of the FIFO is filled.

TS_FIFO_MOREHALF

2

More than half of the FIFO is filled with timestamps.

TS_FIFO_OVERFLOW

3

The timestamp FIFO is full and possibly data has been lost.

Reading out timestamp data
Functions for accessing the data
There are two possibilities to access the timestamps that have been stored in the timestamp FIFO.
Reading out a single timestamp
You can read out one 32 bit value from the timestamp FIFO by using the register shown in the table below.
Register

Value

Direction

Description

SPC_TIMESTAMP_FIFO

47040

r

Get one 32 bit value from the timestamp FIFO. If the FIFO is empty a zero will be returned.

Because accessing the timestamp with this function will be done with single accesses, getting the value(s) this
way is much slower than using the SpcGetData function as described below.

Using this function will not give you back a whole timestamp, as the timestamp values are wider than 32 bit.
Please also refer to the section on the timestamp data format below.

(c) Spectrum GmbH

79

Reading out timestamp data

Option Timestamp

Reading out all the timestamps with SpcGetData
When using the function SpcGetData the data stored in the timestamp FIFO will be read out in one block by the driver. The usage of the
function SpcGetData is described in the relating section earlier in this manual. The following list does only show the different parameters in
a very short way:
SpcGetData (nr, ch, start, len, data)
• nr: Number of the board (Windows). Linux users please refer to the Driver section for differences using linux.
• ch: Channel to be read out. Must be set to CH_TIMESTAMP (9999) to access timestamp FIFO.
• start: Differing from the standard use, this parameter gives back the number of actually read timestamps and therefore needs to be a pointer. Please refer to the example at the end of this chapter.
• len: Number of timestamps that fit in the data buffer and so defines the number of timestamps to be read out.
• data: Huge buffer for the read out timestamps, that must have at least enough space for 8*len bytes.
It might be that you try to read out more timestamps than there actually are in the timestamp FIFO bacause you don’t know how many trigger
events have been detected. Please make use of the value given back by the parameter start to get to know what parts of your buffer contain
valid timestamps.

Data format
Each timestamp is 56 bit long and internally mapped to 64 bit (8 bytes). The counter value contains the number of clocks that have been
recorded with the currently used sample rate since the last counter-reset has been done. The matching time can easily be calculated as described in the general information section at the beginning of this chapter.
The values the counter is counting and that are stored in the timestamp FIFO represent the moments the trigger event occures internally. Compared to the real external trigger event, these values are delayed. The delay is depending on the actual sample rate, the number of activated
channels and the used trigger mode. This delay can be ignored, as it will be identically for all recordings with the same setup.
Timestamp Mode

Recording Mode

1st 4 bytes

2nd 4 bytes

3rd 4 bytes

4th 4 bytes

5th 4 bytes

6th 4 bytes

Standard/StartReset

Normal / Multiple Recording

Trigger 0
LOW part

Trigger 0
HIGH part

Trigger 1
LOW part

Trigger 1
HIGH part

Trigger 2
LOW part

Trigger 2
HIGH part

Standard/StartReset

Gated Sampling

Gate Start 0
LOW part

Gate Start 0
HIGH part

Gate End 0
LOW part

Gate End 0
HIGH part

Gate Start 1
LOW part

Gate Start 1
HIGH part

RefClock

Normal / Multiple Recording

Trigger 0
Counter value

Trigger 0
Seconds

Trigger 1
Counter value

Trigger 1
Seconds

Trigger 2
Counter value

Trigger 2
Seconds

RefClock

Gated Sampling

Gate Start 0
Counter value

Gate Start 0
Seconds

Gate End 0
Counter value

Gate End 0
Seconds

Gate Start 1
Counter value

Gate Start 1
Seconds

80

MI.20xx Manual

Option Timestamp

Example programs

Example programs
Standard acquisition mode
// ----- Allocate memory for the timestamp data buffer ----plTimeStamps = (ptr32) malloc (MAX_TIMESTAMPS * 8);
// ----- Reset the board and flush the FIFO ----SpcSetParam (hDrv, SPC_COMMAND,
SPC_RESET);
// ----- Setup and start timestamp module ----SpcSetParam (hDrv, SPC_TIMESTAMP_CMD, TS_MODE_STANDARD);
SpcSetParam (hDrv, SPC_TIMESTAMP_CMD, TS_RESET);

// Standard mode set
// Counter is set to Zero

// ----- Start the board 4 times to generate 4 timestamps ----for (i=0; i<4; i++)
{
SpcSetParam (hDrv, SPC_COMMAND,
SPC_START);
// Start recording
do
{
SpcGetParam (hDrv, SPC_STATUS, &lStatus);
// Wait for Status Ready
}
while (lStatus != SPC_READY);
}
// ----- Read out and display the timestamps ----SpcGetData (hDrv, CH_TIMESTAMP, (int32) &lCount, MAX_TIMESTAMPS, (dataptr) plTimeStamps);
for (i=0; i
Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.3
Linearized                      : Yes
Modify Date                     : 2005:04:01 13:30:39Z
Create Date                     : 2005:04:01 13:30:39Z
Page Count                      : 96
Creation Date                   : 2005:04:01 13:30:39Z
Mod Date                        : 2005:04:01 13:30:39Z
Producer                        : Acrobat Distiller 5.0.5 (Windows)
Author                          : Oliver Rovini
Metadata Date                   : 2005:04:01 13:30:39Z
Creator                         : Oliver Rovini
Title                           : mi20_manual.book
Page Mode                       : UseOutlines
EXIF Metadata provided by EXIF.tools

Navigation menu