Professional Documents
Culture Documents
VI XỬ LÝ PIC 16F8XX
CHƯƠNG 8 CCP MODULE
(CCP - CAPTURE/COMPARE/PWM)
YÊU CẦU
• Phân tích được cấu trúc và sử dụng được tập lệnh của
Vi điều khiển PIC16F8xx.
• Điều khiển hoạt động của modul CCP được tích hợp sẵn
trong PIC.
• Compare
• PWM
Tổng quan về CCP modul
• Capture
– Xác định thời gian tồn tại 1 sự kiện bên ngoài thông qua
ngõ vào của vi điều khiển
• Compare
– Thay đổi trạng thái của 1 chân ngõ ra hoặc thực hiện
các thao tác trong chương trình ngắt sau khoảng thời
gian nhất định
• Pulse Width Modulation (PWM)
– Tạo ra sóng xung vuông có chu kỳ nhiệm vụ thay đổi ở
tần số xác định
– Cung cấp những tính năng thuận lợi cho việc kết nối với
dạng mạch điều khiển cầu.
Tổng quan về CCP
BIT FUNCTION
Định cấu hình hoạt động cho module như: ngõ vào
CCP1M<3:0>
Capture, ngõ ra so sánh, hoặc PWM
Thiết lập độ rộng xung điều chế: 2 Bit thấp (8 bit cao
CCP1<X:Y>
được chứa trong thanh ghi CCPR1L)
Định cấu hình ngõ ra của module PWM. Các bit chức
P1M<1:0> năng này chỉ có ở những module ECCP (Enhanced
CCP), cho phép các ngõ ra được cấu hình ở dạng cầu
Các thanh ghi
Thanh ghi điều khiển (CCP1CON)
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPxM3BIT
CCPxM2 CCPxM1 CCPxM0 Lựa chọn chế độ CCP
FUNCTION
0 0 0 0 Capture/ so sánh/ PWM off (resets CCP modlue)
Định cấu hình hoạt động cho module như: ngõ vào
CCP1M<3:0>
0 0 0 1 Không dùng
0 0 Capture,
1 ngõ
0 ra so
Chếsánh,
độ sohoặc
sánh,PWM
ngõ ra đảo
0 0 Thiết
1 lập độ
1 rộng xungdùng
Không điều chế: 2 Bit thấp (8 bit cao
CCP1<X:Y>
0 1 được
0 chứa 0trongChế
thanh ghi CCPR1L)
độ Capture, mỗi cạnh xuống
0 1 0 1 Chế độ Capture, mỗi cạnh lên
0 1
Định
1
cấu hình
0
ngõ ra của module PWM. Các bit chức
Chế độ Capture, mỗi cạnh lên thứ 4
0
P1M<1:0>1 năng
1 này chỉ
1 có ở những
Chế module
độ Capture, ECCP
mỗi (Enhanced
cạnh lên thứ 16
1 0 CCP),
0 cho phép
0 các
Chế ngõ
độ sora được
sánh, cấu
ngõ hình
ra lên ở dạng
mức cao cầu
1 0 0 1 Chế độ so sánh, ngõ ra xuống mức thấp
1 0 1 0 Chế độ so sánh, Ngắt bằng phần mềm tạo ra
1 0 1 1 Chế độ so sánh, xung Trigger đặc biệt tạo ra
1 1 x x Chế độ PWM
TMR1H TMR1L
Edge Detect
and Single Buffered
CCPxCON
Chế độ Capture
Prescaler CCPxIF in PIRx
CCPx
÷1, 4, 16
TMR1H TMR1L
Edge Detect
and Single Buffered
CLRF TMR1H
Rising Edge CCPR1H
CLRF TMR1L Detected!!
;Cấm tất cả các ngắt CCP CCPR1L
BCF PIR1,CCP1IF
BANKSEL PIE1 Captured!
BCF PIE1,CCP1IE PIR1
;Set chân CCP1 là ngõ vào
BSF TRISC,2
0
1
;Set chế độ Capture ở cạnh lên thứ 4 CCP1IF
BANKSEL CCP1CON CCP1CON
MOVLW B’00000110’ 0 0 0 0 0 10 0
1 0
MOVWF CCP1CON
;Bật Timer1 T1CON
BSF T1CON,TMR1ON
;Kiểm tra cờ ngắt CCP1IF lên mức 1 1
0
BTFSS PIR1,CCP1IF TMR1ON
GOTO $-1
Ví dụ 1:
• Compare
• PWM
Tổng quan về CCP
BIT FUNCTION
Định cấu hình hoạt động cho module như: ngõ vào
CCP1M<3:0>
Capture, ngõ ra so sánh, hoặc PWM
Thiết lập độ rộng xung điều chế: 2 Bit thấp (8 bit cao
CCP1<X:Y>
được chứa trong thanh ghi CCPR1L)
Định cấu hình ngõ ra của module PWM. Các bit chức
P1M<1:0> năng này chỉ có ở những module ECCP (Enhanced
CCP), cho phép các ngõ ra được cấu hình ở dạng cầu
Các thanh ghi
Thanh ghi điều khiển (CCP1CON)
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPxM3BIT
CCPxM2 CCPxM1 CCPxM0 Lựa chọn chế độ CCP
FUNCTION
0 0 0 0 Capture/ so sánh/ PWM off (resets CCP modlue)
Định cấu hình hoạt động cho module như: ngõ vào
CCP1M<3:0>
0 0 0 1 Không dùng
0 0 Capture,
1 ngõ
0 ra so
Chếsánh,
độ sohoặc
sánh,PWM
ngõ ra đảo
0 0 Thiết
1 lập độ
1 rộng xungdùng
Không điều chế: 2 Bit thấp (8 bit cao
CCP1<X:Y>
0 1 được
0 chứa 0trongChế
thanh ghi CCPR1L)
độ Capture, mỗi cạnh xuống
0 1 0 1 Chế độ Capture, mỗi cạnh lên
0 1
Định
1
cấu hình
0
ngõ ra của module PWM. Các bit chức
Chế độ Capture, mỗi cạnh lên thứ 4
0
P1M<1:0>1 năng
1 này chỉ
1 có ở những
Chế module
độ Capture, ECCP
mỗi (Enhanced
cạnh lên thứ 16
1 0 CCP),
0 cho phép
0 các
Chế ngõ
độ sora được
sánh, cấu
ngõ hình
ra lên ở dạng
mức cao cầu
1 0 0 1 Chế độ so sánh, ngõ ra xuống mức thấp
1 0 1 0 Chế độ so sánh, Ngắt bằng phần mềm tạo ra
1 0 1 1 Chế độ so sánh, xung Trigger đặc biệt tạo ra
1 1 x x Chế độ PWM
CCPR1L
DUTY CYCLE VALUE CCP1<X:Y>
DOUBLE 10
BUFFER
CCPR1H LATCH
10
Period CCP1 Output Pin
TMR2 = CCPR1H
COMPARATOR Start
10 R
Latch
incrementing
TMR2 Reset to 0’s (1) 0
1
8 S CCP1
pin
COMPARATOR
TMR2 = PR2
Postscaler
COMPARATOR 1:1 1:16
PR2
0 0 0 0 1:1
0 0 0 1 1:2
0 0 1 0 1:3 TMR2
0 0 1 1 1:4 OUTPUT
0 1 0 0
TMR21:5
Prescaler
0 1 0 1 1:6
Fosc/4
1:1,
0 1:4,1 1:16 1 0 1:7
0 1 1 1 1:8
1 0 0 0 1:9
Postscaler
1
1
0
0
0
1
1
0
COMPARATOR
1:10
1 1 1 1 1:16
Postscaler
COMPARATOR 1:1 1:16
PR2
Load Period PIR1
1 1 1 1 1 0 0 0
Register 1
TMR2IF
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
PR2 =?
PresT2=?
PostT2=?
Độ rộng xung điều chế:
tx(PWM duty cycle)=(CCPRxL:CCPxCON<5:4>)*TOSC *(PresT2*PostT2)
CCPRxL=?
CCPxCON<5,4>=? CCPxCON = 00??1100;
;Tắt CCP1 bằng cách set các bit trong TRIS
BANKSEL TRISC
BSF TRISC, 2 ;Cấu hình các chân là ngõ vào
;Xóa Timer2
BANKSEL TMR2
CLRF TMR2
;Thiết lập module CCP ở chế độ PWM, các bit thấp của độ rộng
xung là bits CCPxCON <5:4> b’yy’
MOVLW B’00101100’
MOVWF CCP1CON
;Cho PWM hoạt động bằng cách bật Timer2 ,Cấu hình
Prescaler và Postscaler là ….)
MOVLW B’00000100’
MOVWF T2CON
Khởi tạo PWM – Fosc-4MHz
TMR2
;Tắt CCP1 bằng cách set các bit trong TRIS 0 0 0 0 0 0 0 0
BANKSEL TRISC
BSF TRISC, 2 ;Cấu hình các chân là ngõ vào PR2
;Xóa Timer2 0 1 1 1 1 1 1 1
BANKSEL TMR2
CLRF TMR2 CCPR1L
;Thiết lập module CCP ở chế độ PWM duty cycle PWM Mode
;các bit thấp của độ rộng xung là b’10’ LSBs CCP1M <3:0>
MOVLW B’00101100’ CCP1<X:Y>
MOVWF CCP1CON T2CON
Slide 74
BT
• 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
Tính toán:
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
+T2CON = 0b00000100;
+ Tx= (50* 2.5e-5) / 100 = 1.25e-5 sec
+ CCPR1= (1.25e-5) / (2.5e-7 * 1) = 50 00001100 10
BT
•
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 = 1111=PWM mode
TMR2 = 0; //Clear TMR2 first
T2CON = 0b00000100;
}
• Vẽ sơ đồ mạch, vẽ lưu đồ giải thuật và viết chương trình
dùng module PWM điều khiển độ sáng của led được nối
với chân RC1 theo sự điều khiển của nút nhấn SW1
(nối với chân RB1). Nếu nhấn nhả nút SW1 thì xung
PWM liên tục được tạo ra tại RC1 với tần số f=4Khz và
chu kỳ nhiệm vụ là D1=75%.
Tính toán
• T(PWM)=(PR2+1)x4x(1/fosc)xPre
=1/(4Khz). fosc=8Mhz,
chon PresT2=1:4, postT2=1:1; PR2=124
• t1on(PWM)=
=(CCPR2L:CCP2CON<5:4>)x(1/fosc)xPre
=0.75*T -->CCPR2L:CCP2CON<5:4>=375
CCPR2L=0b01011101; CCP2CON<5:4>=11
CCP2CON= 00111111;
Lưu đồ
Khai báo thư viện
Khai báo cấu hình
TRISB1=1;
TRISC1=0;
RC1=0;
RBPU=0;
SW1
}
nhả ?
void main(void)
{ init();
while(1)
{ if(!SW1)
{ __delay_ms(50);
while(!SW1);
TRISC1=1; TMR2=0; PR2=124;
CCPR2L=0b01011101;//chu ky nhiem vu 75%
//CCPR2L:CCP2CON<5:4> =375
CCP2CON=0b00111100;
TRISC1=0; //chon RC1: output
T2CON=0b00000001; //pre=1:4
TMR2ON=1; //Timer 2 chay
}
} }
• Vẽ sơ đồ mạch, Vẽ lưu đồ giải thuật và viết chương
trình dùng module PWM điều khiển độ sáng của 2
led được nối với chân RC1 và RC2 theo sự điều
khiển của 2 nút nhấn BRIGHT (nối với RB1) và
DARK (nối với RB0).
• Nếu nhấn nhả nút BRIGHT thì xung PWM liên
tục được tạo ra tại RC2 với tần số f=4Khz và chu kỳ
nhiệm vụ là D1=75%.
• Nếu nhấn nhả nút DARK thì xung PWM liên tục
được tạo ra tại RC1 với tần số f=4Khz và chu kỳ
nhiệm vụ là D2=40%.
• T(PWM)=(PR2+1)x4x(1/fosc)xPre
=1/(4Khz). fosc=8hz,
chon Pre=4, PR2=124
• t1on(PWM)=
=(CCPR2L:CCP2CON<5:4>)x(1/fosc)xPre
=0.75*T -->CCPR2L:CCP2CON<5:4>=375
CCPR2L=0b01011101; CCP2CON<5:4>=11
• t2on(PWM)=
=(CCPR1L:CCP1CON<5:4>)x(1/fosc)xPre
=0.4*T -->CCPR1L:CCP1CON<5:4>=200
CCPR1L=0b00110010; CCP1CON<5:4>=00
Lưu đồ
Chương trình
#define SW_DARK RB0
#define SW_BRIGHT RB1
void init()
{
TRISB0=1;
TRISB1=1;
TRISC1=0;
TRISC2=0;
RC1=0;
RC2=0;
RBPU=0;
}
void main(void)
{ init();
while(1) {
if(!SW_DARK)
{
__delay_ms(100);
while(! SW_DARK);
TRISC1=1; TMR2=0; PR2=124;
CCPR2L=0b01011101;//chu ky nhiem vu 75%
//CCPR2L:CCP2CON<5:4> =375
CCP2CON=0b00111100;
TRISC1=0; //chon RC1: output
T2CON=0b00000001; //pre=1:4
TMR2ON=1; //Timer 2 chay
}
if(!SW_BRIGHT)
{ __delay_ms(100);
while(!SW_BRIGHT);
TRISC2=1; TMR2=0; PR2=124;
CCPR1L=0b00110010;// chu ky nhiem vu 85%
//CCPR1L:CCP1CON<5:4>=282
CCP1CON=0b00001100;
TRISC2=0; //chon RC2: output
T2CON=0b00000001; //pre=1:4
TMR2ON=1; //Timer 2 chay
}
}
}
Cho sơ đồ như hình. VCC=5VDC.
Vẽ sơ đồ khối, sơ đồ nguyên lý Kiểm tra 20’
tóm tắt, xây dựng lưu đồ giải
thuật, tính toán xác định các
thông số cần thiết và viết
chương trình điều khiển độ sáng
của hai LED đơn được nối với
chân RC1 và RC2 (LED2 và
LED3) theo sự điều khiển của
nút nhấn S1(RA4) và S3(RE0)
bằng phương pháp PWM (với
fPWM = 10KHz):
Nếu nhấn-nhả nút S1(RA4) thì
xung PWM liên tục được tạo ra tại
chân RC1 với chu kỳ công tác
D1 = 80% (RC2 luôn có mức thấp);
nếu nhấn-nhả nút S3(RE0) thì
xung PWM liên tục được tạo ra tại
chân RC2 với với chu kỳ công tác
D2 = 20% (RC1 luôn có mức thấp).
Ban đầu xung PWM không được
tạo ra và các LED tắt hết.
FOSC =8MHz;
• Lưu ý: Phải sử dụng mô-đun
• Sơ đồ khối hệ thống • Lưu đồ
Giải
+ Sơ đồ khối hệ thống