Thông báo

Collapse
No announcement yet.

Trễ khi truyền dữ liệu AVR-PC qua cổng COM

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

  • Trễ khi truyền dữ liệu AVR-PC qua cổng COM

    Mình dùng cổng COM để truyền dữ liệu từ PC xuống AVR và ngược lại. Sử dụng các checkbox để tắt mở các led (8led tương ứng 8 checkbox), tập hợp trạngt thái các checkbox được 1 chuỗi 8 kí tự (0101...); đồng thời gắn thêm 1 kí tự "a" vào để báo cho AVR biết là kết thúc việc truyền.

    Ở code AVR mình nhận từng kí tự "0", "1" rồi đưa vào mảng char[8], sau khi kết thúc nhận thì xuất tín hiệu ra 8led. Nhưng xảy ra hiện tượng trễ: truyền lần 2 xuống thì led hiện thị kết quả của lần 1.

    Mình có sử dụng 1 biến để getchar() rồi putchar() để truyền từ AVR->PC thì thấy bình thường và không có hiện tượng trễ như trên.

    Mọi người cho mình ý kiến tham khảo xem sửa lỗi trễ kia thế nào?
    và có nhất thiết cần gắn thêm kí tự "a" rồi mới truyền từ PC xuống AVR không?

  • #2
    Thông thường nên có:
    1- mã bắt tay ví dụ là : "@"
    Kiểm đúng @ thì tiếp tục nhận data
    2- Nhận data với số lượng không hạn chế cho đến khi gặp mã kết thúc
    3- Mã kết thúc, ví dụ là "$"

    Vậy : @+ data + $
    Chúc thành công

    Comment


    • #3
      Mình đưa đoạn code ( đưa dữ liệu vào mảng, hiển thị LCD) vào trong ngắt thì thấy OK rồi, ko còn lỗi nữa.

      Ko hiểu tại sao trước đó mình đưa đoạn code đó vào vòng lặp while(1) ở hàm main() lại lỗi thế nhỉ?

      Thanks bạn KDT_2008! Đúng là cách đánh dấu bắt đầu và kết thúc thì sẽ tốt hơn.
      Nhưng mình sử dụng kí tự @ và $ thì lại không được, dùng kí tự khác thì OK.

      Comment


      • #4
        Nguyên văn bởi kebitmat_f Xem bài viết
        Mình dùng cổng COM để truyền dữ liệu từ PC xuống AVR và ngược lại. Sử dụng các checkbox để tắt mở các led (8led tương ứng 8 checkbox), tập hợp trạngt thái các checkbox được 1 chuỗi 8 kí tự (0101...); đồng thời gắn thêm 1 kí tự "a" vào để báo cho AVR biết là kết thúc việc truyền.

        Ở code AVR mình nhận từng kí tự "0", "1" rồi đưa vào mảng char[8], sau khi kết thúc nhận thì xuất tín hiệu ra 8led. Nhưng xảy ra hiện tượng trễ: truyền lần 2 xuống thì led hiện thị kết quả của lần 1.

        Mình có sử dụng 1 biến để getchar() rồi putchar() để truyền từ AVR->PC thì thấy bình thường và không có hiện tượng trễ như trên.

        Mọi người cho mình ý kiến tham khảo xem sửa lỗi trễ kia thế nào?
        và có nhất thiết cần gắn thêm kí tự "a" rồi mới truyền từ PC xuống AVR không?
        Lỗi về phương thức giao tiếp.. mà không có code thì không thể biết bạn đang viết kiểu nào...

        Comment


        • #5
          nhớ là hàm getchar( ) ko tốt lắm vì có vòng while nên chỉ nhận được 1 lần đầu tiên
          Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

          Comment


          • #6
            Nguyên văn bởi hiodong Xem bài viết
            nhớ là hàm getchar( ) ko tốt lắm vì có vòng while nên chỉ nhận được 1 lần đầu tiên
            Đúng là getchar() có thể làm đứng ctr của bạn, tuy nhiên việc chỉ nhận dc lần đầu tiên là không có. Nó chỉ đứng khi bạn gọi nó để lấy data mà không có data trong bộ đệm và sẽ chờ cho đến khi nhận dc data mới thôi.

            Comment


            • #7
              khi truyền dữ liệu PC tới AVR việc chọn dung lượng cho bộ đệm truyền và nhận dữ liệu là quan trọng và phải dùng tới ngắt nối tiếp nữa
              Cái gì biết nói biết. Cái không biết nói không biết. Ấy là biết đấy!
              email:

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X