第一次用AD卡~不知如何下手~ |
尚未結案
|
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
poaivy
中階會員 ![]() ![]() ![]() 發表:40 回覆:78 積分:53 註冊:2004-08-09 發送簡訊給我 |
|
daniel__lee
高階會員 ![]() ![]() ![]() ![]() 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
|
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
daniel__lee
高階會員 ![]() ![]() ![]() ![]() 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
一開始你要先對你的板子作初始化 最下面是我以前用1710的程式片段
在.h中你可以找出他已經幫你寫好的函式庫(.lib)的原型
然後挑出你所要用的部分出來就可以了 對初學者來說ㄧ次測試幾個就好,不然太多了很容易出錯.....
由於它的function的命名很不人性化 所以我在另外包裝了一下比較方便自己撰寫 如下是我挑出來的functon 再包裝 你参考看看 祝你成功
//--------------------------------------------------------------------------- AnsiString adc_config(unsigned char chan,unsigned char gain) { AnsiString st; unsigned char buffer; ptAIConfig.DasChan=ptAIVoltageIn.chan=chan; switch(gain) { case 0: buffer=0; st=" /-5V"; break; //-5V TO 5V case 1: buffer=1; st=" /-2.5V"; break; //-2.5V TO 2.5V case 2: buffer=2; st=" /-1.25V"; break; //-1.25V TO 1.25V case 3: buffer=3; st=" /-0.625V"; break; //-0.625V TO 0.625V case 4: buffer=4; st=" /-10V"; break; //-10V TO 10V case 5: buffer=16; st="0-10V"; break; //0V TO 10V case 6: buffer=17; st="0-5V"; break; //0V TO 5V case 7: buffer=18; st="0-2.5V"; break; //0V TO 2.5V case 8: buffer=19; st="0-1.25V"; break; //0V TO 1.25V default: buffer=16; st="0-10V"; break; //0V TO 10V } ptAIConfig.DasGain=ptAIVoltageIn.gain=buffer; ptAIVoltageIn.TrigMode =0; DRV_AIConfig(DriverHandle,(LPT_AIConfig)&ptAIConfig); return st; } //--------------------------------------------------------------------------- float adc_input(USHORT chan) { DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltageIn); return fVoltage; } //--------------------------------------------------------------------------- void dac_config(bool ch,bool MaxValue) { ptAOVoltageOut.chan=ptAOConfig.chan=ch; if(MaxValue==0) ptAOConfig.MaxValue=5; else ptAOConfig.MaxValue=10; DRV_AOConfig(DriverHandle,(LPT_AOConfig)&ptAOConfig); ptAOVoltageOut.OutputValue=0.0; DRV_AOVoltageOut(DriverHandle,(LPT_AOVoltageOut)&ptAOVoltageOut); } //--------------------------------------------------------------------------- void dac_output(bool ch,float Value) { ptAOVoltageOut.chan=ch; ptAOVoltageOut.OutputValue=Value; DRV_AOVoltageOut(DriverHandle,(LPT_AOVoltageOut)&ptAOVoltageOut); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void initial_pci1710() { int nOutEntries; LRESULT ErrCde; // Return error code SHORT gnNumOfDevices;//, gnNumOfSubdevices; // number of installed devices char szErrMsg[80]; // Use for MESSAGEBOX function if ((ErrCde = DRV_DeviceGetNumOfList((SHORT far *)&gnNumOfDevices)) != SUCCESS) { DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg); Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK); exit(0); } if (gnNumOfDevices > MAX_DEVICES) gnNumOfDevices = MAX_DEVICES; // Add type of PC Laboratory Card if ((ErrCde = DRV_DeviceGetList((DEVLIST far *) &DeviceList[0], (SHORT)gnNumOfDevices, (SHORT far *)&nOutEntries)) != (LONG)SUCCESS) { DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg); Application->MessageBox((char *)szErrMsg, "Driver Message", MB_OK); exit(0); } DRV_DeviceOpen(DeviceList[gwDevice].dwDeviceNum,(LONG far *)&DriverHandle); ptDioReadPortByte.value = (USHORT far *)&gwValue; ptDioReadBit.state=(USHORT far *)&gwState; ptDioGetCurrentDOByte.value =(USHORT far *)&gwDoState; ptDioGetCurrentDOBit.state=(USHORT far *)&gwDoState_bit; ptAIVoltageIn.voltage = (FLOAT far *)&fVoltage; outport_byte(0,0xff,0x00);outport_byte(1,0xff,0x00); dac_config(0,1); dac_config(1,1); adc_config(0,5); adc_config(1,5); adc_config(2,5); adc_config(3,5); adc_config(4,5); adc_config(5,5); adc_config(6,5); adc_config(7,5); adc_config(8,5); adc_config(9,5); adc_config(10,5); adc_config(11,5); adc_config(12,5); adc_config(13,5); adc_config(14,5); adc_config(15,5); dac_output(0,0); dac_output(1,0); } //---------------------------------------------------------------------------~ 勿在浮沙上面築高塔 ~
------
~ 勿在浮沙上面築高塔 ~ |
daniel__lee
高階會員 ![]() ![]() ![]() ![]() 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
|
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
daniel__lee
高階會員 ![]() ![]() ![]() ![]() 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
1.此AD卡的cable線是68pin的,我看手冊,其中有一些pin是類比輸入用的,是不是將要捉取信號的電線給接在這些類比輸入的pin上呢?
2.還有接地的pin,是不是連接我電路上的接地? 另外還有二個pin標著 5v、 12v,是不是要接 5v、 12v的電壓上去呢? Sorry這個問題我沒辦法肯定的回答你....
我使用過好幾款研華的版子不過那都是幾年前的事了....現在我手邊也沒有手冊可以幫你看 不過你說的analog input pins 是讓你捉取信號的沒錯,而 5v和 12v應該是他版子上輸出的電壓,你可以用電表量一下 不要貿然送電 不然.....
建議
類比輸出測試比較容易 只要將輸出pin接上電表觀察即可
而類比輸入你可以先將輸入腳和gnd接在一起 看量測值是否為0 接著在將類比輸出 接到類比輸入 觀察送出的電壓是否和讀到的電壓一樣 (須注意輸入與輸出之間的輸出與輸入範圍) ~ 勿在浮沙上面築高塔 ~
------
~ 勿在浮沙上面築高塔 ~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |