/* X702Demo.c: Demo program for Xboard 702 Compiler: BC++ 3.1 Turbo C ++ 1.01(3.01) Compile mode: large Project: X702Demo.c ..\..\Lib\7188el.lib ..\..\Lib\Xboard\X702.lib Hardware: I-7188EX + X702 [May 25, 2011] by Nicholas /********************************************************************/ /* X702: X702: 2-axis encoder counter */ /* */ /* Common Features */ /* 24-bit encoder counter */ /* Encoder mode: Quadrant, CW/CCW , Pulse/Direction */ /* Maximum counting rate:1MHz */ /* Input Level: Input 5V */ /* Logic High: 3.5V~5V */ /* Logic Low : 0V~2V */ /* */ /********************************************************************/ #include #include #include #include "..\..\lib\7188e.h" #include "..\..\lib\XBoard\X702.h" typedef struct myconfig{ int mode; int xor; int latched_status; int latched_enable; long presetval; int a_status; int b_status; int c_status; } MyConfig; MyConfig Config[2+1]; void main(void) { char szVer[16]; int iAction=0; int iChannel,iMode,iXOR,err; int quit=0; long enVal,lValue; float freq; InitLib(); X702_Init(); Puts("\n\rDemo program for I-7188EX + X702\n\r"); Print("The X702 HardwareID: %d\n\r",X702_GetHardwareID()); Print("The X702 Lattice Version :%d\n\r",X702_GetLatticeVersion()); Print("The X702 Lib Version: %d \n\r",X702_GetLibVersion()); //memset(szVer, 0x0, sizeof(szVer)); memset(szVer,'\0',sizeof(szVer)); X702_GetLibDate((char *) szVer); Print("The Lib Data:%s\n\r",szVer); while(iAction!=10) { iAction=0; quit=0; Puts("1) Set Channel mode \n\r"); Puts("2) Get Line state \n\r"); Puts("3) Set XOR \n\r"); Puts("4) Read Encoder \n\r"); Puts("5) Reset Encoder \n\r"); Puts("6) Set Indexlatch \n\r"); Puts("7) Clear Latch \n\r"); Puts("8) Set Present Value \n\r"); Puts("9) Get Index Latch Status \n\r"); Puts("\r\n"); Puts("10) Quits demo program\r\n\r\n"); Puts("Choose an option and press [Enter]: "); Scanf("%d",&iAction); switch(iAction) { case 1: iChannel=0; iMode=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); Print("Select mode:\n\r 1. CW/CCW mode 2. Pulse/Direction mode 3. A/B phase mode \n\r"); Scanf("%d",&iMode); if(iChannel>2 || iChannel<1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } if(iMode>3 || iMode<1) { Puts("Unknow Mode Setting!!\r\n\r\n"); break; } Print("\n\r"); X702_SetMode(iChannel,iMode); X702_GetMode(iChannel, &Config[iChannel].mode); Print("ch%d: mode=>%d\n\r",iChannel,Config[iChannel].mode); Print("\n\r"); break; case 2: iChannel=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); if(iChannel>2 || iChannel<1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } Print("\n\r"); X702_GetLineStatus(iChannel, &Config[iChannel].a_status, &Config[iChannel].b_status, &Config[iChannel].c_status); Print("ch%d: A:%d B:%d C:%d\n\r",iChannel,Config[iChannel].a_status,Config[iChannel].b_status,Config[iChannel].c_status); Print("\n\r"); break; case 3: iChannel=0; iXOR=-1; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); Print("Set XOR(0~1): "); Scanf("%d",&iXOR); if(iChannel>2 || iChannel<1) { Puts("Unknow Channel Number!!\r\n\r\n"); } if(iXOR>1 || iXOR<0) { Puts("Unknow XOR Setting!!\r\n\r\n"); } Print("\n\r"); if(X702_SetXOR(iChannel,iXOR)) { X702_GetXOR(iChannel, &Config[iChannel].xor); Print("ch%d XOR: %d\n\r",iChannel, Config[iChannel].xor); } Print("\n\r"); break; case 4: enVal=0; iChannel=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); if(iChannel>2 || iChannel <1) { Puts("Unknow Channel number!!\r\n\r\n"); break; } Print("\n\r"); if(X702_Read32BitEncoder(iChannel, &enVal)==NoError) { Print("ch%d Encoder value: %ld\n\r",iChannel,enVal); Print("\n\r"); } else { Print("Read encoder value error\n\r"); } break; case 5: iChannel=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); if(iChannel>2 || iChannel <1) { Puts("Unknow Channel number!!\r\n\r\n"); break; } Print("\n\r"); Print("ch%d: resetencoder=>%d\n\r",iChannel,X702_ResetEncoder(iChannel)); Print("\n\r"); break; case 6: iChannel=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); if(iChannel >2 || iChannel <1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } Print("latch enable(0/1):"); Scanf("%d",&Config[iChannel].latched_enable); if(Config[iChannel].latched_enable>1 || Config[iChannel].latched_enable <0) { Puts("Unknow latch setting!!\r\n\r\n"); break; } Print("\n\r"); if(X702_SetIndexLatchStatus(iChannel, Config[iChannel].latched_enable)==NoError) { X702_GetIndexLatchStatus(iChannel, &Config[iChannel].latched_status, &Config[iChannel].latched_enable); Print("ch%d: latch_state:%d, latch_enable \n\r", iChannel ,Config[iChannel].latched_status, Config[iChannel].latched_enable); } Print("\n\r"); break; case 7: iChannel=0; Print("Select Channel(1~2)"); Scanf("%d",&iChannel); if(iChannel >2 || iChannel <1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } Print("\n\r"); if(X702_ClearLatchedIndex(iChannel)==NoError) Print("ch%d clear latched success\n\r",iChannel); else Print("ch%d clear latched failed\n\r",iChannel); Print("\n\r"); break; case 8: iChannel=0; Print("Select Channel(1~2): "); Scanf("%d",&iChannel); if(iChannel >2 || iChannel <1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } Print("Set Present value: "); Scanf("%ld",&Config[iChannel].presetval); Print("\n\r"); X702_SetPresetValue(iChannel, Config[iChannel].presetval); Print("%d \n\r",Config[iChannel].presetval); break; case 9: iChannel=0; Print("Select Channel(1~2):"); Scanf("%d",&iChannel); if(iChannel >2 || iChannel <1) { Puts("Unknow Channel Number!!\r\n\r\n"); break; } if(X702_GetIndexLatchStatus(iChannel, &Config[iChannel].latched_status, &Config[iChannel].latched_enable)==NoError) Print("ch%d: latched_status=>%d latched_enable=>%d\n\r",iChannel,Config[iChannel].latched_status, Config[iChannel].latched_enable); else Print("Get ch%d latched error \n\r",iChannel); break; case 10: default: quit=1; break; } if(!quit) { Puts("Press any key to continue...\n\r"); Getch(); } } }