RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Giao tiếp AVR với PC

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts

  • gtvt45
    replied
    Nguyên văn bởi yeuphanmem Xem bài viết
    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
    Cái này xử lý trong ngắt truyền thông: ngắt truyền, ngắt nhận ở AVR là ổn bác àhh. CHứ cứ đứng lì đó mà getchar() thì bao giờ mới làm vc khác.
    Tham khảo: http://www.dientuvietnam.net/forums/...ad.php?t=14599

    Leave a comment:


  • yeuphanmem
    replied
    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

    Leave a comment:


  • hoanganhp.bk
    replied
    link die rùi bạn ơi.

    Leave a comment:


  • lehanhla
    replied
    Đâ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

    Leave a comment:


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

    Leave a comment:


  • lehanhla
    replied
    Hi,mình mò mải cuối cùng cũng truyền được rùi.

    Leave a comment:


  • phucthinhel
    replied
    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 .

    Leave a comment:


  • lehanhla
    replied
    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();
    }
    }

    Leave a comment:


  • trunghieu423
    replied
    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 !

    Leave a comment:


  • toiyeutdh8x
    replied
    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!

    Leave a comment:


  • hungnp
    replied
    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.

    Leave a comment:


  • minhhieu
    replied
    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

    Leave a comment:


  • daphuckthp
    replied
    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ỉ

    Leave a comment:


  • congtambk47
    replied
    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.

    Leave a comment:


  • hikari
    replied
    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

    Leave a 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...