PDA

View Full Version : Hướng dẫn làm USB<->RS232 để debug chương trình


phamminhtuan
07-08-2008, 02:15 AM
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

http://lh3.ggpht.com/phamminhtuan.04/SJnjKZE8QpI/AAAAAAAABFE/76wPnLvIObM/Magical%20Snap%20-%202008.08.07%2000.43%20-%20001.png?imgmax=800

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:
http://lh3.ggpht.com/phamminhtuan.04/SJnlO-kCZRI/AAAAAAAABFI/Gyuwj-XlPzY/Magical%20Snap%20-%202008.08.07%2000.52%20-%20002.png?imgmax=800

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

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:

http://lh6.ggpht.com/phamminhtuan.04/SJnowTjXvQI/AAAAAAAABFM/mB7-GkXJEIc/Magical%20Snap%20-%202008.08.07%2001.03%20-%20003.png?imgmax=800
http://lh6.ggpht.com/phamminhtuan.04/SJno4kxuRGI/AAAAAAAABFo/D1DcDsN6JrY/Magical%20Snap%20-%202008.08.07%2001.03%20-%20004.png?imgmax=800
http://lh3.ggpht.com/phamminhtuan.04/SJno4G2xg-I/AAAAAAAABFk/KcCZ5xFDub0/Magical%20Snap%20-%202008.08.07%2001.04%20-%20006.png?imgmax=800
http://lh4.ggpht.com/phamminhtuan.04/SJno3jTIDmI/AAAAAAAABFg/Khvc2wPFiCM/Magical%20Snap%20-%202008.08.07%2001.04%20-%20008.png?imgmax=800

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:
http://lh6.ggpht.com/phamminhtuan.04/SJno3cEj0iI/AAAAAAAABFc/jNOkGHBaMqc/Magical%20Snap%20-%202008.08.07%2001.05%20-%20010.png?imgmax=800

http://lh5.ggpht.com/phamminhtuan.04/SJno2w149aI/AAAAAAAABFY/_aybDgrQgFU/Magical%20Snap%20-%202008.08.07%2001.06%20-%20011.png?imgmax=800

http://lh6.ggpht.com/phamminhtuan.04/SJno1THXMrI/AAAAAAAABFU/tyg8mZhkUz8/Magical%20Snap%20-%202008.08.07%2001.07%20-%20012.png?imgmax=800

http://lh3.ggpht.com/phamminhtuan.04/SJno0uvHAjI/AAAAAAAABFQ/bvMPALvnB4U/Magical%20Snap%20-%202008.08.07%2001.08%20-%20013.png?imgmax=800

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

thaovma
08-08-2008, 10:19 AM
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.

hopeman
08-08-2008, 10:48 AM
đây đúng là 1 bài viết rất giá trị với các thành viên của PicVN

hailua_pro_2006
13-08-2008, 12:16 AM
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

jackiele
26-06-2009, 09:10 PM
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);

Mr.Bi
26-06-2009, 10:59 PM
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 .

nguyendinhtuan
30-06-2009, 02:58 AM
đây là schematic và PCB.

sonduy1
30-06-2009, 10:28 AM
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 !

fulloflove
22-07-2009, 06:50 PM
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/

greenfield
04-10-2009, 08:17 AM
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ế độ.

hoangngan
25-07-2010, 10:10 AM
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

http://lh3.ggpht.com/phamminhtuan.04/SJnjKZE8QpI/AAAAAAAABFE/76wPnLvIObM/Magical%20Snap%20-%202008.08.07%2000.43%20-%20001.png?imgmax=800

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:
http://lh3.ggpht.com/phamminhtuan.04/SJnlO-kCZRI/AAAAAAAABFI/Gyuwj-XlPzY/Magical%20Snap%20-%202008.08.07%2000.52%20-%20002.png?imgmax=800

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

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:

http://lh6.ggpht.com/phamminhtuan.04/SJnowTjXvQI/AAAAAAAABFM/mB7-GkXJEIc/Magical%20Snap%20-%202008.08.07%2001.03%20-%20003.png?imgmax=800
http://lh6.ggpht.com/phamminhtuan.04/SJno4kxuRGI/AAAAAAAABFo/D1DcDsN6JrY/Magical%20Snap%20-%202008.08.07%2001.03%20-%20004.png?imgmax=800
http://lh3.ggpht.com/phamminhtuan.04/SJno4G2xg-I/AAAAAAAABFk/KcCZ5xFDub0/Magical%20Snap%20-%202008.08.07%2001.04%20-%20006.png?imgmax=800
http://lh4.ggpht.com/phamminhtuan.04/SJno3jTIDmI/AAAAAAAABFg/Khvc2wPFiCM/Magical%20Snap%20-%202008.08.07%2001.04%20-%20008.png?imgmax=800

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:
http://lh6.ggpht.com/phamminhtuan.04/SJno3cEj0iI/AAAAAAAABFc/jNOkGHBaMqc/Magical%20Snap%20-%202008.08.07%2001.05%20-%20010.png?imgmax=800

http://lh5.ggpht.com/phamminhtuan.04/SJno2w149aI/AAAAAAAABFY/_aybDgrQgFU/Magical%20Snap%20-%202008.08.07%2001.06%20-%20011.png?imgmax=800

http://lh6.ggpht.com/phamminhtuan.04/SJno1THXMrI/AAAAAAAABFU/tyg8mZhkUz8/Magical%20Snap%20-%202008.08.07%2001.07%20-%20012.png?imgmax=800

http://lh3.ggpht.com/phamminhtuan.04/SJno0uvHAjI/AAAAAAAABFQ/bvMPALvnB4U/Magical%20Snap%20-%202008.08.07%2001.08%20-%20013.png?imgmax=800

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?

phongvm90
05-09-2011, 09:25 PM
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
07-09-2011, 12:53 PM
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 ạ :(

thanhsonvn90
28-09-2011, 04:40 PM
Bạn xem lại cable nối và mạch xem. Kiểm tra tụ của vusb và chống nhiễu xem có đúng không

trangthancb
01-10-2011, 09:37 PM
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 ^_^

danghien719
01-10-2011, 11:46 PM
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 à ?

tuananh.bkhn
14-11-2011, 12:28 PM
Mình vừa làm thử nhưng không thành công :(. Bạn nào làm được có thể hướng dẫn mình cụ thể hơn không? Mình dùng laptop ko có cổng COM nên nhiều khi bất tiện quá.

hoangson_200529
20-03-2012, 01:16 PM
nếu dùng Vb giao tiếp với PIC 16F877a, thì dùng cách tạo cổng COM ảo như trên có ổn không các anh?
theo em bit thì Vb 6.0 kkhông hổ trợ giao tiếp qua USB

nguyenphu12289
17-04-2012, 09:40 AM
Mình sài win7 32bit, thấy dùng tốt mà. Cần phần mềm nhận cổng Pl2303 Driver là được. Bạn vô gú gồ mà tìm driver này

hienadword2
28-04-2012, 11:25 AM
hay do ban dung cai minh can.thank ban nha

otacon
28-05-2012, 01:40 PM
Ra chợ mua cái cáp chuyển USB2COM giá 50K là xong,chế làm gì cho mất công,trừ phi bạn muốn tiết kiệm 1 con max232+4con tụ+cái Jack DB9 và 1 khoảng không gian trong cái mạch ứng dụng thì nghe còn có lý.

phucvinh885
12-07-2012, 02:42 PM
neu muc dich de su dung teminal thi
tai sao lai ko mua 1 cai USB to COM voi gia chi khoang 50 -100k nhi @@!

slbadguy
08-05-2013, 01:06 PM
Mình đang cần chuyển từ USB sang i2c mới mệt, ko có sẵn giờ vật với con 18F2550, chắc cũng sắp xong