NEC IR Protokoll megvalósítása PIC-el

Sok projektben használok infra vevőt, így ideje volt elkészíteni egy saját adót is. A protokoll leírása megtalálható ebben a cikkben. A adatfolyam a PIC24EP családban található Output Compare modul segítségével egyszerűen előálítható, ezt szeretném most röviden bemutatni.

Output Compare modul

PWM jelek és impulzusok előállítására a legegyszerűbb mód a PIC OC modulját felhasználni. 35Mhz-es órajel esetén a 38kHz-es vivő előállításához a konfiguráció:


#define RP_OC1 0b010000
#define FCY 35000000LL 
#define OC_DIVISOR FCY/38000
#define DUTY_CYCLE OC_DIVISOR/2

void Init_PWM()
{
   RPOR2bits.RP39R = RP_OC1; //Kimenet az RP39/RB7 lábon
   OC1CON1bits.OCTSEL = 0b111; //FCY az órajel forrása
   OC1CON2bits.SYNCSEL = 0b11111; //Nincs szinkornizálás és trigger
   OC1RS = OC_DIVISOR; //38kHz-hez az osztó
   OC1R = 0; //0% kitöltés, ilyenkor nincs kel a kimeneten
   OC1CON1bits.OCM = 0b110; //OC mód beállítása: PWM mód
}

void PWMOn()
{
   OC1R = DUTY_CYCLE;
}

void PWMOff()
{
   OC1R = 0;
}

Egy gombhoz tartozó jelsorozat küldéséhez a függvény:

void SendIRCode(long Code)
{
    PWMOn();
    __delay_us(9000);
    PWMOff();
    __delay_us(4500);

    int i;
    for(i = 0; i< 32; i++)
    {
       if(Code & GetMask(i))
       {
          PWMOn();
          __delay_us(562);
          PWMOff();
          __delay_us(1685); 
       }
       else
       {
          PWMOn();
          __delay_us(562);
          PWMOff();
          __delay_us(562); 
       }
    }
}

 

Facebook Comments