Thaimicrotron.com : Home |
|
|
|
|
Infrared Remote control (IR)
|
|
|
|
|
|
|
|
|
|
- การกำเนิดสัญญาณความถี่ 40KHz เพื่อเป็นความถี่พาหะ
ของ Infrared Remote control (IR)
|
|
|
-โมดูล CCP จะกำเนิดสัญญาณออกทางขา CCP1 (RB3-PIN9) และจะเปิด-ปิดสัญญาณโดยใช้
TRISB โดยกำหนดให้ที่บิท RB3 =0 เป็นเอาต์พุต สัญญาณก็จะถูกเปิด และเมื่อ RB3
=1 เป็นอินพุตสํญญาณก็จะถูกปิด |
|
|
|
|
|
การกำเนิดสัญญาณความถี่ 40KHz |
|
|
|
|
|
|
|
|
|
|
|
การคำนวน เมื่อใช้ XTAL= 4MHz และกำเนิดสัญญาณความถี่ 40KHz ดิวตี้ไซเคิล
= 50% ใช้ Prescaler =1 |
|
|
- คาบเวลาของสัญญาณ T = 1/40e3 = 2.5e-5 sec
- คาบเวลาของ XTAL Tosc = 1/4e6 = 2.5e-7 sec
- PR= (2.5e-5 / (4*2.5e-7 * 1)) - 1 = 24
- Dpwm = (50* 2.5e-5) / 100 = 1.25e-5 sec
- CCP1CON CCP1CON<3:0> = (1.25e-5) / (2.5e-7 * 1) = 50 แปลงเป็นไบนารี
10 บิท = 00001100 10
|
|
|
|
|
|
โปรแกรม TVRemote.c |
|
|
#include <16F628.h>
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT,MCLR,NOWDT,NOPROTECT,NOLVP
//Describtion: Pulse Generate 40KHz of SONY Remote Control
//*** PIC16F628 ***
#byte PORTB = 0x06
#byte TRISB = 0x86
#byte PR2 = 0x92
#byte TMR2 = 0x11
#byte T2CON = 0x12
#byte CCPR1L = 0x15
#byte CCP1CON = 0x17
#define IRX 600
#define IRY 1200
#define PINCCP1ON() set_tris_b(0B00000000)
#define PINCCP1OFF() set_tris_b(0B00001000)
#define TIMER2START() T2CON=0B01111100; //Bit3=1
#define TIMER2STOP() T2CON=0B01111000; //Bit3=0
char IRCode[]={"101010010000"}; //Power NO/OFF
//40KHz OSC
void InitPWM(void)
{
PR2 = 24; //Set TIMER2 frequency
CCPR1L = 0B00001100; //Set TIMER2 duty cycle
CCP1CON = 0B00101111; //Set x,y CCP1CON<5:4> any CCP1CON<3:0> = 11xx = PWM mode
TMR2 = 0; //Clear TMR2 first
T2CON = 0B01111000; //Set prescaler Bit3=0 stop CCP1
}
void Tx1(void)
{
delay_us(IRX);
PINCCP1ON();
delay_us(IRY);
PINCCP1OFF();
}
void Tx0(void)
{
delay_us(IRX);
PINCCP1ON();
delay_us(IRX);
PINCCP1OFF();
}
void PowerOn(char *Code)
{
int i;
TIMER2START();
PINCCP1ON();
delay_us(2400);
PINCCP1OFF();
for(i=0;i<12;i++)
{
if(Code[i]=='0')
Tx0();
if(Code[i]=='1')
Tx1();
}
delay_ms(26); //Start frame
TIMER2STOP();
}
void main(void)
{
set_tris_b(0B00000000); //RB is Output
InitPWM();
PowerOn(IRCode); //PowerOn
while(1); //Loop
}
|
|
|
|
|
|
|
|
|
|
ผลการทำงาน |
|
|
- เมื่อจ่ายไฟ MCU จะส่งสัญญาณ Power On แล้วหยุดทำงาน |
|
|
|
|
|
|
|
|
|
|
|
โปรแกรมคำนวนการใช้งาน CCP1 โมดูล |
|
|
|
|