PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 03-02-2009, 01:09 PM   #1
binhdt04
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
mã hóa ,giải mã sửa sai

tôi đang cần đoạn code mẫu hoặc thuật toán để có thể mả hóa và giải mã một chuổi dữ liệu .
đồng thời có thể giải mã và sữa sai data đó

(checksum and encode +decode)

(cụ thể là tôi truyền 8 byte data nhưng trong môi trường truyền có thể có nhiểu gây sai data do đó tôi cần thuật toán để mã hóa và giải ma có kểm theo sữa sai data )
binhdt04 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-02-2009, 04:33 PM   #2
ThanhPhuc
Đệ tử 2 túi
 
Tham gia ngày: Jul 2005
Bài gửi: 35
:
Bạn có thể truyền 9 byte trong đó byte thứ 9 dùng để kiểm tra lỗi.Tuỳ thủ thuật kiểm tra khi phát,bên nhận kiểm tra byte 9,nếu đúng thì báo bên phát phát tiếp,nếu kiểm tra sai thì phát tín hiệu yêu cầu phát lại.
Việc mã hoá , giải mã và kiểm tra làm cho chương trình chậm lại.
ThanhPhuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-02-2009, 05:02 PM   #3
binhdt04
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
làm vậy nếu sai o byte thứ (1_8) rui lam sao biết mà truyền lại
con việc bạn so cham MCU thì không có vấn đề ji cả mình tăng tốc MCU lên là ok
Trong thông tin số liệu là quan trọng nhất thời gian không quan trong bằng.
binhdt04 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2009, 09:14 AM   #4
ThanhPhuc
Đệ tử 2 túi
 
Tham gia ngày: Jul 2005
Bài gửi: 35
:
Hệ thống của bạn phải thu phát 2 chiều hoặc phải có đường phản hồi để báo nhận xong dữ liệu hoặc báo dữ liệu thu bị lỗi.Khi thu bạn phải kiểm tra 8 byte data sau đó so sánh với byte kiểm tra để xác định dữ liệu có bị lỗi hay không để có hướng xử lý.
Thông thường hệ thu phát của bạn phải ổn định và có độ tin cậy.Tỉ lệ sai khi thu phát phải <1% ,nếu không đạt bạn phải kiểm tra lại hệ thu phát.
Chúc bạn thành công.
ThanhPhuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2009, 01:18 PM   #5
binhdt04
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
ôi trời bạn nói tôi không hiểu ji2 hết
Muc tiêu của tôi là CRC +sửa sai
bạn lại toàn đề cập vấn đề ji đó(toàn hệ thống )
hệ thống của tôi hoạc động khá ổn định kể cả trong môi truơng nhiểu khá lớn .Nhưng hiện tại tôi vẩn chưa dùng CRC + sủa sai mà vẩn hoạt động khá OK chạy khoản 2 ngày lể liên tuc mới phát hiện ra lổi nhưng (các lổi data do nhiễu môi trường tạm thời tôi truyền lại)cái tôi muốn nhờ các bạn chỉ giúp chổ sửa sai data do nhiểu môi trường=>> nhưng một lổi thôi củng đủ gây thiệt hại khá lớn nếu tôi bất chấp lổi đó mà process data.



giả sử tôi cần truyền 8 byte {255,255,255,255,255,255,255,255}
nhưng do nhiểu loti nhận đuợc là {255,255,255,255,255,255,254,255}]
làm sao tôi có thể sữa sai cái byte thứ 6 đó mà không cần truyền lại sau khi đã phát hiện ra lổi(vì tôi đã có crc trước đó )

tôi không cần biết nó có làm chậm MCU hay không hay chiếm băng thông đường truyền nhiều hơn khi frame truyền tăng kích thước ........hay ji2 ji di nửa các thứ đó tôi có thể giải quyết được cái tôi quan tâm số một là data va data nhận được từ reciever phải
>=99,99% giồng với từ sender

các bạn có code hay dãy thuật gì tư vấn giúp tôi.!

thay đổi nội dung bởi: binhdt04, 16-02-2009 lúc 01:26 PM.
binhdt04 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2009, 04:38 PM   #6
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 binhdt04 View Post
...

tôi không cần biết nó có làm chậm MCU hay không hay chiếm băng thông đường truyền nhiều hơn khi frame truyền tăng kích thước ........hay ji2 ji di nửa các thứ đó tôi có thể giải quyết được cái tôi quan tâm số một là data va data nhận được từ reciever phải
>=99,99% giồng với từ sender

các bạn có code hay dãy thuật gì tư vấn giúp tôi.!
CRC là mã phát hiện sai sót (error-detection code), tùy vào chiều dài thông điệp của bạn mà việc khôi phục dữ liệu khi có sai sót là dễ dàng hay khó khăn. Thông điệp chỉ có 1 byte dữ liệu và 1 byte CRC chắc chắn có thể giúp bạn khôi phục dữ liệu, còn nếu phần dữ liệu có nhiều hơn 1 byte thì sẽ rất khó khăn trong việc khôi phục dữ liệu.

Giải thuật đơn giản nhất cho việc sửa sai là tự động lặp lại thông điệp:
- Đầu thu tính toán CRC của thông điệp và so sánh với CRC đã nhận được
- Nếu kết quả không khớp thì đầu thu sẽ không xác nhận dữ liệu hợp lệ
- Đầu phát sẽ tự động truyền lại thông điệp đó nếu không nhận được xác nhận dữ liệu hợp lệ

Vì bạn cho biết hệ thống có xác suất lỗi khá thấp, tôi cho rằng giải thuật trên khá phù hợp với trường hợp của bạn.

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
Old 17-02-2009, 04:47 PM   #7
thientaisodo
Đệ tử 4 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Tĩnh - Hà Nội
Bài gửi: 61
:
Send a message via Yahoo to thientaisodo
Mình cũng đang nghiên cứu truyền số liệu trong môi trường rất nhiễu và đường truyền dài. Nếu như phát hiện lỗi mà truyền lại cả gói thì những ứng dụng cần realtime sẽ không thực sự hiệu quả. Mình có tìm hiểu một số cách, có cách rất hay đó là truyền mỗi gói 9 byte, gồm 8 byte dữ liệu (mỗi byte dữ liệu có bit thứ 9 kiểm tra chẵn lẽ), và thêm một byte thứ 9 để kiểm tra các bit hàng dọc trong 8 byte đó (cứ tưởng tượng sắp xếp các bit trong gói đó như một ma trận 9x9). Như vậy có thể sửa lỗi cho gói dữ liệu rất tốt và không phải gửi lại toàn bộ nếu như mất một số thông tin trong gói đó.

Theo mình nghĩ cách đó code cũng không khó và hiệu quả đúng không ?!

thay đổi nội dung bởi: thientaisodo, 18-02-2009 lúc 10:06 AM.
thientaisodo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 09:01 AM   #8
binhdt04
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
vậy la lên đến 10 byte đấy bạn .
ok cách của bạn khá hay đấy nhưng dùng thử mới biết được.để ngày may tôi kiễm tra bằng thực nghiệm mới được nói không là vô nghĩa .
thanks THIENTAISODO nhieu lắm se thữ nghiệm và cho bbac1 biêt kết quả sau .
binhdt04 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 10:00 AM   #9
thientaisodo
Đệ tử 4 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Tĩnh - Hà Nội
Bài gửi: 61
:
Send a message via Yahoo to thientaisodo
Nếu khi nào code xong thì cho mình biết kết quả nhé
thientaisodo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 10:35 AM   #10
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
tôi đặt giả thiết là nếu nó gây ra sai số ở 2 byte phục vụ việc kiểm tra chẵn lẻ thì làm thế nào? sửa đúng thành sai à?
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 03:21 PM   #11
thientaisodo
Đệ tử 4 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Tĩnh - Hà Nội
Bài gửi: 61
:
Send a message via Yahoo to thientaisodo
Trích:
Nguyên văn bởi hopeman View Post
tôi đặt giả thiết là nếu nó gây ra sai số ở 2 byte phục vụ việc kiểm tra chẵn lẻ thì làm thế nào? sửa đúng thành sai à?
Ở đây chỉ có 1 byte để kiểm tra thôi, còn lại là bit thứ 9 (bit kiểm tra chẳn lẻ) của byte dữ liệu thôi. Trường hợp mà sai ít thì còn phát hiện lỗi, còn nếu sai nhiều và ở đúng byte kiểm tra thì phải làm thực tế mới biết được bạn ạ. Việc kiểm tra chồng chéo để chắc chắn thôi, còn lại nếu mất byte kiểm tra và mất tất cả bit thứ 9 của byte dữ liệu thì bó tay
thientaisodo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 11:01 AM   #12
binhlt
Đệ tử 1 túi
 
Tham gia ngày: Dec 2006
Bài gửi: 19
:
Có thuật toán có thể phát hiện sai và sửa sai (với điều kiện sai ít) bạn có thể tham khảo ở đây: http://vi.wikipedia.org/wiki/M%C3%A3_Hamming. Nhưng nếu sai nhiều thì bạn nên dùng cơ chế có phản hồi. Ví dụ: mỗi gói dữ liệu cần truyền đi được thêm vào 1 byte số thứ tự và 1 byte CRC. Đầu thu kiểm tra CRC nếu CRC đúng thì báo gói có số thứ tự đó đúng. Đầu phát sẽ tự động phát lại gói có số thứ tự nào đó nếu sau 1 khoảng thời gian nhất định mà không nhận được thông báo từ đầu thu
binhlt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 12:45 PM   #13
binhdt04
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 43
:
thanks cơ chế này thường áp dụng cho ethernet đây là cơ chế đã được mình áp dụng một lần rùi nhưng cho hiệu suất không cao lắm .
1:dễ gây xung đột bus truyền .(do gởi theo cơ chế đồng loạt =>theo ban có nên sửa lại kiểu gởi hay không ??)

2:làm cho master phai su ly nhung data từ slave truyền tới (co dến 15 salve hơi mệt....)=> khong đáng kể lắm

hiện tại mình đang ứng dụng kiểu này cho những hệ thống cũ.
binhdt04 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-02-2009, 09:32 AM   #14
binhlt
Đệ tử 1 túi
 
Tham gia ngày: Dec 2006
Bài gửi: 19
:
Để tránh xung đột bus truyền bạn nên thiết kế master, slave theo kiểu nối tiếp thành vòng tròn hướng dữ liệu đi chỉ theo 1 phía (kiểu token ring) hoặc sử dụng cơ chế thăm dò trước khi gửi (dạng hub) nhiều slave thì nên thêm 1 byte nữa để định địa chỉ gói tin sẽ tới. Đây là cơ chế tối ưu rồi nên khó có thể chỉnh sửa gì thêm

Còn nếu bạn không thích làm bằng cách gửi phản hồi thì chỉ có thuật toán Hamming đó thôi

Chúc bạn thành công
binhlt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2009, 11:15 AM   #15
tamtamhat
Nhập môn đệ tử
 
Tham gia ngày: Jan 2009
Bài gửi: 3
:
Anh có thể gửi cho em code anh viết cho phần này được ko ạ? Em mới tìm hiểu về truyền thông nên chưa rõ lắm. Hoạt động của CRC_CCITT trong truyền thông?
Thanks !!!
tamtamhat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 12:24 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam