PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 16-12-2006, 12:47 AM   #1
littlephoc
Đệ 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);
}
}
littlephoc vẫn chưa có mặt trong diễn đàn  
Old 16-12-2006, 01:44 AM   #2
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 littlephoc View Post
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);
}
}
#use delay(clock=20000000)
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
namqn vẫn chưa có mặt trong diễn đàn  
Old 16-12-2006, 02:35 AM   #3
littlephoc
Đệ 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 ạ.
littlephoc vẫn chưa có mặt trong diễn đàn  
Old 16-12-2006, 10:15 PM   #4
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
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
namqn vẫn chưa có mặt trong diễn đàn  
Old 17-12-2006, 01:38 AM   #5
littlephoc
Đệ 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.
littlephoc vẫn chưa có mặt trong diễn đàn  
Old 17-12-2006, 08:42 PM   #6
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 littlephoc View Post
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.
Theo sơ đồ nguyên lý trong tài liệu hướng dẫn của PICDEM 2 Plus thì socket 28 chân chỉ nối với thạch anh 32768 Hz. Ba tùy chọn khác cho nguồn xung là bộ dao động (oscillator), thạch anh (crystal) và mạch RC thì nối với socket 40 chân và socket 18 chân. Cũng theo tài liệu hướng dẫn, bộ dao động có tần số khoảng 4 MHz, mạch RC có tần số khoảng 2 MHz, còn thạch anh thì chưa hàn vào board.

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.
namqn vẫn chưa có mặt trong diễn đàn  
Old 17-12-2006, 09:11 PM   #7
littlephoc
Đệ 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)
;

}
littlephoc vẫn chưa có mặt trong diễn đàn  
Old 18-12-2006, 02:32 AM   #8
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
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
namqn vẫn chưa có mặt trong diễn đàn  
Old 18-12-2006, 08:34 AM   #9
littlephoc
Đệ 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.
littlephoc vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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

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


Múi giờ GMT. Hiện tại là 03:32 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