![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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... |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
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');
}
}
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
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 À ở đâ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
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 (^_^) |
|
|
|
|
|
#2 |
|
Đệ tử 9 túi
|
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. |
|
|
|
|
|
#3 |
|
Đệ tử 9 túi
|
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. |
|
|
|
|
|
#4 |
|
Đệ tử 9 túi
|
Ứ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 và 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. |
|
|
|
|
|
#5 | |
|
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 7
: |
Trích:
|
|
|
|
|
|
|
#6 |
|
Đệ tử 9 túi
|
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. |
|
|
|
|
|
#7 |
|
Đệ tử 1 túi
Tham gia ngày: Apr 2007
Bài gửi: 20
: |
Hix! down trên esnips chậm quá
![]() |
|
|
|
|
|
#8 |
|
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 |
|
|
|
|
|
#9 |
|
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 |
|
|
|
|
|
#10 |
|
Đệ 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! |
|
|
|
|
|
#11 | |
|
Trưởng lão PIC bang
|
Trích:
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 |
|
|
|
|
|
|
#12 |
|
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 |
|
|
|
|
|
#13 |
|
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!
|
|
|
|
|
|
#14 |
|
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.
|
|
|
|
|
|
#15 | |
|
Đệ tử 9 túi
|
Trích:
Chúc bạn thành công. |
|
|
|
|
![]() |
|
|
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 |