Пример #1
0
/********************************************************************
 * Function:        void ISR_CCP1(void)
 *******************************************************************/
void ISR_CCP3(void)					// Interruption sur front montant sur RA2
{
    n_Mont = n_TMR1;
    if (!PulseOK)
    {
        n_TMR1 = 0;					// On remet le compteur à zéro
        rise = n_Mont*65536 + ReadCapture3();	// Lit la valeur de CCP1
        fall = n_Des*65536 + ReadCapture4();	// Lit la valeur de ECCP1
        lowtime = rise - fall;			// Largeur du front bas
        pulse_width = fall - lastrise;		// Largeur du front haut => Presque inutile
        lastrise = ReadCapture3();			// Sauvegarde
        PulseOK = TRUE;				// Indique qu'on a reçu un nouveu RF bit
//            printf("lowtime:  %u us \r\n", lowtime);
   }
}
Пример #2
0
void __ISR(_INPUT_CAPTURE_4_VECTOR) INT_IC4_Handler(void)
{
    mIC4ClearIntFlag();

    //Read captured timer values
    if(mIC4CaptureReady())
    {
        IC4_CT_Rise = mIC4ReadCapture();
        IC4_CT_Fall = mIC4ReadCapture();
    }

    //Determine period
    if(IC4_CT_Rise > IC4_CT_Fall)
        period4 = (IC4_CT_Fall + PER_REG) - IC4_CT_Rise;
    else
        period4 = IC4_CT_Fall - IC4_CT_Rise;

    //Correct period if out of range
    if(period4 > ROLL_H - 3)
        period4 = ROLL_H;
    else if(period4 < ROLL_L + 3)
        period4 = ROLL_L;

    //Turn period into a percentage 0.0 thru 100.0% and
    //a Roll angle -ROLL_LIMIT to ROLL_LIMIT degrees
    if(zero_mode == 0)
    {
        if(period4 > rm + 5)
        {
            roll_pc = ((ROLL_H + period4 - (2.0 * rm)) / (ROLL_H - rm)) * 50.0;
            IC_ROLL = (PI * ((roll_pc - 50.0) / 100.0))/(90.0/ROLL_LIMIT);
        }
        
        else if(period4 < rm - 5)
        {
            roll_pc = ((period4 - ROLL_L) / (rm-ROLL_L)) * 50.0;
            IC_ROLL = (-1.0 * PI * ((50.0 - roll_pc) / 100.0))/(90.0/ROLL_LIMIT);
        }
        
        else
        {
            roll_pc = 50.0;
            IC_ROLL = 0.0;
        }
    }

    ReadCapture4(garbage); //clear any remaining capture values
}