224 lines
6.5 KiB
C
224 lines
6.5 KiB
C
//Author: LabJack
|
|
//May 25, 2011
|
|
//This example program makes 3 SingleIO low-level function calls. One call sets
|
|
//DAC0 to 2.500 V. One call reads voltage from AIN0. One call reads the
|
|
//temperature from the internal temperature sensor. Control firmware version
|
|
//1.03 and above needed for SingleIO.
|
|
#include "ue9.h"
|
|
|
|
|
|
int singleIO_AV_example(HANDLE handle, ue9CalibrationInfo *caliInfo);
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
HANDLE hDevice;
|
|
ue9CalibrationInfo caliInfo;
|
|
|
|
//Opening first found UE9 over USB
|
|
if( (hDevice = openUSBConnection(-1)) == NULL )
|
|
goto done;
|
|
|
|
//Getting calibration information from UE9
|
|
if( getCalibrationInfo(hDevice, &caliInfo) < 0 )
|
|
goto close;
|
|
|
|
singleIO_AV_example(hDevice, &caliInfo);
|
|
|
|
close:
|
|
closeUSBConnection(hDevice);
|
|
done:
|
|
return 0;
|
|
}
|
|
|
|
//Sends 3 SingleIO low-level commands to set DAC0, read AIN0 and read the
|
|
//temperature
|
|
int singleIO_AV_example(HANDLE hDevice, ue9CalibrationInfo *caliInfo)
|
|
{
|
|
uint8 sendBuff[8], recBuff[8], ainResolution;
|
|
uint16 bytesVoltage, bytesTemperature;
|
|
int sendChars, recChars;
|
|
double voltage;
|
|
double temperature; //in Kelvins
|
|
|
|
ainResolution = 12;
|
|
//ainResolution = 18; //high-res mode for UE9 Pro only
|
|
|
|
/* Setting voltage of DAC0 to 2.500 V */
|
|
//if( getDacBinVoltUncalibrated(0, 2.500, &bytesVoltage) < 0 )
|
|
if( getDacBinVoltCalibrated(caliInfo, 0, 2.500, &bytesVoltage) < 0 )
|
|
return -1;
|
|
|
|
sendBuff[1] = (uint8)(0xA3); //Command byte
|
|
sendBuff[2] = (uint8)(0x05); //IOType = 5 (analog out)
|
|
sendBuff[3] = (uint8)(0x00); //Channel = 0 (DAC0)
|
|
sendBuff[4] = (uint8)( bytesVoltage & (0x00FF) ); //low bits of voltage
|
|
sendBuff[5] = (uint8)( bytesVoltage /256 ) + 192; //high bits of voltage
|
|
//(bit 7 : Enable,
|
|
// bit 6: Update)
|
|
sendBuff[6] = (uint8)(0x00); //Settling time - does not apply to analog output
|
|
sendBuff[7] = (uint8)(0x00); //Reserved
|
|
sendBuff[0] = normalChecksum8(sendBuff, 8);
|
|
|
|
//Sending command to UE9
|
|
sendChars = LJUSB_Write(hDevice, sendBuff, 8);
|
|
if( sendChars < 8 )
|
|
{
|
|
if( sendChars == 0 )
|
|
goto sendError0;
|
|
else
|
|
goto sendError1;
|
|
}
|
|
|
|
//Reading response from UE9
|
|
recChars = LJUSB_Read(hDevice, recBuff, 8);
|
|
if( recChars < 8 )
|
|
{
|
|
if( recChars == 0 )
|
|
goto recvError0;
|
|
else
|
|
goto recvError1;
|
|
}
|
|
|
|
if( (uint8)(normalChecksum8(recBuff, 8)) != recBuff[0] )
|
|
goto chksumError;
|
|
|
|
if( recBuff[1] != (uint8)(0xA3) )
|
|
goto commandByteError;
|
|
|
|
if( recBuff[2] != (uint8)(0x05) )
|
|
goto IOTypeError;
|
|
|
|
if( recBuff[3] != 0 )
|
|
goto channelError;
|
|
|
|
printf("Set DAC0 voltage to 2.500 V ...\n");
|
|
|
|
/* Reading voltage from AIN0 */
|
|
sendBuff[1] = (uint8)(0xA3); //Command byte
|
|
sendBuff[2] = (uint8)(0x04); //IOType = 4 (analog in)
|
|
sendBuff[3] = (uint8)(0x00); //Channel = 0 (AIN0)
|
|
sendBuff[4] = (uint8)(0x00); //BipGain (Bip = unipolar, Gain = 1)
|
|
sendBuff[5] = ainResolution; //Resolution
|
|
sendBuff[6] = (uint8)(0x00); //SettlingTime = 0
|
|
sendBuff[7] = (uint8)(0x00); //Reserved
|
|
sendBuff[0] = normalChecksum8(sendBuff, 8);
|
|
|
|
//Sending command to UE9
|
|
sendChars = LJUSB_Write(hDevice, sendBuff, 8);
|
|
if( sendChars < 8 )
|
|
{
|
|
if( sendChars == 0 )
|
|
goto sendError0;
|
|
else
|
|
goto sendError1;
|
|
}
|
|
|
|
//Reading response from UE9
|
|
recChars = LJUSB_Read(hDevice, recBuff, 8);
|
|
if( recChars < 8 )
|
|
{
|
|
if( recChars == 0 )
|
|
goto recvError0;
|
|
else
|
|
goto recvError1;
|
|
}
|
|
|
|
if( (uint8)(normalChecksum8(recBuff, 8)) != recBuff[0] )
|
|
goto chksumError;
|
|
|
|
if( recBuff[1] != (uint8)(0xA3) )
|
|
goto commandByteError;
|
|
|
|
if( recBuff[2] != (uint8)(0x04) )
|
|
goto IOTypeError;
|
|
|
|
if( recBuff[3] != 0 )
|
|
goto channelError;
|
|
|
|
bytesVoltage = recBuff[5] + recBuff[6]*256;
|
|
|
|
//if( getAinVoltUncalibrated(sendBuff[4], ainResolution, bytesVoltage, &voltage) < 0 )
|
|
if( getAinVoltCalibrated(caliInfo, sendBuff[4], ainResolution, bytesVoltage, &voltage) < 0 )
|
|
return -1;
|
|
|
|
printf("Voltage read from AI0: %.4f V\n", voltage);
|
|
|
|
/* Reading temperature from internal temperature sensor */
|
|
sendBuff[1] = (uint8)(0xA3); //Command byte
|
|
sendBuff[2] = (uint8)(0x04); //IOType = 4 (analog in)
|
|
sendBuff[3] = (uint8)(0x85); //Channel = 133 (tempSensor)
|
|
sendBuff[4] = (uint8)(0x00); //Gain = 1 (Bip does not apply)
|
|
sendBuff[5] = (uint8)(0x0C); //Resolution = 12
|
|
sendBuff[6] = (uint8)(0x00); //SettlingTime = 0
|
|
sendBuff[7] = (uint8)(0x00); //Reserved
|
|
sendBuff[0] = normalChecksum8(sendBuff, 8);
|
|
|
|
//Sending command to UE9
|
|
sendChars = LJUSB_Write(hDevice, sendBuff, 8);
|
|
if( sendChars < 8 )
|
|
{
|
|
if( sendChars == 0 )
|
|
goto sendError0;
|
|
else
|
|
goto sendError1;
|
|
}
|
|
|
|
//Reading response from UE9
|
|
recChars = LJUSB_Read(hDevice, recBuff, 8);
|
|
if( recChars < 8 )
|
|
{
|
|
if( recChars == 0 )
|
|
goto recvError0;
|
|
else
|
|
goto recvError1;
|
|
}
|
|
|
|
if( (uint8)(normalChecksum8(recBuff, 8)) != recBuff[0] )
|
|
goto chksumError;
|
|
|
|
if( recBuff[1] != (uint8)(0xA3) )
|
|
goto commandByteError;
|
|
|
|
if( recBuff[2] != (uint8)(0x04) )
|
|
goto IOTypeError;
|
|
|
|
if( recBuff[3] != (uint8)(0x85) )
|
|
goto channelError;
|
|
|
|
bytesTemperature = recBuff[5] + recBuff[6]*256;
|
|
|
|
//Assuming high power level
|
|
//if( getTempKUncalibrated(0, bytesTemperature, &temperature) < 0 )
|
|
if( getTempKCalibrated(caliInfo, 0, bytesTemperature, &temperature) < 0 )
|
|
return -1;
|
|
|
|
printf("Temperature read internal temperature sensor (channel 133): %.1f K\n\n", temperature);
|
|
return 0;
|
|
|
|
//error printouts
|
|
sendError0:
|
|
printf("Error : write failed\n");
|
|
return -1;
|
|
sendError1:
|
|
printf("Error : did not write all of the buffer\n");
|
|
return -1;
|
|
recvError0:
|
|
printf("Error : read failed\n");
|
|
return -1;
|
|
recvError1:
|
|
printf("Error : did not read all of the buffer\n");
|
|
return -1;
|
|
chksumError:
|
|
printf("Error : read buffer has bad checksum\n");
|
|
return -1;
|
|
commandByteError:
|
|
printf("Error : read buffer has wrong command byte\n");
|
|
return -1;
|
|
IOTypeError:
|
|
printf("Error : read buffer has wrong IOType\n");
|
|
return -1;
|
|
channelError:
|
|
printf("Error : read buffer has wrong channel\n");
|
|
return -1;
|
|
}
|