Instrument control package: Difference between revisions

Jump to navigation Jump to search
(8 intermediate revisions by 3 users not shown)
Line 17: Line 17:
! i2c
! i2c
| bgcolor="green" | v0.1.0 || -                        || -                        || bgcolor="skyblue" | stalled || -  
| bgcolor="green" | v0.1.0 || -                        || -                        || bgcolor="skyblue" | stalled || -  
|-
! spi
| bgcolor="green" | v0.6.0 || -                        || -                        || -                          || -
|-
|-
! TCP
! TCP
Line 40: Line 43:
{{Code|Check for interface support|<syntaxhighlight lang="octave" style="font-size:13px">
{{Code|Check for interface support|<syntaxhighlight lang="octave" style="font-size:13px">
pkg load instrument-control
pkg load instrument-control
supportedinterfaces = instrhwinfo().SupportedInterfaces


if (exist("serial") == 3)
if ! isempty(strfind (supportedinterfaces , "serial"))
     disp("Serial: Supported")
     disp("Serial: Supported")
else
else
Line 48: Line 52:


#similarly with:
#similarly with:
#exist("parallel") == 3
# ! isempty(strfind (supportedinterfaces , "parallel"))
#exist("i2c") == 3
# ! isempty(strfind (supportedinterfaces , "i2c"))
</syntaxhighlight>}}
</syntaxhighlight>}}


Line 364: Line 368:
To work out the devices available (assuming i2ctools are installed) run the i2cdetect command from a terminal window.
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
$ i2cdetect -l
i2c-1  i2c            i2c-ch341-usb at bus 002 device 008    I2C adapter
i2c-1  i2c            i2c-ch341-usb at bus 002 device 008    I2C adapter
i2c-0  unknown        SMBus I801 adapter at 4000              N/
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, as as sufficient permissions to access the device as a user.  
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.  


Accoridng to the datasheet, the temperature device uses address 0x40, so create a i2c device using the linux device and address:
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)
i2cdev = i2c("/dev/i2c-1", 0x40)
</syntaxhighlight>


To read  the termaturem register 0xF3 must be addressed and read (2 bytes of data):
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");
TEMP_MEASURE_NOHOLD = hex2dec("F3");
fwrite (i2cdev, uint8([TEMP_MEASURE_NOHOLD]));
fwrite (i2cdev, uint8([TEMP_MEASURE_NOHOLD]));
pause (0.02);
pause (0.02);
data = fread (i2cdev, 3);
data = fread (i2cdev, 3);
</syntaxhighlight>


The data needs to be converted to a 16 bit value and the unused part masked out.
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 = uint16(data(1))*256 + uint16(data(2));
value = bitand (value, hex2dec("FFFC"));
value = bitand (value, hex2dec("FFFC"));
temp_Code = double(value);
temp_Code = double(value);
</syntaxhighlight>


Now convert the temperature to degrees C and display:
Now convert the temperature to degrees C and display:


<syntaxhighlight lang="octave" style="font-size:13px">
C = (175.72*temp_Code/65536)-46.85;
C = (175.72*temp_Code/65536)-46.85;
printf ("temperature read %f C\n", C);
printf ("temperature read %f C\n", C);
</syntaxhighlight>


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

Navigation menu