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ế
Trang 3Giới thiệu
Sự ảnh hưởng qua lại giữa 2 CCP
Các thanh ghi
Trang 4Giớ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)
Trang 5Chế độ 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
Trang 6 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
Trang 7Chế độ 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>)
Trang 8 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
Trang 9Chế độ PWM
Trang 10Pin của khối CCP được set.
Giá trị thanh ghi CCPRxL được đưa vào thanh ghi CCPRxH.
Trang 11 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.
Trang 12Xá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
Trang 13void 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;
}
Trang 14PWM
Trang 15CCS
Trang 17xá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
-Các lệnh về Timer1 và Timer2 hỗ trợ cho khối CCP
Trang 19Bài toán
Thực hiện băm xung trên chân RC2/ CCP1
Trang 21Bà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