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 26-04-2009, 05:04 PM   #16
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
Bác Nam ơi, bác giúp em cái vấn đề mà em đang mắc với!
Tôi đã xem qua sơ đồ mô phỏng của bạn, bạn không cần dùng các cổng NOT U3 và U4. Phần mềm trên PC của bạn dùng COM5, trong khi COMPIM lại được thiết lập COM4.

Bạn chỉ mô phỏng PC <=> RS-232 <=> PIC => LED, không rõ bạn phát biểu "chưa giả lập được cổng COM" là có ý nghĩa gì.

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:27 PM   #17
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 26-04-2009, 10:33 PM   #18
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   #19
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, 12:47 AM   #20
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 27-04-2009, 08:57 AM   #21
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   #22
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   #23
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
Old 27-04-2009, 11:00 PM   #24
TANDEM
Đệ tử 2 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 40
:
Em nhờ anh Nam giải thích giúp ký hiệu "|=" và "&=" với ạ!
TANDEM vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2009, 12:49 AM   #25
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 nhờ anh Nam giải thích giúp ký hiệu "|=" và "&=" với ạ!
x |= y là cách viết tắt của x = x | y.

Tương tự, x &= y là cách viết tắt của x = x & y. | là phép toán OR logic, còn & là phép toán AND logic (trong trường hợp bạn chưa biết).

Đề nghị bạn đọc luồng rất ngắn sau:
http://www.picvietnam.com/forum/showthread.php?t=3151

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-2010, 09:17 AM   #26
hoaithanh910
Nhập môn đệ tử
 
Tham gia ngày: Apr 2010
Bài gửi: 1
:
GiÚp em vỚi ĐiỀu khiỂn sÁng tẮt 1led qua cỔng rs232(ĐoẠn cosd nha)

MẤy anh Ơi cho em xin ĐoẠn cosd ĐiỀu khiỂn sÁng tẮt mỘt led vỚi. HiỆn em Đang dÙng con 8951.giao tiẾp mÁy tÍnh qua cỔng rs232.cẢm Ơn mẤy anh nhiỀu nha!
hoaithanh910 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-05-2010, 08:36 PM   #27
leeshin456
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 7
:
mấy anh ơi hình như đang lạc đề thì phải!
đây là mục giao tiếp usb nếu làm như vậy thì chúng ta sẽ chẳng có được kinh nghiệm gì về giao tiếp USB cả.
leeshin456 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-07-2010, 02:33 PM   #28
chuotdientu
Nhập môn đệ tử
 
chuotdientu's Avatar
 
Tham gia ngày: Nov 2009
Nơi Cư Ngụ: Ho Chi Minh City
Bài gửi: 9
:
Đoạn chương trình sau (viết bằng VB6) tớ viết để điều khiển 8 chú led đơn, dùng PIC18F4550 giao tiếp với máy tính qua USB (không phải Virtual Com), trong giao diện có kèm schematic, các bạn có thể tham khảo.
File Kèm Theo
File Type: zip PIC18F4550 USB Control led_VB6.zip (489.6 KB, 448 lần tải)

thay đổi nội dung bởi: chuotdientu, 28-07-2010 lúc 03:01 PM.
chuotdientu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-03-2013, 10:46 AM   #29
liunguyenspk
Nhập môn đệ tử
 
Tham gia ngày: Oct 2011
Bài gửi: 1
:
sao mình dow về ko có file VB bạn ơi? share cho mình cái code mình tham khảo nhé,mình tính làm trên AVR
liunguyenspk 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à 07:34 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