View Single Post
Old 26-06-2008, 11:00 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi hpecom View Post
Hiện tại em dùng PC (có RS232-RS485 converter) để thử nghiệm việc truyền nhận.
Em nhận các ký tự truyền từ PC xuống dsPIC và dsPIC truyền trả lại PC những ký tự nó đã nhận được.
Và em đã tìm ra lỗi: Nguyên nhân do em không có khoảng delay sau khi truyền có lẽ MAX485 chưa truyền xong em đã nâng DE/RE lên 1 nên mất ký tự cuối cùng.
Nhưng em không hiểu sao khi mình truyền 2, 4, 6. ký tự thì lại không bị mất và mình nên delay khoảng bao lâu là tốt nhất vậy anh?
Nếu gửi dữ liệu từ PC xuống dsPIC và dsPIC trả lại dữ liệu thì nên thiết kế cơ chế bắt tay.

MAX485 chỉ chuyển mức tín hiệu từ RS-232 (so với 0 V) thành RS485 (vi sai) thôi, nhưng dsPIC cần điều khiển các chân DE và /RE một cách thích hợp.

Về code ở trên, có thể giải thích những gì đang diễn ra như sau:

Vì các bit <7:6> của thanh ghi U1STA bằng '00', mỗi ký tự nhận được tại UART1 của dsPIC sẽ tạo 1 ngắt, do đó vòng lặp while () trong code xử lý ngắt chẳng có tác dụng gì ngoài việc chỉ đọc ký tự đó vào bộ đệm nhận rồi trở về, sau khi bật cờ gFlag_1. Khi đó vòng lặp chính trong main() có thể phát hiện ra đã thu được một ký tự và dsPIC bắt đầu phát một loạt ký tự về PC, việc phát là ổn vì code kiểm tra trạng thái của bộ đệm phát, và chỉ thoát khỏi vòng lặp kiểm tra khi đã phát xong ký tự. Phía PC thu được như thế nào lại là chuyện khác.

Trong quá trình dsPIC đang phát loạt ký tự về PC, nếu PC cũng phát tiếp một ký tự nữa thì không rõ chuyện gì sẽ xảy ra, vì không rõ hành vi của bộ chuyển đổi RS-232/RS-485 bên phía PC.

Câu hỏi của bạn về truyền 2, 4, 6 ký tự lại không bị mất là không rõ ràng, vì không rõ dsPIC phát hay PC phát? Ở đây thực chất có 2 kênh truyền nhưng chỉ có một đường truyền, do đó cần xác định rõ ràng.

Khi dsPIC phát và PC thu, dsPIC có thể đặt trạng thái cho MAX485 nối vào nó để làm việc đó. Khi PC phát và dsPIC thu, thông thường dsPIC không biết lúc nào sẽ xảy ra việc truyền thông, nên nó thường phải đặt trạng thái cho MAX485 nối vào nó ở chế độ thu. Tuy nhiên, như đã nêu ở trên, vẫn có khả năng PC thử phát 1 ký tự vào đường truyền đang được dùng để phát từ dsPIC về PC.

Hành vi của phía chủ động phát là PC đến lúc này vẫn chưa rõ.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn