/* X202Demo.c: Demo program for X202 Compiler: BC++ 3.1, Turbo C ++ 1.01(3.01) Compile mode: large Project: X202Demo.c ..\..\Lib\7188el.lib ..\..\Lib\Xboard\X202.lib Hardware: 7188EX + X202 [20/May/2005] by Liam [05/Jul/2005] by Liam [Dec 14, 2011] by Nicholas [Maech 16, 2012] by Nicholas */ /********************************************************************/ /* X202: 7 channel 12-Bit A/D (Analog input) 0 ~ 20mA */ /********************************************************************/ /********************************************************************/ /* [Software specific] */ /* Input/Output range: +0.0V(0.0mA) +2.5V(20mA) */ /* Decimal integer: 000 4095 */ /* Hexadecimal: 800 FFF */ /* */ /* [A/D] */ /* sampling rate: 1800 data/sec (with floating convertion) */ /* Accuracy==> Typical: +- 1 LSB (+- 0.6 mV or 4.8mA) */ /* Maximum: +- 2 LSB (+- 1.2 mV or 9.6mA) */ /* [D/O] */ /* throughput: can generates 2KHz square wave signals. */ /********************************************************************/ /********************************************************************/ /* [Caution] */ /* The block 7 first 16 bytes of EEPROM on X board is used to */ /* store A/D & D/A calibration settings. When you use the */ /* EEPROM on X board, don't overwrite it. */ /********************************************************************/ #include #include "..\..\lib\7188e.h" #include "..\..\lib\XBoard\X202.h" void UserTimerFunction(void); void main(void) { int iAction, quit; int iChannel,iValue; float fValue; int iFlag=0; InitLib(); X202_Init(); X202_SetDelay(5); //Set reading exchanged A/D channel delay time 0.05ms Puts("\n\rDemo program for 7188EX + X202\n\r"); while(iAction!=5) { iAction=0; quit=0; Puts("\n\r"); Puts("1) Reads setting from EEPROM\n\r"); Puts("2) A/D (Analog input)\n\r"); Puts("3) A/D (Analog input) read 32767 times\n\r"); Puts("4) Start User's Timer Function to read A/D ch0, the interval is 2 sec\n\r"); Puts("\n\r"); Puts("5) Quits demo program\n\r\n\r"); Puts("Choose an option and press [Enter]:"); Scanf("%d",&iAction); Puts("\n\r"); switch(iAction) { // Reads settings from EEPROM(on X board) case 1: iValue=X202_Init(); if((iValue&1)==0) Print("EEPROM A/D Gain ==> [%8.6f]\n\r",X202_fAD_Gain); else Print("No setting in EEPROM, A/D Gain ==> %8.6f\n\r",X202_fAD_Gain); if((iValue&2)==0) Print("EEPROM A/D Offset ==> [%8.6f]\n\r",X202_fAD_Offset); else Print("No setting in EEPROM, A/D Offset ==> %8.6f\n\r",X202_fAD_Offset); break; // A/D (Analog input) case 2: Puts("Please select A/D channel(0~6): "); Scanf("%d", &iChannel); if(iChannel>6) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } fValue=X202_AnalogIn(iChannel); Print("AI[%d]= %6.4fmA\n\r", iChannel, fValue); break; // A/D (Analog input) reads 32767 times case 3: Puts("Please select A/D channel(0~6): "); Scanf("%d",&iChannel); if(iChannel>6) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } fValue=X202_AnalogInHexToFloat(X202_AnalogIn_no(iChannel,32767)); Print("AI[%d]= %6.4fmA\n\r\n\r", iChannel, fValue); break; //Start User's Timer Function, the interval is 2 sec case 4: if(iFlag==0) { iFlag=1; InstallUserTimerFunction_ms(2000,UserTimerFunction); } break; case 5: if(iFlag==1) StopUserTimerFun(); default: quit=1; break; } if(!quit) { Puts("Press any key to continue...\n\r"); Getch(); } } } void UserTimerFunction(void) { int iInChannel=0; float fValue; fValue=X202_AnalogIn(iInChannel); Print("AI[%d]= %6.4fmA\n\r\n\r", iInChannel, fValue); }