Follow us on Facebook
Follow us on Twitter
Signalogic on LinkedIn

ADC64 Technical Support

Case Incidents:

Web Site Link:


Anti-alias Input Filters with Mulitplexed ADC Inputs

From: Jeff 
Subject: Re: reply to ADC64 technical question
To: Stuart 
Date: 04/09/00


>message: I have a technical question about the ADC64 board.  Can the on-board 
>anti-aliasing filters be used if the ADC inputs are multiplexed?

The anti-alias input filters cannot be used if the ADC inputs are multiplexed.  
They must be disabled using the "bypass" jumper options documented in the ADC64 
Hardware Manual.  Otherwise, you will have filter "memory" between channels; 
i.e. previous values of one channel will be used as recursive input to other 
channels.  Results will be incorrect.

>Normally, I would expect that I would require anti-aliasing filters on each input
>channel before the multiplexer.

Yes, before the multiplexers is Ok.  But in this case you need an external 
filter unit, which might not be something you want to do.

Jeff Brower

Pin Signal Names

From: Yolanda 
Subject: RE: ADC64 Board
To: Janjae
Date: 04/16/99

Hi Janjae,

>Our customer(KSRI) have a ADC64 Board(S/N:H158).
>Please advise us correct signal name for each pin.
>And please solve the following problem.
>Manual                         A fact
>Pin No.  Signal name      Pin No.   Signal name
> 69        IN0             69       IN0 and IN8
> 70        IN2             77       IN2 and IN10
> 71        IN4             85       IN4 and IN12
> .          .               .        .

What is "A fact"?

On a 8-channel board, 

	Channel			Pin #
	0+			69  (IN0)
	1+			73  (IN8)
	2+			77  (IN16)
	3+			81  (IN24)
	4+			85  (IN32)
	5+			89  (IN40)
	6+			93  (IN48)
	7+			97  (IN56)

As for 0-, 1-, 2-, 3-, 4-, 5-, 6-, 7-, the user can connect them to Pin 17 or 18 

For example, if the user wants to input a signal to channel 0, he/she would have 
to apply the positive terminal to pin69 and the negative terminal to pin17.


On a 4-channel board, 

	Channel			Pin #
	0+			69  (IN0)
	2+			77  (IN16)
	4+			85  (IN32)
	6+			93  (IN48)

As for 0-, 2-, 4-, and 6- the user can connect them to Pin 17 or 18 (AGND).

For example, if the user wants to input a signal to channel 0, he/she would have 
to apply the positive terminal to pin69 and the negative terminal to pin17.


Front-end Muxes on Channels

From: Jeff 
Subject: Re: ADC64 board
To: Val 
Date: 05/12/98


>1.)  Is it possible to include front-end muxes on a couple of ADC64 channels
>and still retain the anti-aliasing/prog gain on the others?

The ADC64 has three (3) A/D converter timers (82C54), which can be assigned to 4 
channel pairs, using a control register.  The result is a bit of a switching 
matrix, so it is possible to set three channel pairs up with one timer, and 
another pair with another timer, allowing two (2) separate sampling rates.

Also, you can indeed disable each anti-alias filter with a jumper, so you could 
have two of your channels non-filtered.

>2.) Are the input channels configurable as true differential or
>Single-ended? Or must I burn two channels to form a differential input?

It is 32-differential and 64 single-ended.


Fixed I/O Signals

From: Jeff 
Subject: Re: ADC64 board
To: Val
Date: 05/12/98


>  A few more questions to add to the list:
>1. With regards to the digital i/o: Data sheet indicates a few possibilities
>         a. 16 in
>         b. 16 out
>         c: 6 in/6 out/plus some interrupts, timers, etc.
>Am I understanding this correctly? This means I cannot individually define
>the i/o bit-by-bit?

Yes, correctly.  But it should be 16 in, 16 out, or 8 in / 8 out.  The other 
signals should be fixed regardless.

>2. I may want to wire an optical encoder into the card. Will this be a big
>deal? Can I simply use a couple of input lines with interrupts to keep track
>of encoder position?

Sure.  How fast are the optical encoder interrupts?

Jeff Brower

Analog Filter Cutoff Frequencies, PROTO3X=2 Interface

From: Jeff 
Subject: RE: ADC64 and TMS320C32, Sig32C-8
To: Kakaria
Date: 06/08/98


>So far your Sig32C-8 looks like the best board even though its on ISA form
>factor. However I still have a couple questions:
>Does the Sig32C-8 come with an analog filter like the ADC64?

The filtering on the Sig32C-8 has better features, because it is built into the 
sigma-delta converters as FIR anti-alias and reconstruction filters, which can 
be software-programmed to adjust the sampling rate, and thus the filter cutoff 
frequency (which is set to FS/2).  The sigma-delta converters provide sharp 
cutoff, more than 60 dB per decade.  On the ADC64, like other traditional SAR 
converter boards, a 6-pole Salen-Key anti-alias filter is used for analog input 
which has cutoff frequency set by removable resistor packs on the board.  The 
ADC64 has a one-pole reconstruction filter for analog output.  Note that 
sigma-delta converters on the Sig32C-8 also have an additional one-pole analog 
filter to bandlimit input signals to about 256x time the desired sampling rate. 
Normally, the oversampling rate used by sigma-delta converters is from 128 to 
1024 times the actual sampling rate.

>What is the PROTO3X-2 interface called out for compatible cards in the ADC64
>spec sheet?

This is a Eurocard style 96-pin connector at opposite end of the board from the 
backplane.  It allows for expansion to other cards and brings out all processor 
address and data lines.  Theoretically, it would be possible to add a memory 
expansion card for the ADC64.  For the Sig32C-8, limited expansion is also 
possible using the QWbus interface, which is designed to connect to other 
Sig32C-8 boards.  However, this type of expansion is mainly limited to I/O 

>For the PCI version of the Sig32C-x, why make it a slave only? Windows NT is
>not a real time operating system and therefore does not guarentee a response
>time. Will your driver working with this hardware somehow avoid the latency
>of windows or must it be managed as a task that must be scheduled into the
>kernel at the same priority of everything else?

Saying the board is a slave does not mean it cannot interrupt the PC.  It is 
generally true that interrupt latency under Windows is indeterminate up to 
around 5 mSec, after which you are guaranteed response as long as the driver has 
high priority (and you follow some basic operational procedures as far as what 
other software and hardware is running on your system at the same time).  No 
board driver, whether the board is a PCI bus master or not, can avoid this.  
But, in the case of your application, there is not a problem because data rates 
are not high enough.  For example, if you wanted to transfer continuous data to 
disk at 8 channels of 25 kHz input, then using a buffer length of from 12288 to 
16384 ensures that no data will be missed.

Jeff Brower

data acquisition and calculation in real-time with ADC64 board

Subject: Re: data acquisition and calculation in real-time with ADC64 board
Date: Mon, 4 Feb 2002 18:48:06 GMT
From: Jeff 
To: Ari 
CC: Trinh 


>We do have a few questions for you though:
>1) How can we acquire data and view it in realtime?

For Visual Studio program, I suggest to look at these examples:

  -"dscope32" project

  -"strip32" project

For the above projects, you should be able to open them in Visual Studio
6.0, rebuild to create executable files, and then run.

For MATLAB programs, I suggest to look at these program examples:



For the above programs, you should be able to open MATLAB (v5.xx or higher),
and enter the following:

  cd \dspower\hwlib\matlab

>2) How can we adjust the board settings such that it spits out phase data
as opposed to signal data?

You would first want to run with the operation mode property (DSP_OPMODE in
C/C++ programs, just OPMODE in MATLAB programs) set to a value of 5, which
specifies real-time Spectrum Analyzer mode in the default DSP executable
code that is shipped with DirectDSP software.  For the ADC64 board, the default
DSP code is the tms32ii.out file located on the \hsmacro subdir.  Please examine
the spcana.cpp source code for guidance on how to set the OPMODE property and
other DSP code properties that instruct the default DSP code on what to do and
what parameters to use.

I believe that spcana.cpp when compiled without changes will display linear
magnitude data.  To display phase data, I think that all you need to do is
set the PHZREQ property to 1 (in spcana.cpp I believe that this call is
commented out).  If you still see magnitude data please let me know.

I don't believe there is a MATLAB spectrum analyzer example, but between the
dscope.m and spcana.cpp files you should be able to mix and match and create
what you need.

>3) How can we store and manipulate all the data in MATLAB? What are the
MATLAB calls? Or how do we interface the board with MATLAB?

Please see the hwtest*.m MATLAB example programs; i.e. hwtest1.m, hwtest2.m,

Also, don't forget to look at Signalogic's technical support web pages,
located at:


The general tech support categories of interest for your application include
MATLAB, ADC64, and C3x/C4x DSP source code.

Jeff Brower


Subject: Re: data acquisition and calculation in real-time with ADC64 board
Date: Wed, 6 Feb 2002 15:59:08 GMT
From: Jeff 
To: Ari 
CC: Mai 


>1) I'm not sure why this is, but when I use the scope function out of
>Hypersignal-Macro, inputs 1 and 9 are the same (meaning they output the
same function on the scope whether the input is going into 1 or 9), 0 and 8 are
the same, and when you put an input into 0 and another into 1 the output on the
>scope is the superposition of the two signals, instead of two separate
>signals...yet when I put a signal on 0 and another on 9 they are seen as
two separate signals.

In the standard version of Hypersignal-Macro (HSM) and DirectDSP software
that you have, what you have described is the expected behavior.  The channel
multiplexing group register is set to 0 (first channel group) and only the
lower three (3) bits of channel numbers entered in HSM and DirectDSP software are

Note:  in my explanation below about ADC64 board operation, "group register"
indicates a value from 0-7 that specifies 8 groups of 8 channels each and
controls the channel multiplexers on the ADC64 board.  0 specifies channels
0-7, 1 specifies channels 8-15, etc. up to the last group, where 7 specifies
channels 56-63.

To gain control over the selected channel group, we need to send to you an
internal version of HSM and tms32ii.out file that we use for board testing
which allows entry of channel numbers higher than 7.  That version allows the
"group" to be selected, but still does not cross group boundaries.  I.e. you can
enter in HSM functions values contained in the range of 0-7 and get correct
results, values containined in the range 8-15 or 16-23, etc. but if you entered (for
example) 7 for TRACE 1 in the Digital Scope function and 8 for TRACE 2, then
group 1 would be selected and you would actually see channels 15 and 8 and
not 7 and 8.

Also, see my additional comments below.

>2) Is there a list of the matlab calls and what they do?

My best advice here:

  -the MATLAB function calls are nearly identical to their C/C++ and Visual 
   Basic counterparts, but without the "DS" prefix.  Therefore standard API
   function documentation applies

  -for some calls that are particular to MATLAB (because of some inherent 
   restrictions such as limited use of pointers and lack of standard Win
   data structures), the best thing is to study the example MATLAB programs 
   (hwtest*.m files) and use one or more of these as a starting point in
   building your own .m programs

>3) Is there a way to set the board so that it is multiplexing all 64
inputs, meaning that all 64 inputs are different. I want to be able to input 16
>different inputs. However, as I said before, some of the inputs are the
same or doing weird things. please let me know if this is a problem with the way
the board is muxing the inputs or if it is just a setting that we are not

If you want to acquire more than 8 inputs at a time and store these values
into the default data buffers accessed by HSM and DirectDSP software, then you
will have to change .asm files in the default C3x Source Code Interface (SCI)
software.  Channel control, sampling rate control, interrupts handling, and
data buffers are defined and fairly well documented inside the C3x SCI.  I seem
to recall that you have the SCI software, but I'm not sure (the marketing folks
call it the "Real-Time Option" on the University Package web pages).

If you go down this path, then along with the updated tms32ii.out file, we
will send you the modified DSP source code files, including t30def.asm and
ad64init.asm.  With these files you can see how the channel multiplexing
"group register" is set on the ADC64 board.  Then, you will have to modify the
interrupt service routine for ADC64 board (contained in isr_ad64.asm file)
to automatically set the group register depending on the channel list.  For
example, if you want to acquire channels 0-15 then on every sample interrupt
(every entry into the ISR) the group register value must flip back and forth
from 0 (ch 0-7) to 1 (ch 8-15).  Also, for this example, the programmed
sample rate on the board (handled inside ad64init.asm) must be doubled to account
for the group switching; in general, the programmed sample rate must be Nx the
rate set by the host (x), where N is the number of channel groups that are

Jeff Brower

Subject: Re: data acquisition and calculation in real-time with ADC64 board
Date: Mon, 11 Feb 2002 19:44:03 GMT
From: Jeff 
To: Ari 
CC: Mai , Trinh 


>   We were using dscope.m and op mode 2. We were making changes to
DSP_CHANLIST in order to get the 2 channels working. We couldn't figure 
out how to get more than two working. We tried several different values 
for DSP_CHANLIST. Each gave us different responses, however, never more 
than 2 channels worked simultaneously.

Mode 2 will only handle 2 channels at any one time.

>What should we do to get 4 channels working, as an example. Or how do we
get 8 channels going simultaneously?

Try mode 0, which should handle up to 8 channels.  Mode 2 is for "frame
based acquisition", suitable for Digital Scope or other "display instrument" type
of application.  Mode 0 is for continuous operation.  Note that in addition to
changing the DSP_OPMODE property, the interrupt service routine (ISR) on the
DSP code side becomes isr0.asm, and the foreground (indefinite loop) processing
on the DSP code side becomes modul0.asm.

You can still use dscope.cpp, rtcode.cpp, or other example DirectDSP Visual
Studio project/program on the host side.  However, there are few more
properties that you need to initialize in mode 0; see the "Strip-Chart Recorder"
(strip.cpp) example code to catch these.

Jeff Brower