Thông báo

Collapse
No announcement yet.

Mô phỏng Proteus : AVR<->PC Lỗi

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

  • Mô phỏng Proteus : AVR<->PC Lỗi

    Kính chào các bác, đọc hàng loạt bài, lấy rất nhiều tài liệu nhưng vẫn lỗi. Kết nối AVR với PC qua Rs232 bị lỗi. Truyền nhận sai ký tự. Tuy nhiên mới ở góc độ mô phỏng bằng Proteus, CodeVision, và HyperTerminal.
    +Chip Mega16 -> dùng 4MHz
    +Truyền dẫn dùng Vitual Serial Port Driver.
    Kết quả, test trên 2 cửa sổ HyperTerminal -> cực ngon, truyền gì ra nấy, Test trên MSComm của C# cũng cực chuẩn.
    Thế mà tới khi mô phỏng trong Proteus thì sai bét, In cả kết quả ra LCD và máy tính cũng sai.
    Bác nào có cao kiến gì chỉ giáo em phát. Hoặc bác nào ở HN cho em cắp cặp tới học-> Học phí đoàng hoàng.

    YM: null_7x
    MB: 0902 09 66 99.
    Thanks,

  • #2
    Chắc là bạn sai chỗ lắp MAX232 trong proteus thôi, chứ mình mô phỏng đâu có sao đâu.
    Bạn có thể test thử bằng cách. Lôi một cổng com vật lý trong proteus, chọn nó là cổng com 3 chẳng hạn.
    nối hai chân 2 và 3 lại với nhau. Trên máy tính tạo một bộ cổng com ảo là COM2 và COM3. Dùng terminal truyền vào com2 và gõ ký tự bất kỳ sẽ thấy có phản hồi đúng ký tự vừa gõ là cổng COM của Proteus đúng.
    Nếu đúng như vậy thì chỉ kiểm tra lại phần MAX232 thôi.
    n
    ĐT: 0986 492 489

    Tham khảo:

    Comment


    • #3
      Vâng em cũng nghĩ là có thể do mắc sai vì test truyên dữ liệu qua các cổng COM ảo đều OK hết.
      Sơ đồ thì copy trên mạng mắc như sau:


      Thế mà vẫn sai:

      Hàm In ra LCD em lấy trực tiếp từ hàm này:

      interrupt [USART_RXC] void usart_rx_isr(void)
      {
      char status,data,chrs[8];
      status=UCSRA;
      data=UDR;

      itoa(data,chrs);

      //lcd_putchar(data);
      lcd_puts(chrs);

      if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
      {
      rx_buffer[rx_wr_index]=data;
      if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
      if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
      };


      }

      Vì in trong đây không ăn:

      while (1)
      {
      // tmp=0;
      // tmp=getchar();
      // if(tmp)
      // putchar('a');
      // Place your code here
      };

      Hì, chán luôn, 2 hôm rồi, lọ mọ vẫn cứ lọ mọ. HIZZZZZZZZZ

      Comment


      • #4
        Khi mô phỏng không cần sử dụng Max232 đấu chéo chân TX, RX của AVR với Virtual Terminal là có thể test được. Bạn Post đầy đủ chương trình lên đi. Baudrate bạn đang sử dụng là bao nhiêu? Hình như với Thạch anh 4 or 8M chỉ có tốc độ 9600 là ok thì phải, còn các tốc độ baud lớn hơn sẽ sinh sai số lớn hơn nên ký tự truyền nhận bị sai. Bạn sử dụng loại thạch anh 7.3728, 110592, 14.7456 thì sẽ không có sai số. Xem thêm phần tính tốc độ baud trong datasheet

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X