PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

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 USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 15-03-2010, 09:46 AM   #6
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Trích:
Nguyên văn bởi tbk_05 View Post
Mình cũng đang làm về vấn đề này. Mình không biết khi con pic18 truyền lên được c#, thì làm thế nào lấy được dữ liệu đó để đưa vào hàm vẽ đồ thị, chỉ biết được là giá trị đó hiển thị lên trên texbox.
Ví dụ như đoạn chương trình sau là hiển thị giá trị ADC từ VDK lên texbox khi ấn buttom:

//Khi nhan nut "doc" thi`>>>>> truyen hai byte tu VDK len MT
private void btdoc_Click(object sender, EventArgs e)
{
TraceMsg("Receiver:\r\n");
SingleReceiver();
}
private void SingleReceiver()
{
usb_pipe_rev.SetContiguous(true);
DWORD dwBuffSize = 2;
byte[] buffer = new byte[2];
usb_pipe_rev.UsbPipeTransferAsync(true, 2, buffer,
0, 100000, new D_USER_TRANSFER_COMPLETION(Transfer_rev_Completion ));
}
private void Transfer_rev_Completion(pic18f4550_usb_Pipe pipe)
{
if (pipe.GetTransferStatus() == (DWORD)wdu_err.WD_STATUS_SUCCESS)
{
TraceMsg(DisplayHexBuffer(pipe.GetBuffer(), 2));
}
else
{
TraceMsg("receiver failure!\r\n");
}
}

Như vậy thì dữ liệu đó nằm đâu, làm thế nào để lấy ra và vẽ đồ thì. Mong các bạn chỉ dùm cho mình, mình cũng chưa hiểu rỏ lắm.
Phương thức UsbPipeTransferAsync thực hiện là 1 yêu cầu đọc bất đồng bộ(Async) 2 byte trên PIPE của USB, và hàm callback Transfer_rev_Completion sế được gọi nếu có dữ liệu trả về từ VDK.
Do đó, sau khi nhấp button, sẽ có 1 request 'chờ' dữ liệu và khi dữ liệu này 'đến' nó được USB PIPE đọc tự động, đưa vào buffer và gọi hàm callback Transfer_rev_Completion xử lý buffer đó. Chính xác nó là 1 thread thực thi ngầm do Hệ điều hành quản lý để giám sát dữ liệu in trên PIPE.
Thực ra library mà bạn dùng này nó đã 'che' phần thao tác in/out trên USB PIPE nên bạn không thấy được luồng dữ liệu được đưa vào buffer như thế nào. Thông qua phương thức GetBuffer() bạn sẽ lấy được dữ liệu đã trên PIPE cho phần xử lý của mình mà thôi.
PS: Vì hàm callback Transfer_rev_Completion được gọi từ thread giám sát PIPE nên nếu bạn muốn thực hiện câu lệnh vẽ, hiện thị, thay đổi giá trị lên forms, components,... bên trong hàm này thì nhớ phải sử dụng cơ chế Invoke.

Regards
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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


Múi giờ GMT. Hiện tại là 06:27 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