background image

With the wait mode special channel above, the following constants are passed in the value parameter to select the behavior when
reading data:

LJ_swNONE         //No wait.  Immediately return available data.
LJ_swALL_OR_NONE  //No wait.  Immediately return requested amount, or none.
LJ_swPUMP         //Advanced message pump wait mode.
LJ_swSLEEP        //Wait until requested amount available.

The backlog special channels return information about how much data is left in the stream buffer on the U3 or in the UD driver.
These parameters are updated whenever a stream packet is read by the driver, and thus might not exactly reflect the current state
of the buffers, but can be useful to detect problems.

When streaming, the processor acquires data at precise intervals, and transfers it to a buffer on the U3 itself. The U3 has a small
buffer (512-984 samples) for data waiting to be transferred to the host. The 

LJ_chSTREAM_BACKLOG_COMM

 special channel

specifies how much data is left in the U3 buffer (

COMM

 or 

CONTROL

 are the same thing on the U3), where 0 means 0% full and

256 would mean 100% full. The UD driver retrieves stream data from the U3 in the background, but if the computer or
communication link is too slow for some reason, the driver might not be able to read the data as fast as the U3 is acquiring it, and
thus there will be data left over in the U3 buffer.

To obtain the maximum stream rates documented in Section 3.2, the data must be transferred between host and U3 in large
chunks. The amount of data transferred per low-level packet is controlled by 

LJ_chSTREAM_SAMPLES_PER_PACKET

. The

driver will use the parameter 

LJ_chSTREAM_READS_PER_SECOND

 to determine how many low-level packets to retrieve per

read.

The size of the UD stream buffer on the host is controlled by 

LJ_chSTREAM_BUFFER_SIZE

. The application software on the

host must read data out of the UD stream buffer fast enough to prevent overflow. After each read, use

LJ_chSTREAM_BACKLOG_UD

 to determine how many samples are left in the buffer.

Since the data buffer on the U3 is very small a feature called auto-recovery is used. If the buffer overflows, the U3 will continue
streaming but discard data until the buffer is emptied, and then data will be stored in the buffer again. The U3 keeps track of how
many packets are discarded and reports that value. Based on the number of packets discarded, the UD driver adds the proper
number of dummy samples (-9999.0) such that the correct timing is maintained. Auto-recovery will generally occur when the U3
buffer is 90-95% full.

In stream mode the LabJack acquires inputs at a fixed interval, controlled by the hardware clock on the device itself, and stores the
data in a buffer. The LabJackUD driver automatically reads data from the hardware buffer and stores it in a PC RAM buffer until
requested. The general procedure for streaming is:

Update configuration parameters.
Build the scan list.
Start the stream.
Periodically retrieve stream data in a loop.
Stop the stream.

Following is example pseudocode to configure a 2-channel stream.

//Set the scan rate.
AddRequest (lngHandle, LJ_ioPUT_CONFIG, LJ_chSTREAM_SCAN_FREQUENCY, scanRate, 0, 0);

//Give the UD driver a 5 second buffer (scanRate * 2 channels * 5 seconds).
AddRequest (lngHandle, LJ_ioPUT_CONFIG, LJ_chSTREAM_BUFFER_SIZE, scanRate*2*5, 0, 0);

//Configure reads to wait and retrieve the desired amount of data.
AddRequest (lngHandle, LJ_ioPUT_CONFIG, LJ_chSTREAM_WAIT_MODE, LJ_swSLEEP, 0, 0);

//Define the scan list as singled ended AIN2 then differential AIN3-AIN9.
AddRequest (lngHandle, LJ_ioCLEAR_STREAM_CHANNELS, 0, 0, 0, 0);
AddRequest (lngHandle, LJ_ioADD_STREAM_CHANNEL, 2, 0, 0, 0);
AddRequest (lngHandle, LJ_ioADD_STREAM_CHANNEL_DIFF, 3, 0, 9, 0);

//Execute the requests.
GoOne (lngHandle);

Next, start the stream:

//Start the stream.
eGet(lngHandle, LJ_ioSTART_STREAM, 0, &dblValue, 0);

//The actual scan rate is dependent on how the desired scan rate divides into
//the LabJack clock.  The actual scan rate is returned in the value parameter
//from the start stream command.
actualScanRate = dblValue;
actualSampleRate = 2*dblValue;

Once a stream is started, the data must be retrieved periodically to prevent the buffer from overflowing. To retrieve data, add a
request with IOType 

LJ_ioGET_STREAM_DATA

. The Channel parameter should be 

LJ_chALL_CHANNELS

 or a specific

channel number (ignored for a single channel stream). The Value parameter should be the number of scans (all channels) or
samples (single channel) to retrieve. The x1 parameter should be a pointer to an array that has been initialized to a sufficient size.
Keep in mind that the required number of elements if retrieving all channels is number of scans * number of channels.

Data is stored interleaved across all streaming channels. In other words, if two channels are streaming, 0 and 1, and

LJ_chALL_CHANNELS

 is the channel number for the read request, the data will be returned as Channel0, Channel1, Channel0,

Channel1, etc. Once the data is read it is removed from the internal buffer, and the next read will give new data.

If multiple channels are being streamed, data can be retrieved one channel at a time by passing a specific channel number in the
request. In this case the data is not removed from the internal buffer until the last channel in the scan is requested. Reading the
data from the last channel (not necessarily all channels) is the trigger that causes the block of data to be removed from the buffer.
This means that if three channels are streaming, 0, 1 and 2 (in that order in the scan list), and data is requested from channel 0,
then channel 1, then channel 0 again, the request for channel 0 the second time will return the same data as the first request. New
data will not be retrieved until after channel 2 is read, since channel 2 is last in the scan list. If the first get stream data request is for
10 samples from channel 1, the reads from channels 0 and 2 also must be for 10 samples. Note that when reading stream data
one channel at a time (not using 

LJ_chALL_CHANNELS

), the scan list cannot have duplicate channel numbers.

There are three basic wait modes for retrieving the data:

LJ_swNONE: The Go call will retrieve whatever data is available at the time of the call up to the requested amount of data. A
Get command should be called to determine how many scans were retrieved. This is generally used with a software timed
read interval. The number of samples read per loop iteration will vary, but the time per loop iteration will be pretty consistent.
Since the LabJack clock could be faster than the PC clock, it is recommended to request more scans than are expected
each time so that the application does not get behind.
LJ_swSLEEP: This makes the Go command a blocking call. The Go command will loop until the requested amount of is
retrieved or no new data arrives from the device before timeout. In this mode, the hardware dictates the timing of the
application … you generally do not want to add a software delay in the read loop. The time per loop iteration will vary, but the
number of samples read per loop will be the same every time. A Get command should be called to determine whether all the
data was retrieved, or a timeout condition occurred and none of the data was retrieved.
LJ_swALL_OR_NONE: If available, the Go call will retrieve the amount of data requested, otherwise it will retrieve no data. A
Get command should be called to determine whether all the data was returned or none. This could be a good mode if
hardware timed execution is desirable, but without the application continuously waiting in SLEEP mode.

The following pseudocode reads data continuously in SLEEP mode as configured above:

//Read data until done.

37

Summary of Contents for LJU3-LV

Page 1: ...sponsible for shipping to LabJack Corporation and LabJack Corporation will pay for the return shipping Limitation of Liability LabJack designs and manufactures measurement and automation peripherals t...

Page 2: ...entry below the serial number to bring up the U3 configuration panel Click on Test in the configuration panel to bring up the test panel where you can view and control the various I O on the U3 If LJ...

Page 3: ...14 exe Size 49 99 MB Upload date 2014 10 14 12 45 The LabJack Control Panel application LJCP handles configuration and testing of the UD series hardware Click on the Find Devices button to search for...

Page 4: ...or Ethernet devices using specified IP addresses Only applies to UE9 device LJControlPanel is normally installed by the main LabJack installer which is the link at the top of the page 1 2 Self Upgrade...

Page 5: ...rent I O areas Communication Edge Screw Terminal Edge DB Edge The communication edge has a USB type B connector with black cable connected in Figure 2 1 All power and communication is handled by the U...

Page 6: ...tal operations including analog digital configuration are ignored on these 4 fixed analog inputs Timers and counters can appear on various pins but other I O lines never move For example Timer1 can ap...

Page 7: ...Negative Channel Numbers Positive channel 31 puts the internal Vreg 3 3 volts on the positive input of the ADC See Section 2 6 4 for information about the internal temperature sensor If the negative c...

Page 8: ...aging the U3 but more thought is required to determine what is necessary to make useful measurements with the U3 or any measurement device Voltage versus ground The single ended analog inputs on the U...

Page 9: ...es are noted connect the ground to U3 SGND with a 100 series resistor Then again use the DMM to measure the voltage of each signal wire before connecting to the U3 Another good general rule is to use...

Page 10: ...Figure 2 6 2 where one of the resistors is known and the other is the unknown If Vin is known and Vout is measured the voltage divider equation can be rearranged to solve for the unknown resistance 2...

Page 11: ...e other channel to GND with a small jumper and then take a differential reading of your channel compared to that grounded channel The nominal input range of a high voltage single ended analog input is...

Page 12: ...d offset but of course the op amp must be powered with supplies greater than the desired output range depending on the ability of the op amp to drive it s outputs close to the power rails If 10 12 or...

Page 13: ...h bit of I O corresponds to the same bit in the parameter e g the direction of FIO0 is set in bit 0 of parameter FIODir For instance in the low level function ConfigU3 the parameter FIODirection is a...

Page 14: ...tal input to about 3 3 volts logic high When the switch is closed the ground connection will overpower the pull up resistor and pull the digital input to 0 volts logic low Since the mechanical switch...

Page 15: ...ll turn on When the digital line is set to input it is the equivalent of a 3 3 volt connection with 100 k in series The resulting voltage across the control inputs of the relay will be close to zero a...

Page 16: ...Hz 2 22 48 MHz default 3 23 1 MHz Divisor 4 24 4 MHz Divisor 5 25 12 MHz Divisor 6 26 48 MHz Divisor Table 2 9 2 U3 Timer Clock Base Options Note that these clocks apply to the U3 hardware revision 1...

Page 17: ...an interrupt 61 times per second If this interrupt happens to be in progress when the edge occurs a delay of about 1 microsecond is possible If the software watchdog is enabled the system timer inter...

Page 18: ...is 100 Hz that means the period is 10 milliseconds and thus after the command is received by the device it could be anywhere from 0 to 10 milliseconds before the start of the frequency output Frequen...

Page 19: ...timing modes described above modes 2 3 except that hardware capture registers are used to record the edge times This limits the times to 16 bit values but is accurate to the resolution of the clock a...

Page 20: ...e ability of these lines to sink or source current Refer to the specifications in AppendixA All digital I O on the U3 have 3 possible states input output high or output low Each bit of I O can be conf...

Page 21: ...corner Then clockwise it goes Vbus 5 volts lower right pin 1 red wire D lower left pin 2 white wire and D upper left pin 3 green wire If you have a shield wire it can be connected to either of the lar...

Page 22: ...FIO4 EIO7 are still available as flexible I O same as the U3 LV Revision 1 20 21 U3s cannot be upgraded to 1 30 3 Operation The following sections discuss command response mode and stream mode Comman...

Page 23: ...the UD driver will split it like that The tables above were measured with U3 hardware version 1 21 which started shipping in late August of 2006 The times could be up to twice as long with hardware ve...

Page 24: ...roll but the MSW be captured before it is incremented That means that only the LSW is reliable and thus you might as well just use the 16 bit modes Mode 11 the upper 32 bits of the system timer is not...

Page 25: ...ut to all request result functions that tells the function what LabJack it is talking to The handle is obtained from the OpenLabJack function IOType This is an input to all request result functions th...

Page 26: ...at follow are written in C To help those unfamiliar with strings in C these functions expect null terminated 8 bit ASCII strings How this translates to a particular development environment is beyond t...

Page 27: ...eful for passing string constants in languages that cannot include the header file and is generally only used with the put get config IOTypes The strings should contain the constant name as indicated...

Page 28: ...f information with the request to allow a generic parser to determine what should be done when the results are received Outputs None 4 2 6 Go After using AddRequest to make an internal list of request...

Page 29: ...either function returns LJE_NO_MORE_DATA_AVAILABLE there are no more items in the list of results Items can be read more than once by calling GetFirstResult to move back to the beginning of the list U...

Page 30: ...scription Returns Constant number of the passed string Inputs pString A pointer to the string representation of the constant Outputs None 4 2 13 ErrorToString Outputs a string describing the given err...

Page 31: ...on the U3 Resolution Pass a nonzero value to enable QuickSample Settling Pass a nonzero value to enable LongSettling Binary If this is nonzero True the Voltage parameter will return the raw binary va...

Page 32: ...ckBaseIndex Pass a constant to set the timer base clock The default is device specific 4 TimerClockDivisor Pass a divisor from 0 255 where 0 is a divisor of 256 aTimerModes An array where each element...

Page 33: ...LE_PORT x1 is number of bits LJ_ioGET_ANALOG_ENABLE_PORT x1 is number of bits When a request is done with one of the port IOTypes the Channel parameter is used to specify the starting bit number and t...

Page 34: ...t a read of AIN1 using the special 0 3 6 volt range AddRequest lngHandle LJ_ioGET_AIN_DIFF 1 0 32 0 Execute the requests GoOne lngHandle Since multiple requests were made with the same IOType and Chan...

Page 35: ..._PORT 4 0 10 0 Set FIO3 to output high AddRequest lngHandle LJ_ioPUT_DIGITAL_BIT 3 1 0 0 Set EIO6 CIO2 5 bits starting from digital channel 14 to b10100 d20 That is EIO6 0 EIO7 0 CIO0 1 CIO1 0 and CIO...

Page 36: ...d dblHighCycles double unsigned long dblValue 65536 dblLowCycles double unsigned long dblValue 65536 dblDutyCycle 100 dblHighCycles dblHighCycles dblLowCycles dblHighTime 0 000001 dblHighCycles dblLow...

Page 37: ...the stream Start the stream eGet lngHandle LJ_ioSTART_STREAM 0 dblValue 0 The actual scan rate is dependent on how the desired scan rate divides into the LabJack clock The actual scan rate is returned...

Page 38: ...RAW_OUT 0 numBytesToWrite pwriteArray Raw In This command reads the bytes from the device eGet lngHandle LJ_ioRAW_IN 0 numBytesToRead preadArray 4 3 9 Easy Functions The easy functions are simple alte...

Page 39: ..._CLOCK_FACTOR LJ_chSPI_MOSI_PIN_NUM LJ_chSPI_MISO_PIN_NUM LJ_chSPI_CLK_PIN_NUM LJ_chSPI_CS_PIN_NUM Following is example pseudocode to configure SPI communication First configure the SPI communication...

Page 40: ...ial protocol Using this serial protocol is considered an advanced topic A good knowledge of the protocol is recommended and a logic analyzer or oscilloscope might be needed for troubleshooting Also co...

Page 41: ...not actually sent to the hardware until the LJ_ioSWDT_CONFIG IOType above is used LJ_chSWDT_RESET_DEVICE LJ_chSWDT_UDPATE_DIOA LJ_chSWDT_DIOA_CHANNEL LJ_chSWDT_DIOA_STATE Following is example pseudoco...

Page 42: ...ious scan completed Scan rate is too high 61 LJE_FIRMWARE_VERSION_IOTYPE IOType not supported with this firmware 62 LJE_FIRMWARE_VERSION_CHANNEL Channel not supported with this firmware 63 LJE_FIRMWAR...

Page 43: ...umulator 3 Divide by 28 and sum the quotient and remainder 4 Divide by 28 and sum the quotient and remainder Destination bit This bit specifies whether the command is destined for the local or remote...

Page 44: ...Mask1 Reserved 8 LocalID 9 TimerCounterConfig Bits 4 7 TimerCounterPinOffset Bit 3 Enable Counter1 Bit 2 Enable Counter0 Bit 0 1 Number of timers enabled 10 FIOAnalog 11 FIODirection 12 FIOState 13 EI...

Page 45: ...fies U3C and if set then bit 4 specifies HV version 5 2 3 ConfigIO Writes and reads the current IO configuration Command Byte 0 Checksum8 1 0xF8 2 0x03 3 0x0B 4 Checksum16 LSB 5 Checksum16 MSB 6 Write...

Page 46: ...s Since this command has a flexible size byte 2 will vary For instance if a single IOType of PortStateRead d26 is passed byte 2 would be equal to 1 for the command and 3 for the response If a single I...

Page 47: ...IN LSB MSB Analog input reading is returned justified as a 16 bit value always unsigned LabJackPython example session Automatically extracted from u3 py Debugging turned on to show the bytes sent and...

Page 48: ...Automatically extracted from u3 py Debugging turned on to show the bytes sent and received 5 2 5 6 BitStateWrite IOType 11 BitStateWrite 2 Command Bytes 0 IOType 11 1 Bits 0 4 IO Number Bit 7 State 0...

Page 49: ...t specifies whether to update the corresponding bit of I O State Each bit of this value corresponds to the specified bit of I O such that 1 High and 0 Low To set all low State d0 To set all 20 standar...

Page 50: ...y Debugging turned on to show the bytes sent and received 5 2 5 15 Timer IOType 42 44 Timer 4 Command Bytes 0 IOType 42 44 1 Bit 0 UpdateReset 2 Value LSB 3 Value MSB 4 Response Bytes 0 Timer LSB 1 Ti...

Page 51: ...e version 1 30 1 21 Command number 0x2A accesses the user memory area which consists of 512 bytes block numbers 0 15 Command number 0x2D accesses the calibration memory area consisting of 512 bytes bl...

Page 52: ...g Command Byte 0 Checksum8 1 0xF8 2 0x00 0x01 3 0x29 0x2C 4 Checksum16 LSB 5 Checksum16 MSB 6 0x4C 7 0x6C Response Byte 0 Checksum8 1 0xF8 2 0x01 3 0x29 0x2C 4 Checksum16 LSB 5 Checksum16 MSB 6 Errorc...

Page 53: ...15 30 for temp sensor 31 for Vreg or 193 224 for digital timer counter channels NChannel is 0 7 for FIO0 FIO7 8 15 for EIO0 EIO15 30 for Vref or 31 199 for single ended 5 2 11 StreamStart Once the str...

Page 54: ...0 Power up the U3 with a short from FIO6 to SPC FIO2 to SCL on U3 1 20 1 21 then remove the jumper and power cycle the device again This also affects the parameters in the ConfigU3 function The watch...

Page 55: ...ng handled manually outside of this function care must be taken to make sure SCK is initially set to CPOL before asserting CS All standard SPI modes supported A B C and D Mode A CPOL 0 CPHA 0 Mode B C...

Page 56: ...es divided by 2 If the number of bytes is odd round up and add an extra zero to the packet NumAsynchBytesToSend Specifies how many bytes will be sent 0 56 NumAsynchBytesInRXBuffer Returns how many byt...

Page 57: ...s the read write bit Note that the read write bit is controlled automatically by the LabJack and thus bit 0 is ignored NumI2CBytesToSend Specifies how many I C bytes will be sent 0 50 NumI2CBytesToRec...

Page 58: ...yte Offset Description Nominal Values 0 Checksum8 0 0 3 Not Used 0x00 1 0xF8 0 4 FIO Directions 0x00 2 0x01 0 5 FIO States 0xFF 3 0x0E 0 6 FIO Analog 0x00 4 Checksum16 LSB 0 7 Not Used 0x00 5 Checksum...

Page 59: ...formation is only needed when using low level functions and other ways of getting binary readings Readings in volts already have the calibration constants applied The UD driver for example normally re...

Page 60: ...function to retrieve the first 8 blocks of memory This information can then be used to convert all analog input readings to voltages Again the high level Windows DLL LabJackUD does this automatically...

Page 61: ...al LV 2 4 mV Single Ended HV 9 8 mV Special HV 19 5 mV Command Response Speed See Section 3 1 Stream Perfromance See Section 3 2 4 With DAC1 disabled on hardware version 1 30 5 This is the maximum vol...

Page 62: ...to the U3 possible causing poor start up behavior 13 These specifications provide the answer to the question How much current can the digital I O sink or source For instance if EIO0 is configured as...

Page 63: ...PCB Dimensions STEP U3 Enclosure Dimensions DWG U3 Enclosure Dimensions DXF U3 Enclosure Dimensions IGS U3 Enclosure Dimensions STEP U3 Enclosure Drawings zip U3 PCB Dimensions dxf U3 PCB Dimensions p...

Page 64: ...e ack for the address will be reported Improved timer performance Changed the watchdog so that it will not clear until the host computer has read the response Fixed a problem that was causing edge32 a...

Reviews: