Tải bản đầy đủ (.ppt) (21 trang)

Tài liệu Bài 4: CCP doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (462.97 KB, 21 trang )


Bài 4: CCP
Nội dung

Capture

Compare

PWM

Ứng dụng của bộ CCP

Giới thiệu

PIC16F877A có 2 modul CCP(Capture/Compare/PWM )
giống hệt nhau về hoạt động

Các module này có nguồn là các Timer

Giới thiệu

Sự ảnh hưởng qua lại giữa 2 CCP


Các thanh ghi


Giới thiệu

Thanh ghi CCP1CON /CCP2CON (ADDRESS 17h/1Dh):
Bit 5,4 CCPxX:CCPxY: PWM least Significant bits (chỉ


tác dụng ở chế độ PWM)
2 bit MSB chứa giá trị tính độ rộng xung (duty
cycle) của khối PWM ( 8 bit còn lại được chứa trong
thanh ghi CCPRxL).
Bit 3-0 CCPxM3:CCPxM0 CCPx Mode Select bit
Các bit dùng để xác lập các chế độ hoạt động
của khối CCPx

Chế độ Capture

Khi có một “hiện tượng” xảy ra tại pin RC2/CCP1( hoặc
RC1/T1OSI/CCP2), giá trị của thanh ghi TMR1 sẽ được đưa vào
thanh ghi CCPR1( CCPR2).

“Hiện tượng”:

Mỗi khi có cạnh xuống tại các pin CCP

Mỗi khi có cạnh lên

Mỗi cạnh lên thứ 4

Mỗi cạnh lên thứ 16

Capture

Chân CCPx phải cấu hình là đầu vào

Sau khi giá trị của thanh ghi TMR1 được đưa vào
thanh ghi CCPRx, cờ ngắt CCPxIF được set


Cờ ngắt CCPxIF nên được xóa bằng phần mềm mỗi
khi được set

CCP còn được tích hợp bộ chia tần số prescaler được
điều khiển bởi các bit CCPxM3:CCPxM0

Chế độ Compare

Khi hai thanh ghi chứa giá trị bằng nhau, các pin của
CCP được thay đổi trạng thái (được đưa lên mức cao,
đưa xuống mức thấp hoặc giữ nguyên trạng thái)

Cờ ngắt CCPIF cũng sẽ được set

Sự thay đổi trạng thái của pin có thể được điều khiển
bởi các bit CCPxM3:CCPxM0 (CCPxCON <3:0>)

Compare

Cấu hình chân CCPx là đầu ra

Sự kiện đặc biệt làm reset giá trị cặp thanh ghi TMR1

Chế độ PWM

PWM

chu kỳ(period):
PWM Period = [(PR2) + 1] .4 . TOSC .( TMR2 Prescale Value-

1,4,16)

Khi giá trị thanh ghi PR2 bằng với giá trị thanh ghi TMR2 thì :
Thanh ghi TMR2 tự động được xóa.
Pin của khối CCP được set.
Giá trị thanh ghi CCPRxL được đưa vào thanh ghi CCPRxH.

PWM

duty:
PWM Duty Cycle =(CCPRxL:CCPxCON<5:4>) .TOSC.
(TMR2 Prescale Value)

Duty Cycle được xác đinh bởi thanh ghi CCPRxL và 2
bit CCPxCON<5:4>. 2 bit CCPxCON<5:4> sẽ chứa 2 bit
LSB

Khi giá trị trong thanh ghi CCPRxH bằng với giá trị trong
thanh ghi TMR2 và hai bit CCPxCON<5:4> bằng với giá
trị 2 bit của bộ chia tần số prescaler, pin của khối CCP
lại được đưa về mức thấp.

PWM
Xác định các thông số để tạo ra 1 sóng vuông có
tần số 40Khz, duty=50%, thạch anh sử dụng
4Mhz, prescale=1
+ Chu kỳ T = 1/40e3 = 2.5e-5 sec
+ XTAL Tosc = 1/4e6 = 2.5e-7 sec
+ PR2= (2.5e-5 / (4*2.5e-7 * 1)) - 1 = 24
+ Dpwm = (50* 2.5e-5) / 100 = 1.25e-5 sec

+ CCPR1= (1.25e-5) / (2.5e-7 * 1) = 50
00001100 10

PWM
void InitPWM(void)
{
PR2 = 24; //Set TIMER2 frequency
CCPR1L = 0b00001100; //Set TIMER2 duty cycle
CCP1CON = 0B00101111; //Set x,y CCP1CON<5:4>
//CCP1CON<3:0> = 11xx = PWM mode
TMR2 = 0; //Clear TMR2 first
T2CON = 0b01111000;
}

PWM

CCS

CCS
-setup_ccp1(mode) hay setup_ccp2(mode)
Mode có thể là:
Cấm CCP: CCP_OFF
Chế độ PWM: CCP_PWM
Chế độ Capture:
Chế độ Compare:

CCS
-set_pwm1_duty(value) hay set_pwm2_duty(value)
xác định khoảng thời gian tín hiệu PWM ở mức cao trong
mỗi chu kỳ là : value*(1/clock)*t2div

-Ngắt INT_CCP1, INT_CCP2
-Các lệnh về Timer1 và Timer2 hỗ trợ cho khối CCP

Ví dụ
// For a 20 mhz clock, 1.2 khz frequency,
// t2DIV set to 16
// the following sets the duty to 50% (or 416 us).

long duty;

duty = 512; // .000416/(16*(1/20000000))
set_pwm1_duty(duty);

Bài toán
Thực hiện băm xung trên chân RC2/ CCP1

Bài toán

#include <16f877a.h>

#include <def_877a.h>

#device *=16 ADC=8

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP,
NOCPD, NOWRT

#use delay(clock=20000000)

int16 j;


void main()

{

trisc=0;//output

portc=0xff;//dau tien led sang

setup_ccp1(CCP_PWM); // che do PWM

setup_timer_2(T2_DIV_BY_16, 255, 1);

//chu ky PWM se la:

//(1/20.000.000)*4*16*(255+1)=819.2(us)

//t2div=4

while(1)

{

for(j=1023;j>=0;j )

{

delay_ms(10);

SET_PWM1_DUTY(j );//dat duty cycle


}

}

}

Bài toán
Sử dụng Compare, viết chương trình cứ sau 1s giá trị
của portd lại được tăng lên 1.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×