PDA

View Full Version : Mới học PIC - hỏi về USB


DKH
10-05-2006, 06:44 PM
Sau khi băn khoan một chút thì cuối cùng tui đã quyết chọn PIC cho một ứng dụng mà mình có nhiệm vụ phải triển khai. Tui đang có nhiệm vụ thiết kế bộ lưu dữ liệu vào thẻ MMC thấy khó quá mong được chỉ bảo nhiều. Cảm ơn các anh em đã không quản công sức của mình để lập lên diễn đàn này!

phamthaihoa
10-05-2006, 09:14 PM
Nếu bạn đã học PIC rồi thì ta bàn tiếp, nếu chưa thì anh luyện công đi đã, để còn được cái này anh có thể học 16F877A hoặc con nào tương đương nếu muốn sử dụng giao tiếp RS232 để giao tiếp với máy tính.
Hoặc 18F4550,F2550 để làm giao tiếp USB.

Một số trình dịch có hỗ trợ đọc thẻ MMC qua giao tiếp SPI ví dụ như mikroC.
Trên trang chủ Microchip cũng có project đọc thẻ MMC giao tiếp qua USB sử dụng Microchip C18.

thancongbao
14-05-2006, 11:58 PM
:D
???
"Nếu bạn đã học PIC rồi thì ta bàn tiếp, nếu chưa thì anh luyện công đi đã, để còn được cái này anh có thể học 16F877A hoặc con nào tương đương nếu muốn sử dụng giao tiếp RS232 để giao tiếp với máy tính.
Hoặc 18F4550,F2550 để làm giao tiếp USB."
Em vừa mới đọc sơ qua con PIC 18F458 khi nãy mà không thấy nó nói có giao diện vật lý chuẩn RS232.Mà bác Hòa cho em hỏi thêm USB và RS232 có gì khác nhau không vậy.Và "để làm giao tiếp USB" thì em cần những gì về mặt kiến thức và công cụ vậy bác.
???
"Một số trình dịch có hỗ trợ đọc thẻ MMC qua giao tiếp SPI ví dụ như mikroC.
Trên trang chủ Microchip cũng có project đọc thẻ MMC giao tiếp qua USB sử dụng Microchip C18."
Xin hỏi bác Hòa đọc thể MMC em có cần biết về FAT hay NTFS không hay cứ đọc byte vật lý của nó là được !!!
???
"Nếu bạn đã học PIC rồi thì ta bàn tiếp"
Nếu chưa học PIC có được bàn tiếp không vậy !!!
:D
Chúc vui

falleaf
15-05-2006, 08:22 AM
Không có gì là không được bàn, nhưng tốt nhất các bạn cũng nên bắt đầu với những bài học cơ bản, và hiểu được bản chất vấn đề.

Điều Thái Hoà nói ở đây, không phải là việc học PIC, mà học về các kiến thức khái niệm nói chung. Có lẽ Hoà nói chưa được rõ ràng về mặt bản chất thôi. Muốn biết dùng giao tiếp USB, thì các bạn phải hiểu USB là gì, có một bài trao đổi của qmk tôi copy về giới thiệu khái quát về USB. Muốn dùng PIC để giao tiếp USB, thì bạn cũng phải hiểu sơ lược PIC là gì, như thế nào....

Hầu hết các dòng PIC đều cho phép giao tiếp RS232, đó là khối chức năng USART của PIC, chính vì các bạn không đi từ cơ bản để hiểu rõ nó, nên thường có những câu hỏi thừa. Mong các bạn đọc bài đầu tiên trong phần tài liệu tiếng Việt.

Chúc vui.

phamthaihoa
15-05-2006, 12:07 PM
Vui đây !


Em vừa mới đọc sơ qua con PIC 18F458 khi nãy mà không thấy nó nói có giao diện vật lý chuẩn RS232.Mà bác Hòa cho em hỏi thêm USB và RS232 có gì khác nhau không vậy.

Bạn đã học đến PÍC8 thì bới móc gì tui, nhưng không sao, vậy mới vui.
Giao diện vật lý chuẩn RS232 trong 18F458 có và có trong mọi con PIC từ 18 chân trở lên. Nếu bạn tìm từ RS232 trong datasheet của PIC thì bạn chưa làm module này bao giờ, nó là bộ USART (ADDRESSABLE UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER).
Còn muốn hỏi USB khác RS232 ở chỗ nào, thì tui luôn sẵn sàng chat với bạn:thaihoa_tchya.


Và "để làm giao tiếp USB" thì em cần những gì về mặt kiến thức và công cụ vậy bác.

Về mặt tài liệu, thì chính tông võ học là quyển USB Spectification, của nhóm các nhà sản xuất Compaq, HP, Intel, Lucent, Microsoft, NEC, Philips đưa ra vào năm 2000.
Quyển thứ hai tui đánh giá là hay là quyển USB Complete của Jan Axelson.
Còn một quyển khác đọc cho vui là USB by Examples.

Bản bang Microchip có kha khá Appnotes về USB, cả code nguồn = HTPICC cho USB1.1 và code = C18 cho USB 2.0
Appnotes thì có: AN1003,AN950,AN956...

Về mặt công cụ, cần có PIC hỗ trợ USB, với USB 1.1 thì có dòng PIC16C745, còn USB2.0 thì có dòng 18F2455,2550,4455,4550.

Trình dịch thì cần có một trình dịch PIC hỗ trợ loại PIC mà bạn đang dùng: HTPICC18, CCS bản gần đây (tui không nhớ bản nào nó hỗ trợ USB), PicBasic Pro bản 2.46, Microchip C18 bản 2.0 trở lên.

Về đồ ăn sẵn thì có Easy HID (free) đi với PICBasic, CCS, Windriver của Jungo.

Về phát triển Driver trên Windows thì bạn biết cái nào viết cái ấy, C++,Basic,Delphi,C#, tui phát triển Driver = Delphi.


Xin hỏi bác Hòa đọc thể MMC em có cần biết về FAT hay NTFS không hay cứ đọc byte vật lý của nó là được !!!

Có người nhờ tôi làm thiết bị đọc thẻ MMC, tui đã đọc nhưng chưa có đồ để thử, FAT thì thiên hạ đã có đồ ăn sẵn, còn nếu làm = NTFS thì tui xin đầu hàng cả hai tay.


Nếu chưa học PIC có được bàn tiếp không vậy !!!

Bàn được nhưng chỉ bàn nhưng cái bên trên, còn căn bản về PIC thì không nói đến.

Chúc vui :D

ntc
15-05-2006, 04:47 PM
Về mặt tài liệu, thì chính tông võ học là quyển USB Spectification, của nhóm các nhà sản xuất Compaq, HP, Intel, Lucent, Microsoft, NEC, Philips đưa ra vào năm 2000.
Quyển thứ hai tui đánh giá là hay là quyển USB Complete của Jan Axelson.
Còn một quyển khác đọc cho vui là USB by Examples.


Quyển "USB Complete _ Jan Axelson" đã được share bên dientuvietnam.

Quyển "USB design by example _ John Hyde", ai có nhu cầu cứ lên tiếng.

:D

Còn cái quyển được gọi là chính tông võ học thì chưa biết được mặt mũi nó như thế nào.

À, nhớ quyển đó rồi. Nó đi sâu về cấu trúc vật lí của USB 1.0 cũng như 2.0

Món này cũng khoái lắm, nhưng chưa có nhiều thời gian để tìm hiểu sâu hơn.

Bác nào thành thạo món này rồi có thể chia xẻ bằng một số Tutorial không??

:D

namqn
15-05-2006, 06:18 PM
USB Spec. thì vào www.usg.org (http://www.usb.org/developers/docs/) mà download (gần 8 MB đó, đừng download ở nhà!). Đã là spec. thì phải công bố người ta mới theo được chứ.

Thân,

ntc
16-05-2006, 03:15 PM
Nhân tiện việc mở ra luồng mới này, tại sao chúng ta không đặt vấn đề tiếp cận với USB một cách nghiêm túc hơn, chứ không đơn thuần là các trao đổi nho nhỏ như vậy nữa.

Mình sẽ trao đổi theo từng vấn đề một, chẳng hạn, đầu tiên là cấu trúc lớp vật lí, sau đó là các giao thức, giao diện, ..., cuối cùng là ứng dụng nó như thế nào.

Làm theo cách của anh NTVinh á, ảnh đề cập đến các vấn đề của RS485 theo phương pháp tương tự dựa trên OSI. Mình sẽ làm điều này với USB.

Các bác thấy thế nào?

:D

ntc
16-05-2006, 03:24 PM
Trước tiên, mình sẽ tập hợp các tài liệu liên quan đến PIC, USB và USB với PIC vào luồng này, mọi người sẽ cùng nghiên cứu và cùng thảo luận, cùng xây dưng các vấn đề một cách hệ thống hơn.

Hiện giờ mình chỉ có thể làm được đến như vậy thôi, đợi thi xong sẽ cung mọi người nghiên cứu.

Mình nghĩ như vậy thì các thông tin trao đổi sẽ thự sự có giá trị tích cực và có thể sử dụng để tham khảo.

ntc
17-05-2006, 11:08 AM
http://dientuvietnam.net/forums/showthread.php?t=775&highlight=giao+ti%E1%BA%BFp+m%C3%A1y+t%C3%ADnh

Đây là luồng thảo luận về USB, share "USB Complete" và các link có liên quan.

http://www.flazx.com/directdownload3956.php

Đây là link download "USB design by example".

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1490&filterID=404

Một số App Note liên quan đến USB của Microchip.

"USB spec" download tại link anh Nam cung cấp.

Nhiêu đây là đủ xài rồi. Nếu không muốn nói là quá đủ.

:D

ngohaibac
19-05-2006, 11:04 AM
Falleaf: Các link này đã bị hư, F sẽ giúp Bắc post lại cho mọi người sau.

TTL
15-06-2006, 07:38 PM
các bạn vô trang web này khá hay đấy
http://beyondlogic.org/

bien_van_khat
16-06-2006, 01:38 AM
Ha ha, thread nào bàn về USB cuối cùng cũng kết thúc bằng phần share doc. Kinh nghiệm tui rút được cả từ dtvn tới picvietnam.

Sao mấy bác ko mua 1 con 4550 về làm mạch, nạp cái mấy cái firmware của mc rồi chạy thử. Sau đó anh em mổ xẻ cái fw đó, chứ kiểu này chán lắm, chỉ toàn lan man.

ntc
21-06-2006, 07:18 PM
Cuốn "USB COMPLETE" này có bìa đàng hoàng nè.

hehe.

http://mprc.pku.edu.cn/~gaohaibin/stuffs/USB%20Complete%20Everything%20You%20Need%20to%20De velop%20USB%20Peripherals(Third%20Edition).pdf

thancongbao
22-06-2006, 04:38 PM
He he he !!! Không thấy các bạn nói về kiến trúc máy tính mà chỉ thấy nói về RS232 với USB phải chăng các bạn định giải bài toán hộp đen chắc ???

thuyanh
31-10-2006, 10:40 AM
ok với ý kiến của bác bvk. Để bàn về USB, mọi người đều cần fải có hiểu biết về giao diện vật lý, giao thức truyền, các bước điểm danh để nhận thiết bị USB của Host USB (tất nhiên có sơ qua chút ít lquan đến kiến trúc máy tính). Sau khi đã làm được cái mạch test cắm vào cổng USB của máy tính (fw nạp vào) mà nó chạy ngon lành rồi chúng mình cùng phân tích để viết nên một Tu. về USB. Chứ cứ bàn về chủ đề TL thì...chậc... chậc ...chán như con gián chết. mông lung tung lắm.

Theo ý kiến cá nhân tui, USB Spe.. đọc là ok rồi. Cấu trúc của USB và giao thức USB cũng có thể được phân tích ra theo mô hình OSI (như bác ntc nói đó) tui xin mạn phép phân tích và gửi file kèm theo sau.

Ai đã nạp fw rồi, chúgn mình cùng share nhé, tui nạp cái fw chạy ầm ầm, dùng Tiousb hay wdriver cũng được, cái chính là tui chưa hiểu rõ lắm về code của nó. Đã ai làm bằng cách này chưa? bàn bạc giúp với. mình có thể viết một cái driver cho USB được đấy.

bien_van_khat
01-11-2006, 10:09 PM
Bác này có vẻ hăng hái về USB quá nhỉ, hà hà. Quan điểm của tớ là ko làm driver chỉ làm fw nên thật ra tớ chẳng biết gì về driver hết. Toàn xài đồ làm sẵn thôi. Fw thì ko khó tớ làm rồi, bắt đầu hoàn toàn từ con số 0, nhưng chưa hoàn thiện, chỉ ở mức sơ khai mà thôi. Nêu bác có ý định bắt đầu với fw trước thì tớ có thể góp ý với bác được. Vì cũng mong là có được cái tut USB do hồi mới bắt đầu làm lùng sục khắp net cũng chẳng thấy được cái nào.

thuyanh
02-11-2006, 10:37 AM
Fw thì ko khó tớ làm rồi, bắt đầu hoàn toàn từ con số 0, nhưng chưa hoàn thiện, chỉ ở mức sơ khai mà thôi. Nêu bác có ý định bắt đầu với fw trước thì tớ có thể góp ý với bác được. Vì cũng mong là có được cái tut USB do hồi mới bắt đầu làm lùng sục khắp net cũng chẳng thấy được cái nào.
OK! Tui thì muốn làm cả bộ, nhưng trước mắt tui cần hoàn thiện cái fw trước, rồi mới đến cái driver. Nhưng thú thực là tui chưa rõ lắm mấy cái driver, mặc dù xài nó suốt, nhưng muốn biết cụ tỉ hơn một chút, biết đâu... trong quá trình hì hục với fw...:rolleyes:

Bác bvk chỉ giáo giúp nhé. Bắt đầu với fw. tui mới tập tễnh vào USB thôi.

RedRose
12-12-2006, 09:09 AM
Mình đang học về USB mong mọi người giúp đỡ.
Xin hỏi cách sử dụng thư viện mpusbapi.dll của Microchip. Để sử dụng thì cần dùng firmware nào ?
Mình down file MicrochipCustomDriver về setup rồi mà chưa biết sử dụng thế nào.

ntc
12-12-2006, 06:34 PM
http://www.comvcon.com/default.asp

Bạn vào đây để đọc thêm. Trong đó có cả một số ví dụ để sử dụng thư viện liên kết động mpusbapi.dll.

Trong đó có 4 phần hướng dẫn sử dụng thư viện. Phải đọc hết.

Chịu khó đọc kĩ một chút.

:)

Về MicrochipCustomDriver, phải tìm hiểu code thật kĩ mới sử dụng được. Đó là cái sườn cơ bản cho firmware giao tiếp USB, tìm hiểu đến nơi đến chốn bạn sẽ biết được việc chèn thêm code của mình vào chỗ nào để phát triển các ứng dụng cho riêng mình.

RedRose
13-12-2006, 08:43 AM
Cảm ơn ntc, trang web đó có hướng dẫn thật tuyệt. Mình làm theo ok rồi.
Mình đã sửa file user.c để có thêm request của mình. Nhưng sao tốc độ chậm thế nhỉ, mình cho truyền liên tục từ firmware lên chỉ đạt 16KByte/s (mở EP1, chế độ Bulk, 64 bytes)

Đọc trên forum của Microchip thấy có người dùng mpusbapi.dll này được 0.5Mbits/s (~62.6 KBytes/s).

Làm thế nào để nâng cao tốc độ nhỉ? Các bạn đã làm thực tế ở đây đạt được tốc độ là bao nhiêu?
Theo bạn thì để có tốc độ cao thì nên làm theo cách nào?
+ Mở nhiều endpoint ? (cái này mình còn mơ hồ về cách truyền nhận khi có nhiều endpoint)
+ Dùng class khác ? (CDC, Custom?)
....

phamthaihoa
13-12-2006, 12:01 PM
Cảm ơn ntc, trang web đó có hướng dẫn thật tuyệt. Mình làm theo ok rồi.
Mình đã sửa file user.c để có thêm request của mình. Nhưng sao tốc độ chậm thế nhỉ, mình cho truyền liên tục từ firmware lên chỉ đạt 16KByte/s (mở EP1, chế độ Bulk, 64 bytes)

Đọc trên forum của Microchip thấy có người dùng mpusbapi.dll này được 0.5Mbits/s (~62.6 KBytes/s).

Làm thế nào để nâng cao tốc độ nhỉ? Các bạn đã làm thực tế ở đây đạt được tốc độ là bao nhiêu?
Theo bạn thì để có tốc độ cao thì nên làm theo cách nào?
+ Mở nhiều endpoint ? (cái này mình còn mơ hồ về cách truyền nhận khi có nhiều endpoint)
+ Dùng class khác ? (CDC, Custom?)
....

Khi bạn dùng file mpusbapi.dll thì bạn đang dùng custom driver rồi đó, mình cũng thất ngạc nhiên vì cao thủ nào đã đạt 0.5Mbits với file này, chắc truyền cả 64byte, huy động cả 15 EP. Thực chất cái file Microchip cho này mang tính demo thì hơn thì hàm truyền nhận của nó đều dính hàm delay bên trong, không nhanh được.
Nếu bạn dùng CDC thì tốc độ đạt gần 1Mbits nhưng sẽ gặp vấn đề chương trình giao tiếp với COM trên PC, viết bằng VB thì mình chưa thấy thằng nào hỗ trợ ở tốc độ đó. Delphi thì no problem.
Để hiểu thêm về giao tiếp qua EP, bạn có thể dùng WinDriver, nó giao tiếp qua EndPoint đó, khi khởi tạo bạn chọn EPIN, OUT, khi lập trình bạn tương tác với các EP này.

ntc
13-12-2006, 01:04 PM
Trong cái ví dụ sử dụng thư viện dll, người ta xây dựng theo kiểu truyền đi, xong chờ nhận lại kết quả, rồi mới tính tiếp, mỗi lần truyền nhận như vậy delay tới 1s, do đó không thể nhanh được.

Bạn thử hạ thời gian delay xem thế nào, xem thử hạ tới đâu thì vẫn còn hoạt động tốt, xong rồi thông báo kết quả lên đây, để anh em thảo luận thêm.

Làm theo vi dụ này, có thể tạm ứng dụng trong điều khiển với dung lượng dữ liệu cần truyền nhận nhỏ.

RedRose
13-12-2006, 04:57 PM
Dùng cái thư viện dll đó đúng là kiểu hỏi đáp nên tốc độ chậm thật. Còn cái tham số delay là thời gian để hàm timeout nên ko cài thiện tốc độ gì cả.

Mình lọ mọ trên forum của Microchip thấy có topic hay quá. Tác giả Brad Minch đã xây dựng 1 firmware nhỏ gọn mà dễ hiểu. Chỉ duy nhất 1 file .c và 1 file .h thôi. Thành ra đọc rất dễ hiểu. Lại viết theo kiểu xử lý tuần tự từng request nên đọc hiểu được rất nhiều về USB. Các bạn mới bắt đầu như tớ nên đọc cái này trước.
Topic: http://forum.microchip.com/tm.aspx?m=89669
Website: http://pe.ece.olin.edu/ece/

Đảm bảo dễ hiểu hơn firmware của Microchip. Mình đã dịch bằng C18, chạy với PIC8F4550 20Mhz rất tốt.

phamthaihoa
14-12-2006, 10:10 AM
Trong cái ví dụ sử dụng thư viện dll, người ta xây dựng theo kiểu truyền đi, xong chờ nhận lại kết quả, rồi mới tính tiếp, mỗi lần truyền nhận như vậy delay tới 1s, do đó không thể nhanh được.

Bạn thử hạ thời gian delay xem thế nào, xem thử hạ tới đâu thì vẫn còn hoạt động tốt, xong rồi thông báo kết quả lên đây, để anh em thảo luận thêm.

Làm theo vi dụ này, có thể tạm ứng dụng trong điều khiển với dung lượng dữ liệu cần truyền nhận nhỏ.

Hạ thời gian xuống không có tác dụng, thế mới đểu chứ :D

Em thử hạ thời gian xuống, cỡ trên 10ms thì ổn định. Còn nếu <10ms thì lỗi độ dài dữ liệu nhân được < độ dài được chỉ định.

hungbkhn
14-12-2006, 12:27 PM
Tôi phân tích tiếp xem thế nào nhé :).
Cái ví dụ của microchip dùng trễ 100ms
MPUSBRead(myInPipe,ReceiveData,ExpectedReceiveLeng th,ReceiveLength,100);
bây giờ dịch tìm cái nguồn của hàm này, buộc dịch lại dll.
trong file nguồn ta thấy:

///////////////////////////////////////////////////////////////////////////////
// MPUSBRead :
//
// handle - Identifies the endpoint pipe to be read. The pipe handle must
// have been created with MP_READ access attribute.
//
// pData - Points to the buffer that receives the data read from the pipe.
//
// dwLen - Specifies the number of bytes to be read from the pipe.
//
// pLength - Points to the number of bytes read. MPUSBRead sets this value to
// zero before doing any work or error checking.
//
// dwMilliseconds
// - Specifies the time-out interval, in milliseconds. The function
// returns if the interval elapses, even if the operation is
// incomplete. If dwMilliseconds is zero, the function tests the
// data pipe and returns immediately. If dwMilliseconds is INFINITE,
// the function's time-out interval never elapses.
//
// Note that "input" and "output" refer to the parameter designations in calls
// to this function, which are the opposite of common sense from the
// perspective of an application making the calls.
//
DWORD MPUSBRead(HANDLE handle, // Input
PVOID pData, // Output
DWORD dwLen, // Input
PDWORD pLength, // Output
DWORD dwMilliseconds) // Input
{
BOOL bResult;
DWORD nBytesRead;
OVERLAPPED gOverlapped;
DWORD dwResult;

dwResult = MPUSB_FAIL;

// set up overlapped structure fields
gOverlapped.Internal = 0;
gOverlapped.InternalHigh = 0;
gOverlapped.Offset = 0;
gOverlapped.OffsetHigh = 0;
gOverlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

if(pLength != NULL)*pLength = 0;

// attempt an asynchronous read operation
bResult = ReadFile(handle,pData,dwLen,&nBytesRead,&gOverlapped);

if(!bResult)
{
// deal with the error code
switch (GetLastError())
{
case ERROR_HANDLE_EOF:
{
// we have reached the end of the file
// during the call to ReadFile
break;
}
case ERROR_IO_PENDING:
{
// asynchronous i/o is still in progress
switch(WaitForSingleObject(gOverlapped.hEvent, dwMilliseconds))
...

tôi trích đến đây vì thấy hàm WaitForSingleObject(...).

Tham khảo link sau để thấy nó làm gì
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/waitforsingleobject.asp
như vậy ta có thể thử với biến dwMilliseconds,
Các bạn tiếp tục xem thế nào.

ntc
15-12-2006, 10:21 AM
Em thử hạ thời gian xuống, cỡ trên 10ms thì ổn định. Còn nếu <10ms thì lỗi độ dài dữ liệu nhân được < độ dài được chỉ định.

Chắc là dưới 10 ms thì không đủ thời gian cho nó truyền. Mà Hòa thử truyền nhận bao nhiêu byte. 64 byte hả.

Nhưng mà mấy byte cũng được, quan trọng là dựa vào số byte truyền và thời gian truyền nhận, mình có thể cân đối thời gian delay một cách hợp lí để tăng tốc độ truyền nhận lên.

Hạ thời gian xuống không có tác dụng, thế mới đểu chứ


Có chứ nhỉ. mình nghĩ thế, trong trường hợp truyền nhận liên tục. Chứ mình giảm thời gian delay từ 1s xuống còn cỡ 10 ms, nhưng mà sau mỗi 2s mình mới truyền một lần, thì không có tác dụng là đúng rồi. :D

tôi trích đến đây vì thấy hàm WaitForSingleObject(...).

Tham khảo link sau để thấy nó làm gì
http://msdn.microsoft.com/library/de...ngleobject.asp
như vậy ta có thể thử với biến dwMilliseconds,
Các bạn tiếp tục xem thế nào.

Em chưa hiểu ý của anh lắm, vì biến dwMilliseconds cũng chính là cái giá trị delay mà tụi em đang thử. :(

hungbkhn
16-12-2006, 09:59 AM
sau khi dọc bằng lệnh
// attempt an asynchronous read operation
bResult = ReadFile(handle,pData,dwLen,&nBytesRead,&gOverlapped);

người ta kiểm tra kết quả trả về
if(!bResult)
{
KL1
}
else
{
KL2
}
Mục đích của KL1 là nếu đọc chưa được thì đợi, đọc và cập nhật lại bResult.
Do đó sủ dụng lệnh
WaitForSingleObject(gOverlapped.hEvent, dwMilliseconds)
Như vậy tốc độ < 1Khz.
Nhưng ngay cả khi minh lấy dwMilliseconds=10, truyền 10Byte vẫn lỗi.
Bây giờ ý mình là ko đợi nữa,
if(!bResult)
{
CancelIo(handle);
break;
}
else
{
KL2
}
ResetEvent(gOverlapped.hEvent);
CloseHandle(gOverlapped.hEvent);

Có ok không nhỉ ?

ntc
16-12-2006, 01:13 PM
Có ok không nhỉ ?

Em nghĩ là ok. :)

Mình không cần delay, chỉ cần hỏi vòng trị trả về của hàm MPUSBRead. Làm như vậy sẽ tận dụng được tối đa khả năng truyền nhận, và giảm bớt khoảng thời gian delay thừa.

Ví dụ, mình cần nhận 10 byte, mình chọn thời gian delay là 10 ms. Giả sử sau khi time out (hết 10 ms), mới đọc được có 9 byte, thì vẫn phải tiếp tục delay thêm 10 ms chỉ để đọc nốt 1 byte còn lại, như vậy thời gian delay thừa sẽ phát sinh.

Cái này giống như kiểu, ngư một giấc, thức dậy hỏi, xong chưa? chưa xong hả? ngủ tiếp! thức dậy hỏi ...

Mình cứ break, kệ nó, cho nó đọc thoải mái, chỉ cần biết là đã xong hay chưa thôi (dựa vào trị trả về của hàm MPUSBRead) để xử lí tiếp. Như vậy ta có thể xác định chính xác hơn thời điểm kết thúc truyền nhận, và tận dụng được tối đa khả năng truyền nhận.

Cái này giống như kiểu, hỏi liên tục, xong chưa? xong chưa? chưa xong hả? làm tiếp đi? xong chưa? ...

Nhưng nhiều khi cái thời gian hỏi lòng vòng lại nhiều hơn thời gian delay ấy nhỉ.

:D

bien_van_khat
17-12-2006, 09:23 AM
Em nghĩ là ok. :)
Mình cứ break, kệ nó, cho nó đọc thoải mái, chỉ cần biết là đã xong hay chưa thôi (dựa vào trị trả về của hàm MPUSBRead)
Cái này giống như kiểu, hỏi liên tục, xong chưa? xong chưa? chưa xong hả? làm tiếp đi? xong chưa? ...
để xử lí tiếp.
:D

Cậu thực hiện công việc này như thế nào? Quay đi quay lại gọi hàm ReadFile à?


if(!bResult)
{
CancelIo(handle);
break;
}

Nếu bạn CancelIo chỗ này, đồng nghĩa với việc bạn bỏ tác vụ IO, trong khi nó còn đang PENDING (ko tính lỗi), tức là chắc chắn bạn ko có dữ liệu. Như vậy là sao?

Hì, ở đây tớ hỏi nhé, ko phải xỏ xiên gì đâu :)

hungbkhn
17-12-2006, 03:22 PM
ban thử với dll mình dịch xem có chạy ko, nếu báo lỗi gì thì post lên nhé, hì, sau phân tích tiếp, mình giờ ko có dk để thử

hungbkhn
17-12-2006, 03:26 PM
zip lai moi gui duoc :)

hungbkhn
17-12-2006, 03:42 PM
cái hồi nãy dịch bằng VC, cái này dịch bằng BC, bạn thử luôn cả 2 cái nhé :)

bien_van_khat
17-12-2006, 05:27 PM
hix trưởng lão hungbkhn thông cảm, vì em ko làm vụ này, thấy bác đưa ra ý tưởng thì em thử vặn lại thôi, để xem em có hiểu đúng ý các bác ko, hay ý tưởng của bác ko khả thi. Do đó code của bác em ko thử được.

RedRose
18-12-2006, 09:24 AM
Em down cả 2 file dll trên về chạy đều bị lỗi không chạy được.

"console.exe has encountered a problem and needs to close. We are sorry for the inconvenience."

hungbkhn
18-12-2006, 11:27 AM
toi vua thu lai file dich bang BC++, no chay OK, chỉ có điều khi dịch lại hàm gọi ko dùng dấu gạch ở đầu "_" của hàm gọi.
Tôi cũng ko làm về cái món PIC này, chỉ là gần đây có việc phải dùng nên đọc một tí thôi, nhân tiện hỏi mọi người tí :) cho nhanh.
Tôi viết một đoạn lọc IIR, hoặc dùng mềm hoặc cứng.
Câu hỏi là:
- trên delphi có cái VCL nào ngon cho mình chọn tham số bộ lọc "online" (dùng bộ đệm), nếu có chỉ cho tôi với (share cho nhanh một ví dụ nữa thì tốt) :).
- dưới PIC18 thi giải pháp là gì ?
Thanks trước

falleaf
19-12-2006, 12:09 AM
Bác làm nó chạy ngon rồi, bác cho một cái tutorial đi ạ :D

hungbkhn
19-12-2006, 09:08 AM
hỏi một ngày vẫn ko ai giúp, nên đưa ra giải pháp thế này:
- trên PC tự viết với từng bộ lọc, mỗi lần thử lại phải tính, ko linh động lắm, có một người bảo dùng DCDSPFilter_v1.03_Source nhưng vẫn chưa đọc dùng thế nào, có bạn nào dùng rồi bảo tôi tiếp :)
- dưới PIC dùng AN 852, gọi asm từ C18, mình nhúng hàm lọc vào C là được (user manual).
cách 2 viết mỗi bằng C:
ví dụ bộ lọc 50Hz Notch:
O(n)=[4096*I(n)-6627*I (n-1)+4096*I(n-2)+6211*O(n-1)-3598*O(n-2)]>>12
Cách viết thứ 2 theo mọi người có đúng không, tôi chỉ hỏi ý về khả năng chạy thôi chứ không về hệ số :)

le vu
03-02-2007, 11:42 AM
Tôi thâý mâý bạn chuyển tờ liêụ khó quá nên giơí thiêụ một trang chuyển taỉ vô tư và săn mở luôn cho diễn đàn
mediamax.com
USERNAME:picvietnam
PASSWORD:pic1234

txmvt4
08-02-2007, 10:40 PM
Vui đây !


Bạn đã học đến PÍC8 thì bới móc gì tui, nhưng không sao, vậy mới vui.
Giao diện vật lý chuẩn RS232 trong 18F458 có và có trong mọi con PIC từ 18 chân trở lên. Nếu bạn tìm từ RS232 trong datasheet của PIC thì bạn chưa làm module này bao giờ, nó là bộ USART (ADDRESSABLE UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER).
Còn muốn hỏi USB khác RS232 ở chỗ nào, thì tui luôn sẵn sàng chat với bạn:thaihoa_tchya.


Về mặt tài liệu, thì chính tông võ học là quyển USB Spectification, của nhóm các nhà sản xuất Compaq, HP, Intel, Lucent, Microsoft, NEC, Philips đưa ra vào năm 2000.
Quyển thứ hai tui đánh giá là hay là quyển USB Complete của Jan Axelson.
Còn một quyển khác đọc cho vui là USB by Examples.

Bản bang Microchip có kha khá Appnotes về USB, cả code nguồn = HTPICC cho USB1.1 và code = C18 cho USB 2.0
Appnotes thì có: AN1003,AN950,AN956...

Về mặt công cụ, cần có PIC hỗ trợ USB, với USB 1.1 thì có dòng PIC16C745, còn USB2.0 thì có dòng 18F2455,2550,4455,4550.

Trình dịch thì cần có một trình dịch PIC hỗ trợ loại PIC mà bạn đang dùng: HTPICC18, CCS bản gần đây (tui không nhớ bản nào nó hỗ trợ USB), PicBasic Pro bản 2.46, Microchip C18 bản 2.0 trở lên.

Về đồ ăn sẵn thì có Easy HID (free) đi với PICBasic, CCS, Windriver của Jungo.

Về phát triển Driver trên Windows thì bạn biết cái nào viết cái ấy, C++,Basic,Delphi,C#, tui phát triển Driver = Delphi.


Có người nhờ tôi làm thiết bị đọc thẻ MMC, tui đã đọc nhưng chưa có đồ để thử, FAT thì thiên hạ đã có đồ ăn sẵn, còn nếu làm = NTFS thì tui xin đầu hàng cả hai tay.


Bàn được nhưng chỉ bàn nhưng cái bên trên, còn căn bản về PIC thì không nói đến.

Chúc vui :D

Chào bác ! Bac có bản PicBasic hay CCSC hoặc là 1 cái nào đó để viết Solo với thằng VB trong phần mềm Easy HID đó không? Gửi cho em với.
txmvt4@yahoo.com

tranhuyky
06-03-2007, 10:25 AM
Chào các bạn,
Mình tìm được 1 ví dụ về usb, thấy hay hay nên post lên cho các bạn xem thử. ^_^
ps: phần HID là 1 keyboard usb, bạn nào làm thêm được phần cho nó boot được từ BIOS thì chỉ mình với nhe.

tranhuyky
06-03-2007, 10:30 AM
Ví dụ HID ở trên viết về keyboard usb dùng lớp HID. Mình đã làm keyboard usb rồi, nó hoạt động bình thường trong windows, nhưng khi khởi động máy thì không truy xuất được vào BIOS và không vào DOS được( chỉ boot được trong windows thôi). Mình đã chỉnh 2 trường subclass và protocol là 1 rồi những vẫn không vào bios được.
Bạn nào biết giúp mình với.

phutrang
13-05-2007, 09:33 AM
cho toi biet cau tao cua úb

namqn
13-05-2007, 11:57 PM
cho toi biet cau tao cua úb
USB là một chuẩn giao tiếp, nó không có cấu tạo. Bạn hỏi cho rõ ràng hơn, cấu tạo của host, hay của ngoại vi chẳng hạn. Bạn hỏi cấu tạo để làm gì? Người ta thường chỉ dùng linh kiện đã được sản xuất sẵn chứ không mấy ai quan tâm đến cấu tạo của ngoại vi hay host USB.

Thân,

hopeman
27-05-2008, 03:27 PM
mình đã làm giao tiếp USB HID cho con 18F4550 nhưng tốc đô truyền dữ liệu còn chậm quá, mình muốn làm nó chạy ở chế độ 2.0 full speed cho chuẩn HID này nhưng ko biết làm thế nào? bạn nào biết rồi chỉ mình với . khi viết code mình sử dụng các thư viện có sẵn của CCS

bien_van_khat
28-05-2008, 03:35 PM
mình đã làm giao tiếp USB HID cho con 18F4550 nhưng tốc đô truyền dữ liệu còn chậm quá, mình muốn làm nó chạy ở chế độ 2.0 full speed cho chuẩn HID này nhưng ko biết làm thế nào? bạn nào biết rồi chỉ mình với . khi viết code mình sử dụng các thư viện có sẵn của CCS

Tốc độ truyền nhận dữ liệu thực tế phụ thuộc vào
+ Tốc độ bus
+ Tốc độ xử lý dữ liệu của đơn vị điều khiển.
Đối với 18F4550, tốc độ bus là full-speed
HID được thiết kế không nhắm vào mục đích tải dữ liệu tốc độ cao, về lý thuyết tốc độ tối đa là 64KBs. Để tăng tốc độ của HID bạn có thể tăng Endpoint buffer size tối đa là 64byte (mặc định là 8byte), giảm thời gian polling của host tối thiểu là 1ms.

Tuy nhiên như đã nói ở trên, tốc độ thực phụ thuộc rất nhiều vào quá trình xử lý dữ liệu của PIC.

lion
29-05-2008, 07:55 AM
các bác nói về USB toàn cho người biêt' rồi
còn cho người mới học đoc mấy vụ này thấy ngất luôn !!!
chăng thấy Ví Dụ cụ thể gì cả

hopeman
29-05-2008, 12:12 PM
mình đã thử tăng buffer lên 64 và cũng đã để thời gian poilling xuống 1ms (mặc dù nó cảnh báo là ko được để nhỏ hơn 10ms :D ) nhưng thực sự là chưa tăng được đáng kể tốc độ truyền ( giờ này vẫn chậm hơn Com nhiều lắm ) . mình nhận thấy là chip mình đang chạy ở chế độ Full speed nhưng lại ở USB version 1.0 . mình nghĩ là vấn đề mấu chốt là ở trỗ làm sao để lên thành USB Version 2.0 ( vì con này có hỗ trợ 2.0 ) .còn về chuẩn HID thì mình thấy nó cũng cho chạy được 64Kb ở tốc độ Full Speed 2.0 mà , còn high Speed thì lên tận 40MB/s lận .BVK có biết làm thiết lập cái gì để nó chạy ở USB Version 2.0 hay ko?

hopeman
29-05-2008, 12:29 PM
các bác nói về USB toàn cho người biêt' rồi
còn cho người mới học đoc mấy vụ này thấy ngất luôn !!!
chăng thấy Ví Dụ cụ thể gì cả

bạn hãy nạp ngay ví dụ ex_usb_hid.c trong mục example của ccs vào là chạy rồi tìm cách chọc ngoáy nó là OK , tôi nghĩ đây là cách tiếp cận nhanh nhất vấn đề này :D

namqn
30-05-2008, 06:40 PM
mình đã thử tăng buffer lên 64 và cũng đã để thời gian poilling xuống 1ms (mặc dù nó cảnh báo là ko được để nhỏ hơn 10ms :D ) nhưng thực sự là chưa tăng được đáng kể tốc độ truyền ( giờ này vẫn chậm hơn Com nhiều lắm ) . mình nhận thấy là chip mình đang chạy ở chế độ Full speed nhưng lại ở USB version 1.0 . mình nghĩ là vấn đề mấu chốt là ở trỗ làm sao để lên thành USB Version 2.0 ( vì con này có hỗ trợ 2.0 ) .còn về chuẩn HID thì mình thấy nó cũng cho chạy được 64Kb ở tốc độ Full Speed 2.0 mà , còn high Speed thì lên tận 40MB/s lận .BVK có biết làm thiết lập cái gì để nó chạy ở USB Version 2.0 hay ko?
Full-speed 2.0 và full-speed 1.x khác nhau chỗ nào?

Thân,

lion
25-06-2008, 11:14 PM
vấn đề là ở chỗ là các hàm mà CCS tạo ra được thiết lập như thế nào??? còn đi ăn sẵn thì tôi ko thích lắm . có chọc ngáy thì cũng khó mà hiểu được.

lion
25-06-2008, 11:20 PM
có bác nào đọc datasheet cua USB rồi thì có thể nói cho em biết 1 số định nghĩa của nó ko .
VD : ping-pong , endpoint .......
mấy cái đinh nghĩa cua nó khó hiểu quá !!!

phamminhtuan
30-06-2008, 04:50 PM
các bác nói về USB toàn cho người biêt' rồi
còn cho người mới học đoc mấy vụ này thấy ngất luôn !!!
chăng thấy Ví Dụ cụ thể gì cả

vấn đề là ở chỗ là các hàm mà CCS tạo ra được thiết lập như thế nào??? còn đi ăn sẵn thì tôi ko thích lắm . có chọc ngáy thì cũng khó mà hiểu được.

có bác nào đọc datasheet cua USB rồi thì có thể nói cho em biết 1 số định nghĩa của nó ko .
VD : ping-pong , endpoint .......
mấy cái đinh nghĩa cua nó khó hiểu quá !!!

????? Hồi giờ mình xài toàn đồ "ăn sẵn" không, nhưng ít ra cũng tự làm được 1 cái mà không cần hỏi ai

hopeman
15-07-2008, 12:13 PM
????? Hồi giờ mình xài toàn đồ "ăn sẵn" không, nhưng ít ra cũng tự làm được 1 cái mà không cần hỏi ai

thực ra thì mình nghĩ là nên tận dũng những gì đã có, cố gắng hiểu sâu được thì càng tốt
chứ giờ mà ngồi viết lại Windows thì đúng là vỡ ...hết cả răng :D