|
Tài trợ cho PIC Vietnam |
Matlab-Simulink & Labview & 20-Sim Các công cụ mô phỏng đa ngành... |
|
Ðiều Chỉnh | Xếp Bài |
|
28-02-2009, 10:36 PM | #1 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 65
: |
Nhận dữ liệu qua cổng RS232 và vẽ đồ thì lên Matlab??
Chào mọi người.
Em đang thực hiện vẽ đồ thị tren matlab với dữ liệu là số xung encoder PIC truyền lên qua cổng com. Phần nhận dữ liệu em đã thực hiện xong. Nhưng vẽ đồ thị thì em chưa vẽ được. Nếu lưu lại dữ liệu nhận được rồi chờ đến khi kết thúc quá trình nhận dữ liệu thì không có vấn đề j. Em có thắc mắc thế này: Nếu em muốn vẽ đồ thì ngay trong hàm ngắt của matlab có được không? Tức là động cơ đang quay và em muốn đồ thị cũng vẽ theo đó luôn chứ không chờ đến lúc động cơ dừng rồi mới vẽ ( em điêu khiên vị trí cua động cơ); Em thấy trong luồng "PID cho động cơ đã có người làm rồi nhưng không thấy nói cụ thể về cái này. Mong mọi người giúp đỡ! |
10-03-2010, 04:42 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Feb 2009
Bài gửi: 1
: |
mình cũng đang làm đề tài vẽ đồ thị dữ liệu nhận từ rs232 bạn nào có tài liệu share cho t với.t xin cám ơn
|
24-11-2010, 05:42 PM | #3 | |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 4
: |
Trích:
---my code--- serialObj=serial('COM1','baudrate',9600,'Timeout', 2); serialObj.BytesAvailableFcnMode='byte'; serialObj.BytesAvailableFcnCount=2; serialObj.BytesAvailableFcn={@mycallback,handles}; ...... ...... function mycallback(hObject, eventdata, handles) tframe=2; %width of the oscilloscope screen global ia count t tocold samples if isempty(count) count=1; end try x=fread(handles.serialObj,2,'uint8'); ia(count)=x(1)*256+x(2); %x=[quotient reminder] samples(count)=count; catch e errordlg(e.message); end count=count+1; set(handles.plot1,'xdata',samples,'ydata',ia); set(handles.axes1,'xlim',[0 count]... ,'ylim',[min(ia)-1 max(ia)+1]); Hoặc trong file .txt ở dưới, đổi nó lại thành .m ha(tại mình up ko đc). Bạn về chỉnh sửa cho hợp với mình. |
|
31-03-2010, 09:43 AM | #4 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 1
: |
Bạn ơi, cho mình hỏi để nhận dữ liệu từ COM trong Matlab thì phải làm thế nào?
Mình truyền được dữ liệu từ PC xuống VDK qua Matlab nhưng không thể nhận dữ liệu từ VDK gửi lên PC. Giá trị muốn gửi lên là số, như nhiệt độ đo được. |
24-11-2010, 05:36 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: Nov 2008
Bài gửi: 4
: |
Bạn vào Matlab help gõ serial rồi tha hồ đọc.
|
13-12-2010, 06:38 PM | #6 |
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 2
: |
Em dùng đoạn lệnh dưới đây để xuất data và nhận data vào từ cổng com 1:
s = serial('COM1'); s.baudrate = 9600; s.DataBits = 8; s.Parity = 'none'; s.StopBit = 1; s.ReadAsyncMode = 'continuous'; s.BytesAvailableFcnCount = 1; s.Terminator = 'LF'; s.BytesAvailableFcnMode = 'terminator'; fopen(s); fwrite(s,255); n = fread(s,1); if (n == 255) set(handles.thketnoi,'String','ket noi thanh cong'); % Hide all setting popup menu. set(handles.ComPort,'Enable','off'); set(handles.chedo,'Enable','off'); set(handles.dieukhien,'Enable','on'); else set(handles.ketnoi,'Enable','on'); set(handles.thketnoi,'String','Loi, kiem tra lai cong COM'); end fclose(s); Nhưng xuất data thì nhanh còn nhận vào thì rất lâu (khoảng 2s) lại còn cảnh báo lỗi nữa:"Warning: The specified amount of data was not returned within the Timeout period." Pro nào biết xin chỉ giúp cách khắc phục lôi này với...Thanksssss |
19-06-2011, 09:29 AM | #7 | |
Đệ tử 1 túi
Tham gia ngày: Jun 2011
Bài gửi: 22
: |
Trích:
|
|
19-06-2011, 09:59 AM | #8 | |
Đệ tử 1 túi
Tham gia ngày: Jun 2011
Bài gửi: 22
: |
Trích:
nếu bạn không lập trình trong GUI,bạn có thể làm được việc này ,vì hiện tại mình chưa làm được với GUI. bạn định dạng cổng COM như sau: s=serial('COM1');%lựa chọn cổng com tùy vào phần cứng của bạn get(s);%lấy các thông tin về cổng hàm trên sẽ trả về các thuộc tính của đối tượng s,giống như lập trình hướng đối tượng bạn có thể thay đổi thông số sau khi khởi tạo (với các thông số mặc định) s.BaudRate=9600;hoặc set(s,'BaudRate',9600); s.InputBufferSize=1024;%tùy chọn,có thể bỏ qua các bước này s.TimeOut=2;%thời gian phát sinh lỗi nếu quá trình đọc dữ liệu vượt quá thời gian này s.BytesAvailableFcnMode='byte';%chế độ gọi hàm ngắt sẽ là đếm số byte nhận được,mặc định là terminal:gọi hàm ngăt khi gặp ký tự kết thúc s.BytesAvailableFcnCount=10;%định nghĩa số byte nhận được trong bộ đệm thu 10 byte thì gọi chương trình ngắt s.BytesAvailableFcn=@vedothi;%khai bao hàm call back vedothi là một hàm ngắt mà ta sẽ định nghĩa và lưu trong thư mục đang làm việc của matlab,cách định nghĩa hàm này có đôi chút khác biệt cấu trúc hàm này như sau: kích phải trong thư mục đang làm việc và chọn new>function ta sẽ chỉnh sữa lại như sau: Function y = vedothi(obj,event) % có trả về kiểu dữ liệu obj:là đối tượng serial ví dụ một hàm mầu như sau function th( obj,event ) %TH Summary of this function goes here % Detailed explanation goes here figure end cái hàm trên có tên là th và thực hiện một công việc vô cùng đơn giản là tạo một cái cửa sổ figure.và không trả về kiểu dữ liệu gì hết,hehe lưu ý là cái hàm này phải tạo trước khi khai báo hàm callback trong matlab nhé công việc còn lại là fopen(s); một số bạn thắc mắc là việc gửi dữ liệu thì rất nhanh,còn đọc thì chậm,tất nhiên rồi khi bạn khởi tạo cổng com,matlab mặc định thời gian đọc dữ liệu tối đa là 10s,khi bạn gửi dữ liệu xuống cổng,thì cái cổng trong máy tính bạn nó gủi dữ liệu đi cho thiết bị đầu cuối đọc,chứ nó đâu có gửi cho nó đọc đâu,vì vậy đâu có gì trong bộ đệm nhận đâu mà đọc,bạn muốn gửi,rồi nhận lại cái mình đã gửi thì phải nối dây số 2 và dây 3 của cổng com lại thì sẽ làm được việc này,còn nếu bạn đang dùng laptop,thì dùng phần mềm giả lập cổng com để thử nghiêm!! chúc bạn thành công!!! |
|
27-06-2011, 11:39 AM | #9 |
Nhập môn đệ tử
Tham gia ngày: Jun 2011
Bài gửi: 2
: |
Trời ơi các pro cứu em với, em đang làm đồ án về tạo mã manchester sử dụng 2 con pic smarter và slave để tạo mã manchester và yêu cầu hiển thị dạng xung của mã này trên PC thông qua cổng COM , nhưng em k bit dùng phần mềm nào cho thích hợp, matlab có được k ah hay là labview ??
Em mong sớm được các pro giúp đỡ |
|
|