Bài 4: CCP

Chia sẻ: Bui Duc To | Ngày: | Loại File: PPT | Số trang:21

0
66
lượt xem
9
download

Bài 4: CCP

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'bài 4: ccp', công nghệ thông tin, phần cứng phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Bài 4: CCP

  1. Bài 4: CCP Nội dung  Capture  Compare  PWM  Ứng dụng của bộ CCP
  2. 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
  3. Giới thiệu  Sự ảnh hưởng qua lại giữa 2 CCP  Các thanh ghi
  4. 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
  5. 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
  6. 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
  7. 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 )
  8. 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
  9. Chế độ PWM
  10. 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.
  11. PWM  duty: PWM Duty Cycle =(CCPRxL:CCPxCON) .TOSC. (TMR2 Prescale Value)  Duty Cycle được xác đinh bởi thanh ghi CCPRxL và 2 bit CCPxCON. 2 bit CCPxCON 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 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.
  12. 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
  13. PWM void InitPWM(void) { PR2 = 24; //Set TIMER2 frequency CCPR1L = 0b00001100; //Set TIMER2 duty cycle CCP1CON = 0B00101111; //Set x,y CCP1CON //CCP1CON = 11xx = PWM mode TMR2 = 0; //Clear TMR2 first T2CON = 0b01111000; }
  14. PWM
  15. CCS
  16. 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:
  17. 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
  18. 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);
  19. Bài toán Thực hiện băm xung trên chân RC2/ CCP1
  20. Bài toán • #include • #include • #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 • } • } • }
Đồng bộ tài khoản