Thông báo

Collapse
No announcement yet.

PIC18F4550_USB_CDC] Dữ liệu nhận về bị sai khi chứa byte có giá trị 27.

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

  • PIC18F4550_USB_CDC] Dữ liệu nhận về bị sai khi chứa byte có giá trị 27.

    Xin chào mọi người !

    Có 1 vấn đề mình nhờ mọi người giúp đỡ !

    Mình đang xây dựng 1 USB CDC với PIC18F4550, thư viện usb, driver lấy từ mla ( microchip libraries application).
    Quá trình kết nối và truyền nhận dữ liệu không có sự số tuy nhiên có 1 trường hợp đặc biệt nếu trong dữ liệu gửi lên PC có chứa byte = 27 ( escape ).
    Nếu trong đoạn dữ liệu gửi lên có chứa 27 thì các giá trị của byte khác bị sai.

    Đây là đoạn mã xử lý dưới PIC cho 4byte trong dữ liệu tăng lên 1 trước mỗi lần truyền :
    Code:
    WRITEBUFF[0]++;
    WRITEBUFF[1]++;
    WRITEBUFF[2]++;
    WRITEBUFF[3]++;
    
    putUSBUSART(WRITEBUFF,CDC_DATA_IN_EP_SIZE);
    Đây là đoạn code nhận dữ liệu trên PC ( C#)
    Code:
    byte[] bdat = new byte[4];
    private void sPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    
           sPort.Read(bdat, 0, 4);
           lblStatus.Text = bdat[0].ToString() + "," + bdat[1].ToString() + "," + bdat[2].ToString() + "," + bdat[3].ToString();
           listBox1.Items.Add(lblStatus.Text);
    }
    Về nguyên lý trên phần mềm sẽ nhận được 4 byte dữ liệu lệch nhau 1 đơn vị theo hướng tăng dần. ( 4byte được khởi tạo lệch 1 ở đầu hàm main).
    Tuy nhiên nếu dữ liệu gửi lên PC có chứa byte = 27 thì dữ liệu nhận sai như hình:




    Attached Files

  • #2
    Nhận định sơ bộ : có vẻ đây là lỗi của phần nhận phía PC hơn là phía bên gửi.
    Phần mềm tự do hoặc không dùng máy tính nữa !.

    Comment


    • #3
      Có lẽ 27 = ESC(escape) nên phát sinh lỗi.

      Comment


      • #4
        Nguyên văn bởi bqviet Xem bài viết
        Nhận định sơ bộ : có vẻ đây là lỗi của phần nhận phía PC hơn là phía bên gửi.
        Để em thử với con PC cùi bắp ở nhà xem sao

        Comment


        • #5
          Nguyên văn bởi davidcopy Xem bài viết
          Có lẽ 27 = ESC(escape) nên phát sinh lỗi.
          Cái này mình nghĩ không đúng. Nếu giá trị 27 gây lỗi thì khi muốn truyền 27 thì hết cách @@

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X