PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 18-04-2007, 07:43 PM   #1
Nguoi hieu hoc
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 4
:
Thắc mắc

Anh Bắc cho em hỏi tí:
Sao em viết chương trình giao tiếp cổng Com giữa Pic 16f877A với máy tính bằng chương trình Matlab của anh đó.
Chương trình trên Pic như sau:
Code:
Code:
#include <16F877a.h>
#include <stdlib.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=20000000)
#use rs232(BAUD=9600,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
#use fast_io(B)
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
int m,d,a,i;
char h;
void main()
{
      a=0;
      i=0;
       h=getc();
      if (h='3')
      {
         for (d=1;d<3;d++)
         {
            for (i=48;i<56;i++)
            {
               putc(i);
// ở đây nếu em có delay_ms(100) thì kết quả cũng như ở phía dưới 
             }
         }
      }
      if (h>null)
      {
         putc('r');
      }
}
Khi em đánh vào chỗ text phần Transmit đó anh , em không thấy tín hiệu trả về ở phần text của receive?

Nếu em tự viết bằng các dòng lệnh trên Command Window đó anh:
Code:
Code:
 s = serial('COM1','BaudRate',9600);
>> fopen(s)
>> fprintf(s,'3')
>> fscanf(s)
Warning: A timeout occurred before the Terminator was reached.

ans =

012345670123456
nó hiện ra thông báo như thế đó anh ? em không hiểu timeout ở đây có ảnh hưởng gì không nữa?
Theo như em hiểu thì timeout là khoảng thời gian tối đa cho việc đọc và ghi dữ liệu qua cổng Com phải ko anh? Mặc định của nó là 10s
10 s này là cho việc truyền mỗi ký tự hay sao vậy anh ? em đã thử khai báo thay đổi timeout như sau
Code:
Code:
>> s.timeout=0.1  % tức là 100 ms

hay cho nó lớn hơn 
>> s.timeout=50 % tức là 50s

nhưng sao nó vẫn hiện thông báo :Warning: A timeout occurred before the Terminator was reached
anh chỉ dùm em với.

À ở đây em muốn hỏi thêm về anh là em định dùng chương trình này để mở rộng cho điều khiển động cơ bằng PID. Em sẽ dùng Matlab nhập 3 thông số xuống , sau đó em đọc tín hiệu hồi tiếp từ encoder vể qua Com và vẽ lên đồ thị. Như vậy thì em phải có 1 biến thời gian phải không anh?
Giả sử em cho cứ sau 100 ms ( có lớn quá không anh?) PIC xuất tín hiệu số encoder đọc được qua cổng Com , rồi em theo đoạn code của anh thêm vào:
Code:
Code:
function BytesAvailable_Callback(obj,event)
    global hand;
    ind = fscanf(obj);  
    % Edit code here - Ngo Hai Bac    
    set(handles.edit_RX,'String',ind);  
     set(handles.dulieu,'string','co du lieu');  
    % em viết thêm:
                              y =str2double(ind);
                              axes(handles.dothi);
                              x = 0:.1:100;
                              plot(x,y,'k','LineWidth',2);grid
em lấy biến y là tín hiệu đọc từ cổng Com ( đổi ind từ string ra double)
rồi em vẽ đồ thị trên GUI.Nhưng mà em nghĩ biến x ở đây phải là 1 biến theo thời gian thực phải không anh? Vậy em làm sao khai báo biến x theo thời gian thực vậy anh?

Ạnh chỉ em với (^_^)
Nguoi hieu hoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2007, 12:22 AM   #2
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Anh không làm CCS nên không rõ ý nghĩ sâu của từng lệnh. Nhưng anh nghĩ thế này. Lệnh h = getc(); nó có chờ khi có dữ liệu ở thanh ghi RXREG không nhỉ? Vì nếu đơn thuần lệnh này chỉ đọc giá trị thanh ghi thì chương trinh này không ổn.

Vì biết khi nào có dữ liệu từ PC gửi xuông?? Do đó xảy ra Timeout là tất nhiên là thời gian mà PC sẽ chờ đọc dữ liệu, chờ mãi không được thì nó phải thôi chứ.

Còn chương trình Matlab em muốn đọc theo thời gian thì làm thế k dc đâu..

Khoảng thời gian mỗi khi em đọc dữ liệu có thể coi như là một chu kì trích mẫu đó em. Do đó,mỗi khi đọc là đọc giá trị Xi, và Yi, chứ không phải x là một vector ở đây đâu . Còn lúc nào em thích plot thì plot thôi, ví dụ đọc được 100 giá trị thì xuất thì xuất. Nếu Xi là thời gian thì Xi = T*i;

Em dùng một biến toàn cục global để đếm chỉ số của mảng em nhé.

Chúc em thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-10-2007, 09:25 AM   #3
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
RS232 Communication new version

Chào các bạn.

Mình đã sửa lại một số lỗi vớ vẩn của chương trình rùi . Terminator là kí tự: CR (carry return).

Chương trình này đã được test với board mạch Spartan 3E và giao tiếp rất cool.

Chỉ còn 1 vấn đề hiển thị trên Edit Box là chưa theo ý của mình thôi. Mình sẽ fix lỗi này trong thời gian sớm nhất.

Chúc các bạn thành công.
File Kèm Theo
File Type: rar RS232 Communication.rar (61.3 KB, 935 lần tải)
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-11-2007, 01:03 PM   #4
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Ứng dụng RS232 Communication độc lập chạy trên máy không cài Matlab

Đã biên dịch thành công ra file .exe của ứng dụng. Máy các bạn không cần cài Matlab vẫn chạy ngon lành

Địa chỉ download:
http://bmnhy.dieukhien.net/NOHB/Matl...cation_pkg.rar

Các bạn giải nén và chạy file RS232_Communication_pkg.exe nó sẽ tự giải nén ra 2 file: RS232_Communication.exe RS232_Communication.ctf.

Khi đó chạy file: RS232_Communication.exe để chạy ứng dụng.

Chúc các bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2010, 10:31 PM   #5
longmilk
Nhập môn đệ tử
 
longmilk's Avatar
 
Tham gia ngày: May 2009
Bài gửi: 7
:
Trích:
Nguyên văn bởi ngohaibac View Post
Đã biên dịch thành công ra file .exe của ứng dụng. Máy các bạn không cần cài Matlab vẫn chạy ngon lành

Địa chỉ download:
http://bmnhy.dieukhien.net/NOHB/Matl...cation_pkg.rar

Các bạn giải nén và chạy file RS232_Communication_pkg.exe nó sẽ tự giải nén ra 2 file: RS232_Communication.exe RS232_Communication.ctf.

Khi đó chạy file: RS232_Communication.exe để chạy ứng dụng.

Chúc các bạn thành công.
Trời ah. Bác ko rành về Matlab rồi.Muốn dịch ra file EXE để chạy mà không cần IDE của Matlab thì bác phải đóng gói bộ Library của Matlab lại ( nặng gần 200 Mbs) vị chi cái chương trình của bác là hơn 200 Mbs đấy ngohaibac ah
longmilk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-11-2007, 04:59 PM   #6
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Chào các bạn. Khi chạy trên máy k cài Matlab yêu cầu phải cài MATLAB Component Runtime (MCR)

Khi chạy thì đầu tiên phải copy file MCRInstaller.exe vào trong thư mục cùng với file RS232_Communication.exe và chạy lại bình thường là được. Đầu tiên nó sẽ yêu cầu cài MCR, cài bình thường. Lần sau chạy sẽ không bắt cài nữa.

Mình dùng Matlab R2007b nên dùng MCR 7.7. Link:
http://www.esnips.com/web/MatlabSimulink

Các bạn downlod 4 phần: MCRInstaller.part1.rar, MCRInstaller.part2.rar, MCRInstaller.part3.rar, MCRInstaller.part4.rar

Chúc các bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2007, 09:49 PM   #7
toanck86
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 20
:
Hix! down trên esnips chậm quá
toanck86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-02-2008, 12:14 AM   #8
che_gl
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 3
:
các bạn ở đây cho mình hỏi 1 chút :
mình cũng đang dùng RS232 để kết nối 1 Oszilloscop Tektronix THS720 với cả máy tính qua Matlab ,nhưng vẫn có 1 số câu hỏi liệu có thể truyền dữ liệu từ Oszilloscop vào máy tính qua matlab được ko? tại mình có thử dùng theo hướng dẫn của nguyenhaibac nhưng mình nhận được từ giao tiếp RS232 chỉ là những gì mình đưa vào qua cửa sổ matlab mà thôi ? và nếu có thể truyền được những giá trị đo từ THS720 sang máy tính thì mình liệu có thể tạo 1 Timer ở matlab để chỉ nhận số 1 giá trị đo nhất định từ Oszilloscop mà thôi

thax tất cả các bác cho những câu trả lời
che_gl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-02-2008, 04:15 PM   #9
che_gl
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 3
:
ko có bác nào gặp vấn đề giống em ah . Em thử kết nối mãi mà không được, mỗi lần gửi 1 thông tin gì đó vào matlab : fprintf ('*IDN?'), thì matlab chỉ trả lời . Warning: A timeout occurred before the Terminator was reached

có bác nào biết lỗi này ở đâu ko ah
che_gl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-02-2008, 08:47 AM   #10
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Mọi người cho em hỏi với!
Đọc hướng dẫn của Matlab thấy có viết về terminator. Có 2 lựa chọn là CR (carriage return) hoặc LF (line feed). Em chưa hiểu chỗ này. TERMINTOR là cái gì? CR va LF là gì và có ý nghĩa thế nào? Mong mọi người giúp đỡ. Em cảm ơn nhiều!
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-03-2008, 05:17 AM   #11
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi dvnccbmacbt View Post
Mọi người cho em hỏi với!
Đọc hướng dẫn của Matlab thấy có viết về terminator. Có 2 lựa chọn là CR (carriage return) hoặc LF (line feed). Em chưa hiểu chỗ này. TERMINTOR là cái gì? CR va LF là gì và có ý nghĩa thế nào? Mong mọi người giúp đỡ. Em cảm ơn nhiều!
CR là mã điều khiển của động tác về đầu dòng, LF là mã điều khiển của động tác xuống dòng. Các phiên bản MATLAB cho các hệ điều hành khác nhau có thể sử dụng terminator khác nhau (điều này tùy vào hệ điều hành, và cũng tùy vào chương trình đích sẽ nhận thông điệp từ MATLAB ra sao). Terminator được dùng để báo hiệu kết thúc thông điệp.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-02-2008, 06:51 AM   #12
che_gl
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 3
:
tức là ở cuối câu lệnh của bạn là LF thì có nghĩa là câu lệnh kết thúc , còn muốn lặp lại câu lệnh thì dùng CR (ở đây có nghĩa là bạn phải xác định cho cái Terminator )
giả sử như cái Oilloskop của mình ở trên mình gửi qua Rs232 1 lệnh gì đó và ko muốn gửi gì thêm thì chỉ để Terminator là LF thôi
che_gl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-03-2008, 11:08 PM   #13
xuan_vtdhqs
Nhập môn đệ tử
 
Tham gia ngày: Mar 2008
Bài gửi: 1
:
Bắc à!bây giờ tối đang làm đồ án tốt nghiệp,tôi cần truyền dữ liệu từ PC xuống thẳng van điều khiển để điều khiển van đóng mở thì tôi phải làm như thế nào??ở đây tôi ko dùng vi xử lý để nhận dữ liệu truyền từ máy tính xuống mà truyền trực tiếp xuống van,liệu như vậy có được ko?vì tôi làm về xử lý ảnh và nhận dạng ảnh mà.Tôi nhận dạng và phân loại hoa quả,khi phân loại trên PC xong thì tôi cần out nó xuống điều khiển van đóng mở để điều khiển cơ cấu cần gạt.Cố gắng bớt chút thời gian chỉ dùm nhé.Tôi vừa mới bắt đầu học về matlab nên đang còn kém lắm.Thank!
xuan_vtdhqs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2008, 05:39 PM   #14
NANO
Nhập môn đệ tử
 
Tham gia ngày: Nov 2007
Bài gửi: 4
:
các pác ơi, làm thế nào để làm việc với COM20 bây giờ nhỉ? em dùng USB to COM của Lap.
NANO vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-04-2008, 05:50 PM   #15
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi NANO View Post
các pác ơi, làm thế nào để làm việc với COM20 bây giờ nhỉ? em dùng USB to COM của Lap.
Bạn thay đổi thuộc tính String của Combo Box Comport là dc mà. Bạn thêm Com20 vào.

Chúc bạn thành công.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
Giao tiếp RS232 trên PC ngohaibac Giao tiếp cổng COM và LPT 193 18-02-2025 09:11 AM
giao tiep qua PCI de doc AD bằng Matlab hanhluckyly Matlab-Simulink & Labview & 20-Sim 22 06-06-2011 09:55 PM
Communicate between PC and PIC via RS232 standard using Matlab (GUI, IO). ngohaibac English forum on PICs 3 02-06-2011 06:46 PM
cần mua bộ thu GPS có giao tiếp RS232 kienvq Tìm mua sản phẩm 15 17-03-2011 11:25 PM
Help! Dùng C để giao tiếp RS232 dandiennang Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 6 15-03-2009 06:41 PM


Múi giờ GMT. Hiện tại là 03:48 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam