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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc 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-08-2008, 02:15 AM   #1
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Hướng dẫn làm USB<->RS232 để debug chương trình

Hiện nay mọi người sử dụng máy laptop cũng nhiều, mỗi lần viết chương trình cho PIC mà bị lỗi thì không cách nào mà lần với cái LCD bé tí tẹo, còn kết nối với máy tính qua RS232 để debug bằng Terminal cũng không được khi mà máy tính không có cổng com. Giải pháp là dùng chip chuyển đổi RS232 <-> USB để có thể dùng Terminal để debug thông qua USB. Nhưng mà chip này chỉ có mỗi chức năng chuyển đổi, ngoài ra, những yêu cầu khác như giao tiếp i2c, spi ... thì không có. Vậy tại sao không làm 1 thiết bị debug hoàn chỉnh, chuyển đổi USB <->RS232 tận dụng Terminal trên Win, và các giao tiếp khác của PIC. Các bạn có thể sử dụng PIC18F2550 hay PIC18F4550. Các bước cần thực hiện như sau:

Thiết kế phần cứng:
vẽ mạch nguyên lý như sau, ở đây mình vẽ bằng Orcad, mạch đơn giản chỉ là chuyển đổi USB<->RS232



Các bạn có thể thêm vào đó I2C hay SPI hay Program thì tùy, Sau này nếu cần debug từ các PIC khác, chỉ việc nối TX và RX tương ứng với RX và TX.

Còn về phần mềm, đơn giản là dùng ex_usb_serial.c của CCS C trong thư mục Examples của thư mục cài đặt CCS C[C:\Program Files\PICC\Examples], không cần sửa gì nhiều, bạn dùng thạch anh nào thì hiệu chỉnh cho đúng, ở đây mình dùng thạch anh 4Mhz, nên hiệu chỉnh như sau:


Bạn có thể lược bỏ bớt những phần không cần thiết trong chương trình, đoạn code của CCS chỉ sử dụng để chuyển đổi USB<->RS232, nhưng tùy bạn có thể hiệu chỉnh nó và dùng Terminal để chuyển thành cái gì thì tùy
PHP Code:
 while (TRUE) {
      
usb_task();
      
usb_debug_task();

      if (
kbhit()) {
         
c=getc();
         if (
c=='\n') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         if (
c=='\r') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         else {
usb_cdc_putc(c);}
      }
      if (
usb_cdc_kbhit()) {
         
c=usb_cdc_getc();
         if (
c=='\n') {putc('\r'); putc('\n');}
         if (
c=='\r') {putc('\r'); putc('\n');}
         else {
putc(c);}
      }
   } 
Vậy là xong, dịch file rồi nạp vào cho PIC, đảm bảo chạy ngay.

Sau đó cắm vào máy tính thì nó hỏi driver, bạn làm như sau:






Và bây giờ bạn có thể viết bất kì ứng dụng nào với cổng COM ảo đã được tạo, nếu muốn, bạn có thể hiệu chỉnh sơ sơ, mình không có cổng COM vật lý nào, nên chỉnh cho cổng COM ảo này thành cổng COM1 và dùng terminal để debug, như sau:








Quả thật là tiện lợi, nhỏ gọn và làm được nhiều thứ để gỡ rối chương trình, chúc các bạn thành công
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-08-2008, 10:19 AM   #2
thaovma
Đệ tử 3 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 50
:
Bài viết của bạn rất hay, nhân tiện mình xin được post bài tương tự nhưng bạn sẽ làm việc với PIC8F2550. Cách làm ở đây hoàn toàn tương tự như đối với 18F4550, nhưng các bạn có thể load về tham khảo thêm, hy vọng sẽ giúp ít được cho các bạn đang mong muốn làm việc với USB_CDC.
File Kèm Theo
File Type: rar USB_CDC.rar (127.5 KB, 1561 lần tải)
thaovma vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-08-2008, 10:48 AM   #3
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
đây đúng là 1 bài viết rất giá trị với các thành viên của PicVN
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2008, 12:16 AM   #4
hailua_pro_2006
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 14
:
vậy làm sao đọc đc file hex, nó chuyển về máy tính toàn số ko sao đọc đc nếu đọc đc chì em với
hailua_pro_2006 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-06-2009, 09:10 PM   #5
jackiele
Đệ tử 3 túi
 
Tham gia ngày: Jun 2008
Bài gửi: 51
:
Tại sao ko tu lam cái USB<=>RS232 đơn giản chỉ tốn khoảng chừng 35k
- 1 PL2303HX (22k)
- 1 thạch anh 12MHz (2k);
- vài cái tụ (2k)
- vài con điện trở. (2k);
- 1 USB connect. ( 3.5k);
jackiele vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-06-2009, 10:59 PM   #6
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi jackiele View Post
Tại sao ko tu lam cái USB<=>RS232 đơn giản chỉ tốn khoảng chừng 35k
- 1 PL2303HX (22k)
- 1 thạch anh 12MHz (2k);
- vài cái tụ (2k)
- vài con điện trở. (2k);
- 1 USB connect. ( 3.5k);
uh đúng , cái này cũng chế đc cable USB<-->232 . U post cái mạch lên cho ae tham khảo (+dviver nếu có) .
Tui cũng đã từng lấy cable DKU5 (cable nokia) độ lại để nạp philip . Bên trong đầu chuyển của cable DKU5 cũng có con PL2303 .
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-06-2009, 02:58 AM   #7
nguyendinhtuan
Đệ tử 6 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 127
:
đây là schematic và PCB.
File Kèm Theo
File Type: zip usb2usart.zip (219.4 KB, 1956 lần tải)
nguyendinhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-06-2009, 10:28 AM   #8
sonduy1
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 20
:
em xai` latop nen viec lien ket qua cong com ko dc bac nao` giup voi.e moi vao` nghe` dc may ngay rui`.hihi.mong cac bac giup do~ nhiu` cho.thanks !
sonduy1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-07-2009, 06:50 PM   #9
fulloflove
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 3
:
Trên trang này cũng có hướng dẫn 1 mạch USB > RS232 đơn giản nè, ko cần driver, chỉ sử dụng 1 con AVR 8 chân
http://www.recursion.jp/avrcdc/
fulloflove vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-10-2009, 08:17 AM   #10
greenfield
Đệ tử 6 túi
 
Tham gia ngày: Jul 2009
Bài gửi: 152
:
Không biết có ai biết có con PIC nào hỗ trợ là luôn USB --> COM đầy đủ tất cả 9 chân cổng COM để có thể giao tiếp nhiều chế độ.
greenfield vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2010, 10:10 AM   #11
hoangngan
Nhập môn đệ tử
 
Tham gia ngày: Jul 2010
Bài gửi: 1
:
Trích:
Nguyên văn bởi phamminhtuan View Post
Hiện nay mọi người sử dụng máy laptop cũng nhiều, mỗi lần viết chương trình cho PIC mà bị lỗi thì không cách nào mà lần với cái LCD bé tí tẹo, còn kết nối với máy tính qua RS232 để debug bằng Terminal cũng không được khi mà máy tính không có cổng com. Giải pháp là dùng chip chuyển đổi RS232 <-> USB để có thể dùng Terminal để debug thông qua USB. Nhưng mà chip này chỉ có mỗi chức năng chuyển đổi, ngoài ra, những yêu cầu khác như giao tiếp i2c, spi ... thì không có. Vậy tại sao không làm 1 thiết bị debug hoàn chỉnh, chuyển đổi USB <->RS232 tận dụng Terminal trên Win, và các giao tiếp khác của PIC. Các bạn có thể sử dụng PIC18F2550 hay PIC18F4550. Các bước cần thực hiện như sau:

Thiết kế phần cứng:
vẽ mạch nguyên lý như sau, ở đây mình vẽ bằng Orcad, mạch đơn giản chỉ là chuyển đổi USB<->RS232



Các bạn có thể thêm vào đó I2C hay SPI hay Program thì tùy, Sau này nếu cần debug từ các PIC khác, chỉ việc nối TX và RX tương ứng với RX và TX.

Còn về phần mềm, đơn giản là dùng ex_usb_serial.c của CCS C trong thư mục Examples của thư mục cài đặt CCS C[C:\Program Files\PICC\Examples], không cần sửa gì nhiều, bạn dùng thạch anh nào thì hiệu chỉnh cho đúng, ở đây mình dùng thạch anh 4Mhz, nên hiệu chỉnh như sau:


Bạn có thể lược bỏ bớt những phần không cần thiết trong chương trình, đoạn code của CCS chỉ sử dụng để chuyển đổi USB<->RS232, nhưng tùy bạn có thể hiệu chỉnh nó và dùng Terminal để chuyển thành cái gì thì tùy
PHP Code:
 while (TRUE) {
      
usb_task();
      
usb_debug_task();

      if (
kbhit()) {
         
c=getc();
         if (
c=='\n') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         if (
c=='\r') {usb_cdc_putc('\r'); usb_cdc_putc('\n');}
         else {
usb_cdc_putc(c);}
      }
      if (
usb_cdc_kbhit()) {
         
c=usb_cdc_getc();
         if (
c=='\n') {putc('\r'); putc('\n');}
         if (
c=='\r') {putc('\r'); putc('\n');}
         else {
putc(c);}
      }
   } 
Vậy là xong, dịch file rồi nạp vào cho PIC, đảm bảo chạy ngay.

Sau đó cắm vào máy tính thì nó hỏi driver, bạn làm như sau:






Và bây giờ bạn có thể viết bất kì ứng dụng nào với cổng COM ảo đã được tạo, nếu muốn, bạn có thể hiệu chỉnh sơ sơ, mình không có cổng COM vật lý nào, nên chỉnh cho cổng COM ảo này thành cổng COM1 và dùng terminal để debug, như sau:








Quả thật là tiện lợi, nhỏ gọn và làm được nhiều thứ để gỡ rối chương trình, chúc các bạn thành công
Cảm ơn vì bài viết rất hay!
Tiện đây cho mình hỏi bạn một chút, mình muốn sử dụng usb to rs232 để kết nối giữa máy tính sách tay ACER và UPS thì phải làm những gì, mua dây ở đâu thì đảm bảo về chất lượng?
hoangngan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-09-2011, 09:25 PM   #12
phongvm90
Nhập môn đệ tử
 
Tham gia ngày: Aug 2011
Bài gửi: 5
:
anh chủ thớt ơi, mấy image của anh bị die rồi ạ.

Em muốn hỏi một chút ạ, em dùng mẫu của ccs để code cho cái usb to rs232. Nhưng khi cắm vào thì máy tính thì không có gì xảy ra cả, máy tính ko hỏi driver, pic cũng ko chạy. Em kiểm tra thì mạch vẫn có điện chạy tốt

Em dùng máy win7 64 bits ạ. Cái proteus thì ko dùng đc vì driver usb ảo của proteus ko chạy trên 64 bit nên em chỉ có cách làm mạch rồi test. Giờ nản quá...

Code em đây ạ:

#include <18F4550.h>
#device adc=8
#include <usb_cdc.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES MCLR //Master Clear pin enabled
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL5 //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4 //System Clock by 4
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES VREGEN //USB voltage regulator enabled
#FUSES ICPRT //ICPRT enabled
#FUSES HS

#use delay(clock=20000000)


void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
char c;
// init usb port to rs232
usb_cdc_init();
usb_init();
// Test interface:
// Test USB
output_low(PIN_D0);
while (TRUE)
{
usb_task();
//usb_debug_task();
if (usb_cdc_kbhit())
{
c=usb_cdc_getc();
output_toggle(PIN_D1);
}
}
phongvm90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-09-2011, 12:53 PM   #13
phongvm90
Nhập môn đệ tử
 
Tham gia ngày: Aug 2011
Bài gửi: 5
:
hic có ai giúp em được không ạ, em dùng Win7 64 bits, khi code xong USb - rs232 cho pic18f4550. Lắp mạch, cắm vào thì máy tính báo là unreconized usb device. Em đoán là phải có driver nào đó. Ai giúp em với ạ
phongvm90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-10-2011, 09:37 PM   #14
trangthancb
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 5
:
Trích:
Nguyên văn bởi phongvm90 View Post
hic có ai giúp em được không ạ, em dùng Win7 64 bits, khi code xong USb - rs232 cho pic18f4550. Lắp mạch, cắm vào thì máy tính báo là unreconized usb device. Em đoán là phải có driver nào đó. Ai giúp em với ạ
Mình đang giống trường hợp như bạn! Và giải pháp của mình là tạo 1 phân vùng mới 10GB(tùy bạn)....và cài winXP
Win7 không chạy được đâu ^_^
trangthancb vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-10-2011, 11:46 PM   #15
danghien719
Đệ tử 3 túi
 
danghien719's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 52
:
Question

Trích:
Nguyên văn bởi trangthancb View Post
Mình đang giống trường hợp như bạn! Và giải pháp của mình là tạo 1 phân vùng mới 10GB(tùy bạn)....và cài winXP
Win7 không chạy được đâu ^_^
win7 ko chạy được thật à ?
__________________
HIENCLUBVN -Naval Academy
danghien719 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

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:46 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