CCP (Capture/Compare/PWM) Module
 
     
  โมดูล CCP(Capture/Compare/PWM)  
  PIC16F6xx มีโมดูล CCP อยู่1 ตัวคือ CCP1 มีรีจิสตอร์ขนาด 16 บิทคือ CCPR1 ประกอบด้วย CCPR1H และ CCPR1L  
  CPP1 มีหน้าที่ในการเก็บข้อมูลอยู่ 3 ลักษณะคือ  
  • เก็บข้อมูลในการตรวจจับสัญญาณ (Capture)
• เก็บข้อมูลเปรียบเทียบสัญญาณ (Compare)
• เก็บค่า duty cycle ในการมอดูเลชั่นทางความกว้างของพัลส์ (PWM Pulse Width Modulator)
 
     
  -แต่ละหน้าที่ไม่สามารถทำงานพร้อมกันได้ ต้องเลือกการใช้งานในลักษณะใดลักษณะหนึ่งเท่านั้น  
  โดยการทำงานจะต้องทำงานร่วมกับ timer ภายใน ดั้งนี้  
 
  • Capture/Compare ใช้งานร่วมกับ timer1
  • PWM ใช้งานร่วมกับ timer2
 
     
  1). การทำงานในโหมดตรวจจับสัญญาณ (Capture) ผ่านทางขา RB3/CCP1  
 
 
 
CAPTURE MODE OPERATION BLOCK DIAGRAM
 
     
 
  • สัญญาณที่ต้องการตรวจจับจะเข้ามาทาง RB3/CCP1 ผ่าน Prescaler ซึ่งสามาถกำหนดให้ การตรวจสอบเริ่มต้น เมื่อพบสัญญาณลูกที่เท่าไร (1,4,16) และ edge detect จะตรวจสอบ ขอบขาขึ้น หรือขอบขาลงของสัญญาณ เมื่อพบสัญญาณตามเงื่อนไขที่กำหนด โมดูลก็จะส่งสัญญาณ Capture Enable เพื่อให้ Timer1 ส่งข้อมูลไปยัง CCPR1
 
  NOTE : Timer1 จะต้องทำงานใน Timer mode หรือ synchronized Counter mode ในการตรวจจับสัญญาณเท่านั้น ไม่สามารถทำงาน เมื่อเป็น Asynchronous Counter mode  
     
  การทำงานในโหมดเปรียบเทียบ(Compare)  
  การทำงานในโหมด การมอดูเลชั่นทางความกว้างของพัลส์ (PWM Pulse Width Modulator)  
     
  การหาค่าเวลาน้อยที่สุด (ความถี่สูงที่สุด) ที่โมดูล CCP1 สามารถตรวจจับได้ เมื่อรวมค่าเวลาหน่วงภายในแล้ว
   
     
  Tcpp = (3Tcy + 40*10^-9)/N  
     
  Tccp เป็นคาบเวลาของ CPP1 ,Tcy เป็นคาบเวลาของระบบเท่ากับ 4/fosc, N คือค่าของ prescaler มีค่าเท่ากับ 1,4,16
     
  Tcpp = (3*(4/fosc) +40 *10^-9)/N  
     
  เช่นเมื่อใช้ XTAL = 4 MHz ,N=16  
  Tcpp = 190*10^-9 =190 ns  
  ความถี่สูงที่สุด f=1/T = 5.26 MHz  
     
  ฟังชัน setup_ccp1(); เพื่อใช้กำหนดเงื่อนไขในการตรวจจับสัญญาณ  
  ตัวอย่างการใช้งาน Capture ร่วมกับ Timer1เป็นเครื่องนับความถี่  
     
   
  2). การทำงานในโหมดเปรียบเทียบข้อมูล (Compare)  
 
 
 
COMPARE MODE OPERATION BLOCK DIAGRAM
 
  -.ในโหมดนี้โมดูล CCP1จะทำการเปรียยเทียบข้อมูล CCPR1กับ Timer1 หากเท่ากัน ก็จะเกิด Interrupt หรือให้เกิดเอาต์พุตที่ขา RB3/CCP1 โดยสามารถทำให้  
 
  เอาต์พุตเป็น 1 เมื่อมีค่าเท่ากัน  
  เอาต์พุตเป็น 0 เมื่อมีค่าเท่ากัน  
  ทำให้เกิด Interrupt เมื่อมีค่าเท่ากัน  
  ทำให้ Timer reset เมื่อมีค่าเท่ากัน  
 
     
     
  ฟังชัน setup_ccp1(); เพื่อใช้กำหนดเงื่อนไขในการเปรียบเทียบ  
  ตัวอย่างการทำงานในโหมดเปรียบเทียบข้อมูล (Compare)  
   
  3). การทำงานร่วมกับ Timer2 ในโหมดมอดูเลชั่นทางความกว้างของพัลส์ (PWM Pulse Width Modulator)  
     
 
  • โมดูล CCP(Capture/Compare/PWM) สามารถใช้กำเนิดสํญญาณ และมอดูเลชั่นทางความกว้างของพัลส์ความละเอียดขนาด 10 บิท PWM (Pulse Width Modulator) ซึ่งจะทำงานร่วมกันกับ TIMER2
  • CCP1 เป็นโมดูลที่ เมื่อกำหนดค่าเริ่มต้นในการทำงานให้แล้ว โมดูลนี้จะทำงานต่อไปได้เองโดยอิสระ ทำให้ MCU ไม่ต้องเสียเวลา วนลูปในการ จัดการ กับเอาต์พุต ในขณะที่โมดูล นี้ทำงาน   MCU สามารถที่จะควบคุมการเปิด-ปิดสัญญาณ ผ่านทาง รีจิสเตอร์ควบคุมได้
    - เมื่อให้ PWM กำเนิดสัญญาณที่มี duty cycle เท่ากับ 50 % ทำให้สามารถใช้งานในการกำเนิดสัญญาณ อย่างเช่นการสร้างความถี่ 40KHz เพื่อเป็นความถี่พาหะ (CARRIER FREQUENCY ) ของ Infrared Remote control (IR)

 
     
 
 
 
SIMPLIFIED PWM BLOCK DIAGRAM
 
  ตัวอย่างการใช้งาน PWM ผลิตความถี่ 1 KHz duty cycle 50%