200 likes | 470 Views
ECE 103 Engineering Programming Chapter 27 LabJack Introduction. Herbert G. Mayer, PSU CS Status 7/30/2014 Initial content copied verbatim from ECE 103 material developed by Professor Phillip Wong @ PSU ECE. Syllabus. Company & Product Initial Setup LabJack Features LabJack Library ePut
E N D
ECE 103 Engineering ProgrammingChapter 27LabJack Introduction Herbert G. Mayer, PSU CS Status 7/30/2014 Initial content copied verbatim from ECE 103 material developed by Professor Phillip Wong @ PSU ECE
Syllabus • Company & Product • Initial Setup • LabJack Features • LabJack Library • ePut • eGet • Basic LabJack Commands
Company & Product Company: LabJack Corp., 3232 S Vance St STE 100, Lakewood, CO 80227 Product name: LabJack Function: Affordable Multifunction DAQ with USB interface to computer Specific models: T7/T7, U3-LV/U3-HV, and U6/U6-Pro and more ECE 103 uses: U3-LV and U3-HV url: http://labjack.com U3 url: http://labjack.com/u3 LabJack FAQ: http://labjack.com/support/faq User Guide: http://labjack.com/support/u3/users-guide 2
Company & Product Purpose: USB/Ethernet/WiFi based measurement and automation device, providing analog and digital inputs/outputs. Serves as inexpensive, easy interface between computers and physical world U3-LV spec: 12-bit ADC, 0 to 3.6 V U3-HV spec: 12-bit ADC, -10 to +20 V 3
LabJack Features • Model U3-LV (Low Voltage) • 16 flexible I/O (digital input, digital output, or analog input) • Up to 16 12-bit analog inputs (0 → 2.4 V or 0 → 3.6 V, SE or Diff) • Maximum input stream rate of 2.5 → 50 kHz • 2 analog outputs (10-bit, 0-5 V, 16 Hz) • 4 additional digital I/O • Up to 2 timers (pulse timing, PWM output, quadrature input) • Up to 2 counters (32 bit each) • USB 2.0/1.1 interface → Connect to computer via USB cable • Windows, Linux, Mac drivers • Model U3-HV (High Voltage) • First 4 FIO are replaced by dedicated HV analog inputs • The HV inputs have ±10 V or -10/+20 V range 4
Setting Up LabJack Driver software provides the low-level interface between the computer and the LabJack unit A programming library is included with the driver In the FAB 55-17, FAB 60-01, and EB 325 labs, the driver has already been installed on the computers Easiest to use the PSU pre-installed desk-tops, but can be installed on your private laptops too; just download the driver from the LabJack website and install it yourself 5
Accessing LabJack Library LabJack comes with a library file that provides an API for controlling HW This library file must be added to any project’s search path: C:\Program Files\LabJack\Drivers\labjackud.lib This header file must be included in your source file: #include "C:\Program Files\LabJack\Drivers\LabJackUD.h” NOTES: The setup for using GCC+NetBeans is similar, though somewhat more complicated Spelling of library and include file slightly different! 6
Setup Commands These setup commands must be placed at the start of any Visual C program that controls a LabJack unit Load the LabJack UD header file: #include "C:\Program Files\LabJack\Drivers\LabJackUD.h" Add an error handler function: See full programming guide for details. Add these two variable declarations to any C program using LabJack: LJ_ERROR ljError; LJ_HANDLE ljHandle = 0; 7
Open & Configure Found U3 LabJack & Check Error READ LabJack web site: http://labjack.com/support/u3/users-guide/4.2.2/ LJ_ERROR _stdcall OpenLabJack ( long DeviceType, // low or high V long ConnectionType, // USB, WiFi . . . others const char *pAddress, // ID or SerNo of LJ long FirstFound, // if true, ignore others LJ_HANDLE *pHandle // provide address ); 8
Open & Configure Found U3 LabJack & Check Error ljError = OpenLabJack( LJ_dtU3, LJ_ctUSB, "1", 1, & ljHandle ); ljHandleis the unique ID# assigned to the found LabJack Set LabJack to factory default condition: ljError= ePut( ljHandle, LJ_ioPIN_CONFIGURATION_RESET, 0, 0, 0 ); All FIO/EIO set to digital input, DAC set to 0 V, timers & counters disabled Check error status of each issued LabJack command: ErrorHandler( ljError, __LINE__ ); If no error, then this function does nothing; else, it displays relevant error message (Use this after each LabJack command that returns an error code.) 9
ePut() – Write data to an I/O channel, e easy LJ_ERRORePut( LJ_HANDLE Handle, long IOType, long Channel, double Value, // these are the data to be written! long x1 ); Parameters: Handle : Handle returned by OpenLabJack() IOType : Type of I/O request (macro defined in LabJack header) Channel : Channel (bit) number of the particular IOType Value : Contains the data value to be written to the channel x1 : Optional parameter used by some IOTypes; set to 0 Returns: Error code, 0 meaning no error 10
eGet() – Read data from an I/O channel LJ_ERROReGet( LJ_HANDLE Handle, long IOType, long Channel, double * pValue, // these are the data being read long x1 ); Parameters: Handle : Handle returned by OpenLabJack() IOType : The type of request (macros defined in LabJack header) Channel : The channel (bit) number of the particular IOType pValue : Pointer to Value that receives the data x1 : Optional parameter used by some IOTypes Returns: Error code 11
Digital Output Syntax for writing to a digital channel( FIO/EIO/CIO ): ljError = ePut( ljHandle, LJ_ioPUT_DIGITAL_BIT, Bit#, OutState, 0 ); OutState is the desired output state: 0 (logic low) or 1 (logic high) Example: % Output a logic ‘High’ (1) on FIO5 ljError = ePut( ljHandle, LJ_ioPUT_DIGITAL_BIT, 5, 1, 0 ); Example: % Output a logic ‘Low’ (0) on FIO5 state = 0; ljError = ePut( ljHandle, LJ_ioPUT_DIGITAL_BIT, 5, state, 0 ); // note: state == 0 == low 13
Digital Input Syntax for reading from a digital channel (FIO/EIO/CIO): ljError = eGet( ljHandle, LJ_ioGET_DIGITAL_BIT, Bit#, &InState, 0 ); After this command, variable InStateholds either 0 (logic low) or 1 (logic high) as measured by the channel Example: % Read the logic state on FIO5 and save it to variable “InState” ljError = eGet( ljHandle, LJ_ioGET_DIGITAL_BIT, 5, &InState, 0 ); // now InState is assigned 14
Analog Output Syntax for writing to an analog channel (DAC): ljError = ePut( ljHandle, LJ_ioPUT_DAC, DAC#, Volt_value, 0 ); DAC# is the desired DAC channel: 0 (DAC0) or 1 (DAC1) Volt_value is the desired DAC output voltage: 0 to 5 Example: // Generate 2.5V on DAC0 channel ljError = ePut( ljHandle, LJ_ioPUT_DAC, 0, 2.5, 0 ); 15
Analog Input Syntax to enable/disable an FIO channel for analog input (FIO/EIO/AIN): ljError = ePut( ljHandle, LJ_ioPUT_ANALOG_ENABLE_BIT, Bit#, ENA, 0 ); ENA is the desired state: 0 (disable) or 1 (enable) When analog is disabled, the channel reverts back to digital I/O Syntax for reading from an analog channel: ljError = eGet( ljHandle, LJ_ioGET_AIN, Bit#, &Value, 0 ); After this command, Value holds the voltage measured by the FIO4 channel. Example: // Read the analog voltage on FIO4 and assign the value to variable “AIN_volt” ljError = ePut( ljHandle, LJ_ioPUT_ANALOG_ENABLE_BIT, 4, 1, 0 ); ljError = eGet( ljHandle, LJ_ioGET_AIN, 4, &AIN_volt, 0 ); 16
Example: #include <stdio.h> #include "C:\Program Files\LabJack\Drivers\LabJackUD.h" /* Note: Calls to ErrorHandler omitted in this sample code */ int main( void ) { // main LJ_ERROR ljError; /* LabJack error code */ LJ_HANDLE ljHandle = 0; /* ID# assigned to the opened LabJack */ double WriteVal, ReadVal;/* I/O values */ /* Open the first found LabJack U3 */ ljError = OpenLabJack( LJ_dtU3, LJ_ctUSB, "1", 1, & ljHandle ); // here you’d need to check for error condition: if ( ljError ) { . . . /* Set all pin assignments to the factory default condition */ ljError = ePut( ljHandle, LJ_ioPIN_CONFIGURATION_RESET, 0, 0, 0 ); /* Prompt user for FIO4 output value */ printf( "Enter desired FIO4 setting ( 1 for high and 0 for low ): ”); scanf( "%lf", & WriteVal ); /* Write FIO4 value */ ljError = ePut( ljHandle, LJ_ioPUT_DIGITAL_BIT, 4, WriteVal, 0 ); /* Read FIO5 value (assume a wire is connected between FIO4 and FIO5) */ ljError = eGet( ljHandle, LJ_ioGET_DIGITAL_BIT, 5, & ReadVal, 0 ); printf( "FIO5 value = %g\n", ReadVal ); return 0; } //end main 17
For More Detailed Information Available on the course website (LabJack page): LJ_Programming_Guide_MSVS_v1.5.pdf LJ_Programming_Guide_GCC_NetBeans_v1.5.pdf 18