View Single Post
Old 23-06-2006, 11:47 PM   #7
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Nguyên tắc quãng đường = thời gian * vận tốc/2, người ta còn gọi là flying time, và phương pháp định vị người ta gọi là TOF = Time Of Flight. Có lẽ vì bạn dùng từ timedelay = độ giữ chậm thì anh Nam không hiểu.

Nguyên tắc này nói một cách sơ lược, đó là thời điểm , chúng ta phát một xung đi (xem chỉ là cạnh xung thôi, không quan tâm độ rộng). Sóng siêu âm, điện từ, hoặc gì gì đó, sẽ bay trong không gian hoạt động với vận tốc . Như vậy, tổng thời gian đi về của xung này, chính là 2 lần thời gian bay của sóng từ điểm đầu đến điểm cuối (vì còn phải dội ngược về). Nguyên tắc, nếu ta đo được thời gian bay của sóng, thì chúng ta xác định được quãng đường theo công thức:



Về bài toán của bạn, thực chất không có gì khác bài toán siêu âm, tuy nhiên, một vấn đề rất nghiêm trọng, đó là thời gian bay của sóng của bạn quá nhanh (bằng vận tốc ánh sáng). Do vậy, VIKO thực sự làm việc gì?

VIKO thực hiện giống như trên cái thước ban-me, có nghĩa là nó phát ra xung liên tục ở một độ phân giải nhất định, sau đó đến khi nào có sự trùng lặp sóng, thì nó xác định được độ phân giải đó. Bởi vì thực tế, không thể phát hiện được độ sai lệch thời gian khi sóng chuyển động với vận tốc ánh sáng. Đây là một giải pháp khá hay, dùng giải pháp của thước ban-me cơ để đo thời gian Không biết F hiểu như vậy có đúng không .

Oki, việc đơn giản, đó là bạn nhận xung về. Chính xác là bạn cần phải dùng ngắt ngoài để xử lý thôi, nhưng một lưu ý rằng, độ rộng xung của bạn rất nhỏ, nó bắt cạnh lên, chúng ta quan tâm ở đó đã.

Ngắt xảy ra trong PIC chiếm khoảng 20 - 30 dòng lệnh, nếu viết tối ưu code và phụ thuộc chương trình, sẽ có thể giảm nữa. Tổng cộng riêng xử lý ngắt hết khoảng 5 - 10us.

Như vậy, đây sẽ là sai số chủ yếu mà bạn cần phải tính đến. Nói chung, giải pháp dùng ngắt của bạn hoàn toàn không có gì không được cả. Dùng ngắt đọc cạnh lên của xung là oki, còn phần cạnh xuống, không biết bạn có cần đọc không, vì mình không biết chi tiết và nguyên lý chính xác của nó như thế nào. Nhưng mà nếu phải đọc cạnh xuống nữa, thì cái này thật là khó.

Nếu phải đọc cạnh xuống nữa, thì phải thực hiện như sau:
Ngắt cạnh lên
enable lại ngắt ngoài (dùng ngắt trong ngắt để lưu lại giá trị cạnh xuống), sau đó xử lý cả hai. Đây là giải pháp.
Bạn xem bài viết về xử lý ngắt trong ngắt bên dientuvietnam, box Vi điều khiển PIC, bài viết những câu đố vui...

Còn vấn đề xử lý ngắt như thế nào, tuỳ vào bạn muốn viết chương trình bằng MPASM hay C?

Có bài hướng dẫn của F bên phần Học PIC trong 1 ngày, để viết ngắt cho PIC trong MPASM.

Thuật toán của bạn sẽ phải được thực hiện như sau:

Đặt timer = 0;
Phát xung (nhớ tính toán lại thời gian thực chính xác khi xung được phát đi);
Chờ tín hiệu phản hổi trên chân RB0 (ngắt ngoài);
Nếu có ngắt
đọc timer;
giá trị timer chính là giá trị TOF
Nếu không (không có vật cản)
thoát;

Chỉ đơn giản vậy thôi. Còn việc xử lý chi tiết của hệ thống bạn thế nào, thực tình F không biết cái hệ thống VIKO nó ra sao, như thế nào, nguyên lý hoạt động thể nào, chỉ dựa vào mô tả của bạn để đoán ra nguyên lý hoạt động. Nếu có thể, bạn mô tả nguyên lý hoạt động và có hình ảnh minh hoạ rõ hơn, chúng ta sẽ có bài toán hay đó, vì làm một cái thước ban-me để đo thời gian đúng là một ý tưởng hay, chỉ không biết độ phân giải của nó là cỡ nào thôi.

Chúc vui

PS> Về việc bạn đăng nhập không thành công, nhớ thông báo cho F qua email, và bạn thử chọn nút ghi nhớ user, pw rồi đăng nhập, F nghĩ như vậy sẽ thành công.
Goodluck
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn