IO Card
We use the multifunction IO card Sensoray s626. Each card had 6 programmable counters/timers, 16 AD channels, 4 DA channels, and a good number of DIOs. For managing the resources of the s626 card, or potentially of multiple cards, we use the class S626sManager.
Single robot mode
For a single robot, one needs only 1 S626 Board is necessary. The initialization of the board is performed with the call s626sManager::init("S626single.txt"). This file S626single.txt holds the following information:
0 // PCI bus board 0
0 // Slot board 0 (Device number)
0 // Board for interrupt timer (-1 for none)
0 // Board for timer
1 // Channel for timer Xa + Xb
After initialization of the robot, we have then the following allocation of the Counter channels:
| J5 | J4 | ||||
|---|---|---|---|---|---|
| Chan. | # | Function | Chan. | # | Function |
| 1A | 0 | Interrupt Timer | 1B | 3 | TR Counter |
| 2A | 1 | Timer low | 2B | 4 | Timer High |
| 3A | 2 | Shoulder Encoder | 3B | 5 | Elbow Encoder |
Dual robot mode
For running two robot, two S626 Board is necessary, mostly due to the necessity to have 8 DA output channels. One could duplicate the set up from the single robot setup. However, to only have to connect two of the 4 Counter ports (24 pin) in the breakout box, I usually tend to rearrange the counters, and timers somewhat. For the dual setup, I initialize the two S626cards with the following text file:
4 // PCI bus board 0
5 // Slot board 0 (Device number)
4 // PCI bus board 1
7 // Slot board 1 (Device number)
0 // Board for interrupt time (-1 for none)
0 // Board for timer
1 // Channel for timer Xa + Xb
Then I initialize the robots and the TR counter, so that I end up with the following allocation:
Board 0:
| J5 | J4 | ||||
|---|---|---|---|---|---|
| Chan. | # | Function | Chan. | # | Function |
| 1A | 0 | Interrupt Timer | 1B | 3 | |
| 2A | 1 | Timer low | 2B | 4 | Timer High |
| 3A | 2 | 3B | 5 | ||
Board 1:
| J5 | J4 | ||||
|---|---|---|---|---|---|
| Chan. | # | Function | Chan. | # | Function |
| 1A | 0 | 1B | 3 | TR Counter | |
| 2A | 1 | Shoulder right | 2B | 4 | Shoulder Left |
| 3A | 2 | Elbow right | 3B | 5 | Elbow Left |
However, the text files used for initialization of Boards and robots make the allocation of functions to channels quite versatile and you can easily fit the setup your needs. Remember that the breakout box has to be wired accordingly.
Breakout Box
J4 and J5 (24 pin ribbon cable connectors) have to be connected to the breakout box in both single and double robot mode. Furthermore J1 (50 pin ribbon connector) from one or both boards, which carries the DA, needs to be connected. J1 also carries the 16 AD channels, providing you with increased flexibility to add frocetransducers, EMG, etc.
The pinouts for J1, J4, and J5 can be found in the instruction in the s626 manual.
![]() |
We utilize one of the counter channels to count the TTL pulse coming from the scanner. The TTL pulses indicate the beginning of each image acquisition. This way, the behavioral paradigm can be synchronized with the the fMRI data acquisition. The counter can deal with TTL pulses as short as 5 microsec. |
