Instrument control package: Difference between revisions

Line 364: Line 364:
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.


{{Code||<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/
}}


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, as as sufficient permissions to access the device as a user.  
Line 372: Line 374:
Accoridng to the datasheet, the temperature device uses address 0x40, so create a i2c device using the linux device and address:
Accoridng to the datasheet, the temperature device uses address 0x40, so create a i2c device using the linux device and address:


{{Code||<syntaxhighlight lang="octave" style="font-size:13px">
i2cdev = i2c("/dev/i2c-1", 0x40)
i2cdev = i2c("/dev/i2c-1", 0x40)
}}


To read  the termaturem register 0xF3 must be addressed and read (2 bytes of data):
To read  the termaturem register 0xF3 must be addressed and read (2 bytes of data):


{{Code||<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);
}}


The data needs to be converted to a 16 bit value and the unused part masked out.
The data needs to be converted to a 16 bit value and the unused part masked out.


{{Code||<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);
}}


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


{{Code||<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);
}}


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