Thông báo

Collapse
No announcement yet.

Giao tiếp RS232 và vẽ đồ thị bằng C#

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giao tiếp RS232 và vẽ đồ thị bằng C#

    Kì này mình có làm giúp mấy đứa bạn đề tài như dzầy: Dùng PIC18F4550 đo dạng sóng của tín hiệu sau đó truyền lên máy tính bằng vẽ đồ thị qua cổng RS232, phần mềm trên máy tính viết bằng C#.

    Sau mấy tháng làm tìm hiểu cũng làm được một phần rùi, hôm nay mình POST lên đây để anh em cùng thảo luận.

    Lý do dùng PIC18F4550 là mình muốn phát triển đề tài này lên thành giao tiếp USB.

    Hiện tại mình mới chỉ gửi được dữ liệu từ PIC18F4550 lên máy tính qua cổng COM và vẽ được đồ thị. Mình giả lập các tín hiện (dạng sin, cos, vuông, ...) bằng các hàm toán trong PIC, sau đó truyền 100 mẫu lên máy tính. Chương trình trên máy tính sẽ nhận và xử lý dữ liệu nhận sau đó vẽ đồ thị.

    Do ADC của PIC là 10 bit nên mình truyền mỗi mẫu thành 2 byte, mỗi byte chứa 7 bit mẫu dữ liệu. Truyền byte cao trước, byte thấp sau, giải thuật truyền như sau:

    1. Đầu tiên truyền 2 byte DLE và STX (DLE mình qui định là ký tự 'D', STX là 'A')

    2. Sau đó truyền các byte dữ liệu, nếu byte dữ liệu trùng với DLE thì thêm 1 byte DLE ở phía trước.

    3. Cuối cùng kết thúc bằng 2 byte DLE và ETX (ETX mình qui định là 'Z')

    Sau khi truyền lên máy tính mình sẽ xử lý như sau:

    1. Đọc chuỗi dữ liệu cho đến khi gặp 2 ký tự là "DZ".

    2. Thay thế chuỗi "DD" bằng "D"

    3. Bỏ đi chuỗi "DA" (thay thế "DA" bằng chuỗi rỗng)

    Như vậy với 100 mẫu dữ liệu và tốc độ baud là 9600 baud thì mình tính được thời gian truyền như sau:

    1. Tối thiểu: Khi dữ liệu không có chứa byte nào trùng với DLE => truyền tổng cộng là 204 bytes. Thời gian truyền: 204*10/9600 = 0.21 s

    Sở dĩ nhân 10 là do mình truyền: 1 bit start + 8 bits dữ liệu + 0 bit parity + 1 bit stop

    2. Tối đa: Khi tất cả các byte dữ liệu đều trùng với DLE => truyền tổng cộng là 404 bytes. Thời gian truyền là: 404*10/9600 = 0.42 s

    Chi tiết thì các bạn đọc thêm trong Code nha.

    Kết quả mình được như sau:





    Source code
    Code MikroC và file Mô phỏng: http://www.mediafire.com/download.php?yqi11ihq1ic79ea
    Code C# & Demo: http://www.mediafire.com/download.php?331kljbjv4536hs

    Chương trình trên máy tính mình dùng COM3, ở Proteus là COM2. Các bạn dùng phần mềm tạo cổng COM ảo nối 2 cống COM này lại nha. Trong mạch mô phỏng mình nối trực tiếp cổng COM vào chân vdk cho đơn giản, chỉ dùng để mô phỏng thôi không làm được như vậy với mạch thật nha các bạn.

    Mình sẽ tiếp tục làm, khi nào làm kha khá sẽ up lên tiếp, chúc vui...
    Last edited by dangemailbox; 02-05-2012, 13:50.

  • #2
    đề tài này cũng hay đấy. nếu bạn muốn truyền qua usb thì có thể tham khảo luồng của hienclubvn. bạn ấy làm quq usb rùi!

    Comment


    • #3
      Với pthức truyền nhận của bạn thì bạn truyền theo một gói dữ liệu( giống như các pthức truyền khác). nhưng bạn có đảm bảo rằng việc xử lý trong thời gian thực ko. khi bạn lấy tín hiệu bên ngoài(adc chẳng hạn) thì sẽ khác hơn rắt nhiều khi bạn tạo giả?

      Comment


      • #4
        Mình cũng đang bị vướng ở phần ADC thật. Có lẽ chỉ xử lý một số tín hiệu mẫu đơn giản nhưng chuẩn lấy từ máy phát sóng thôi. Chắc mình không có đủ thời gian cũng như kiên nhẫn để theo đuổi đề tài này cho tới lúc nó được hoàn chỉnh bạn ah!! Thời gian làm của mình chỉ có 1 học kỳ thôi, giờ cũng gần hết học kỳ rùi, mà vẫn còn nhiều đề tài khác nữa đang bị vướng. Nên mới up lên đây để các anh em nào có khả năng thì giúp mình hoàn thành nó.

        Đây chỉ là giao diện đơn giản nhất thôi, mình dự định là nếu hoàn thành nó phải có giao diện trực quan hơn. Có thể là một giao diện MDI với 1 cửa sổ chính và nhiều cửa sổ con.

        - Mỗi cửa sổ con là một kênh của ADC chẳng hạn.

        - Còn cửa sổ chính gồm các menu và các nút trên thanh công cụ để điều khiển kết nối, giao diện của các cửa số con, ...

        Thì dự định như dzậy đi, nhưng ko biết có làm kịp không nữa.
        Last edited by dangemailbox; 04-05-2012, 07:11.

        Comment


        • #5
          trong pic Dâng thử dùng vòng khóa pha PLL để nâng cao tốc độ thử - chắc là mịn hơn đó
          Be quan. Plz contact through email:

          Comment


          • #6
            Nguyên văn bởi Lenh Ho Xem bài viết
            trong pic Dâng thử dùng vòng khóa pha PLL để nâng cao tốc độ thử - chắc là mịn hơn đó
            Mình sẽ thử dùng PLL và tăng tốc độ baud lên. Cảm ơn bạn.

            Comment


            • #7
              bạn sử dụng usb nâng cao rất nhiều về tốc độ, thư viện USB của Microchip mặc định lớp HID có thể truyền được 1 lúc 64 byte và có thể tăng thêm, như vậy bạn có thể truyền 1 lúc được nhiều mẫu hơn.

              Comment


              • #8
                Đúng đấy nếu bạn dùng usb thì có thể sẽ nhanh hơn nhiều và sẽ mịn hơn nhiều, đbảo thật hơn.

                Comment


                • #9
                  Bạn ơi, khi nào giao tiếp được USB, hy vọng bạn chia sẻ vs nhé, yahoo: chanmay8x. thanks.!

                  Comment


                  • #10
                    bạn ơi , up lại link cho mình với , mình ko dow về dc

                    Comment


                    • #11
                      Bác nào có code giao tiếp máy tính bằng 232 và vẽ đồ thị bằng C# hoặc vb.net share cho em với.
                      Em đang mắc đoạn. Lập trình lấy giữ liệu qua đối tượng SerialPort (không phải mscomm như vb6).Em truyền dữ liệu binary lên máy tính với tốc độ 115200, khi có 1 byte dữ liệu trong bộ đệm sẽ sinh sự kiện DataReceived. Em lập trình trên vb.net 2008 và C# 2008 sử mà không biết sử dụng phương thức nào để đọc được dữ liệu binary đó. Em chưa hiểu lắm về cái đối tượng SerialPort này hình như số sự kiện phát sinh ít hơn nhiều số byte nhận được, nó không tự xóa bộ đệm sau mối lần đọc dữ liệu ra. Như ở vb6 ta có thể chọn chế độ text hoặc binary nhưng ở đây thì ko có lựa chọn đó. Truyền text và đọc với phương thức ReadExisting thì hiện ngon lành. Hic hic. Mong các bác giúp, em tìm cái này mất nhiều thời gian quá.

                      Giải pháp điện tử của bạn

                      Comment


                      • #12
                        Bác nào có code mẫu nhận dữ liệu binary dùng đối tượng SerialPort trong vb.net hoặc C# share cho em với. Em cám ơn nhiều nhiều!

                        Giải pháp điện tử của bạn

                        Comment

                        Về tác giả

                        Collapse

                        dangemailbox Tìm hiểu thêm về dangemailbox

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X