Instrument control package: Difference between revisions

Jump to navigation Jump to search
(→‎MacOS: Add a workarround to install the package if rpcgen cannot be build from source and the VXI-11 interface is not required.)
(10 intermediate revisions by 5 users not shown)
Line 71: Line 71:
# Prerequisits are that during install of the NI drivers, the C/C++ support  
# Prerequisits are that during install of the NI drivers, the C/C++ support  
# and the NI Measurement & Automation explorer has been enabled.
# and the NI Measurement & Automation explorer has been enabled.
# set the base for includes and libraries on your system
# it is usually /usr, but on newer windows installs of octave, it will be
# /mingw64
INSTALL_BASE=/usr


# this define should find the NI header file, if properly installled
# this define should find the NI header file, if properly installled
Line 79: Line 84:


# symlink NI header file
# symlink NI header file
mkdir -p /usr/include/gpib/
mkdir -p ${INSTALL_BASE}/include/gpib/
ln -sf "${NI_H_FILE}" /usr/include/gpib/ib.h
ln -sf "${NI_H_FILE}" ${INSTALL_BASE}/include/gpib/ib.h


# generate .def for all functions in the NI header file with a NI488CC prefix
# generate .def for all functions in the NI header file with a NI488CC prefix
echo LIBRARY ${NI_DLL_FILE} > ${NI_DEF_FILE}
echo LIBRARY ${NI_DLL_FILE} > ${NI_DEF_FILE}
echo EXPORTS >> ${NI_DEF_FILE}
echo EXPORTS >> ${NI_DEF_FILE}
grep "NI488CC  *[A-Za-z]" /usr/include/gpib/ib.h \
grep "NI488CC  *[A-Za-z]" ${INSTALL_BASE}/include/gpib/ib.h \
   | sed "s/^.*NI488CC  *//" \
   | sed "s/^.*NI488CC  *//" \
   | sed "s/(.*$//" >> ${NI_DEF_FILE}
   | sed "s/(.*$//" >> ${NI_DEF_FILE}


# generate the wrapper library simulating gpib-linux
# generate the wrapper library simulating gpib-linux
dlltool -d ${NI_DEF_FILE} -l /usr/lib/libgpib.a
dlltool -d ${NI_DEF_FILE} -l ${INSTALL_BASE}/lib/libgpib.a


#cleanup  
#cleanup  
Line 100: Line 105:
You need to build '''rpcgen''' from source [http://mirror.ancl.hawaii.edu/pub/FreeBSD/FreeBSD-current/src/usr.bin/rpcgen].
You need to build '''rpcgen''' from source [http://mirror.ancl.hawaii.edu/pub/FreeBSD/FreeBSD-current/src/usr.bin/rpcgen].


If the rpcgen cannot be build from source, the following error might be obtained:
If rpcgen cannot be build from source, the following error might be obtained:
<syntaxhighlight style="font-size:13px">
<syntaxhighlight lang="text"  style="font-size:13px">
pkg: error running `make' for the instrument-control package.
pkg: error running `make' for the instrument-control package.
error: called from
error: called from
Line 355: Line 360:


== i2c ==
== i2c ==
i2c
Example with a Si7021 i2c breakout board (https://www.sparkfun.com/products/1376) connected to a i2c master interface.
 
To work out the devices available (assuming i2ctools are installed) run the i2cdetect command from a terminal window.
 
<syntaxhighlight lang="bash" style="font-size:13px">
$ i2cdetect -l
i2c-1  i2c            i2c-ch341-usb at bus 002 device 008    I2C adapter
i2c-0  unknown        SMBus I801 adapter at 4000              N/
</syntaxhighlight>
 
In the example case the temperature sensor is connected to the i2c-ch341-usb device, and it is assumed the user has sufficient permissions to access the device.
 
According to the datasheet, the temperature device uses address 0x40, so create a i2c device using the linux device and address:
 
<syntaxhighlight lang="octave" style="font-size:13px">
i2cdev = i2c("/dev/i2c-1", 0x40)
</syntaxhighlight>
 
To read  the temperature, register 0xF3 must be addressed and read (2 bytes of data):
 
<syntaxhighlight lang="octave" style="font-size:13px">
TEMP_MEASURE_NOHOLD = hex2dec("F3");
fwrite (i2cdev, uint8([TEMP_MEASURE_NOHOLD]));
pause (0.02);
data = fread (i2cdev, 3);
</syntaxhighlight>
 
The data must be converted to a deg K value by making  16 bit number of the value and masking out unused bits.
 
<syntaxhighlight lang="octave" style="font-size:13px">
value = uint16(data(1))*256 + uint16(data(2));
value = bitand (value, hex2dec("FFFC"));
temp_Code = double(value);
</syntaxhighlight>
 
Now convert the temperature to degrees C and display:
 
<syntaxhighlight lang="octave" style="font-size:13px">
C = (175.72*temp_Code/65536)-46.85;
printf ("temperature read %f C\n", C);
</syntaxhighlight>


== TCP ==
== TCP ==
Anonymous user

Navigation menu