Đồng bộ tín hiệu giữa 2 MCU!

Em không biết nên post bài này ở mục nào, anh admin cho em góp ý là nên làm thêm 4 mục tương ứng với 4 chuyên ngành chính luôn như mục "Tự động hóa", "Điện tử", "Viễn thông", "Điện năng"; để có những vấn đề chung chung nằm ở 1 chuyên ngành tổng thể, chúng mình vẫn có thể trao đổi được với nhau, anh admin nhá.

Vấn đề thắc mắc của mình như thế này!

Mình đang làm bài tập lớn môn "Truyền số liệu và mạng", đề tài về việc xây dựng giao thức kiểm soát lỗi trên đường truyền.

Hiện tại mình đã viết được chương trình truyền và nhận dữ liệu giữa 2 MCU như sau:
_ Dùng 1 chân I/O để truyền tín hiệu dạng TTL.
_ Dùng 1 chân I/O khác là cờ để báo cho MCU kia là bắt đầu truyền hay đã truyền xong.
_ Mạch dùng 8 led để hiển thị quá trình dịch bit đưa lên đường truyền
_ Dùng LCD để hiển thị data truyền
_ 2 MCU sử dụng là 2 con PIC16F887
_ Chương trình được chạy mô phỏng = Proteus
Nhưng sau khi nhận được 1 khung đầu tiên đúng thì các khung còn lại sau đó, nó bị mất đồng bộ tín hiệu và bắt đầu nhận tín hiệu lung tung...

Trong chương trình, mình dùng hàm delay để tạo xung nên mình nghĩ vấn đề mất đồng bộ của mình nằm ở đây.

Mình không biết cách khắc phục vấn đề này như thế nào, mong mọi người góp ý giúp mình :)

Xin cảm ơn!
 
việc em truyền nhận dữ liệu thì nên đưa nó vào trong ngắt để cho đảm bảo. và đặc biệt để truyền dữ liệu thì ta có 2 loại giao thức truyền: đồng bộ và bất đồng bộ. truyền giữa 2 MCU tương đối gần vì vậy em nên dùng phương thức đồng bộ bằng cách một đường truyền data còn một đường sẽ truyền xung clock để đồng bộ. ví dụ như dữ liệu sẽ được chốt ngay cạnh lên của xung clock. và dữ liệu truyền ngay cạnh xuống của xung clock thì lúc đó quá trình đồng bộ sẽ đảm bảo.
 
Theo như thuật toán của em đang dùng là truyền bất đồng bộ, nên về sau nó bị mất đồng bộ luôn và chưa biết xử lý ra sao >.<
Thuật toán của em như sau:
_ Master khi bắt đầu truyền sẽ hạ cờ truyền xuống = 0 (khi đường truyền idle thì cờ = 1)
_ Xung truyền đi là 500ms
_ Slave nhận cờ = 0 sẽ đợi 250ms sau đó mới bắt đầu lấy mẫu mỗi 500ms (tức là lấy mẫu ngay giữa xung)

Không biết là anh có thời gian để em gặp trực tiếp trao đổi không nhỉ?
 
Ôi, sau nhiều đêm vật vã... cuối cùng nó cũng đã chạy ngon lành!!! =))

Thành công chỉ đến khi chúng ta không ngại khó khăn và chỉ có bắt tay vô "làm việc, làm việc và làm việc" thì nó mới thành công được... ^^
 
Top