Thông báo

Collapse
No announcement yet.

Giao tiếp AVR với PC

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

  • #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


    • #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


      • #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


        • #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


          • #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


            • #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


              • #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


                • #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


                  • #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


                    • #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


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

                        Comment


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

                          Comment


                          • #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


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

                              Comment


                              • #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...
                                X