Skip to content
Bạn đang ở: Trang chủ Đào tạo Đào tạo thạc sĩ Giáo trình & bài giảng Tin học Vật lý - Bài 4 Lập trình điều khiển và thu thập dữ liệu như thế nào?
Tin học Vật lý - Bài 4 Lập trình điều khiển và thu thập dữ liệu như thế nào? In Email
Viết bởi Vu Anh Minh   
Thứ sáu, 13 Tháng 3 2009 06:49

 Để thực hiện được các nhiệm vụ điều khiển và thu thập, xử lý dữ liệu một cách mềm dẻo linh hoạt, không có cách nào khác hơn là sử dụng những thuật toán và ngôn ngữ lập trình cho phép can thiệp đến phần cứng ngoại vi (cổng, cảng hay port). Bằng cách thay đổi chương trình, có thể thay đổi các tác vụ hay nâng cấp tính năng mà không cần thay đổi thiết kế phần cứng. Việc lập trình ghép nối mở ra những khả năng to lớn cho chúng ta trong việc thiết kế, ứng dụng môn học vào thực tiện cuộc sống, công việc.

 

4/ LẬP TRÌNH ĐIỀU KHIỂN VÀ THU THẬP DỮ LIỆU :

4.1/ VÀO RA SỐ SONG SONG : Xây dựng trên cơ sở vi mạch 82C55 PPI ( Progamable Peripheral Inteface ).
 

16 đường I/O cho hai cổng 8 bít A và C được nối với jack cắm 25 chân trên card UIA/UIB. Mỗi cổng có địa chỉ riêng. Việc gửi và nhận dữ liệu được thực hiện qua việc đọc và viết ra địa chỉ cổng tương ứng. Có thể sử dụng cổng A cho cả việc vào và ra dữ liệu trong vài MODE khác nhau. Trong khi đo cổng C được chia ra làm hai cổng 4 bít Pclower (nửa byte thấp PC0 – PC3) và PC upper (nửa byte cao PC4 – PC7) có thể lập trình độc lập cho mỗi nửa ở MODE đọc vào hay viết ra. Cổng C chỉ hoạt động ở một MODE. MODE hoạt động được lựa chọn bằng cách viết từ điều khiển cho thanh ghi điều khiển. Thanh phần của từ điều khiển được biểu diễn dưới đây :
Với card UIA/UIB, cổng B luôn được đặt ở MODE ra (MODE 0) vì nó được dùng để điều khiển các công tắc mềm. ( giáo trình Tin học I phần II - phòng thí nghiệm máy tính – Trung tâm ITIMS)

Ví dụ : outportb(0x303,145) // 1001 0001 sẽ đặt cổng A trong MODE 0 đọc vào , cổng B MODE 0 viết ra và cổng C (thấp) MODE đọc vào và nửa cao MODE viết ra.
Riêng cổng C ( khi ở MODE viết ra) từng bít riêng biệt có thể được xác lập lên 1 hay về 0 ( mà không ảnh hưởng tới các bít khác) bằng cách viết từ SET/RESET bít ( bít 7 luôn luôn bằng 0) ra từ điều khiển.
Ví dụ :
outportb(0x303,6); // 0000 0110 đặt bít PC3 xuống thấp
outportb(0x303,7); // 0000 0111 đặt bít PC3 lên mức cao



 

 

4.1.1/ ĐỊNH DẠNG TỪ ĐIỀU KHIỂN CHO VIỆC ĐẶT / XOÁ BÍT CỔNG C

Các MODE PPI : Việc lập trình cho MODE ở cổng A tuỳ thuộc vào cách truyền dữ liệu với thiết bị ngoại vi.
a/ MODE0 : Vào ra cơ sở :
- MODE 0 viết ra : Một byte được viết ra cổng và sẽ được chốt lại nghĩa là nó xuất hiện trên kết nối với cổng đó và sẽ duy trì cho đến khi một byte mới được viết ra cổng đó.
- MODE 0 đọc vào : VIệc đọc trên một cổng sẽ cho biết giá trị của một byte hiện hành trên cổng đó ( tại thời điểm đọc ).

Nếu chương trình sử dụng cổng A ở MODE 1 hay 2, cổng A sẽ dùng các tín hiệu móc nối. Các đường tín hiệu móc nối này được mượn từ cổng C (khi đó cổng C không thể được dùng ở MODE vào ra thông thường nữa ). ở MODE 0 cổng A không thực hiện việc móc nối nên các bít ở cổng C đều có thể sử dụng ở hoạt động vào ra thông thường.

b/ MODE 1 : Vào ra STROBE ( nhấp nháy )
Móc nối được thực hiện để đảm bảo thứ tự truyền dữ liệu. Với các hoạt động vào hay ra sử dụng các tín hiệu móc nối khác nhau.

MODE 1 đọc vào dùng :
- STB ( lối vào STROBE). Khi ngoại vi nối đặt lối vào này xuống mức thấp, byte hiện hành được nạp vào vùng đệm vào, dữ liệu có thể dọc từ cổng sau đó.
- IBF ( Input Buffer Full) ở mức cao chỉ ra rằng có một byte vừa được tải vào vùng đệm và chưa từng đựoc đọc. Chương trình điều khiển nhận ra có một byte mới vừa nhận được và ngoại vi biết rằng không nên gửi byte tiếp theo vì byte trước đó chưa được xử lý.
- INTR (Interrupt Request). Nếu được phép, một ngắt sẽ được sinh ra khi byte được tải vào vùng đệm đọc. Việc đọc từ cổng đó sẽ làm INTR xuống thấp lại.

MODE 1 viết ra : dùng các đường :
- OBF ( Output Buffer Full ) : Đường này xuống thấp khi một byte vừa viết ra cổng vẫn còn chưa được thiết bị ngoại vi chấp nhận ( đọc ). Bằng cách này, chương trình thấy rằng nó không thể gửi dữ liệu mới ( do byte trước đó vẫn chưa được ngoại vi xử lý (chấp nhận) và thiết bị ngoại vi nhận ra có một byte mới nhận được.
- ACK (Acknowledge). Thiết bị ngoại vi xác nhận rằng byte vừa được chấp nhận bằng cách đưa ACK xuống mức thấp. Điều này làm cho lối ra OBF lên cao một lần nữa, để chương trình biết nó có thể gửi một byte mới.
- INTR ( Interrupt Request) Nếu cho phép, ngắt sẽ sinh ra khi vùng đệm ra là trống ( thiết bị viết ra đã sẵn sàng nhận dữ liệu mới). Viết ra cổng sẽ đặt lại đường INTR xuống thấp.

NGẮT:
Trong chương trình , trạng thái của đường INTR (PC3) có thể được kiểm tra liên tục ( thăm dò) để biết có byte mới nào đựoc đọc vào hay viết ra cổng A không. Trong hầu hết trường hợp, cách hiệu quả hơn là để 8255 PPI sinh ra ngắt. Đường INTR có thể được kích hoạt hay không kích hoạt nhờ các triger INTE ( cho phép ngắt ). Hay là các công tắc mềm các đường INTR của PPI có thể được nối với một trong các mức ngắt ( đường yêu caùa ngắt ) của máy tính.
Cổng A dùng các flipflop INTE khác nhau cho lối vào và lối ra
Lối vào cổng A : INTE-A được bật/tắt bằng cách đặt bít SET/RESET PC4
Lối ra cổngA : INTE-A được bật hay tắt (SET/RESET) nhờ bít PC6

c/ MODE 2 : Vào ra hai chiều Strobe.
Mode này chỉ có thể với cổng A và có nghĩa để kết nối với một thiết bị ngoại vi qua một bus dữ liệu 8 bít theo cả hai chiều, gửi và nhận (I/O song công ). ở trạng thái bình thường cổng A được đặt ở MODE vào. Dưới điều kiện thiết bị ngoại vi điều khiển ACK xuống thấp, byte trong vùng đệm ra được đặt ra lối ra. Nếu không thiết bị ngoại vi có thể đặt dữ liệu lên cổng và tải những dữ liệu này vào chốt dữ liệu vào nhừo việc đặt một xung (thấp) lên lối vào STB. CHức năng của các tín hiệu móc nối tương tự như trong MODE 1. flipflop INTE cho lối vào (PC4) và lối ra (PC6) có thể được bật hay tắt độc lập với các thiết bị ngoại vi khác.

Chức năng các đường tín hiệu trên cổng C


Cổng C các đường còn lại, thông tin trạng thái
Trong MODE 1 và 2 cổng A mượn các bít của cổng C để thực hiện móc nối. Các bít còn lại có thể được dùng để vào ra I/O thông thường.
Cổng C có thể được đọc thông thường. Trong byte kết quả các bít tương ứng với các đường mượn cho biết trạng thái của các đường này. Cổng C đóng vai trò như thanh ghi trạng thái các đường tín hiệu mượn. Ví dụ chương trình có thể đọc trạng thái của OBF hay IBF. Nếu cổng C được lập trình ở MODE vào, các bít còn lại phản ánh mức tín hiệu trên những đường này. Nếu ở MODE ra, các đường PC4 – PC7 chỉ có thể được điều khiển bằng chức năng đặt / xoá bít. Các đường PC0 – PC3 cũng có thể được điều khiển bằng cách viết một byte ra cổng C ( có khả năng là các bít mượn PC3 sẽ không thay đổi giá trị ).
 

2/ II - Timer/ Counter _PIT-82C54 :
Trên cơ sở vi mạch PIT 82C54 : là bộ đếm có thể lập trình được, nó gồm 3 bộ đếm độc lập, mỗi bộ đếm có một lối vào xung nhịp (Clock), một lối vào cổng (Gate) và một lối ra (Out). Lối ra cổng và lối vào nhịp của bộ đếm 0 và 1 được nối ra cổng 25 chân (UIB). Nối vào nhịp của cổng bộ đếm 1, cũng nối với cổng 9 chân của UIB, bộ đếm 2 chỉ có lối ra với cổng 25 chân. Mỗi bộ đếm hoạt động tuỳ thuộc vào mode được lập trình. ( giáo trình Tin học I phần II - phòng thí nghiệm máy tính – Trung tâm ITIMS)

Mỗi đơn vị đếm gồm có :
- Một triger sườn dương kích hoạt một bộ đếm lùi 16 bít
- Hai thanh ghi lối vào 8 bít cất giá trị khởi đầu bộ đếm ( giá trị đếm bắt đầu )
- Hai thanh ghi lối ra chốt giá trị đếm tức thời
- Một thanh ghi điều khiển và một đơn vị điều khiển điều khiển bộ đếm theo MODE được chọn
- Một thanh ghi chốt trạng thái đệ đọc trạng thái hiện tại của bộ đếm.
Phần tử đếm (bộ đếm lùi có thể đặt lại được), một thanh ghi đếm (cất dữ liệu được viết vào bộ đếm), một chốt dữ liệu lối ra, cất dữ liệu đọc ra từ bộ đếm và một đơn vị điều khiển

 

logic (điều khiển bộ đếm tuỳ theo mode lập trình ). Dưới những đIều kiện nhất định tuỳ thuộc vào mode của bộ đếm, số đếm ban đầu được nạp vào phần tử đếm, sau đó bắt đầu quá trình đếm lùi. Khi bộ đếm đạt đến giá trị 0 (N xung sau khi nạp giá trị N vào thanh ghi đếm) đơn vị logic đIều khiển hoạt động tương ứng tuỳ thuộc vào mode lập trình. Phần tử đếm đếm lùi đi 1 mỗi một xung nhịp trên lối vào nhịp, lối vào cổng (Gate) là lối vào điều khiển. Chức năng của nó tuỳ thuộc vào mode lập trình. Các đường lối vào gate được treo lên với các điện trở PullUp và mức logic nếu không nối là bằng 1. Mode bộ đếm được xác lập bằng việc viết từ điều khiển đến thanh ghi điều khiển. Sau khi viết từ điều khiển, các byte của số đếm ban đầu được viết lần lượt vào bộ đếm.
Chú thích:
CRM ,CRl : Thanh ghi đếm (dùng để lưu trữ dữ liệu được ghi lên bộ đếm).
CE : Phần tử đếm (Bộ đếm giảm dần để đồng bộ với những thiết lập được đặt trước).
OLM ,OLM : Chốt lối ra (Chứa dữ liệu được đọc từ bộ đếm).
 

Hình vẽ: Định dạng của công tắc chuyển mạch mềm ( Cổng B của PPI-8255A, địa chỉ $301). Cổng B gồm 8 bit được xác định từ PB0-->PB7, dùng để xác lập chế độ kết nối cho bộ đếm vào.

Khởi tạo bộ đếm : Việc khởi tạo bộ đếm được thực hiện nhờ viết một byte từ điều khiển ra địa chỉ thanh ghi điều khiển bộ đếm PIT theo thứ tự ở bảng sau đây

Các bít 7 và 6 xác định bộ đếm nào sẽ được khởi tạo. Bít 4 và 5 xác định cách viết giá trị khởi tạo cho bộ đếm xác định bởi các bít 7 và 6 nói trên., có thể viết một byte đơn ( cả phần byte cao hoặc byte thấp) hay viết cả hai phần lần lượt lên bộ đếm đó. Các bít 3, 2, 1 xác định MODE đếm. Bít 0 qui định kiểu đếm là đếm nhị phân hay mã nhị thập phân (BCD – Binary Coded Decimal)

4.2.1/ VIẾT BỘ ĐẾM :
Hầu hết các ứng dụng đều dùng bộ đếm hai byte. Như vậy giá trị khởi tạo cần nập (viết) vào thanh ghi lối vào theo đúng trật tự : bít ít ý nghĩa nhất trước (lsb), bít nhiều ý nghĩa tiếp theo (msb). Sườn xung dương của xung nhịp (ngoài) đầu tiên sẽ copy giá trị khởi đầu vào bộ đếm.
4.2.2/ ĐỌC BỘ ĐẾM:
Khi đang tiến hành quá trình đếm, giá trị bộ đếm có thể bị thay đổi trong quá trình đọc dẫn đến kết quả đọc được không chính xác, điều này có thể tránh được nhờ việc tạm dừng quá trình đếm bằng cách đặt cho cổng Gate xuống mức thấp 0. Trong hầu hết các trường hợp người ta muốn đọc giá trị bộ đếm mà không ảnh hưởng đến quá trình đếm thì có 2 cách để đạt được điều này:
• lệnh chốt bộ đếm (Bit 5,4 =00)
• Lệnh đọc lại bộ đếm (Bit 7,6 =11)
a/ Lệnh chốt bộ đếm: Khi được viết vào thanh ghi điều khiển, thì giá trị bộ đếm được chốt vào thanh ghi lối ra và số liệu này có thể được giữ nguyên để chương trình đọc lại sau đó. Lưu ý: phải đọc đủ 1 hoặc 2 byte , nếu không đọc đủ thì lệnh chốt tiếp theo sẽ bị bộ đếm bỏ qua và giá trị đầu vẫn được giữ nguyên.

b/ Lệnh đọc lại bộ đếm: hoạt động giống như lệnh chốt bộ đếm nhưng nó cho phép chốt giá trị của nhiều bộ đếm đồng thời, mỗi bộ đếm được chốt cho đến khi nó được đọc (hoặc là bộ đếm được lập trình lại), cũng có thể chốt byte trạng thái, byte trạng thái thu được bằng cách đọc bộ đếm đó.

Dữ liệu được chốt của một lệnh chốt hoặc lệnh đọc lại cần phải được đọc hoàn toàn nếu không lệnh đọc lại tiếp theo sẽ không có ảnh hưởng trên bộ đếm đó. Bit đếm NULL (D6=1) trong byte trạng thái chỉ ra rằng một số đếm ban đầu vừa được viết lên bộ đếm chưa được nạp vào trong phần tử đếm dẫn đến việc đọc bộ đếm sẽ không có ý nghĩa

c/ Mode bộ đếm: mode của bộ đếm được định nghĩa bởi các bit 1,2,3 của từ điều khiển.
+ Mode 0: (ngắt khi kết thúc đếm) Sau khi bộ đếm vừa đặt là mode 0 thì lối ra OUT là thấp (=0), ngay khi giá trị đếm vừa được nạp vào thì bắt đầu quá trình đếm lùi, khi đạt đến 0, lối ra OUT của bộ đếm bật lên cao (=1, có thể được dùng để sinh ra một ngắt) viết một giá trị đếm mới sẽ lặp lại quá trình này, tức là OUT lại thấp xuống và quá trình đếm lùi lại tiến hành. Quá trình đếm được phép nếu cổng Gate là cao, khi cổng gate là thấp thì các xung nhịp bị bỏ qua (không đếm).
(Tóm lại: trong mode 0, nếu giá trị OUT=0 thì quá trình đếm của bộ đếm vẫn đang được tiến hành, Nếu OUT=1 thì chấm dứt quá trình đếm. Giá trị OUT của bộ đếm sẽ được kiểm tra qua việc đọc Byte trạng thái của bộ đếm - kiểm tra bit D7 của bộ đếm - sau khi thực hiện lệnh đọc thanh ghi).

+ Mode 1: (kích hoạt bằng xung phần cứng) Ban đầu lối ra OUT là mức cao (=1) với một xung sườn lên ở lối vào cổng gate thì lối ra OUT sẽ xuống thấp và giữ nguyên ở mức thấp trong khi đếm lùi.

+ Mode 2: (máy phát xung) mode này là mode liên tiếp, lối ra OUT xuống thấp một chu kì xung nhịp ngay khi quá trình đếm kết thúc (số đếm =1). Sau đó OUT lại lên mức cao một lần nữa và giá trị đếm ban đầu lại được nạp lại. Như vậy cứ sau mỗi chu kì N xung nhịp, lối ra OUT lại xuống thấp trong một chu kì. cổng Gate có thể được dùng để đồng bộ bộ đếm: sau một xung ở mức thấp trên cổng gate, bộ đếm khởi động lại từ giá trị đếm ban đầu.

+ Mode 3 (máy tạo sóng vuông): mode này tương tự mode 2, quá trình đếm xuống sẽ được thực hiện hai lần, nhưng với số bước gấp đôi. Với số đếm ban đầu là chẵn thì OUT sẽ cao trong nửa đầu của chu kì ( N, N-2, N-4, .... , 2) và thấp trong nửa còn lại ( N-1, N-3,..., 1). Với số ban đầu là lẻ, thì chu kì ở mức cao của lối ra OUT sẽ giữ lâu hơn một xung nhịp so với chu kì thấp. Cũng như với mode 2, lối vào gate có thể được dùng để đồng bộ bộ đếm.

 

+ Mode 4 (khởi động mềm): OUT sẽ khởi đầu là cao sau khi số đếm ban đầu được viết thì bộ đếm bắt đầu đếm lùi ngay khi đạt đến giá trị 0, OUT sẽ thấp trong một chu kì xung nhịp. Lối vào gate cho phép quá trình đếm khi ở mức cao và cấm khi ở mức thấp.
+ Mode 5 (kích hoạt cứng): OUT bắt đầu ở mức cao. Khi gate đạt đến mức cao, số đếm ban đầu được nạp và quá trình đếm lùi bắt đầu. Khi giá trị đếm đạt đến 0, OUT xuống thấp trong một chu kì xung nhịp. ( giáo trình Tin học I phần II - phòng thí nghiệm máy tính – Trung tâm ITIMS)

Ví dụ: Tạo máy phát xung vuông điều khiển được từ bàn phím

 

Hình : Khai báo và hàm tạo xung vuông dùng bộ đếm C2
Hình : Chương trình chính với vòng lặp bắt phím điều khiển tần số
 
Hình : Màn hình kết quả trong DOS- bấm ESC để thoát khỏi chương trình

 

 


4.3/ CHUYỂN ĐỔI TƯƠNG TỰ - SỐ ADC

Chuyển đổi tương tự số phức tạp hơn chuyển đổi số tương tự. ở đây đề cập đến kiểu phổ biến nhất ADC xấp xỉ liên tiếp.
ADC sẽ cần một thời gian hữu hạn để tính toán các giá trị số. Nó cũng cần báo hiệu khi nào thì bắt đầu quá trình chuyển đổi và trả lại tín hiệu khi kết thúc qua trình này. Khi nhận được tín hiệu kết thúc, máy tính đọc từ lối ra ADC. Những đường tín hiệu chính điều khiển quá trình móc nối này như trên hình vẽ.

Đường tín hiệu SC ( bắt đầu chuyển đổi ) lên mức kích hoạt cao (HIGH) báo với ADC bắt đầu quá trình chuyển đổi (tính toán ). Sau khi kết thúc lối ra EOC xuống mức thấp (LOW) báo hiệu giá trị ở lối ra của ADC đã ổn định dấu – báo rằng đây là đường hoạt động ở mức thấp. giản đồ thời gian của chu trình chuyển đổi như trên hình vẽ.


4.3.1/ ADC XẤP XỈ LIÊN TIẾP
Phương pháp xấp xỉ liên tiếp là phương pháp phổ biến cho các kiểu ADC do tốc độ, độ chính xác và dễ thiết kế của nó. Hoạt động nhờ việc so sánh thế được sinh với thế lối vào. Một mạch dãy và một DAC tạo ra thế so sánh như trên hình vẽ :


Phương pháp xấp xỉ liên tiếp : phương pháp trên cơ sở “đúng” và “sai”. Tín hiệu lối vào được xấp xỉ liên tiếp bằng một nửa độ lớn của bước trước đó. Như trên hình vẽ :

Bước thứ nhất kiểm tra xem nếu điện thế vào Vin lớn hơn một nửa khoảng điện thế (Vranger) của ADC. Giả sử rằng lối ra là “đúng” thì phép xấp xỉ tiếp theo sẽ kiểm tra xem nếu Vin lớn hơn (1/2 + ẳ) giải điện áp Vranger. Giả sử kết quả là sai. Phép so sánh thứ ba sẽ kiểm tra xem liệu Vin có lớn hơn (1/2 + ẳ + 1/8) của giải điện ap Vranger. Quá trình này sẽ lặp lại cho đến khi thế vào xấp xỉ đủ chính xác.


Như vậy ADC xấp xỉ liên tiếp gồm bộ so sánh, một chuyển đổi số tương tự (DAC), một đồng hồ xung nhịp và một thanh ghi xấp xỉ liên tiếp SAR.

Bộ so sánh :
Khuyếch đại thuật toán sử dụng để so sánh hai giá trị điện thế ở cùng độ lớn ( biên độ ), nếu không dùng ở chế độ có phản hồi. Lối ra của một bộ thuật toán lý tưởng là +15V. Nếu V + lớn hơn V – và bằng –15V nếu V + nhỏ hơn V - . Những mạch như vậy được gọi là bộ so sánh ( comparator ). Trong trường hợp này, Vout là giới hạn về 0 tương ứng với 5 V để lối ra có thể tương thích TTL.
Chuyển đổi DAC : Bộ chuyển đổi DAC chuyển đổi số nhị phân thành thế tương tự tương ứng tỷ lệ về độ lớn (biên độ ) với giá trị của số đó.

Khởi đầu quá trình chuyển đổi thế so sánh được đặt bằng nửa thang đo lối vào. Nếu thế so sánh quá lớn lần lượt sẽ thiết lập phép so sánh giữa một tập các giá trị một nửa các giá trị giữa giới hạn thấp và điểm một nửa trước đó. Nếu thế so sánh quá nhỏ thì thế đặt liên tiếp phép so sánh giữa điểm giữa và toàn thang. Quá trình này tiếp tục cho đến khi đạt đến khoảng tăng nhỏ nhất. Mã trên lối ra là giá trị số tính được. Hình vẽ biểu diễn phép so sánh với bộ chuyển đổi 4 bít và chu trình lấy mẫu xấp xỉ liên tiếp.


Có thể thấy số phép so sánh cần thiết bằng số bít trong mẫu. như vậy số chu kỳ xung nhịp cần thiết cho phép tính xấp xỉ liên tiếp bằng số bít lối ra.

4.3.2/ ADC LỐI RA SONG SONG


 

Bộ chuyển đổi song song N bít ( hay bộ chuyển đổi kiểu flash) dùng các thang điện trở để tạo ra 2N - 1 mức lượng tử từ LSB (bít ít ý nghĩa nhất ) đến (2N-1) lần LSB. Mỗi chúng so sánh với thế vào dùng 2N - 1 bộ so sánh. Nếu thế trên lối vào thuận (+) của bộ so sánh lớn hơn lối vào đảo (-) thì lối ra sẽ ở mức cao , khác đi sẽ là mức thấp. Thế ngưỡng được đưa vào lối vào lối vào (+) và thế vào đưa vào lối vào (-). Như vậy lối ra của mỗi bộ so sánh sẽ cao khi thế vào lớn hơn thế ngưỡng và thấp khi nhỏ hơn. Một bộ giải mã (decode) sẽ dịch lối ra từ các bộ so sánh thành mã nhị phân. Hình vẽ biểu diễn một ADC song song 3 bít với 7 bộ so sánh. bảng dưới đây cũng liệt kê số lượng các bộ so sánh cần thiết cho ADC với độ phân giải khác nhau. Có thể thấy DC 16 bít cần 65535 mức thế và bộ so sánh.

ADC flash không yêu cầu xung nhịp và tốc độ của nó chỉ bị giới hạn bởi thời gian thiết lập của tín hiệu. Thường thường được dùng trong các ứng dụng tốc độ cao như bộ giải mã mầu trên các màn hình VGA / SVGA, các ứng dụng rada,...


4.3.3/ LẬP TRÌNH CHO CARD ĐIỀU KHIỂN ADC

Hai đường điều khiển sẽ đồng bộ việc truyền dữ liệu giữa máy tính và ADC. Chúng là các đường SC ( bắt đầu chuyển đổi ) và EOC ( kết thúc chuyển đổi ). Đường SC là đường lối vào ADC và dùng để khởi động một quá trình chuyển dổi. EOC là lối ra từ ADC dùng để chỉ ra rằng quá trình chuyển đổi đã kết thúc dữ liệu trên ADC là hợp lệ và có thể bắt đầu đọc vào máy tính. Tín hiệu này ở mức kích hoạt thấp.
Như vậy khi SC ở mức cao, bắt đầu một quá trình chuyển đổi khác với EOC ở mức thấp khi ADC đã thực hiện xong việc chuyển đổi. PPI có thể được dùng để điều khiển và quan sát các đường tín hiệu móc nối này bằng cách nối hai đường với 2 bít trên cổng C ( điều khiển SC và quan sát EOC )


Đường EOC là lối vào với PPI và SC là lối ra. Máy tính khởi động quá trình chuyển đổi ADC bằng cách đặt SC lên cao. Tiếp theo máy tính sẽ quan sát EOC cho đến khi nào nó xuống mức thấp. Khi đó sẽ tiến hành đọc tại cổng (A) mà lối ra ADC nối với nó.
Cổng C có thể tách ra thành hai nửa vào và ra C ( cao ) và C (thấp). Khi này C thấp là lối vào ( nối với EOC ) và C (cao) là lối ra ( SC). lưu đồ như sau :

1/Đặt SC lên cao (PC4 - 1)
2/Quan sát EOC (PC0 ) cho đến khi nó xuống thấp (0)
3/Đọc từ cổng A
4/Đặt SC (PC4) xuống thấp (PC4 - 0 )
5/Trễ một chút
6/Quay trở lại 1


a/Ghép nối với ADC qua PPI với mode 1
Vấn đề chính với Mode 0 là máy tính phải thường xuyên quan sát đường EOC. Kỹ thuật để cải tiến là cho phép PPI thông báo cho ADC biết dữ liệu ở vùng đệm của cảng chưa được đọc và đừng viết thêm dữ liệu mới vào. Điều này đạt được nhờ việc sử dụng PPI ở mode 1. Trong mode này cổng C được dùng để móc nối


Khi gửi số liệu vào máy tính, thiết bị ngoài đặt STB xuống mức kích hoạt thấp (0), dữ liệu sau đó được đọc vào vùng đệm vào. Tiếp theo PPI tự động đặt IBF lên cao và dữ nguyên cho đên khi PC đọc xong dữ liệu từ vùng đệm. Đường này được dùng để báo cho ngoại vi đừng gửi thêm bất kỳ dữ liệu nào đến PPI. Một khi dữ liệu đã được đọc IBF trở lại mức thấp báo cho ngoại vi (ADC) có thể tiếp tục gửi dữ liệu.

 

Hình vẽ biểu diễn các thiết lập có liên quan đến chương trình điều khiển. đây là hoạt động móc nối điển hình, chỉ có điều cần đến một bộ đảo giữa IBF và SC để cho phép các tín hiệu được thích hợp.

Khi vùng đệm của cổng đầy và đường PC5 (IBF) là không ở mức kích hoạt ( thấp ). Kết nối này thông qua bộ đảo đến SC của ADC. Khởi động nó ở mức cao sẽ bắt đầu quá trình chuyển đổi của ADC. Khi kết thúc EOC xuống thấp đường này lại nối trực tiếp với PC4 (STB) khiến cho dữ liệu trên cổng A có thể được nạp vào vùng đệm vào của cổng. PPI sau đó tự động đặt bít PC5 (IBF) lên cao ( gây ra SC chuyể xuống thấp và reset ADC ) đường này dữ nguyên cho đến khi PC đọc xong dữ liệu từ vùng đệm vào. Khi đó đường IBF xuống thấp làm cho SC lên cao. ADC lại bắt đầu một quá trình chuyển đổi mới

b/ Lập trình ở mode 1
Vì PC4 (STB) xuống thấp lối ra của ADC được đọc vào vùng đệm. Khi xảy ra điều này thì PC5 (IBF) tự động lên mức cao báo hiệu vùng đệm vào đầy. Như vậy PC phải kiểm tra đường này để phát hiện nếu có số liệu hợp lệ trên vùng đệm vào chưa. Lệnhì ((inportb(PORTC) & 0x20 ) == 0x20) đọc một byte từ cổng C và mặt nạ đó để kiểm tra bit PC5 (IBF). Nếu bít này là 1 thì đường này là cao và dữ liệu trong vùng đệm là hợp lệ.


 

4.3.4/ CHUYỂN ĐỔI TỪ SỐ THÀNH GIÁ TRỊ TUYỆT ĐỐI
Trong hầu hết các trường hợp giá trị số đọc được từ ADC cần phải chuyển đổi sang giá trị thực tế như áp suất hay nhiệt độ. Để xác định nhiệt độ tuyệt đối cần thiết phải có đặc trưng chuyển đổi nhiệt độ sang điện áp của cảm biến (sensor) và hệ số khuyếch đại sử dụng. Thường thường, thế lối ra từ sensor nhiệt độ đựoc đưa vào bộ khuyếch đại với cả tín hiệu đơn cực lẫn tín hiệu lưỡng cực.


Hình vẽ biểu diễn đặc tuyến nhiệt độ . Cái đầu là khoảng thế đơn cực với mức thế 5V biểu diễn cho nhiệt độ 100oC và 0V biểu diễn cho 0oC. chuyển đổi giữa thế lối ra (V) và nhiệt độ sẽ theo công thức :
T = 20xV oC
Cái thứ hai là giải điện áp lưỡng cực. Thế +5V biểu diễn nhiệt độ 100oC và -5V biểu diễn 0oC. Công thức chuyển đổi sẽ như sau :


T = 10xV + 50oC

Thế ra của bộ khuyếch đại được đưa vào ADC hoặc loại đơn cực hoặc loại lưỡng cực. hình vẽ biểu diễn phép chuyển đổi giữa giá trị số và nhiệt độ. Chuyển đổi này giả thiết rằng thế vào cực đại mã hoá 255 và cực tiểu là 0. Từ đó có thể có được đồ thị chuyển đổi gữa giá trị lấy mẫu (số) và nhiệt độ đo được.

Ví dụ : Hệ ROBOT đơn giản
Hai diod nhạy sáng gắn với một trục của một motor bước điện từ có thể thực hiện được chức năng của một hệ ROBOT đơn giản ( hệ tự động trên cơ sở phản hồi)

Motor bước :
Các xung TTL áp dụng với các cuộn dây của motơ, làm quay trục đi các bước rời rạc, theo các góc. Các transitor nguồn NPN- (kiểu BD677) sử dụng để điều khiển các cuộn này. Để điều khiển mô tơ theo một hướng xác định, Các tansitor cần được điều khiển bật tắt (dẫn) theo một chuỗi tuần từ xác định. Các bước liên tiếp như vậy tạo ra mỗi lần tuần tự bật nguồn cho cuộn dây tiếp theo và tắt nguồn cho cuộn trước đo. Motơ quay ngược lại khi mã trứơc đó được đặt lên cuộn. Chuỗi tuần tự các mã cho bốn cuộn dây của mô tơ bước được cho trong bảng.
Nếu đặt “1” lên lối vào của một transitor nó sẽ dẫn điện và cuộn tương ứng được kích hoạt.
Hệ thống cảm biến :Hai diod ánh sáng được nối với một bộ so sánh analog. Lối ra so sánh sẽ là “1” hoặc “0” tuỳ thuộc vào photo diod nào được chiếu sáng hơn.

Hệ ROBOT :
Lối ra bộ so sánh được dùng để phản hồi trở lại máy tính để quyết định việc điều khiển motơ quay trái hay phải. ( theo chiều kim đồng hồ hay ngược lại chính là hướng tới nơi có nhiều ánh sáng hơn hay sáng ít hơn tuỳ thuộc vào cách lập trình )
Lưu ý : vì hai diod không bao giờ được chiếu sáng như nhau nên MOTOR sẽ không bao giờ dừng lại ở giữa hai vị trí.
Một hệ thống như thế gọi là hệ SERVO


 

Bài tập điều khiển mô tơ bước: Dùng ngôn ngữ lập trình C để viết chương trình điều khiển mô tơ bước (4 lối điều khiển) quay phải, quay trái, tăng tốc, giảm tốc dùng bàn phím

1)  Khai báo chương trình 

 

Hình : Khai báo biến mảng giữ các giá trị nhị phân dùng để điều khiển 4 bít thấp cổng A, các biến điều khiển khác
 

 

 2) Lập 2 hàm điều khiển mô tơ quay phải hoặc quay trái

 

Hình : Khai báo 2 hàm điều khiển phải, trái  dùng 2 vòng lặp xác định, điều kiện thoát khi gõ phím
3)  Khai báo thân chương trình, bắt phím

 

 

Hình : Khởi tạo chế độ Mod, bẫy phím được gõ

 

 4) Xử lý rẽ nhánh điều khiển

 

Hình: Điều khiển rẽ nhánh cho các trường hợp bấm phím mũi tên, phím ESC

 

5) Màn hình kết quả

 

Hình: Màn hình kết quả trong DOS

 

 

4.4/ Chuyển đổi số tương tự (DAC)
Chuyển đổi từ một giá trị số thành mức thế tương tự . Thường dễ thực hiện hơn ADC và có thể được xây dựng trên cơ sở các chuyển mạch điện tử và một bộ cộng thế.
PC có thể ghép nối với DAC nhờ nối trực tiếp các bít của một cổng PC với các lối vào của DAC. Ví dụ như khi nối cổng A với các bít của một DAC 8 bít. Lưu ý rằng không cần thiết xung nhịp ngoài cũng như các phần cứng để đồng bộ.


Dạng của một xung tam giác có thể được biểu diễn trên hình vẽ và mô phỏng lại với DAC . với 256 mức, viết ra cổng PPI các giá trị từ 0 - 255 ra DAC. Hiệu ứng xung tam giác sẽ đạt được nhờ việc đếm lên từ 0 – 255 rồi ngược lai đến 0. Tiến trình này lặp lại cho đến khi có một phím được bấm. nếu có thể quan sát dạng sóng trên giao động ký và đo thời gian giữa các vi bước liên tiếp.

Thư viện uiblib.c giúp  cho việc lập trình ghép nối trở nên dễ dàng

Sử dụng :

Copy file thư viên uiblib.c thư viện vào thư muc C:\TC\include

Khai báo thư viện đầu chương trình 

#include <uiblib.c>

hoặc khai báo 

#include "uiblib.c" nếu file này nằm trong thư mục hiện tại (thư mục của sinh viên)

Lưu ý: Các máy tính thực tập tại ITIMS đã cài sẵn thư viện này nên các bạn dùng cách khai báo thứ nhất để sử dụng các hàm trong thư viên.

 

Hình : Hàm đọc giá trị một kênh ADC (từ 1.4) trả về giá trị 12 bít
Hình : Hàm kiểm tra trạng thái hiện tại của một bộ đếm bằng cách chốt sử dụng lệnh đọc lại bộ đếm với 3 bộ đếm C0..2 và kiểm tra bit 7
Hình : Hàm kiểm tra xem một bộ đếm đã được nạp hay chưa bằng cách sử dụng lệnh đọc lại bộ đếm và kiểm tra bít 6
Hình : Hàm đọc và trả về giá trị 1 bộ đếm 16 bít

 Ứng dụng thư viện uiblib.c

Hình : Tạo một dao động ký điện tử

Hình : Tạo một dao động ký điện tử cách khác

 

 

 

Lần cập nhật cuối ( Thứ hai, 22 Tháng 3 2010 17:58 )
 

Tiếng Việt (Việt Nam)   English (United States)


Thời khóa biểu
Lịch làm việc học viên ITIMS

Lịch công tác ĐHBKHN
Lịch công tác ĐHBKHN


Hội cựu học viên

Thăm dò ý kiến

Theo bạn, Việt Nam cần đầu tư vào lĩnh vực nào dưới đây để tăng tốc độ phát triển?