Giao tiếp AVR với PC

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • RedRose
    Thành viên chính thức
    • Apr 2006
    • 63

    #31
    Các bạn mới học nên vào các topic đã được đánh dấu ở phía trên của box tham khảo trước. Có nhiều tài liệu cho các bạn mới bắt đầu mà

    Hoặc có thể mở hẳn một topic mới nhé ^_^
    chunhanhoabattu :rose:

    Comment

    • hikari
      Thành viên mới
      • Jan 2006
      • 18

      #32
      truyên thông vxl và pc theo ý tôi đã làm nhu sau:

      pc truyền xuống vxl nhận và truyền lại dúng byte đó để trả lời đã hoàn tất việc nhận ,sau đó mới cho gửi byte tiếp theo


      ý của tui chỉ có vậy

      Comment

      • congtambk47
        Thành viên mới
        • Mar 2007
        • 1

        #33
        help me! help me!

        Em đang làm đồ án điều khiển động cơ một chiều và động cơ bước bằng AVR, các bác giúp em với, có tài liệu càng tốt.

        Comment

        • daphuckthp
          Thành viên mới
          • Apr 2007
          • 3

          #34
          mình làm mạch giao tiếp AVR với PC khi truyền từ máy tính xuống AVR thì truyền được còn khi truyền lên thì chào thua.Mình thay vài con rồi mà vần như vậy.Có bác nào biết về hiện tượng này thì mình hỏi cái và khắc phục như thế nào nhỉ

          Comment

          • minhhieu
            Thành viên tích cực
            • Mar 2006
            • 499

            #35
            bạn phải khởi tạo cho phép truyền dữ liệu ra cổng UART. mình lấy ví dụ khởi tạo cổng UART của ATmega8535

            //-------------------------------------------------------------------
            UCSRA = 0x00; //
            UCSRB = 0x98; // 1001 1000 cho phép truyền ,nhận và dùng ngắt nhận.
            UCSRC = 0x06; // 0000 0110
            UBRRL = 47 ; // Fosc 7.3782 MHz, 9600 baud rate

            //-----------------------------------------------------------------

            cách truyền dữ liệu ra cổng UART

            #define UDRE 5

            while(!(UCSRA&(1<<UDRE)));//đợi đến khi truyền xong byte trước
            UDR=0xF0; // truyền ra cổng UART giá trị 0xF0;


            // chi tiết bạn xem các thanh ghi trong datasheet để biết rõ thêm
            n
            ĐT: 0986 492 489

            Tham khảo:

            Comment

            • hungnp
              Thành viên tích cực
              • Nov 2005
              • 178

              #36
              Các bạn thân mến.

              Để truyền thông giữa các loại vi xử lý và PC theo tôi có 3 cách như sau:

              - cách thứ nhất: dùng 1 byte đặc biệt để đánh dấu ở cuối khung truyền để bên nhận có thể biết khi nào dữ liệu đã được truyền xong. tuy nhiên cách này không được hoàn hảo nếu như bạn muốn dùng các ký tự này trong khung truyền.
              - cách thứ 2: là dùng phương pháp đếm thời gian để biết rằng khi nào dữ liệu đã truyền xong. một bít trong một khung truyền chỉ truyền trong một khoảng thời gian nhất định nào đấy nếu quá thời gian này thì coi như khung truyền đã được truyền xong hoặc bị lỗi. thuật toán của phương pháp này như sau:

              nhận bít đầu tiên của khung
              |
              |
              V
              nhận xong và cho timer đếm
              |
              |
              V
              Nếu quá timer đếm quá thời gian quy định
              mà vẫn chưa có bít tiếp theo
              ( khoảng 20ms) thì coi như đã truyền xong

              - Cách thứ 3: kết hợp cả 2 phương pháp trên. theo tôi cách này là an toàn tuyệt đối, tôi đã thử dùng cả 3 cách này, kết quả là khả quan. Chúc các bạn thành công.

              Comment

              • toiyeutdh8x
                Thành viên mới
                • Jan 2008
                • 28

                #37
                chào bạn !
                mình đang làm về đề tài thiết kế cân điện tử dùng VĐk AVR ,kết quả đo được hiển thị trên led
                Bạn có tài liệu ,sơ đồ mạch kết nối hướng dẫn giúp mình với,hoặc gửi cho mình theo địa chỉ mail
                toiyeuvietnam8x@gmail.com
                Cảm ơn bạn nhiều!

                Comment

                • trunghieu423
                  Thành viên mới
                  • Apr 2007
                  • 18

                  #38
                  Các bác ơi ! Giúp em với !
                  Em đang test thử cái giao tiếp 232 với máy tính nhưng mãi mà chưa được !
                  Về phần chương trình thì em nghĩ không có vấn đề gì , vì em đã thực hiện giao tiếp giữa 2 con AT32 thì OK ! Còn chương trình trên máy tính cũng OK luôn vì đã nối RxD và TxD của máy tính với nhau !
                  Vấn đề là khi nối 2 chân từ MAX232 vào VDK với nhau mà thực hiện chương trình giao tiếp trên máy tính thì lại không được . Hic
                  Có phải chết con MAX232 không ah ? Nhưng nếu chết thật thì không nhẽ chết đến 5 con , mà toàn con mới ! HIC HIC (9k x 5 = $$$$$)
                  Xin các bác cho em một lời giải thích !

                  Comment

                  • lehanhla
                    Thành viên chính thức
                    • Dec 2008
                    • 38

                    #39
                    Các bạn cho mình hỏi làm cách nào để truyền 1 chuổi từ PC sang Atmega32
                    Mình đang làm PID vận tốc.Mình cần truyền Vset,Ki,Kp,Kd từ giao diện (dùng VS 2005) xuống Atmega32 ( Dùng Codevision ).
                    Mình dùng PWM 9bit OCR1A
                    Timer2 ngắt ở chế độ so sánh tạo CK lấy mẩu từ encoder (12ms).
                    Counter0 đếm xung encoder.

                    Mình có viết 1 hàm để truyền.
                    Mình muốn truyền Vset.
                    Từ giao diện mình truyền:
                    sp1->WriteLine(string_vset+"a");
                    string_vset: là giá trị Vset
                    "a":kết thúc chuổi.
                    Khi bắt được chử "a" thì chuyển chuổi trước nó thành số thực.
                    Test trên terminal thì thấy đúng nhưng khi test trên mô hình thì sai

                    void getstr()
                    {
                    in_count=0;
                    while((current_char=getchar()) != '\r') //return first line
                    {
                    if(current_char==0x08) //backspace
                    {
                    --in_count;
                    }
                    else
                    {
                    switch(current_char)
                    {
                    case'p':
                    in_count=0;
                    kp=atof(in_str);
                    //PORTA.0=1;
                    break;
                    case'i':
                    in_count=0;
                    ki=atof(in_str);
                    //PORTA.1=1;
                    break;
                    case'd':
                    in_count=0;
                    kd=atof(in_str);
                    //PORTA.2=1;
                    break;
                    case'a':
                    in_count=0;
                    sp=atof(in_str);
                    //PORTA.3=1;
                    break;
                    case'r':
                    run=1;
                    reset_timer2();
                    //PORTC.4=1;
                    break;
                    case's':
                    run=0;
                    pwm1=0;
                    time=0;
                    err=0;
                    elast=0;
                    sum_err=0;
                    d_err=0;
                    //PORTC.5=1;
                    break;
                    case't':
                    dir1=0;
                    //PORTC.6=1;
                    break;
                    default:
                    in_str[in_count++]=current_char;
                    }
                    if(run==1)
                    {
                    start_timer2();
                    reset_counter0();
                    start_counter0();
                    }
                    }
                    Phone: 0909319477
                    Email:

                    Comment

                    • phucthinhel
                      Thành viên tích cực
                      • Jan 2006
                      • 782

                      #40
                      Bạn có thể thiết lập giao tiếp qua UART dc mà . Nhưng mà lúc viết thì nhớ cho ngắt UART để tránh khi hệ thống đang chạy thì không thể giao tiếp dc với pc .Còn đơn giản hơn bạn dùng một chân trong vdk làm chân trạng thái chân này dk từ PC ( bằng chân RTS ) chằng hạn . Còn PWM trong AVR đả là cứng rùi . Cẩn thận với Encoder vì khi quay tốc độ cao có thể con vdk sẽ "có thể" bỏ xung đếm không kịp cái này cẩn thận thôi .
                      Mạch nạp Little Programmer
                      MSC-51,AVR,EEPROM ... etc

                      Site Fukusei shop :

                      Comment

                      • lehanhla
                        Thành viên chính thức
                        • Dec 2008
                        • 38

                        #41
                        Hi,mình mò mải cuối cùng cũng truyền được rùi.
                        Phone: 0909319477
                        Email:

                        Comment

                        • HiMas88
                          Thành viên tích cực
                          • Jul 2008
                          • 184

                          #42
                          Có ai có tài liệu giao tiếp máy tính bằng asm ko? Em xin nhé

                          Comment

                          • lehanhla
                            Thành viên chính thức
                            • Dec 2008
                            • 38

                            #43
                            Đây có 1 tài liệu về GTMT nè. Hy vọng nó sẽ giúp ít cho những người mới bắt đầu.

                            Tải xuống
                            Phone: 0909319477
                            Email:

                            Comment

                            • hoanganhp.bk
                              Thành viên mới
                              • Sep 2009
                              • 10

                              #44
                              link die rùi bạn ơi.

                              Comment

                              • yeuphanmem
                                Thành viên mới
                                • Oct 2009
                                • 21

                                #45
                                Xin chào các bạn trong diễn đàn . Tôi là người mới học lập trình AVR và tôi cảm thấy thích thú nhất với mảng giao tiếp giữa AVR và PC thông qua cổng COM. Tôi đang gặp phải 1 vấn đề chưa tìm được phương án giải quyết mong được mọi người trong diễn đàn chỉ giúp .

                                1. Khi truyền 1 byte từ Máy tính (Để giao tiếp VDK với MT tôi dùng Visual basic) xuống VDk thì OK (Tôi dùng hàm getchar() cho đơn giản ) . Khi truyền 1 mảng dữ liệu từ máy tính xuống thì tôi out dữ liệu liên tục xuống , trên VDK tôi dùng 1 mảng nhận dữ liệu : nhandulieu[10] ; 10 là ký tự truyền .

                                Khi truyền trạng thái của hệ thống ( ví dụ như trạng thái của động cơ : Quay trái ... Tắt mở...) thì được nhưng khi truyền 1 giá trị chẳng hạn như vận tốc, hoặc tần số ... thì không được ,
                                RẤT MONG MỌI NGƯỜI CHO Ý KIẾN . XIN CẢM ƠN

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...