Thông báo

Collapse
No announcement yet.

Trao đổi dữ liệu PC - AVR qua com 1

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

  • Trao đổi dữ liệu PC - AVR qua com 1

    Tớ dùng VB thiết lập việc trao đổi giữa PC và AVR.
    Dim A as String
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.InputLen = 0
    MSComm1.PortOpen = True
    MSComm1.Output = "1" & Chr$(13) ' Ensure that
    A = MSComm1.Input
    MSComm1.PortOpen = False

    Việc gửi giá trị 1 tới AVR thì tốt. Nhưng khi AVR gửi lại một giá trị ( được đọc từ EEPRROM ) thì PC lại nhận được một số các ký tự không phải là số.

    Mình đã thử chỉ cho AVR truyền các số liệu ( lấy từ EEPROM ) tới PC thì PC nhận rất đúng các giá trị đó.

    Nhưng khi cho PC truyền tới AVR ( kiểu như gửi tới AVR một ký tự thì quá trình gửi số liệu từ AVR tới PC mới được bắt đầu ) và nhận giá trị từ AVR thì hiện tượng này xẩy ra.

    Các huynh giúp tớ vấn đề này với

  • #2
    trời đất ơi bạn viết cái gì tui hiểu chết liền.
    bạn viết lại cho nó rõ ràng hơn đi.
    cái vụ này tui rành nhưng bác viết gì tui chẳng hiểu câu hỏi gì hêt
    Cty TNHH Cơ Điện tử Hiệp Phát.
    ------------------------------------------
    Trần Hoàng Giang
    11-04-1985

    Mobil: 0905 438 533

    Comment


    • #3
      to irf540: tôi đang làm AVR giao tiếp với máy tính qua cổng COM. Tôi chưa làm phần cứng vì tôi nghe nói AVR rất dễ chết lắm. Bác hướng dẫn tôi có cách nào mô phỏng trước không nhỉ (tôi mò mãi trong Proteus mà không thấy). Nếu bác có thời gian xin giúp tôi có thể cho tôi một ví dụ về truyền dữ liệu giữa PC và AVR được không?
      Cảm ơn bác rất nhiều!

      Comment


      • #4
        ( nói thêm là tôi mới học viết bằng ASM)
        thanks!

        Comment


        • #5
          chào tanbinh. muốn truyền 1 byte từ pc ra cổng com trong VB ta làm như sau:
          vd byte cần truyền là 0x0a(số hex):mscomm1.output=chr(&H0A).
          khi nhận 1 byte từ com:rec=msomm1.input. Khi đó bạn muốn dùng biến rec để so sánh hay làm gì đó bạn cũng phải dùng: chr(&H): vd so sánh biến rec có = 0x0a không bạn làm như sau:if(rec=chr(&H0a)) then...

          Comment


          • #6
            Nguyên văn bởi solomanhood Xem bài viết
            to irf540: tôi đang làm AVR giao tiếp với máy tính qua cổng COM. Tôi chưa làm phần cứng vì tôi nghe nói AVR rất dễ chết lắm. Bác hướng dẫn tôi có cách nào mô phỏng trước không nhỉ (tôi mò mãi trong Proteus mà không thấy). Nếu bác có thời gian xin giúp tôi có thể cho tôi một ví dụ về truyền dữ liệu giữa PC và AVR được không?
            Cảm ơn bác rất nhiều!
            Nếu bạn cứ sợ nó chết thì đến bao giờ mới dám lắp mạch thật? Mô phỏng thì vẫn chỉ là mô phỏng. Có những vấn đề chỉ xảy ra trên mạch thật thôi. Bạn nên đọc kĩ datasheet của chip rồi hỏi thêm những ng có kinh nghiệm để làm. Giao tiếp qua COM thì bạn có thể dùng HyperTerminal để debug truyền qua lại giữa PC và AVR đã. Nếu chắc chắn là AVR đã hoạt động đúng theo ý định thì mới viết code trên VB giao tiếp với AVR.

            Vote hộ tớ với. Thanks!

            Comment


            • #7
              Nguyên văn bởi va_hien Xem bài viết
              Giao tiếp qua COM thì bạn có thể dùng HyperTerminal để debug truyền qua lại giữa PC và AVR đã. Nếu chắc chắn là AVR đã hoạt động đúng theo ý định thì mới viết code trên VB giao tiếp với AVR.
              bạn có thể nói rõ hơn cách dùng như thế nào không ?
              Biển học mênh mông , quay đầu lại là!

              Comment


              • #8
                Em sử dụng USART và lập trình để khi AVR nhận được một byte thì nó gửi lại cho PC một byte để trả lời nhưng mà khi gửi xong rồi thì PC toàn nhận về 2 hay 3 byte liền cơ. Có lẽ do em đặt baud rate không đúng? em sử dụng mega8535 dùng dao động trong nhưng chẳng biết dao động trong của nó là bao nhiêu, nghe nói phải chạm tới fuse bit nhưng vụ này em chưa cho kinh nghiệm. Bác nào giúp em với. Thanks!

                Comment


                • #9
                  Nguyên văn bởi tanbinh_mu Xem bài viết
                  Tớ dùng VB thiết lập việc trao đổi giữa PC và AVR.
                  Dim A as String
                  MSComm1.CommPort = 1
                  MSComm1.Settings = "9600,N,8,1"
                  MSComm1.InputLen = 0
                  MSComm1.PortOpen = True
                  MSComm1.Output = "1" & Chr$(13) ' Ensure that
                  A = MSComm1.Input
                  MSComm1.PortOpen = False

                  Việc gửi giá trị 1 tới AVR thì tốt. Nhưng khi AVR gửi lại một giá trị ( được đọc từ EEPRROM ) thì PC lại nhận được một số các ký tự không phải là số.

                  Mình đã thử chỉ cho AVR truyền các số liệu ( lấy từ EEPROM ) tới PC thì PC nhận rất đúng các giá trị đó.

                  Nhưng khi cho PC truyền tới AVR ( kiểu như gửi tới AVR một ký tự thì quá trình gửi số liệu từ AVR tới PC mới được bắt đầu ) và nhận giá trị từ AVR thì hiện tượng này xẩy ra.

                  Các huynh giúp tớ vấn đề này với
                  Chào bác!mình cũng làm đề tài giống như vậy.nhưng minh viết trên atmega32l mà chưa biết gì về nó cả.
                  Bác đã từng làm có thể giúp em khong ạ!
                  cho em xin ít tài liệu liên quan nha.

                  Comment


                  • #10
                    Đọc xong chả biết bác nào hỏi nữa . Việc truyền nhận dữ liệu lỗi hay mắc phải là do tốc độ 2 bên không giống nhau, bạn check lại Fuse bit xem thế nào? mà AVR dễ chết hồi nào nhỉ? Mình làm hoài mà không thấy con nào " chịu " chết cả
                    *** Thành viên không biết gì về điện ***

                    Comment


                    • #11
                      Nguyên văn bởi solomanhood Xem bài viết
                      Em sử dụng USART và lập trình để khi AVR nhận được một byte thì nó gửi lại cho PC một byte để trả lời nhưng mà khi gửi xong rồi thì PC toàn nhận về 2 hay 3 byte liền cơ. Có lẽ do em đặt baud rate không đúng? em sử dụng mega8535 dùng dao động trong nhưng chẳng biết dao động trong của nó là bao nhiêu, nghe nói phải chạm tới fuse bit nhưng vụ này em chưa cho kinh nghiệm. Bác nào giúp em với. Thanks!
                      Nếu dùng dao động trong thì 1MHZ,nên cấu hình cho AVR dùng thạch anh ngoài,sau đó tùy vào tần số của thạch anh mà thiết lập tốc độ baud cho AVR,trong datasheet Phần USART,ở cuối ở phần này có bảng giá trị baud cho các giá trị thạch anh khác nhau,bạn vào đấy xem thử.
                      Bạn nên post code viết cho VDK lên thì mọi người mới biết đằng nào mà lần chứ.

                      Comment


                      • #12
                        Đúng là bác tanbinh_mu viết khó hiểu thiệt. Khi viết chương trình bằng VB với điều khiển MSComm mình có một số góp ý:

                        -Dữ liệu PC(MSComm) truyền đi - nhận về là dạng mã ASCII. Cần chú ý đổi kiểu dữ liệu cho đúng.
                        -Khi nhận dữ liệu bạn nên dùng sự kiện OnComm(), chú ý đến thuộc tính RThreshold (quy định sau khi PC nhận được bao nhiêu byte dữ liệu sẽ gọi sự kiện OnComm).

                        Về phần mạch giao tiếp cần hết sức chú ý đến set tốc độ baud cho AVR. Nên dùng một chương trình monitor com port để xác định xem việc set tốc độ Baud đã đúng chưa, ok--> tìm sai sót trên VB.
                        Nếu chỉ truyền ở tốc độ 9600 thì dùng dao động nội vẫn Ok, chưa cần đến TA ngoài.
                        Last edited by apple; 22-10-2008, 14:12.
                        Mấy ai định nghĩa được tình yêu.
                        Có gì đâu một buổi chiều.
                        Kề dao lên cổ yêu hay chết .
                        Gật đầu cái rụp thế là yêu.

                        --------
                        Apple

                        Comment


                        • #13
                          Nguyên văn bởi photoman Xem bài viết
                          bạn có thể nói rõ hơn cách dùng như thế nào không ?
                          HyperTerminal là một tiện ích của Windows,
                          có thể tìm thấy ở :
                          Start/All Programs/Accessories/Communications/Hyper Terminal
                          Sau đó chọn " New Connection ", thiết lập Connect Using là COM1,2,3,4 gì đó thì tùy
                          Thiết lập các thông số khác như tốc độ, ... ->
                          *** Thành viên không biết gì về điện ***

                          Comment


                          • #14
                            Hey thí cái này phù hợp cái mình cần tìm, nhưng vào rồi thí tá lả không biết gì hết lun, có pác nào giải thích giúp em làm thế nào mà AVR truyền dữ liệu lên PC, và PC truyền xuống AVR. Em là newbie trong việc này nên mới đầu hỏi nhiu đó thôi. Mong anh em chỉ dùm!!!

                            Comment


                            • #15
                              Nguyên văn bởi irf540 Xem bài viết
                              trời đất ơi bạn viết cái gì tui hiểu chết liền.
                              bạn viết lại cho nó rõ ràng hơn đi.
                              cái vụ này tui rành nhưng bác viết gì tui chẳng hiểu câu hỏi gì hêt
                              pác cho em hỏi tí chút nha:
                              trên PC mình có thể thiết lập truyền 9bit dữ liệu ko vậy

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X