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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 07-04-2009, 11:23 AM   #1
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Điều khiển LED qua USB

Nay đệ muốn điều khiển 10 LED thông qua cổng USB theo kiểu: trên màn hình máy tính có giao diện, sau khi qua cổng USB thì có PIC P16F877A viết bởi CCS. Vấn đề này không mới, song bản thân chưa có nhiều hiểu biết sâu sắc. Vì vậy, muốn tham khảo các sư huynh:
Mô hình thực hiện vấn đề này như thế nào. Rất mong hồi âm!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 06:17 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi TANDEM View Post
Nay đệ muốn điều khiển 10 LED thông qua cổng USB theo kiểu: trên màn hình máy tính có giao diện, sau khi qua cổng USB thì có PIC P16F877A viết bởi CCS. Vấn đề này không mới, song bản thân chưa có nhiều hiểu biết sâu sắc. Vì vậy, muốn tham khảo các sư huynh:
Mô hình thực hiện vấn đề này như thế nào. Rất mong hồi âm!
Đơn giản nhất là bạn dùng mô hình sau:

Máy tính <=> USB-to-serial converter <=> PIC16F877A => LED

Giao diện trên máy tính chỉ cần dùng giao tiếp RS-232 qua cổng COM ảo của bộ USB-to-serial converter. PIC16877A chỉ cần dùng giao tiếp RS-232, và xuất dữ liệu ra LED. Những vấn đề này đều đã được đề cập ở picvietnam.

Cần chú ý là PIC16F877A không hỗ trợ giao tiếp USB, do đó nếu bạn muốn dùng trực tiếp giao tiếp USB (sẽ tốn nhiều thời gian và công sức) thì nên chuyển sang một PIC18 có hỗ trợ module ngoại vi USB như PIC18Fx450, hoặc PIC18Fx455, hoặc PIC18Fx550.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 06:21 PM   #3
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Sao không thấy huynh nào giúp mình vậy?
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 06:28 PM   #4
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Cám ơn namqn! Quả thật “Giao diện trên máy tính chỉ cần dùng giao tiếp RS-232 qua cổng COM ảo của bộ USB-to-serial converter.” Đây là vấn đề tôi còn “Gà mờ” lắm, viết giao diện như thế nào? Bạn có thể cho tôi một đọan mẫu được không?
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 07:08 PM   #5
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Trích:
Nguyên văn bởi TANDEM View Post
Cám ơn namqn! Quả thật “Giao diện trên máy tính chỉ cần dùng giao tiếp RS-232 qua cổng COM ảo của bộ USB-to-serial converter.” Đây là vấn đề tôi còn “Gà mờ” lắm, viết giao diện như thế nào? Bạn có thể cho tôi một đọan mẫu được không?
Bạn kiếm chổ nào gần nhà học một khóa cấp tốc về Visual Basic trước cái đã.
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 08:44 PM   #6
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Quả thật, đệ là dân ngoại đạo, cho nên lờ mờ về IT lắm, nay gặp vấn đề này cũng tự mình muốn mày mò để làm song khó quá. Bữa trước, đệ có đọc cái TUT “Hướng dẫn giao tiếp máy tính từ A đến Z”của minhtuan04 trên diễn đàn điện tử, tối về “vọc ” như hướng dẫn thì thành công liền với mô phỏng Protues. Có điều, bây giờ đệ muốn thay C# bởi Visual Basic, thay 8051 bởi PIC P16F887A. Với Pic thì đệ mới học và cũng có thể thao tác được với vài bài tập đơn giản, song với Visual Basic thì khó quá, cho nên bây giờ đệ muốn “ăn” xong phần “Máy tính <=> USB-to-serial converter” như lời trưởng lão PIC bang đã nói. Mong các huynh chỉ giúp!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 09:16 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi TANDEM View Post
Quả thật, đệ là dân ngoại đạo, cho nên lờ mờ về IT lắm, nay gặp vấn đề này cũng tự mình muốn mày mò để làm song khó quá. Bữa trước, đệ có đọc cái TUT “Hướng dẫn giao tiếp máy tính từ A đến Z”của minhtuan04 trên diễn đàn điện tử, tối về “vọc ” như hướng dẫn thì thành công liền với mô phỏng Protues. Có điều, bây giờ đệ muốn thay C# bởi Visual Basic, thay 8051 bởi PIC P16F887A. Với Pic thì đệ mới học và cũng có thể thao tác được với vài bài tập đơn giản, song với Visual Basic thì khó quá, cho nên bây giờ đệ muốn “ăn” xong phần “Máy tính <=> USB-to-serial converter” như lời trưởng lão PIC bang đã nói. Mong các huynh chỉ giúp!
Bạn cứ xem cái USB-to-serial converter là một cổng COM, và đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=869

Việc ứng dụng thì thực ra khá đơn giản, chỉ cần dùng địa chỉ cổng COM ảo thay cho địa chỉ cổng COM trong hướng dẫn trên.

Về chi tiết cách tạo giao diện thì bạn có thể tham khảo thêm tutorial sau (viết cho VC++):
http://www.picvietnam.com/forum/showthread.php?t=274

Cả hai tutorial đều sử dụng MSComm control của Microsoft. Bạn có thể tham khảo cách dùng MSComm trong VB ở đây:
http://www.users.on.net/~cit/html/vi...m_control.html

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 06:56 PM   #8
phungtung
Đệ tử 1 túi
 
Tham gia ngày: Mar 2008
Bài gửi: 14
:
You must find by yourself!
phungtung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 10:27 PM   #9
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Trước hết, em xin chân thành cám ơn anh Nam đã bớt chút thời gian chỉ giáo!
Vì em mô phỏng bởi Proteus nên em dùng phần mềm "Virtual Serial Port Driver" để nối 2 cổng ảo, một COM5 trên PC và một COM4 trên COMPIM. Có lẽ em phải tiến hành từng phần nhỏ một (trước hết là qua cổng COM) chính vì thế mà em muốn nói là chưa giả lập được cổng COM!!?

Trích:
Nguyên văn bởi anh Nam:
Bạn đang thao tác trực tiếp trên các bit của thanh ghi PORTD, điều này có thể dẫn đến hiện tượng như bạn đã thấy, do hiệu ứng read-modify-write của các lệnh thao tác bit trong PIC.

Bạn nên dùng một thanh ghi đệm, khởi tạo giá trị của nó bởi giá trị của PORTD, sau đó cập nhật các bit của thanh ghi đệm này và ghi vào PORTD, mỗi khi bạn muốn cập nhật 1 bit nào đó của PORTD.
Việc này em chưa biết cách thực hiện trong CCS, anh có thể tỷ mỷ cho em một chút được không?
Anh thông cảm, em sẽ học cách cho vào Tag sau.

thay đổi nội dung bởi: TANDEM, 27-04-2009 lúc 09:30 AM.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2009, 12:47 AM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi TANDEM View Post
Trước hết, em xin chân thành cám ơn anh Nam đã bớt chút thời gian chỉ giáo!
Vì em mô phỏng bởi Proteus nên em dùng phần mềm "Virtual Serial Port Driver" để nối 2 cổng ảo, một COM5 trên PC và một COM4 trên COMPIM. Có lẽ em phải tiến hành từng phần nhỏ một (trước hết là qua cổng COM) chính vì thế mà em muốn nói là chưa giả lập được cổng COM!!?

Trích:
"Bạn đang thao tác trực tiếp trên các bit của thanh ghi PORTD, điều này có thể dẫn đến hiện tượng như bạn đã thấy, do hiệu ứng read-modify-write của các lệnh thao tác bit trong PIC.

Bạn nên dùng một thanh ghi đệm, khởi tạo giá trị của nó bởi giá trị của PORTD, sau đó cập nhật các bit của thanh ghi đệm này và ghi vào PORTD, mỗi khi bạn muốn cập nhật 1 bit nào đó của PORTD."

Việc này em chưa biết cách thực hiện trong CCS, anh có thể tỷ mỷ cho em một chút được không?
Anh thông cảm, em sẽ học cách cho vào Tag sau.
Nếu đã dùng COMPIM của Proteus, bạn hoàn toàn có thể dùng Virtual Terminal của Proteus để mô phỏng luôn terminal, hoặc dùng một phần mềm giả lập terminal trên máy tính (như HyperTerminal chẳng hạn) để kết nối với cổng nối tiếp đã được COMPIM giả lập. Khi đó bạn thiết lập địa chỉ COMx bằng bao nhiêu cho COMPIM thì sẽ dùng đúng địa chỉ đó trong Virtual Terminal của Proteus hay phần mềm giả lập terminal.

Về phần thao tác trực tiếp trên thanh ghi PORTD, cụ thể hơn một chút nữa là như sau:
- Bạn khai báo thêm biến PORTD_img, và sửa chương trình xử lý ngắt như dưới đây:
Code:
char ch, PORTD_img;

#INT_RDA
Receive_isr() 
{
   if (kbhit())
   {
      ch = getc();
      
      if (ch=='a') PORTD_img |= 0x01;	//Bat bit RD0
      if (ch=='b') PORTD_img |= 0x02;	//Bat bit RD1
      if (ch=='c') PORTD_img |= 0x04;	//Bat bit RD2
      if (ch=='d') PORTD_img |= 0x08;	//Bat bit RD3
      if (ch=='e') PORTD_img |= 0x10;	//Bat bit RD4
      
      if (ch=='f') PORTD_img &= 0xFE;	//Tat bit RD0
      if (ch=='g') PORTD_img &= 0xFD;	//Tat bit RD1
      if (ch=='h') PORTD_img &= 0xFB;	//Tat bit RD2
      if (ch=='i') PORTD_img &= 0xF7;	//Tat bit RD3
      if (ch=='j') PORTD_img &= 0xEF;	//Tat bit RD4
      
      PORTD = PORTD_img;
   }
}
- Trong main(), bạn khởi tạo PORTD_img = 0 cùng với PORTD = 0.

- Bạn không cần dùng mấy dòng #define may1 RD0 ... #define may5 RD4

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 10:33 PM   #11
8051topic
Đệ tử 4 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 71
:
Mình có một ý nhỏ: bạn đã làm được với 8051 vậy bạn đã làm trên mạch thật chưa? Nếu rồi thì bạn thiết kế giao diện trên VB cho chạy được với 8051 đi (cho chắc phần VB là OK_bạn thiết lập trên VB là COM5 thì trên phần mềm chuyển đổi cũng là COM5).
Sau đó bạn viết code cho PIC (cho 8051 nhận bao nhiêu byte thì cho PIC nhận bấy nhiêu byte).
8051topic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2009, 11:00 PM   #12
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Mình đã làm với PIC và tất cả đã chạy nghĩa là "PC và PIC đã bắt tay với nhau", tuy nhiên như mình nói là khi chương trình chạy thì nó không theo ý đồ của mình?
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2009, 08:57 AM   #13
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Cám ơn anh Nam nhiều lắm! Em sẽ thử lại và báo cáo với anh sau.
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2009, 07:55 PM   #14
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Em đã làm theo hướng dẫn của anh (có sửa lại một chút khi set bit ở portD) và sau đó chương trình đã chạy như ý muốn. Có điều các lệnh sau em chưa hiểu:
Code:
PORTD_img |= 0x01;
...............
PORTD_img &= 0xFE;
...............
PORTD = PORTD_img;
Nếu được,anh có thể giải thích rõ cơ chế của đoạn code được không? Em xin cám ơn!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2009, 08:20 PM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi TANDEM View Post
Em đã làm theo hướng dẫn của anh (có sửa lại một chút khi set bit ở portD) và sau đó chương trình đã chạy như ý muốn. Có điều các lệnh sau em chưa hiểu:
Code:
PORTD_img |= 0x01;
...............
PORTD_img &= 0xFE;
...............
PORTD = PORTD_img;
Nếu được,anh có thể giải thích rõ cơ chế của đoạn code được không? Em xin cám ơn!
Cơ chế của đoạn code đã được tôi nói ở một post trước đó:
Trích:
Bạn nên dùng một thanh ghi đệm, khởi tạo giá trị của nó bởi giá trị của PORTD, sau đó cập nhật các bit của thanh ghi đệm này và ghi vào PORTD, mỗi khi bạn muốn cập nhật 1 bit nào đó của PORTD.
Vì bạn chưa có khả năng chuyển ý tưởng đó thành code nên tôi mới viết giúp bạn đoạn code trên.

Vào thời điểm này, có lẽ bạn chưa cần tìm hiểu sâu hơn về hoạt động read-modify-write, nhưng nếu bạn dứt khoát phải tìm hiểu, thì vấn đề này đã được tôi và nhiều thành viên khác thảo luận cũng lâu rồi. Bạn hãy dùng công cụ "Tìm kiếm" ở thanh mênu của diễn đàn với từ khóa "read-modify-write" để tìm các bài viết liên quan.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
reretret, trich


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à 12:28 PM.


Đượ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