Ðăng Nhập

View Full Version : SOS !!! Truyền nhiều biến giữa VB và PIC!!!


vutranthelan
26-11-2009, 10:45 PM
Em có một vài vấn đề về việc truyền nhiều biến giữa Visual Basic và PIC6F877A. Em cũng có nghe nói, và cũng đã thử, là tách thành từng byte rồi gửi. Tuy nhiên dữ liệu hiện lên đôi khi đúng, đôi khi sai, tóm lại là không ổn định!!! Cao thủ bốn phương có cách nào, hay có code nào ví dụ (trên VB và PIC luôn nha,:D) thì bỏ tí công sức giúp em với.

vutranthelan
26-11-2009, 11:12 PM
Bạn đã làm được tới đó rồi,
đôi khi đúng vậy là có đúng rồi.
Như vậy bạn nên xem code của chính mình, thử nghỉ xem khi nó đúng vì sao mà đúng, khi nó sai vì sao mà sai.
Bạn nên bỏ ra nhiều công sức thì kết quả mang lại sẽ hay hơn nhiều so với người khác bỏ tí công sức ra cho bạn cái code mẫu.
Nếu bạn không thể bỏ công sức ra tìm được chỗ sai thì bỏ công sức ra tìm code mẫu và tài liệu đâu đó trên mạng.
Không biết bạn có phải sinh viên không nhỉ, nếu phải liệu bạn có thể mang gương mặt với nụ cười như cái emoticon đó đi nhờ giúp đỡ được bao nhiêu lần nữa ?
Bạn bbaacc01 nói cũng chí lí wa'. Merci vì đã góp ý
Để mình trình bày dự đoán của mình nhé: Khi truyền nhiều byte từ PIC lên VB, ví dụ 3 byte, thì mình sử dụng hàm putc() liên tục 3 lần. Tuy nhiên khi mình gửi liên tục lên VB từ hàm ngắt của Timer1 thì thấy dữ liệu nhận về không ổn định. Theo mình đoán thì trong quá trình truyền bị mất 1 byte nào đó, hay 1 bit nào đó làm dữ liệu về bị sai. Không biết có phải thế không nhỉ?

vutranthelan
30-11-2009, 12:15 AM
Việc truyền nhận nó có ba bên khác nhau:
-bên truyền
-bên nhận
- sợ dây gắn giữa hai bên này.

Quá trình truyền bị mất một bit là chuyện hơi hiếm, chỉ có thể là nó sai một bit, thì nó sẽ nhận được bậy bạ, bây giờ để tìm ra lỗi ở bên nào thì bạn dùng cách loại trừ.

1. Bạn dùng Matlab hoặc dùng Terminal làm đầu nhận, cho pic truyền lên và nhận, mấy chương trình này xem như là đầu nhận tốt rồi, không sai. Nếu OK, lỗi chỉ có thể tại VB, nếu không OK, lỗi chắc chắn có dính liếu đến PIC hoặc sợ dây.
2.- Để chắc là bạn truyền bằng vi xử lí tốt, bạn thử dùng chính PIC để kiểm tra xem. Tuy nhiên các bạn thường hay dùng PROTEUS để mô phỏng đó, bạn cũng có thể mo phỏng để xem code có đúng nguyên lí không. Tớ có cách khác, tớ không thích mô phỏng tí nào cả. Nếu mạch nạp của bạn có tính năng debug thì bạn debug thử. Nếu không bạn đừng dùng Timer1, thử để hàm putc trong hàm main và truyền mỗi lần 3 byte, giữa hai byte có một khoảng delay, sau đó giảm delay dần xem có OK không.
Bạn có thể thử ngắt cọng dây có con MAX232 ra, nối chập hai chân RX và TX của PIC với nhau, truyền ra và đọc về, bạn cứ truyền thử ba chữ 'L', 'A', 'N' chẳng hạn, cứ truyền ra, nhận về, so sánh phần nhận về (bằng code) hoặc xuất ra LCD với phần truyền ra nếu đúng thì CODE ok rồi. Sau đó lại thử với hai đầu bên phần có cọng cáp truyền. Tớ nghĩ cọng cáp của bạn bị nhiễu đó.
Bạn cũng có thể thử cọng cáp bằng cách bỏ pic ra, nói tắt hai phần RX, TX phía TTL của PIC, dùng MATLAB hay chính VB của bạn truyền và nhận, vì nó là ở máy tính nên bạn dễ rồi, nhận về là đọc được, thế là kiểm tra được cọng cáp.

Bạn nên đọc thêm về chuẩn truyền nối tiếp để hiểu qui trình truyền của nó, từ đó đừng có khái niệm với vẩn rằng mất một bit hay một byte nữa, chỉ có thể là nó không chịu truyền cho bạn thôi, còn PIC không có chuyện truyền mất bit hay byte đâu, nếu bạn sợ code của bạn truyền thiếu bạn nên xem thêm về buffer của con truyền nối tiếp của bạn xem nó được mấy mức, để bạn biết bạn có thể truyền liên tục bao nhiêu byte một lần, hoặc đơn giản hơn bạn kiếm xem bộ truyền nối tiếp của bạn có cờ báo truyền hoàn tấc không, hoặc không chắc gì hết thì tru yền 1 chữ, delay một tí để chờ truyền xong chữ đó rồi truyền tiếp.

Thử mày mò xem, bạn sẽ học thêm được nhiều kĩ năng hay lắm đó. Tự tìm được cái sai của mình là vui rồi.

Merci bạn nhiều lắm, mình làm đc rồi!!!