Bây giờ chắc chuyển sang làm vẽ vời quá.điện tử càng ngày càng chán rồi.Kô biết làm gì khỏi chán.Bây giờ đang thử với phần mềm google sketchup xem trí tưởng tượng đến đâu.Sau này còn thiết kế cái nhà chứ nhỉ.
Thông báo
Collapse
No announcement yet.
[tut] how to communication a usb device with visual studio 2010
Collapse
X
-
Đây chính là chỗ pro chưa thâý rõ đc việc gọi liên tục usb_task(); usb_enumerated();Nguyên văn bởi minh_cly Xem bài viếtTheo tôi code chuẩn nó là thế này
Code:usb_init_cs(); // Khoi tao thiet bi USB while (1) { // Vong lap chinh firmware usb_task(); if (usb_enumerated()) { // Kiem tra USB co ket noi chua? if (usb_kbhit(1)) { // Kiem tra co du lieu trong buffer khong? // Nhan du lieu } } // Code here, muon lam gi thi lam }
tui giả sử thế này nhé : điện trở cuộn dây của loa (earphone) có giá trị 32ohm .
- Đo adc liên tục ktra xem jack earphone đã đc cắm vào mạch chưa , nếu gtri adc trong ngưỡng vd : 90-160adc thì biết loa ok
- Ktra độ cảm âm , mức tiêu thụ điện ,độ cách điện ...
- Sau khi ok , truyền thông với máy tính qua cổng USB để thực hiện một số phép ktra nữa , vd : độ rè , độ hú
Giao diện trên máy tính bạn bật lên , ktra kết nối USB, nhấn nút "KẾT NỐI" rồi bắt đầu chờ tín hiệu từ mạch gửi lên .
Như vậy trong thời gian này , mạch làm việc liên tục các phép đo đạc ktra , báo hiệu , đk cơ cấu ...còn đâu mà gọi liên tục usb_task(); usb_enumerated(); . K lẽ chèn liên tục các câu lệnh này vào chương trình ?
Sau khi gặp rắc rối này , tui nghĩ chắc chắn có cách kết nối USB bằng hàm ngắt (ngắt USB) . Nhằm đáp ứng việc thực hiện các công việc trong main()
U có cách giải thích nào khác khi vừa lập trình kết nối USB vừa lập trình thực hiện nhiều công viêc ?
Comment
-
Nguyên văn bởi rptdnmqs Xem bài viếtBây giờ chắc chuyển sang làm vẽ vời quá.điện tử càng ngày càng chán rồi.Kô biết làm gì khỏi chán.Bây giờ đang thử với phần mềm google sketchup xem trí tưởng tượng đến đâu.Sau này còn thiết kế cái nhà chứ nhỉ.
Có nhiều cái chúng ta ngộ nhận mình đã biết hết hoặc như vậy là tối ưu . Càng thực hiện nhiều dự án , tui thấy mình đúng là phải đổi cách suy nghĩ , luôn ktra lại mọi thứ mình đã làm : như vậy đã tối ưu chưa ? còn cách nào khác hay hơn k ? Rẻ hơn và ổn định hơn .
Hân hạnh đc làm quen
Comment
-
Chúng ta có thể linh hoạt thuật toán như sau:
Công việc của bạn chắc chắn lặp tuần hoàn và chỉ yêu cầu việc gửi dữ liệu.Code:bool send = false; int8 outdata[64]; // 64 chi la do rong buffer, thay doi theo chuong trinh cu the usb_init_cs(); // Khoi tao thiet bi USB while (1) { // Vong lap chinh firmware usb_task(); // Do dat, xu ly // Ghi du lieu muon gui vao outdata, khi muon gui thi xac lap send = true if (usb_enumerated()) { // Kiem tra USB co ket noi chua? if (send) { usb_put_packet(1, outdata, 64, USB_DTS_TOGGLE); // Gui du lieu send = false; } } }
Sau khi đo đạt, xử lý thông số, nếu chưa muốn gửi dữ liệu thì ko làm gì cả. Muốn gửi dữ liệu thì ghi dữ liệu vào buffer và xác lập send = true. Khi đó, sau khi check kết nối trong mỗi vòng lặp, chương trình kt xem có muốn gửi dữ liệu ko (biến send). Nếu có thì gửi và xác lập send = false lại như cũ. Nếu ko thì bỏ qua.Computer Science major - Vietnamese-German University
Sponsored by
Comment
-
Ngắt USB chỉ hoạt động khi đã gọi usb_task() liên tục. Khi USB kết nối, usb_task() sẽ bắt đầu mở ngắt USB. Nếu làm theo thuật toán trên, bạn đo thoải mái mà chẳng có ảnh hưởng gì cả.
Nếu gặp những công việc có tính delay, hãy tạo thêm 1 biến bool mới (vd bool active = false). Mỗi lần mở cho active = true và ngược lại. Ở phía cuối vòng lặp nhãy thêm mã kt trạng thái (như nếu active = true thì led sáng). Việc delay có thể sử dụng timer để xác lập khoảng thời gian.Last edited by minh_cly; 31-01-2012, 22:26.Computer Science major - Vietnamese-German University
Sponsored by
Comment
-
Tôi nghĩ bác ấy chưa thành thạo về thuật toán lắm, chứ tôi nghĩ những công việc đó cũng tốc độ thấp thôi (48 Mhz là nhanh với những tác vụ đó rồi).Nguyên văn bởi rptdnmqs Xem bài viếtBạn Zz_Bi_zZ nên dÙng ARM thì hơn.Những ứng dụng như của bạn đòi hỏi khá nhanh.Mình cũng đang tìm 1 con arm tốc độ khoảng 100Mhz,Ram 64kB,Rom 1MB.Ít chân 1 chút.Mấy con kia lắm chân quá.Computer Science major - Vietnamese-German University
Sponsored by
Comment
-
Có chút vấn đề ở đây. Tôi giao tiếp USB đâu cần phải gọi usb_task , usb_cdc_kbhit liên tục. Chỉ cần gọi hàm khảo tạo usb stack usb_init(), sau đó chờ điểm danh bằng hàm usb_enumerated(). Nếu quá trình điểm danh OK thì không cần gọi các hàm đó nữa mà đi thực hiện các việc khác.Nguyên văn bởi Zz_Bi_zZ Xem bài viếtTui cũng đã có làm project về USB (USBtoCOM) , nhưng rồi cũng rút là đc chút ít kinh nghiệm chia sẻ :
- Khi sử dụng chip Master vừa giao tiếp USB vừa thực hiện một số chưong trình thì hầu như k khả thi . Lí do : các hàm usb_task , usb_cdc_kbhit (CCS) cần phải đc gọi vòng lặp liên tục thì cổng USB mới đc nhận dạng , còn k lập tức báo lỗi k nhận ra thiết bị .
- Khi nạp lại chuơng trình , cổng USB khởi tạo lại . các bạn sẽ thấy rõ rắc rối này : giao diện viết trên máy tính đang chạy với cổng USB , tự nhiên bị mất cổng , chắc chắn sẽ báo lỗi hoặc bị treo .
Do đó , nên khuyên : dùng riêng 1 con master để giao tiếp USB , mục đích duy trì trạng thái ổn định cổng . Các chưong trình còn lại viết trên con Slave .
Kinh nghiệm làm project usbtocom có giúp đc j thì chia sẻ ae vậy . Mong ae ý kiến thêm
Một đoạn code tôi đã viết:
void main(void)
{
set_tris_b(0x00);
output_b(0x00);
usb_init(); //Khoi tao usb stack
while(!usb_enumerated()) //Cho ket noi
{
output_b(0x00);
delay_ms(100);
output_b(0xff);
delay_ms(100);
}
while(1)
{
addr = 0x3000;
for(i=0; i<135; i++)
{
usb_gets(1,data,64,3000); //Nhan 64 byte luu vao ram USB.
write_program_memory(addr,data,64); //Luu 64 byte vo flash rom.
addr+=64;
}
read_program_memory(0x3000,data,64);
for(index=0; index < 64; index++)
{
output_b(data[index]);
delay_ms(100);
}
}
}
Comment
-
Có vẻ là không khí đã thay đổi.Mọi người nhiệt tình tham gia.Mình cũng nêu ý kiến đây. usb_task là 1 hàm của CCS với ý nghĩa khi usb là gắn vào thì thiết lập kết nối,qua rất nhiều công đoạn kô chỉ mỗi trong hàm usb_task,khi tháo ra thì đơn giản và nhanh chóng.Cái hàm này nếu được gọi liên tục với ý nghĩa là trường hợp usb cable (kô tốt) chập chờn.Trong trường hợp ổn định thì kô nhất thiết phải gọi lại.Mà có gọi lại thì cũng mất nhiều time xác nhận kết nối.Nếu cable kô tốt thì ảnh hưởng khá nhiều., , ,
Comment
-
Mình chỉ bổ sung cho OpenDoor. tiếp đến usb_enumerated là 1 hàm trả về giá trị config.Có nghĩa là khi cắm usb vào thì host sẽ yêu cầu nhiều công đoạn
ower,reset,control,device descriptor... sau đó trạng thái usb sẽ là CONFIG(đã xong về cấu hình) .Khi cấu hình xong thì nó mới chạy ứng dụng được.
, , ,
Comment
-
k thấp đâu bạn . Dự án của tui đc tính bằng ms chứ k phải bằng s đâu . Tui chỉ nêu đơn giản một phần trong bài toán mà tui đang tiến hành để bạn thấy việc gọi liên tục hàm kết nối sẽ ảnh hửong như thế nào đến tốc độ và việc sử lí .Nguyên văn bởi minh_cly Xem bài viếtTôi nghĩ bác ấy chưa thành thạo về thuật toán lắm, chứ tôi nghĩ những công việc đó cũng tốc độ thấp thôi (48 Mhz là nhanh với những tác vụ đó rồi).
Cảm ơn đã chia sẻ quan điểm và ý kiến .
Comment
-
Ý kiến này có vẻ cần lưu ý khi thực hiện USBNguyên văn bởi rptdnmqs Xem bài viếtCó vẻ là không khí đã thay đổi.Mọi người nhiệt tình tham gia.Mình cũng nêu ý kiến đây. usb_task là 1 hàm của CCS với ý nghĩa khi usb là gắn vào thì thiết lập kết nối,qua rất nhiều công đoạn kô chỉ mỗi trong hàm usb_task,khi tháo ra thì đơn giản và nhanh chóng.Cái hàm này nếu được gọi liên tục với ý nghĩa là trường hợp usb cable (kô tốt) chập chờn.Trong trường hợp ổn định thì kô nhất thiết phải gọi lại.Mà có gọi lại thì cũng mất nhiều time xác nhận kết nối.Nếu cable kô tốt thì ảnh hưởng khá nhiều.
Comment
Bài viết mới nhất
Collapse
-
bởi nguyendinhvanCó một chi tiết sai cơ bản trong kỹ thuật điện tử....
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 19:31 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài hát mới, nhạc Phật: Về Giữa Chiêm Bao, sáng tác: Hoàng Đình Thường.
[Verse 1] Nhân gian bao thay đổi
ĐỜI là giấc CHIÊM BAO
Người mê lầm tranh đấu
KHỔ ĐAU mãi LUÂN HỒI.
VÔ THƯỜNG nào ai thấu
...-
Channel: Tâm tình dân kỹ thuật
25-03-2026, 19:01 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
24-03-2026, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -
-
bởi chinhnguyen9Công thức
Gain (dB) = 20 × log₁₀(A)
Thí dụ 1; 60dB
log₁₀(A)=60/20=3
⇒ A=V_out / V_in = 10³ = 1.000
Thí dụ 2; 100dB
log₁₀(A)=100/20=5
⇒ A=V_out / V_in = 105 = 100.000
Tí dụ 3; LM 358
Large Signal Open Loop Voltage Gain AVOL V/mV RL = 2.0...-
Channel: Hướng dẫn sử dụng diễn đàn
19-03-2026, 08:44 -
-
Trả lời cho Mạch 3s bị giảm điện áp đầu rabởi minhtri0405chả biết bạn xử lý được chưa , kích sạc hoặc điện áp > điện áp khối pin vào 2 chân P - P+ , nhiều mạch phải yêu cầu có kích lần đầu sau đó mới chạy...
-
Channel: Điện tử dành cho người mới bắt đầu
18-03-2026, 10:01 -

Comment