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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 13-07-2008, 04:54 PM   #11
ngtdung.nguyen
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Nơi Cư Ngụ: Ho Chi Minh city, VietNam
Bài gửi: 1
:
Smile

Em dùng Wizard của CCS 4.065, tạo chương trình xuất xung PWM cho PIC6F877A như sau:
(mục đích là tần số điều xung= 10kHz, 2 xung độ rộng 30% và 80%)

#include "F:\TRANNING-PIC\PWM.H"

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,124,1); //tần số PWM = 10kHz
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_tris_c(0x00);
set_pwm1_duty(150); // độ rộng xung 30%
set_pwm2_duty(400); // độ rộng xung 80%
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

while (1);
}

Mô phỏng bằng Proteus 7.2 cho thấy xung ra bị sai, cả về tần số và độ rộng xung
(xin lỗi các bác em chưa biết cách post hình lên)

Khi cài lại duty cycle, thì mô phỏng cho thấy xung ra đúng:

set_pwm1_duty(37);
set_pwm2_duty(100);


2 trường hợp này sai lệch nhau ở hệ số nhân 4 là hệ số chia tần đưa vào timer2.
Em đọc Data sheet thấy trường hợp 1 do CCS tự tính giá trị value là hợp với miêu tả về PWM. Tuy nhiên mô phỏng thấy sai.

Em có mạch chạy PIC tuy nhiên không có Oscilocope nên không biết thực tế ra sao.
Em không biết đây là do CCS sai hay do Proteus mô phỏng sai.

Mong các bác giải đáp giúp em với. Em xin cám ơn.
ngtdung.nguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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


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