16-12-2006, 12:47 AM | #1 |
Đệ tử 3 túi
Tham gia ngày: Dec 2006
Bài gửi: 60
: |
PIC18F2620 + rs232
Mình thường thấy trong các sample CCS code, thường sử dụng giá trị 20Mhz cho delay:
#use delay(clock=20000000) Mình hiểu là dùng chỉ thị này khi dùng delay_ms() function nhưng chưa hiểu hết ý nghĩa thực sự của nó Mình dùng PIC8F2620, đọc datasheet thì thấy tần số hoạt động của nó là 8Mhz. Vậy mình sẽ sửa lại #use delay(clock=8000000) thì có đúng hay không. Hiện mình đang lập trình để send key từ hyperterminal của máy tính đến cổng RS232 và muốn nó print lại ký tự đó lên màn hình terminal. Nhưng vẫn không được. Và không biết là làm sao để xác định được mình đang sai ở đâu. (dùng picdem 2 plus , board màu đỏ, CCS version 4.017) #include <18F2620.h> #include <stdio.h> #fuses HS,NOWDT,PUT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(BAUD=9600,parity=N,XMIT=PIN_B1, RCV=PIN_B4,bits=8,stream=pc) #define KEYHIT_DELAY 500 // in milliseconds void main() { char c; while(1){ c= getch(); putc(c); delay_ms(100); } } |
16-12-2006, 01:44 AM | #2 | |
Trưởng lão PIC bang
|
Trích:
dùng để báo cho trình biên dịch biết tần số thực của xung clock ở mạch ứng dụng thực. Từ đó trình biên dịch sẽ tính ra được số chu kỳ máy cần chờ tương ứng với một giá trị delay nào đó trong chương trình. Bạn phải xem trên board PICDEM 2 Plus đó có tần số của bộ dao động hay thạch anh nối vào PIC18F2620 là bao nhiêu, dùng giá trị đó (đổi thành Hz) và thay vào chỗ 20000000 trong khai báo trên. 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 |
|
16-12-2006, 02:35 AM | #3 |
Đệ tử 3 túi
Tham gia ngày: Dec 2006
Bài gửi: 60
: |
Đoạn chương trình như sau
#include <18F2620.h> #device icd=true #use delay(clock=20000000) #fuses HS,NOWDT #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8) main() { char c; int i; while(true) { c=getch(); for(i=0;i<3;i++){ putc(c); delay_ms(100); } } } dùng mttty để connect thì được, mỗi lần nhấn phím nó đều hiển thị thêm 3 ký tự. Tuy nhiên ký tự in ra lại giống chữ đ hơi cong, chứ không hiển thị ra ký tự mà mình đã nhấn. Nếu dùng hyper terminal của windows thì ko thấy gì cả và cũng không nhấn phím được. mặc dù đã chọn 9600, 8 bit, no parity,stopbit=1 Và 1 điều nữa là dùng hyper terminal thì rất dễ bị treo máy khi connect. (dùng picdem 2 plus , board màu đỏ, CCS version 4.016) Xin cho biết mình đã sai ở chỗ nào ạ. |
16-12-2006, 10:15 PM | #4 |
Trưởng lão PIC bang
|
Có một vài điểm bạn cần làm rõ trước khi có thể giúp bạn xác định nguyên nhân gây lỗi:
1. Bạn có sử dụng ICD hay không? Nếu có thì là ICD của Microchip hay của CCS? 2. Tần số của bộ dao động hay thạch anh trên board PICDEM 2 Plus (còn có trường hợp dao động bằng RC nữa)? 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 |
17-12-2006, 01:38 AM | #5 |
Đệ tử 3 túi
Tham gia ngày: Dec 2006
Bài gửi: 60
: |
Mình dùng ICD 2 của microchip, còn tần số dao động của picdem 2 plus thì không biết tra thế nào cả. Nếu khai báo trong source code để 20Mhz thì còn nhận được ký tự(dù sai), còn để 40Mhz thì hoàn toàn ko nhận được. picdem của mình màu đỏ hình như khác với datasheet của loại màu xanh và search loại màu đỏ hình như nó cũng để là 40Mhz.
|
17-12-2006, 08:42 PM | #6 | |
Trưởng lão PIC bang
|
Trích:
Một cách rất đơn giản để xác định tần số xung clock là bạn lấy ví dụ nháy LED, chọn một tần số xung clock nào đó (1 MHz chẳng hạn) và đặt thời gian trễ giữa các thao tác bật/tắt LED là 1 giây trong chương trình nguồn. Sau đó dịch, nạp, và chạy thử, đo thời gian trễ thực sự giữa các thao tác bật/tắt LED, bạn sẽ tính được tần số xung clock thực. Lần trước tôi nhìn không kỹ, socket 28 chân vẫn được cấp chung các nguồn clock như 2 socket kia. Xin đính chính lại! 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 thay đổi nội dung bởi: namqn, 18-12-2006 lúc 02:20 AM. |
|
17-12-2006, 09:11 PM | #7 |
Đệ tử 3 túi
Tham gia ngày: Dec 2006
Bài gửi: 60
: |
board của mình đã được hàn con thạch anh 4Mhz vào rồi. thấy đề là OSC-2003 4.000MHZ BURNON (vị trí số 10 như trong user guide)
Đây là đoạn code mình viết và bấm theo đồng hồ thể thao thì mỗi cái nhấp nháy nó chính xác 1 giây: #include <18F2620.h> #fuses HS,NOWDT,PUT,NOPROTECT,NOLVP #use delay(clock=20000000) #define preload 57723 static int counter =0; #int_timer0 void intval() { static unsigned char i=0xBB; static int flag = 0; rotate_right(&i,1); output_b(i); } void main() { int status; char value; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); set_timer0(preload); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); output_b(0xff); status=1; while(1) ; } |
18-12-2006, 02:32 AM | #8 |
Trưởng lão PIC bang
|
Vị trí số 10 là oscillator. Bạn đã xác định được tần số của bộ dao động rồi thì dùng giá trị 4 MHz đó khi setup các thông số clock cho delay, rs232 chẳng hạn.
Khi dùng oscillator thì thiết lập #fuses là EC hay EC_IO cho phần clock, chứ không dùng HS hay XT. Ngoài ra, tần số clock được bạn thiết lập khi tạo project (chẳng hạn như dùng Project Wizard). 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 |
18-12-2006, 08:34 AM | #9 |
Đệ tử 3 túi
Tham gia ngày: Dec 2006
Bài gửi: 60
: |
Tuyệt vời. problem solved.
Tất cả là do set tần số không đúng. Cảm ơn bác namqn nhiều. |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Giao tiếp RS232 trên PC | ngohaibac | Giao tiếp cổng COM và LPT | 189 | 08-05-2024 08:10 PM |
cần mua bộ thu GPS có giao tiếp RS232 | kienvq | Tìm mua sản phẩm | 15 | 17-03-2011 11:25 PM |
Help! Dùng C để giao tiếp RS232 | dandiennang | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 6 | 15-03-2009 06:41 PM |
RS232 + Handshaking | picpicpic | Giao tiếp USB, CAN, I2C, SPI, USART... | 2 | 31-10-2006 12:35 PM |
CCS với nhận dữ liệu dùng trong RS232 ? | daihang86 | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 1 | 17-09-2006 10:19 PM |