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 Stuart- >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 (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. ----------------------------------------------------------------------- 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. Yolanda
Front-end Muxes on Channels
From: Jeff Subject: Re: ADC64 board To: Val Date: 05/12/98 Val- >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. -Jeff
Fixed I/O Signals
From: Jeff Subject: Re: ADC64 board To: Val Date: 05/12/98 Val- > A few more questions to add to the list: >1. With regards to the digital i/o: Data sheet indicates a few possibilities >only: > > 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 Kakaria- >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 peripherals. >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 Ari- >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: -hwtest2.m -dscope.m For the above programs, you should be able to open MATLAB (v5.xx or higher), and enter the following: cd \dspower\hwlib\matlab hwtest2 >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, etc. Also, don't forget to look at Signalogic's technical support web pages, located at: /tech_support/ 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 Ari- >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 used. 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 catching. 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 active. 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 Ari- > 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