View Full Version : Nhiều RS232 trên một PIC
thientaisodo
20-04-2009, 11:45 AM
Mình đang gặp khó khăn trong việc thiết lập nhiều (khoảng 2 hay 3 gì đó) cổng RS232 trên một con PIC877A. Google mãi ko ra.
Ai có code mẫu hay có kinh nghiệm mong chỉ giúp, xin cảm ơn nhiều
mtuankct
20-04-2009, 12:19 PM
Bạn dùng nhiều RS232 để làm gi? Với Pic16 thì chỉ hỗ trợ một cổng RS232. Nếu bạn muốn giao tiếp với nhiều thiết bị bằng một cổng RS thì có thể sử dụng một số IC chuyển nó qua chuẩn RS485 rồi nối lại thành dạng bus thôi
thientaisodo
20-04-2009, 12:43 PM
Hiện tại mình đang cần dùng vừa chụp ảnh với camera C328, vừa truyền về máy tính (bắt buộc phải vậy !). Theo mình biết thì 16F877 sử dụng CCS có thể UART-software đến tận 4 cổng RS232? Nếu bạn biết code mẫu có thể chỉ giúp mình, mình tìm mãi chả thấy đâu cả, chỉ còn ngồi khóc thôi :((
mtuankct
20-04-2009, 12:58 PM
Nếu bạn muốn dùng tạo rs232 bằng phần mềm mình nghĩ không quá khó ví dụ như mình có ý tưởng thế này: bạn đưa chân RX vào một chân ngắt ngoài của pic rồi khi có ngắt thì set một timer để tạo BR. Trong hàm ngắt timer thì thực hiện việc đọc dữ liệu.
Tuy nhiên theo mình thì không nên làm theo cách này mà nên tìm một con vdk hỗ trợ nhiều cổng RS, với pic thì mình không rõ nhưng với con atmega128 thì mình nhớ là nó hỗ trợ 2 cổng RS riêng biệt
mtuankct
20-04-2009, 01:04 PM
ví dụ con pic này có 2 RS:PIC24FJ16GA002
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en520629
thientaisodo
20-04-2009, 02:14 PM
Cơ bản con PIC đó là 16 bit,mình ko cần dùng tới. Nếu như mình nhớ ko nhầm thì anh Linh có nói CCS có hỗ trợ việc tạo ra nhiều cổng RS232 bằng phần mềm trên con 16F877A. Để mình search kĩ xem. Có ai biết có thể nói cho mình đc ko?
huyplc1
20-04-2009, 02:44 PM
cho hỏi tạo luồn mới ở trang này kiểu gì thế. Mãi mà không tìm thấy ở đâu. web sao mà khó dùng thế
cskiller
20-04-2009, 02:57 PM
Trong CCS C dùng nhiều software RS232
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D0,rcv=PIN_D1, STREAM=ID1)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D2,rcv=PIN_D3, STREAM=ID2)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D4,rcv=PIN_D5, STREAM=ID3)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D6,rcv=PIN_D7, STREAM=ID4)
...
putc("C",ID1);
...
puts("Put data to software RS232 stream id 1",ID1);
...
getc(ID1); //Get data from software RS232 stream id 1
...
gets(buff,ID1); //Get data from software RS232 stream id 1
...
fprintf(ID1,"String formated to software RS232 stream id 1");
thientaisodo
20-04-2009, 03:51 PM
Trong CCS C dùng nhiều software RS232
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D0,rcv=PIN_D1, STREAM=ID1)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D2,rcv=PIN_D3, STREAM=ID2)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D4,rcv=PIN_D5, STREAM=ID3)
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D6,rcv=PIN_D7, STREAM=ID4)
...
putc("C",ID1);
...
puts("Put data to software RS232 stream id 1",ID1);
...
getc(ID1); //Get data from software RS232 stream id 1
...
gets(buff,ID1); //Get data from software RS232 stream id 1
...
fprintf(ID1,"String formated to software RS232 stream id 1");
Cảm ơn bạn, mình đã hiểu rồi, nhưng mà nếu mình dùng một rs232 sẵn có của phần cứng và một rs232 bằng phần mềm có đc ko bạn?
cskiller
20-04-2009, 04:07 PM
Khai báo hardware UART
#use rs232( baud=9600, STREAM=ID1) //UART1,xmit=PIN_C6,rcv=PIN_C7,
Hoặc nếu PIC có 2 hardware UART(như 18F8722)
#use rs232(UART1 , baud=9600, STREAM=ID1) //xmit=PIN_C6,rcv=PIN_C7,
#use rs232(UART2 , baud=9600, STREAM=ID2) //, xmit=PIN_G1,rcv=PIN_G2
kết hợp 1 hardware và 1 software
#use rs232(UART1 , baud=9600, STREAM=ID1) //xmit=PIN_C6,rcv=PIN_C7,
#use rs232(FORCE_SW, baud=9600, xmit=PIN_D0,rcv=PIN_D1, STREAM=ID2)
thientaisodo
20-04-2009, 04:12 PM
Cảm ơn bạn nha, mình test thử xem thế nào :)
truongqt
20-04-2009, 04:30 PM
Cảm ơn bạn nha, mình test thử xem thế nào :)
Test xong chưa vậy bạn. Mình muốn xem kết quả. Bạn có thể gửi cho mình cái bạn đang làm ko vậy. Chắc là được hì. Hi, cảm ơn bạn trước nhé. mail: nguyenvantruongqt@yahoo.com
thientaisodo
20-04-2009, 04:43 PM
Mình đang code một cái mạch có lẽ là hơi khủng,26 sensor cả từ trường cả nhiệt độ cả điện áp và cả dòng điện. Rồi đọc các bit ảnh từ camera để biến thành tần số theo qui đinh, giao tiếp DS1307, 24C64, điều khiển rơle và 2 con pic phải xem con nào sống để thay nhau hoạt động, còn phải dám sát một cái máy tính nữa xem nó bị treo hay ko ...
Trong một vài bài mình đã post một số mạch cũng như code mình test bằng mạch thật và đã chạy tốt, bạn có thể tìm ở đó. Như led matrix hay các mạch cơ bản khác rồi đó bạn
truongqt
20-04-2009, 04:56 PM
Mình đang code một cái mạch có lẽ là hơi khủng,26 sensor cả từ trường cả nhiệt độ cả điện áp và cả dòng điện. Rồi đọc các bit ảnh từ camera để biến thành tần số theo qui đinh, giao tiếp DS1307, 24C64, điều khiển rơle và 2 con pic phải xem con nào sống để thay nhau hoạt động, còn phải dám sát một cái máy tính nữa xem nó bị treo hay ko ...
Trong một vài bài mình đã post một số mạch cũng như code mình test bằng mạch thật và đã chạy tốt, bạn có thể tìm ở đó. Như led matrix hay các mạch cơ bản khác rồi đó bạn
Nghe vậy dự án của bạn cũng có qui mô đấy. Chúc bạn làm tốt nha.
truongqt
20-04-2009, 05:02 PM
Nhân đây bạn cho mình hỏi cái này: mình đang mô phỏng giao tiếp rs232 18f4331 với PC. Mô phỏng bằng protues thì thấy: để PIC đọc dữ liệu xong mà thoát ra khỏi vòng kiểm tra
if(kbhit()==1) thì phải có 2 lệnh data_rec=getc(); liên tiếp nhau. Không biết là thực tế có như vậy ko?
thientaisodo
20-04-2009, 05:14 PM
Bạn không nói rõ vòng kiểm tra đó như thế nào, nên hơi khó hình dung, nếu chỉ có if và else thì sau khi kiểm tra đã có ký tự đc nhận chưa thì dù có hay không nó cũng phải thực hiện xong chứ? có thể bạn kiểm tra vòng lặp phía ngoài, vướng vào điều kiện gì ko? Hoặc bạn thử thêm delay xem thế nào...
NÓi chung là bạn không cho code đầy đủ nên hơi khó ... đoán :)
truongqt
21-04-2009, 03:09 PM
Có cần nối trước đầu vào chân ANx của Pic 1 con R hạn chế dòng ko nhỉ? Nếu cần thì chắc khoảng 10K nhỉ.
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.