nguyenviet1012

New Member

Download miễn phí Giáo trình Đo lường và điều khiển bằng máy tính - Card thu thập tín hiệu và điều khiển





Mỗi PC_LABCARD có một software driver Adsapi32.dll cho
phép chúng ta có thể dùng các hàm và thủ tục viết sẵn để viết
chương trình ứng dụng bằng ngôn ngữ cấp cao như Delphi, Visual
Basic, Visual C. Điều này giúp lập trình một cách đơn giản hơn là
viết trực tiếp vào các thanh ghi vìmỗi hàm sẽ kéo tất cả các
tham số từ bảng tham số. Chúngta không cần định lại bảng
tham số mỗi khi ta gọi nó, trừ khi bảng tham số có sự thay đổi.
Chương trình cài đặt chứa trong CDROM. Trong chương trình ứng
dụng cần khai báo sử dụng driver. Driver của hãng Advantech
viết có thể sử dụng chung cho nhiều loại card của hãng và việc
đọc tìm hiểu các hàm đã viết sẵn tương đối mất nhiều thời gian.
Mục 5.3.1 trình bày một unit gồmcác hàm viết sẵn cho Delphi.
Mục 5.3.4 trình bày sơ lược driver adsapi32.



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

CN3 chọn nhờ BASE+ 10, chân Gate là DI2 (chân 3
CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 122
CN2) hay GATE0 (chân 36 CN3) chọn nhờ cầu nối JP3.
Ghi vào BASE+10 để cho phép hay cấm bộ đếm/ định thời
của PCL-818L tạo xung.
BASE+10 - Cho phép pacer
Bit D7 D6 D5 D4 D3 D2 D1 D0
Value x x x x x x TC1 TC0
• TC0: cấm/ cho phép pacer
TC0 = 0; cho phép pacer
TC0 = 1; pacer được điều khiển bởi TRIG0 (chân 35 CN3). Tín
hiệu này chặn xung trigger gởi từ ‘pacer’ đến bộ A/D khi nó bằng
0.
• TC1: chọn chế độ nguồn xung nhịp ngõ vào Counter 0.
TC1 = 0; counter 0 nhận xung clock ngoài (chân 17 CN3)
TC1 = 1; counter 0 nhận xung clock 100KHz ở bên trong.
5.2.8 Các thanh ghi điều khiển và đọc/ghi bộ đếm
Bộ định thì 8254 sử dụng bốn thanh ghi BASE+12, BASE+13,
BASE+14, BASE+15. Các chức năng của các thanh ghi này được
liệt kê trong bảng 5.14.
Tác giả: TS Nguyễn Đức Thành Trang 123
Thành phố Hồ Chí Minh, tháng 4 năm 2006
Bảng 5.4
Thanh ghi Chức năng Thanh ghi Chức năng
BASE+12 Counter 0 đọc/ghi BASE+14 Counter 2 đọc/ghi
BASE+13 Counter 1 đọc/ghi BASE+15 Điều khiển bộ đếm
Do bộ đếm 8254 có cấu trúc 16 bit, nên mỗi dữ liệu đọc/ ghi
được chia làm 2 byte: byte thấp (LSB), byte cao (MSB). Để tránh
phạm lỗi đọc/ghi sai, cần chú ý thao tác đọc ghi từng đôi (tức mỗi
lần đọc/ghi hai byte) và theo đúng thứ tự byte. Chi tiết về thanh
ghi điều khiển của 8254 xem ở Chương 3.
5.3 CHUYỂN ĐỔI A/D, D/A & DO
5.3.1 Lập trình trực tiếp
Card PCL-818 có thể lập trình bằng kỹ thuật đã trình bày ở
Chương 4, nghĩa là truy cập trực tiếp các thanh ghi của card.
1- Chuyển đổi A/D
Có thể kích đổi A/D bằng phần mềm, bằng xung ngoài hay
bằng pacer on board. Bit 1 và 0 của thanh ghi BASE+9 sẽ chọn
nguồn trigger tương ứng.
Khi chọn kích pacer tần số kích từ 2,5 MHz đến 71 phút một
xung. Khi chọn kích ngoài, nguồn kích định bởi cầu nối JP3 chọn
tín hiệu kích là TRIGO (chân 35 CN3) hay DI0 (chân 1 CN2).
Việc truyền kết quả A/D cho máy tính có thể thực hiện bằng
chương trình điều khiển, bằng ngắt hay DMA.
Các bước hình thành để chuyển đổi A/D với trigger bằng
phần mềm và truyền kết quả A/D bằng chương trình điều khiển:
- Đặt tầm vào cho mỗi kênh A/D.
- Đặt kênh vào bằng cách chỉ rõ tầm quét kênh.
- Kích đổi A/D bằng cách ghi vào BASE+0 một số bất kỳ nào đó.
- Kiểm tra chuyển đổi đã kết thúc chưa bằng cách đọc bit
EOC của thanh ghi trạng thái.
- Đọc kết quả chuyển đổi ở thanh ghi BASE+ 0 và BASE+ 1.
CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂN TRANG 124
- Chuyển dữ liệu từ số nhị phân thành số nguyên.
2- Chuyển đổi D/A
Ghi vào thanh ghi BASE+ 4 và BASE+ 5. Khi ghi dữ liệu cho
kênh D/A phải ghi byte thấp trước. Byte thấp này được giữ tạm
thời trong một thanh ghi và không được xuất ra. Sau khi ghi xong
byte cao thì khi đó byte cao và byte thấp được kết hợp lại để
chuyển thành D/A.
3- Digital input và output (DI&DO)
Ta đọc DI từ thanh ghi BASE+3 (byte thấp) và thanh ghi
BASE+11 (byte cao). Sau khi đọc dữ liệu sẽ không được chốt,
đường vào sẽ ở trạng thái thứ ba. Ta có thể xuất ra DO cũng
bằng cách dùng hai thanh ghi BASE+3 và BASE+11 này. Thanh
ghi sẽ chốt giá trị đã ghi (có thể đọc lại). Để an toàn nên ghép
nối các ngõ vào/ra digital thông qua ghép quang.
5.3.2 Lập trình theo software driver của nhà sản xuất
Mỗi PC_LABCARD có một software driver Adsapi32.dll cho
phép chúng ta có thể dùng các hàm và thủ tục viết sẵn để viết
chương trình ứng dụng bằng ngôn ngữ cấp cao như Delphi, Visual
Basic, Visual C. Điều này giúp lập trình một cách đơn giản hơn là
viết trực tiếp vào các thanh ghi vì mỗi hàm sẽ kéo tất cả các
tham số từ bảng tham số. Chúng ta không cần định lại bảng
tham số mỗi khi ta gọi nó, trừ khi bảng tham số có sự thay đổi.
Chương trình cài đặt chứa trong CDROM. Trong chương trình ứng
dụng cần khai báo sử dụng driver. Driver của hãng Advantech
viết có thể sử dụng chung cho nhiều loại card của hãng và việc
đọc tìm hiểu các hàm đã viết sẵn tương đối mất nhiều thời gian.
Mục 5.3.1 trình bày một unit gồm các hàm viết sẵn cho Delphi.
Mục 5.3.4 trình bày sơ lược driver adsapi32.
Tác giả: TS Nguyễn Đức Thành Trang 125
Thành phố Hồ Chí Minh, tháng 4 năm 2006
5.4 LẬP TRÌNH CHO CARD PCL-818L
5.4.1 Unit dùng cho card PCL-818L trong Delphi
Unit PCL818L;
Interface
CONST
base= $300; { }đia chi nen cho I/O
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;
CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂ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
Function inport (address: word): byte; { }ham nhap vao Port
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
Tác giả: TS Nguyễn Đức Thành Trang 127
Thành phố Hồ Chí Minh, tháng 4 năm 2006
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 Procedure Trig_AD; { }kich mem bo A/D
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;
CHƯƠNG 5: CARD THU THẬP TÍN HIỆU VÀ ĐIỀU KHIỂ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:= ...
 

Các chủ đề có liên quan khác

Top