intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Card thu thập tín hiệu và điều khiển

Chia sẻ: Nguyen Hoang Huu | Ngày: | Loại File: PDF | Số trang:43

65
lượt xem
11
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong khi điều khiển hiện đại tiếp tục theo đuổi khái niệm tiên tiến như fieldbus và mạng mắt lưới, tính đơn giản của MODBUS và thuận tiện ứng dụng thông qua nhiều phương tiện truyền thông vẫn đảm bảo nó là một protocol công nghiệp được sử dụng rộng rãi nhất trên thế giới.

Chủ đề:
Lưu

Nội dung Text: Card thu thập tín hiệu và điều khiển

  1. 5 Chöông CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN 5.1 CARD PCL-818L ADVANTECH PCL-818L laø card ISA coù nhieàu chöùc naêng duøng ñeå ño löôøng vaø ñieàu khieån. Do tính naêng öu vieät cuûa card, vieäc tìm hieåu hoaït ñoäng cuûa noù raát caàn thieát ñeå tieáp caän kyõ thuaät thu thaäp soá lieäu baèng maùy tính DAS (Data Acquisition System). Sau ñaây laø caùc chöùc naêng chính cuûa card: - Chuyeån ñoåi A/D 16 keânh 12 bit toác ñoä laáy maãu 40000/s - Chuyeån ñoåi D/A 1 keânh 12 bit - 16 ngoõ vaøo digital TTL - 16 ngoõ ra digital TTL - 1 Boä ñeám/ ñònh thôøi 16 bit cho ngöôøi duøng Hình 5.1: Vò trí caùc caàu noái, bieán trôû vaø ñaàu noái cuûa card PCL-818L
  2. Hình 5.2: Sô ñoà khoái Card PCL-818L
  3. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 115 Sô ñoà chaân caùc ñaàu noái cuûa card PCL-818L Hình 5.3: Chuù thích A/DS: vaøo Analog (ñôn) DI: vaøo Digital A/DH: vaøo Analog cao (vi sai) DGND: mass Digital vaø nguoàn A/DL: vaøo Analog thaáp (vi sai) CLK: Clock Counter 0 cuûa 8254 AGND: mass Analog GATE: Gate Counter 0 cuûa 8254 D/A: ra Analog OUT: tín hieäu ra cuûa 8254 DO: ra Digital VREF: nguoàn chuaån trong VREF IN: nguoàn chuaån ngoaøi 5.2 CAÙC THANH GHI CUÛA CARD PCL- 818L coù 16 thanh ghi, ñòa chæ goác coù theå choïn bôûi coâng taéc SW1, goàm 6 tieáp ñieåm, choïn caùc ñöôøng ñòa chæ SA4 ÷ SA9, thöôøng ñaët ñòa chæ goác BASE laø 300h. Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  4. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 116 Baûng 5.1 Caùc thanh ghi Ñòa chæ Ñoïc Vieát BASE+0 Byte thaáp A/D vaø soá keânh Kích meàm A/D BASE+1 Byte cao A/D Ñieàu khieån taàm A/D BASE+2 Queùt keânh MUX Queùt keânh MUX vaø chæ taàm ñieàu khieån BASE+3 Byte thaáp Digital Input Byte thaáp Digital Output BASE+4 N/A Byte thaáp Analog Output BASE+5 N/A Byte cao Digital Output BASE+6 N/A N/A BASE+7 N/A N/A BASE+8 Traïng thaùi Xoùa yeâu caàu ngaét BASE+9 Ñieàu khieån Ñieàu khieån BASE+10 N/A Cho pheùp Counter BASE+11 Byte cao Digital Output Byte cao Digital Output BASE+12 Counter 0 Counter 0 BASE+13 Counter 1 Counter 1 BASE+14 Counter 2 Counter 2 BASE+15 N/A Ñieàu khieån counter 5.2.1 Caùc thanh ghi cô sôû + 0 vaø cô sôû +1 Khi ñoïc thanh ghi BASE+0 (ñoïc) - Chöùa Byte thaáp A/D vaø soá keânh Bit D7 D6 D5 D4 D3 D2 D1 D0 Value AD3 AD2 AD1 AD0 C3 C2 C1 C0 BASE+1 (ñoïc) - Byte cao A/D Bit D7 D6 D5 D4 D3 D2 D1 D0 Value AD11 AD10 AD9 AD8 AD7 AD6 AD5 AD4 trong ñoù: AD11 ÷ AD0 laø döõ lieäu Analog ñoåi sang Digital C3 ÷ C0 laø soá cuûa ngoõ vaøo analog töông öùng Khi ghi vaøo thanh ghi BASE+0 : kích meàm boä A/D, khôûi ñoäng ADC. Coù theå kích boä A/D baèng phaàn meàm, hoaëc baèng xung clock treân board (pacer), hoaëc baèng xung ngoaøi. Caùc bit 0 vaø 1 trong BASE+9 seõ choïn nguoàn kích. Neáu choïn kích meàm thì ta chæ vieäc http://www.khvt.com
  5. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 117 ghi vaøo BASE+0 baát cöù moät giaù trò naøo cho moãi laàn kích. Neáu laø kích ngoaøi thì caàu noái JP3 choïn nguoàn kích laø DI0 (CN2) hay TRIG0 (CN3). Ñieàu khieån taàm A/D (BASE+1): Moãi keânh A/D ñeàu coù moät taàm ñieän aùp ngoõ vaøo rieâng cho noù, ñöôïc ñieàu khieån bôûi maõ löu tröõ trong RAM cuûa PCL-818L vaø ñöôïc ñaët bôûi caàu noái JP7. Neáu chuùng ta muoán thay ñoåi taàm cho moät keânh, choïn keânh nhö laø keânh Start ôû thanh ghi BASE+2, queùt kieåu MUX, roài ghi maõ vaøo bit 0 vaø bit 1 cuûa thanh ghi BASE+1. BASE+1 (Ghi) - Ñieàu khieån taàm A/D Bit D7 D6 D5 D4 D3 D2 D1 D0 Value N/A N/A N/A N/A N/A N/A G1 G0 Baûng 5.2 Maõ taàm vaø JP7 Taàm ñieän aùp ngoõ vaøo Maõ taàm JP7 = 5 JP7 = 10 ±5V ±10V 0 0 ±2.5V ±5V 0 1 ±1,25V ±2,5V 1 0 ±0,625V ±1,25V 1 1 5.2.2 Thanh ghi queùt phaân keânh (BASE+2): - Ñoïc/ghi BASE+2 ñeå ñieàu khieån/ñoïc soá keânh A/D ñöôïc queùt. Nöûa byte cao chæ keânh Stop, nöûa byte thaáp chæ keânh Start. Vieäc queùt phaân keânh (MUX) ñöôïc khôûi ñoäng ñeán keânh Start khi chuùng ta ghi vaøo thanh ghi naøy. Moãi Trigger A/D seõ chuyeån ñeán keânh ño tieáp theo. - Khi kích chuyeån ñoåi lieân tuïc, MUX seõ queùt töø keânh Start ñeán keânh Stop roài laëp laïi töø ñaàu. Ví duï, neáu keânh Start laø 4 vaø Stop laø 7 thì queùt tuaàn töï: 4, 5, 6, 7, 4, 5, 6, 7. Neáu caøi ñaët ôû cheá ñoä 8 ñaàu vaøo vi sai thì caùc bit CH3 vaø CL3 phaûi laø 0. - Neáu chæ choïn moät keânh ñeå bieán ñoåi A/D thì caøi ñaët keânh Start vaø Stop cuøng moät trò soá laø soá cuûa keânh caàn thöïc hieän bieán ñoåi A/D. Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  6. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 118 BASE+2 (Vieát) - Caùc keânh queùt ñaàu vaø cuoái Bit D7 D6 D5 D4 D3 D2 D1 D0 Value CH3 CH2 CH1 CH0 CL3 CL2 CL1 CL0 CH3 ÷ CH0 laø keânh Stop, CL3 ÷ CL0 laø keânh Start. Nöûa bit thaáp cuûa thanh ghi queùt phaân keânh CL3 ñeán CL0 cuõng coù taùc duïng nhö 1 con troû khi chuùng ta laäp trình taàm ñieän aùp vaøo A/D. Khi ñaët keânh Start laø N, thì maõ taàm vieát vaøo thanh ghi BASE+1 laø cho keânh N. 5.2.3 Caùc thanh ghi xuaát/nhaäp soá (BASE + 3/11) PCL-818L coù 16 ngoõ vaøo soá vaø 16 ngoõ ra soá rieâng bieät. Caùc keânh I/O naøy duøng chung port coù ñòa chæ BASE+3 vaø BASE+11. Khi ñoïc BASE+3 (ñoïc port) - Byte thaáp Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value D17 D16 D15 D14 D13 D12 D11 D10 BASE+11 (ñoïc port) - Byte cao Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DI15 DI14 DI13 DI12 DI11 DI10 DI9 DI8 Khi ghi BASE+3 (vieát port) - Byte thaáp Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DO7 DO6 DO5 DO4 DO3 DO2 DO1 DO0 BASE+11 (vieát port) - Byte cao Digital Input Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DO15 DO14 DO13 DO12 DO11 DO10 DO9 DO8 5.2.4 Thanh ghi xuaát Analog D/A (BASE + 4/5) Khi ghi BASE+4 - Byte thaáp ngoõ ra D/A Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DA3 DA2 DA1 DA0 x x x x http://www.khvt.com
  7. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 119 BASE+5 – Byte cao ngoõ ra D/A Bit D7 D6 D5 D4 D3 D2 D1 D0 Value DA11 DA10 DA9 DA8 DA7 DA6 DA5 DA4 trong ñoù: DA11 ÷ DA0 laø döõ lieäu Digital sang Analog Taàm ñieän aùp ra ñöôïc choïn nhôø caàu noái JP4 vaø JP5. Neáu JP4 ñaët ôû IN thì JP5 choïn nguoàn chuaån trong laø -5V hay -10V, aùp ra cuûa D/A seõ laø 0 ñeán +5V hay 0 ñeán +10V. Neáu JP4 ñaët vò trí EXT thì ñieän aùp ra D/A laø keát quaû nhaân soá digital trong hai thanh ghi vôùi ñieän aùp ñaët vaøo chaân 31 VREF IN ( -10V..+10V) cuûa ñaàu noái CN3 chia cho 4095. 5.2.5 Thanh ghi traïng thaùi BASE+8 - Ñoïc BASE+ 8 ñeå nhaän thoâng tin veà caáu hình vaø hoaït ñoäng A/D. - Ghi vaøo BASE+ 8 moät giaù trò baát kyø thì noù seõ xoùa bit INT cuûa BASE+ 8, coøn nhöõng bit döõ lieäu khaùc khoâng ñoåi. BASE+8 - Traïng thaùi A/D Bit D7 D6 D5 D4 D3 D2 D1 D0 Value EOC N/A MUX INT CN3 CN2 CN1 CN0 • EOC: End Of Conversion EOC= 0: ñaõ ñoåi xong, keát quaû ñoåi chöùa trong BASE+ 0 vaø BASE+ 1. EOC= 1: ñang chuyeån ñoåi A/D. • MUX: choïn 8 keânh vi sai hoaëc 16 keânh ñôn, phaûn aûnh vò trí caàu noái JP6. MUX= 0: 8 keânh vi sai MUX= 1: 16 keânh ñôn • INT: tín hieäu ngaét INT = 0: döõ lieäu khoâng coù giaù trò (khoâng coù moät bieán ñoåi naøo keå töø khi bit INT bò xoùa). INT = 1: A/D ñaõ bieán ñoåi xong, döõ lieäu coù giaù trò. Neáu bit INTE= 1 (BASE+ 9) thì khi ñoåi xong moät keânh, tín Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  8. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 120 hieäu ngaét seõ gôûi ñeán PC qua ngoõ IRQn (IRQn ñöôïc choïn bôûi caùc bit I2 ÷ I0 trong BASE+9). Duø thanh ghi traïng thaùi A/D laø chæ ñoïc, nhöng khi ghi vaøo noù moät giaù trò baát kyø seõ xoùa bit INT, coøn caùc bit khaùc khoâng ñoåi. CN3÷CN0: khi EOC = 0 thì caùc bit naøy chöùa soá keânh keá • tieáp seõ ñöôïc bieán ñoåi. Löu yù: Neáu kích boä A/D baèng xung clock treân board (‘pacer’) hoaëc xung ngoaøi thì phaàn meàm cuûa baïn phaûi kieåm tra bit INT tröôùc khi ñoïc döõ lieäu (khoâng phaûi bit EOC). EOC coù theå baèng 0 trong hai tröôøng hôïp: Bieán ñoåi ñaõ hoaøn taát Khoâng coù moät bieán ñoåi naøo ñaõ ñöôïc baét ñaàu. Do ñoù phaàn meàm cuûa baïn phaûi ñôïi tín hieäu INT = 1 tröôùc khi ñoïc soá lieäu chuyeån ñoåi. Roài caàn phaûi xoùa bit INT baèng caùch ghi baát kyø giaù trò naøo vaøo thanh ghi traïng thaùi BASE+8. 5.2.6 Thanh ghi ñieàu khieån (BASE+9) Ñoïc/ghi thanh ghi BASE+9 ñeå nhaän/cung caáp thoâng tin veà cheá ñoä hoaït ñoäng cuûa PCL-818L. BASE+9 - Ñieàu khieån cheá ñoä hoaït ñoäng Bit D7 D6 D5 D4 D3 D2 D1 D0 Value INTE I2 I1 I0 x DMAE ST1 ST0 • INTE : caám/cho pheùp ngaét. INTE = 0: caám ngaét INTE = 1: cho pheùp ngaét. Neáu DMAE = 0: PCL-818L seõ phaùt moät tín hieäu ngaét khi • noù hoaøn taát moät chuyeån ñoåi A/D. Vaäy caáu hình INTE = 1. DMAE = 0 duøng ñeå baùo cho CPU bieát baèng ngaét laø ñaõ ñoåi A/D xong. Neáu DMAE = 1: PCL-818L seõ phaùt moät tín hieäu ngaét khi • noù nhaän moät tín hieäu ñeám traøn T/C (Terminal count) töø boä ñieàu khieån DMA cuûa maùy tính ñeå chæ raèng chuyeån ñoåi http://www.khvt.com
  9. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 121 truyeàn DMA ñaõ hoaøn taát. Truyeàn DMA bò döøng bôûi ngaét gaây ra bôûi tín hieäu T/C. Xem DMAE beân döôùi. I2 ÷ I0: choïn soá ngaét cho data interrupt hoaëc truyeàn data • DMA (khoâng ñöôïc truøng vôùi soá ngaét cuûa thieát bò khaùc).ba bit naøy choïn soá ngaét töø 2 (010) ñeán 7 (111). • DMAE: caám/cho pheùp PCL-818L truyeàn DMA. DMAE = 0: caám truyeàn DMA. DMAE = 1: cho pheùp truyeàn DMA. Moãi bieán ñoåi A/D seõ khôûi ñoäng hai tín hieäu yeâu caàu ngaét lieân tieáp. Caùc tín hieäu naøy cho pheùp boä ñieàu khieån DMA 8237 truyeàn 2 byte döõ lieäu chuyeån ñoåi AD töø PCL-818L ñeán boä nhôù. Choïn keânh truyeàn DMA 1 hay 3 nhôø caàu noái JP1. Löu yù: phaûi laäp trình boä ñieàu khieån DMA vaø thanh ghi trang DMA 8237 cuûa maùy tính tröôùc khi ñaët DMAE = 1. ST1 ÷ ST0: choïn nguoàn kích • Baûng 5.3 Nguoàn kích ST1 ST0 Kích meàm 0 X Kích ngoaøi 1 0 Kích Pacer 1 1 5.2.7 Thanh ghi cho pheùp ñeám/ ñònh thôøi (BASE+10) Card PCL-818L coù vi maïch 8254 goàm ba boä ñeám 0, 1, 2 vaø söû duïng hai boä ñeám 1, 2, coøn boä ñeám 0 cho ngöôøi duøng. Xung nhòp cho boä ñeám 1 coù theå choïn laø 10MHz hay 1MHz nhôø caàu noái JP2, ngoõ ra boä ñeám 1 ñöa vaøo ngoõ nhòp cuûa boä ñeám 2, ngoõ ra cuûa boä ñeám 2 ñöa vaøo kích A/D (kích pacer), vaäy taàn soá kích phuï thuoäc taàn soá xung nhòp vaø soá ghi vaøo hai boä ñeám 1, 2. Taàn soá cuûa pacer laø Fclk /( Div1 ∗ Div2) vôùi Fclk = 1 MHz hay 10MHz, Div1 vaø Div2 laø soá ñaët trong boä ñeám 1 vaø boä ñeám 2. Boä ñeám 0 coù ngoõ vaøo Clk laø 100 KHz hay xung nhòp ngoaøi ôû chaân 17 CN3 choïn nhôø BASE+ 10, chaân Gate laø DI2 (chaân 3 Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  10. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 122 CN2) hay GATE0 (chaân 36 CN3) choïn nhôø caàu noái JP3. Ghi vaøo BASE+10 ñeå cho pheùp hoaëc caám boä ñeám/ ñònh thôøi cuûa PCL-818L taïo xung. BASE+10 - Cho pheùp pacer Bit D7 D6 D5 D4 D3 D2 D1 D0 Value x x x x x x TC1 TC0 • TC0: caám/ cho pheùp pacer TC0 = 0; cho pheùp pacer TC0 = 1; pacer ñöôïc ñieàu khieån bôûi TRIG0 (chaân 35 CN3). Tín hieäu naøy chaën xung trigger gôûi töø ‘pacer’ ñeán boä A/D khi noù baèng 0. • TC1: choïn cheá ñoä nguoàn xung nhòp ngoõ vaøo Counter 0. TC1 = 0; counter 0 nhaän xung clock ngoaøi (chaân 17 CN3) TC1 = 1; counter 0 nhaän xung clock 100KHz ôû beân trong. 5.2.8 Caùc thanh ghi ñieàu khieån vaø ñoïc/ghi boä ñeám Boä ñònh thì 8254 söû duïng boán thanh ghi BASE+12, BASE+13, BASE+14, BASE+15. Caùc chöùc naêng cuûa caùc thanh ghi naøy ñöôïc lieät keâ trong baûng 5.14. http://www.khvt.com
  11. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 123 Baûng 5.4 Thanh ghi Chöùc naêng Thanh ghi Chöùc naêng BASE+12 Counter 0 ñoïc/ghi BASE+14 Counter 2 ñoïc/ghi BASE+13 Counter 1 ñoïc/ghi BASE+15 Ñieàu khieån boä ñeám Do boä ñeám 8254 coù caáu truùc 16 bit, neân moãi döõ lieäu ñoïc/ ghi ñöôïc chia laøm 2 byte: byte thaáp (LSB), byte cao (MSB). Ñeå traùnh phaïm loãi ñoïc/ghi sai, caàn chuù yù thao taùc ñoïc ghi töøng ñoâi (töùc moãi laàn ñoïc/ghi hai byte) vaø theo ñuùng thöù töï byte. Chi tieát veà thanh ghi ñieàu khieån cuûa 8254 xem ôû Chöông 3. 5.3 CHUYEÅN ÑOÅI A/D, D/A & DO 5.3.1 Laäp trình tröïc tieáp Card PCL-818 coù theå laäp trình baèng kyõ thuaät ñaõ trình baøy ôû Chöông 4, nghóa laø truy caäp tröïc tieáp caùc thanh ghi cuûa card. 1- Chuyeån ñoåi A/D Coù theå kích ñoåi A/D baèng phaàn meàm, baèng xung ngoaøi hay baèng pacer on board. Bit 1 vaø 0 cuûa thanh ghi BASE+9 seõ choïn nguoàn trigger töông öùng. Khi choïn kích pacer taàn soá kích töø 2,5 MHz ñeán 71 phuùt moät xung. Khi choïn kích ngoaøi, nguoàn kích ñònh bôûi caàu noái JP3 choïn tín hieäu kích laø TRIGO (chaân 35 CN3) hay DI0 (chaân 1 CN2). Vieäc truyeàn keát quaû A/D cho maùy tính coù theå thöïc hieän baèng chöông trình ñieàu khieån, baèng ngaét hay DMA. Caùc böôùc hình thaønh ñeå chuyeån ñoåi A/D vôùi trigger baèng phaàn meàm vaø truyeàn keát quaû A/D baèng chöông trình ñieàu khieån: - Ñaët taàm vaøo cho moãi keânh A/D. - Ñaët keânh vaøo baèng caùch chæ roõ taàm queùt keânh. - Kích ñoåi A/D baèng caùch ghi vaøo BASE+0 moät soá baát kyø naøo ñoù. - Kieåm tra chuyeån ñoåi ñaõ keát thuùc chöa baèng caùch ñoïc bit EOC cuûa thanh ghi traïng thaùi. - Ñoïc keát quaû chuyeån ñoåi ôû thanh ghi BASE+ 0 vaø BASE+ 1. Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  12. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 124 - Chuyeån döõ lieäu töø soá nhò phaân thaønh soá nguyeân. 2- Chuyeån ñoåi D/A Ghi vaøo thanh ghi BASE+ 4 vaø BASE+ 5. Khi ghi döõ lieäu cho keânh D/A phaûi ghi byte thaáp tröôùc. Byte thaáp naøy ñöôïc giöõ taïm thôøi trong moät thanh ghi vaø khoâng ñöôïc xuaát ra. Sau khi ghi xong byte cao thì khi ñoù byte cao vaø byte thaáp ñöôïc keát hôïp laïi ñeå chuyeån thaønh D/A. 3- Digital input vaø output (DI&DO) Ta ñoïc DI töø thanh ghi BASE+3 (byte thaáp) vaø thanh ghi BASE+11 (byte cao). Sau khi ñoïc döõ lieäu seõ khoâng ñöôïc choát, ñöôøng vaøo seõ ôû traïng thaùi thöù ba. Ta coù theå xuaát ra DO cuõng baèng caùch duøng hai thanh ghi BASE+3 vaø BASE+11 naøy. Thanh ghi seõ choát giaù trò ñaõ ghi (coù theå ñoïc laïi). Ñeå an toaøn neân gheùp noái caùc ngoõ vaøo/ra digital thoâng qua gheùp quang. 5.3.2 Laäp trình theo software driver cuûa nhaø saûn xuaát Moãi PC_LABCARD coù moät software driver Adsapi32.dll cho pheùp chuùng ta coù theå duøng caùc haøm vaø thuû tuïc vieát saün ñeå vieát chöông trình öùng duïng baèng ngoân ngöõ caáp cao nhö Delphi, Visual Basic, Visual C. Ñieàu naøy giuùp laäp trình moät caùch ñôn giaûn hôn laø vieát tröïc tieáp vaøo caùc thanh ghi vì moãi haøm seõ keùo taát caû caùc tham soá töø baûng tham soá. Chuùng ta khoâng caàn ñònh laïi baûng tham soá moãi khi ta goïi noù, tröø khi baûng tham soá coù söï thay ñoåi. Chöông trình caøi ñaët chöùa trong CDROM. Trong chöông trình öùng duïng caàn khai baùo söû duïng driver. Driver cuûa haõng Advantech vieát coù theå söû duïng chung cho nhieàu loaïi card cuûa haõng vaø vieäc ñoïc tìm hieåu caùc haøm ñaõ vieát saün töông ñoái maát nhieàu thôøi gian. Muïc 5.3.1 trình baøy moät unit goàm caùc haøm vieát saün cho Delphi. Muïc 5.3.4 trình baøy sô löôïc driver adsapi32. http://www.khvt.com
  13. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 125 5.4 LAÄP TRÌNH CHO CARD PCL-818L 5.4.1 Unit duøng cho card PCL-818L trong Delphi Unit PCL818L; Interface CONST {ñia chi nen cho I/O} base= $300; reg0= base + 0; reg1= base + 1; reg2= base + 2; reg3= base + 3; reg4= base + 4; reg5= base + 5; reg6= base + 6; reg7= base + 7; reg8= base + 8; reg9= base + 9; reg10= base + 10; reg11= base + 11; reg12= base + 12; reg13= base + 13; reg14= base + 14; reg15= base + 15; {1} Function Read_AD (var channel: byte): word {2} Procedure Trig_AD; {3} Procedure Set_rangeAD (range: byte); {4} Procedure Set_channel AD (start, stop: byte); {5} Function Dig_in: word; {6} Procedure Dig_out (data: word); {7} Procedure Analog_out (data: word); {8} Function EOC: byte; {9} Function MUX: byte; {10} Function INT: byte; {11} Function Next_channel: byte; {12} Function INTE: byte; Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  14. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 126 {13} Function IRQ: byte; {14} Function DMAE: byte; {15} Function Trigsource: byte; {16} Procedure Set_INTE (sint: byte); {17} Procedure Set_IRQ (irq: byte); {18} Procedure Set_DMAE (dmae: byte); {19} Procedure Set_trigsource (trs: byte); {20} Procedure Clear_INT; {21} Procedure Counter_enb (tc: byte); {22} Procedure Set_counter (cnt, mode, dl, dh: byte); {23} Procedure Select_nextchannel (setchan: byte); {24} Function Read_counter (cnt: byte): word; {25} procedure Reload_counter (dl1, dh1, dl2, dh2: byte); {26} procedure Xuat (add:word; data: byte); {27} function Nhap (add:word): byte; implementation {ham nhap vao Port} Function inport (address: word): byte; var data: word; begin asm mov dx, address in ax, dx mov data, ax end; inport:= data; end; Procedure outport (address: word; data: word); {ham xuat ra Port} begin asm mov dx, address mov ax, data out dx, ax end; end; {1} Function Read_AD (var channel: byte): word; {doc du lieu bo A/D} http://www.khvt.com
  15. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 127 var dlow, dhigh: byte; begin dlo:= inport (reg0); dhigh:=inport(regl); channel:= dlow and $0F; {lay 4 bit thap} dlow:= (dlow and $F0) shr 4; Read_AD:= dlow + 16*dhigh; end; {2} {kich mem bo A/D} Procedure Trig_AD; begin outport (reg0, $FF); end; {3} Procedure Set_rangeAD (range: byte); {dat tam dien ap ngo vao AD} var rang: byte; begin rang:=range and $03; outport (reg1, rang); end; {4} Procedure Set_channel AD (start: byte; stop: byte); begin outport (reg2, (stop shl 4) or start); end; {5} Function Dig_in: word; begin dig_in:=inport (reg3) + 256* inport (reg11); end; {6} Procedure Dig_out (data: word); begin outport (reg3, data and $00FF); outport (reg11, (data and $FF00) shr 8); end; {7} Procedure Analog_out (data: word); begin outport (reg4, (data and $000F) shl 4); outport (reg5, (data and $0FF0) shr 4); end; Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  16. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 128 {8} Function EOC: byte; begin EOC:= (inport (reg8) and $80) shr 7; end; {9} Function MUX: byte; begin MUX:= (inport (reg8) and $20) shr 5; end; {10} Function INT: byte; begin INT:= (inport (reg8) and $10) shr 4; end; {11} Function Next_channel: byte; begin Next_channel:= inport (reg8) and $0F; end; {12} Function INTE: byte; begin INTE:= (inport (reg9) and $80) shr 7; end; {13} Function IRQ: byte; begin IRQ:= (inport (reg9) and $70) shr 4; end; {14} Function DMAE: byte; begin DMAE:= (inport (reg9) and $04) shr 4; end; {15} Function Trigsource: byte; begin Trigsource:= inport (reg9) and $03; end; {16} Procedure Set_INTE (sint: byte); {dat xoa INTE} var i: byte; begin i:= inport (reg9) and $7F; outport (reg9), (sint shl 7) or i); http://www.khvt.com
  17. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 129 end; {17} Procedure Set_IRQ (irq: byte); {chon ngo ngat} var i: byte; begin i:= inport (reg9) and $8F; outport (reg9, (irq shl 4) or i); end; {18} Procedure Set_DMAE (dmae: byte); {dat xoa DMAE} var i: byte; begin i:= inport (reg9) and $FB; outport (reg9, (dmae shl 2) or i); end; {19} Procedure Set_trigsource (trs: byte); var i: byte; begin i:= inport (reg9) and $FC; outport (reg9, i or trs); end; {20} Procedure Clear_INT; begin outport (reg8, $FF); end; {21} Procedure Counter_enb (tc: byte); begin outport (reg10, tc and $03); end; {22} Procedure Set_counter (cnt, mode, dl, dh: byte); begin outport (reg15, $30) + (cnt shl 6) + (mode shl 1); outport (reg12 + cnt, dl); outport (reg12 + cnt, dh) end; {23} Procedure Select_nextchannel (setchan: byte) var i: byte; begin i:= (inport (reg8) and $F0) or setchan; outport (reg8, i) Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  18. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 130 end; {24} Function Read_counter (cnt: byte): word; {doc LSB truoc, MSB sau} var dl, dh, cnt0: byte; begin cnt0:= cnt +1; if cnt0 = 3 then cnt0:=4 outport (reg15, $D0 + (cnt0 shl 1)); dl:= inport (reg12 + cnt); dh:=inport (reg12 + cnt); Read_counter:= dl + 256*dh; end; {25} Procedure Reload_counter (dl1, dh1, dl2, dh2: byte); var dl, dh: byte; begin outport (reg15, $D4); dl:= inport (reg13); dh:= inport (reg13); if (dl+dh = 0) then begin Counter_enb (1); {counter 1, mode 2} Set_counter (1, 2, dl1, dh1); end; outport (reg15, $D8); dl:= inport (reg14); dh:= inport (reg14); if (dl+dh = 0) then begin {counter 1, mode 2} Counter_enb(2); Set_counter (2,2, dl1, dh1); end; end; {26} Procedure Xuat (add: word; data: byte); begin outport (add, data); end; {27} Function Nhap (add: word): byte; begin nhap:=inport (add); http://www.khvt.com
  19. Taùc giaû: TS Nguyeãn Ñöùc Thaønh Trang 131 end; end. 5.4.2 Chöông trình C ñoåi töông ñoàng ra soá duøng kích meàm #include #include #include #include char *gain_str[4]={"5V","2.5V","1.25V","0.625V"}; void main() { int status, s_end, start, stop; int dtl, dth, adl, adt, c_reg, s_ch_val, r_ch; int chv, ch_gain[16]; int port, val, i, j; port= 0x300; /* Set I/O port base address */ /********** STEP 1: INITIALIZE & SELECT SOFTWARE TRIGGER *************/ val= 0x70; outportb(port+9, val); /* software trigger */ c_reg = inportb(port+9); if (c_reg != val) { printf("PCL-818L hardware verification failed!\n"); exit(0); } outportb(port+8,1); /* Clear interrupt request */ printf("\n***** Please set PCL-818L's jumper 7 (A/D IN) to 5V *****\n\n"); /* ******** STEP 2: READ A/D STATUS REGISTER **************************** */ status = inportb(port+ 8); if ((status & 0x20)== 0x20) s_end = 1; Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006
  20. CHÖÔNG 5: CARD THU THAÄP TÍN HIEÄU VAØ ÑIEÀU KHIEÅN TRANG 132 else s_end = 0; redo: if(s_end==1) { printf("Enter start channel number : "); scanf("%d",&start); printf("Enter stop channel number : "); scanf("%d",&stop); } else { printf("Enter start channel number : "); scanf("%d",&start); printf("Enter stop channel number : "); scanf("%d",&stop); } if ((s_end== 0) & (stop>7)) { printf("Entered channel failed! Re-do!\n"); goto redo; } if ((s_end==1) & (stop>15)) { printf("Entered channel failed! Re-do!\n"); goto redo; } if (start > stop) { printf("Entered channel failed!\n"); http://www.khvt.com
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0