PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   CCS bị lỗi ? (http://www.picvietnam.com/forum/showthread.php?t=5760)

minhcuong1122 18-01-2010 02:53 AM

CCS bị lỗi ?
 
Anh chị ơi, e chỉ muốn thử tạo xung 120khz ra ở chân ccp1. Xung tạo ra không đúng với ý của e chút nào. E dùng bản CCS4.104. nhưng thử lại các bản cũ khác cũng vẫn vậy (chu kì xung đều lớn hơn gấp đôi). E hết cách rồi.

#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=7680000)
void main()
{
setup_timer_2(T2_DIV_BY_1,15,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(32);
while (1){}
}

minhcuong1122 19-01-2010 07:37 AM

Đoạn chương trình là e sử dụng wizard để tạo ra, mà giá trị nạp vào các thanh ghi e cũng đã tính đi tính lại nhiều lần lắm. Các anh chị vào giúp e một tay với. PLS.

bien_van_khat 19-01-2010 08:31 AM

Bạn mô phỏng hay chạy mạch thực tế?
Bạn đo tần số xung ra = cái gì?

"Xung tạo ra không đúng với ý của e chút nào" -> ko đúng như thế nào???

Bạn chưa nêu rõ vấn đề của bạn thì làm sao người khác có thể giúp!

minhcuong1122 19-01-2010 10:38 PM

Dạ, cảm ơn a giúp e. Chu kì xung luôn luôn gấp đôi. E mô phỏng proteus và cũng làm mạch thực tế, đo bằng oscilloscope ở trường. E đã đo với 2 máy osc khác nhau, kết quả cũng vẫn chu kì xung là 8.3333*2 = 16.6666 uS. Xung e cần tạo là 120Khz, chu kì phải là 8.3333us mới đúng. E xài thạch a 7.680Mhz a à. E cũng đã từng nghi là thạch anh hư, nên e viết thử chương trình delay 1s, chớp tắt led, kết quả mạch thật chạy rất tốt. Tóm lại, chỉ có tạo xung hok đúng thôi. A giúp e nhé a.

minhcuong1122 19-01-2010 10:42 PM

Thêm nữa, e cũng lấy osc đo thử thạch anh, tần số dao động hoàn toàn đúng: 7.680Mhz... hic.

namqn 19-01-2010 11:23 PM

Lỗi ở dòng gọi hàm set_pwm1_duty(). Bạn hãy đọc thật kỹ phần mô tả chức năng của hàm này trong tài liệu hướng dẫn của CCS C (link ở đây: http://www.ccsinfo.com/downloads/ccs_c_manual.pdf, nếu bạn chưa có tài liệu này).

Thân,

minhcuong1122 20-01-2010 05:36 AM

Cảm ơn anh,
E vừa đọc phần setup_PWM1_duty() (trang 236).

Writes the 10-bit value to the PWM to set the duty. An 8-bit value may be use
if the most significant bits are not required. The 10 bit value is then used to
determine the duty cycle of the PWM signal as follows:
%duty cycle = value / [ 4 * (PR2 +1 ) ]

Theo như trong đó, e cần đặt duty = 50% = 0.5 thì giá trị value phải nạp là:
value = 4* duty* (PR2 + 1) = 4* 0.5* (15+1) = 32
Hình như có chỗ nào đó e chưa hiểu đúng thì phải (10bits- 8bits ???), hic. Nhờ a chỉ e thêm "tí manh mối" nữa đi. Cảm ơn a nhiều lắm.

namqn 20-01-2010 11:28 AM

Trích:

Nguyên văn bởi minhcuong1122 (Post 33196)
Cảm ơn anh,
E vừa đọc phần setup_PWM1_duty() (trang 236).

Writes the 10-bit value to the PWM to set the duty. An 8-bit value may be use if the most significant bits are not required. The 10 bit value is then used to determine the duty cycle of the PWM signal as follows:
%duty cycle = value / [ 4 * (PR2 +1 ) ]

Theo như trong đó, e cần đặt duty = 50% = 0.5 thì giá trị value phải nạp là:
value = 4* duty* (PR2 + 1) = 4* 0.5* (15+1) = 32
Hình như có chỗ nào đó e chưa hiểu đúng thì phải (10bits- 8bits ???), hic. Nhờ a chỉ e thêm "tí manh mối" nữa đi. Cảm ơn a nhiều lắm.

Vì bạn dùng một giá trị hằng số < 255 làm đối số của hàm, nên nó sẽ hiểu đây là giá trị 8-bit. Giá trị này được dùng như 8-bit cao nhất của duty cycle, dẫn đến công thức cần dùng là value = duty * (PR2 + 1) = 0,5 * (15 + 1) = 8! (chứ không phải công thức dành cho duty cycle 10-bit như trên).

Nếu bạn đặt giá trị 32 (tức là lớn hơn PR2 + 1) làm đối số của hàm thì có thể xảy ra hiện tượng mà bạn đã quan sát được.

Xem giải thích chi tiết hơn ở đây:
http://www.picvietnam.com/forum/showthread.php?t=5772

Nên dùng phiên bản mới nhất của tài liệu hướng dẫn.

Thân,

minhcuong1122 20-01-2010 12:59 PM

Cảm ơn a Nam rất nhiều,
Yeah.
Hi, giải quyết được "chứng đau đầu" của e mấy nay. Đọc xong giờ e mới thấy từ "thật kĩ" là có chủ ý. Rất cảm ơn a, chúc a nhiều sức khỏe.


Múi giờ GMT. Hiện tại là 12:10 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam