1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

GUI bằng Matlab với Rs232

Thảo luận trong 'Matlab' bắt đầu bởi bmnhy, 12 Tháng một 2007.

  1. bmnhy Giảng Viên

    Số bài viết: 914
    Đã được thích: 0
    Điểm thành tích: 0
    Xin thay mặt chuyên đề Liên ngành cảm ơn bạn Ngô Hải Bắc, giúp chuyên mục phần thú vị này!

    Chúc Bắc thành công và ngày càng cống hiến nhiều cho Sinh viên ngành kỹ thuật VN!
  2. ngohaibac New Member

    Số bài viết: 17
    Đã được thích: 0
    Điểm thành tích: 0
    Cảm ơn bạn Hải nhé. Tớ sẽ cố gắng.
    <div align='center'>
    <span style="font-size:12pt;line-height:100%">Giao tiếp RS232 trên PC qua Matlab</span></div>

    Mình đã viết bài này tại địa chỉ:

    http://dientuvietnam.net/forums/showthread...3312&page=2

    Các bạn có thể theo dõi ở diễn đàn trên hoặc luồn sau trên picvietnam.com:
    http://www.picvietnam.com/forum//showthread.php?t=752

    Để biết thêm chi tiết về giao tiếp với PC qua cổng RS232 qua Matlab các bạn dùng Help của Matlab và search với từ khóa: serial.

    Việc giao tiếp này cũng rất dễ dàng thực hiện, không có gì là quá cao siêu cả. Mình đã giao tiếp thành công rùi. Để test nó các bạn hãy đấu tắt 2 chân 2 và 3 (TX và RX) của cổng COM lại.

    Đầu tiên mình sẽ đưa ra môt chương trình thật là đơn giản, thiết lập ít tham số, còn chi tiết về thiết lập tham số nó thế nào? ý nghĩa ra sao? thì sẽ nói sau, mình cứ làm đơn giản trước rùi phức tạp -> hiểu hết về thiết lập này sau.

    Bài này mình giới thiệu cách tạo đối tượng, kết nối, viêt hàm callback.

    Tạo đối tượng:
    Chúng ta gõ lệnh và kết quả hiện luôn (nhớ là k có dấu ; ở cuối lệnh
    Mã:
    >> s = serial('COM1')
    
     Serial Port Object : Serial-COM1
    
     Communication Settings 
    Port: COM1
    BaudRate: 9600
    Terminator: 'LF'
    
     Communication State 
    Status: closed
    RecordStatus: off
    
     Read/Write State
    TransferStatus: idle
    BytesAvailable: 0
    ValuesReceived: 0
    ValuesSent: 0
    Như vậy đối tượng là Serial-COM1, tốc độ 9600,..

    Tiếp theo, chúng ta xem các tham số của đối tượng như thế nào bằng lệnh get(s):
    Mã:
    >> get(s)
    ByteOrder = littleEndian
    BytesAvailable = 0
    BytesAvailableFcn = 
    BytesAvailableFcnCount = 48
    BytesAvailableFcnMode = terminator
    BytesToOutput = 0
    ErrorFcn = 
    InputBufferSize = 512
    Name = Serial-COM1
    ObjectVisibility = on
    OutputBufferSize = 512
    OutputEmptyFcn = 
    RecordDetail = compact
    RecordMode = overwrite
    RecordName = record.txt
    RecordStatus = off
    Status = closed
    Tag = 
    Timeout = 10
    TimerFcn = 
    TimerPeriod = 1
    TransferStatus = idle
    Type = serial
    UserData = []
    ValuesReceived = 0
    ValuesSent = 0
    
    SERIAL specific properties:
    BaudRate = 9600
    BreakInterruptFcn = 
    DataBits = 8
    DataTerminalReady = on
    FlowControl = none
    Parity = none
    PinStatus = [1x1 struct]
    PinStatusFcn = 
    Port = COM1
    ReadAsyncMode = continuous
    RequestToSend = on
    StopBits = 1
    Terminator = LF
    Các bạn thấy là có rất nhiều tham số phải không? chúng ta ở đây quan tâm đến tham số: BytesAvailableFcn tham số này chưa thết lập. Tham số này chính là hàm callback mà nó sẽ gọi khi có byte nhận được ở bộ đệm nhận.Vậy chúng ta viết hàm này chính là viết hàm OnComm đáp ứng sự kiện ReceiveEvent như trong MSCOMM của MS vậy.

    Thiết lập này phải thực hiện trước khi mở cổng để giao tiếp, nên chúng ta sẽ viết hàm callback trước. Bạn viết 1 m-file với tên Serial_Callback.m như sau:
    Mã:
    function Serial_Callback(obj,event)
    ind = fscanf(obj)
    Cú pháp của hàm callback như trên với obj là đối tượng kiểu Serial như trên. Hàm có tác dụng đọc dữ liệu và hiển thị luôn kết quả lên command window.

    Chúng ta đưa tham số tên hàm vào cho đối tượng s của ta:

    Mã:
    >> s.BytesAvailableFcn = @Serial_Callback;
    Tiếp theo chúng ta bắt đầu giao tiếp:
    Mã:
    >>fopen(s);
    >>fprintf(s,"chao cac ban");
    Sau đó các bạn xem kết quả thế nào, sau đó thử truyền các kí tự khác xem bằng lệnh fprintf(s,...), hoặc thử với vi xử lý xem cho nó truyền lên các bạn sẽ thấy rất hay.

    Bạn không giao tiếp nữa thì đóng cổng lại:
    Mã:
    >>fclose(s);
    Mình viết tiếp sau còn giờ đi ngủ đã.

    Chúc các bạn thành công.
  3. ngohaibac New Member

    Số bài viết: 17
    Đã được thích: 0
    Điểm thành tích: 0
    Chào tất cả mọi người,

    Hôm qua vừa thi xong được một môn, làm bài cũng gọi là tạm tạm không biết được mấy điểm [IMG]. Sau nửa ngày hăng say lập trình [IMG], mình xin gửi mọi người một chương trình giao tiếp RS232 bằng Matlab.

    Giao diện của nó như sau:

    <div align='CENTER'>[IMG]</div>


    Cách dùng:

    1/ Chọn tham số cho Rs232 rùi ấn nút Connect để bắt đầu kết nối với RS232 nhé.

    2/ Nhập dữ liệu vào ô TX rùi nhấn nút Send để gửi dữ liệu.

    3/ Để thay đổi tham số (tốc độ, ..) cho RS232 thì phải nhấn Disconnect trước rùi chỉnh tham số nhé. Sau đó quay lại bước 1.

    Các bạn chú ý, đây là chương trình mình viết dưới dạng mở, tức là các bạn có thể thêm code vào các hàm để phục vụ mục đích của mình. Đó chính là các hàm ngắt nhận, ngắt gửi,...

    BytesAvailableFcnCount là số byte nhận được trong bộ đệm nhận trước khi xảy ra ngắt nhận.

    Các hàm đó là:
    • function ByteAvailable_Callback(obj, event)
    • function OutputEmpty_Callback(obj, event)
    • function Error_Callback (obj, event)
    • function PinStatus_Callback(obj, event)
    • function Timer_Callback (obj,event)
    • function BreakInterrupt_Callback(obj, event)
    Chương trình này dùng GUI nên để biết thêm chi tiết về cách lập trình và chạy chuơng trình mời các bạn vào luồng Lập trình GUI trên Matlabwww.dientuvietnam.net nhé:

    http://dientuvietnam.net/forums/showthread.php?t=594

    Trong chương trình, bạn có thể dùng chức năng About để xem hướng dẫn (User Manual), mình mới chỉ viết bằng tiếng Anh thôi.

    Chương trình mình đã test khi nối tắt 2 chân 2 và 3 của RS232 lại với nhau. Còn với Vi điều khiển, .. mong các bạn test nhé.

    Các bạn có thể load file chương trình tại đây:
    http://tailieuvietnam.net/download/upload/...nk/Matlab_RS232 Communication.zip
    (diễn đàn này bị sao ấy -> Các bạn copy link rùi down về nhé bằng IDM hay gì cũng dc ).

    Chúc các bạn thành công.
  4. ngohaibac New Member

    Số bài viết: 17
    Đã được thích: 0
    Điểm thành tích: 0
    Chào các bạn,

    Khi các bạn muốn thao tác với dữ liệu vừa nhận được thì các bạn edit thêm code trong hàm sau:

    function ByteAvailable_Callback(obj, event)

    Mà không thấy ai có ý kiến gì nhỉ? Các bạn dùng có vấn đề gì không nhỉ ?

    Mình rất mong có đóng góp ý kiến của các bạn để cho chương trình được hoạt động tốt hơn. Các bạn có thể đặt câu hỏi, mình sẽ trả lời các bạn ngay khi có thể.

    Chúc các bạn thành công.
  5. qtam Guest

    Số bài viết: 0
    Đã được thích: 0
    Điểm thành tích: 0
  6. dvnamnq New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
    bác ngohaibac ơi bác chỉ giùm em với em còn có 1 tuần nữa là phải nộp đồ án rồi, em muốn viết thêm chương trình giao diện kết nối vdk với máy tính qua rs232 .mạch của mình là mạch đo nhiệt độ kết nối máy tính dùng atmegal 32 và lm335 .mình dùng con lm35 cũng ko có gì khác với lm335,khi hiện thị nhiệt độ trên 2 led 7 thanh tức là có thể đo nhiệt độ từ 0-99,mình chưa biết viết giao diện như thế nào và cả cái phần cuối của codevision để khi kết nối với rs232 thì hiện lên máy tính,nếu bác hay bác nào biết chỉ jum em cái em đang cần gấp .thank các bác rất nhiều
  7. 12_doa New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
    Cho em hỏi là muốn truyền data 8 byte qua cổng COM thì dùng hàm gì? Có giống như truyền file text không ạ?
  8. thangbuivan.cntt New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0
    Mọi người ơi làm giúp mình bài này với Viết 1 chương trình Matlab (thể hiện trên GUI) cho phép nhập chiều dài khối ngõ vào, giá trị ngõ vào, chiều dài đáp ứng xung, giá trị đáp ứng xung. Tính chiều dài ngõ ra và giá trị ngõ ra (thể hiện trên tất cả các phương pháp đã học: bảng tích chập, dạng LTI, dạng ma trận …..).
    Thanks mọi người

Chia sẻ trang này