/* XW304.c: Demo program for XW304 Compiler: BC++ 3.1 Turbo C++ 1.01 (3.01) Compile mode: large Project: XW304.c ..\..\lib\upac5000.lib ..\..\lib\XWBoard\XW304.lib Hardware: uPAC-5000 + XW304 [Mar 29, 2012] by Liam */ /*****************************************************************/ /* XW304: 6 channel 12-Bit A/D (Analog input) +/-5.0V or 0~5V */ /* 1 channel 12-Bit D/A (Analog output) +/-5.0V */ /* 4 channel D/I */ /* 4 channel D/O */ /*****************************************************************/ #include #include "..\..\lib\uPAC5000.h" #include "..\lib\XW304.h" void main(void) { int i, iRet, iOption, iQuit=0; unsigned uLibVersion; char szLibDate[16]; int iChannel, iDOValue, iState; float fValue; InitLib(); /* Initiate the XW304 library*/ if((iRet=XW304_Init())!=0) { Print("XW304 initiate failed [%X]\r\n", iRet); return; } Puts("\r\n"); Puts("*****************************************\r\n"); Puts("| Demo program for uPAC-5000 + XW304 |\r\n"); Puts("| |\r\n"); Puts("| [Mar 29, 2012] |\r\n"); Puts("*****************************************\r\n"); /* Read the version information of XW304 library */ uLibVersion=XW304_GetLibVersion(); XW304_GetLibDate(szLibDate); Print("\nXW310.lib version %X.%02X, %s\r\n", uLibVersion>>8, uLibVersion&0xFF, szLibDate); while(!iQuit) { Puts("\r\n"); Puts("1) Read the calibration data\r\n"); Puts("2) Analog Input (+/-5V)\r\n"); Puts("3) Analog Input (0~5V)\r\n"); Puts("4) Analog Output (0~5V)\r\n"); Puts("5) Read DI (all channels)\r\n"); Puts("6) Read DI (one channel)\r\n"); Puts("7) Write DO (all channels)\r\n"); Puts("8) Write DO (one channel)\r\n"); Puts("9) DO Readback (all channels)\r\n"); Puts("10) DO Readback (one channel)\r\n"); Puts("\r\n"); Puts("0) Quit demo program\r\n\r\n"); Puts("Choose an option and press [Enter]: "); Scanf("%d", &iOption); Puts("\r\n"); switch(iOption) { case 1: if((iRet&0x01)==0) Print("EEPROM A/D Gain ==> [%8.6f]\r\n", XW304_Read_AD_Gain(AI_TYPE1)); else Print("No setting in EEPROM\r\n"); if((iRet&0x02)==0) Print("EEPROM A/D Offset ==> [%8.6f]\r\n", XW304_Read_AD_Offset(AI_TYPE1)); else Print("No setting in EEPROM\r\n"); if((iRet&0x04)==0) Print("EEPROM A/D Gain ==> [%8.6f]\r\n", XW304_Read_AD_Gain(AI_TYPE2)); else Print("No setting in EEPROM\r\n"); if((iRet&0x08)==0) Print("EEPROM A/D Offset ==> [%8.6f]\r\n", XW304_Read_AD_Offset(AI_TYPE2)); else Print("No setting in EEPROM\r\n"); if((iRet&0x10)==0) Print("EEPROM D/A Gain ==> [%8.6f]\r\n", XW304_Read_DA_Gain()); else Print("No setting in EEPROM\r\n"); if((iRet&0x20)==0) Print("EEPROM D/A Offset ==> [%8.6f]\r\n", XW304_Read_DA_Offset()); else Print("No setting in EEPROM\r\n"); break; case 2: /* Note that the JP2 jumper must be set on pin 1 and 2 (-5 ~ 5V) */ Puts("Channel (0~5): "); Scanf("%d", &iChannel); if(iChannel>5) { Puts("Unknow Channel Number!!\r\n"); break; } Print("AI%d => %6.4fV\r\n", iChannel, XW304_AnalogIn(AI_TYPE1, iChannel)); break; case 3: /* Note that the JP2 jumper must be set on pin 2 and 3 (0 ~ 5V) */ Puts("Channel (0~5): "); Scanf("%d", &iChannel); if(iChannel>5) { Puts("Unknow Channel Number!!\r\n"); break; } Print("AI%d => %6.4fV\r\n", iChannel, XW304_AnalogIn(AI_TYPE2, iChannel)); break; case 4: Puts("Voltage (-5.0 ~ +5.0): "); Scanf("%f", &fValue); XW304_AnalogOut(fValue); Print("AO => %6.4fV\r\n", fValue); break; case 5: Print("Input state => 0x%02X\r\n", XW304_Read_All_DI()); break; case 6: Print("DI Channel (0~3): "); Scanf("%d", &iChannel); if(iChannel>3) { Puts("Unknow Channel Number!!\r\n"); break; } iDOValue=XW304_Read_One_DI(iChannel); Print("DI%d => %s\r\n", iChannel, iDOValue==0?"ON":"OFF"); break; case 7: Print("DO Output state (0~f): "); Scanf("%x", &iDOValue); XW304_Write_All_DO(iDOValue); Print("Output state => 0x%02X\r\n", iDOValue); break; case 8: Print("DO Channel (0~3) and status (0:OFF, 1:ON): "); Scanf("%d %d", &iChannel, &iState); if(iChannel>3) { Puts("Unknow Channel Number!!\r\n"); break; } XW304_Write_One_DO(iChannel, iState); Print("DO%d => %s\r\n", iChannel, iState==0?"OFF":"ON"); break; case 9: Print("DO ReadBack => 0x%02X\r\n", XW304_Read_All_DO()); break; case 10: Print("DO Channel (0~3): "); Scanf("%d", &iChannel); if(iChannel>3) { Puts("Unknow Channel Number!!\r\n"); break; } iDOValue=XW304_Read_One_DO(iChannel); Print("DO%d => %s\r\n", iChannel, iDOValue==0?"OFF":"ON"); break; case 0: iQuit=1; break; default: break; } if(!iQuit) { Puts("\r\nPress any key to continue...\r\n"); Getch(); } } }